From 6056a930c4c0834a775c73b94777a0f5fa221c1e Mon Sep 17 00:00:00 2001 From: michaeljguarino Date: Thu, 15 Oct 2026 15:19:53 -0400 Subject: [PATCH 1/7] Slight tweaks mostly ui/ux tweaks, nothing big --- .../ai/chatbot/useResizeableChatPane.tsx | 19 +++++++++++---- .../components/cd/cluster/pod/PodEvents.tsx | 2 +- .../src/components/cd/cluster/pod/PodInfo.tsx | 2 +- .../src/components/cd/cluster/pod/PodRaw.tsx | 5 +++- .../components/cd/cluster/pod/PodShell.tsx | 5 +++- .../cd/pipelines/job/PipelineJobLogs.tsx | 5 +++- .../cd/pipelines/job/PipelineJobPods.tsx | 5 +++- .../cd/pipelines/job/PipelineJobStatus.tsx | 2 +- .../policies/policy/PolicyDefinition.tsx | 2 +- .../vulnerabilities/VulnReportDetails.tsx | 2 +- .../settings/ai/AISettingsAIInsights.tsx | 2 +- .../settings/ai/AISettingsModelRouting.tsx | 2 +- .../settings/ai/AISettingsProvider.tsx | 2 +- .../global/GlobalSettingsRepositories.tsx | 2 +- .../settings/global/GlobalSettingsSMTP.tsx | 2 +- .../workbenches/workbench/Workbench.tsx | 16 ++++++------- .../workbenches/workbench/WorkbenchLaunch.tsx | 2 +- .../workbench/WorkbenchSidebarSlot.tsx | 16 ++++++++++++- .../workbench/files/WorkbenchFileTree.tsx | 24 +++++++++++++++---- .../workbench/files/WorkbenchFileViewer.tsx | 13 ++++++++-- .../workbench/job/WorkbenchJob.tsx | 1 - .../monitoring/WorkbenchMonitoring.tsx | 2 +- js/design-system/src/components/SubTab.tsx | 4 ---- 23 files changed, 96 insertions(+), 41 deletions(-) diff --git a/js/console/src/components/ai/chatbot/useResizeableChatPane.tsx b/js/console/src/components/ai/chatbot/useResizeableChatPane.tsx index 814985fa0e..37cf960f2e 100644 --- a/js/console/src/components/ai/chatbot/useResizeableChatPane.tsx +++ b/js/console/src/components/ai/chatbot/useResizeableChatPane.tsx @@ -5,16 +5,24 @@ import { useCallback, useState } from 'react' const STORAGE_KEY = 'chatbot-panel-width' +export type ResizablePaneOptions = { + storageKey?: string + // the pane edge the drag handle sits on + handleEdge?: 'left' | 'right' +} + export function useResizablePane( minWidthPx: number, maxWidthVw: number, - initialWidthVw?: number + initialWidthVw?: number, + { storageKey = STORAGE_KEY, handleEdge = 'left' }: ResizablePaneOptions = {} ) { const [isDragging, setIsDragging] = useState(false) const [dragStart, setDragStart] = useState({ x: 0, width: 0 }) + const direction = handleEdge === 'left' ? -1 : 1 const [calculatedPanelWidth, setCalculatedPanelWidthState] = - usePersistedState(STORAGE_KEY, minWidthPx, 1000) + usePersistedState(storageKey, minWidthPx, 1000) const setPanelWidth = useCallback( (newWidth: number) => setCalculatedPanelWidthState( @@ -55,14 +63,17 @@ export function useResizablePane( } const handlePointerMove = (e: React.PointerEvent) => { - if (isDragging) setPanelWidth(dragStart.width + (dragStart.x - e.clientX)) + if (isDragging) + setPanelWidth(dragStart.width + direction * (e.clientX - dragStart.x)) } const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') { e.preventDefault() e.stopPropagation() - setPanelWidth(calculatedPanelWidth + (e.key === 'ArrowLeft' ? 10 : -10)) + setPanelWidth( + calculatedPanelWidth + direction * (e.key === 'ArrowRight' ? 10 : -10) + ) } } diff --git a/js/console/src/components/cd/cluster/pod/PodEvents.tsx b/js/console/src/components/cd/cluster/pod/PodEvents.tsx index 4f299fd578..f29700e412 100644 --- a/js/console/src/components/cd/cluster/pod/PodEvents.tsx +++ b/js/console/src/components/cd/cluster/pod/PodEvents.tsx @@ -9,7 +9,7 @@ export function PodEvents() { const { pod } = useOutletContext() as { pod: Pod } return ( - + ) diff --git a/js/console/src/components/cd/cluster/pod/PodInfo.tsx b/js/console/src/components/cd/cluster/pod/PodInfo.tsx index 657836e6b3..1252e3a4e5 100644 --- a/js/console/src/components/cd/cluster/pod/PodInfo.tsx +++ b/js/console/src/components/cd/cluster/pod/PodInfo.tsx @@ -93,7 +93,7 @@ export default function PodInfo() { const conditions = pod?.status?.conditions || [] return ( - + + {content} ) diff --git a/js/console/src/components/cd/cluster/pod/PodShell.tsx b/js/console/src/components/cd/cluster/pod/PodShell.tsx index c9e6fded94..d75103e89d 100644 --- a/js/console/src/components/cd/cluster/pod/PodShell.tsx +++ b/js/console/src/components/cd/cluster/pod/PodShell.tsx @@ -34,7 +34,10 @@ export default function PodShell() { const clusterId = serviceData?.serviceDeployment?.cluster?.id return ( - +
+ {(jobGateState === GateState.Running || jobGateState === GateState.Pending) && ( diff --git a/js/console/src/components/cd/pipelines/job/PipelineJobPods.tsx b/js/console/src/components/cd/pipelines/job/PipelineJobPods.tsx index bbe36b526d..35783acee4 100644 --- a/js/console/src/components/cd/pipelines/job/PipelineJobPods.tsx +++ b/js/console/src/components/cd/pipelines/job/PipelineJobPods.tsx @@ -58,7 +58,10 @@ export default function PipelineJobLogs() { }, [pods]) return ( - + +
({ gap: theme.spacing.small, minHeight: 0, overflow: 'hidden', - padding: `${theme.spacing.medium}px ${theme.spacing.large}px`, + padding: theme.spacing.large, })) const SimulatorBodySC = styled.div(({ theme }) => ({ diff --git a/js/console/src/components/security/vulnerabilities/VulnReportDetails.tsx b/js/console/src/components/security/vulnerabilities/VulnReportDetails.tsx index b11e12128a..36ecfb4f6a 100644 --- a/js/console/src/components/security/vulnerabilities/VulnReportDetails.tsx +++ b/js/console/src/components/security/vulnerabilities/VulnReportDetails.tsx @@ -263,5 +263,5 @@ const WrapperSC = styled.div(({ theme }) => ({ maxWidth: 1280, margin: '0 auto', overflow: 'hidden', - padding: `${theme.spacing.large}px ${theme.spacing.xxlarge}px`, + padding: theme.spacing.large, })) diff --git a/js/console/src/components/settings/ai/AISettingsAIInsights.tsx b/js/console/src/components/settings/ai/AISettingsAIInsights.tsx index ca922cba27..c93bf0c8ab 100644 --- a/js/console/src/components/settings/ai/AISettingsAIInsights.tsx +++ b/js/console/src/components/settings/ai/AISettingsAIInsights.tsx @@ -80,7 +80,7 @@ export function AISettingsAIInsights() { } return ( - + + + +
+ ({ flex: 1, minHeight: 400, overflow: 'auto', - padding: `${theme.spacing.medium}px ${theme.spacing.large}px`, + padding: theme.spacing.large, })) diff --git a/js/console/src/components/workbenches/workbench/WorkbenchSidebarSlot.tsx b/js/console/src/components/workbenches/workbench/WorkbenchSidebarSlot.tsx index 08fcc52929..8500387dab 100644 --- a/js/console/src/components/workbenches/workbench/WorkbenchSidebarSlot.tsx +++ b/js/console/src/components/workbenches/workbench/WorkbenchSidebarSlot.tsx @@ -16,7 +16,7 @@ export function WorkbenchSidebarSlot({ children }: { children: ReactNode }) { const widthRef = useRef(initialWidth) const animationRef = useRef(null) - // sidebars set their own (fixed) width, so it's measured from the content + // sidebars set their own width, so it's measured from the content useLayoutEffect(() => { const slot = ref.current if (!slot) return @@ -35,6 +35,20 @@ export function WorkbenchSidebarSlot({ children }: { children: ReactNode }) { ) }) + // resizable sidebars change width without the slot re-rendering, so track + // it to keep the next render from animating from a stale width + useLayoutEffect(() => { + const sidebar = ref.current?.firstElementChild as Nullable + if (!sidebar) return + const observer = new ResizeObserver(() => { + widthRef.current = sidebar.offsetWidth + shownSidebarWidth = sidebar.offsetWidth + }) + + observer.observe(sidebar) + return () => observer.disconnect() + }) + // a layout cleanup, as it has to run before the next tab's slot records its // width (a passive one runs after, wiping it), but after that slot has read // this one's while rendering diff --git a/js/console/src/components/workbenches/workbench/files/WorkbenchFileTree.tsx b/js/console/src/components/workbenches/workbench/files/WorkbenchFileTree.tsx index fc1c491ad7..e542aac984 100644 --- a/js/console/src/components/workbenches/workbench/files/WorkbenchFileTree.tsx +++ b/js/console/src/components/workbenches/workbench/files/WorkbenchFileTree.tsx @@ -26,8 +26,9 @@ import { import { uniq } from 'lodash' import { ReactNode, useState } from 'react' import { PAGE_TOOLBAR_HEIGHT } from 'components/layout/PageToolbar' +import { DragHandleSC } from 'components/ai/chatbot/SidePanelShared' +import { useResizablePane } from 'components/ai/chatbot/useResizeableChatPane' import styled from 'styled-components' -import { WORKBENCH_SIDEBAR_WIDTH } from '../WorkbenchSidePanel' import { ancestorDirectories } from './workbenchFilePaths' // directories and status rows get prefixed item ids so selection can tell them from files @@ -37,6 +38,10 @@ const dirItemId = (path: string) => `${DIR_PREFIX}${path}` export const WORKBENCH_FILES_HEADER_HEIGHT = PAGE_TOOLBAR_HEIGHT +// matches the evals sidebar +const FILE_TREE_MIN_WIDTH = 350 +const FILE_TREE_MAX_WIDTH_VW = 50 + export function WorkbenchFileTree({ workbenchId, selectedPath, @@ -49,6 +54,11 @@ export function WorkbenchFileTree({ onDelete: (file: WorkbenchFileFragment) => void }) { const client = useApolloClient() + const { calculatedPanelWidth, dragHandleProps, isDragging } = + useResizablePane(FILE_TREE_MIN_WIDTH, FILE_TREE_MAX_WIDTH_VW, undefined, { + storageKey: 'workbench-file-tree-width', + handleEdge: 'right', + }) const [refreshing, setRefreshing] = useState(false) const [expanded, setExpanded] = useState(() => ancestorDirectories(selectedPath).map(dirItemId) @@ -73,7 +83,7 @@ export function WorkbenchFileTree({ } return ( - + Files + ) } @@ -300,9 +316,7 @@ const WrapperSC = styled.div(({ theme }) => ({ height: '100%', minHeight: 0, overflow: 'hidden', - width: WORKBENCH_SIDEBAR_WIDTH, - maxWidth: WORKBENCH_SIDEBAR_WIDTH, - minWidth: WORKBENCH_SIDEBAR_WIDTH, + position: 'relative', })) const HeaderSC = styled.div(({ theme }) => ({ diff --git a/js/console/src/components/workbenches/workbench/files/WorkbenchFileViewer.tsx b/js/console/src/components/workbenches/workbench/files/WorkbenchFileViewer.tsx index 4064f31f21..38594917a5 100644 --- a/js/console/src/components/workbenches/workbench/files/WorkbenchFileViewer.tsx +++ b/js/console/src/components/workbenches/workbench/files/WorkbenchFileViewer.tsx @@ -210,7 +210,9 @@ export function WorkbenchFileViewer({ /> {downloadUrl && } - {body} + + {body} + ) } @@ -268,8 +270,15 @@ const ViewerBodySC = styled.div(({ theme }) => ({ padding: theme.spacing.large, })) +const ViewerContentSC = styled.div({ + height: '100%', + maxWidth: 1000, + margin: '0 auto', +}) + const MarkdownSC = styled.div({ - maxWidth: 900, + maxWidth: 800, + margin: '0 auto', }) const MediaSC = styled.div({ diff --git a/js/console/src/components/workbenches/workbench/job/WorkbenchJob.tsx b/js/console/src/components/workbenches/workbench/job/WorkbenchJob.tsx index d3e9125f57..9d16718161 100644 --- a/js/console/src/components/workbenches/workbench/job/WorkbenchJob.tsx +++ b/js/console/src/components/workbenches/workbench/job/WorkbenchJob.tsx @@ -179,5 +179,4 @@ const WrapperSC = styled.div(({ theme }) => ({ width: '100%', minWidth: 0, padding: theme.spacing.large, - paddingTop: theme.spacing.medium, })) diff --git a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoring.tsx b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoring.tsx index f9401141b5..0a47f7a860 100644 --- a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoring.tsx +++ b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoring.tsx @@ -201,5 +201,5 @@ const PaddedSC = styled.div(({ theme }) => ({ flex: 1, minHeight: 0, overflow: 'auto', - padding: `${theme.spacing.medium}px ${theme.spacing.large}px`, + padding: theme.spacing.large, })) diff --git a/js/design-system/src/components/SubTab.tsx b/js/design-system/src/components/SubTab.tsx index e47896b679..a5abec04b6 100644 --- a/js/design-system/src/components/SubTab.tsx +++ b/js/design-system/src/components/SubTab.tsx @@ -55,10 +55,6 @@ const SubTabBase = styled.button<{ ? theme.colors[parentFillLevelToActiveBG[parentFillLevel]] : 'transparent', borderRadius: theme.borderRadiuses.medium, - // box-shadow, not outline: TabList zeroes outline on :focus. - boxShadow: active - ? `inset 0 0 0 ${theme.borderWidths.default}px ${theme.colors.border}` - : undefined, '&:focus-visible': { zIndex: theme.zIndexes.base + 1, ...theme.partials.focus.default, From 3a319db532a69d7715f9a4c3dc3ffd46e2e52cbe Mon Sep 17 00:00:00 2001 From: michaeljguarino Date: Fri, 16 Oct 2026 13:34:51 -0400 Subject: [PATCH 2/7] small icon tweaks + grpc compression support --- AGENT_VERSION | 2 +- go/cloud-query/internal/server/server.go | 15 ++++++ .../components/ai/chatbot/PlrlFileChip.tsx | 26 +++++++--- .../multithread/MultiThreadViewerMessage.tsx | 2 +- .../src/components/layout/HeaderPopupMenu.tsx | 5 +- .../utils/timerange/TimeRangeControl.tsx | 12 +++-- .../common/WorkbenchTriggerCard.tsx | 11 ++-- .../WorkbenchPromptModeSelector.tsx | 8 +-- .../WorkbenchPromptSupervisionOption.tsx | 7 +-- .../workbench/job/WorkbenchJobActionCard.tsx | 20 ++----- .../job/WorkbenchJobActionDetail.tsx | 14 ++--- .../job/WorkbenchJobActivityResults.tsx | 4 +- .../job/WorkbenchJobInlineActionCard.tsx | 14 ++--- .../workbench/job/WorkbenchJobPanel.tsx | 49 ++++++++++-------- .../workbench/job/WorkbenchJobResult.tsx | 14 +---- .../job/WorkbenchJobTriggerAlert.tsx | 2 +- .../job/WorkbenchJobTriggerChatbot.tsx | 2 +- .../job/WorkbenchJobTriggerIssue.tsx | 2 +- .../monitoring/DashboardTitleMenu.tsx | 8 ++- js/console/src/generated/graphql.ts | 9 ++-- .../generated/persisted-queries/client.json | 12 ++--- js/console/src/graph/workbench.graphql | 1 + js/design-system/src/components/ListBox.tsx | 9 ++-- .../src/components/ListBoxItem.tsx | 11 +--- lib/cloud_query/client.ex | 13 +++-- priv/agent-chart.tgz | Bin 327475 -> 327592 bytes priv/agent-service-chart.tgz | Bin 328998 -> 329096 bytes test/cloud_query/client_test.exs | 11 +++- 28 files changed, 143 insertions(+), 140 deletions(-) diff --git a/AGENT_VERSION b/AGENT_VERSION index 7c3de65ec8..6244e23901 100644 --- a/AGENT_VERSION +++ b/AGENT_VERSION @@ -1 +1 @@ -v0.6.70 \ No newline at end of file +v0.6.71 \ No newline at end of file diff --git a/go/cloud-query/internal/server/server.go b/go/cloud-query/internal/server/server.go index 020570de4a..85aee2636b 100644 --- a/go/cloud-query/internal/server/server.go +++ b/go/cloud-query/internal/server/server.go @@ -5,10 +5,12 @@ import ( "crypto/tls" "fmt" "net" + "slices" "time" "google.golang.org/grpc" "google.golang.org/grpc/credentials" + "google.golang.org/grpc/encoding/gzip" "google.golang.org/grpc/keepalive" "google.golang.org/grpc/reflection" "k8s.io/klog/v2" @@ -74,6 +76,18 @@ func (in *Server) register() { klog.V(log.LogLevelVerbose).InfoS("gRPC services registered", "count", len(in.services)) } +// compressResponses gzips unary responses for clients that advertise gzip in grpc-accept-encoding. +// grpc-go otherwise only compresses responses to compressed requests. +func compressResponses(ctx context.Context, req any, _ *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (any, error) { + if supported, err := grpc.ClientSupportedCompressors(ctx); err == nil && slices.Contains(supported, gzip.Name) { + if err := grpc.SetSendCompressor(ctx, gzip.Name); err != nil { + klog.V(log.LogLevelExtended).InfoS("failed to enable response compression", "error", err) + } + } + + return handler(ctx, req) +} + func (in *Server) init() (*Server, error) { opts := []grpc.ServerOption{ grpc.KeepaliveParams(keepalive.ServerParameters{ @@ -88,6 +102,7 @@ func (in *Server) init() (*Server, error) { MinTime: 10 * time.Second, PermitWithoutStream: true, }), + grpc.ChainUnaryInterceptor(compressResponses), } // Add TLS credentials if certificates are provided diff --git a/js/console/src/components/ai/chatbot/PlrlFileChip.tsx b/js/console/src/components/ai/chatbot/PlrlFileChip.tsx index 9b955c7bea..9e85d68757 100644 --- a/js/console/src/components/ai/chatbot/PlrlFileChip.tsx +++ b/js/console/src/components/ai/chatbot/PlrlFileChip.tsx @@ -23,6 +23,7 @@ import { useState, } from 'react' import type { ExtraProps } from 'react-markdown' +import { Link } from 'react-router-dom' import { getWorkbenchFilesAbsPath } from 'routes/workbenchesRoutesConsts' import styled from 'styled-components' import { formatDateTime } from 'utils/datetime' @@ -181,17 +182,30 @@ function FileTooltipContent({ gap="small" > {details.join(' ยท ')} - {downloadUrl && ( + - )} + {downloadUrl && ( + + )} + ))} diff --git a/js/console/src/components/ai/chatbot/multithread/MultiThreadViewerMessage.tsx b/js/console/src/components/ai/chatbot/multithread/MultiThreadViewerMessage.tsx index cbbe5423fa..f0d3635b5b 100644 --- a/js/console/src/components/ai/chatbot/multithread/MultiThreadViewerMessage.tsx +++ b/js/console/src/components/ai/chatbot/multithread/MultiThreadViewerMessage.tsx @@ -198,7 +198,7 @@ export function SimpleToolCall({ transparent maxOutputHeight={standaloneCommand && !isPending ? undefined : 240} collapsedOutputLines={ - standaloneCommand && !isPending ? 1 : undefined + standaloneCommand && !isPending ? 5 : undefined } ansiOutput /> diff --git a/js/console/src/components/layout/HeaderPopupMenu.tsx b/js/console/src/components/layout/HeaderPopupMenu.tsx index 415bf26985..f4a1cdd81d 100644 --- a/js/console/src/components/layout/HeaderPopupMenu.tsx +++ b/js/console/src/components/layout/HeaderPopupMenu.tsx @@ -2,7 +2,7 @@ import { Card, CardProps } from '@pluralsh/design-system' import { useKeyDown } from '@react-hooks-library/core' import { animated, useTransition } from '@react-spring/web' import { Dispatch, ReactNode, SetStateAction } from 'react' -import styled, { useTheme } from 'styled-components' +import styled from 'styled-components' export function SimplePopupMenu({ isOpen, @@ -18,7 +18,6 @@ export function SimplePopupMenu({ linkStyles?: boolean children: ReactNode } & CardProps) { - const theme = useTheme() useKeyDown(['Escape'], () => setIsOpen(false)) const transitions = useTransition(isOpen ? [true] : [], { @@ -36,7 +35,7 @@ export function SimplePopupMenu({ style={styles} > diff --git a/js/console/src/components/utils/timerange/TimeRangeControl.tsx b/js/console/src/components/utils/timerange/TimeRangeControl.tsx index 324272118e..ec832abf4b 100644 --- a/js/console/src/components/utils/timerange/TimeRangeControl.tsx +++ b/js/console/src/components/utils/timerange/TimeRangeControl.tsx @@ -246,8 +246,12 @@ const DurationChipSC = styled.span(({ theme }) => ({ })) const MenuSC = styled.div(({ theme }) => ({ - backgroundColor: theme.colors['fill-two'], - border: theme.borders['fill-two'], + backgroundColor: + theme.mode === 'dark' ? theme.colors['fill-one'] : theme.colors['fill-two'], + border: + theme.mode === 'dark' + ? theme.borders['fill-one'] + : theme.borders['fill-two'], borderRadius: theme.borderRadiuses.large, boxShadow: theme.boxShadows.moderate, display: 'flex', @@ -272,7 +276,9 @@ const MenuItemSC = styled.div<{ $highlighted: boolean }>( ...theme.partials.text.body2, alignItems: 'center', backgroundColor: $highlighted - ? theme.colors['fill-two-hover'] + ? theme.colors[ + theme.mode === 'dark' ? 'fill-one-hover' : 'fill-two-hover' + ] : 'transparent', color: theme.colors.text, cursor: 'pointer', diff --git a/js/console/src/components/workbenches/common/WorkbenchTriggerCard.tsx b/js/console/src/components/workbenches/common/WorkbenchTriggerCard.tsx index 4e29d097a7..bc07f0f8df 100644 --- a/js/console/src/components/workbenches/common/WorkbenchTriggerCard.tsx +++ b/js/console/src/components/workbenches/common/WorkbenchTriggerCard.tsx @@ -12,16 +12,11 @@ export const TriggerCardSC = styled.div(({ theme }) => ({ backgroundColor: theme.colors['fill-zero'], })) -export const TriggerCardIconWrapperSC = styled.div(({ theme }) => ({ - width: 36, - height: 36, - minWidth: 36, +export const TriggerCardIconWrapperSC = styled.div({ display: 'flex', alignItems: 'center', - justifyContent: 'center', - borderRadius: theme.borderRadiuses.medium, - border: theme.borders.input, -})) + flexShrink: 0, +}) export const TriggerAccordionSC = styled(Accordion)({ background: 'none', diff --git a/js/console/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptModeSelector.tsx b/js/console/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptModeSelector.tsx index d593de23c3..8126079542 100644 --- a/js/console/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptModeSelector.tsx +++ b/js/console/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptModeSelector.tsx @@ -19,14 +19,14 @@ export function workbenchPromptPanelSurfaces(theme: DefaultTheme) { return { panelBackground: isLight ? theme.colors['fill-zero'] - : theme.colors['fill-two'], + : theme.colors['fill-one'], detailBackground: isLight ? theme.colors['fill-zero-hover'] - : theme.colors['fill-two-selected'], + : theme.colors['fill-one-selected'], modeItemBackground: isLight ? theme.colors['fill-zero-selected'] - : theme.colors['fill-two-hover'], - panelBorder: isLight ? theme.borders.input : theme.borders['fill-two'], + : theme.colors['fill-one-hover'], + panelBorder: isLight ? theme.borders.input : theme.borders['fill-one'], } } diff --git a/js/console/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptSupervisionOption.tsx b/js/console/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptSupervisionOption.tsx index f1cce02056..f07e60baaa 100644 --- a/js/console/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptSupervisionOption.tsx +++ b/js/console/src/components/workbenches/workbench/WorkbenchPromptModeSelector/WorkbenchPromptSupervisionOption.tsx @@ -35,12 +35,7 @@ export function WorkbenchPromptSupervisionOption({ backgroundColor: 'unset', cursor: 'pointer', textAlign: 'left', - '&:hover': { - backgroundColor: - theme.mode === 'light' - ? modeItemBackground - : theme.colors['fill-three-hover'], - }, + '&:hover': { backgroundColor: modeItemBackground }, }} >
e.stopPropagation()}> diff --git a/js/console/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx b/js/console/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx index 05ec0f135b..2ebb36d7e1 100644 --- a/js/console/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx +++ b/js/console/src/components/workbenches/workbench/job/WorkbenchJobActionCard.tsx @@ -1,9 +1,4 @@ -import { - Button, - Flex, - IconFrame, - KubernetesIcon, -} from '@pluralsh/design-system' +import { Button, Flex, KubernetesIcon } from '@pluralsh/design-system' import { StatusAccentFrameSC } from 'components/utils/StatusAccentFrame' import { StackedText } from 'components/utils/table/StackedText' import { WorkbenchJobActionFragment } from 'generated/graphql' @@ -39,16 +34,9 @@ export function WorkbenchJobActionCard({ gap="small" css={{ minWidth: 0, flex: 1 }} > - } - css={{ - flexShrink: 0, - border: theme.borders['fill-two'], - backgroundColor: 'transparent', - }} - /> + + {icon ?? } + - } - css={{ - flexShrink: 0, - border: theme.borders['fill-two'], - backgroundColor: 'transparent', - }} - /> + + {icon ?? } + []> fullWidth?: boolean } & ComponentPropsWithRef) { + const { mode } = useTheme() const workbenchId = useContext(WorkbenchFileContext) const [isExpanded, setIsExpanded] = useState(false) const [showActions, setShowActions] = useState(false) @@ -146,6 +147,7 @@ export function ExpandableUserPrompt({ onMouseLeave={() => setShowActions(false)} > - } - css={{ - flexShrink: 0, - border: theme.borders.default, - backgroundColor: 'transparent', - }} - /> + + {icon ?? } + - - {selectedTab === 'Result' && - (isLoading || hasWorkbenchJobResultContent(job)) && ( - + + {selectedTab === 'Result' && + (isLoading || hasWorkbenchJobResultContent(job)) && ( + + )} + {selectedTab === 'Pull requests' && job?.id && ( + )} - {selectedTab === 'Pull requests' && job?.id && ( - + )} + - )} - {selectedTab === 'Usage' && job?.usage && ( - - )} - - + + ) diff --git a/js/console/src/components/workbenches/workbench/job/WorkbenchJobResult.tsx b/js/console/src/components/workbenches/workbench/job/WorkbenchJobResult.tsx index 44637977af..53fe27bc3a 100644 --- a/js/console/src/components/workbenches/workbench/job/WorkbenchJobResult.tsx +++ b/js/console/src/components/workbenches/workbench/job/WorkbenchJobResult.tsx @@ -157,12 +157,7 @@ export function WorkbenchJobPrs({ gap="medium" > } - /> - } + icon={} first={Generated pull requests} /> {generatedPrs.map((pr) => ( @@ -207,12 +202,7 @@ export function WorkbenchJobPrs({ } > } - /> - } + icon={} first={ Draft pull requests waiting for approvals } diff --git a/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerAlert.tsx b/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerAlert.tsx index 81d6ae2887..267dd34319 100644 --- a/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerAlert.tsx +++ b/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerAlert.tsx @@ -41,7 +41,7 @@ export function WorkbenchJobTriggerAlert({ trigger={ diff --git a/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerChatbot.tsx b/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerChatbot.tsx index a6b29ff942..0524f81931 100644 --- a/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerChatbot.tsx +++ b/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerChatbot.tsx @@ -37,7 +37,7 @@ export function WorkbenchJobTriggerChatbot({ trigger={ diff --git a/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerIssue.tsx b/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerIssue.tsx index 58b8e9d156..86e609fe28 100644 --- a/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerIssue.tsx +++ b/js/console/src/components/workbenches/workbench/job/WorkbenchJobTriggerIssue.tsx @@ -61,7 +61,7 @@ export function WorkbenchJobTriggerIssue({ trigger={ diff --git a/js/console/src/components/workbenches/workbench/monitoring/DashboardTitleMenu.tsx b/js/console/src/components/workbenches/workbench/monitoring/DashboardTitleMenu.tsx index 2a45a77cec..0cbd59d39b 100644 --- a/js/console/src/components/workbenches/workbench/monitoring/DashboardTitleMenu.tsx +++ b/js/console/src/components/workbenches/workbench/monitoring/DashboardTitleMenu.tsx @@ -109,8 +109,12 @@ const CaretSC = styled(CaretDownIcon)<{ $open: boolean }>(({ $open }) => ({ })) const PanelSC = styled.div(({ theme }) => ({ - backgroundColor: theme.colors['fill-two'], - border: theme.borders['fill-two'], + backgroundColor: + theme.mode === 'dark' ? theme.colors['fill-one'] : theme.colors['fill-two'], + border: + theme.mode === 'dark' + ? theme.borders['fill-one'] + : theme.borders['fill-two'], borderRadius: theme.borderRadiuses.large, boxShadow: theme.boxShadows.moderate, display: 'flex', diff --git a/js/console/src/generated/graphql.ts b/js/console/src/generated/graphql.ts index 8b0a98aeb6..4a09893920 100644 --- a/js/console/src/generated/graphql.ts +++ b/js/console/src/generated/graphql.ts @@ -23669,7 +23669,7 @@ export type WorkbenchJobUsageFragment = { __typename?: 'WorkbenchJobUsage', cach export type WorkbenchJobTinyFragment = { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, queuedPromptCount: number, queuedPromptSummary: { __typename?: 'QueuedPromptSummary', readyCount: number, pendingCount: number, nextAt?: string | null }, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputTokens?: number | null, outputTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null } | null, issue?: { __typename?: 'Issue', id: string, status: IssueStatus, url: string } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null } | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null }; -export type WorkbenchJobFragment = { __typename?: 'WorkbenchJob', updatedAt?: string | null, id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, queuedPromptCount: number, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, group?: string | null, version: string, kind: string, name: string, namespace?: string | null, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, group?: string | null, version?: string | null, kind: string, name: string, namespace?: string | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, queuedPromptSummary: { __typename?: 'QueuedPromptSummary', readyCount: number, pendingCount: number, nextAt?: string | null }, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null }; +export type WorkbenchJobFragment = { __typename?: 'WorkbenchJob', updatedAt?: string | null, id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, queuedPromptCount: number, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, filesystemEnabled?: boolean | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, group?: string | null, version: string, kind: string, name: string, namespace?: string | null, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, group?: string | null, version?: string | null, kind: string, name: string, namespace?: string | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, queuedPromptSummary: { __typename?: 'QueuedPromptSummary', readyCount: number, pendingCount: number, nextAt?: string | null }, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null }; export type WorkbenchEvalResultRowFragment = { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, prompt?: string | null, insertedAt?: string | null, startedAt?: string | null, completedAt?: string | null } | null }; @@ -24002,7 +24002,7 @@ export type WorkbenchJobQueryVariables = Exact<{ }>; -export type WorkbenchJobQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', updatedAt?: string | null, id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, queuedPromptCount: number, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, group?: string | null, version: string, kind: string, name: string, namespace?: string | null, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, group?: string | null, version?: string | null, kind: string, name: string, namespace?: string | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, queuedPromptSummary: { __typename?: 'QueuedPromptSummary', readyCount: number, pendingCount: number, nextAt?: string | null }, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; +export type WorkbenchJobQuery = { __typename?: 'RootQueryType', workbenchJob?: { __typename?: 'WorkbenchJob', updatedAt?: string | null, id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, queuedPromptCount: number, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, filesystemEnabled?: boolean | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, group?: string | null, version: string, kind: string, name: string, namespace?: string | null, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, group?: string | null, version?: string | null, kind: string, name: string, namespace?: string | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, queuedPromptSummary: { __typename?: 'QueuedPromptSummary', readyCount: number, pendingCount: number, nextAt?: string | null }, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; export type WorkbenchJobMetricsToolQueryVariables = Exact<{ id: Scalars['ID']['input']; @@ -24197,7 +24197,7 @@ export type WorkbenchEvalSkillMutationVariables = Exact<{ }>; -export type WorkbenchEvalSkillMutation = { __typename?: 'RootMutationType', workbenchEvalSkill?: { __typename?: 'WorkbenchJob', updatedAt?: string | null, id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, queuedPromptCount: number, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, group?: string | null, version: string, kind: string, name: string, namespace?: string | null, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, group?: string | null, version?: string | null, kind: string, name: string, namespace?: string | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, queuedPromptSummary: { __typename?: 'QueuedPromptSummary', readyCount: number, pendingCount: number, nextAt?: string | null }, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; +export type WorkbenchEvalSkillMutation = { __typename?: 'RootMutationType', workbenchEvalSkill?: { __typename?: 'WorkbenchJob', updatedAt?: string | null, id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, queuedPromptCount: number, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, filesystemEnabled?: boolean | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, group?: string | null, version: string, kind: string, name: string, namespace?: string | null, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, group?: string | null, version?: string | null, kind: string, name: string, namespace?: string | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, queuedPromptSummary: { __typename?: 'QueuedPromptSummary', readyCount: number, pendingCount: number, nextAt?: string | null }, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; export type DeleteWorkbenchMutationVariables = Exact<{ id: Scalars['ID']['input']; @@ -24234,7 +24234,7 @@ export type CreateWorkbenchJobMutationVariables = Exact<{ }>; -export type CreateWorkbenchJobMutation = { __typename?: 'RootMutationType', createWorkbenchJob?: { __typename?: 'WorkbenchJob', updatedAt?: string | null, id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, queuedPromptCount: number, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, group?: string | null, version: string, kind: string, name: string, namespace?: string | null, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, group?: string | null, version?: string | null, kind: string, name: string, namespace?: string | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, queuedPromptSummary: { __typename?: 'QueuedPromptSummary', readyCount: number, pendingCount: number, nextAt?: string | null }, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; +export type CreateWorkbenchJobMutation = { __typename?: 'RootMutationType', createWorkbenchJob?: { __typename?: 'WorkbenchJob', updatedAt?: string | null, id: string, prompt?: string | null, status: WorkbenchJobStatus, error?: string | null, insertedAt?: string | null, queuedPromptCount: number, usage?: { __typename?: 'WorkbenchJobUsage', cachedTokens?: number | null, inputCost?: number | null, inputTokens?: number | null, outputCost?: number | null, outputTokens?: number | null, reasoningTokens?: number | null, totalCost?: number | null, totalTokens?: number | null } | null, workbench?: { __typename?: 'Workbench', id: string, name: string, filesystemEnabled?: boolean | null, tools?: Array<{ __typename?: 'WorkbenchTool', id: string, name: string, tool: WorkbenchToolType, categories?: Array | null, approval?: boolean | null, cloudConnection?: { __typename?: 'CloudConnection', id: string, name: string, provider: Provider } | null, mcpServer?: { __typename?: 'McpServer', id: string, name: string, url: string } | null } | null> | null } | null, alert?: { __typename?: 'Alert', id: string, state: AlertState, url?: string | null, title?: string | null, message?: string | null, type: ObservabilityWebhookType, severity: AlertSeverity, fingerprint?: string | null, annotations?: Record | null, updatedAt?: string | null, tags?: Array<{ __typename?: 'Tag', id: string, name: string, value: string } | null> | null, insight?: { __typename?: 'AiInsight', id: string, text?: string | null, summary?: string | null, sha?: string | null, freshness?: InsightFreshness | null, updatedAt?: string | null, insertedAt?: string | null, error?: Array<{ __typename?: 'ServiceError', message: string, source: string } | null> | null, evidence?: Array<{ __typename?: 'AiInsightEvidence', id: string, type: EvidenceType, insertedAt?: string | null, updatedAt?: string | null, logs?: { __typename?: 'LogsEvidence', clusterId?: string | null, serviceId?: string | null, line?: string | null, lines?: Array<{ __typename?: 'LogLine', log?: string | null, timestamp?: string | null, facets?: Array<{ __typename?: 'LogFacet', key: string, value?: string | null } | null> | null } | null> | null } | null, pullRequest?: { __typename?: 'PullRequestEvidence', contents?: string | null, filename?: string | null, patch?: string | null, repo?: string | null, sha?: string | null, title?: string | null, url?: string | null } | null, alert?: { __typename?: 'AlertEvidence', alertId?: string | null, title?: string | null, resolution?: string | null } | null, knowledge?: { __typename?: 'KnowledgeEvidence', name?: string | null, observations?: Array | null, type?: string | null } | null } | null> | null, cluster?: { __typename?: 'Cluster', id: string, name: string, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', cloud: string } | null } | null, clusterInsightComponent?: { __typename?: 'ClusterInsightComponent', id: string, group?: string | null, version: string, kind: string, name: string, namespace?: string | null, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null, serviceComponent?: { __typename?: 'ServiceComponent', id: string, group?: string | null, version?: string | null, kind: string, name: string, namespace?: string | null, service?: { __typename?: 'ServiceDeployment', id: string, name: string, cluster?: { __typename?: 'Cluster', id: string, name: string, handle?: string | null, distro?: ClusterDistro | null, provider?: { __typename?: 'ClusterProvider', name: string, cloud: string } | null } | null } | null } | null, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string, type: StackType } | null, stackRun?: { __typename?: 'StackRun', id: string, message?: string | null, type: StackType, stack?: { __typename?: 'InfrastructureStack', id?: string | null, name: string } | null } | null, alert?: { __typename?: 'Alert', id: string, title?: string | null, message?: string | null } | null } | null, resolution?: { __typename?: 'AlertResolution', resolution: string } | null, workbench?: { __typename?: 'Workbench', id: string } | null, workbenchJob?: { __typename?: 'WorkbenchJob', id: string, status: WorkbenchJobStatus } | null } | null, issue?: { __typename?: 'Issue', id: string, title: string, externalId: string, insertedAt?: string | null, status: IssueStatus, url: string, provider: IssueWebhookProvider } | null, result?: { __typename?: 'WorkbenchJobResult', id: string, conclusion?: string | null, workingTheory?: string | null, criticism?: string | null, topology?: string | null, todos?: Array<{ __typename?: 'WorkbenchJobResultTodo', name?: string | null, description?: string | null, done?: boolean | null } | null> | null, canvas?: Array<{ __typename?: 'WorkbenchCanvasBlock', identifier?: string | null, type?: WorkbenchCanvasBlockType | null, layout?: { __typename?: 'WorkbenchCanvasBlockLayout', x?: number | null, y?: number | null, w?: number | null, h?: number | null } | null, content?: { __typename?: 'WorkbenchCanvasBlockContent', markdown?: string | null, metrics?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, logs?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, traces?: { __typename?: 'WorkbenchCanvasToolGraph', title?: string | null, summary?: string | null, query?: { __typename?: 'WorkbenchToolQueryData', toolName?: string | null, toolArgs?: Record | null, summary?: string | null } | null } | null, pie?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null, bar?: { __typename?: 'WorkbenchCanvasBlockGraph', title?: string | null, data?: Array<{ __typename?: 'WorkbenchCanvasDataPoint', label?: string | null, value?: number | null } | null> | null } | null } | null } | null> | null } | null, evalResult?: { __typename?: 'WorkbenchEvalResult', id: string, grade?: number | null, feedback?: { __typename?: 'WorkbenchEvalFeedback', summary?: string | null, prompt?: string | null, result?: string | null, logic?: string | null } | null } | null, queuedPromptSummary: { __typename?: 'QueuedPromptSummary', readyCount: number, pendingCount: number, nextAt?: string | null }, modes?: { __typename?: 'WorkbenchJobModes', budget?: { __typename?: 'WorkbenchJobBudget', cost?: number | null, tokens?: number | null } | null } | null, user?: { __typename?: 'User', id: string, name: string, profile?: string | null } | null, pullRequests?: Array<{ __typename?: 'PullRequest', patch?: string | null, id: string, url: string, title?: string | null, creator?: string | null, status?: PrStatus | null, insertedAt?: string | null, updatedAt?: string | null } | null> | null, chatbotMessage?: { __typename?: 'ChatbotMessage', id: string, channel?: string | null, message?: string | null, chatConnection?: { __typename?: 'ChatProviderConnection', id: string, name: string, type: ChatProviderConnectionType } | null } | null } | null }; export type CancelWorkbenchJobMutationVariables = Exact<{ jobId: Scalars['ID']['input']; @@ -30857,6 +30857,7 @@ export const WorkbenchJobFragmentDoc = gql` workbench { id name + filesystemEnabled tools { ...WorkbenchToolTiny } diff --git a/js/console/src/generated/persisted-queries/client.json b/js/console/src/generated/persisted-queries/client.json index ee8c11a26d..f6418320c4 100644 --- a/js/console/src/generated/persisted-queries/client.json +++ b/js/console/src/generated/persisted-queries/client.json @@ -2152,10 +2152,10 @@ "name": "WorkbenchTriggersSummary", "body": "query WorkbenchTriggersSummary($id: ID!) {\n workbench(id: $id) {\n id\n name\n description\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n crons(first: 30) {\n edges {\n node {\n id\n crontab\n prompt\n nextRunAt\n __typename\n }\n __typename\n }\n __typename\n }\n webhooks(first: 30) {\n edges {\n node {\n id\n name\n prompt\n webhook {\n id\n name\n type\n url\n __typename\n }\n issueWebhook {\n ...IssueWebhook\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n chatbots(first: 30) {\n edges {\n node {\n id\n channel\n chatConnection {\n ...ChatProviderConnection\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment IssueWebhook on IssueWebhook {\n id\n name\n provider\n url\n insertedAt\n updatedAt\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}\n\nfragment ChatProviderConnection on ChatProviderConnection {\n id\n name\n type\n configuration {\n slack {\n botId\n __typename\n }\n teams {\n clientId\n tenantId\n __typename\n }\n __typename\n }\n readBindings {\n ...PolicyBinding\n __typename\n }\n writeBindings {\n ...PolicyBinding\n __typename\n }\n __typename\n}" }, - "sha256:d4fb70860f103730fe1687537e6022f3d48695ca7a125ab305a7e130fa0190d4": { + "sha256:5833b25e5d960799894ffd06c93ac4a348013de2873e117bdc80a57ef49731b7": { "type": "query", "name": "WorkbenchJob", - "body": "query WorkbenchJob($id: ID!) {\n workbenchJob(id: $id) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n updatedAt\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n queuedPromptCount\n queuedPromptSummary {\n readyCount\n pendingCount\n nextAt\n __typename\n }\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n cachedTokens\n inputTokens\n outputTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n group\n version\n kind\n name\n namespace\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n group\n version\n kind\n name\n namespace\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" + "body": "query WorkbenchJob($id: ID!) {\n workbenchJob(id: $id) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n updatedAt\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n filesystemEnabled\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n queuedPromptCount\n queuedPromptSummary {\n readyCount\n pendingCount\n nextAt\n __typename\n }\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n cachedTokens\n inputTokens\n outputTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n group\n version\n kind\n name\n namespace\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n group\n version\n kind\n name\n namespace\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, "sha256:7bbf8dc92479eaf54d2eae5bfcce896824482ef79c88df0fc1be12c64b4158ba": { "type": "query", @@ -2277,10 +2277,10 @@ "name": "DeleteWorkbenchEval", "body": "mutation DeleteWorkbenchEval($id: ID!) {\n deleteWorkbenchEval(id: $id) {\n id\n __typename\n }\n}" }, - "sha256:68fa52b14915e21fc9e8840ae06204e9333f7253a5a718854ef6809f1a2730a6": { + "sha256:86fa8ae8bdc290c360fac6d273f03db5806489f1c68a4e9654f0b99498de4a80": { "type": "mutation", "name": "WorkbenchEvalSkill", - "body": "mutation WorkbenchEvalSkill($id: ID!, $prompt: String) {\n workbenchEvalSkill(id: $id, prompt: $prompt) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n updatedAt\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n queuedPromptCount\n queuedPromptSummary {\n readyCount\n pendingCount\n nextAt\n __typename\n }\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n cachedTokens\n inputTokens\n outputTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n group\n version\n kind\n name\n namespace\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n group\n version\n kind\n name\n namespace\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" + "body": "mutation WorkbenchEvalSkill($id: ID!, $prompt: String) {\n workbenchEvalSkill(id: $id, prompt: $prompt) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n updatedAt\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n filesystemEnabled\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n queuedPromptCount\n queuedPromptSummary {\n readyCount\n pendingCount\n nextAt\n __typename\n }\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n cachedTokens\n inputTokens\n outputTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n group\n version\n kind\n name\n namespace\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n group\n version\n kind\n name\n namespace\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, "sha256:7b6b450c0f286e31340ab42bfb2ab3d7137c56ed0885c120769c51d006ac14e2": { "type": "mutation", @@ -2302,10 +2302,10 @@ "name": "DeleteWorkbenchTool", "body": "mutation DeleteWorkbenchTool($id: ID!) {\n deleteWorkbenchTool(id: $id) {\n id\n __typename\n }\n}" }, - "sha256:2e2a33bb6268dabc887e7ff6d48130c0c0ed6e4d433f25b6a9667e1984887847": { + "sha256:1a7001824fb32470ee1ecd07e65368275c9aa4bb4dd8d4c9e3abd68e52fff901": { "type": "mutation", "name": "CreateWorkbenchJob", - "body": "mutation CreateWorkbenchJob($workbenchId: ID!, $attributes: WorkbenchJobAttributes!) {\n createWorkbenchJob(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n updatedAt\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n queuedPromptCount\n queuedPromptSummary {\n readyCount\n pendingCount\n nextAt\n __typename\n }\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n cachedTokens\n inputTokens\n outputTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n group\n version\n kind\n name\n namespace\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n group\n version\n kind\n name\n namespace\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" + "body": "mutation CreateWorkbenchJob($workbenchId: ID!, $attributes: WorkbenchJobAttributes!) {\n createWorkbenchJob(workbenchId: $workbenchId, attributes: $attributes) {\n ...WorkbenchJob\n __typename\n }\n}\n\nfragment WorkbenchJob on WorkbenchJob {\n ...WorkbenchJobTiny\n updatedAt\n usage {\n ...WorkbenchJobUsage\n __typename\n }\n workbench {\n id\n name\n filesystemEnabled\n tools {\n ...WorkbenchToolTiny\n __typename\n }\n __typename\n }\n alert {\n ...Alert\n __typename\n }\n issue {\n id\n title\n externalId\n insertedAt\n status\n url\n provider\n __typename\n }\n result {\n ...WorkbenchJobResult\n __typename\n }\n evalResult {\n feedback {\n summary\n prompt\n result\n logic\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobTiny on WorkbenchJob {\n id\n prompt\n status\n error\n insertedAt\n queuedPromptCount\n queuedPromptSummary {\n readyCount\n pendingCount\n nextAt\n __typename\n }\n usage {\n ...WorkbenchJobUsageTiny\n __typename\n }\n modes {\n budget {\n cost\n tokens\n __typename\n }\n __typename\n }\n user {\n id\n name\n profile\n __typename\n }\n workbench {\n id\n name\n __typename\n }\n alert {\n id\n state\n url\n __typename\n }\n issue {\n id\n status\n url\n __typename\n }\n pullRequests {\n ...WorkbenchJobPullRequest\n __typename\n }\n result {\n id\n conclusion\n __typename\n }\n evalResult {\n id\n grade\n __typename\n }\n chatbotMessage {\n id\n channel\n message\n chatConnection {\n id\n name\n type\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobUsageTiny on WorkbenchJobUsage {\n cachedTokens\n inputTokens\n outputTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchJobPullRequest on PullRequest {\n ...PullRequestBasic\n patch\n __typename\n}\n\nfragment PullRequestBasic on PullRequest {\n id\n url\n title\n creator\n status\n insertedAt\n updatedAt\n __typename\n}\n\nfragment WorkbenchJobUsage on WorkbenchJobUsage {\n cachedTokens\n inputCost\n inputTokens\n outputCost\n outputTokens\n reasoningTokens\n totalCost\n totalTokens\n __typename\n}\n\nfragment WorkbenchToolTiny on WorkbenchTool {\n id\n name\n tool\n categories\n approval\n cloudConnection {\n ...CloudConnectionTiny\n __typename\n }\n mcpServer {\n id\n name\n url\n __typename\n }\n __typename\n}\n\nfragment CloudConnectionTiny on CloudConnection {\n id\n name\n provider\n __typename\n}\n\nfragment Alert on Alert {\n id\n title\n message\n type\n severity\n state\n fingerprint\n url\n annotations\n tags {\n id\n name\n value\n __typename\n }\n insight {\n ...AiInsight\n __typename\n }\n resolution {\n ...AlertResolution\n __typename\n }\n workbench {\n id\n __typename\n }\n workbenchJob {\n id\n status\n __typename\n }\n updatedAt\n __typename\n}\n\nfragment AiInsight on AiInsight {\n id\n text\n summary\n sha\n freshness\n updatedAt\n insertedAt\n error {\n message\n source\n __typename\n }\n ...AiInsightContext\n __typename\n}\n\nfragment AiInsightContext on AiInsight {\n evidence {\n ...AiInsightEvidence\n __typename\n }\n cluster {\n id\n name\n distro\n provider {\n cloud\n __typename\n }\n __typename\n }\n clusterInsightComponent {\n id\n group\n version\n kind\n name\n namespace\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n serviceComponent {\n id\n group\n version\n kind\n name\n namespace\n service {\n id\n name\n cluster {\n ...ClusterMinimal\n __typename\n }\n __typename\n }\n __typename\n }\n stack {\n id\n name\n type\n __typename\n }\n stackRun {\n id\n message\n type\n stack {\n id\n name\n __typename\n }\n __typename\n }\n alert {\n id\n title\n message\n __typename\n }\n __typename\n}\n\nfragment AiInsightEvidence on AiInsightEvidence {\n id\n type\n logs {\n ...LogsEvidence\n __typename\n }\n pullRequest {\n ...PullRequestEvidence\n __typename\n }\n alert {\n ...AlertEvidence\n __typename\n }\n knowledge {\n ...KnowledgeEvidence\n __typename\n }\n insertedAt\n updatedAt\n __typename\n}\n\nfragment LogsEvidence on LogsEvidence {\n clusterId\n serviceId\n line\n lines {\n ...LogLine\n __typename\n }\n __typename\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}\n\nfragment PullRequestEvidence on PullRequestEvidence {\n contents\n filename\n patch\n repo\n sha\n title\n url\n __typename\n}\n\nfragment AlertEvidence on AlertEvidence {\n alertId\n title\n resolution\n __typename\n}\n\nfragment KnowledgeEvidence on KnowledgeEvidence {\n name\n observations\n type\n __typename\n}\n\nfragment ClusterMinimal on Cluster {\n id\n name\n handle\n provider {\n name\n cloud\n __typename\n }\n distro\n __typename\n}\n\nfragment AlertResolution on AlertResolution {\n resolution\n __typename\n}\n\nfragment WorkbenchJobResult on WorkbenchJobResult {\n id\n workingTheory\n criticism\n conclusion\n topology\n todos {\n ...WorkbenchJobResultTodo\n __typename\n }\n canvas {\n ...WorkbenchCanvasBlock\n __typename\n }\n __typename\n}\n\nfragment WorkbenchJobResultTodo on WorkbenchJobResultTodo {\n name\n description\n done\n __typename\n}\n\nfragment WorkbenchCanvasBlock on WorkbenchCanvasBlock {\n identifier\n type\n layout {\n x\n y\n w\n h\n __typename\n }\n content {\n markdown\n metrics {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n logs {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n traces {\n ...WorkbenchCanvasToolGraph\n __typename\n }\n pie {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n bar {\n ...WorkbenchCanvasBlockGraph\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment WorkbenchCanvasToolGraph on WorkbenchCanvasToolGraph {\n title\n summary\n query {\n ...WorkbenchToolQueryData\n __typename\n }\n __typename\n}\n\nfragment WorkbenchToolQueryData on WorkbenchToolQueryData {\n toolName\n toolArgs\n summary\n __typename\n}\n\nfragment WorkbenchCanvasBlockGraph on WorkbenchCanvasBlockGraph {\n title\n data {\n label\n value\n __typename\n }\n __typename\n}" }, "sha256:dd0eb022c0aaaa8c305761cc3b9a52731a3df2a825b3af5722f2ed293400db36": { "type": "mutation", diff --git a/js/console/src/graph/workbench.graphql b/js/console/src/graph/workbench.graphql index abab20676f..c8b019ebba 100644 --- a/js/console/src/graph/workbench.graphql +++ b/js/console/src/graph/workbench.graphql @@ -813,6 +813,7 @@ fragment WorkbenchJob on WorkbenchJob { workbench { id name + filesystemEnabled tools { ...WorkbenchToolTiny } diff --git a/js/design-system/src/components/ListBox.tsx b/js/design-system/src/components/ListBox.tsx index 286c1ffa1e..639ca3e3c5 100644 --- a/js/design-system/src/components/ListBox.tsx +++ b/js/design-system/src/components/ListBox.tsx @@ -64,13 +64,10 @@ const ListBoxCard = styled(Card)(({ theme }) => ({ background: theme.mode === 'light' ? theme.colors['fill-zero'] - : theme.colors['fill-two'], + : theme.colors['fill-one'], borderRadius: theme.borderRadiuses.medium, '.footerFixed': { - borderTop: - theme.mode === 'light' - ? theme.borders['fill-one'] - : theme.borders['fill-two'], + borderTop: theme.borders['fill-one'], }, })) @@ -79,7 +76,7 @@ type ScrollContainerProps = { } const ScrollContainer = styled.div( ({ theme, extendStyle }) => ({ - ...theme.partials.scrollBar({ fillLevel: theme.mode === 'light' ? 0 : 2 }), + ...theme.partials.scrollBar({ fillLevel: theme.mode === 'light' ? 0 : 1 }), position: 'relative', overflow: 'auto', flexShrink: 1, diff --git a/js/design-system/src/components/ListBoxItem.tsx b/js/design-system/src/components/ListBoxItem.tsx index 4f35d79be1..8a7892b8db 100644 --- a/js/design-system/src/components/ListBoxItem.tsx +++ b/js/design-system/src/components/ListBoxItem.tsx @@ -43,11 +43,7 @@ const ListBoxItemInner = styled.div>( backgroundColor: 'none', cursor: 'pointer', '&:hover': { - backgroundColor: !disabled - ? theme.mode === 'light' - ? theme.colors['fill-one-hover'] - : theme.colors['fill-two-hover'] - : 'none', + backgroundColor: !disabled ? theme.colors['fill-one-hover'] : 'none', }, '&:focus, &:focus-visible': { outline: 'none', @@ -147,10 +143,7 @@ const ListBoxFooterInner = styled.button<{ $focused?: boolean }>( width: '100%', padding: `${theme.spacing.small}px ${theme.spacing.medium}px`, '&:hover': { - backgroundColor: - theme.mode === 'light' - ? theme.colors['fill-one-hover'] - : theme.colors['fill-two-hover'], + backgroundColor: theme.colors['fill-one-hover'], }, '.children': { flexGrow: 1, diff --git a/lib/cloud_query/client.ex b/lib/cloud_query/client.ex index 2473ebd19b..a753bedda9 100644 --- a/lib/cloud_query/client.ex +++ b/lib/cloud_query/client.ex @@ -17,9 +17,14 @@ defmodule CloudQuery.Client do end end - def metrics_rpc_opts, do: [timeout: @metrics_timeout] - def cloud_query_rpc_opts, do: [timeout: @cloud_query_timeout] - def logs_rpc_opts, do: [timeout: @logs_timeout] - def lambda_rpc_opts, do: [timeout: @lambda_timeout] + def metrics_rpc_opts, do: [timeout: @metrics_timeout] ++ compression() + def cloud_query_rpc_opts, do: [timeout: @cloud_query_timeout] ++ compression() + def logs_rpc_opts, do: [timeout: @logs_timeout] ++ compression() + def lambda_rpc_opts, do: [timeout: @lambda_timeout] ++ compression() + + # only advertise gzip (via grpc-accept-encoding) so the server compresses responses, requests stay + # uncompressed so older servers without a gzip decompressor keep working. Unary only: the gun + # adapter can't decompress server-streamed messages + defp compression, do: [accepted_compressors: [GRPC.Compressor.Gzip]] end diff --git a/priv/agent-chart.tgz b/priv/agent-chart.tgz index 5c8d175cb78ed995198d98fd40088bcd8a8e4772..9b7a8bd75811312a332256f9496512d4c32ed96b 100644 GIT binary patch delta 319771 zcmV)5K*_(e{u8MG6OcWBS0uUBAdEkM^C|SB`uzcIGJ#sU+q~oPV2ZA0Tnh)N_IUc~ z=}|@~Gi4&Au%t-HUY^hX9$hW5WGo6usA@aqbJ|5lgqEwTtGnNrWC>rUgsBnFh`@@A zgVQ+{YP`g0@*ityhlhuUU%h+@|9^ORSpWaS7cXA@$I+|jU%h;P_59V>he!W$c=YP| z(ewX6hwB->yX8`0@gIi|9;?2%-$}z6{hkO(IXgy+=UX_-{GW&8uf|^=ZN)@Jf@TVS ziv+=nNQ4n1w}>*SFpCJ{Q>5kuWl1h@f(o2M4yU$KOqs%z5h0JaMu_2*9HR?(e+!{p zB*$p3R3?uP4sLIMZ^x#mv7B$2HyhA&OD!{UjBu7EG{Sm%TZ`J%KQ(ZF2d(M+FL06* zxjq8Weg2PLeD&h%`uTtP)zRksKSg_nUXv-#6NSvKqbV0?PLg!I^$cClsYFzt_P?LJ zdpnwPkz%DtjHWap`i0jdO0Xbkfd$2rgh-?~nh=y>DM^ffC{r9Qc`lG5X_jcpG2Yt3 zaZL4b#mVSjH!IQ0L=p;$_twgE*jj|bva;bQVA|e!w*g$af>`sYL zbgGGirdWcQ4oIv&(d26TfT-v|%H#lg+D0)IBvM=~_17m1VIlBR6F0qHi6YEkae^;s zOyV&*TM)5-goo&sCW(G%huC_CI71l8j6`}0Nam9atGOPUFqsR2)Eq06=82+NLaHMa zo!nA2=ea_BL4=^OUOd6k9C0-#dW~Dp&^bd~#6;+>?P~$S7)L^FBT3UN zS#CXZOFj@mA#@BD>gxOc?(AR)ESM}A~wHHf&_VeN_St6y;N>Vnn>o)5+yThr5 zL@x1+9B(~C$Xyc=9%UqziVLEDMkvM#AEUeF&*o1v^>hhSA7>=pg1H@|AAa20B6mvQ z6EU-YK0~i_p;6Ui3W{(vCvuGDT&fE_VJZ>hF&QO1!U@7GMlmP)H-$3F%uUAui}2Pn zcy%9tNscfQJW2F!!PX|2#S)Q3lG`~E1WBcV6!9b;X_8}LcgFNw0CTB1dlIK)r29mI znD_QkB(R(lxes&6vltK>29Zi5sF{=gNcSlS+=!=oFHo9Gg#^*pFFG}_@T53-O%lAkA`xe?JVr;a%sMHLi{B2n5K=THJXik57h4ETF->wouIGZt zIZtBqtIVT_NLl*zNY5R|^mj5>tPi|@?pkpDkh0me>F^l6O1In&e@Bw^HOUBz35%8= z;b0Y;9#iRFy0+KXYq7k{*%c8BBHW8xGzEf%^ugnj>J2|evw0-Olv_lR^A=Re@+7(7 z35}M==zRK~s|!ISVQLGZXXt~an&w2nFi7DUx}9@bka%hyM_On@1^+(QK*Y0uW3;`! zwH0wDc|tyFHv7M}q9m7!i1YXu?I(gR867XJYlS9o+Py&8k#!S?ENLshm9QlbQnWYZf!WVXLK{N`{Q zW^hHKTu`+<Jd_F=8{y?iycIi5%f5EjG$r znbP3a2>v)WG-yN&BR2;237(tF!Mo3# zJe}%GbZH*X5#H{^`{FWCh*yeDE&f0CH(&_R?%Gl!|HA7_J5&p$|sHr2@f!Lhly*if4o=q2<$* zRDP(<#@r6u`)*qMb@*kg@Vjk>-+dNvFr^G9^k*Vk)>3<+vaFV8mES9iwM$sf%ryq) zZL=;OR%g8WyZ@~T%Q}F+1s&Yz^X3`89+uC1VL0J-KF_jg|7EW2DV>>~Z?HUxW1#ki zo&!$g{Sq})(O5Sc+lEcff!HQSTEHvC0@(>NAD!@?q;Bs4-dWa;~c zQ48>Fmp-~7`eL{cbfMuE^pV*Qe$0 z30;-G)t4}T9MUtk@E3P&C@rZqj^V!bx*HG>=KL1kNU&7sn?sani4<{xo*%ya22GY4 zQoFZv8qLXq2tdLVCkYXInw8IZj1oSRdd5ISRDz6sV?q$mRhBCQ`a(xR?lcPw;AWhS zekOv$Zz$riVdv~2&>L?wWo{5G2#S_bLSh6uys4Id1$eBNC)Eg)I%qcBsICoOwz6R0Gw>U{AIJ&v!Z~07q zU}r*bv10&Bh&RAgS-+S^@<3sEBM)LS$!F%jqmtd_ASQ~4lrl0B1WV3F8IMO+T0a25 zq0{o65aN6)``M=i%* zFm@qdSUU2KGfm?i&0UpJ6?bAEMpu<@{Gwj*+Or0Luk1)-XWQqQn<3yjx7~w2~HH^3ZMoi!EzS1M;^++^- zAraP$jpS*CTEfbwlq9hsu0UIyv4~2vJ6Qr$UcbN6@9HxwGZO8Mx6Y?Xkc41q!DlZI zX?1c&{Zkl8a;fL3FLXV5JKG>2J7rM;Xgc+9tt;Lf{92!fz+Q7B_TOK?I*$JozPZI5 zJw!|=<4XfB^R1g_<;Q`O%LHX=injlMA36Ge z7i`9IegG>tM!)=mD2tLj?q2BFOr`r>Y1JZc?Qr7~W?3+tc)hoNhO=y3Wn#R4XUH$V zG<@=D`=yB`)y=@bto$^{7{kiwXkihQb=P^>qIJ&@0C}K6!Y?z-0tqK z+hO~y)o@h0*c+=v?v0H|zgO9OI<=kIzftwiGIF6Zov#Y#C6r!)<#^9edj->i`M+-d z->f;s*@K+HdiejN!>?-opU)4Ej$Ul||EFj*GF!!UqaZXlN6Ag}XzPZ5viKOC!dvff zwv`fv!70aEFZ*t#5*q9Nk-Z*`h}}ye63+?ziWp@vVG6y}{kTa)cpOp~%)?W+qyoSPg7BN}S({HD zG+}op8i%O+>=nI#ta$T11Z1m1d_Re368y*IF01ZYjngXtS#$bopLZZVFt4L86rPot zKY-d;|M+WN4_Z}0Ss*j2PI(ddfVN9S zaP|Er&(mYKwBLT)t`6Et2!1Sv?vF()MivdgUSHW*A^U_~f*JK)3K5#DREAJ=Z-!y_N z^-tDiw)D7g=pWe-fpWKc#^V*A|CKQer60{nl8$2U|35NLUn~8!#|o@;Y(oZY&tf?e zIU7j`7g*`GC%mAJ`-5&S2YYwD{HdSv`PXfP%!t~55Si6)YcVvdGhM;#>e2OXJu5HO zC`|EUiMAZBe6=zhVT&r>8jL@Gck<@!r|Xk9mGc1pG{>Gsl@uPuI~f;kwA)6vl$$5O z7rdr}vOLdN_g5VOMiE@`h$qMB`t+joY$Zmh3hf%uDsOiX<<)SW&Tgx(clKNIr0(g` zzS+@#TmR*$rIYr%^FY;}y3cO%NuBeme+ss;+H>dgzk1EzM^u3wAUG@Ayk zW6Q*9A+!f|b>epIQ<+cfhh1+5(2(YM;XZ=W@>M72QkzICCp9X$``X1mCPOul73$`M ztZ(zGw)}oh>Ar(Wse}m^&4z%v59?2XcUnP? z_9)`gr`34k=ZAq@Pxn0imk*d|=RA)N@5M#gJq%%{YJ72VnO%H%{nPuCcV|}@C#Pq% z^#Olemo7~MN0SBt(?2tJz0(*2J0UZF9FfjRJns07LtmX;et&*?_S4Df>4%T+uODX` zG9yug*0Y_3ET7IZwrDzr&A8yd=;9z6&hVo#+ji9>>mX(?9Wz`i z?5n)r!sZ!TVd87(Owvp(UsF*D&gu{t8{Z!+2e!$8)tn@*Wz7Pi9{^JB)Zk%)%G}9C`0LsGmDRVc zy>=P~lH)#7+=AcTFuA8AM(3JBl|=!HqLwwS%L}e!8C{o7&D7p^*T`mnJM!ucvtoEJ zr*kM?t0Z}-tYVh<@hA@F zDv@JgCt5wsEAtuK_tCF^X!6xd!XoQgm&hJJ_0?V?8qUStE^bK|DHB%W|oM=yZs1fpm^veiaa6a^BM=`Mpuss$HXv58a*E_4@ ztcFmLPtDP6+K|@G|KC^QueLt<|Hbncb^ib5CjRef+Ay)ZUHAS_3TcGc4;lVvPPU{H zl+9k-q00*Unm28e6#{)~kp8Y(-}x__*zZdR`p*BW7l$=}{om2irvA^U|AuLFYd;xhx;){2#q~RnPx& z^!)io|Mw)#p8vY)zMA-SuT8sDCj?=d`l?O3>K;7w;CIDdS5gKv7gq2E47?Yo^N45) z#xX0Z&$k+Xga7au*X7)8d;BPyjUz4ym*a@12aBWaD)8-QRrX+AMD%`p>0tjPSqi-T zd$l?m2*GZvo2BE5hc#hw#;Ns!bjVTPcZ8^~BK6|X`1qM}Ccf6t^H+gpm`~Q4=>K?5 zl9bLE7i2AC^z(l!^lG6mr0A)D3!80O#MM#-v zKs%9~lO#d2gip*dqinX11WB->3j)4WrQb1&x1J$T0aDJ;ZYIc--jUcaXaB#wG5Wxg zCE^Ue)Kfwk5s=`0yfuD(_0yFt0B94Het&v}Vk+d;ct+I${MSr>YdrZ`9Ke6w5A)f9 z{*U{AQ!dy+(a{7)H+g0%Fm8Q0mbcl~m*WY(+4^#sWOICES&KPIebyy^ zo)LC(asK^_tIE#^Rmyd*&fk@ZXegPB>T~pra7KiyhUQucXKFsHrQv@a)f{Z~jBT){ z$;@gdW7ke%yGWB)m_q(6QzysFoll`q2G~-@wXRLp1nJ5HMw~5(P)Lx7&lvsL_w8$p zfP||I565s~0({IhRqZ*&OC*RM6XmRb)SoSrU3>eTt8`HmG@nuBPEy3vG-p&T58zPH zNe<) zYzI=j-tDPLpf(}4E^b_Z;hdpUoRZ`eOY+2frFTV+^dsQ0p zt{(iWj6{_~7ZXW^J{Afq$mHEZ4P9%d1G-JHB$qat{Nv@@)#!t6tkdl;)h-Y=6~9Ym zug#QA6to`DSG_|YFW=TTR=00|xzKBiZji_s`UjuLeM5@j?~KQC9~q=3iGO9aqn6Fm z%{ud3P&V`RgzvHT)75TV-Edd>)%}c>E%u{-HH*ni-6S|P&`%RAt_Y+b+&+}sP%qu2 zo^fB8K87uwrx{k%$ig49gyZ-@AZYIn`Qkzn&G{{w0x@7JS(bp1!zZ$TIxQ#@J_H(- zk8PKOp~4wq>S~TpaWp5_*L|nqwBeJ|?&}pNoXt?2n{rE}7^Gokt~NMSp3=Roki*XT zTS)wkOeBwPRwJQ9w(@nY57%i0N71c+9C5}-1lPO0m`{!GQq#`;O$(-07r9^Bf5=KN zNU}uaP7gsB1Vl-c@g&iI)Ppjq2#z(G6C@&ZvATE!W%}gY0dZ`ET`Ege&JrwUWF#Y; z5JcixnT>*CP=cToQ^@|)GJr{)1aocxfkbmGHIJijNGz#FOGeZ!7dI&4a)s$}yE)-J zA(*W&E>Nz*>$om>l04*;zU%1EUo9GA`BV{BrcpdeOm%xZr9xSM*KojE59rFrZhHqI zd5Z7grn}791&B5#FGi5RIbV7v2vxu`O7ecSUdhM9X{gJ7lha=FHV1+PS zq8VLiz|pi3``_gfIGq_-&DETW~4@{BVrs|b~6t!$4p zKrlsNYphR3#FUHFa1M}n#tecblHAlKqsolX2;jdgi$bAP?a1rQ3UhfM{xg-3xY_&OR7&^-hA&1{4KOeBuH{bIfLgsFCU7KFeO@2_wQ9 zmM=-hg?hM1{e54jb+A-s0fo(lGLobbg_~r_R$w%Lb#@Ptx=r~7@dL+!>Zyn`6V>0x zD_nZzWx1rdk;|ZX^MyFc6*m=(cOvGwa@L!s-E0S|8W49h6XE71UQj@@9G(!jCF+%54 z!}?K)7+2_q@mmHLF+;g@8cLY2?@@!>aCNpDAh=OPGNn&R+Y}9PK1P}tL6+;5_c}<5 zX{pIO`OrPG-I&{Ao~M{WGAJXHyJswhYT#^t=8+Xocy1)AV#|7VCB;i%tC>lyWY^aA zQHt;05;jxwWAx(r*I#{eUoe@2PU1I&*)$dph1hD3CCdnaWbE_*%!+pazpB`Niw!e2 z!IH$lD7J&}TP~0*=(!JGy-kBqPq>mLI(oj3CU%#`<_wJsdilfMkK=}=P>KGyUz;a? zm9ECU#@f~?g0F`lhJ0ClpOdmmq>A`;^qmpP)K@Rt@WY8kO<9gmk8os~sb~LCbTGXX z>Hv2a@@>T3)g4OvmW|{BSb*-+1)%kGu9C zhoe9Kw152Lm!&^{-23wv_a$Uad{NOV*lO=f$3Zx3*oVuMPti4qncw0>l6~}lk-=@( z1}MVvhOC&TjnKC4s-6eD^ccoye{RRVFG%2p5P(1qJfrq;B&}pQMnGE8l=CsU!)cZf z@WE}hEW1{|qK>}m#gE+|3>N&j`@_io>r403-k*2>bKLoS@5_U|Kkt@s>&G8P1!9eV z{BrNlrDuEhL^E65EN+78sDYn#RzO+SbyH_KK`E~ z5ApgeT95zd%dhMH-_KvXe6`8{^(5_c_x}W3djzk~%e>Lo^D=Mo@YM4#1gPrQDe{sx zr?-s9D-NASX2}Zy?mVYF$y4ToQtBEYpy}tYErt7sA*qu64MH3e2K;57YS4=H&>H4=h~tYI~~JTv#l-jEq4n9cG=6>z`q>aG3OP2K5#tn^WK{Q}IKDB@Q% z-fHOXwLagGUg9x&&%vva2=l$ZMWFDKjTF_g1v&#aKNM@i!mU2tA{=PhtxMma4Rh0O zynlv4#a%|Uat}Ev&BI4=y+qK)E_se_shsQIj2>?J*#au%aUagS<1wk2q*son#_ipc z_a|@v{=d)m(cdnA&#%v#6o!{)-=ClTZ4g>#f~Q%Zd+G(eXqcdXv+%P6cO5JcwjIGX zlDjP70^IT9CR&T*f8dBPuhY+RaL9$bx80WBwFrZ}jYSuKx~-JJ@V4s$+Z0>vYAq9u z)iU`;&63{831QLvU6g$k_cGuA&3AEn@$vGlLm(#^ygR)p*dE7(`(eS5)N~^XI-?A3 z8N(yz`ig`jlJP80;K^jUNpGZX4f&fqS&^Js1kHjqgEA+xQ-Ad=ECh2OHmm(<q!N&KX z^6cNx_kggtnVGJj=$Uy--?g5_EHs!A*J!Co-To26Pj+lM5u#itt$AYloq`p#P7*mo zQ%sYF33Uwj3A`|}IhK8(znGhJ2NfR9F)q-7o0Z>xkd+Rb$>a!K5SQY<{^T-ejWNt4 zbd^UDA#nq2N9fyTppVe0W~h>Z8ka<4aR#m8G>9gh3`O&n{!DR z;w)L})y?sOAjwmLZb_1i3^yO6Tf9Vk+A@yYB8{3DWmu?AE4_t7_n}!eTe}u^Uciih z9dvp>nF%-$676d6Fi5;F;p#mgQ7uOo^GIqqL?l!4fG>zxP;z^4%f$_4vyn!|k=b>5 z0RB1$&*1;=yKqwn<$iOY|=SQ{rKhIyjcyYM#|9y(~JMjNC zxb`?c!2aB>`T^@lt-io8CvyZ>{DEzsJsDpARUCp<$!yx<6b!)HI0l#7#xZ!~82o#6 z4A#dv+&OrKGiq140lnx?nR#Mg^SmLcCWlKj=#&6e(sZa@C5lWkKF+)^6lCr)$(Ho~ zXM!(iOyYfny|b_$mQT^qb2R6s@|F?T3Z{D!b5 z8>{3FG6Hm-H)JUhWymRLrf25nHs$szia{sW*WvB zjSiv&f9Ek7NzNEiqnD#s`}!JE9Ayu(COQgkFU>;OJMi~hWV`u#}(M1(SPp(f8DA-upREh>$Cs0k3L+Sz1ROdb{o_< zsNFR^RCOQQdVh2F?)?4vvD-G=Y1>pjUR{59cZ?WE*!t#07JmP)KL0iBB6nFrBdU^B z-9uMKHAsa`V((1cXsf6a$ki`ay^r;ewrkD3OqvXs;ByXcGZhlK@@A`VVSr|#$pSjT zBa@}1Dlq-kU#f4{uLYkx+p(pkdd4eL;wFutqeydt6E$BkldUKx7%Og~rmL&rZt@G& z7Zge<%N4o*b!3ZQ_mk`>8Goo9ySi<3rbK0cTJF@;vUKZmQYpHfb4cfD-P8zT({8V%U0eW5iyl=HV4Ctv%*E*n!ToQ4X zV%k7K2KCgb14TW~933A|I9E~$oLvD{+^cXxwF@I@O|YCJ^QGZ1932%PcO=RcL~KbK z+tZqWl-%NNZ|6Y;l+;_I37Kk>qA4$bB?8}SB#Fv1?+N6>6<`*_2%O-zlJvQkGy~my zT2)RXoX<=m`070Y_b1j@Nt|dV%Z}Tc=d~d1C7#&tpobE`R^+U$e}os9CU}xGUF;PN zjg3(oN_bo0XJ80-(lLtWg10!4hZ#*AtjoftTcVw~ft!(F7-yphw3Jo=X~Z>uvpV9; z)DTi94J5&N0RmyFMV+cQDSB-$-R7D})n*TbEoKrErjgc002<@Bo$;wN&sUa&(YATM z?H1m)q}7gUD4N3iTHHyF%$_#FAfh6VYY&#ToLE?<~7nO zc*vRT_nz3d3{klP>bKRt(d%Sde$*nLxm#?MgO%&|twxEmSv%<_Y(WKQPzi8>1%+BY zt#5k;y(yW{`ko0=hbZ8Gj3+c&wjJqb=*;M9WZN587R%dtcw^DBd)O{dq+mO5C+NpV zFJF$^!gVxZS+q~VRcyRE`{~2Q^;L(s0p^cmv^^SmglP^y=okL5XcEs|3k?uL=tRtN z!?{{B7GX*(!E(|b)ME6i#aROI?nrd{?zPLMVO%mz4W+U|y{prI?=1?J{dvFG{r=?g zr}roC&h`Mk$z6t7OyZK#+RtN0mN6OZB}J&X(nQ zLa&BJuX(Pg|HT(DRYBrBYIW*FM&*RTh^#-_w@y{I{2iz=WrQ=g%rYd5FXl0#V=_kD zUz8qg!@N4i%uHB+7IbM>l2AniPSAF_pD{Yqql0wlcLUbUh^CX1VlVcQATumL1nC%= zPiv7`cDKnLl?oE?Gp@${7PxW?^OaIq-pB*Wv=}~$vBD#8F^YgOJ}|U(6!A30EFNKd zB1Rss4xU+W@)7oLQ8vOOsDa&1bh@-bC{&NprCxBYE#RYn(HF}#yOMPfkuy&-%tXiN zJy(Uo!TVeTyoQsNv-j7Rf4}%}{{DJHT{hIErERE7efvKtb?M}o!YRvJYU;2xa;lI_ zi70n|dYNhz;@?rUUI^EMRT zE5`{mEwyWZ-lo07OJp6hjW^a3Wr8wDQ-MydPS4L#G{*u*iU^6wT|_d4cK)=}*K-i^ zBhQkr87@Pvn%>Tet0)s>L3u6{7cw8WoQwK_XmCPXZ5sBjfKy|)wJWdbV(T5`NiIG+ z)H<%e-ccH^$M8$AxA%Kpl5JOE?`YMlviEhXkpnV+yxqH)VJGri!8?S0)2g2QMm6D- zMNJ62BTe7^D=S?Rmf19piCR)a2BOb4Wco!O_hv7Auv}X%`n=Z51COi}vW;X2_A=s~S>R z7*nK6pk&SqM8jgyPkD*~Q!W*Xh|m{TvP8FncV$o}PJy=8^i z`*V*Pot&B*RT9pnGZ9+uV$h9^1-#emrBQ7|V%Jt1oWc9h=|ECZ zkaKg|Eyc)qe2iqCnc|E-#g@j;{pz0(Ke~_pum3T@6OzaucK+L6&;I`3cYgf8u)A7fDJ@qG zvk2R#O9OUe);(j3Z=t6Dlwg$$TesVPG8T};x>FP9+Ea0=1DHC;)LJcf1y1NhA9Rxw z#k>RJAtdwgscOJL?7V@8u!F?JU-*O@Ud?V~q4be-D@A*qgK&G2WOJ-nF!S7P<8~Xp zw}ykHKZ7&{mSn?V9zFl2G@VByfWsLsD;!L5B10M3`=U}4L#Ocw(!MnFXk(LqAGUZe zj9;?zApCObARW$4F z?5oXRP+;OP*SOqyEaDZ@1(i){I-472%MU?VjeK&`?ljr$UkzA9qgKtuP4Zl2xpL9L zt@-R$8xYdFj7u=z*ke?Glk|^570#thz5n@#Uq_H__i*&bAOEoXpJVvPmwSKS`_=vN zhrPYs-5>t??#=bZ*^hMZ*B@A(-k86B-Ti@_{TSHEUVBRDdaDpV%G8L9k=cS$#-hIF zz;wTJbm^{@QYHznL_QgA!ulgo zhSEGyH0yL>@*K8*uliCitXfp}veO6U8sz=X1c^vYI_mx)aO;D-Jq{WZEs3Htws2wC zac(EDS0rfPh%9#XYh0)_mq8Mkht!Ka0L0l0}765B;wL-{oC0TsZ5t}tkY z&qJXm)C^ZoKSOxPP%dg12X!Cr>HeJ4({fEu$}v5JTl$oLoYEjJX$Xfjz)whXJ3)XN z#1ReQh6Zpg_vctlZmxBEdVg^0Hbw40F3bd^I;mHEAUK-;UR~skka{1&d{q;dH&l7G zZK!f%`}d^E_P|&HG)x8mdnL(_DAWbaz+?nig9vt74Oa!4^zfKMkJyEy!huO=(J8N$ zNr|@vDQ=E`J(|;*Mzn-1h|83SQq1rSsxs;KTslE6d{&8$@oJH}AgSr|mv9`H62D8R zrG#D=`PspO2SuNzd2&TolRFnJ;4H%67kQFgK(>i>Z0dPEg+6vC zSrD<0&ZqCWx-g;zi7Py-)OLb@ylCaFO=7fL+FlA04U;V&j-k(B z3{8Z4Fg9Rs6FMc)GD_BRR8MRMPG9c0g#2GvS1X5oQ0$1F~W zfZ~gPy%y_ge4=JKAeRm(Ym9y0)?Pt4inxev4Lg&)-T3D8pG@68z~x%n>6IF6kYZY* zoGF@^g>Zi3%UbrjBHsVF_p4T>;F2_JNHWewKNG3APk&;V0qP($b}M|UyRY;d9If*!4oZUV`lX)p}q>+ zdcbW>R`ia2M{uk;cv~hm48;dxZE2i)0MeADf)u#6+G@$!+agFP834qxDFOt^%=x!H zKf>u=!E^%!`}@RPx8>ypTd|FL#{{q2^P*8A*m^(Iy#@_*G(it=9YNMIX+UCs<=sB1 zyQvFWDj1BSl8%FA&Sq2@yqeY)^!M*9Jy1p<&=O^z^e!BYp6cW*db+QHzUkIHJq*wRb5-37Q%9(>L$7Iz9 zM!FAY2+GPieSjX}DVwaJI02Krpp%7kSz*@Tdg_Pai!Pg z;N;@m>1#APmMk_VU53n~xl_h6BIN;Cf%42~Hh?zfg7i_9Oc0WP!pirHI59nSQ)d^{ z)JALW%vm-Ef?N7DfWaw15eY2k1e|5b9aYkFZE_Ge80jlwCU8VhMg-;hR>_%)`7J{e zGNVkE3U38&6d{cvUSIxv^b6eGGuJ5g&S+(##*?s7H+JC zos-`=D1Ym5V=ZiK8*8C!8*AalTIjpoSPMfw*;otv+rPfGP%55X(OGZ!@-S?<^1b@X z?k0<~G(S3VSlX!5vhA=$q$Wi3VS0*LKcPCGg37rRD5;Uh#k0~%)}E?;$dO0NG#l7A zPHAlsW+qFnO)#!${RNMuO9#X_8=2VoF;qt3a(~<_o(?G5*}1vSNO~doWG%6i7hve3 zk+rt+X(b-g4AvP3S+yCOqJcKTk6JR~?YQfTs2pr=bJ5H4Amipgg|V$)ek-omBq1DE40Lh7B0x8QeP4sR;xcD3| z-~!L1h>)J*?5L(bc`^3$@TE78x;rR|!!Mo(0J)#Ro{4M-g?@8+aay6!@WXe2x2JOw z-CTy)m%{08nD|ju_G(VOs)3xrtWD9jv47>k0}juFx%BYuLIX7yb}=EK2~P_({O-E4 zwUnJss3b7CGRumiEWt$~4+jnFJ{2X671D!tIl&d(opPA53J)Bkas~{1)-4A`I

xjb@e%DZb0WG<&){h?0EeOGW+5*PpV2Xqc|I)A%8m>`)X20 zFseT|n8nD(#(fTZ5$MNJWf#3mM%ChB=(fHmIl}s_0H)#-3e5p-4PG=3;VcKbG;Fvp z+aAqr;a`LMdTQ3A6h`?*;D}s2)>Y@LGkBlF;>Pnwi4hVT#gq?Th1kw%o+L{nlUE{) z`!++1y7k~tP>nXsq2P%!!GG-yB67y`l~B}A1Rh8d)+bKlN`R_$ws3{X3m35JaJug) z7ZIH#OEkxcua<<-4NVf;O|M%7QARCn?wN$M87vGlR|u6vy5}e%nB|$7jlQ*(JQr>@ z0X`n3F{nh0Ci_K^$!@$VR40P z*%kPNXToG50hbr}62>q-inh-87@e@Cd1y{y=e?3psR-Qkmh*JB)9u4C{BIlKI2M{U z^H;H4*(?c^IR=zcEGD<^dS}J0SAYw zpUOTuME?!lq5lT5)K`5S4sk09mr}Lte||9tn19oRLVtg!p`kdMP|JvuJ4J+M!NNSg z`P%BZ>B)QwoCs5{pHHj4Bx}VA=>9t{)q8t9t2K3s(NdskmGd1?p%1E@`Aj`1=HMD* zoG0hB_Ygb|&W6~+hi-M(Ce?HnAP-nhqm&FP0uyp^G_@amPHbg@k8I95K>;Eg9C+j>)!9!-=oOy!Wcq>o0M!{1UYq2dF`hSgx zt&4`THU3xT|6gU{e`U&S{$ui0%lwP;7ZbP8uY9cB70BQz6lbaaCz3(S@SHK zdyHZ^S(C;PnjCY9*An>Kt(ZVHwHs$Gr$}P2_}5gYW9FX;42{XQhhFp|U3Dg7&q%+B zhX-fuQ|ykQR?OY)xylBibUPSii*l9;%%$5;v6FEuMn4hiScRm+H!5;!tga8{Z}$pB zB9FVx79zg^XA2%T>17%B6msc-Ty!A?0>uUVFp!BY%N+Z18pzQnZ5_>+r=QuH6XwfL zhM=$26Nk5*df({aY`Lvq?syI@QfL*4{UD1&>hf8l!1;=u%m-JKrs=Q%eOT03K6LRS z;qEG<5QS2zzQ!3t-iyI(;aKE2Rrdlvteo7>?x%Sm?+7|(ll0C(&jaxWVxb@WMhhVm zvtKDgib#adROWQvX^Hm{kwqcz3{q0zr#49VzP-T z9|0#oM7lSh=V0yN=u`8<<>4;@9`}v5{4S&@Ph|ug6eE)?8yGl318x^i{?|kiGb%`B zt8FGkUA`frL6hw`fvMN^LMOTNE<$W#ca#Bqng`hSw^uF1=$N8d^yN9WG~~ zrr&DI<@#}n)ptN6$;vOo$S+BoZBP`Z|K(kC@o`M(i+}m<;r0|dFiQyh8@K{ub_w;a z-aW3>o<;~CA6?zPT<<$Lm$A$Q=eqR1mPDRLAFnP?P>zpZzV2RLz(>BBA(A3IQUO3_ zXJ9A2W%!C*{ET=H#dXN7L{UCk>zQ-Mlw)JXc~$MNBeH8Yr>+(n=kw@x$C z9;XE!k#Rh4h)#ndUp7b5-R2{$Aj@vBM8E_6d%zw@HFSZ+X*IJ41_G$2k!2f#3WKP* z_(&;n{JIUaC+Evkzm(9D)+K*=1%M#~*dFAnQKD$Q+24%CrmI+g;@#Ce1t8FR1BN}s zfaAatujBxgZ;+*$V*zBoR0T0O1wA;d3h7$a<;v|zsIp3WRnxAZn3-q2TdFEt(5LjL znoHr7rDKkIaAw05R&thpL#Q^nWG(L0EnRZ)EajFjsyyNWY0mGfN$2OVU$b?Y60$Sn zG1TAr2%VN8j-G;jG>K*#jzxSQc(Pu;+J91tBr|=sR21{L4&GWhP2h@uj?JC zF(?_VH2UmN)D@^`!aTQVsrDe;*kq(}d6mBP2|kTj%)9z5N~*f_3Lxle(<5N&r?b%w zGsRIFD&7Y{h*L3#Yf&?a*$=F!wiWmg2q96uC1k3(^n$QR^@2cRw3{}CF|JTrUZ!6; zVXPuHPxQ(1%qIL94uXU{M%sSECK1>*G0I|3YwG-N(JegeTP6@`Q&cTZ`5M`0VVi}8 z;1<7UuGNvKlY8SjdI3*_a9i{_x~Fhq>Qq>MK{_GwANM%Kz4CvAU!|e*`I(;kT>viv zv|{t1#JRi-XxX;3KU@?$F^UVtSH|0Z^i=KC8tM^KUQf4YxJiYJZ!P*#9n~$tRq(u3 z`XL4wH1GT&V~S7J#5#Mo$N!qWVR^V^dNs>yKUaBR4j}6LHQ8ZgNRv03jiD0jB_8V{=**>e$ zB{p=X=;Q3L>H}>TX`smSPe=RH8#d@l`vZV?Yuz1GsO5UVmhbmwpKMwg^7K{QhWq(H z2!(}zaBb(mgo1K2DlAhmRFd!zZzsuc%1xLV3KPD<$MfLMXG#)@CD8yZu36EV=RL4a zz6nD9jb#x752cguV^sSNzYY29_5E^3vpq|5q2j{egs|9%Ssf`zt*@qCJbkkoqd?aw z-ATG6gR=2BBym|~aExy+O~kC1=iI%N$Q43@w`h(RZP5A9rqMD(Xf-ek<^@CqPAH${ zqc%PYM-t34b~JvAv)BUBD&FwUly(pZ2SwxTFg-)k8eCJUO}IYB=jKR=-%>_n{}k2F zUA_>U2+7GaeCase7Ud~xwzGS#Uk>=y2B|(&GUrR&%J7`HAv**P2=$qJF8$+vi+FBB zUy%fJO~{Fk4+ZZiW!y9A57f3SH95(1)d^zVkAgo{d*UaTA_N0*ikq^z%!SqD+wl+K z_rI44uB5r1a&Mq1uCk4*rTdFnW}6iiCNFOCrSzLcC` zF`-8m{NWG8Gz0lhZ*SyTJT4+hhT?yQLM!e**{z+8<6Sn(BPgX83luzeD0J4qCo*kb zCsCU`Z_TTysTiD8t3Z_D1Lyp_uKFcDReR{QRv?64F^Z|&sggwPhh%vUK!*s&lUyUv zUM$8;O7($)!%;UrGZ7ZG`>X70^r0XJlOp(?>Sy#El6_fKDRt#G2hWmH9tCk-ZupM(Q9q#(purHTZ%wcm>RZr`}&Nz4GsztKA$GY=eDtlmx^xTA`;^9W4j zDZjM!n+`Pd98U^lhkgm5`70bie_3RM(8ju;M>86e5-@IaznZo6Vqe^EI3Hz%|P-DWP~U6 z-Sq4WChO$;)Z;sQZk*^hW$D=^?g8_DiwHAtgF^)+2hp_2;IFmT6Qg?7op8haKlcw@ z{CpjLd84Ro!;Bvs&}I>gPPj_PqnNedxv0b7MDiY+DrxV`bsafwHNi67>4?C0^se*~ z^0NuaPwV!PD6+4{N#k1-C`>~`J#VGYnY;pO7ehWK>SBTNT>0vZhomj;2=vF2+; zaC2HVRU!U%eL_i6Jx#+#Y+nY^m1md4KvGdkW@L;|h~&S0%^A|RlSV6ya&CWdsxJwE z$8akv7V0I)y}!pT&7Duax*D0?a}`#Bw0BNgT6yi#2~>L)kI*SQR{J6OUPw)^s(Qnq z)$kn2c&Z_Y9p1K|pL0c^WCgy7E6iY*H*oPfo1VA}(48 zF#SZ@lmnLCcALgngW0Qiq_>wKm>mWHJ}j21bK>d&0px$=VEB3o7*6!#eWEJbReRB;NYX*)2UEt^s_wfaCQoEwvFNO7w2Z%k} z*@yBAB|km5ONP)MDY+OL6fDo%XIPfx!{GgCxp+u<-erN zoB}JLMfyMw;PYWdm;*@1A=-yX7F&>Gj`Veg;D_4$`WGU0+_@8AX$=D>J%g-T4kV zw%cb$f%1@ z&A;C*8?b-80a>Q;nDHLA&p2oz!UYH=I)eAGFZ}iKr_wboRdxQ zO^7IWgZwKLtZT(Pen-=qBA2|X-c-!8mhRMs=Hi^Cy-$L>x=RyQuE=3y`e?|n6V6{_ zJ)*z2*-{hrur?7Ya8&83CxXite*|YdH4}ZTsItRw0enadZR~UjzLMx&Ix^7aAiFWM zu4=<u9Iz=hXK92X* z-e%JOloD0#y4pMPKm8N+6!1Z56MYnLAP{~w20Fb&N}VCns45>Y}K!53=t_ zXQfI`4+RXMD`4O;S?&R?{L0Z$F;#gnQJQ*xXIjl)u6tjj{D!)^HxygTx_zsand8+` z8q^6@UmDK>3n6cgUbuI1@_(w<%CV!ddn4CQUkD8Y>2jK}*D3x|T@u#|ANW{(Wx$>( zGTZ0MX$20$M2)WpCNBK;FJEiP$^+HcH@#@>GluT>a(L@5IQ{Ca6I|)2P;4Az7YtEhr#TO z*mY5XzJA{!^ylYdU2W@K!qld?n}*z6!1ObU9=;L6w#&9NgN}|?~&ZV zGkdSP3KXOOMq$O$nJr&KiUh^LJ;9s~(k|tEIJyiY?2@3~KbG14YRg&6jE%`@@U_5& zJ?BoF|F_>EY_=C>l5o+k_pg{d()CmOk6S%SNI1v9NDGPfof~|cF-0SOSLwc4AkmwL z988iDzI!ib4{eXzakc1MEeBuzBQZuyw5Iv#%CLoqoUYb-GK=%$?m9yhw0siU-XkpQ zTW@<*$CJN@(r65XPm;aGW*R8X>~~i2tb1{cQYMNZra@N2$}D^lLo(`2a&Utpd$yM3 zExJxPdBe9z<$#@q-c9s3e<9=;06Z17$RpqUi1!>d6lRc0a)0eiANuNNu+d*%W~7cJ z$6a_*g)0&N0X8M+Yns&|O}Vl-STPuKnN^L9$#|x@?tR%bo$SU5Bj%ff^n~HaKS+n| z5oL`e%4QnQ7jri02rd*4&48+8zrHF}Gi3cAN{Z_FPes>i+PlWG zbmbAQn28PyWoocDgwu`QS9PR6)$La<_m=(&S1Q{CbR1U>XaN)f3Dg;iH{;(3TYM62 zp#sMUrGEyMMc5TWwG^#D#7^O?F6;Yn$}6o*inE&!yNx3qKFKfgN#8HIDdU)+i2nZVe-ds z%BlkI?C&q3Xqvbh)!9aL`^2xf5E-#iJ0EOohM)X}v@(_q*|LAu*MRAB6XK|fqD=Uf zU3gW9(?r>au*U5@vhv`oUi{X1S2~Z2NN-KX%+{Ts zISI?gLIpeh3CVU@)5D8#S^x8muk%?stv>YDISVgeS7WO**7eB2n8`vnOOHK9eqNGk zm)Hx^y$8)to^#UC!YF6v%yzp&LO7=taLSD9>xm}y=I^c41E8)*!v1Ma1sDH@fa;OY zLQs_reI`&*9q$}(q4L_fpT{;4m85y-y5YZgwg|9T>(~&sXw5MRRX{!55hn_T<8G?^hJeQT(V9|NNcPec6`%2JX~DE~#FO~+`8qdQDS6ihxdP=fxv zjN7w1x2Eu(<0!66M?h~mS@R>0tppxFIu`NUvBS@NKwGk%D3!y&^{0oEz=H`FH#)7L zk$Xa%yUX0x7D&T!{&&Gm-dLT$E)zA|P1%~dom+-qewLSDKG%%DM6{MTcvH)~H!1hB z7v<2)M$4qd;03>Y59waF6o39168Kv&4ul5`7b^vOKcL`n#Zudn!v1p8+^ zLp8UZGKu!iHYYV#^;+_Mev2{N!iknhI&aTQ5bU zRtE(jxbyLUL0oOI${ic z@m(DAif*x8C8Jd$c9CYh@C?`NE2Z??x?>vxw;m=ihn! z3|+mO8Z3htIuGoHgn>E<%#!?3>nr`O6g|oeCkrY4jPH`sWnLXFN(upYtzsWGKt_GY z8?|?!+;)!JK$jkE2K&2(d;hq70Qc;*RoAl@%X{qc+*ml#9RA*x?&VZ#@bu8AT#6&t z9u=HRMB~waKEeqtEwCU{i_S3d41w0N!tzndtq48|%`j@-$a%W3-*00h0zVFOeZ9CZ z$R>-5IM5p4@y;sLra?#f9s3pW-xAOucMZd~@s{v^(Ny|&m+?6_qre{}4-n?#|HV=* z`O9u_g9aOoW7tDZjN_YxhcfdIphyKyhslbf)+Pv4sR>?l&)uEvqIzPF!zz`$4Eot$ z!=&7~JzuT0;@1R5eHP6XG>m zd9kT>K4FHZ&6`cH<<&|bSg3FWo8PmTzM}98W=ChIf}Y!4$QKYa_Oel*MJI)Aip;Kj zcKmBUpf2P)|1@$zn#okW9x$ISfm+pj1N&yk5Eob|1{wa5U*^c|s*R)@7rWOpWVL*u zlHu$$m>FWkK5lLaj7M~Z<`eq7S>6_c@h^mt4G890=C%g!ZiAxTPyk;JH>JU#kTdE& zBz}u&4o}>ZiL}erbOP-FS@&E-d}ZvVZ)~QGD7M$MNOZ~rYI5M`B=1St*AM!yyeVj{ zZiAy0%V}8!;PChM_1j+A@URxms61DJ{x8X}gsbTsr!N%TY+pA=1pf)q{6O=VMgOUl zEw#DJzZYkF18)@#w4Y5xEc-I9Dk>Co*QHW|0jth@k6&}(g5{4qS^P;JUx6r+iwmXO zFxCV`@lXrR?Ox7YTEN{wAW5+Ce3dB-57J?P$QFAru}TLK;Fgj1(EXgg%{HMone`YE zSka_g*@}2|^}@E|_Jcb;qVpHCkjx<{J`g_nQaCgiwNzRJ9DXNPUcHumCdC9#3REiR zE3o}%EoU0!r=07+$rmO}^jYHi~I#9$~+(aWc>2 zpNqZ5x1km}K<2(ao3wnaJ_UA^0u+_#(V}d|)bbA#_NRy|7CYFduk9qo@ViM21leEK zfVgv|zhJ^SBP^qQF=PFBG*URw28#0Kao3QA%S$zuXKj9D3IWAI)L9^ievjSrvv=%c z;QoJ}jhw4xtRW7jGng4*kG1wQ4EtXFpi5k+Uvd@yCAR6pLqQdj;%t96Pn^^h2l@(C zQG;D~9~q4`ptn}m8DE!X!b{#JM{$bBQ^q8%Vc<>7Bd|JY5m)Q!qa=$?wGraPqt1G7 zdJP@Bp776U_%VpPjo1zwf32@N=&gkTVQY~(9F%^u}ZE}Z0*%%A0XS-Jk9oWII5z{V;* z6ndJw2k#vXb`Li9`qIeH)kY2a+`(55IT9lLN^=~aoeecF{jOD?0*@Lql!&a40T3D- zBQK>#G7bqkab#dq*88ySd#A+B20)8lZRC0x+1Z|;zkM9dV;fO9dgmW@NS}Knv6Hi) zM&kn#;|e))%^dJqbP~|6Rvz}%&-BI|fBn{`6SQ}Xy$E4)L=@q)=B3?e-32n$E{G_P zU*|i>`(g3pcwKHj>z=NsqBl&t0j`hFYn2@tZHc*zLcVE=5BLf8ZWl;_`QFM zXm;?ffn+fmKN$Ur2fyb&ebDo@I&;>5xW^CM7LMa6kX*S}=N@}7@#oqkIGv4F7sHu= zjHMU^i|Z4(zbr?-VIvSfjz=(kZfU=UfJzIA--k;YUmBRU+d62X2NlLm0ZgHf$=Ipo zpP_v{`5(aAx`VCY>i3$LWr$@()|9o=@L_mpn1s|Cx>B&u7#1PNe)J&-CJMB1EIRMs z5Cdc3qREx^bu4W1h?)vcM-0SeGljS`TWf95 zWk9~I8+#b$#u_?DmI(jIpDTyan#<^pY`xz`;u%Xz;yLwyN%QM`J#uKi@=>>u|Mq-S z4DWH;ze$i#=7C<;;h1BibxEZ|La_RBMJV!#TP9^V~A#X8ldY(e~?*F2BLOWQZgxT|LYn0j)()n0#>ZhGdei zz0R9tO1o%;+xNrQ*R#yv7owrUsw7c~lxhz_&v(2)nC1#%Je4@*hi?d+Fcr+@5+Ge` zm5xEBc)P;Fl^G8382iv?Vx5)_-c2OXa!sYfi)To>|VFBLaIT1ba z_@=t{9H>YCH<{%ue0LNM<<)oTD6s1 z-jQTpiVj;C{KU(&N(=l%9cu>}R}r`Q%Fb^XCJ?_@KRUPcw$|*vrQjZOH%;3M6>GkDN5g-h?iajA#U)~LHLfs{g0vHml$l%9LM*8${0#7PJ4ji)uRdaPR z>}AZ^D5lR3fJ);pAF4CkkXbCwryZh`Tb1E2d#g7fRjfVvHeabNmUjK>XtmU%U`DsqqE3aWIqd1~l5q)jgiY~i-8TYCk3tK9j5!Xk9dYa!B zV2!DmFMhCC0ZuK4K?2O1SS~eLLE!e{*qSbc$Ylz0_q~hN)=JMzIVW|gx_?7XrljQ~ z)2^hr=fm{9jE9J851y>G-qs_CJtyL-iyVz`6#M)QlZmYM3jo_g7F2~5!oIv3l}cnNijWfhO3bUf{6YW z#NASH5quLHHqI+-g>MwGhU9VdhUBr0f?T7P`^Ilo2^rCoyvvM7B`R{uh-U*YY~2i@ zLc!(zO)S_xZ-)sH9ev#2u%G*vqhzSX&Dz)8N8{|1o#yxJKJxc?Xq;a~bB)bJ`rW5fTB|`a z%>VARd}y?2hS~6v<5)#OVeu5ztX@~Fk}Eygz247=_-qd-GHW4z<&RWv1KLAt?Gno> z?dpr(516&aGn3N<`fbby#^~M=5@a+GKT%HtM#o#apG+$1!jH52;Dx6T3uyNc31B(q zeWck))KvoVm=_XQ1Nu1b%dAG?XaXUaDSbJlfR{}nEaWsWOshLiF@Gr`Q%yKmm)G8A z5Qtav)+9rT1&7O`u1ZOyq@T)5 z{9Muex7^f1u{bZLAXl67z9L;f8@r;AOHoKMni>?phRkb!B6$`zG;=4jHPS|+`Rjo5zp5?(3oWHbHI;KN_6dL@9> zsBEc(tOE0%Wkb=Vl~W)SM{nM+L?AY{06mULkiiF;Bz|8X(6QQgmf?dRfKHKvMzg=? zQBm45R7OC?Q%G32^wk(hnmFu%%iH+&i{M0W0J`KPLxn#9}%73FN%%`rM&Zq|W~ zU6c43pM=Ij4u<7Z*4k@S%5JN`c*Fjg_+n@UJF(3H@snN^=tx^0ihZKTdaaW3&Zq2_ zD`G}`H3P{3abh>2qP)3)1Zzg%O`!}WlIG4<7;9PTV@GIs3H8H^+F{QK|5ZHdZWJ{5 z*DZjuXD&pn%C?VICBwQ%sq!Kadc*g)@_xodXx|s#bez6UQM8uxq(}bqLbxa;@|zEVKA|@X?u#$0`|o=?-7imZm#qSJ;Iid{-*R^y?5V;D|B^>W68>s9 z;{H~s^#@Bdp80&K5(zm$BIi0N&j+kzy@jBdN*t$oz+oBLkU5B+pvdRBAf~_^e@@k@ zsh7avbNMUY6K8YU2ZdZ6=JdSZroyNOd%kFzK6oTEE7M4m7aVk#3mXH-M?>;WC4z}M z;iNt>5UdCjP@;eIZ6QJTyxBRwW5#{HLep!@r)v@;*UrO$*{$g8Pr?cl4Qm5kSUzOSt$a=Fk9Gfi#8;LDVTUb`Svmj6IE&4Wx z+7t9$;cLj^%`{AJ_XmedXtw7ct&5VB-E{umzK6@%1vBBwOlyjUAqA^Q-W&QG@UBP? z&~Vb0XQ``YBVb0r!R9Eo1yn+5!_vT{^}@m$G`8pZ@6Cf5JWnpSSBH0YLF@17p32<8 zFm8r>NMoaB(S{2BS+31KQp`P$`0!myoWqhX&o!u-f_nJ<^yWkYG)vGyPYc!>e#ARL z`1ZFc8^em~=}oB|IPHP8^x_nlD`1NNTw@O=fqkQBV>{(433>8_Qk0#Xd+CzqLmzx46_D@B7Q~Nnh z-s!s0*|2HJZS(VXH_;p^A+o&Wdkl0K762_a{<4A*m@A;eG47Rf$Bg@c(m$7%}654ihQ5+dF&speZFQUH(H zbM)gHa&R_hjY4cpvPMaA2{fePh|*qy(RRz$vCO(k7tP46T|LdiiQ}=oefx(j_(W`> z0Z@4ICsT;cq5|M^g&Px#Y7|7cqSCsuOET| zyGsZLwh!#*zwxT?KXv#OEZ(#2xZ^ps`zXEESy`uiuG3Bz#j*T(3R(tbMlPeifxK)M zq3W>GlV%p#aq7v2;f=xryOWGj4c)A@46z1oNs&t-S4>&>u<+wYoV^O;U}o&#;&&|c zt+6fbGL3)9he0^UDAuPvX#E?UkXlM@IqBP)T^|;fdA+%CY=w<2W)`UqMfOE&I@$D%)xP6jU|@XbwPhS`Q4Swl!3m zW~YYxeu&JL2o6B_NpQDv!w!hNnE!M<`8@)Y8gl7jHdO(|0xYiYVc7}1s4ZWp%!q7h z#;&kh^rm+PYswl*JijfQB41e%H3_ZQD5xU$B~ac)(b%z8r~ggrCP|5f%t?N2bd*A zimyzu+GgrH5;k<&ftf7Hk;!xiJN6vV_jw56w2|VNyv-kK^J6LR02grW@15)hK66wYYwX68;tYqnhUtq9M#4+!J2dqYQ4amL?CrHB zQ_uBcFRm(9B#5XDrl|EUv4i7~Xlg`Fo~%OEEMcP^NrA}5tPxc}%0v{r*XrVHdNR6} z0v1s*7%{G3{tr}n#wAn;S2YG#8tFN)I5O1pk^Lx|C zE298qh$+hnLeV*^f!J39Vc0{Ow|MqsvhNcLz`CiE3^rz86cI$_$)Q>maYlxBhSH~+ zriiANgP8?WRbcyuvE()#A(?L+?yG=TZ0X0o{F3z`fXUP^*p5EOLHB;u&wI1~~X&o_U+ zM(I`Dd?@3qsOb-ip}eBdpNL%Jq`D9WKdUJ&Qh*3z_?}SSy%kMc9G3QK6R2fwFKt@q ztcl51Fs|!*uX0mb@~T2q9<1;l^VZ2XFNIzK@M)~Ep$xzCSxb02CM^3v$bBgrI<8v> z{dTuCCiAVTjcicJ4cDx~2vFYhU)P%K8o3kxME?lS^v}Q8saWq{;*xf^iX`c<&KzOi zo$bn&G)h8%7p&A;5UJEUORQYq6I+c{;5Q)ois zSihk(zp-Zzg-ADQm1YAj>+jz|GTcG!H>6Eu3=pL2pF_h>>D(ah$ zP6Ak=cf6Ih5|84da)$5VTc8UsP-qf1Jy~3yMx!t}@$DNy7`|Q{GD`*&jVX*$Lg-_} zHrQ~i6qR;;3~AU{6K5%-jI!&uE<;>^g=&lO^3)k7qKuxk!H!$Vnquo$ zf)+e71?X{~Sz#*kmTY9)O&(%rrSqUau3t&E3Qd@oxDicwxmga{Z@)-e(Yb6CgpT|-<6=6;@%o*g$i^+XH?m*>|0m9TMK=(-x03KA}Rm@vg zfKQiui{V1vaKQ3CM1uI4_NY+Ar@qdOLzO|_kj0Ep;wIAt@@c4?G z9Y!K0#!LjQStx10%O~qd0JAPgb;}0xT7uEV{Da_|M#00Bvi8*e|@U`+d8qR=V~eXj6~|{ z+QJ|GH4%N81|1=vaf{&Ou&s>}`H&KeI+t~`ybG4(W7q8_c%?K0Xy?fpIP&ZLi(hyA z_v5NM4qnRm;KG8=NisNF81ma9&8yepBF%I3Eo@s+AeW)IIH7Zk_j5hG8@lfwd4wGo zUs=-ep=0yd(b>Z?v6bb%Phwnlri4>oGqYenP#awDJ<&B~i?*&>wu*?y3Z*RpBT z>9({Jq$7K&Vu;P$H@nZ^5BZTAXnzWL=IK~Fb&#O``r)}qR%NRrwdA_DSXiy}x1`FB zmukkV9+6+|Z27?^H^r>6;Q{B;&|iFAagyRGLY1<_1@aUhc$H;0Dey^ia%HzD=;DWW zKDlo_UpGKKuD0{yYSNk9Ft0IlO#<&aUyo$+waXgaN_?%h<6Tdgt$s9V%subw$i}(c zUW#(9=PWSJWL=xOigIn>FUUqRni)Y(g7@%=luhjHzI2~?5(JM*E6>GqYdK#cwVy&|kE&vGsj zPaQMy*?U-Fy|$TTz2F#x`$A@i{#H^#{Cn&!QM9cH7_A&({6WtrC*zfEYhBNDW%LAN z7_oLTl8ahCMrRe9=`^wN+wt|&OmT9}pQOXral#+`R{HPfLLBIRJ+oRL1}v*t!B0YH zkJR#BQ zMO&snf&7PD(KbgYhBvT{qhBXi=@zGZ;5?4FvT`_T_+syi3JXP{b%Ocr3oa6Bv%aS^ z=>Cij;<|BWOUpWS;@mOAJKcsxaIPr)^-6_Y zq^REfgQWJjfkNB269G&|Yx&cEhkB1Z!R=XP0T@%%F2`SaXd0hG6+u|%j-GEgSs&Y< zZcF3)I`VmUk1ku?VM`uwV4BC5aPPLqm*<^6)K&kH*}pOy^XwMJkM-;pJCm;)U)i?a zW^PN3s(q}Dm_-JSbr^K17%XkZ;wkKgUOK>E^Rvj}V{Y0|LnLs+wL^_q00W1f|DQ$E_ncD8@y=zK=^&+OHbsd}x)IO6fV=Y|<- zCq{DIBC;~6Q~$78!Ak(QvO7CN0(mxrHJOT%bX+E>xfFYTj@69gnbuPv1O^8y&}VsA z;M+Mwa*sf_xHmE+Nl^M!-6)XmvUDOZBRH#cD^K8>_PRLK^GNG{I2Eo0a~v5NAUJ&2 zFo=~#Li?0CAM>n>IGek=%hhswv4(Zu$;&99XSv8{YpuO;hLQKu z>08e1;=UN z1B-&y&>^c;L32Zx=1rVfT|JiJ;`LEb3EmEfnuk1;bS@VwFtq(mOFulDP!AgofbcDN{b1NSi#Y;HE2#CXa7 z{?gNI9Pj10LD+Bci8sym0+0A=#B(h8CX+aG5(S{dJRiIEyOn+KP>#tppc%=|I(u^{ zy|#CABhO~+4gUc9e!@89k@K98!;WX+$+gVj_OwD=H-p;qkN^l9&r3d)b*DE(g=ywV6uqu!gS`R~ce^$)1a zi~I;Dm^1~hF7ik^PmL~DI=AyP?a!y}4Sb#u${Gkja&Nj6Rp41Iqz>^yHL~T3Tf1;+ zrluNn6Kzm?kxN;;$U5AeQUL?I<6vR?!f1tNDlT{Z7rA3$RLAllPVS5Lk*V_qNB4E& z;sx66c+c|h@C4#za<+zu-BAttp`m(XIr;K!G5PWw_P1|JdR>QbX%Cp=8iw#YyW&DM zfP7{qqxMDnkNsKm*HGuN)9d&e^?!bT9aO%?xLEV_`tpBdNy_Y&8KB|rarLX%*;mT= z-Cfs( zurEB5yO1laR{^x)YssQwIzJbx$t*?BrSe_Fi(`#+Pf%s;%ysflqpPIZHpw$|SKCGB zXD$-}TQ~1i^Y;H}SE#Zh^1G`#r;J0_=Ar$Hx7O&Fhy~{7)2s|H(*&=6@n#zp8Sl(R-Y>_$n-IHcHz#{o^!8FpfUnjo#Ct?l+#Oh8$~c z8oyjvhBZR%pk#(FGRGzn#QVY^glW|(@49X7YAir}4AGa_>7;r>VhC3fMw%+9 zPW}4|AK_=;>WX-{MnKCYsLqmJ%T`4tY5zW{v3K)3|JJudCr@70QX=)4 z#CXsA3|B*EJSNU-IaUK7t#0JOsCBnVYH%WG6MYb?Ni_4LEH$m%KcpNiJ*C*c4Ak{| zk4Dlg>#zZ+pSaXAPr^~Oq|fV-B59~jVLkAqy-$ftFLJkOS(45#A5|2`J9{O~5oP4p zMLVn+p>t1!b$RaU=Hy??ECbEKx4rw3$k@-;Hg~`U@(k94hIu}3)){y-@$P)0-pa#quoTjfMOwcBW$q4gWI_KbC_TbVQ zi9C`aFmc$$HJtQ%PPmV%RtwpZ9Zf={TkempM!A)qPou*hydT8&)oS|V@r!mm%f(Na zD`@lVZTxlFy}sws@*^d1&WwYTCgPyzPc=|3iUdT}jlz)(INJ(19&A}QKdK_z1siK4 z7y@GR;0)YJt=oyOVFE{@fAeFI&y@Q7=2Z%@%1 zI%6+8&fYTJKX_>=9_l`6$6s3+DalUANZ4W|J*ea^RuoQZtpw49I{w~I(3$($w$|V7 zWB&cdhU@Bsh3e+w^m%L7LRf8g#VfU}&<@1Rxg^=vp>Xh`Cp*#n*dKbUFpSS47&)FH zzlb2)tPDf5qJN5*@*T9PVY6bO`8E4kGw5n`A2rb$JW@c3os(c+q24Zg0V&_rXSNtV zk|woL|+17QN&e7$$|_Z8O!jn2Nf(NHpnMUlq&FCpcw5gE2oZ=p+6b`)Sx zkFvRR(TZ*??m-^e#`#v|TM!wGW`N0>FTiQGqR!nL08$&#HiEqpLkqbg^h69V8r33f z4UGjuGW-*jU;qvhE(Xnf~za40R_Kj2e<#?BcZC)PJ5q=e6#BOuLC0R$OzfwjX~W5Fr(HQ`9Hm8ihYGe6 zcCFr|5)hU3Ic?Ep$1NXC%;SI}bMl#OB8_BnEUA2I1+EcTr2CGOCIH;b2kHGnkPXG^ z%SiSAwoy&nfy_kb_=?2W`ZOB58_FdySUvT| zO}&>OF}A;2Ftx&OxEw0EnV>L^K-+5h_}lWjVON)7{sG)kl`8JwaFo$0nGcs9t2dxH zn$@659bNvAmarA#wPm>o-!!=6LYH4b!s}`ea&Bww5@&Uak=V#lHaz2ea3U>(Sk)Me zr6}KiRk%FmT=-V;vv1OH=DmQM4-Lh6$kg+DxHx!)6f)cJxCsn}46Rvw?fmhAV1lT9 zNu#=;vK3%98%$xy8kWfne1n9R6y2B>pu@nVp{5roH@eC8DR&LW+4S(Vhcnoe@w9bT zNJ0bYi|O*M|66|Vot9Pj34Ym;r&J!rbMv3|$yNDpS0t4+Mn4LJai?PaTd+2{@A-P` z*DiLqKd!FlU_B4B)X!l=5l;!up_m8yI}|Dm0HH&&D)8BdQNoxjdDI{0R0=3avem1Z zy663ss1Qjit|hL9k86TXa8w7llkCr*mp0kIR^eo1G~Qflaa7PKcY=V0DdYgmTvnLb55-Wug37ksi$0qh@h9J91|TVN}@UD zNRGzT_Jmi02kK|WZ{6UQX`~+;<}Hftn(bX@&>y&{k%z1uxSAuuBIj=c#gR*<^0Jsg z)zx0DT?5H79qDg`lHA0~Bo1?Fk+8fJeEjKuGrz`t8rX9HhxWK>mhgD3PicR~Z~b_l z1=Qqtjr!A{KbmCn=|~wah7x)**@HIb!#VE`(u+CESZS1kgfwK~1uX`><06__|B` zT;nV&%j-P@d~L|<=YINve7&SK*-!g9^80wYxp}>wzCB-G+1L3Mn)mq_EjzdB$ zD{C>{I)^F1 zf>Z!@k_J%fFQ5*)*yGR>-)h47Gj;gv>O!5TPHR^uo%oW~DL}#&a|enYWAV2N>>Gy< zI0AVE&Y~5CtIH8Ehl7Sde%qu=V^u|`b?_Z=NL_27w04zRZurwa!}%LZwya-Hf#V2KBkmhBZ{r`nDy>oPAKUjv9`cDL2b@D5u{K!YnS>?~ z+{wTF*5rPEYj(~1OYlxwC1`QXq_nDSmBfF2uC|Fp#a3YKI{?c<8nRSA3!MGS!R>?& zcvcN)_a~tX{7xaJGxq!2kKR&5h*9o$rJKUp$j8o$y8)7?nW*!{>c4uu^wL-u;e?0$di-!mwI#PMs|r za=z+3Gn4vLxH)7mFmie{B@Z|QkuaVMz$us=LSQ?EZ=4FjyjQ~;?F)W%X@=ZQRd^>Y z1b%`|E;=MB5hnI8#wE{S+!^`l5)$P!MC53xWMV;+@eFX!5%kaf@ZlO_u2jOyMWMvwb35aoM$WWY?No-WB-<`YyHT94J0AlGF z$YTj^BT)3~$jl{haEaf`Aa3M7lv5oOHiF|-B%iCOXbLtUk>qfmO_4`JLm_4e$STtd zLp1S@5sB6@Zh8a5qyVL#dA*aPQ7Ddc{1tg1fNHdMl~^qEG}w{ z7$eji^7RW@=@1GL6F2KtUB10EfLoc(5^;TU+y1a9?{hlBS6n^Pt^vfU{7L;TfuCqLvwxd|hL`=8_9;gx7BofPebMs`aa zJGzLHvB~|lH$i_@z7kMU4w1_!`?4R96xXo5f(zrlyuY917SRw33?uR$1JI3rQB@sO z&{>G7GDCig^e`=CVRMfhn^>_?mseQ>(UdLd4cssYXBgD_%u2Y29tg<@0Xe{;1orE^dY)D{Wv8oO-7a2)Fg=Z@)%ZKs#=w z5I>}n_HA1d2ByS$bC zQK(d1;@sqB6ulK^b}ni^e9~3Y5R0lidX|$d6X`NAb7w1he?d2`0cw1VaDtI8Yl5>= zNiHaGv}M{;EL6>#8FsS`N3f?H1ivJmR8q1vk@&(G?X7}bqI`0nr zPO;?xHtI?Nytzt-r{p%x(x-2q4bxt22AFD}R_4`SJJijkp@ns)j|j)@`j70D9E z3dxKxzRnV_HOGf!0nD}J!#I~1md(o9bG5<1Q6vyXOD+;3IinKghph7R2bWBx-p7=U z>*f76GPBlv^MqeFVLM;M1^Rrx`ZqxZ=TTWvfXxpNXliETt_^D+Br?p%()%ugWBlk! z&gMi4h?0~}TvyFz5~RKbS=KJUcX6*_YM(;H=jYkiVmc^lKvK&%&&Q=3^+7jEd@0ei z_u1rW3-e;;oT1;S0v-7{*Mz&W!<7u-v_J4at8Y=v_?GC@Zea0o_25dMqX5~?{aYEL z%h-(+g4fKd>h3>lLkOWs5-d+@eG!xGG*^uFQ@gK5n?CJz#$7FJadU{%i=R2JW(KK6 zkV+$xR+%zC00J_&h^+PGB}DMi&{V9ZnRvCs<=l>*O}Nt>H_95Oroom0OzAS{IVcZY z#FH9&*4KyThLk@X!#g=~h z?y6ea1PeUV3J&t!ln|M~yvm0v*^?UhRS3TR5cd@)C)lKetEQ>eKS?;4mqwb zks-@_v_E`A!|I^yauj{M&u`FO&u;+exWIi43;f=}Rs?-RZQxm8kc|y~FG(>lW=1CY z;s(7J=p9m^GhUx?k&r8##dP13u0`|DtED6!37g|3agYMu-8dTXjA%m=Y8O6&I%WO_C%8WwC@Rbbhd|$1N-8o&{U43`gAWlT?mf|)EP3DSYwDr}D;RFg$EH$N z#MR`hC9R((o0;+5?395AH}0=)0xYG_xdHXcrr5-u(d`RtaG!p=<|gyzN)dWtZc9u( z@1N)8V3CTcBT4#&=m4$0S5R)rYMgbq0}I(|+hf9^Okmz(_TZ)VQXf{D+b`M1wJ9og zV>0=mtIOezhgH%Z-L`zm?bDx_#^Ffbp!-!x4Bndt`Zn<(y;71L&&0>8HZS(?O#SZA zJ#}g%6upkt^!&_2cybKn!aH4~$bAcYxhB;M&Y`6QTh6|bARuZ!Dz?K4I+{uiHg3MZ zXibJJl^$>Os9$jJXwL#p8)hr2Me^$IBp0%&m9twbF+L?+8FsK-lokQ^){@$z30%>Y zc6zdCgakgwn%Rsxyuqbe!-~1j7Y(ojD|8`RIOJCGmKzGQ5e~Hhee3eet7^`p7L87w zB=#ITWya%T89?lyeVblW{DxY!Cc?8ak8eFL*P=Uii0q&l=1_b&717EGsl|(6O&N1Z z^iri;ub$UaD~zp*hG{PuaP01=P_&rTeH%AD5D}eFeOZ%b5RpAP`W>DJGZFm=>HBDO zE})(jlCMt~5`PNIoWwQGrE=$1{FitnlZ#Xa&stOHcYrpobWu%SXWEK>hn#*dI@(3I z($A`#^=ZSdg7we6a+>uKVA@cwNu`hAMe3r?(C5pAc_LxT|K@In87F5&4U4zC_EMD{ zkM>&x3|8dZgth@V<1$k7_w*wSyfV29$mHem->sKqw1fm6PulS*`l+ic66d#ayV08j z$|^VP>;QZU!X=a-z*#gB7+YOZt-xo3qAHrRafp@aEHwZ88?>gB={LK0^ri~(1to_G zdC}o?v-qdXvvDg)6%-7)0|(lMNQi0BRWl(4cm+GeYH@7GggHZIaa5fbnq4fu*~0oQ z5s-~=7CYi00POTgy@t(q3VHJJ2P{oNrYb2`M!?k6aW{&cp5j=~h=mG?SXA!Dpc_oi zA&(|5I{COQN47YPB;qSvZV>iHibqn+@3VhWO)Kq!zSaJFuvfS=<=%-yT<5GTBSg`f zO77b}zmDof@(V+W#8CJy;eo7NEE(|p*egY=O zdg9IM_fr7V#?H^uLYPRLzFY;|gqZe=hits6?)y!jI@EE;EKHzyxLMTL6(Bz$I#V!A z)VK*t5d;VRY?p85QZ5kg8v`XNuOxXriE(BDHL`J_RCObCrVzCoapgR?|B=RCeM0Zy zH(7k<1#nSm5BDl&e)bUS&m<{LWY5pnDt_OOFo7D%Q$rDts|^is_h5fdYtglJR_GSR zlWVY)_~e)> z4Z$nS2R2^;f6(Xq=uPcHe;~D540PJrE5|L-XQgE3mEd*WzJ)~1H_==)WH?M@Z%cVf zpEwjcX0J-d!|mbD@mg`)#oYiq0=NhKw6hVU#E`S8$9CoXd3q@{R={s>U+c5?LaJks zXtq5tRGeG5xM#I}1<_M=^94o5)j0v&W)xjga=Y<+P^ci}qO+w#_}F?uJ3Oqtr8oB7 zKx?gdLkt>)bc(TXC_^E!P-n=u7_JX+8U>hIkCC7uHr&~hw+ROq$=AO->(GPWgC+)e zoImfLTFcBqT^Fwz{s4RqWpi$qJ`OLd!0eo}TUvHfVFy+IawS>g&0Avcu??Gk1xyBk z=e!&~eALKfW@~PurD^xkLrtGHjTHQ_=*yGz5;#kqk+6F}UZFMg9Ir?X>7rVat%*|F z+U}%UVvu6Die`{|TdE~WsYV;Kq;v7# zC|BL{LY1^$;30xcFxRm+H{i01N_FSo%}4d{u**Uf_2z%0fZj?A&`U~5)50uS7pDpGgw{-6$DH)=W4whFo>*Vv#P- zuC5)Ee{9JWwS>qHgJmN6MM-}iP|djz;=ZkhSHh-lP9j{I2kk$yaDGlD6slz2PWW9$ zdN&FlcG3@+YR;w;AqHRh7>W?#+`<3;T^Uwt@>>+#h-DlB)-C*I#Z>FH*N+XXb87y# zvL=Qz>FLrQV9(FK!aGqBD&&wxPo>4>6u0)LmhJ&WNCX?B=ZpFo7@Tq6XbfG%om3}0 zmqz$Id0uJ?34Ngb^jLVe%1C14A8-|u?3k0)GqYpm$(!_t54%TeH75clFS^Gm7@46t z`ikZ~6tRH(FPtbS3Fp4)T=4@%VY=^E>PHhjP^O@?00nYEIX%Y*$JcF2;XarZpF=vp6Q^*e0A%DkPHoF>Y)CG3MzQuY;lp?b$=5)2kiA30^4L?4E5y&EcmQ zCqJ?rB(b{1FOCjk`mYiWLNP`MM{32Peuq9GWgs)FqdM6Bt!BDGst{4m=9H@oYj0u{ zMSy%5hM86^@aeHd#_TcBny(lc`b9!)G*0erOm3jp6>?g*s(Ojy5k;gslN?IUIS+r# zz;eYA03!aHrPL!E(Oa6dJt7APlcT|Z2fdO4JFgxeM&l1Sgp>CiPL8PJ*zZgOfmeI; z7f9=YS*Hq7(x6%6E50IzV560y<0H2Y-hN0HX$C#;Qi&5M-&d|g8?Tw155Li4YF!;g zpoV3V;ENeMSQkU(g=b9j{~J#HgC3TJTxOu?k_R8z#xlrjWEo95mqiHR#8aV9j~~I_ zFsccPYJ2fW)Z5&LjygbbB7FSJ%R(unLBYXhzvDBWK zr6so!jAf>y-IDD_R1dX1s0}qH!tkuUH;s|1SpX;YZyA2t#1jSt5MSi?0PqzBfuaw1fc>lO86W70=AiR7(0Yd;6So>yESrY^lMko zb98$R=4}HFg83WZYju)LYgMO1DDLE@A2pFLJu4Sgm>^uX8O=M3vYW;!X{4f5Pap&C zeHbnZD4`fdjpQaZG=_`W(W@6~A}BsWcH-aS1|tB$It{0PqB+eroDAVz_l|d(?g)y} z2b5&vGkcSykH(o~?Md?@cdv~bihkxI)&jSQ!l;ZC^`e4~tsya3nq<9E_wZVB^ z3g!>3Jc&Nbm_uYH=`HGn76yJauz9Q2zZW&SwoMwv&$Qx+B zZX1f0^ty)z2c~o!aM-qqYxgvUJxL`wii_>vfswrsqEzF0sWW&I7*}iF6nVOt`Bw^f z3eN2@M=i<7=V`okBU}kA>rXk`mjn^G}Rd@H)e29ptl@ z5BmeNHm$Cf0p%m1htG5D-c2w00w6ANzxdkGtwHM?eCFXa;6N)ZEoJ8x`u42a&_(2R z?**$gE=@`n*fFp9DsAS(eiBR{Vn_K6?STd`Vh>SBszFyCX+@IB3y#z$Kl`o_ zl$t8IDhqV8MTlWm-Yl+L4)-&lKhe~QzpCM=qC^+_Pitj|v$o?@8~|v3424i!K62U- zD;4}L@ijU^OGRw?$a#>?T{(JkZezbe_EZ9d^-q9SbfLS5!Lm@OvkZw%bFl?p8BMi2 zJOpCS(@w8KFa(Tnk0cAqWaUXQoOZr85@*(0NhZp`?%wmfEN2;a3Bs zGpn`L&Gb9Ddpf?wb@gq1{Mo;JJI~r>+;I?%zL%|mmAwJE08IlEAQOC|O}!u8&0%v< z%Htj|48}`43`uu#qm;Pj<7R5Z@HAHSCC65VDGoLBlm2!@V4zn%y1^tp0uLWVYJ% zMiu-1(X~3NgftV35&DO!yD{DRdSg|-D^iWk>jM66YyDhEJbypXQ1o2yeqKYx&tU^c zQHfNMKadgsv^D+lFRl@ZH$nM!fTAqQX2XwI<3Vqd>(MxcficB2aNixmfYc%fK{SX(wV|7$ zcIxRQ6`aO#O|kZP#yGxTv^^!eYuh~@qnCb}EM*z}6>z#AfbF4Hy#2%V z)gSp+e0r&^H*l%IeoCLOv()kx|9k7Ynj<10^E;OAp} z)p#N!F;0&Du!~|i3H~zS474x#*Rbj_*B95ZA)9% z>X!Ak7E^(yGIuDMk$?>iHrRLvLBQp@w+l2bnu(qWF$0X8{jez^h+Ui>d7FHHFn*rE2ydJw zi%r09+sRZJNgQJ4gCf_Fq~|M&Y~Z9sckDwSLE}-gAzf_w{wH3I=X*+(co0S(_ zZ;<>GDQB$n1*f3<^V;QrT<(bXIZn+pNHk5}27wAP3Y^v^0F3^#`56Q}e8w8FaH=iQ z1UoNPe6VU0mnn~c87*u6(-;rptZ_WAfyHOk)cwE@-IR zQ^Cv-O=C+IVm68NN8;_0tM(YEMrTtJMryvuPndiYe>x zC#u_L)9AX!AV9?Rsm@HK%-EEHHq557xjlRe%x;|~XSoL^Z`EG&*%~uG9NRYP=d0&w zMhJ#FA~jfa8HzqkBCh+3u4JQe!oK_UHN!e-(5kUBzysxlZ}4xj6m+X0OSZ!&68o>y z$j%RVvXEk9PrE#AefwY7h1E9=)CLj(5^p!ZV5Wu(ChHKU(TVB_WLvv^B(h;R|LoGa z|6TmkxWt(Kp4oym>9yF)t~f~hJbQu`RtIWdybwM1fO7*~@^l$LMTg?D7^z?{E)uYE z3VznM2B^y|J}T~^g6X+kEoHI*F%uB8JN9B)OKL{j$aeJs>K-In3MdQWx>g`!jSN~y z} z&#WMDY>-?X$DLnb&}eK$Mo|(D!r_e|?QAEcGvGbn;dq8XcKf7ba(lF1K=i|t^?G4o zUm>fbU~brB z?bWMM{aB>UsCkBbQTPk;B-KR{R;Ok~`|EMGL}=3_Gy`>^z^k5lY7NewW70`NAp#=T z3Q$XtuysX@tsL~nz8*i1gn^D2b!<|lfEr(Z(pvxv<_|GsJQde8a{PCOSyBw;DOpDj z&}IlTs=5bQfp`$x?KGg^BG`1$6ulj8tb&g5j%l+I`*&a0B)0h~%0&9br5rh8X=wLr z;&hL>U;8E0X9+n+4IURITj*zONcTm{k^mf@!!yKYw*g*HU%>}oj(|y>mrixX1&2RE zC@jsa4IsarfjUiDk;POeVYbByArt*@oVutOaD?C#E z5SLQPXrRr`eRrA{7BMwHNoYbfrE5PSa0x5tei1zG4#X)t!t#;Zg|lwxU}?+)L`;#1 zipa`u)#jGZ!zrldTltxi$$iUsst14d`AOWakkpapCCe=pL1P9$Wi=6k8nGwZ9Ka~` zU8cElL(q=u$7R@J06`1{8&|gO2lAFH?u1b+F>l>(9^PyFKW_%yZ=4t?$-G~%)UQcH zl71~y+tcr+!iJ>RAy(RtU@eOPenpQ!e}+-*oQbkZbUx zb`!J)QSzCBx7KK>mO|xzk;st4m~0_YvrhHT05Ny1J>-df_cx5FuwgttBUF8iq#2nu zb+1+RSM>9ykJ#N!G!T%SyPMQAugL@3-s<9gWwr)oPVe|ckGZ8OmNXQZP84V*9K+=& zfPtdx>2Ug%W%2MZfGP+=+%@Xrp@zwG9*>rQpGelCcZUw*2#n{6!<&p91F z4o?m9U-@;vk4^y_y3%W(RLtRsGi1kZ-?QAAv{(oHQ;2ZM)%ID0@*z;8{QCQ-bw_{9 zY$tx3xt16KX!<$uZo~jw=HX6gm*PXC+7j; zt$m@l9}B~D?h=7%fLI#ZYmcXR3z*J6KsWo2-c2P=EP8r29yTq~at|n}M?+{nDp=Ua za8`;~E|;rOkKjphQc4^ht+pHe`d>pHO>Q|gKTV^&Ds@S2Z%PL-yEtkZE};M??Rkv< zB%R|oyM5KQP-7lt;E!Od71%Q?QILg(KYqEHLXaJUXt8H$vC#Xj|47?d)B`BzWB9V6J&pi|>)VrCEk#@TPv&9yC7UnHCW#21+f3 z$Rb+x7p*QaZsz@}k8F9f+t(PK@#uI^p*~XGA}j4W1)#XG0A&_9sz*H{gH3p+Rf zLZw3ULrzGB3e+zwDb&rqCmexlR}J~P+yq^{Dm3y{e6QCw6RpY)$mg(#8&aBLAx%MO zWw#@WVW{Xe=Xu;F+Ell3I!OEqm3f2BkNn!IY=Bf1$pn)KpBuHq)Ib;d&>YXFjTvyh z7Tg-$_2nP<{cZYW8K>*=l}Mi|QB{z2h90YSr0B_q9&+rtMC9!~HZ82LRu9OS{XgqFGl)DFYOPoS%}JAf4i);Ih_C(<;$ZbbLH=KQB&ZSs5f z=c^%>>ry~(_OXfEHrJisz^Gx5PN_(@2p}U}tsASn+_#+b4@*xWG=Q!1?oQbPd^feb z8b*Wbb-4_-f=m;RAg(2YtsKmQ>w+n&1X;G^=tS}gqSw2AD~*RD+;T~J#317#o-?=A3!)Ycv-lsxu7QaSzi?Q zES3Q(e8~8mGxBp0zrBcVZ)f)r-ygtT*!64Zo#lQ(hqB|^BM^(of# zSW=g4))O!|mFO=JuVTgUM!NZX;@g7dkb__Q;plQyt-bUvW}sn;I0GZ!FyP-z{I=#n z&kIERcA zWF`J#_V<0emF3bodeimIh)^wql!iJXD&&{X^2mweVT{UalTKU&(WtPBESkz(8ktc5dZ}S z^unK+2P4}pjus-)=PEpjWwT?hm<9zsbPB+y4F#z>B$1@xWO+{jG`cl4#@%br%Yo{c z3x%~B@IDVz<&86E2~vS_g3ns*9E#)ZZd65Si89i3KQoOl&hDgZ1byPvVrtzt=Z7_79xQt4uKk`_Z6o|)}t)HLUZR6$x-Rl=}D|7yr+ z>%^KvNn3033G)wxGq*98tmKm;P#NR#a41$nT#lM*I+qIBa}c76fwwO6hb1w$3j~sz zH(o*M`2-cJy2u9)=jO`tKV+xs|NabU;4?2@+2>+IODwt7K z?Kx9}tKC6@y0*~T*4V|5A?o)Cm6gt*CZ(U&?hYyub$cE***pLe zpmUMOv_)a*U<6vXGUx?{q=*O2R2(>#R&b3HA15%t=QmA73K``9-7ip3yR2EqGqq)j zNJ6bl$71e)8Arl+?W~`AyLEOoURMiJs--{fl+{!+p9pVChcg$tv3EI5Wur778AjN$ zgs$k}y&kA%J{oUfQc;#6j=Oadtj#2|xe|VU$)N6AbDN}FqbNydmQ$$b8jq8JYg*`s z#xXuHL-0lILL$GSDG>_x+bmr9OdpWrT^!y1sr{P+SUGxN_w;sNkpaMzE+pFXJ#W0y zx?&iN#a`FmC5Joe+SjLA?rd+`o^EWJlKLYwuvxUWak_suZ1A+(3)Plb1J#832AtSO z-Eo7U(lfd%%u-Zvt{r@@1ENQF5YXb3xZC(pPco(wMQ+JZ(y&C71a6mQXwqrv&^P5nmdBi=;}Wayo^Jr&z!gUZy*pu02`e_-&IRYUU^N?_ft5W~>>W^ck2pwMx)oI5sVBTZO?hNQ0XL&z*n%4_jS zpz|f>F$!LfVsc-=I$G&_tQaTx07+Kx=9VsW88-CcW`B>kjz4TIqD|{RJmT|^=B0qv z`3|n2?c?8#{hEMh4s#Z8SzPKD6w_b2CmnJK4LK}rlQ?OjGAD-1TZM8H^#7JBY9B**+VEVF&g4P|YWkJ>FF601oyvx_)0l)-m1-7tv(Ws!s>M z!c+a>;qca2RmryYAz@5i3=3*bnJF@W_aMcI+bc_t^Y>>QHz&x4fXZ#Fu8tv7GT$Eq zHw-~;a~R>AqBdS{qHpM4u^SA+_*-+8@lEJ-xM#%V|CaJXIF~LS75wULMi3X^Y?-LP zY$Z{15oebw`!e@CXahyDUkGx`;Xs&DcF zP=HPH<-OP6KfyNlT;_oWW8~ixD;+K8&FqzPv!+9xjd7jae~CvGS%4s9E z7dPzO`wm-6#l+ZbRU5Zya9IU{-W#5;M5{9ud{=q)a|*I@ROlS=qdxW9!nRF{{*)$)~L;Mm3qm}E>;iE-Uf=1w)M+MqL-Mjcq{L2PN#7W2TGYY;EzpdtS# z%yWT7V}bVZNaIqQX~OGjZ)tB|#BpB}HsE#j3*FRrGfYSb0D2z{5=egrq`J)$=`x8EbvSr}vh@CA;kT*x&y-cW{+|lQatP>I&B7OgXi`_D z36#!2ga$y=zx}5}a@m>z$;?>=<~N$n&hXaZBl~X(ja@jI94%2=^dEoYhC(SsQx_z5 z#<3`H=WM59r3KBB)f>~_BGs#QPMm@@$+|tSq9SYX3M4~q^h)H@^NAd`AQG94$*b)FZo7hRQ_d+#ZILN(b$F_DXqO>O~ zlHx5&%=D@v+{?{E3g7!53DS0w{)(fd5PLZ$_2ZKxiy@lW`J<)P-nSQzos!oONQkVa zSW7=9J-iF9&%yq%f+$~1)S(uo-g0-RKVC{ErMs0}Z5{?uW5G#~=};gJ5bsCct-_toS)TQFX0tXo4s*$7$R zTpE$@P^lmqYN|1c+Y2ol!fe{AZEUmHr<9w|lecZ`v{z4Kr~U1aTL5MT0Qu!UiP@hc z?9`U!V~)Qh`yXN^lTKIwTPHas2gwIHv`=^O;%C6hK?LXMAJIW4yenHm*T^sHmuoL zk3D`}N|KlQDf4qCYQ^V>zFQQ&)(|e``U&&ZXQEBgJ#F%L0>}WJNwgdbf5y~c0F=KQ z#>NaECSS#!M7JROonI8x`Cj0ZHg09>WU+O#5Duj|)qqY^b9ce(1vg9xc5){g0|pmf8%t@5S%d?yrX9GNbH zzeAd1mshAFOBb?ru7+w6-+upYzg1I;`UjYK>B131OKCK`{~>FZD@^Y~Jse6@iIQ1- zaHP3&w<$!la2SGiN!yFoWcfyX4O#)0J^Z_`kc>1C;F}VNR!W6rvfqHjmZllKCiG)vagkaeg7T~RpA8s6TJ+=lo}bVvKx z;Hwwd4CdkYR?QJfG1+{0>m5W?miX3_Vp_}?F8cpMWcaXJ8PPET9&nmllLklDpOp8* z%Py&XwmPMnz|jho=_{wXvE-v~mz!Xk+!cmL2HVdwECG$t?G7Er-t5-j+e(n_O=R{I z7u<+?{t;^e6CZrZ?%lu5VCz0{~uJ08fA8y;_I&Biw&LnG}NIC;Fen3A5LKO zj9IG#dyxiO%wSl`OWcdW%Pof!AbsBb7ibE4Wb8k6X?#z0{u0~r^Ky8-tir|i#YRU5 zRIQR@ll~tPW|oc<^SdfST#A<%|AM|O(L+!~Oe#$39?bCf$K8icFd3?y4~aTPVJF#Stp&2>AVYcg1cim-1+oZ70O7n5^;q~%d{Vs$az3F*-T?6~ zv|_SJ$|PqwfxxEmI##x6ED<+j{!nqZZgbUh5BX7VJ-BPh#^iT1teFIOFva_zY9dI+ zT!YYvF<896V^&D(+|g)vsfBt-4_?~n!vR&VLmVlpimRJxhFy;VptSA(bb&n0!e=1Q z39l3ZaBJ;i&T#ahw_QR{pn9n5NtB2~MnUGP&NUq7aEfcgTm^Fcp1W>&((3C0>0L^* z$m2(v$Y0fd4m&PLN~2VuetSf8f?12frgmTF8j2MMN?X))iv>wBJDmX!u_ohXCyBL>Hu8Hq{)|xW zSM4Xd4^nmNFzneugbA~d%tr6CNTV3G^aYF8un?7vT&;+3lV!!{LpYhqRBP4S)BF_x zEyZp8Xf%+;NXfVpKcUnI%#xyYk)Huw(TN+euxx*1*%>*T*2T-o&#Bb~>yqX;U)}7H zge)gj;YYLyWv!CIgA7{*$C|I<5(m5XzaR>CODo9Bza)z6wzt>agd`$zN=||Jv>ckv z49J$V3b}~tOTclrP&86j&Ehd&bQv7&_IEIfOnsyz@qaLsaycM|qE%k2F^kQehon;; z5n#wN{rW`~C_KmwtOD@Z1T*)oxjE2}Lhnzt7Af>{g-FDRF5J75rE?aEHr{M~d|dJr zW}+nygq>_H`8Ffsh=}J6zy1#pg~oV^b$An7L=tf0=206J($$Nf-*+p;=n(#Ia@}l7 z=hh)e-Rnd>^WxO`D|R;<3R)#}_hh!{U}YZ5yR4?~Kk4;}8|=OP9lq7!-B6)^_eheBHSs$#-k^#x2$nE6Fm>1vR4$!NeX=N@I*&@3jpH_ zyNTd8H`JI9w%UU^BlDO>R&29uV2jH`9+|l6c!sE75Lbes zpaJEY@q`T1^+mV9Msf2|>sE4g0p}*vHtbU8cVCGi!vd}g#W!n9TG{VTJy4R=^lnbv z&>{O;IbpwC#S$b)qDocv=i2SZhXArbBn4vZ0)wDQ*2q(!z27b>|}j&LxzqQM`z zGHA&a%*Xv$Vp9>)Pn$O(0eOQow4^ey!6~#p_Ex~gxE41CKMc3Rq|R2|h0i2|@og){ z$e7s+k#TribH#ZS+c~MDxg@ekGC+AR)cfM_Weex&eQMtNftPd0ci11K(Gs2rz)U|I zhfw}o3eg_HixLt`i0|o=;guJ6a0X(;?`ZLvju(2nLEBNP-wmtf&{Xx=NZ|`a@+y+7 z;gTMQZVIfU4gJ`HTA7~nd%8A1OxBO(zzny(@@}9A;;iJ&ApIfFe7e9M}*Vc)R!21f)Lo9r7 z%-gk+bBe!GFYJ52gvUIZrDq5+0$R_~j%?d_(-@j4|5V#2vcTul(WM1JIZKhbMs$)O z_&L$OF#Uvv^pO_wOi#-WBpneXJj-^!I@~=^JWH2PphCgB>$)kx+z$s}%e|!S`tyh0 zf1JcVgCDCF>ZFbbP-r*G14_Di~wMQpY@ZLVHH-O~{`w z2zt|p!6t}=HS&M`v&qyTtfL^cU@bS=N9!q+(fMPyFZ97A|Dj178~>$AY$|{>3E&@` z1lguM8HkhQQU4E|WOjyGHOY!=?Bzk{zn3nLxo7CiPtCnVevbrM`eA4)Kd<8?(ZPAe z>@$&N$~iXV3!aFM>a>81p;ZNlS?0~zP@s&W$L=}xr#mcIu=&x3Tn(@Par1PU30hgl zRRhpUj!FHpfY@s)L=THutwyU>4J_|OH$FsGP7rHod8tHeR{5bs)AG9hv(oh%0{@XD zL9q+%OiozDRz&zR_=(#nVA6t4877t*dFUbfw>hufDN=fgN4L`aN5qm%A-?pfT!~58 zJj1~qRC=*6SHjbgznr68InGODe(|GtYWUG_|J`$haX zpKU~9`AJ2#UW6g86+Yed6PI=}fOce(zw#%*1pJ5;69~h0@G^G%mB$CHL3Kx?FvS^1 zvnp1K|5&Ahx#rjb)nRB5j98?oiGPf+hHE~|2Q^vRh1LLMgowp=sdtASzU<>$i zP(imfZecbk)2!4-^f|p)Vd@2RrXP-pef7ONM~juVpnpfCxAs?qu=C;eN~WBzV9ndk-9&-@4518SlGsudj0fL3-Pdfx%mP$-iVB!?xItACYNYzeO$ zB1x(so4>IsJmTCfMv352($tFB(BH^&Q1mLy)tcdzTK=oHhwPS=T5sRABbxg)WpSvO{bMmM*-0?d z)rilp1^dq-(>Dr)qsyr+e!upYx+=m!IW!4K>qvut&=F)na9MT?G6RnAIDv*E4k1W_ zCUXUm87eu6H4gRzLR$ULQSoo$Tv{8o#+)z$$y%TR(NrJtLaI_9zQ2*g5*r90ns ziZz|jM$2b(lVr+vcGFubqMWKjw20z+6+(&-Lcx%zL683U>T6mKW-;Z-?TH>xSQIk8QK7T z+DO?83?{X6o$(z&1DgSBp*yxIbS`uRe4ttboADnn2Iy(qF~Z8vhD_Sp>5l1OvZ%K) znAlag5<3IWcP@ua()$9>@UTIi8T4NQm%xqQ|7_MFWv_%x)&SoNjQYp326~jVj4i|gu_M=@tMk` z{{eZa(jlOxc0cu1NFoG;mK;bG>_$cQ?v|0-T#Pp6Z&FhSs7Cdz11dPh=PqfTqA6fW zt2L*CN|QJ}dgsN;5ZiLt0}jZLJ|(?;^l-15bK&Hp1e!pv8S8zMtI3CP@}bkdgB_Xo z7jJ#U6khaAa+res*O37e-5ioNf+iSRbm$AP=q4(;eEA_N@X}=gP!fPNykFdL=R~Fj z^V)VY>0F2mt^Db}_Dz8q0ZWuYM5WNi$>pRVo4&z{?!9fxWachRZB@ZIP-+lePWq=< zR3P$sT(98zCkC`dg+|J#Kd?5(wSG!66f$b8Z}NMQ4vGn*Da8K|v6%SfBgf5d%BK7E zHic%kE0Zaw`C=>(Wx!RqBcEz(-2*hTEGntR>#mBGC$>0cuECEs|IDAEPkw!91H*Br zg0o3i2wW%|rS;2z3+EJc+qIsbCMa|;{*NK+8EpvjJaKDNJAdZp@1X^rTk(mRi4V-d zvWU7P*^pZ198!1M?A&?!GTq4S*>mVsc#bMy_fH4H*snUxB#N=4Yr};9kR?Y&2uPfx z_lD}LHb^Ov`>6*hVki9*X3J>ps$KmChI?Eo;j}>7VlEl~Vk!w_?PR?Xl{j8OHPayc zttQ7%eESwe!M%?LUK@LDrdATvynY{L3 zfW0nx0A@xi>W9nHGb)-$vuN8K)By8ZmpGIXC<^U+efKi>96XhVanaJtr~X$z9weUa?03MlWw*-DBD{e!Jd%ByZurpa zL2ZTP>u)yhAQbn>@oS1h?vl*h(;Lk1-?=bbC1atpMqB4rxzdQaFjP1vN+{z6Jf1J$ zV4E9&V%s?#h`tP-=_NYGyC9g>yE382+#k)!ClNzG;H4PzO14+D$uaYxgz96}ZzcL$ zTo2%yOzF=WAMDBL!EJoP^?kq$P4<2t7#T=sxn`f z&TRh1o|tJdw^J#W`{8I#x(ShwtuZzR#GV=h_i_YoSF* zYa3x!@soSPcjw~nCNTK2`gnKV1}-$lyqq~9IhTJ@_~W7DpJn?^^|d=4ul;0O;JXCp z#7hW*M+(;(+BH~Qvk)Q(x{KSF@lY#3AcS1)%%1hcSO%5FD6uJq-#_LNh>}9d&c8UD zA)*NkY-zugmWLlqb>WF*3(9f3wHl6Ix@Sp3k=Nt+V4WZHt(4=A%?9t^fS{%Es9m2myqXHFg*`;^7u&)&Bl)sRDF2g?+&K}kB1n; zd>t`CxraY%!!sMsj2Q{DqY8P0Y>658LKHU0CP^h3S`Q+MLjSD%q9{!|Q5dGGibI>r zr7$evAmHJ#BXGHaLkU+Ez>6i_iSahqiNA0<>mL7p)-hLjC-W+7!P$3FYA8TMh&`#H zQd@}LvS$6Qtk}CooXjjViUgGwAiK4U`LG5v6;$b6gw73m^jHJ(Qy#bI*eGK6n94#Q zy|#jIMCegyT%ZCMTh4ombv^w?d(}n4A-(V}-|CHH$dKwax5Q-YHEccgf(Z*Af>yCo zoQb>X%R23lRn!0Rb%0yD(`!Ng+0lb3hs1fAqh!@ypZGU0H>iTC&77?d@MyPeqkcT| zL%BB#;6%pQKx9C5OEQrQIxCL#DV2hiH=Bt4)5Td9ms3n+z0E2LEk-3Mu1rgd^q=xyGEZcxB# zVfPmFrbd}d?%|tp`SK;BRH)nKZBj3j(}1iVUE54<`p8+~@%S^CPm9whJ9c7 zuF+S_#1)(s^XMo5m=+q@(uO#7xLhtZ0a@bAI@d>vu@{6|UZ0fuPDgpwn&rO?2q6mP z%XP_6IB?%(>q)YM5={yFf3?eJLp z23S#)*M@hO!O}n|_}dX{&tj3x1<2Tt>IpWDRM5yG#U#Z6$8s>i<~QfhI5%OqD;*@| z29jJ3rUDcr>z(t4fYhiO(y1VjtX{s5=UM0yM0y| z4>#vo^}RQ7p+45QTScn^e%F?BV^eY1CzYU|f$wzc-rg$7zQ&i$rkCGAu1GJ2%a~2S zH!}YWh;%!j3C?(WtAEWLa9-^W}>Ic92Up?d1p|u)e zDa$51-*LTKtSWZWZaEd?p(H6DF2_R=ij1Obc$iw3tr3&I%Ij}s1W8m^z3v?7mWl5+ zz(qPcfc#FRw?bTjM+o{k>8lL9IDo+RC9^;+UucX2VS)?eDBH@F-!)A%r2C8RI;HFQ zwW6M4u-ja?U$;NQDy5KJM_v9}(BeR$sN2#%xveowV!i!{-ITN4xc8yb0s97N{=Vv_ zpSPzES-BA_RoiT&?Y)-M4uBl?x^xjlA;JWZa%d14FXS3tabXZt8ie6eqo+8-^0{q1 zt{M;nW=SURHNL;pI(4G+m)A?gdl!C^STvg3V;R@IOn@?f_8VAbYypA}4>n7AO*ODI z(C`?{cY{H!hF7VwdWbh%l=<2UO5fFE_j-y(^Ho_B$vUV>cvUv;dCFJYL7M_dSAK8xJJYe zZLVNb#j}nND)VB9+1}G^L`vqC6;4LOVGVD#ff0fS}J{gBiV8 z70Vg*me4|ulMDJ2(Q$XSn4??#CajKmYoF-`QpO1@20WjGyLy86j8F}?oDP+~MFK#qYpwlR+*_*9#9DFkr$3^KgL zjD^qLOma1L!cj&|30R@tle#}qDJ7~}`HC)YcgsSN^hnzYUlg!29DNWk=C~T&6a8w5 zp+yzzF@m-<4Q!w?3df)zZ>*ut$BglsxcFBy(_5cY+}U%AP1CE0Ao8X?fmJc)`CSRJ z+#p|qW=+Rglj{S+2h9bof)}uO7GDgGoF}P~H0-n|RZ1}2pW2D-^!NxQGAYG!erTa8pyX zN^w^k=~@42kORM?@2r_DhE)hBuB11i)-4sKaA}3q7NZ%A++_&r@9o@it+n7&AAaks zYqe@qSw+A3K(h+_6w}7j`XJnQEKnv#`m(IjgtrB#SNgn`ls0x5m{tAZEJ5Fk(zpMO zC=>6cy=1Jjq-eSLfCGq175$In5@D{V+8h zEaH7BYH#KTvd+c8-~cRj!4^ctQ>R)egt3uD+JaA}s@(WMlM-O(@vEjo4!RVkH8~Ur(?7=h(>`-GR} zcAjZdWzKLsUHMlw$Wk-?`UX%PQJ`MC_)xgYO!E^tFPy`pWortp9^J%*3n4B%brI)w z=6EziXWOY}m3z4*p^DtlD!t zSzRu*nfgPvzI1bli?}!l#(pSJXE}e!?>wXMx#U_jZn5f3D!UT{^{q`EP~mGh?KKu_ zc-^V5c$qMF)I}=y^v2cguF8G4bu6Lu!hCqH%BM=BQ3KZC9U-)`wRftL^GaO}$n5D* z?!e?#eq znw3uPdIt7GiPl*gG6MxUqzm9Uu&Y3(J&lWdl{tx0fb)M1twB~aiY2hTCFq8~Y09uS z?U*SN)~-tJt0b~RXml`OFE=H_u;7z8GuFL&VZkBnvCypi-)ozm1slP0oOz+qtUbE5 z4seuQZbqGX-fzu5t&(s|tqpuAH%6FM#k<}w9YPrHpn|Bd4FxM@ z-U5TEz_172Nn5s6BJ<~L01RiznHq@g+WiWICiTCpl_%_VX>>n^5 zet@9`Z(VNWvuUhEmqk&iCDaUZhjZ1YX!d9SpZ!$V`8W#YVa!?~{G0}dsn3vSgPGsO z(!N{4h!sBY;EFXE*JfE1!6LfG-+sE&$)Ea?J> ziA0QWSG(?BF`D8ys-mRO3J;qysQ)`qcOzK_4ipQBwz3J(DWh}h_R5RYuODDhEHA=M zC#jcHuuy19+?H`wOOpx|@JkXkY|FL)sd47`o?j_u?b;6OvE_m(P_x#;2&Z3MDT$aP z`)?))70sllIg5l3yq@D`CEb=}!Fnj~8%_yh8vg~q>0D>&-b(5aXN5NX{abGHm3LqD z-G?_YfZrUQN1o3~t2I5<<^XqZ{KkQOKNG~MjONowQ;f|TpxflUS?i}Z9%5}5Lhufc zQ))aGAXrf1MlbZ+L9?5xv8;7Cz^yfbZ11PDMCR#;xLzlU^7Sc{xx5<$&h=WZK}#;g z?B3PejiWH#^Dc5VKnlXUjwTd}t*IWZ%-VUKOUv05Y@iD>Pi@2q~Ze%l-OuT6+z`b0it z#u;b19t}Rj6Hi=JeLP8V!XYy-*3oAw%fk5h#6Fd&Lt}=Fu|-@l$6MxM#VZ*Z0TdOW zHn~+<4&+E!oY#T~+P; zM8Q`fMth#68TvI#f*O+}sfO2Fq@3suH7Is=y4NBiYg;fj@msdG!o%y`rTO{aba`47 zgCbjVD1~V3Lun_IPR^qZdG{@BW4miTXY0?cw(om=;UrS8zJJL}@~6x%q;*Fuhk&}I=-3O!e1TRNO_IH>GXKmGuM7z?9L~{F`i}7c zx+bi6YBfb#PR+>IBp!{dIBU8(W0Y+r@BR!JKhiW8M}fa_6+uA8!(1I5j6eEU^q6 zM&1oGR*BI|Rx}#%I-qap*K1Ei%*(7fb2XyW%2+>$6{OM5Z?R)351#&1uS-op>zwYw zVz*1oB@D-<{G!=-4>_W-&?>(Fy+LHYgJ@05{CSGIzq~SQ4)MYL@a)ohAXD?qI)wwx zDA5VKm$FPmh4bw>p|1z%>#reJea$c@CN05&$iSGJcDTtGdu3^pS+k_cvbRIVw0(g>M- zoB(z1p0OFq%HQ{KI~-#VdDG2D$+%Uycx^3foek?NJu-Q@>?K45zvP(|`eDOb+ytMp z;VPmG@n?!A1MG|2M$p?yqM;(ZLr{BrFr;BM3Jdi!yE*N>{HjQ6`~hu&{d!%$(qHM} z6{Y>i@c@2pP&W$qSVmBG?y;VR9?rOlp=@FFiRhwUNkG>O>Md{GoFQ+s8|Y9FZsR(W zOJKhyo3B_cc%1?jwJeu*&JQ(Ego%1-Jyf4Uo;@Bp3a$zC%n2jcaAE<~r(3!wdXk*z z!%)Qcl<+*?VA}B-4-Xa6 zV(MnYfMP3wC^qlz6m&BX*)Mc>Zj?A z56gT!s7j|GunJV?u3p#k@MPr}VOuYm6c4jLI<>`e_jY?pxw+La`CL^cFzrdt>-D!* zKSE^2vLhyK{-L-Yd|SEKWuSv4yya1m<9Oyk*9Jg0x{{3U?w8ngif7}8pyf#Xz>xhj zw6H4c>hzPaOa)xvJ_FQCW?7}ub{B6QUfe(E18aPNj|diIrt5c{!O#~L$>J1tS)crL?S-TLn0_F)`6Sh2l-%W1uN z5(xyvXdqyY{IO))K@CYSQ`+u8;0B$E5oH_?z`DoFdcOl}K7DD&T?S-VWdc#lua15c z2sN@J{43fTD{M+o-I@w%&Q-y7q&!2QRf!XH6Opt&Q&xyoSMT<RKj;`>Yxx`p*qL{Bu=t#uw| zdu#tU(dEFI-}*OcU0MZOzewVF1pin&R%X?ebhHw3Bvd}0|Qw}SWK3R z2d4SzN9k`{_B#Zx57C?JCL#|k*ey3r)6UTp{^m0b5YPH{?jJ=C=()&-e7OHA5#)m+ z@C9?PP`5?n*)UXvYXnQ}^QmsxP{l3$$WfO-kl8Q(3b9ge9hN1!=;m>bfSptMd>)Hk z%VG}jIdM@L$^2V#O^ycj0KA`v+ZXLvExlLySeU)1W$zY0U%xO|F2Qfw%cDf-o-p)h zX6o-bae&whE3_knGk04+KSI1wlbX`g-R@%X-u>z32V&72Ny=ZMhIXNkCl7_OlDt3( zkUp=wD?43iE#4oDTz*2onPZXlCAl}Y`dTf^PQuW_to#TM@Gfr)0T;eK)UY0yE{*e! zpPZ6gl(dz*&Xy~sJx{MaQmUAdQ91jXuc*VQEQJ*IEO1)aTphXUF59yj+Ku&o);?@= zM$ihX%BV)lnSW>);x}?yg>`mPfc-NJI%9*UKIhSU;OEz`K5V&RE<33HFWm%PFjv!6 zwS2T`3`DETxIq=>Km;6)1hsJ&gM$PH)kamdzvQ7^$SKXe%aj4kk# ztSE7TY!-NkTA?D;weTSxQ!2FGQGQZu;hNIQv7#GW6 z^_lTP+mgrUG;X$cc{6*WF{w}WO6`jVXd{v{%#fkl0^V=q6JMpS< z4>gtX_iI}}QFprL<7F{qxnMuL90ze_u<$QM*`kW&F9F&$i(Jic;kZYIz(C=}nVodN zEon{%erc6D5O}|hOCCMdL)`__s_Zv$7DC2AgsvDNP}5iXIr|5$_{P|mcbxM=w zsZ(9ll(r%%Mw!FYjm*3SWSoF}JCou^Eo52ynHb2%?)S&5khatK@6l)Ml`%_mUiHho zz6ro`sUHVk%|l|2YVq&|ngud+MD{Y7uVb)E_XNKfaBx7D_H$^Cnhmj)@vx3#cHq@W zM{tL#$a_j3zXghzIFJ3fi-4tlGeZivmMX8mT z61)lWZ;zpxcc2rwsI)Dd4OdxyZB+L;mrGKClNYX0->{ByGzlJPBI&7({}oj~D5e4< z3x*T}XeH}QQ11xR8@6IaZ^J(SRdFm~h57MI%p>2tu`Z$vg~j5!n)7%QjqLa2v$mf) zuBrXYhs>BR#^Tw{TYy>B=Y?IartS7O&p!%CVbzxv$R*b8`81A0I6j)cD(qI|lsJo0 z6dCJW)^V0seBWLcr_B0C8pQ)b^LODNPpf!*fH`Guu=QQ?FIfe8z)& z{Z;vV?LPSA4I7kZttX~6x{hdUG18C3-n)z(b?-i&0o5ws6=w=GO1{fmiYlws2pc1E zAWV5U;{4Or)6k+7gtvaj(%PpTl1|eI*qN}v`J(``pml*Y&QpWE zh3y4zM3~>sVlLDo88baWxW7%*Pnf^n0ULYW>#Z_-LDsz}xd2|+jn?wa4FVXfPqPn6 zgo(8Ads1Cl@k##!%5zv;lbCXT)tnC*|QZ6xZi~G|L>#-Pz)5zbLqWF2! zw)3l33U0GH!qEG(e6FV99m;AD@koN^8j&_K14UQsXz){XS`LMl;qxZ*0HX4#8Y8SS@40VTNW_yoTl=MMhR`&oAkd zWO4b-`db->< zuc*A_m4bLv$p0G^)lAl;6v$xCRnnYw7zXJ%QH&SSsbfGh73I8`j(4h11xZb5u^i&A zWTxc_S*M~uw3#1?!hGh;GKIFo+Am#JE^epWA*H4dx%E}A5&1M6L}LE%$0f`+wG9Kb z-_wK?eq4!R%D|rtv?n~gk6DVBB}l}mXryY@nfWN8$&mLqiGI=vVRM$+kGh?g@OZTA ze((e264Z6WXSp6Z8KxG!3HF5UB;r@pm_s{%*G8JoNL3euGlPuzBzd zCi+e;vK#4kv}J@*z!k&S#?#@T#pym8(J{FOc$;7#kiL{X3HLh`?%eD{*Bwuin=Mi zRs=@aB!PFO9o+n4hpoiHV{yVfkm}P1d(R#0vF|r$W#k$Uop$f6C8i|uccFIcSArNK z0Fk~P)Ail@2qAo^QlYNX2YPgJ-cZk`h1u@Znn$5A#izGrXe-A#i?g-&!Z3I^GLD=7 zbc|6bqZAQ`%;(ET?R0cy-DX}u=TGMJ9OWNg?5*O+$CqCtpd<-C4*aLSM` z8T~c&*V5p$c6RUqr{)VM^+y8kE}TeUyz8LIb)JZ+6? zkwVF%5r_l^Hat4X#Da)NysE|LDt2+1w>{?IN90}oV_$0b6H`y|URfA+5dxzl zq;6kS<)2b*5-px(Ja>A0-#Scn04}0GS~^lveBTY*W#A_0E?V3o*fMzgiHNAPiVplY z8C{5eORQj>cj3pB{NIWgXLHC(^~!~1aVwujrh7^JQdaGkARo5`6*L-{s;}Cz=H(+| z#X(ep2Fs`?y5IJG{fKj?o4pHfniMW1+75*~38VAqnMpZz3?2O?CAoA64p34|d#eT2 z#7dBbN}!RvLzVgzTc zl9y`VRTHm%nf)_G6?0^rGKrp)GZloa(|EJQf#Gvv?r*?h`g(bQ6{xb2_?q&J!M;4G zmS(uWgq&4AHCpN9kdJM51Ec==iT&(dGr^Q@(RiJjm;nb);0<1Cc3VGR2)3(J1KQUb5B3wLMh79L0GdL?=Xk=m3*POI zxK&G0O;Yd1keS2fU)OboUUh4M(z}x*w@p8vt;uQbIjX+&8>ZQ+Rs%j#o5{+$-shZj z$r%Qg#8PkAY4&7Ji>tlwd&EgU3mO);zmaAPc^B2m(r|ZjlLN`L4BoR64bWdk0wDIg zfmSbpXdce%oqF~40BcGjQ-raJ9Re?{{Hlh`yIEOe`S2P7NzCbfwudca&jZ)M_~}qN zss+D-QRnpiap>N{NNC@(Q?@MRR^r*aT;J@eW~z8?0EK6lRBR*fYj7`7sv$!_3^y!l z40~H(y6|0pfk)^Jc{xB@B+(kN+}cqH+{DFi60)`K+&+W{ z`#+0~Bd|l{*b&)@e!Hcn4Ztrdx;Acc{bT!|z5pa%mrPu1F5`qeID{tI%6XCZ& zgoX5D{>(|QA7r<5zm~@yS7Ls`kFc!J&6<{R=UYLr4dA1Fx8l(&-DOlTb{dCLyQ#$T zY>x&|I4qRp84dOttd66Br{2pChOPF-*Id+G!b1uS3O;Qw7ubZ9e^nlHZ-j&xBT2Wb zbcbm5*s326>Mlx}W)2cdPO@jlO~Id`zprCF^xKF)bi9;#D6Od1lNM8evUg zZ}N&aGB-GcykebKdlWH~($EwVR3#J))*>AjSJzO-6MtGa+GZGr)v!HCqhgje^S1X5oDVcV*{<(9YglDD&-ZuOb;DCj z+V`e$%Z!IfAcY+7>UA-e;ttZ0C+MY;M_ULmQ$(|I!8QtH^kC5_j?f5p8=1R~R|Di+ zuG+0f`xx64oJS*@gCE(TS!a7*j&GlqM z?7)~7p_4T4Ll_FXb)=y4&Y(=U z=~m3PagdRvnKErlQF^7yqh`zxXiD>R9&vi+LAoyF79^EJ{>k^MDq|7%4DgR*^e74+9w z&5J2Ol1{@rn)402g``SQD(YISwNwF{?{0$VyjfYlUWC+{V$6KJaaAVjh$ma{h$io@ z8fWgd=?dT9Ovm9iFB`6`qqqq(vMC45;-DGK{K2|4q40sUL@J94=OUiUH8o;kABOxJr z*&gnO0ta&icbe6+z7w;{H92KR{OQJ{Dm`hG=y?#F_4ufH)l%UbKaX$WjRTUtlC2K7 zAnE-<8Pbp{`UA6B*9tzAa&U*9kl9FyN#ih=xy1O?x;sTuFu9l3_S;K&&;5DbrVgEQ z@K0Ka@zVM2!|uM><%2I$hi|+Cr%C^~7>4TRwoIHw&;vNf!jIF}XA=hUB5OBljt&5S z6BeiT&9HiL9D&n@DLCfR+96&?kHQ~N{l!$K^$9AZG)-LIW%*t-X8s_@jQ(pFi|y9g zUUTTBkcab$FJAJu_JR^lQMvuGb&{Q)#@>Hb_f)d9$xNYffo=kZEb_4ts*GYoqrP)(%I!NXF;WSLXf+<$y1H18IbM zk}f1-zs&)P@ z?om&;k`FO;WA{fx&62BI#|rRof7!9Zqif!-ckiWcX&&*%M$j4#w>{#{fX+00H(k## z-yz|pGg}Id$zT$r{AO(V8Sl@rcMIh>6wk5Cp!gW7a*yLCwl~KhfcWo<#sgKYIZ{r2%}XM1eEaC#Aw5*im1*Xt51+dQ_G z=>`5HZR-f1UaL&|Y4H}8BAc7LOYNwP)3# zQKLZnmmkX%r?N`60Iy07f=h5SR*I`?WufNeGl970-^V?p+9AlTqS z(8n}{B;6>Y>=9vu;Hgp>gt&fnBpanM2v8*Qz=6=TX}9_qj{G%4BVjgY`hEPr%65Ro z;bV533h)(E(jg2>W97)*qzx~48Vlh}xBRcb&HP5rW3<`sjpOx!VUTFDK38H_K!ig| z$AxRu_j7|3py(imh`A2TrL5uhBBj|p{fAB85X*!ncbTiIb~}-J z-XMeBecu4BAbP=HrH>vC{j)_N&q})S7i}@fmu~M4h$eNrKEeFBgvd22DfdN2&g*BY z#|Mvc~i8j>O6A$lWB*`cv*cUYh zJ4W9h>D|o>A#KC}`QzTCF5f5PJ22nd%j=p~v73S$6Q*7v+1oVL>*Tvb6Vc1PJ8<#nU1Q&5=K&1+d0U=Ygoo2(dkv|RX(~Q4GcJRuGCBy4{ zN-YYc=t6S@=uR}*(1|r-$ceq5{GwOEUyY!zl%>}>vrW5gtJv+(jxioN{HJ*v^ScbX zIE{4|r%_zN@g|rVvDIGg&=#;|v10vDXH>tLObb5Aeb1%nMNzPD8P&to6o|1$*R20u z`#$$S6BZLy|Myn!|97k2|2eaM>F1TY&ppJ@|Ifn_X7*v@Ohu#p(>d_yeW>12S?`j? zH1gM!W;Hgma?5FDi{|&M#x$%lqS~)QBSofY`@!52tn0v_DSm!=i{Ute$&np7a6%Zfgxqe2xvheKqRaPFE(vn!HAF?>RGQFDb~B? z3X8XjphkdCZNb$%&D=LlI~gDUAnBDPHBjzP#ZJG>WKu`WL4KV`mVBCc+wd$fL#w-T z|5~3)rUuAM@PTqk#quRO&0;U0JT;5{y|K@v8Ob8g&5O|=F_~cXP*W5zvBWjDSkoe- zM^T?l><|%g<7_edYsns{LU`QSOAI!{9pQkA?1mfIU-OCb;hLcLQx3d{^k~>3iFcB> ztF^-rp$@ia44kxG4O;!S$7VRbG!7!I&nsU~JQ*lIS6HmbjSs_%cc^RZ)6F6lyxIQU zPJ7L$%_JRb*pnqpWxs_kjoDEBx}}h$>P&ODk#6^nD8#;>pWZ0M>XgMTEfdw5*EA>J;#Sx!-um_sTp+BL0f)nt{eu#RllUyDBrsLTl%~3;OJFZ; zu0BG=M!4XS-iQ_Irk`rU%1E%?Dlxg;XEH~5JUG-yun#hMZQR$*D!E9?UaUc8hZeLY zE3G&dXE`{Dm-)ip2V^3G4Iz>hA%cZv4ihNqQ{4j)fv0iV-TY2meD6>5x9rcS@ol8R zD}qnEyX5@rH$HC%M@QGEcb(17_73h>D883tkLd-rr>bnkP7{+)anIrDX&vv(wSF{S2$hh72x2VbGM z`!BxY^MCkC^~~{4`Jl(Rx_&(8oS!*4_rj^enbG9`a0KW+9RPm z>US##C(uSO;07cYOR_6)hn;E;-9VvUmRdyx&46NZKUs!?jbW;95H@bh4{v+EEfl>7 zn@A3VApz^P0QIl1s3C(JHh7jnmEW6zDF>PwY#H9*j6_%pbo8SN4NC-%%*;^~AQ&9V7L zJf=z8>6K~W#AlRg{jW{M3~Vn=87*?Zv6YAceemf&AXq73aL>Qm+2V2kSJToATtz@d zirzl7_B=tFXpG=xL13Y{`NX6Qv_8QuB+_?2g`4BK#&1cPF{MRi?KyeU=HpqoAhiRy zD*P)iJ?h60%Jll2)A1u?MqKGGWoc}I!Z^_DtHaY9XId+`E3o$R3~f53z2NR*D68r) z%0zTXz~Web8R%s92(%>qQajdvREMb0#QYBpccFo9QCFzwdWmliKigxVs@aiEw@3f} zaV@9XLP1u<->OtjW5j-V$Y^9ZnabxyZE=euc6=*9IF%>$yg~>jPuAW(3h@MxUNlEyCrh;UQGqyX%A{V%Lz7qW z!(AO{kVkcGzztF?v=+8l$-q>QvKq3{5phT|`Wppv=6N*{Y=L$oO!ehYwrQ`;q~|IC zl>H@95&vD7c2#Q#ath8VGbM#GuOk=Pf*~qDZ@s+hF&EL+F;N_ znm(E0Ndk+Q-~@LE>#co_!md2;5c&=aXdj4ju3Y#ux^JVO2cqq2N9c=)frPop;t10EA`uh5E46pU(j}U?teLLxCKdjM_^Ilv05u+GYV6tggk5`LNUI; zL^-{zi^Dr1vB@!FUGY^%UUQJ9^GHVzFt=9!NXZDVNZpyGk%-4* zxYUqR2ymB@!Xb1oa|oF1iY8^Yz87X=KZUHPYi;fG&uLM6kJ7Ljn6%{lH95l;aJk`c zt-g~~;l!MnqoDKc=g8OOmq~?BoMg#kR1CwB!3Ijtm|i0&9e@A+B9?}2{!1)%i*ND7 z|G$W(OlDMp`}gPK@GEsKd)~O(A+M? z6v=$r@9!sr@oblq^l^YE5kl`)x*H`65lD4(Aupuxk7}LJ|Kds`60N`&uLNWN|KgSA zxBkm3A$4*7hgbSBtgK>}8ws(;kKe2rC4zUfPgiKOLZLoOw4g->r!K&e)@DSe zandq+E?N>eM~_}YN;{1go>yp?^?h|S%*T4n{0Vz@XzQK#u}1!GVe-3Kuk*3gcQ;I6dsY&K3=!Z^k2N5C^}-F+R1=ajK zj{@VZ_8#ef%#-@M%k@`xuW%H^gYT#Be7sOLcK<-xD#xPX>k@3Q#etdefD~Is4-pIgE|5(C0R)?ukBlFB|6PiLmZfF((*pgUT9E{gUw?lz}muh6vrUmobg zr2SEaVaQ9E?CI=mgsI7Z$l-*{y4=MpX?Zz_HUS>{ceznK@m1dR26q$_PjTd8=}KI?Uwxv zq74yv$k@bWC^PJ>D0kW%ft^44pu`OG+POG{Aey5p-;pEkImu2IDzv-9o4Gpu;bfV) zXTqj`2iw{bE$(i@ARDl`i9(U@hd%UOtbZg2@96 z$F@cJE$aWoR(@|y?hBWxWE?d~HV(sfvAVyl-m(!YX^6>_MX2+ub}+3;Qdqe zq^@%dfOeC`2vAXnT=e^Mc>hQQ@p>5g>o)O^Ahr5DZ`mb*$e4;&d2)E7F+5;c!y1NG zZb)4Gdm80@sF=vuPs@`i5RI*MWAL#1a>tl{qhU+Xq0%0fRG-jNJrjJGBirv1pRHSG z6{hS=|Elx`ggrv;I&A_om)z2w1O}x=*;)(5x03+_KmM%cjVWS;om>CxQTx<}9Xdk{xaBs0GBqZ5v-sU{3ZQ_>>&N5X zJXXCpY$r0)O_Rsu4v6J}o6Twzelf{{9)w;|FG3&G(H7||zUUOG z<c0PuhF`XCH}PX&8oravkRpHJ&UAR77dnv@O5flhd!yFJ2kAoulRB~UfC?CSN{Z> z>`&E5NR?^g+j=f6*MBH|)9+MXt}k1V>7 zC>t)*BGgEq>XUOfCPV!G&VtU_IPmdc0wWS03d+tqCHV{?Aj~-=kN@yvc!teu?5b{0 ziXPG{&C>O~~RFRh|?&|mKOk!>_S4>{$9u-}4YCG_6dCz|$u^c4rl*zwKsa4ATe)bzZHsYBmW;~CGnTU%rC#>^OsSiqw zdLDlsh-oO@bhi)Z9UPrsoXw9ySudIPl`<9npdX?=mw@xESRB2&oy!&6Fcb(>{qhuH zXgR>`O_!?6V3?5;vG6D}+bQzs0gQ3&-liK+D0gO{Q~6B}g62F~2XFZ)Q3puy3FRf! ze;^|$#B!CId!*0kBbvfdi!ZOB@cV#RF)jpQAN-hzU#IoP&dO;XFi4&rX}~;Nz%z`^ zTCdapj}axfROsCyk(%qZZ@*Min5YmqxLw_B>zS^hI7OB9cYd>hjGq>%^JgPfm&=o*g$+^!n!~wI zl$s0IE7$!s`Q9&ko*ZEgcSnPZ|K`X*JccT^_d5*SA79fRp;1VMKrkO}Suj#jGpGwj zQ?87)>F=waHF+76x%DabyTb*=l+qTuom|zqe234bZ|Bd8 zjju)#4tq!0qsrEoRJALk|4>pTog98rW$-9@e5D&WEZAsDEkEUMwnScl%e%rtElIU%bj_ zk|gEU5b3WK5wYT+Ltuh_O&s^HuK(AjRIQJn(K_PmO0b)&#^?t9q!v4T)5pZa!-1Bm zp#u5#uiMA-)f8Y)Jf=eusd2MtJ!7mhTxG3Y{-zYfpc%QcHhra3ZLg1nYw|0d+A@Jt zqs>x=a};Chp$(lH=VP#LU^u60wt7P-AjACjEyM9C`?PwZZ_azwlEjMHP3JEcwovEs zndwe3cuF;SI9us>`_q-WiVhbOCl3l8JsAW%=ULMqmo0$GNWE!2tGlv(;TgVwnCxqW zAg(G5C+zOCovQb`=t7*n0rKV}UY_3{mdf3qfPI!-QQfKB0%6$$V!_&53Zq2~t-|_C zH(cvAA`T;}_*+^Z>8^uqy7xymh0_>@M%wzjI_!!m`b%ddX%9O72Pt3-Cb=9pB~v#o z&q7#zsRXbpV>AzmkUiSt^-WoF1conmlgq)eoUG z#Hwm9!0bPKm0D$N{yJCo1@U+8C;%ZulFd5oNAJ?2{e!bNHf{90!GF)7af>;Fs&fog zdg9!whv$A^`I^KK!!A?cKTzw#J?uh`=v4*tE@MthurDER@n?tW-zd6i{vUicyM3$xNUbzY%C@t7#gl1&5cL&Dbt!GWx|Vc4DfDTf%*I}ZJu zNT+%SOomewzce#H6_Qv`aFWkEt9c+~TKJI6SD=UgH|zA6>sb^1$r7EGg2Y9%0g$y>DFgyGWzC;wDl;4)B5-D$F&g6!1xuNN@!f}aagI>T^jgt%$atKYA zIG_HX(H1n_V+Sff&=wt*=&KlP5rY=tEfj!s=F$!ng-b3KiXRFQ8_C1ux2)r~(y z2Gba;kHnckZK69L$=823;nh?2iCRXAMtc2k@Crdeju(QS9_S=wqV4L*se`&KC>?3- zbQ|Uv=4p{<9?2^;?KF>_q7ixBzY0lwvNJpX| za!qITfCq$a)C-9;!g|p4Q!o|sG~-+Thi}pi?N(aHhU|c(%mAUNlTMxsji%_@lF@wk z^+haTkKWokH-D zvGiK=;2k~HeB8wt*Vmpx93P0{YQ8{94E`CfhW%aH=(Hl$^MBw?HZHLY3{tLd%$m0j zWM&q2T=?-f@dt*QPKLSpkJXcrW}X0K@XUl_sE3nR;T%(DljzhXx%HGuCY#m`D%>e~{v zSo;DoN}?Unx^e-T3hIRyY{I&l1R7-CzBpzc9^Mh^&xeOC!L1|F221Y#%r*T7!d@HS zZDCJOzK6@CYb}i?Hm?C&k2uVy;|as7rA-=j2ZXZO1W8PbdCVd&!5|@RdbvdATX^k* zz=Go+)K;skCk9}{&w%nhBGe@$#NYHM*xM31A755jJn4m=ce{L#W8LkPdjHRmUbB!- zfJ}zZm?V_TKZ0*B$(2l?vZzB065RJzzO<_i?T7m;2F(3Tj&lns5i;x2WAZ;l*8>X? z4}7jkH;(sp&zTKdiFZNf%GR(c(0= zBR7rq^~TMoZ9$iyxt>q;OLptTKESn|efhG@kWcLREii0U1-3{C!`aHME7 zgl!}D7*56u&;!vt?L^8Ws>UWqeoD-oNm~pEheEK2d%w8sx-O5mTZiPavGyNs&eT?X z-iE_fEqurL+6|@S!0x;~shSQGU}Hx_<5>hLFlf}EPz@s)iOUT6vLXracVWUD*dK#& zK>ABmB=zx=6XPR5BwKZVftzMF3a9vZZQLN4?wy{s> zHXMJD%mc)=&p#S9@;Is_TRYMD(ebH-rWy~bU;lqnPLzTE_+p8t0&gC)R+}o=>xV4l zsri#{M-I%t;f$4~;yMgCtdVJuIP_Yd8zMt?LiiFbPa3&;4%$21G8E_z9`_C--7U{a z-HMbCSietX>4vmt0p9e1y%rz2xz$KTyykfDok)6}M4``Li^-SDV_Yn-1f}Wy}Zj!yX97s zlW34q1JYG+45>1By3zMxeSMx;Yd(ywHC@rp=)-^Ys zI@tZglBXI9j*W!+k=;EsOQu)lWFN-yEUe9@`qjm2B;A6c^7eC%k6bLVNh9 z)j?(LR%wtEWGtAzf=WB|cGn8h^H}h{^@MQMMe_QzVT3mlyP28*uQA!X(2AtimgwDP zyd@Q2k)BC1aRwiL7GwY_e8mRtM5L3XBrqsyLTK^9ekDCrl9uwWxW0Vy)Oy zypf|<4muy@Wu2-xz^c$^-Seykwg zs$)}vkYQf5@WW=&5O^FR8RbzFMYt?CYFo0`@FXHhp>7DStwh0udjfHq8>VGOe0>}d z5ze|pEGnYPlaolakepeNlsZeK({|C!41gGY^(?uv{&bl9VOq1rFYEVPpO;FJKLK1O zaTd~>V)7yi{}4u7BtQ(Y5)J}5!Ar>U zJK8tN`zX`b|pLvyL+FS5{T8XwRtEW6d9jBCq5uH0hw` ze_}v{1th0IuIv;g1|CU)&##)o44`om>RL!!m^A{Jzo;bteQnftnT6R z8P=c{`vVT8`GanO+%M(rra=5x1&4iKqpuam^yMREFwJ@sgtD|w2zLVoR^0oeWW34K zgp88!ZeV8aCy_;(O?ZYc8K8gtyk?iFZGEfO!Rp!Q=-ks;9{Bkn3bL9i)nxi=gxfRW z;Uy10EKk&~Q0U{ZK(Z{Ri=(5XPtRBifVa-3SMZsG2v_EmH~eA$`z^mi`|rUxNJAvG ziY4tBoSdKDoYpAKH@pBYau){M@Ib1hq z0~z*Sq3Lui-yu2saKJx|EdMHkb)|7K_#0)-8RqNrNkR$(FUVk8y^d0$gVp-Fx4?8fC8EXUoT7@HOKbiv7Da^wYm}) zxlSG}Rya@R5{r!-7&*FHp9_Ves!x5YR`A-+f_lFhZ(ol=dCH9rAOK$!KPdW3RGUyzm^Z&hTIM$)>ZR`PUn>iR`O1F zvgNP^jNPkFsX>Jy_W8;2 zv}z&KZ9h=odR!Ngocn3>`;%JOH{S1cy*jNUzD#~ht1QZ7uoFBpWH@d;Lq20FDS>{g z)jO50_M=;TDqP+HV*E-Rc{5>iwG1CgFGluk`ql?-Ogm&gf_i;O*euq& z5myTyZ%jS!J_LsS`cK+Xj8K;h=ew?W>BS|jW2lYM$9CiX(#BI*Xp4?|xOFT{fa=MB zUQ7=WY-xLxC1)E6K?#kvXdx;~azut3il{B{*@qtrGvdomV7uq7X7AZ`tB3qAw&4!eOy$$DZRS7YDj;~2j8K?aQ$G<) zL3fc5OeF&h*5Z9)}!W9=`84iC};6RG8yE~$cuHEOQ%%73Vfj|@v1<-{sLNz z_NK2nB?~2f=1Ux{d_6D!-A-|b5AbMrM%MP}lEViFP>M3aw;i169Au1v37MlAI6S=H z`-a8bZsH&;5`u2}PcnmWw#4b<%!8a^so+ITa2^+Pwt3T0ExzCLdG4D80tj677!N0& zaz;kv-t#Lq9-g`22yX@pPaM%zPjMj@TY~iK#$-ADM}0_c1-+v%>_k&*?WHFnX6juR z+%KaD@<7GHY$+CF!5(A)%R{tJZCB#~^vlIR`;Z-dwP-Qp$hT!ei44HOqQ$zkETJ3( zyqE`f41(2X>-{Cc_lA_Fc_a_e8`yqRCiC4uBmA|Tra$al>P7h4=;6WwZaq8tT|YRB zShRYHW;`2{6O@~XL4HQJ$tb#z%0_mUE=OWUVExmrG@y3MrlaWtDoOurJ~NAF{Irvo zf+@t$S4BxJ+PMCyzOm%_CvhdJ`Di<`g8%&l$tVXMe!xA_XRV-N6@Rj;1q%&UZU9a6?vs&irM+VN5%uTgejd08L7Lo z)sslxuJ)~Nqs|;nLXLu0#RCu)Ei3*@qd!?7f0M891?N{f5a(X!ITF23E`WtgX6FGT zkcK#RjtrMq3v{}zV{}lZn&{c~Tq@It9*H?i2d#|^e?GC@sx4DQ-HXqNfcyEQ4#@=S zE<`D)7g;mhq|E3Gf*f|wmt*m&66A;Pua(~ypY!N)G%~JYgrAgBmvtrPrc;d8)87`U z586`A2M{L$>o@UKcDB~$QbSniWzPr^s6%23lpv#mOW(MSiaB)`aM`o|(9@9}T0L=| zs@k9X^ah+UZYR>}WNNnr5)*bKLG5RC6S!6K3W5 zQM)$j5eF2}_}o2r`N&Z{p3f5-)2q-GPlhW{6X@tk_ix|42oFqA#7C>*K*E-g#Zz9@ zIlaA@VKfMWa^oSY{JdCQ!bi5D9~`w%mOz1~jgTp72`M?S@t-~%Y*L#g^Sum?VcQu# zzETD1!n1Q$;-LJ#r(;`BOeobyb?op%Y(#1~a*eRv6} zkG#%E+noLF1uYjLaJ}~-zm8I9W3||12ItiN@o3&KXKI%-htCI}knNc(v4=;gahL+! zy8SPBU2mS9b)G_pLqGPlK)f_-XIJ&=GbBwHFz1b2YYk@OP_ae5$4krimNo{9>`|B1 z4R4nzLwhg8?~9*)QR4?WI`IfpU4)-3$8}6|SjY5m7Xy1tC&P-aW_W3LkRtGGmq%1$ zc=fKH^8ZAW^@{u+bPI|ouKYSKFJ6EQd*%zR?ruqu>rc$Bg0!@ocxmlEHq+reeK+;t zB`y3yy~yDftoAEhUPpgvb<9V^>5`ryMGkl7guMGq-aHskqRz0=+o6pesPvLy-84L_o%&+k_Lbf#d zHFNCQo!Jnnaut_LS0+w@U{Y)DCese|AT}pe7Lf{HwJ+ocW=YzKbR=Oq#l239w2Oi7cMPDI{-hm9a47$djpti8z9DP zmvE{q)xlfEWGVjdE{X0wuoVZ8@I(n!{(YmQ^b}L?f-(f~FL2#(`cQzLIA=@8^1u;_ ze~y!vD-Wi%Ku1&G51K-38mb@MIjk2)-Pm`dO@I|y0)r*&!3gw4z`H0axpT#Ox=mqJ zP@GiAj?&V`m$5chZ6A3QF(5TVQ5T}Spvb|nPW>(Xj{!t$Pz4t)X}Bu~{ryD&>>?wC zb%4e5IK$0yvE+H<>=NJ~0jQzAt!0UyFXNa`i2<+<5ljEm0!!+l26*0`^$bVVr5shn zRH)TkZTQNt2)5+#ByiC`d48QGf8&k(Vg(4}Tb30fE}-NRhHC{RTwRuV9@K|tw>XO; zm4tqYkp>z2Gzhjc_}HXk!n^#Mj=56amcRWFQDoP>_o1W*YQhW|o%G3m*kPm}DZ1B} zFeXEt6;g~a5a{Q&$Gh44QkR=K$MO&Bk3I zGSo=F-7l4vxp@z&jfYdCK4>Oy#gvV3P5$mg>!bXdQ{B$fPLgm$YCHpJNp}Ppqd^ov zM~;uw{MOn6yr8u-f?2V3hqN!yF0zM63}hq|6)mvv1HPA(e&7F!GKqE{q79xqU{wZ? zKQEjtc(l-b8grOoeN~IYsL}gU z>Mn^pc(U+zp1SSkSMdh{ ztD7$sE4~s$#n9m_s3j(uJHsIUs70gw^cjg2*71m>;9v`#<2;a3-MJWz7pD&SLEQ_7 z!NJy$HTVpo42l@%+hp3uKge$JzYZs;u_?+p`hT?)>@&?{5-OC|_ju#x6Mp_1z3$?# zYU|ru1<+TM(uAiEB60F%wAPn(p*}{Grs6@7XUy`{O`dIElQvvU5T2tH-0@XKQ5qNA zMcRE@^B!9$pnh@d35Dh7Cq765=Og;8Ww`DoLPx7`RP<|5wBdB;!HGoU@gg_c7s1l# zARQ(Pezi=D0n5G+7LbIw(o%<~#15?0U!}*W0I`}Qvh;3&urmxoU=xGqp%FebRI96b zux%ys6R>Gylc3FN>`}R8S^R1QVK?GLU?m#crN`r}=9X+_g4C?}bdGF|!Gx+%d*x+c zdIZ}B`mHnzBZSoJOS6f>NekbD!1xc(d5Z8}vi>D%F>fNa$DByW3ZELT$LVH=+ms<6 z=x&yE>j%c9MR`mwRpaXFg{iy z3|e1tL=uv(p)D9p`#Vj*I~Y!w>#sK~)lkUMgL>OWUAwx>0x0Me@{*H#^Z+Nv9du;| zI+MOkFBEk)REhX`poEdHSLtt0{dg8>V4->y&Z+P{b_tZAi}8asHC=g3y5@Ihg$A#n zeS~fmfFqQ{mPID9Y*L{*+-hI9g#tT@vnM>_%C2`IDM|a3kOlGC!rsN|TzCj}9H}_BZOumSQl)X~z<9=nHHpiOlh1dmQ^H$(jSnw>zrpE!;zbg~U^0jb* z)(m3o4Ll@5SY?8^^r=H~B1`I3Al&eSR@DYOiE7gE&m&+&rY?e8Zf;X^$~s+Ub}RdQ znt+m`8-z<(Jpv(2oxm*-66+S=jyJz>)obwX?6U!5bHG`K%jKaNFcwL(oYjaArSlO| z^~_TZJ(3bb=zg zL!fazaq#$`vSnOt{Ak>?zO91t9XD&{lw0zfgHV*H`Od8GSoP7RGehZ9_fl@IL$1qT zx@A~fG$2?=m%}m%2aH$*8>KRB@6A!|?lhL6eps#EOqECI^ppV9NywGro z4S*_xIQYCLKfGpmqO2apLJ6xVr!U^XF1&9(lKHx6>wUd<{JweRrzpBX?(Kte8ycRp zd*{|Cw=n1h{jm2>s&$~>W$cK%p2(z22?-}>V)oolliGCgiw9gUmLo>=mSSSk$)$!Z z-tzHtOGZ4wA5J&C-#M`@Z|A>xeRcPkG7p5dA3*R>!S=rS+$MQs+#)of2_n$cc-rVA zx4{Esjl1a7E3qF~49BL{HcQaLr70nMlOV0?grT$c2M;k)VfCvoD&6TtEBC3(WW=)w zGDRpuxaD@-l7Iobt?>#Iv{+7u1&-4BTuE7QLdmLnn2nfke$U629X&xBFsBD!{ra)q zgdrV9nJ(#aFS3@TP(#cRYseVBiSLMAmt))cXA-pKu?jXB`A>{G9{IREF@x1DCZ z_m~&pEi9Q&d(&bcuUpfiO~F5^W@L%L_)xh^faOT50!&%SQHyzzqcvE)HUqfZ z3B9S0kG&405{fHdZ@}?&;$?6JiC_C`j`#Ka9}<6Nvm}#&Y@N_N1`GfD_G9PAPUu4!@1@m%Jt|s^%_RsNZaRh={sw#6-3|# zHo(MyjF=afB0Y+)W(mxOW`rL;$FTL>yMY8)EfHxv_y6e3+;ZV9`Oq4}e?G`tK^p$5LH4UG%56 z@>htD@>CRcE`V1W8~8o|Nt1?Y&27CG*?0P~=1kQB?9STAz{8oV~?qBqeB9hP0 zSF2@N><0ZxVV@0`h`6*1jLJEt(pCAJR{2Qcra&4XQ!@)o%Z|H&1y>v=?%Fc>F5 z>qdE6A2Mnb`m>#@S<22b^VXT%qn2z}X|YzOo<28aiYr%rvrVr~1py~zL(A}=})&VAPw+k?$`dbfUFVqNO4Kuq=KN{Z!6Njsk4tsc+3b z^*$d`jW?HXtB*UU7*mqP?h(c((xn>MP(wYXCv%5DE!V_*%@*pP$HFGldtRpf*9Ob zlRr)@dJHlu>b9LOqnMBVX#hmz=IS2esV`C0>*o!I>{(dK^m6AGTX=DTu`8Js zoi~(Q6A|G%xNu?HJmP@>k9h-nukt}=xVk9S$pV2&1j2Up&ZeQml>d;{nDSG}@JG(gmuH+r34RZ6Vt zJYFa%nMAgqb3Y;XVcjsE+hM>!Ed z-F(TO$jr%29t;iGzlwIeP*O1{WH1mu81H~vKSJEvA*y8)x_-yqggVKll#2kM7;wr~ z;N1~7H|Vw=coXlSBlBnK{=7-mB0hmwLTh%8K;(S;b2%ceOWL9>9xJY3MUn zzDxb%AoU4y}y6<0h)mJYb`A_l5b=sMcDC zqAs^=2>zrGN;V!HoXsCtmWGSl7U*xgbw_Z;hHn4*|7(LYyv4yiThebs7NQpivY8{q z0|vE}$(X`=@nK=;QjrN~V61+A8V7-6U|NP&xhaoj<;u;Azzl3cxJs?^Ht*so|NTXy z^@QdG-sc0UJ>3lP_tH>`?hVmH+Nb=q63K1)vj~n&|3cO>C_E&19_69~JFZKb=%evE zK6U0&8gSzj;*9p7T`+)CPF!1DJ6lu58uD>&w^vRvud!fot>6%ILBr39q!Z<}(c&I) z`3tY0K~?vlX9NSf#*OhP6gdo4Hu0&xF^9aKW_%hre?6k>N`Tck<98rNeQh2z#@ENgBS5*a5mV^n4;vLe z{vb6)YpL}iy6{`Zk*2c=IW_sZ6bTrWRhBofqYFyHYOVnuazj8u_^qbQa9KqA@y7%= zaLc_R46jp_{-ca&y!d3~Bs`O=zSr;Y;7PPNP^*~}S|)aA(Zm-DYd066;h2e$!4IT< z4dneozsnq#!ckPwcYn!?RBx6#dUvhh{cr>~e_7G|%Eu0!;-6)Oa1&^Dzj7t$n7yWq z-ew(c(|c~6JRy5bBvQ21o!Jhn0g+QUAe%y4*l9y8hJZYbCaI@wT<`3HV1Tb*Q*X@E z%xB!`kZnIrvoV(gW^=JIal?*PN`9j9>DocC5uOX8!>a9;)T{|l*VST9eTJ8Pq;FbV zM5m*FH`|xtwKR7;P(7{4V1*i$JOREd9|}%y5GYG0S^JWw*MB>^A(*}afBF&va22!~ zl;%^x>b(;@m^GS#4b){fq!|dd%Y7Goj=?NMy<9|?o9|NzFLFNrFxCAnmG%^+5VLQR zK=MRrga1ebNCsUe1=OO^l2}s`Cf?62&~8&JQ{&8Sn(+#r<3)I^T%V-zH^B7)grY|-_YTBS zP~okVlX*n#${pN2>VR8L|K{!9zjzDxcDNlJIje>9H3+m}DYu@9UYPS>j>K5w57W4? zdh5|!{`?pJ&T_r9AFuuRvGgvtUGw+Qo@edNa~_~!rjD)KYJ}(&TiTWz}5L!cvP%jmbDT;ht)wS7PWOhm{@14>=S-N^P=cr`NB2`XPVyR(g*l6s)ekZJ1m%kKp@cSzobGZ zo|Lp@!}ZgxEx-H|*^&B|-Iv_~Yk3NRt~Z=B@c1{k4L^5WGtB{yrY%-0ZKql}6_M`# z$%Bn^eEEZH;NtcMFjw>^Ua>zcV)2NwN*7zC5^IhPWV6Z(kA^b+4CG{WBf}^LI{Q5} zwox{*$ONVw_)|k%t-<3~=J3H!?__1ic`1?YPc0Yz?S9bQBIo?5XDvzlUL;k!(ZvAr zlS5t9mSJ@D?WUu^bt(FXrhTx1Afy)_HHP?(>UU*r4s^6V0HUKsf+5RDeRVe)r8f-O z;OQ~Mq)`Dr04AzkIPnLP8PUt_u@p0TP4t8fs=JH7a69Pt?V)`Anj=v*mLv3GwpJRM zC9I0~cmn}z&>aIWtGQTjhb@eTo);Qx+_LTW7J@h{Rp_|hzUkM)LaMEj(l^s%dK{pwFMmTJ@U`@N>xeKaU{o+3M`u>8TTt>RWL&(Z!Si8Ndu(H4@}l&f0bLr z-cquHt=g2mgO}TVm(mn7C95H__Z+to;WktH;#GBQic1ZoAZS9xa*1heo zl@SR`Vy0K!oa`OT4rAUk4r9-Hs~S*AKr5-vUwH5YP|%64N~a9Y14i-jQEy%_UG5!7 znitPY)MDAdKD2dd?S!qwdefd0=NCtU`f0}DI+g{#m#*mVANy`<1Tz%Ab)o0=@v3`k z6kuKbDL5U&p}P!{n!L9>T4gR7Wj0%@=NM{7SW1l36dJ4ZIT<2YFsC6nMcDX10D_N? zFok}$h(tRUsqC^@b-kc!^NTTtYqrNvMecMUn3f>b^T>3CDWZqN=B z;aFK543u^mrWdk%-7G9+i)J)3JKCTFkNa1(#ctx+x{p4csh-GGhT!C?Hs1tb}IC{F69K`yTUa1;{Scdg%5d+v?YQn4%=&4jC*g?%@le( znjDnKV{I`$ai+x@i-N0z2T7q?u6vyCl|3})aw^r>w0;h=;q2Ok>`T;-S z0v70UvH-#*Bj$lL-rSBDWGCZrD~y;EhBfJRof9!6-?nni zg!+cp^g``BEG?GmcTYQWa^kz2wiFjbRet2Cd`yIoosYoDf&%2q$WaDf7*fnu?+o!IxlVkuD$;olq=Tr3 z^2ZAKDwf-E!-MTSOk1t!?QokD`jF~g4aqZOgDXW|Xx@x&=6CBatN{rI!k0tnQE_z( zY2I+#aTOV5-Gf<&ueKHjz^`;)yW8|SYzEBm_{ahOa~6YDhssXg_1c;aHk*trv&wWi zw`3=CPrz-#ExOxeA+xhXbD)#yX0B2>Z|q(^Ecf28E8X7rTt6w*c~$ zSnMX^JK?QK#7sp(>YU6GefrD3@Q>_>nz(tKMokK9;Sg;#CX}XuR&m+d9)C}HCNJeK zO?<`%t*tRxL}i4s1aO8Dz6|lg?>p_JyMQ2JSh45m74R|j7oI{&DKbFyV2kis8A6Ei)08Csl z!`jVDz^+(}1m%9iv;;qm(<{Lgt?u1=OTgSHSQ7X)gqA4iJ(l-m=05_(Q($%U3DJik zK`2N{Dpu`DXYdb3?V%tQPGbDDAXJfYj^xN@U=%*TAUFzM;+AQ>#>nNt&GQtkDQCi$ zk>|<+qssSLkG>4^V{hA1w)xbEjHb7`<@smrHvaHravg=(oG7xBS?R}~X1bhht8I?V zASw(^S z-8d7-m6-e3yZ_e``%}{*xCzuAvbbQA$Wr*@X~B(96Z!2!Pmt+;4TH~j3GMduNzVu4 zMr!(p$poE!@|aW6;Xyf0{zL!V={!ad!E~QM@gLp=vYd$~2m$7&VqiOMhyr!)y=d@X zfBQr;QHRPPai#?qUR=NyGqVa%W}?&tp@=NAKqk7EOJ@VAroOB;s*u>h_AuK|B=wpz z_-rBNtDN`-Z$9iLP*%avW#T`LTHN(uJtwH5+VswYisL8alFk3kfthuiD03A#Vf#kA zN`Pd1Ej-vJ*vXOU0>C^DCHB!yEBnS?n`LmVZl${G73x(KON>{?3~T5o8VP=dOzYSF zN_L?RZDY1$dEvG}^$G^I);WOqq^+~ZmOUqrZ$l=gL z@Pc0)nc@sGR=bKVeQ3|jB`iv2mCss5$HA0yRp58%rAbx!4=_#qReDSbvMD`9M-vqr zS+=n@RUBQUQ&aTVH7`g@5|ql85K|qXt|@WY!6`Ac7{@?7iMqxD%eb7a71`&?G${1q zlWeUar#9?t7s?f}Eci$fr@t1V9Y80--G|9gpdS&I+uyu0=hYM?o1%Y;1TFoT zo62R1;X`;)00gSVZ>o;zCJYl)w4*1?dd-rixj$%}uUB%|h~t-|&*x9c*A7vA&_x z7kQHha~Z)m-VCkGpEac^xPC&ebm19su>Ij{L1BLl_o9)7J!m8JDvf*NYM80Q#~^jT zGnN?-gno^$Xz<_e>2Q?3X!5iucJI_sba1?1EJ$oS2jb!KG70~lQ9up5IN)^}5-KiK zQ4Sp)8^y=|!^w4J9bJ2(=JCK$kAs}NuTmJ5f8R64{t9kT5T7xoawf1fNV5A-c!P4I zf?DvIGS&1_Zl_qEGne9?QtzcYb}jZvawQza$-n7`tI>!0(vAxR5#JDxC#+K-<#;e z3jBSPZa@TUAy@nacg|iFU-8@x){FJJ8TcjQn8rqi)=rkj9*J2s=>SFGeM4L)BosVQ zs3Tq+If&4V$n;MgG5NlKy`^9>vdHNK_4C0_gG7KCK zsWW~l`JOOL`KoU({-z3)4LT%5IFlKC1TBP-VBogLVLP3z3x(D;nGYyQf-nj@Rc@lt<;U>1x* ziTe1fujrbL#>YAhh5YLJ`%^3LO}8niP}|l#xSM-oK(vh$8~$4NUY6osrsyW#5*9T{ zDB*5q2xm!Z9$yD%Np$T_cBL*fptP?V_&DPt*j`$KcX)80ixS`5xd++=%)-OyR2xroAfvc)XgJ9@vWpNecKR8>d<-+kB`w*W(i>%wK`uCrX ziNO`~6ult;ye@D;HQ(|I(58Fpe&%eiG zev0ca`~An=4gUteua~#C^Zkr<45w z&AiF_!PEBf2D6-=lvHWaMby?b!_fTAywiY+KGkya7eSsmyixL9@j6!kQ{?Q%iC1Z; zg_UjlwEP>}8DwYP3LP%QyTYGmK2Hc_Bt+|V?UB;!ZjRq=iCjF&A03>*q)%9oUr^ ze&S_Ql17=COVRJEo%lUoQM^MX7x1H=IW7F{nlp0cceJ$$V*r@7^{9UaRC7BUt1`+d z#13}qkh?0~$&5nqqR%N@-Cn=pjj%ZaFZDjZc$s<&l60IT;c^gmCQA4uhn_6at?S!Q zc%Uwx-t&kUIK^vk*0q92w#Y2NHSbkG$Dxs2A)9_|{+~1dy4a5!HpQ@9{0$hb0+m5D za2HGiJOJ}G?J;(^ly`sTmIU?my|UpxJn*5Q$309Vg;piOSdLHyMZ2Q95rONuIVMv^ zbyH)2sxS(3;jAENg|3-7G5`**Wl5Bvm6}TpR!v&bETUAHu4#5_dV-J-n0eSVvtyf> z*`=L6Sc9I|vYE{RPXND_6;vTqL|Amx+A*wkOp$ycXvs5QpSgdQcU*A^xOR5z&~2dP z(wD)-5QMh{Ad<7p!)Kc=^NI5#bXyasTpNy7yPh879NJ#QpGSDVa}jXvU+*o>yg%f6DpX!b|KzwJMODAa^} z0MWDvzZ4ikjFvU)krymuO3`|O>0eyCWWYwTX;XkiAHGRcG-g7iW|qx{2TJ?KE0^J$BmFtjsZq_yH4|*Q^727&W9l|3=`w?Nb7h%8Y5%rlg=a5IKsrA}7um1YJiR);hR$ zfl*^1ohfObeIo$H5JzgL2+a(;elPR*7?aI{dU`{*$=rxJpunA-ZOR}PIOqMZA8$A~C=2UtN6|fB*pv~c z;2Pzz2FIj@)q$&9%c5X4Y^gQoEroyLo82cEVi6w^_GeVz=1#ae9hnUc`OJ-(jMmrburZ7@khv59Ymc$kU4)1`a zEUe(I=e*9x6|MCGEtaF+3_W~I!cZGUPu_A78CQm_M-s4w&cTn7DoI=RAQkL;S7Nbl zT&v01{pk0fU_BX+-$c2qsdDA+REPI<3puYCjX36@|t#;EtVHb%tu0FF6u22F@KD zFmUYq7!%nZ@EYF4W2lo>dg@x;IuDE!~X5eGRC|$J(Yh~_8&02g(cP5 zoGGFtR4!7Q76r?_+Zhj9f~0F*($V8~1m^fH>)0r*gP|&@wbxD?kzv{d*9-4aTvl$t zXr{nS9WQQA(OcLtfO%pAiC}>;fYHBO&z~(*VV-i2^_4)29c-`>N~v8TQXF<;xwzO= zeD1FEsI!SHV)d~XrxkzG9tbd=?-Co%MjI_ls(A+1Z9eTd?r0bFm%x2+aq(=?^%CQnE!o@dq=1Lu3a;q z2}IiB%2~#3s_{`?%c`<|xbk@OHACQAea95UWV&=`bCfeCSWPvAF4zJu@B}YUD%PTm zZ3Er+2_nHTl=Vd6zGMHIFmEo9KHNP|IPjydnWo3&dxgj7Um~Ag9%Koz0F7u2NtncG zQO!HE=-Lu|U8jHk-u349ww6kLa6j4MR0lglU>ocVp>41;tZRdvVO{fF@ws@&hpt4~ z=hJe!)qNu5gVZ)i2^0hRpnaJFW51`1iD23y=sH)+M>mJR)JABu8e!+YJBH(6kvpSk zi7#{;GXzO z2jk z2g`*Yn=2wqt~GOs8UA{X2-iL2BFlWhe}#D!>{EYL@QmwD#fiY&%;g3KjC-z7B@u*| z6_)4(CNj3UUi(5 zyknhQOlhc6@f>puoo{uYmQ8T5o_{im1|YF+Y@Jx{FwLq@Iw^W}oNWXtl|)QDOVQl#rKxX|Gl31VDg0dl(Bwm29iISPMBS9~yCU5JCW`aq8{dyyLAhYsLx2a_!;8qc9U zZ!?J8x;wyJ-bsw76` zuU)v66z5by)aBGhOH@r=No5OiFJF$N+)taR>oWWiOT*tBbKe}824ul@0dr*y*qb&G zROCFf1_Y{!hzB%ZPXI1595rkYm58L^WO|${6B>Ntf?S9xql(`Y%m%M2O?ATlbOJQ( zJ{f%!-Zie(vNQaMi>zqiOa*^0j=@w&MaBwzU1jc}8z0P7$PK^p9wfyyqJ9F9kJNLbc-a)13MLy>1ZVsHBFQ68v?|yqWGTBUFVT+B zm&hQmw#DFY>%XD671VbNevqGd@yrAMvQI3txLsAz%y@sGt>MhfGNYR1Z^*lL@_?A( z{xTtNUF4G;j=a6PIJ2nT~8ab<&$f0U^hrV&&c6N-ms&;VEt&N`RIX#i4?DxA=^fq@qfBdj&kImT{;aj#ThK=tbdEBIMGnyP3A$yV3hf@F3p5 zU1F&yDgXutI~xJw2mUv@xXl_nRvB1j_|Dng2>gFRN@!?ohPu6qZ^%JRiQ`R-;vYKF zg-dUavy1l8^VxLDGDD7l(C^^sjRKH2m_qE3p!vC-R|{LwZ}?LsI`0qh4>WJCn> zj@udumV(jki#t1$R7mXv8E}7kiiScO~7j(a50Jk4nbt}Y}Z8>^JTr~ID zb!6d~i87?rA}=&T1m}SCH7)G6r)K$ZB`(IgX3Q^5TVY*DR{+e5)jLtUsHTeP7*AFz z`|J#57TD#a_D>M(zyNm7Rm~vdKUs}V^uB*-bTqrM;Sbo{6-RZ+Jvdf-D!Wn6gl{B+`iZou+$GVQ~A$L*VF}NGp=rT#fer1 z>hq+(ygeuO)4uVi&z^#Yde|SgiLb5CqyF;td}%pLMxoQ9aGJc)@EpRG@^|8|;^Jb^8nOVJ;hOTnWogP27cS$h|GC z6=@v0=G7Z=E>u&qHi2q+NTdI3-BbiM-PD^s`#Yb7#7N2$RMA?4-D%gP<_B^wRp$e- zOh zr0P}dJZr@OF3ejyA>Z2<+lpRDML9gY_>Gr-deIDM??&4t^Xpd4s$?}x;xm6av2asx zoIL?=z}Dq?u0OI$?o5iu?w8!RT$>N1;#$@VLN%etkF%zrHK`doW)p;LJKBB6*%KH*7JjSd9L63&Jl5-kiwz?m=UbUcgD3XFoXk|KfB(7 zhHfhe%KT8ZE82+x0~7~Y@0@?H_<=koEJmBPpT~(9?_CK}SF95=7;25@emI#NPC&>x zoE$olx$wy?R!(RKPpM?xr}POS-#JhmD8{jrPvcW%io(wsFpvB9CBmZsevjs+y9k?x zGvjv_Yky~M+jh!Hl+#_Ywa9$@c6W0{_K-MJ%UkR`Gg+2cM|U1vK%alC)B%ZOgVAe_ zdwkl%*!ly6)sd$`+$iY@aswhyacsf&v&n}>$%&V zc4=M{)e!&_YeZXHZeM>n^k^%_o_KmX`FMVM_WpcQ=D)%$#4#O*m&^Y=^^lcqMq3oz zbyuanEv#O#y5yKk|6B^nUQTgWx{2ojVVVrpAr+sZo)N>hF9WY~3cM3#CaZ^D+7Bf7Rw%pR^IoHCM-2m6k(ylkPm-8HS#c8jp+2D=R)!l&D2naB(~Gg^j1uRuy2x{K1i8&1kXt6Skv6BPq|9 z-h;OY1Uz&9{+EAaE0H;*-M1$qH0wogeWW>T2agCZ>1=1o4A6P+`4Hs0w->(dde<<8 z-<36?wdPZr>0?qgQ2!CC(^(C@y8evxP5VhDNsB9AMDcV{%&D(}jA|T?L`=8KHk#v$8@0H%nixR?^zpKo~OG zH?k?p3(w6O`$6DqGA19`9jp8E5#}T4O7-UeM*-4fqd-r@s%a}n_rzTJbg5gcO=zhk zbmAA&4^m&^Z~F7cnLjWJEsPAjaHE;y&AGbWXv$u%?QVZ8G0vDanFW7W8Cl{i85Iseh24{yl~Vf(_s)=)$&wLzM|nYS3J8BPo!h>G?JlRVLh!~* zcYn<3dzwXhu*ihnONG-YWOmz?grIURd<8R+a)^qic}^6c34lHkniNzsku4_V9S+_C zywptB+-EWgS(mi%1#D?{E2mTFwf(*g6R^w#_ke#YDR6M66rDvdljV|530U%1!gb707Hb{y{Va%uE6m7qJHM6ah-KCb;ltsp z?(lJ-PPb5QW@(|~S_$n4kTlvu|Lbr5Ho5Ei$l&KjEI2mvD_K2r6$VQx_>?I_0SiMe z){^QO!+- zyTYbMl6gJ(^2_k0VMsWPp;*?`TrUipW1sY7s-UFaTYzt}&)S@V0S@EG@p`l*YshF9 zrnt&KtGgCK?JB31R~Z6psaQ?OrBn$0uF`@O zVn%xdfa#iOI$J7{C+ptQ+lmr9bXnO|@A~$Abh-|?SSG4|N|uHA3*Y3g*___7wJ$>@ z^T`?(3uGNWfRX%t&XdQLQ;L;0MO&G0`9)gy$lfeSAthiSH5CyuXNDjlUWXQHM6Q2M z?H8-gkcdMHf>gz_HDB17A)-?O1Ygzgpv_)JlC+t4ZK+0E?X6&U3_QP6J|kFwq_p_2 zF7!^;P)DQYdAO}$Sr{-!bT8}MLeku&Vie{@F8D1YXRIpZ!h*JnoLp(D*|aIHBDQvy z0q9(1itkKEH=Qr(=oeRSuP$DEtoeUtmYtJd!OC|a&}4I3oi=)Y##Lr0H%+ct>7@gf z$IPn`d>O2?Nw_;z+uz&&b$Ur?W6nTZc*z}kR@yzeLipy5cEt9vrTuWd?Q=I?0!YIU zqyMZi`k~B+q{wt!aLuWf^*+LsdxQCSphjs~+ADV9z5)4pQ68F=&f8!i@MnL+HeLwL z>M70G60Xq*Okp?&?!FT|`oG&)JVURv_|uzz?*#q-$xDIO4A&L-1j}NedgD*`=QRGw ze-=w&hPXBVr=bOGX}Ds!%NV-;k%q6-X6@Vm*fr7j>CSGeCo)V#1xASKw6J@vYbunX zs5BMw(5~)~9OC{nDsRy!wAM&+9iR={Qe99gYHGv^MPvayw=0NG~d$(V|$8 z>$jKCqauI&{VR~>zx?9&uYzgv7YQc!LL$LlKt{^GF@kysKTxT`$n$?!2!In4k!<-i zUN}S5UIajpBwgI&=qR1Dc#-OGRWBm4x)MD5~{gO2y% zA@Kt(!^zW_b0Adta8(R-O~8|X5eG#+i#PPg9oy7)Yfp<~uAV}-&Nk;#OR*pL#C2o! z8RaE>&UqZOTXIfL@rIbXg z@{6|l+95kJN*KL>94a=7H)Wz1iA z*%#zEi7$`)v9)9y+VJmApq5J@>8Hp3Ucx)$R<`xGrj~zy2L>4Z%=lkoSO)NAS`>y- zq-d+ng}wJaYXQUhOIq0shFso@ds^q@^zvc{{MTNln3CqnxP9$V@b+jdQqRZ@*9xIV z00=~Pt*Pdb_2Ghs$r^@gdrA;%1(BJig>_8dFn!OMAg^A%LJ!}oKm6ejkYht~mhp1+ zi}0=Ay?%ckKJcv!CEN%O8JsZYsxNoI+A?BZ*8stQc}J@LZ5{ zn#~Cl8qgz=6wKFyhniE7n>z}nuVC06MYg4f;avLl_EOGUW=;z!W?iyvWw}mLZ^R9R zfO~*vGTVYa31!oaRkz-3c$X>hQG{d&5q4cSN`Kv$lZyHEX0cC%yj>X`1BJ$o1Cs2*ntjkVV(rqXgO}GoO*b!Kp={?ofg%cj>wF5ME=!r zJG3`tR5vw)Uqp}g$chZ_v#~NjRE1~kf|d+&WpR3uLoO9gR(vK{jW&4zR3HVtVTBz~ z*3nD)#$_tA+Av>5=xkOqrT87Q=oI`PZP|b3IU|?n?;TQyB1ZJrEId>in@2}BPgP>#wdI=&|cYX*Koio4|ky8k&^PP8u0zjtYX1p7&Yg#YxX|-n)IjCW*832DJ zK;JMvB&CvYcvRQY_?>A$mRFW4V}HCU%QFqf2E}0Y+IrX%oz3lY+rLJHpe9S>A~vyE zNDA(*t4{}FdSYZ^-O!>~jM*piFqn%5j~-w>Lmp8h6w{-Gf#HHwH3IJ_a)9d-5-e%}$fQ1&C~mpSq#g+(^*On( zPhp8YS|tUT8HQ?hKS}J=u({I@XYu?ETciltZ<}9qY^O{6+uaw7nCSk3!2hmptkVH0 zxn-8`8f_IUhW5+Jld2hDXCNd9TR`VHUfND?dQ-67vS6Fxy4E`}vnteYHt2uRz827# z&&S>HqF|#?F+dS5Q#YKXg_5r}M^Rhb`VB5icRqdp%Pm_RDx_P(_vXC9Dx&7qFuLnT z#Eb0*!1;2+qmXqWM&yIk=6}vVab*RyGs)Bkso|4nKR;ahOF2Djo8l1c3t3~J9l#RZ zDLFJIf6`o$3#hVzTfNZ)Ao73PAy1j%ojxt37`s%J)$#4=%DQ*BJDQ4}2H42(FMy$0 z6*ObHgZ!gr*QjQ*z>sNL1J(PN5jE99P%k+`mHAxm+!#dt8*wXxxI z$-i~CS(ip!iwR%CPAF zGEydRtN$hy<+YlSQ-?s={hPH6bh=5NNCi0yKR5i278b6G3c?Vr)68jE+ZmDjxl|~! z`lQE$TedhDZ6N7&pMir5anQOCdd%Ak<`Cb10Dn7JRdqI1S~j|c8~u3ml)<*e=H6o4 zo^i!d?i$1B&B7tBTElQtSW|tdZwm$YS@5bIHb7eI07SF)eRewT#7?& zjhbEj;$@)7e9b8xspEv9Y0Ut?(qS`Os}&*|gS8u=(p>QPx`AU;q3ysnAzDb_Vo=$m zJ9tYNohkG!=n11fMsC2{+ca%7xc!6GGGUxGX3A7*j){9|TTFixu4A@9_!fbH#X?jL*`q%OdqXi0#S$a>a4gATz56H8rOJtPvMmDjcjYSl*z2#I> zz>r4Y>z>?BiRypz=C>3>(fXmEBf@AlH)8Y{!etNilzQb&gIkUz&o|wXDthm{Nqp zzL&JVWw{qiC*;y>gtLbwj9k0t+!ea$mg_asI-E=nZJn#t;=R!WCL6zc_xC-m6q@yn zObAYe6mg6|)oVR>j(QrMz1X%*-8LJzY#wmeY+wN+9k!lo>fG2$Q$_^NF1KwN;vvM5 zEApLF1H*s9YBhpMr3kUEJ!4$$a(nJL+vRpK#i}K1OLuoep}m|L1>e8i_7{M=-1ZWX zyWCO&beCIv!0vKOQ&h2S>+*MN2G>2U*NSr>V1Z4b@&N#w_@Uq1=NGR%y-~7gbZmLz zhdS-P>97cA9!`76m%Hys1|X^7)4WOF8$KYLc#wZmy+;XpA+{~ps?)qhTlEyB+Nx8~ zBHeE{z3Q7IM`C*({77uif+FdL-W*F3+e<){#PHHO^LSkR8xR=)Cx7_ zbe+*w3f!aRI+;Ii%N6Hx1y3(8Hn7BXdfAFCuG`<|YmK`=!&*0z_N-l4WLf66C5hhK zu}^=jO#fY~8qh_r?+}cZHgz-2Gwx(pD-*iXmYA#&p9w^^VE=$|Bha>&TW|jl+v0BM zTS*PAAY{pcTgm(l#w}1GBvwLI>A`K_X;dTYQ|(}DiIg+I*6S`w~hOZDXvbREC4Q z*9qAdZQDxZ;M8r^){gYD)v7nzD!i*;lmnM4>bo0t*;@b2D|?5u_smDId35A-Lu%hR z#BsY(QrKRC#W>YcJn}KkeT#4MLb27#uM+zYV>sc$K-CA$Yjp)i7g{vD-EjJCNkja z8I^WVlDq7>$6*grCGU-81P77yZkuY=2G62Z!vG!HR`9h%?Q0`jy~=|-k%E`p=82hi zf~gJExFhUrl2y&fc04IrDeJ|^cW!_F*c;7$;~3Pbtf^}zbg_s7H(l4Zp;!5BOAA_T zTb~E|!t@)-%-{&{QYyUW7NvPJO~~6tO^;06kvm$e)H_DDr4Hr%j;qbmKB-uImwZPF z7Mj`kCGGdLadugcu&%5Kws|74Y;@IVD||R6VrzD9)UjtgqprriQI`j=<6VDRZL6r( ztQK#`|2_K8-~Mxa{O6;izrGs(+uweB^q&*>kKY{s`S_piAHO|5K05mAH}C&)eR=*j ze*DkBil)59fBp05uk8G9ft?&5|M}M&OuDDlaiPbu9wRBefoz84uHEr$kJo+NP>b%* ztF<~jGeg?kIN+A_%drh?77TyzFYMG$Ttg-E4$RU%vCu3KnDXdjHCXAz%&1HN*h&kV zVM30on%_~~B6oDqn<9tJ=9G)$7TcndIcVICV!pthk$$hgy&_q`AuY4^rE?+&bBJCu zCRmLyR%Cf8Q0JLz8J_rrHakd1=PZ zF~cWvTnqbW$;(xnVe5a1baJJsZq(#!Grx~)S~E32jrOkdk||BgDtV90?Z=!ppF@jw zUcU)$SuJC-ScdV>4Vd#s$Wkh5cmmSyn$d3A0=z97U6r@yra(7{wHduj*S&Q+hKwjq z?PeKb1)M+-_U#=+>(Ax+`^X_J_^Pd1)M1xLW|VKcUvemR$0alYz|D#bW?--i`VOh7NlTwI))cgY6KBHjy}grh?(nL$<;%} zJsp{I%@|q8rbf^vEL%-7nMXgiQ~+kZdEZc`F}sCn!VB5JquU|#wS*hHw=44oV_`{e z8PWH$f9+s$9-V(jF_K9xG9JB7jMeKMUTtFzMm8U)l1lNLf^{U1B|*TP@&<3B*-zN( zHaDoQnX04!mlnKJ;8U0o@*hik6usP{AcCQ6w1Oj7?Jlx(YMbun21&H`-WrqnNKhBx3OxZHRgn=JqovX~y+*;LMThENr z!ss2_>dSwTHS65i5xHR*H9N4(2PLwrG&3XCK`41Xc8qqfFa+yP^O@;<yl%#Nho?K~>R$%1Ij~73jUZ0b1&i?~H9(98zsgoP+qnj}DEn6h- zRx6z1%HfW@J^y%p@$TZSnKgbqT8{HXu`^-NRjz;M@ISop3ilQvRu>38T(X>-XCq#? zH0^uUx81ZCgFtmKU`3Zu=X_bJMCr^?PYNFb+0yY7s*Oxtb9RSD3D1kxnU8RLyhxfB zQ2Tcq8&aYbr?1$p6{LGIRLY7yOk1&7=H)9K`JO7L!C0FK5OeI98}Li}wmmP4gwr1$ z|KWe}CmR!UOu@dkZBESQF@fwbIW^M&5R;y*&smy%g~UqcN%V}+z#a~ek%Ny{r(eGM z!xsl5_|LCi{oC)&f1bZRyE?u6;&+{YeEG+(4pPDg?9YGq#cK;lcyNC9#qWOi`ri@) zsW&*@l72e>RB*nFCVkLk5#LK261)nl7*g~|b*48MUcC9-1IEiGu zK~+{5Kfo=dJGo=^4b@Pf+&(~S4Zt&TsE~jo-BPmVQgy?1d+mCKQ))NW&nUM$d|u=^@<$5h5>(% zt)BGN;zTO;|T8c5o{EzPus+~_+8o-j`T)xHk&`fOZ$Kv7QD-}(Q{dYI9*Yt zItyM(08Lr+L(Fr6uPom9*1=sfvq2ezD%=^t4gI@G7zHKM6jGF-Fx-ON(`0|Uhhkj; z62yXhjV$mJxVRf}$7)Fa_`bjAKl#MY#GPCpA>pdUffnRN7l_u6_mY}+-ti);2Jx01 z93Cy1I~YhKR}PTb@AigSsvgh9k)cgnDT*G30Lf)ZxfoY9oAOUApO6pIQ%_=bC9_^z z$3Y68HN-w;tkRGpb;oMJCgp$sU>MPD0f15aHhOVwOF<^>`;~q3tiJ7>Do(Riol-yO zfU;rXlcirK44pHv@ImN3gC~v*!{yT6(M-++|3@-jZbE!oDrlsYzBnYN7{g}`al~HR+oR#V^tY?%h+j_$wugFdCMX(1DEV@E4>-M(Xq=#?k!mHtX*!kYip#7>~p^+J=)}) ziIf!j&0hgGwiEY^=qi75mbZVfPlPtxIU%Q{W*M)zEnrIV^AyLEQS&&&$xRpLVzOfD zd9?kUv$|t|vLf8l#8PAqGi6jLKz+F9iaCFR4aMlJ__{l07xOV~@Xpfg&TbGAumQtn zFCpk@WfHB{0bUj?7VauYqEF2T3wG!1g-;=SmN^O#^UDWavuRFt=pQnVZfTprGGZ-jB8%LGef;qisaT!i zwNLUMD9kn1k`zXrG_Uc)!}%zav(AOXNSnmiRS)B+Nx`VncE((=Cno(4@hHi@pEBRcxDEI1phaF9Ii<2 zKlb)aF2=fM%uf-NRdBPpxVtD|yI3)FR?8;1ifJkzfkA(q!O*#Bvy7=IC@=dK*v)}H zqo_ZE57dn2--#mFGnKkAZXC2kfLH(lqd*ysZtRAkkpqa8 zbxI2r?6ry4W@|R%O4obXP#mX!(`}-ntlPvyx49qP53Jl3ZZ&B&6WZ~~QUxsJjk&QH z4sqni>>__pxV$lYl9?<^8c`D-z3~(fm6T0=7P_WIy8|6~$6Z|$%>)&}Q8}q+ilY#D z?=vN5{Ems``(gFNuW5G6B0yBWSMCh*g`gI+!m!ahZmtu{m&Q?}Hh5k!?NCBcvftH4 zH;M%VS*C8Y8Dm>KTA_cq=64x$ij3)hSNntWP1=7UM?IZ8Y?DfDuu?cjpn}lC@Z^O9 zf?lT4n?+Q8_{e>Tky^)|Q3QQCSmTY7`s$mYxu#HbeUta!fR8knihK<@|G0f zAHP0(Lg+KI+_S(pRWa#|smugNaT;R_*yi&YJCO^p=?mGAdkXdrJeP1W=9*V;$hlBW z-NAp`Ssv1GYqzbAXTy=3-9sco3n>>o?)fKLRs~aU$N~GLzd9I^gHKas{zvGkI+&1) zvMPASb+I5^Oj%ufR~7zXDVj2TpPqlcKcAHOujcZ8tmU{-Y#f}z7`>CXYyt4R z!Fy?)$tO%_CmE~eC$@(jABG*JXB^TJ+-&f<5ko(IefGVIF>rTOy_NO+QVzJ3f@@g^ z8{Sh7$c=*{P9}>2b7c(|e#@%4|H2F1*vQD)1e@P87{>^yqzv|!`^z29xl^gdOsjv- zTH%v8&f2-Y_04AQ+6%g{FTyDF(fv^|4N?mi1dCa|H&W9+tUu3kPBF$NOwfrauabIF zejt$FI{{U+(Q_uWgJQ86L*1v4Tujl(kViz5$U9coJZFkTzlB}nDKB2=QK!UE#KzvG zMcr-ULEAji?s;PDo+Y|&8*z0nA)unz66=zwrSBK_hu&r|=b7W5tflrbJ z5t#D}<$F7|^MPs{^i8J-Y}?GIGFq^U?{;PCv)%X2eOLCwiq#Ge&>6M0rrF#Y~Gx>!LC`{nwV%Xh{d+Ve|mXA{({}^Y{^wEHJUok00$#!?aQ6G zO|a5_(&8_DpTu_R@cS|;rhL}a5juf2?(S?C_pbG>=%wVy{Ots)b{tPy4R}dCjyj5M zsnMT>a@x8wJw#2bkUF9S>B@h{L`RGw6o){-P6)rPvA|V}7l4}XhY-_F#Rn^L{RIQxGMcm}A4VZlV0 z8)l}P-FD_nWWBtEBtbW^kLcTCmv=z}UHGv3DhSu}Dd z3L;qB?sfx|o3xEU9jY(+b}1;FCb1`~I+Cstz3jg3Z1G6jF$kckx2_#&dB6M(TaFQP zAWD|DaE~ISS&H_p73zQD%HL_IG58{)&a5sO^j$B(hJ8D9-{Ndn!N7A#rYn@g`@zci znGHn)W?adtDICgY6jsxQkwQ3^9ay6}Xf?aOkzHV%ctj(2NwEsS&BAq;V2|2ApwYGf zjKXbsJ)onWD*x*DUwsuJF7TRVT0*$I1u658hwj>Y&g5E%D@ySQ((#XVvyrXwq+LM6n* zBy4su_k@_ZMVx=couDIb8xt{!EyrUw#GxKWqC9*aU=8sIZUMM$&e$C1Bwt2r>y)#I z0$)pY&F;fW*p9T;s_JSLxSD>47+tI?ngJJSHVoF@i3y0rU)VTH98OFINta2+I2_=+ ztEEUX|MBhv$ox=Ggpj$dcQXN@9{)%Z!g+RqxLX}Km|J&tb!qVM~c*ExOj>{$j?%)dF?*rQf$bt*m zcu!}e%wqkns?~E09_mBe2^bM=y~3(yWA=$Fy}Eyg?g*_Xd`FijiWA6xZ5D`$ zeK>zvA~yICe^0)qisj@z6?BG{?xU;AuiqaV!UQY*#aVEV>moX@x|98|JFvH&Pha<5#FCQSb&$ySl1Y0>45vgRf45w;;zhZceC)g5X^R!+kKZqXE6pE zc;ZXJ!RQ^sB^(niXPC_7cPIYqlesQe3r{>|GObx971y#}T&xEM z455Zz7ZB<$$ailq?4HW0QC_kFGE{$NT(@HyMYt*&MM^68lqo&=yIQaN0bu}HP(irh zUAi)wCc{WFp(Qz~il(N;34ny=ComYfVN+Rm_I1q=N)k#+s*MgXgE_kJ3K$?Kg+%0G zE|g{zq8QC;U}39se&m5rS@~89fmtOfJAT#eU?qz|EdO1Qw^Arsu&xQ(Ouc`jmPkS9 z%v__o5z4BwU`ebS@esBu*a~a_JZ#+ZJV0MHJ@qG4Gfa0N(j1=ucq!ZB5{{94e-XF0 zx@NTGVs=@}PitH#0h`+R+L7q)#Y6o)GY-K+PRwY?Q;C z*9^#&P3kiWX;l>*GmYPVcXs~&2c`JC%kvNBU+%ouu)4?Ch^F-n-Q^G1)gC!A&C05v z>q<-X4(r-}%?24L=X&?Qx2m;aKaP^uQ|{vmZpk#wsiy1S{V?_QN>hK4(>k{g@uBj) zJ|tMLF^|u-Uwr<+1cEU78*K)vu$iwCh2nuSa*eaa`C40*d{EQf@fMk7j;YAUN>kme7wDcgjbOp3 zGe+}*3-)B?u5fFJizt6>>uqs>t%IUm?kbdY0d@_Tgu~4iGH2atK#vS^rD?6NdC5A= z$fX2=mC@J3()9wPm>!@mtH z^%N4PNT)^`)Q>pcd&jk!0Dyr&Dx0&sDa^ZCtru85Xa> z2Lt1Rj1DE=%&Z_v+y23<8Qw~W7_v!!RC5(n^%S5c-KMioRn2VBck7vPxl!OsMwc#x(e(eDqz1cu_wt!R&wJ1j|5!3{!gKHSA?F zTzhOI!gMw{4#|Kql47F`D>FNBvmjhMBXU<*w86Zs=N^9}3JfEqc^+n5I>1dn@Ypd; z=}Py(E`n@s1*S~aHB*&D{TKdn-mdR|1p53;w@2!@J@z@D&E2U}`)>59<>|u@POM3B zA)LA}h?aaiWTaVL`fUPA!$1REAh(u!OU&d|(1=Hd;t4mxpSho7SshQvDG`llGmlL| zNIwVLk(qxO=%}`@9e8popOKejoIOQyQ>=i@P*~8YBMJnYWj$H-sTH?>mvKwW_aQEZ zskapcS5RlMza?FM711|=x->Fphl&*Rh80m6GLac;D~pLvwpb>F&Z=!0A5S8N!FxNK zOB8~%L`-&}4vI>~7UHxug77hP86Boe93?J#DZPJobaeI{Sy6oF3=bW1Qf&Q{=sroi z>(pBS_FB={9prPANB!814!C8DLuFMWDb$=-n1`vDwpEOy2?W~@V2g3<#7L(LF(MzN zHve<}i7O)uok^xXNDcp-kiTdo^=~5s5XokzfvbFuvp5y#4KjOeGmq?+BPt#9J7~DY zg)o0&Ebd^!U_N78*+HF-DWn*?_{r5#@uj6*@;Y+1ter8SS{PYNl<)MDeup{cyuTGME83cdaUDhSkE+@nZC1&1O6!C97xP z$IYU1D!@Z6OoPwbUZWG0A^)_=}`BIH`1U>gH}~TR{SRXLPU^Dg1$U zI0%1Fwn6w?ZiDbQ2!CxGgug-f8-%|>_zU{QzliYnEU8{-(@ZkA{)pD-ORxnu2H=>2Xz-`)fMQlEfTGEHd6?spw7yky>S-^J4N&flC!hsI~_Lts-Mo zF_$YBgylgsQL;2M=R&)O)hvU#BO*s^GMl*cV=72fF;KUzAUJfxS~7QJ}lA1;2s>@gCT9O5G}XCLNr*2+BR5-1`E+(AsQ@1LBIGHu@HX^?!lGC z48q?a{P{Kre~+|5_zP)+@HYs5gYY*9e~k5Koi9%;GLz#%X1;2m>Cj>yC|aV&X+-`Z1;ey6!*`W@5|;;yfmAX- zQpZnhy>oD7%^Nj3u{E(Lwl(p@wrz7_@7NPNlZkEHoY=NAv7OxWd%yZ_)vdb!oYQ=| z>-6q@dOv$TYnj3!tz^7&n%W?*WK8|31h|XgOL3rT!V%1@@({^5If5r4CI=H$Ixy2XNiJ zON^o^f{rSp7GIwG`s+0lWsRxe*?az5savUB$GWNKZ7Qz_es;WUeli(%BUSyPF}#AQ zOLiwV4T&w7PF`Lsl+9l<-nsw|%&y}^hnrqi#23}6)#y)kjwF3-rjT_*tkK@f#KZQ$+bm|&!YoXh$nwrJC{+$aQF?nu`-$GHF*V=bBqKzR~$1 zTu0Tm+ch{047acUuwV9f<1)+2YRunO2caw`K3Q*Y9TPu8tzSk=8u4~7064JD@h2lr<>qiKL`~vT3OMn6bg~XVzxoS%^c@f%PD;MO> zsI8r8=Og4Z7G3yR3E>L%N5sSA#!>G&*^%2ulCuZ^O zn9H6!ZgxdGUaaf){>lUL&qIoQ;dlsa<5`9ePgG9?!q6(>_v7x5*Osu%HDm#gGH3<0 zVx&K1Fss|8UdQf1#k9Gg+%YcVpR!&Rj{mAf@%hw%pknJQ)k3c_ZHk`;SYcJx4kFJ& z2h*yz6>`IFTYaBi0=FVdx;3rWxi;gPwa?_sL_`hj9y$Y~)H-a!Z&7K74Pt#Sl=9r` z`;ofs800$BnEy6c-wJ*caG&1Sa{H0Ee#Q#l{(MCuWv`5KWC+C5ZLzFtjx0iE4HaW0=m_gz67<3`}(U8+T^mi1o???TU(Xty1{VU4(M z-RtmA&#|8bT~ zF=fkrWA7hEDk08CgT+aZ2MWG+lAA`&+MU2z>$yy`gvudv^*KvQHX~sy`ILj~tkIwW z)PLxFZ3`UIBujhumhgI-o6FOhX7=#ab8`+Q?dr6)Pb9tpeF-3Hv6fn4c}H*L7DLu3#UDS zc7#Xnjb;euwJ+mMFZD;F2fy5h?JpwbfP!H;%}us;gY1?2m#^zpa9sOZH4t+N2Fg~> z*%AKUQ*NF#aQ;&%yEi^34DIrEo+-iI{1mTZqgrs)T5t8;Ayk6gwM^;F=Ulm$*u9%y z(VwA_A1es#Gb6lTWmaE9Zd&&tI~i8r-ILRrKMOjt$oKgbSU2UrUPEX9MYp?32M`4k zdo5U>WK-6*+29<4rcAHWK}DNW(AiRo_&$_DQ~RY&tyAOz91O{f*>n_kTPK$7l49PA z>#j`e z(pl|PSdpGgck(yCRev?zHxN|=u8*Rr8`2&kmF-A28~2lL)E8zL6XOJ(k5 ztuq`GE~Y2EN4Z3iTS$YKtCuK)mu+^`eq0#cHfvvK+Gh3RiW3pz@?vGp{V^yY3M@78 zzlp&}&VVVq_+t=$6C+#wLc{YT@*_$l5_#}apqy4gB%*k#YhX_Cjq%I^5V>v-U;tHo zB!Axnl^j}t3UZ(HJn$p8o;m-wO&7LH@%YqELE9MgWyFTVr}p2L1#RZ=|F=GJE2JU! zX+!bN{=a#F`hsQ}y6Xk;DndI@2XQ6!degWIDR?7n}L>G0-JS}5X2qb=3nL5f-LCxn3$kqJAcEUr03L=9YVnZx-)Plap{yRDRh;2`k_D~#Hrq)o z|C6lle@jbVg9Q9<`N2UK!hhF6T@z?hf9ydRsx z-~AG~;Lc}KtY!Y;%HXgYajD3 zl66H@>C=PYO1TRr(%WnEwX885y3diCUhF>xmANBc=ctB)M2m)q%UlX6=F7DAZ&_E ze-1m1Gu0O{^~`msK|YR#$|x7JcaG zMxSU-tR%J*Qx8gvknT)#7 z?II)j58g(-9D+|ypWL4xEe0&9(|`=y%!m{TAMhrYx^SZ-F#NEDmYK5b z^BI3-mr+!#Er54{e&PU+^T&=H)zSVo#b|hE=%@jw_V}qLS@^*+vw88hr6fjF!sE$% zT^`SV5Z}o$u50<2I{%{G9#_J}altieYyi_}j%JL#+azSzX;fmrXa-s9B=kSF*W{T* zy0T{^rWSovA_Ptwek?5L(LoBhLK&W}Y1Dil zGykw{)L6$&X9X_$$m=|msya2{{nNl1sO&|z%H7*{*(d5>#_okpa<3+np`y6yDb*Q( z#)tPdbVrBVlA(#GGl&TP-r4cZ-9z7dIR=CBnCr^fFa&B%(kI3^^zzLz1&hbHc|p=p zoaN{R4F%Sjd~z@gS0tV$zpWHEUFm$9J)Id|UUYfedE{=!xJm`QBDSD8YJZ*?$mSgp z>ACcGLjIBE>mmqNo69Pov~MzL%U8m6|2`ak?=8aGn8>dvP^cIb*GSv3(!bj z1O83gR|z&4tp>pL@MOV5pOeat@W zsX^MNc3^jYqdQ378%pE$sSXRkRsm3pmE(Wm+|VErFiChjk!#Bf z3Y>ZY#a!w!j>lPwu&)08KL#xTmQtE|ESU})!nYn3uMp8x6ecxx||0qo}uuKZgQC@tA+cvg~1rK7mQr%#JA-uW^d9WlC{fG3?ba zmAiY7meU|3a?l-(E6~u=%T(;w!WJdDXI1TQr}8lnx#F*;K_TPwBK7PyRVk<#5fr>X z&5Ug$0x0^!txU9K9OZ-fH$d#iZS&{rQvz zO;J?=x>8*|apUQ#w+c_)ZV6|~v$XU>Q5`qjcZh_R46s8)=A@Pb;!mtLFvQRTQA1Jb zIuwiYI;_9F7WwTn?=D<#dxFSa{7?HIPcPesz-KDp;{ovVy(Sa;yoj+MAbs3hePX*k z*qD;Rz-;*e$?W6EY=^=qru;p>d=SbUgiY+ziJiTevJ`DSE0$vZZ1>#9|FzFyGO(mg zS&(&D)r+kB`X?_;=Trm->@n}0b#i?76vSkj=o!9n^XnflPkWw}^9x!>&h{phVt<#E zx7%U7{`U3at&3$!yZcft8@y^uqu8L8o*C{_pp@T* z;;dH%#=^`J6;ON+rPuD=m{O3SrlRPJ;#Us?{)*d)t9XOxN*l$u--j)r^V-zC@l=5) zgGtO%q+`W}$^6&a3&L_O`asqcjk7wN*(6LSduClShmECvHhdo`l&ofPD`|aLWoH{H zSzFW;`%4(i`Q(Zlsb-V{#vzHo7d)|{Zhe=+)KXjsX&^av(zbks@QJ59LrwN68pPB; zV9ELJ6bMX5PaBBpa_quz^ZBlsUsRcxkG6Z|>uBjBeTA*nf`JGbHz z1H0;z6N`N9pY02Y$xXet$Qx_wI8u=@Wi%b73N=LFGzsa9j{`9p_1Y$AzeJ+dg_3`8 z#7c@a0ddt}7u|m2NmFhp37ZyqWBC^sR~bgR3}er9 zC@_NeWg)%0PIj?Xu6wA_$v`aI?bZkK;9E|FSPvR5CTqJAh&mAaI}MG)j}ZFpaZ%T~ z&*f(TnGXti9CrSic(r;vs080=^*vytwnC$6x}G=1^=5O`g<3NKb{1KTPUXbS+~=jG zmh6@(WXhzYwAf9}77D&u5(=AMlcq0s8&Gq{oW`=_a7nnuyUCo?yYif6*6ohNQk9l_ zc#L^OPQmh10CPfbJ&d0KKcLF-(86@axz+cRY>{`J!ZX+6>YG?J&*veR{;H>vnnEDR zAvo)50+QI=EbbKPb8-7&pKF+^l|tskAe9Ka_LwzkCIV@aVptw%p^NQo7%a*e4(M=w zrC>EtfBL=g(@x|GvDp);JvKT~F&~&%zD}AERzQ=XF2H%qT=-gN4fi^cVl#htcOzgj z^tz9bw9|j7mGnj)HT?E^db;CXB!Wz}Epqd5wi+O~=Ma^kT0u0{woYl2DUHdmbtBpJ z(5Z^|3n&qR^WPjp=9z|(%tDDB0jBC$67gn~Si+KWI44w;tE*+3s}a{&y%T4Ds#M%z8ZE63Zl1EfZy;b}a? z5k4GJ5{nZ0z=MUpSg6*5;hcvw6~eFnmJUs6Ncz^>_Vl!zDCL||53*lI02M5h{#R4%2>HTX|!RqI$xFgcnHriF?-G8aG; zxr7ZJu93N8S`cMF2w$)>2jaAuF0F3PXWatic&X|-Sr$}faXd}Dp2xC3--ZRLnyf<4 zRoW4p{G5K?tSu-M$IUYomi`hW`q36cKKYVn*B-bzzRLlhSgM7@I?~{fw9=r4G*Nf> z#o?K~=;j)1`k?88r_8Y8pX*#JtAiT?&mmIEraT?)Do2@CB3-miCXh-r$Vzkb0soBI zb&1H%Kn2oLi%>}CGzwI5qFCs0`n)MNO^`F0KVi>og8yq;UjI+poQt371kUy-EB6vn zZfU7l|B!HOm~hLA#tOhDJspp zF0WTVl|Rohrh6)X7?9PLQc~4PK0$VJq&8925Us4@#m!#(?7f~&#+kyQb7ukFC4oR1 z6@2>}aViUG64hnfU|?Ud3?$LA%#@})yxnR`+h7O=*jr;A0W6i)L(-a2{hUQhvO#cf zaVLnK9Fv4Lw@)o*;Y{R9jPmL#9A;kzE!@`^Hir>;>=&Z9Gv?V%3XC~Y#TPk*k8afC z&@vr!*UN_8E}KyKYIL8$DJAyn5>r;in=R_h$lU&2FQ~1R1`Y(<+2njrr;21g8s}$= zUHhS%^)B862{@@wb3+5stzUw4E0JS}F3V!@qAP+PFE^x0vgGQI2^4uhA16OMcUPXf zgDj3dH=n!RKQ2o^DgFDix2+FQu}OB;r}uv~dw>2*ef&l&`>)se|H;RAxqV#z-!`D$ zS)aUR6WB%n{er;Bk@VQVNCi?A{kz--x~-rI%UoMu#1LYh#LzlVXkiDB9#V;M%RKWI zHTq0G;vjD_SZ}W2qZ^zn`JwizqJ2$vY;nSvQ-(APaVT}fnnL~PGu%<#)?hE;NU%c- z?m%rHWkRuxuL%g(5^(`R5QsM1s~+TUsJhL3^*9jR7otG3$uOGIxnB48l+z}(mGwIM zSfgd}B%eCA6|+{w;pBnOhN}IZFak4PIkbn`$-T<&F|Xf$sc@u=TKqIvc>@1EFm?IO z&;IDDiLhVcABMck;oUUUoLpBd=Og6_9+sgSe`R{cDCs}MNA7OomTfZ?;R^w0+2`?~ zwWR9A*c)(QLo05d$%12S$KCvqWM(93^2do~U34v<`Z??`eSq&K|C-`%Yk(a+?c2wb z+@1JGwPNnA)i}2qYr&^h zY&@f;p0+XI9~P=3Ge4!0%^Q^t>5qs_Q_o2t`oLnEYe*p^z<^z5>c@|7=Z!;5gHD-B zyD4;Tuy*42vF~klY_uie+6zuYw^;pVO=!$&O6S4{DpLZ%7!bXb7)c~!d1#6OzPYCc z`-%u^U|5xjlV(F!zh8|;`!*?5OQ^iPa7y;HMJIgQ!71G$abOm8yxiECgEu81R`Vm!>dQ%`?{m=j z`DlRrmkUHyHc(s<+;_cg3&CF-Q61a2=(xU8id0I6u=a_J zu1Z}OE;(<%LfHB7+g!4bco%afb zvq$|z2pb2+Jt8`YJ+(G3|uWdt>S#b+=S!v%O4$wvKFcXux>s%Rjzgj;!}hLtWII*3eIXW z3~absEGr_i)e3uco_A||xr7+>f^r>jkef3SVqmV3RaQ#jS~r@L!#g?!VPX#pyf`fhvGM zpc?lrP~PT$P5Y-9h3)@qs`CtLx5(EH%kANY=5&6`{VmBI%?V^S?Wlh46_m{8?Q;CT zMqPo~Rx3%sFuplZB+@iXt)ps4eUHDYF`LqdNt=Bm6>f zekY;X3od(8Y#s4~u-f=41!wh*+M{z)270i{vcTcMHMrKBkizZh@@De#3=!oz<;8f( zM$>lE^{G91c!BrDtFOFH2quhVYHGl^(wKF>>^qN>dq-a9+!&@>%f&iBQ$bgQ*9Tkw zo=D%XSI>5-Q?Z@7oRfThE&Dorlyd%LvjxjVqmdSv5_zZOKCdPe+NlDZ+lbCBf>hOM zIQ*vt+y>hZ4>=HNJS!b_tO)%b_fqjR4Xu=alG++!JB~WsYp6LjaGflc7A67SZmT9G~v+=i4mLn)IEkS zoxmIf0ezLE)U9DEa)gUpa&VQugl1s_O+z(YMs&2yW+(f11@NR|4Q`-UQ&RpjuBSlj z4(X08&NzSn6g@62?2s|gB5i~o-G|7RkBI+`5OX18VVB{#`W^6nw{pBX|M+04h5=sh zPu~H;UO|xB&svbeMQk++^1~zWJRJ78)L(D#+*@n_B6Hj}$bJBfEV{)xoj@Hml=|2F zgK|+WU%)I$dLlD`eEnJ88u%GyPGOS{%CcVlJ>lrnlrJdwD#lX(teSQ0+`qepY(T(yCv$wBUz zsnsOFA%!_^UuYPz@mNdP$VHwpn$R~xyySTZM{`1)L`xh0i2iPu+{VW-K!Y6;%g%lP=cJR>HpXhepG?_ED=#OwWH3^Qm80!TGm~pRjzVm2GraJ}$N8r<`-c-b?*Ojl^hJ|7}zc9~)K( zSDc*I4`*A$;=m=;9PoXQiq_(cMYR@`J zbe)}vuGdv#SPXH>wh##Kp}js!v=nD3c1lV72= z&t(osfZ5Rx>&bvhS^dgxbO85PJfg zqXED58(!JTn&@kUC!8=;U{3Zogx!omT`^V|x~K#h%w8LKUUyh=OTTfpVo$L%f) zb`^v6T24D*+oT06Ft>Nz;1E+A$Inp)H@&KJ7^K&^%qq6+!-r|8I)KE*M$|mKW|y6a zjDr{d142-U17Vor>*au7=`Z9NDLf~|{|y!$ zi3L9fk>dVF439fcU}Z^hg?_BSj&~bk@3NX#5U1nWg^D!`_YKEMu!ni~Ut^w%z13D9 znbK?ci3i_~zk*GP+?aYLU!0f$ztJ|I8h%`#tjKiapR1 zzcXBZ`?+R8K9KOri6k|ZkTOZ|OFz@gYE0;?3E=pboC-Q<8L%{`>>t;mZNMkkr4~e| z%!y=o=B^2cGnC@82%=>`Xj3u!Sw;-vC&)O5{03wZ?wyw1R}ZGwmjp+|3oIlf*Uh%T z{-(#RZqEEDPBM8)`If>axw;e|8=v>YgWA3M_vnsuUJJi5n4+exIm9i7jG>GppW6$o z6!>FIS&>kNpRxzT6pfc>qHFb`gmEiFbMM||{kMsFFPq2=Ed#9QpRf@%gr?#5Y$2rN zq&+LFQ)huJS2FqeS8YzEzLskHw~seM=Dwk#BDA(YBF{w!fxS|Poy2ye*;m072N)## z5LxKj)F;)e#>vU6={*xmWTnM2O_w+>xqxTNngC+mO2dZ;V@lgJYN5sgy$LsZZ6ne&A?*52Xl24D1m=4NU^Kn>492NZ^F(fdOa7?ZR zwLux;3P_W9@f>x%BBbO>a-2v%bT*Am=G?_$uzY7E>S3}!lxnFVWehmq_fpTMzzK;3 z9cR{!+IlK8cB&?Gs1jPCQUfZNwPwE7x*icG@O7jXvVu56KE8Z&ta^JOqwUBcQ|}?q zXAtCsP*s>cN6%nNW!VAa!K^X!iX3Ee0c7*R_&Jqm7pSpyo90vfcffD~0ebk*a%7Jk z3K8;XT4)*IKUFE=d=OE(}{)ZBo-F-rCNwuRa%+Axh}YB-vDjdBq%K zGxuI1{5!%5Bx3BQ~HNa}8GJjqT(EsSZz z3Q8VhcWN%;v^h;Ex^L<8>&_#x6}>F<%h9vgw!`NyJ-49Ct^J||L-|WI|5{spasL;} zQyIfNz7(k#*&iz>)y-srWiE1ts2{C(;bwjK*rI>Xwjg~)@;EFZVJm$mxYB(t(qF;y zekuL{ANDE7XSP-Zs2?>7V$>GG-?Z*(Fpu5*>srI4=qLL)T>Ujp2lE!9!NWHcv#zAj zAb@4eZjNoCI%RVb9l$%gS~9=OBD6NgRP5kyx1C&FCxV_B{Vh$Iuu^8RSJ^A9Tkz>(e5Z?Hsl4mj%irgfSInGmeP+wUyz&k8s$GXZ{kj; z4{$lRNn*sq`>k2|%&I{*!Df14FAKA(ztuLUh>)>!>TkMIeiLU&kWmF59jQ%g`q5d8 z4Oxu~#8UH8$vw+Rkr?LH(jHBI$e+p1#R!VO7*@gWluhlT)Nk0Zg3W`_*@d%J=iYX? zdPzXu25I}Zd9BUj$qQlwbEFL^y+WCY$JGA0m?VFct}qox9XzT2CsuNFzGx9x<@X8~DXQO~fiFdw*96+F1+!C}w$ZI|= zjgax2{HKDl$s;JpIJ%6BpCTMHf&m)Ur$B9(#s~vk8m(tCUVGiWNx`VBek8 z-Hfj4q2Q;_wt~Hruq?i!TMu{Xopkx}@#6K=rPHC)6Sn`p(kR10eDrwhdTyW!b}6c| zV;pc92JfDjZ3aOa8xzUhT8NX0o;f_iS1p@bJ#NMR`pBQpP1zgjz5Gy7ZD-J#atAah zX{VT4hebKt%M6h(>Vg?VI2V#~lq)JV*f~fc>GFWJ;0gVcl4eaabx9mRUZEA##9aJS zaGa3)R8R~>{?|2oB>!tEn$28;iuhwX?hk2p!Jlpr*;KzlzUNSNii%;&aaGZLFH;CNNTQE&|eOR!Y=CjUkp3J+$Wjt8>UY9o;wRI&6Xzp zmijbIt<5N+n63$ZlfG3iGV{CI+r+5EttvmB_w(KTel1%z{1OR~@X;dM*AJkU?wA76 zwrN!(ZdOoW_cwhS!uZaM@x9+^xaTlD4^WhMsb@ja5@~Diu9Mx{swy0d62m(x^`q-d z`(i*h^Lq`ZJ?#_W&63o_H>hAIPSuIeQed)TTfdBcuiZ2r z<)LrfL)#CZn;EqszG#3>T>STpH3r5Cw{ap70vSrY#>RiNTdXNOlspW&88j@sqe;enn9< zp&?MTTukYtbtmzy7r*Se&?Ks1HB zJ3t@jS?t(+F@B$xB^D;-#OHNYxaF*eHvLzf9!PEw_}ll*o*$~P$SMkEpkGrk^4>r6 z2dv0_`+lGj*P=F2-FkDT;!D*FmJClHneo2{+~skk?51qF_3 zYi^ljHf~ARaI~|&yn;CJ4g(@Nt}zPUqPfp$;)HUPZ(M^>bApeKf6NX>T~X9v`sr`u z?d)}GH_>SR12=9F41SICtL#3k6Cn$088?0+3rsMBp(+Z?1U}R@ zf?DJPGoiPQlfqnN$&%Gk;i z@4&zrWKGWfQ6>7vDR#>?#nSg{uC4XxyuUb4gFh$DhkGB8;Zwh_f|CQ?x24c{gIGbD zDrbnjQZT0-=f<^fnBWx~aRo?~b>gPk-&p?beiAZ7qD|OW9iTYn2}IVnrMS8?LUA~m zt%l=EE^V1>$DOx=d|cBrcPaWco$;_r(X|37S>EYsd|uidA=8S z?}CxnQ3Ae5La_f(aR~uQFtR!sZ48#smaAhQY_$dBC7Wx8)#(MBnoZj|s6iSF~|cCVk?LE5aop+!m!g`T-rtQBQj6Qq9U1R@QT>ocy`K z8_i%-8`RA=7nOgGO-ZQNd(? zEnv~Bt0=|Hu9ea0A!8oTiuG;vgk%0-6Ow=$OQqWO)nP{03TtH}m8g$RA~t50HHnWY zEmndyoWM>BK&VFimbyCXq34=x_oo77@o+vxVW+AC%*RE?*$$v`L?r` zL`zCeg9|kdok*guBReowHB5)g=*yQ*OHv_dYIID)}m*?OTNfbQrOBA*U1 zRDsoob@8zWY0cd{j=-T;6fNo>pnl~Xib*9xgunr?n$!}iFKw|%1L9$WqS4Kb)`Z=h z&SE#!gHx@=6)Kf=HgM;=7Gg5I8&8RDP8aCvV$aWw;FHg(8Qch`F3LvEF5VY!&Z_dZ ziOc@@D19c%okR<9;)0YIzC_Pr%4bI7$)%-TYe&w;F^CFeBxYzp?ACl$ zJVSiV2(wKna`!p!1w|JXgK;nw21bq|Hj~;6h=`4f#1$s%o@Qys1tXd8>drn=tikLX z_y{m5jR$DTY$^p4ip=_kdrlnBT5)0j!{7wYJ_Ppu-j8ktk2iI#L5FNA^#WarH)YHuseE(n>OvfT&Cf-e3V$N&G z2X;4X%o%#g0y^VvNpd~)A?hqPc8*Q)bJPw3NaBLxX|a$6HI=8qNK;_5-R0CAMg4)` ziN6KlO40P}J^sFU<3e}cj%cai&osj7^n}3*hTVjQxrc%;UOkr$W3Jr+dgj7Q zzZou>TiNsNw+o&xo}$56?@UxV@GM!W#e)o`$^yKs&iCQRshy6M3L4|i=>YeiA>(La zcJ;KSlbaQo=JrU&PsCC#<^vhuy?cQ%-$2(Yb)~&O(j&f3Rum3CRuhthTs%-xOBM%; zXO9Yu*4oprp+^{%-yO2LX~a)$+hUN3`?qUg5@aBUV$6^xGr_{!ghw-rygFR!vkXZd zkeIvVy$z~-qH_9mOI$q$AP?fLRB>|$Ic?vJVpdwqvax>6R(!-PNq2i4Gthti30aK2 z5$?TH{<-gEJ$H9W=$1;o4Xz2mFxnG+7rLHzYnrz%uEBcw+0yewLiTzh$+>ElgvigM z`zE+f>~He}aZiMN)%W|fDyRMv7_C;~)F;23YuNTzVSHg|^L zoG=F2=Z%INTXd0gf@s3|CP&9*u&mGf9B=1G#$s4~@oICRnEJ%Xv6$SuqSIQVFoT%T zceHc2>`*0^BujPmx+37-2QA97C6xrGo*ChmV00Ze0j6D72%61){!%TeCIKtJ6<%sx zJD!8T%y#q!8r+f!sj_r>{OSvWV7fbjwE*6Tg#Q#6HZl~_IF%xoQC8HHHPvC^w~pgB zhDBI}5p%w|s$LfQeR$gO)ooHh2&BPZ3vja78I<5mpHAP|%nI|+}(&{ewE-$Ejoi)(= zJ2p}L54d{T7HD_?v&l_#avbLi@%|%KI4VJ7yR)PV9$0@LDKL^F%PAuy^H?R)?SbeShZl^!bFd# z(ORRdv3>+jn(|n@K(~~5d2FG>Ry72)sKe(UM`=x8BZ4BiOF`E;b9iF;+^uthoRu6K z^KH6~LgC-d&rNw|apB#2zw#8)FJzgvgQjZrxT(Kr54+_5{;O{y;7$BOm-TwXM2ByH zI$9oVZ>pg{onaT2i8>wcTZy`NZOl^_tKat~U_=P4SZEYTbj=S!*;?N$ZyTT+u_=(SVzHz9<0i7oF@IJ-?jUNmfMsCBAHMW_D5 z<6uEoq~T)dbB*8op<s`SK~j8Dar;R@zW(9)uG)ndb9OYzl(^-;zB3%|H>Hr0cFR3VjUQ84h{M;fnMCOlrokai zS60M;(Yn3CJarf6*q;!Xz0=%}@<@v8>~RCqyV}N+sNWA5R|l*``LW0fk@-%vppHTZ z)iY1j=FN9#HD_r%#eX4X{$pZE&{U$+kBfaGSbEmMmM`?_eI^q*3fm9_(Sx~3`aKe3 zxeUPHk8N&!{(QLoTzS2JyyA@;GDLy};+SM=5pdw%tQPhY=@WlVKOl_MyRZYv z(%C5Q*~#PBpVHJ*TMD7Gk)H$Bn1nws{xEJL=v=vy)YH&eDTA5$bg_A#-IPAL*nrmw z;&yEmr7GAiQzzAP&EVDhmJ*{7v`g_B3mGAuS(EN~Gf@0IeCV2Qn^OoqG7Wvbha8&; zgL{E`BhWPJB`Or4V(Gv1aY(@eZ(IX5B@IPsUcF9cEz_YV2gdJmdHxn=;Zc0e!~e^6 za@Y9}Y4ZzZPuTIZ8aY+y^Z1uBw>?J)wF&dXp`$P4oJ&-d912VKwwHGND~m!w?h{Vs z>a`D^OaAFQ1tmrE{rKkFP^BL^EG?8{wN&P8YsqpMo;iLX)3NXhe}EEuOP%q*jE-zA9{?5d2ke+HJ=wp z2z-9CvhM3UVdGyMSYu8hT-I3GfZvQ?>uqgrMDZIcMVuNg$jqbN;KQX4EOXzXg zZqYgxHr*Qo^N%5*gZ9F^T!Y$xD5SKYd`qCqFG+18*Y015X<^0D2cUprPe9FJ!xJDY zw~W?x_}PceE28Cxujj6%vLt(KyjkS4(zJP&dIi$Ast$n)DqSV67wuwBX&h_uSdNr) z%+77gHJ0hynM>3=^chNy9>3rDQ^51{>8>1W$(PI1iH@O|k#GI5cnCI1wf$r{xiC-~ z{^Psb=qp9j^FO(a*Hon!FnORfEIL-_aQL@AHtb8&L9IToS0Kca1Z8_bmrrh~raD`v zl{-z7v_~Y-=1{T+{$o_r*mt%lHq^cUUx2e1&+-Nc++5}B=C_r##dWB4`q=r;InP~w zYw+m0j;VAlslzhcqN+Yz=~2#kXn-F2kNP6E%lXBE5nRr9M@!v?5jIb@kBHn1E}YI% zcEl~rmH*((4UN{N%B=n2YT3+R$}m?-{iW3B@PDkC(_8H3;^;rV1>>TvzeFD@BFc~J z>g}wX^;)Ldyn+#1P_usA=h4Zf-iHrczWYi=-1j3!Pl^-%vS!e`m7l|VwTymm92~Ze zoXVvT2nv1jIKO)4=qJ)PY7=k4#4t2KV%B?=SsW)SPX;M(-?rO{m$o!eiPrO8xvF!N zr(K<7|3-+Iv3)s6g~x-S0K8=5L=0`L+H0RjY||sc3PTVGMVL+}Men5i7enQgY)f~U z>7^DhLMB+7{mca54VS0}8M4YnoO;bG1jvu}5K6;5I%Uc=qma-9C>;>W(q~0YaPPmV zv{mpDHY_MKIZpY$ZGQF^qTt)6V8IKRukg{$#*Cm`Fu<%k_aXc~1CY~d+?0fWtoL`z zDk;#G-X#|`ZmPem=brYA3*?LSI`xeu9Q?M$~jaqtYdT~7gBH2>t z6{oz$02dJ&0pGWpc&nhkBbJLEm3G>uwpyKnKm@FcBs!0EEhzRP#^gE2nK`L`$M=k% z^UBtB-R>RkH4RrA|0*4^$5!E}_0<(oL(ROa{;14SBSsDS0BOuRnW86g)KV^T&i0q1 zSEbMKRrr}VPX8aTv*!On7l-ryzvyD$6wQ9v2wPMS{z4wk8I}K##U|4rWO1kBW7#&F z8=qOjvmYi#!~H4^ zX?iDO6R#gmc4K*mT5E6E4r$pL#bi>utf=VqEngV^&rINF=0QPeK@F@1Y7fZ4`$gR% z07eH&DgcqeiblvQ0GK84AuxKW@e*-OtdkCzN(gAJZ<#)x113lbw}f|p5^ZSAS}YUFBErohXTc|I2_#F-QC@bySux)Yq2l%mgjlj z@1Jk}nM|^?_de&$B$-UI*0rvsHs$0f6=e}ui)gyw$a@@8kgMC#hdVi__58TY^UPKu z!DKr70e$OnYh$afC{2=>N<~x-*K6b(&=T<9h;fyN%A1Kqr!knUcQREO+f#UJG-*BZ z+}vP|OEVfm=)nrV%-NN8h9$WrBb(U0cOdY9{(Y=z(|c5`Syno(!0)nKPv{p^F00r^ zs*<|6l4xm+W*tzS&7y@K+t1rl{iI1f`IA3b&CnzJ6%D6jhRmG+%?Y%*5sq)G*omcO zQhsv<^H-ou8?S<+ao=habW2^28Kt##XW?CzwsPWSu6@eBwtP`ZCwLa^S$@Cd_0=77 zrpGDd(Tt)Qp`7O1LXCa(;w}&LxnGxi-3uRX7L0j|j{d=mnP>kCFW!5U)DV-O)rHo%ypXSZ6d&YOV(*tECrlY}QLG*n|IixuFrs6PMsfYxVAf=)W@IzmN z#Fo|q8oL4>bD+e@^wu1)9damcuc|%)yRaja4_#ZBDO{h(Tu&NA>+>?5B=w zirXPhb4aV7H@M(veJZ@WSik6ZAdswU*uOY67qJ`DS0b;p+J9{Lz>=k6`!4Gb7p!>> zVu{RgM??DbT3Q39x&%cmd5n}$6@54d3 zGXC@qq8#WY1igYbIp2SFe~e(m{Vlx^bK0J(FJ0T_)q#>C0?F5%A!@M(ZKks2k1a8U zR2TR?YFE$F0xDwP_l$a%!3=<*SZqv;)EigF`uU}_PCFGFJ^o^4hLWMu@RQ9pV+ZI9 zBwl+9F0fzZ=ldU`!lk5yyfDbf^u^nsXq53+q{H!ER-~_Kd@_64ML-nm@g|-`%v^xv zcnjki^p|gGtEj)1B*)A+zNSsxC+t=4Wn5+_u@aiih({J+2>*PghJpWq4M(#4!G`Oj z>5M|>Xl)n2veqU~`wGcv#xMJMp2!Xyb0m>gALb=ykf)ZH7|d#VanO4 zM$x!;r*wXK_!QuTE+~0xwgZ((Vu!nn5VKMZskQwswC<-SK`+67{L9Sy|$-y*r=Q z06`x-{5bg^iiEq2Rmnhj!b*KSUd%l&ANnsF6Vi&a5$EV*R3=Wr8AR2(1XF4XGK9cr zT$L*`Y7rz-ZH-!Q8^ZQSr z7H>b!L(y&B&{2H$s^l<(#^6lG_MMn=J%2mui1vp#kr7lj#YT0M}y$3!L9iqxijR=Rv1c_gM1S?$Iy*i=Lfr8K zjWI>#oq!wSY%Dm|jC3Rwj1YH(BSejt4}O_32=q!R)nrVPn@cEi7$>arn32Nn*Q}n0 zY{~_BA><9s=&%)j;2ILq!ST5?jI-xt0`cit9b+8sQKd@eSlCR3Nr@5gpf0GEK9atN zFZ3do-;YQ1KytxM`8fG2$IK7CV&u3_;+S&$&%oblrhsY^+vp#QwpyQ6VF{Xpu|Te;x5vn^?KW2l!?UsP352I6YCbzeX2aX4-; z!ExAltddxqmD(F|nsruIzw{%y>sh5G2sn|Cd&2Z){@jWoorPoS;(??wYz<2m9Ke#< zOuwm0eAD~#CQ-^ATIhV#WEA+}OLo=Ha^@oz$KcQHv}5nxgf*jDqc|??>pwh_mCoBH zOB_HCtA~&JabY~B$rY}fRVk`QqSiH%G))#`pmrCZRWy~y9HbjKj7msR%v@bsVH#CI z2YO1jfXa)N$;V30XKqwvQzV+yNr6T_>Zv}{dmCC0#19a510-QnH$Qk*B38qg2^L0t zin#mesjfW5EkXEeANFwWUjR3FsaYx7*mm>?(wlh#u&?eHOG%<04#No}`9xWFU2mEuM(gfr)v|p2kx7-^RxiC1c@sd)*I75 znoX$X{j@aFkhRQo*f!sAdzG4M0%(qjPPt?yFrQ6Z6dQzbpWEbAF5E2{w-W<*L7da7 z&-PJ=wVe)IQ+cw6^2j%hlMd?+L(JH!mUYlmTI$y!;-JbUXw!)!Xxl9}Xk*RjpM|J1 z(5xaC@YkV`e@&uYgC+^wKwIfxrm7JK=l@)wv312~`|kB*C--<)qyL`z`LE@FuWxAU z6%w1zBKNpz`Ux?0II0|otHr3Rln6&yI8!P#O4*mmAdPE3>kNOVM8PSVP#1O)7_sh(3hjERlir|WA4<#TDK${T7vk4;FT!KWl>sQF16KS& zQmrh_U7<@I@y@&o=r-~W3u}z6p-cF_MndP-+hC;}vu%h4bR`2%L-B{SK|Hp{A0SyF(JiMV-0G-TC9+=Z)AY=TO;Zsl)=hzTJudI2(F7 zL(!a=N>IL=XR8l)bm-qOLT<@U;MS+fE(h|kXEoD9#f&BRE!~z^TvIRg$reUkuQDSp z9clAa708RX&1afZ(})g|ymJeEWP&EM;U<^f*$pqpF4}cM&pu)^zeLkR*7_a^TeaZ9?of%##N zCk*P%9Hl@Qf%JhefnrOFF5L2zK=Ot3*U%zS5sIOO$rQoJiKBRK~{&_cs zSgH5pM&~VB*>OOizlx7sLhpeLq5&Boj!F(jv0x2w=2-HRK#V-AQfdev6Gs+4B41>p}%NsDfYFoZFqdf2D;J zx;p_YiHF4cx;b3#_7183>3=ZEB*g*y<5{OVR#lSiAJg|}ZE9?4vbRHBW`SaSdY@=~ z&hc!JXu{(8(Xd0BLeO4v0zW<*R^%oq@8d7s1Cg>Xr4MgpDj4bu6uEnuK3nXIS%qeP zdO2E34*V`Le7$63d}Lmt!g+04JGNJ3F4XdsCsqD2v=1TbU@2*&X4)SY95eFzo!X0*WEBUzkNz7643Pf{-7?(o^XUNQ?ofd5rml6b1dNIXt0D?vqc`jEh)Xl zrnPp&t+DR&8Cqd%Ol6rUWG@g?K`~+55s3aU=XZhGXtmOS_Fy&WMSo^BzfWlS9(mm+ zH{nZ=D(p;<`-abY7l68jcBFBzoD+^sL)2jQcoQLHRct+iGUdf4;VMkqg+~M&=T!lPXR<+J|h8-iyw0 zo5(E~)gAfuOMP|*eRc#J2_>yFIZ4>elX_%6pLm(gOB%Shkz|yjjQw6&TpRqOUhr+q zJ_SbW*b_qt%+(yJzI>LtWkTPx648LW2+hFfMY(s99d+hf&n{$bfEbhz6g=Z6tWx$h zpE#rl_k~Uav-rM-cz24+F^Dq%1W|C9zkArhXfn<(NTzK`YBN9rUq_V(R;&$U!>T*J$dH zF9BQ)&Y}j$RXe(wKt~Y~jcmu>*kBt15u=34$8HHr zB^$Xs5p>Z`=jkTe<$@|!Hm zX7G%CvE`nOhsk13t2Amd#=_IxS8!*+2_m`raxAo#52Nr7vOf)dkn3E%k%y}W`(-O? zSX?63)1w#baf225r9^UuyNBG5;;FjJ?Gwd)3bw?Y6WmidOPmsbp8((_xT6dh60;xg^hTMc4qT)b@z-W99fWkWTCdwemycH2o=d~1_YYBd9BkPJQiBJh) z)_`sZ9bm6)+7~UB+L_!WaVQR|5Y)iv`pgq^+~%x)y|WR==c$b(G%rb z>1^o3!*483u`KMNxU_)c$*S*&fnTlJj+L>JJI6HK3-f?%IVEk7j^T_0Gm_u7u5Q+% z{;^FBKT7*G{Jc-jls<6kaH{uIF6|k+J+sJpO1R4(a8*#b|r2|%I3`NC~y8r z_YH4K;Ijc31@Tx{jI^a&{J**jJrADwy~1(J&jb0oUU3VMkWzq9TpqMWJ%|lH8kj6~ zm1q6FXiurmOQ*w}Ph~_yF1Z_sGD(KG17TC&qWmijv6PKwrNVP0tpMTsY$sDrU_I2} ztAD}duu`c6p0Ky1PJUy}hLTpqlx&0MbmjIUwy(m#^Qew26vb0b&7@5Xv2Hr@e}rCu ze`7CyhhA>-_nfxYWB!i3q~M->KZzSDq)J%6qBm4eLp~pd9>o&rzck?`e`;imWxJ{eu!YlyQzE8v)u`*my z_aTcCYw-MNff!(9WFW!&EWjXi2#o2l4>7Eq)5V6S7?M5xOqmu2`fOB@8o?lR zqs9B{NiwTjDebQq^nS#e+`s6kO-Ur^sT{cjy|)xJ!3U0m*U@9;+HOk_>J7gMKcOH} zkkgA8S4h~S4>G?;*OzBT5A7G8Z7_YeE-{j@PFA+YIsw2|C2*@Fwt8uj6Kc2;4`t&_ z^V}>BX9cF+_mKuMvn;~ht>@bTo~(EeZ)K67lC+rvzK_G@x3!F2pKcOH$D*%)@3*$$ z__U+nqgR-yy|STQ*WVJ(&qs4CX!&M4clu93|A%*w4rYIaW@Z=-{l_o<6Py7+(V02E zAM^2{|AN1t5~Iz(H}UT5*!BtXOm zRPf$XN|XZ83pw*eXxL%MSbK&(oNO#^bYNfk(&;eh`Wurg+MU z_CM6`PHmtNH0mq%8&?1WsROvph4x4m$)Ura?D$DrmKR?o$CFWIN{8xcQb|;LGG!e5 zGsNQl=CDnSE@x7(EBxTcA)JE_j#P6x#u8)my(}KJd!=CTmmlu20fO4`*2f!j9)w0j z>!&)Og^f{?DN0Mjt#UMs@xq|mp_`8Xo93MYs#EEY5nH?09^|BcD36mgC)Fatn&?xt z!+IDLi3YAYkW8%}IvYoR$-y|UaFZ^~#Fo>4adB`G_T4?DhMPejl&oh+3lmY>9@QjO zeAAT|g4BreA?E4r+Pyp- z;1&*#${c)QVUv~Arb7Hz`KQ8=m>8t1ITUdUcAZW*KjRlqwzZ#T_wVG(DCl)pfOopB zonl4-km`#`S<8!wCd2OAypeK5aox5!8ZP$>wZ|WP%y6g0xBOQK{y~iQzPOj6Fzn+( z^JD%&j7^X&CskK(d5)WHmjVA^nE4^%v81qmsJ7*s$j7`{-~kbPI7AYWxhyBw=P>xa zxcHEyyQv19FnfEOn@2_)yX52W=g(P2&q$tUUks}@wVh#ol8Y_Yr+Oz@6$mzKoQ6c^ zL<7{~q)-pMJsG|yba{=niz-ThqmixNcR_~e1`(G~z*MhgdoA|cRS*)Hn{K(|Mpk<$ z&Two@k_oC*w`2)0WX=!QJn~9T3B{4ZLvjN9We#8g#r;}Z-)uwJ`2}GQLdFGNS>g*u zPWDxS>H4`1nQ>em^l|&%!^1RQN}Cd82JS9lUJIB7NObGb%8h!X(c|SkgMV4#(uT`i zrl-clq5oouVH%Vl|FFbDAePv}Dz>^XSdgSwW;(*e30O=pQp@My?H9L!)fHm+JsRj( zN7r;*xVDO=hS8pOzHd#IW;I&|j-Xi;8xb>w1l~2@{qC3LIsNPiJN)Umu^3;&At*jx zgsvo*`vhfct13-^_+-X~pOj`UIy@Bn?t>ei&$>(IMdDu(wwq#7@pEo>Ly;o55%?HH zR!v}cWeL6F6(xSrUhZ~RXCe7Ac6K=o&2#&9(zX6V>e$IHq4J*8gG!G>sx3%In@h!t z84s+!CPggn+|E2-nA$_q+#*USo|UGOsj9ygvhvo>f{GJcsU#LXg@0D%xXB^N)h9rD zXqx=Xr*KY?DFNCWDF&lv_B#Pmg^P`q;(W zQP~n*vmf8a=;H+0PIHG~fSa_W3#dELKr~D#_8bOQn_lX>miH9aA|To;yj#m!Oax4v z!ORpzH1Z5-a;A>HTz_!1uz`*nl||&UMNeOxu1PN3K9!@q`0%^=E&=^= z4{YI*0Y0qZIufd9g+hT}Se6mt6G6VEzLed^0?F3r@c8f;-=V?EBztw08{Lr@h48U< z)d@~k-%rYMb`@c&)x)}FG*N1Mw-taZ!NLT7E>(30k33u?|3m$mO0uuvu$YZ97duaV z-}8*rI{n%kWM*$kmZX3&80fA%VQUNq06c}h-Prhz1~QYr29~@?1Yf*~fBRX@^#-z5 z(9wJS&6Z+J$tafLl1LXYHqVfgy9iX<5+9~* z%ir^n1=OZT~;|TeZFBwRxU8Fsn6V&Mepe6r-uAMe9P!VcP}jDCHD?H_y?HODXS+aa%O^)}Kg z5K&<2_U1mq*={5<3IDu2j-S}tD{&4YRSt>pCVR7G3D04C1wnyZ_aLY6{_h1$K{N`k z>2-XvpQHu)Lv${oDRS8E;8HpMDS9X5Zh1KOgZ&oGfaP7YWi1>Bjsh7Z1sO;Ge&b=L zq}Piw?(iThq`kYntNpml$Df^ezCQ#Q^ z$dAA>h2!N8sEh48_9gh~Y-Y|EI^e^6^bGT)36W?VvNB@BIfe*#a9-^fIr5o$x(}gL zSm_|TNWG%i00q2lBkb^=FX10U#^A+!;Eo|$USd3QjtZ#!)>8qGngI`9n7M^ zx?Sy1-VeD+eh8&g#zr8ej5u{&@*(nBw!X8-115?jWVf`Psf-M073EYF-X zIA#>Mi>|MJFL$`^S6CDsrq9M#9-;w+>((y&c2g-30`cL)`Ur9*V#Zad5uQKlx0Lhm z*$+eWqL)@WI*qY4MCZNNKf-)MOIzohZgfTUci}jP6OzEh-VT!SxW#=# zGB-8k{45nF9}F}`KA7X|VIh#uWfbod&LMdPK`o;-Ts}nKT`>?4HPJhR$>#@AV2UGZ zr(+krp+L8>Rue--t&4W34c1S#vU4`2`whvo2R@O&4%5N@4EeZffFv6cnjZQiFIyp* z_@t_$DoL&7cGHyq=ux{nPy)ICB?MR^uO|rxdACW0%Nhh9I55@iPq5b1eXO~NZoj8| z3uX~Y*UtNxe}l?zEq5NiA7k(2sZ2M$qQM~En=@pCzOL?yT0Ej>CGTw@IIjN9Ssi^=D79redR0?4X$5UdN{;h$m(PM6k!@ zsjtvR#m)|5f;Nmh%0W1#ZZ3@9MLCi-8N3^b&r%HJc$mMO@Opa9tZPj)`9bQm9qL9A zuXlfC$wA`?!Yu*uWPkyb1C-}L&9aY!KQDy$G9O-FeBpj#>F*KWC@Rx#V;M}Mh6oJuCCTnC z!wVmssRYBw0Xf1c{E9Mn_$Hg`ya_8vE)I&;ij?RZYq&s~@Nd-trrL_ovu|OpC{2(3 zlM@)gN*7P1!hu8msgn`nf_d*5$Mz4pm)mpS633%;3*48ja$;(@2y;4FblF044|>ip zv)GYAzAd6P=w71;thq>6NaIn-!NAZLZ6mZofO_kOXn&GUis*E>VfE z`Kt>rQ~IUW3C5zT4;PNmmeK(PZk(<4D^|t$y$e>wF90@PP{4d{LrfD+8Q(j)*h*12 zCf7*I1tx}v037tyMq3(MQ^yY`Nn|5b!Eq6jX5EuF!Bs&$g?=y{uK;=P^VeM?rLQ3E zx8z^i@2!KYN6s_#w|0iK9Qvn##m8jUjClE01u<0j2#H$V%EI~JK|yqzQ%qIYnb@o} zG#Ci4otEtFxVCO^3V?*8*1oc}===PptyV_DAlsEv#FM5eJ>l=nZyDdw4_MI~WY*i$ zP^a~s`uUKc@4glR<@aPkrPt;4pNh2;BD}VIhZztardaT_PSUm7yKynF#hb0Sb`te^ zkZ}AGx}v5ij^s!gYg{UvPZ_$&9@w56M<*M=n?|G9pfQ_{cYzN_+@ss{N8DTmi|v#I zR@7zGJzw5)r)H6slH~?@$(;}}E0P>kV4YK-obAiaUxL8xu_J~2sxp$ghqi!|zoBjF zv*GFE{?$fz2LaLCf`$=7Y<8Zb=O67Qtq&-O?7BX`zn`AIe0jKkIePl-e1|Wr*EI^o zBaB6x{Q&^AUBje*cQ;ws|8dX1O6zOjFi9|Q_UhAqq-uP&*1`t)w9$$bY)6Q0ZL7p} z5L;$kS-+Eoh{mnBz9QSQ`}g8a5bpq-mgU$X(f>EHjoiM|i4Ov_{u|i_)tdirW_v|= zrU#dn8$W$FAwGdyp3Z%D;}VbEwG8LL0NRTb(G9&nK!@AEzI(N8J9&60WVBt!^a(=M zB(?N#ensuk{IIaS$)G`@Nco}pn{A(nj6^}gaM$58l?cQWnSsRnm(Oa#z~fF*tDt9a zT-rxKk>j|VGFQKAqbQ8HQGt@yJ8`9~?DucT6MKrpO#G@K7_h}59cfqIp}ydmm5|wB zgwk9JA^fyUE5xD`MYZ$(2UQ0BoqGCA`2@GHH@Qg{`PXFH-e2MF7y2IQaem;Usf)JA z|3S2s>1U;PuqdYGV)IsvCIU}3FCA|1A^@n~eZgmMQmw}0A4Mu2-!F(x6T9ylh!7_4 zR>sE(LWLJ7d5w7K(|F*EI_G<*GWNN}a?9xB2WcrtbwvIjjJDC`E2Hh)x2Ic>Rfjdd z(^BW;b3sNp-&r7tk>=|1^a-RaTbz>V2SimypVGMPFTeg!nS|e3=n6e!dBJR%!ydR; z+-o%P$l(65T6?`iox`tiyFXKRlWN4Q@SqplhuKqU*I$dGRsny)B>!37G{MBhsd6xR zv_3Loeqkv}{sAY=4ZXbSlw8U@XM3vKYhi*EYd_lfbIomk6GCC<{pK8nO6uHB5%BrP zNl>8iuG$<>Yv>x`i`Ch2`^VefSy zuJ?Rs-*7%3({?MuOO1mJT^1IbZos%5wxNL)jBc_uBT9v8i_BA)YR96#7em^ zY?Ctx^R5{kIc>Up=;1VZYEg2Pyc*eWy5rQmA^VvWIe&9Gq=?IK&=O#r5Z~Q4`P;K} z`4@ZfGZrjzND!_gxdlvi5pT-C2b6|0pU&BqV~fw+WN$J=`-A1Qa3(Mds{uLisN&qu z)WRlcXtxmi=6@LPHPxYF<`0fu>u|-_pUG~|<-a(5%fUd!Zd>PVvZ+mho8fB@rtPKa zg8iDsssifLI$^64<`6uy8W*k1Gt{cb0}9n%5zv*$AUB) zl;|fah`RrgLUr}QBu&81tPJrUXYKir5xhOFh8lr{6Va^`)YTf@T5|zxCt3YR;e0(s zX}l)lToCsmchbk5tA(qZZ@N;#ZX%T8IJGx1VGvLgB35F%2jS`J@jSF4VsXD8E*0fL=A+==6%yDKX_p&c!Rv|a}}spCS+?|J?JhI+YnPRCWd8%P%YOI~UO zI_=||&TEq%@EF*CG|?zQ3dFOVl`83vQ19ue^8NcNxs=A3f4uiq0iHqM#9{Whbv1N> zFI370Dq12mBJ(1Pi&2XfP4X%tS2%-CvB}LXAXA0m*LOlpZMN)mSDV(=wjPIY&f+(=X8a?%DT;Sgh^6|Vf}DXOh*}X ztKLUMLBwBe%6!D#cdNy*?uBGWpD8p17fw43)8jsCD#4`*?Y$||`1ncM7X|3dJdvtY zWI5j1Il#?rioqZ9+e*5`#eBprqY;&@a3VjnPAfJeex<_!l6xGCtjwIK3@GoFK}p+m zsqn`7#PHUB7)$g0YGnx0d>=>AgX=b1XYIMz`9%v*l#5&M3v`x91Ep6!&z{X0V;YO- zU?la?7>D#9@wBBU|Bs9x#)`yo700Iue#I$R>i7@$@4F%5Ep;DZkXIAe-ePp8a(jzP z8k;MZ;{w?4%LNGVT?C3Tm;Y8zCxO({+y4KC;$O|vFmRpF$uiwN+SQm2mUYb^2@0+?b4W@Zqc%Z4OO?{2BqW5?I1!tbfz|_lU574D{>)1F%wd^J zYGJH~{Uaj$^At;AgLOsjwJYTxIJ^`3!sK5#yovk!f;YTDe~dij;M0>uln85xOx~pF z0wrlw$w;9|!ZNb_D;tjchYhzFDJ_?)+K)RmUqF(`2NA+H_cJ(k1%3TAMH^wBIzMOu ztPI>BFu|IIOb*=%kboLf$(`{BC&FI>YV<|JfBn-w%H?z2@7GVcrOboAm?EBoAMArRpyGqx-F9v#ovmk}_`vj(yhCKS&X z@-UroEf7`qS*A`FAsPZ+Oi=iDn5cLIu@f+Qt=gg~`Q>w%XS=xuRs@rU2F2brST$_F z3~ZdisDUxjdr+ymkq6JdStZI>Iz7mz=dfXi-=m>#d^d)QLlJSmbLivjh55@UIhsVV~ zGHm{#!&5m|6!2NFRA5he>Z8;n633}=AP>4|bM-Od3aF1qJaiP4~! zMIO*#?%(;|*LlpB+g*KW*K?rtu66lx`=Q>a$FT(F=x%JdU+dsO$&4fciR+3LrWd*}Cm}?~%WqRV8P@Q- zno6_(=%?}iTR%OtY(r+V4R-DQUa!kA;VTVy0eJ+F>%GPIh^oKV0bXj%w(Lm$h+c2* zXrPC*RUEY(iZ7&JWB;_FT)JqWZ!=iwg4D@fxfPYtkG##7BLD7XwlNZt&^r2+v<0?ii{7&+b|179Hc0(;+o;p5;a?(^zHjK8 zRHnoM8hzBCzJAH8b?Rr86rf+@cyeyLe+j5>p&P5f{`F6T8|m|&e%<@aKYax9Pisj& z8o9tf%`yx_k^9rN`mgva=jdrF?bmgEJ}nzzuY+IN{O3&=Vu0D&oHd*DvLmD5tX?nx0@AUB*d z^_*RrB_9hO!qT`zWs3 zJfuDR9oV&E{HCYR&C&2z&a&K-wrukozwgo1wsD_7%bx8oPQ*h0%MWweUw0$RJ>N!4 z^jHaDiamRWLR8v!q8e-*JKna$-13hwqiy+v>_xpEGc!16k<`|?KC@-&UZazYu(g6Y z+yNkc(Xs_;4No$Qz^rs&&!jEY{$W5_;%@-w_f2njVDcRG_HKig$hfQq?}8uaPc93G zqJxY z({m%FKp(p~e@z4vKFebgs2ea7g$yCERJ%+)hr_JLb7ib%CQ4)NwHmh$Z7? zk|sH(Am4~bI|f6a(>4}-@5BFdXV zDa##tk-(J7F!cW*Bv4h=SaBe4Gn zi{wDUqR)LGVbP+9CzXkPYJ}h?46?>-!EN9pf_1Zg<#?JfL$`n5*R35gIeyj%JMU0> zvm^pax|d9rxjkH#9-#cIG3XZEPf`?Q0x4Zm9QKZ;um==yNAS~0UQ4W%q zTdbsLeRC64Aj!q>{v$6Jq|jTv_f8HZdzF`O)Kb+?AZ@*)(rXg-@KQp%J9Qu9EDL#i zl66rzy*Ia_DIL5!`9Ybeof&HXy5&)E$8P&8IhZ{R0)yzRd==ZMaQ^`t3HtPW$Ba_h zVQz=2GTU@@Yh2lP2|%>hAL$#t?9BBJR%k4T53nuDBA(LhcI`*!hM6J5DdJ;I*oR~# zl7ht3^jy&hu2{aSt4X@A)1TA7xPDTVYvD}CE-{&^MFGKZxiNqW6dS-=M<}5%G$1y8 zeHrj?{s52?_7n1+KDw$`?YFBHsJ`$~x>~Vlw*&M?ea&VwfT$Sbwj!|(AxjZ7&4=0H zlMYQv?4)&9V<%CoarL3baW&`kPkUQx1y?!WA(o9p%+km#r;srNN)6szyKwd3_me^8 z>L_1(3K0}MO}e?*_R&ww)uvG0kc_1lL!r0PDl(?IpP|oZB}C*zaATW!@@3YwLY^lw zrO2S#RBS^21WHWQ=$-cYC`s(UoHHxcOfg19phvm-?+>fsCH9tcwN!d}`an(A+ta%^ z*sw7E`u1k(u*v~2$=AbQO4h(X0^#l@{+lPuOJytE635$-ikoV+N9eEW@|%Cu_V;6d_~J#g ze&78r**Eh|TsmxP6wcQ>F3{caWh8Ok(|`8ef%aX$uAYGgHKV(4Gae&}ZzG8@FJ0`c zU&MTub_ulZ{>*?TXP>Uce3Jo9#;xC}qX6%-%U_r64?ldJ`|le!$s5++f+YzXF9u4L zYxCB#s8Od0krF8h9B@v==(d|RrBD?Ixg~2+_wj<=)e&RLHQHoFKTx~6PgxFkT|xfx zn^%81*&l!T74GNCK`x9fWIFOV zFg>j|<-Ln<$-47VA5E}~U}2$hX7qG!!tbA3Ck_J6d9zf7mdoQ@bUAJo+mBLs1cdL* zmqr&Q4q6e?$P>92qPEGKE~^)qR1`xD@O^`w-8V>;D2feVc()VYGjZ4b9u^S+pi`K#SVM@N~TH+$YjMuwqk`Q8dpQlSLDcxOslHJS2nW78l z_-ty?oE&m%1|sI6zF=#KJ`Kyh67x%vL3{@J+;-5XQyEzEt<<;@dC*DWh`%cM<(l7q zo#>EfUwr0X!V#a=?MSAkz|sNuW-C%HX!~M@%7*Ri7lNA+CQ0NbGG%>*va2zu#O;wF ziJm?r>?<**nG)H5Foge=FjJ;)Zr-2h15H>00|SEQ)uamx%*&*lgdBC?C^M?Alb;;E zt+aX8Q|BCPo=H@V=cc$%n-Zg=S=Q#`is7mn!1D+_C%jv*VIYy_Hse>C!!L?+0xv}m zy8?p^qLQ89oXbIt7%7b$LqCI~ie~k>Vd0G;*^IQOqe=cq9BnAg);<@WyiVaEQiYYc zCjAp5w7mk!+NZ)784e{>e1U)hB1 zl>B1za3S}JpJ1E=5cSk=-=CE;5yxhy+6_)?BKHoi8tNy5|^2>WEu1nfjk}NPi+a1pmY8Hj9 zwd(pjv7c*Z!|Im5JlSRz35imG_&CD}^<=O})}#t*K9+X8ifeAOu9%%nhAKEp2(j_S zPY-=8KfHH*8u~?scO-bfA-dyN*!1qAT}Wc3ls#Fssu<-kbdn+Fs&IQ6G|E-hWN_s5 z(YabEwfNTB1WJbc|B4IPa$#lq<^IP#ehqSu-`?m;!ax!DVljcKI{@0ui@`In#8WFj zGB7I>=oU1BwOBKm>)nSvKjpEOzV&1bR@O&4h3P*#Tb}fHn^FIWEvR#mTG85;?5JYaa^Z_5Mz)Fc2Ewm-* zKW7{5k6}2b4^Y|N=WeWIhfCool>|mm61uc+C+tv`sG}epfA_8YYdzn6wVo%U{$)KE z4U@4?zV$S37FpcxZ8^al^4DK>)0>kkhpbr#V9+KjCRm`U@o?jmdfz6=kV&$y zo0uR@N^g$gme8wmsnfHXungA4uVzpzzrJ_i1+v(67;;0#&!)q7lmCK{kQt82pwI`j z1xm7glCQ^EVeM>?ksf{?5fOlW8uv{#LZ>gXB)?S7>In?%)#AW1f?HzjRf8=}?xPT` zsHAhYIf-ADqdCkwN4Jg5Gk~rvg)Rg7qW7J9x^^DO4TTQoD7fJ9YuiykO>l{oKs6PD z@sSrCp(~uCJe?;%B{}H`U3@*Hi-YNbPz1v8sv_Fk!5w1N~qH;@p9oN_~-Zd5( z#J?{MW79^U;Mm)aSbYkmua+hoAUzTBR>AV^`v#M75f1Pstf4sj=*n=)YM6%_o~#_l zzT5X!a%_cr9@2d^y(b>#L`==~YW@+upZp_we;aI(^Wj_3Fbl*H<5S*&u0cMM0v$aR zpZCZCQL+qbjwitK7>eQhRBNHm3*~S(QK}0Pz1M+6?;%vLqIa}c(fdQbJvJc#UA$ko zW8bW8V^_);c>C1yAy<-c52dy~*5_h??57Apdd4sXrnC)_Y*!`zr=d^lsu6)R1{@kY za5(F^vKSa!mCChxYgW9J+6<8|Z;ze{bA<#9pi}B#c#!l@CM;w(2E2lxg~LJ`lu!0$ zYYNyiQYb=YTDX0^_|eawu5fXH;md9Y<$@8(vS+KOxb6cm1x}=hV^AmRGc!tVKlZ zoePXHF&0knb7k>Z$61QnfN=c{xD!lsxnW@2y#r-ivA>$R0jEh=-6FR=hqf_4#2Xis zX==PU;i&*naYe!usJH@{cSwUt*$`M)NQs#oW8pTeK7v0-eJLQX_X~=`1|Zc z65{*WA-N7!+D77g?D4Oo#seiC+x4(F-hO}?J5DFG#ND|U(Hum$Zy02i4C**BxbbPr zP=r6VWiKljD-m-I@#kK|4czHGTamJ{q3>h~G~H$(3Nb7NnuuUS)qgd$+yTD9-pbai zdBposZ4(Ju3`TORi`H-H7ICfzE`7XiDR)-BhOT_hRO78Yj*K3^y^0aC*sFcp6FU_g zp9VKf{69_af{52HbM}eWMpxH$m8ko0A`wkT97JqrvTFEm^hMdcEZ}>rVbWbw9sq_5 z$`<%it&=U`2>N8NoUp>n<=X^0J|MD#fGswlg7L6jrAy0~&)t#O11b zGq~WKvJpp>42jJ3y7VAyH*QeGDhf$T+qlIbd!9UFxgV1GE7+!msF#@?h8TJ)b(RxfleBcS8a* zU1H#*a9Dy_y5E>+4YW;qLY_^SzWb=yYQCo}hvy=1&bATEzkw5cV}`#Q5N5(O#^GZ5V!}Vu2P4EUoSA5f3T5UP6ykFl zEJ^)afN&Vx<+qov3@Y`v`71xJihb#5mfqZ^c;Q>JN#?vn)th6tGd_x~xVA3zhtQxM zk`CyTX(W4BWUh!IntA}qw0k5l7E8^3oVb4+@*TG&TVOo$+c9wg+QAxd>}#*?*x5HO zN_70s@alR;p#n3{8X0q^L~zMetxs6!nqw4H+L7b2gh5~|;kJI+JA)qFZMW}IDyO6t zn6Fia9LwVldm1+u*u2))ZQ^avC?vwC*>D-MISlKk(q59IhN6JL?+MgJT)oUo+HJA> z6s&F;4|+KGV|pI41wGE~89C1{o<&IUQwL85&Z2=)XC;eqJgc~CY%oGl4$AM5lv37w zcJV&w@G~gmk`o=5XF4%d5?|PZN;K4_B2YYTG7dIdRqll_`@N3YX{pVhlBT$WoE}bF?9gKY)j&H?^=7uO>SAi8P!{dQ- z2YIt~6+M&zmM@K-Er7sE%bjG)E3{9LZK7d+;F;cgGnLir%FV8-)79m=G!Fpg2#o5^mqyFd? z4qNx1Gk1><*o^0L(2ybma^e*#$%oTa?OW= zT=R1AHn%^3lz`_S{_s_oc+GGB4_WuXoLRJJjXE|vwr$&1cWm3X-q^Nn+eXK>Z6_V; zX76*px?kN}wf@3dRcp>Mo?#bK>lIgP+yfzU5TXCKe_n4=_yvZj8XbGF#F#*1**rz7 ziNcCOm^9ONMxndC3sWmnDq8bHpQgw2BOdwHZkKPIOt~||NA2q|jY=3nLp-=vw5FIv zMMIe)(~;ezsDO=bO0FnOXaDEKH>wh$1{M)^2@$Xf(m=gZboc=N6UCI54CjROCbIaw zTQ-rgxzNGdN-%}KJ5?HR7@cnm0wg(6Kd;P^$%$iJ-VIut<@pEocR{cnv#eZU>DzDpeBFd)+6j`F~=KLUjM z`XYmSNZ@1fLvlqf#PfA-Zzh!FXRTEBx|nm(yq%PTuyTZlMmzN9(nyX++cWk@u_tL^ zrwlZx`CrBUgJk7+U>?5Au2%k>&&cn;jC~?_VX!W3_u~J{*bm9S=;^<-)3LuuQD3e1 zc)?!n)2-7rz@~Cfgf6aq-g_+1W~bJGf}jKLFrUh`1&aBt&1TgamT8hdPZ$wZckbN# zJy%SWL-liu4suqd{xaYqU8^1D5fCkQGu4#{AXF)B_Fu=~u}Bt!Pkl(waG+@Y;IT~N z?CNim3Vq*luv~mpXZL;oX^`wNXOKX#pBlV3_O$rGYtA={TWBN%!_>vq~^#(?xaHhSFQJ33~RPn zrz(7(gd-%&%;oI#AAv6YQH}Cdpf4;YenzPwwkQiDqHoNnrkDoLEw?eK;Hu53g!*sM zU2t{Q;~*%Zh74Bu3?Em}S*ET9+z&0(ElI0`kiU3s$iq!yM@yyOYXD`sa46a3x_&eG zvKjOrpsPX1^G}!*>BLtQr~oY0FB5s-v^`o_*p+1(?nsUJ$8OBs(~W9ul;!12W|CN) zEZv;1gSYoafObv~U#yKOKhE<=K;&~SVVgtZjD~mrX3!W zow`tJZrQ2ViUxEIF(C5F_JV~oRr>U<-$8;4dX%9vg@?%!1+w*+-|a@r!!9xa*J01~ zmUDJp6I568xGm-Ik!EH0p=nYBa-X6;e!b^Cx~Mv}(TXzKMJNHS<=JzeBv?;m=L=IY zo+tMHVUr@rp^x=ce}Ffw1hJPui_d=^|rxR#%lsnNh4KW$OkAZa=L!n=CCtO%F2xR}yj+T>M7 zlAK{tj+5z2rkZ_bQ%GNzmPIX2*q`n8@wCD=L*pT=YE?r2JCIp7t) zSH}K+_~Rlfqkz$fe1hIqBWYBOhXCXXwkh-$z+3HB zB0FfmZ-MiadAL{L5oSJ(aHA%**m%io*M0P3CN}1w3>BQGn-#23ppE8W8D4a@YH1MW z=`jgqvW}|fSzy7t*fCaZGPy>7`mE~^)Q?&pokdD^DVv;KF)9RE-ZX$|u#;~^eKKB= zRw00$&W$OxY0javYUu_rym=}FaQ52*k>}4ra$IPz;u$VGxx$Ts46JL%Ev$ zhq;%eao*kATw8;yd2jt`pqQy4`<5;SuCJr^aV^;rD34JwO8j(CLPkRxJi|dRucpST zpV?M2fK7m^s9q-2fLS{X+PeRTx#vh5Wg2xEA8k6e7B|Huwk8q>xCAlUp@Qg@DOQD? zsaKE5(G=*G{(PEo;^%;RaTPmXqb7+Umd}6n`aI_LQY;j=zX_o)D=rMUh{KQ{n^O3J zKjyaneyi2n4M^2K7}5hc@I;dv?P5@Hb@D*BxM`1i0AS6^v4G~t)8Hu#7}zfH0*Dv! z!LyyRhXRfN(?9|ECy(?#$^TSPDy6EZTtj{;C@$Ns^_pKWp#M?u<^H4KBgSDCzX0SS z4W%15a9*>sD&6+GYD~7WWrU`>8_b93`W{;)X&h|>S+&1p856f-woY}haJ#OTCyp9p zyOz$t4NSe6q^N#IA<*!{8FW9N5dT|TA(_SN^i@+4oc6aWHsj#dc zDJ*dFr7jS=%*^cd_x_K9ZynU`udBr$l=(FK(_HzO{)Fyv`%iNvWb2N$zR2T5&Wy;( zWui2A(pD-)?;I$R$58zr1t052!N1*Sv%=EgnL-lGdL^9GKqi1+)u7me|F%JW2CIgKu5Ch}lRgjQPR{gitdd*AqSILV!uJ(VcE6p(Tm}WyN zKNqzd{MtVZK45n)Lg?OxC#c=c4lHS`*KMD8@j&C!Gkf!Uf>fyH>dJv&R8)8Qaz z#{)rd*kSr~GKb3msL~!(hFaVg23Q?}uQBOIFUBs^q>MagemW~3G2N};ydZ;{!;`6* zsYrhT^rubwuWw*ocCesjmfRGY~hezDh9HCMoGClT=^v;3;;JlN=F`p889W%W$YV7I!2X}k%EYO2eLDrM}KAbXMHtbNmq-!b^gZa9d|7Qr=${M^Lpcd75qxT4} z1F6tCdVzdF9EJSaoleYR6rGvir?i6QCuJfV|IPXK^^b4J7+(vOjwe-IXn%6tJ@7ck zaVI=8aZS1naSL}UZ9<$w-Rj;*l{Lif#y>+5PE?obYj{1>(2R4D7ho)uv34Iv<6DaES7%@w3hJZR=mYe%U;6NC7&lD!K8E-bGXYT#T~X%U*9ti z5fIl$AEkRI=&fJbt};q_*m}ektcU6H(t7@#!cHa%W-@XYREXSZ8iGsIAJ8iQ2Wh+~ zn`=G3+Oo}W1rYmTNggS@Eh0?zgpuaiLV+E#1e4>?`Y~7+zs4>ei-mCv29)wPoY_X8 ztDQakc^hc>$Zi$>X)*P)vwIbf@Kjn^DOq{mL~mk416Is2OZS)a@UxCt_3fR7mXq&g zxDgzUKE|f+G?jWmY_bWX$rRmxOZ%mwV9jsMv+tjOEdW8AW=UD4KWbVU*4%JZytWy+ z^OP>~{cZ&S;03p{qfgFx*OV!|zN$89Dp1n3CsE>Ush%2sAlR@}dEn8ldsR&p-fY1R z@jlAnQNyBp8^9uwpk%45=Jy0Xh&2=y*+4Ya78U9ZWs+OctG3t|MSzu}KQ0QK++1Ws z=}?Do1$ar$2LYQb_4v%AI;#3FfiTf;eNKFm!-%%Gkp{vw9T zwZ0%lVwp154iv=xPB-eSt57&DnJvmHR_}tV02r6(O)nUMLn6|c;8A73+?toD&|QMn zMM6|Zf>)GRsMetCA^vvxw_xXsPw@SEdOD(Z@cr>_7vr1Jr|0YQadMEmCE)Ai?d|;U zKySy_$;su*&G+LW_9rlVrzb%0IXeA~zczYzm-}rrkq1EnG{h3==K3r-RgpnOX#FoP zAE15Snkrvx3=t-RDRIrbL}gAYPY^%(iic8@wXGr4YUT)e46SEaH#dI*hEx#6D>2fBsa(NEP_X;q?9~M5ikQ+V1Wij4;+h$9dyVBPZQ6!Eo69|u zyY9S`!GFagjV3P0V8{_17jtX3~l3OzRE7 z7HHAWiq%;NdDdPq-z)9nw=2=93*8?vf}>uIZZ;(MKqABG$HON?{a}4VAu)(wHQenc z$=nLwG2)>+-+PGq{`Rom_g^3XrZyg=UhC3O`&lb9>VHj}>0$r=Q0URLSlIf0(gPd^ zb=VGX;%Wv%w#PlkZI2Wq+q7h|2*tG-yH(-0fAz4`>WOvXy$!H;r$C5vMS*U*-n1R_70KB?*nBo*c|O^OLfRUO#sKi_l(YgYL?CT1?UUZ44*j;qPw1Dhma*i1_m_Si zVx{I0kZ>wj7Vd!4xma-qn-t(`hvyP=3GRbHuufanc!);^=E!3{E2^@JZ^G|XV$D7O zdM^cUH<|F#IJriECNXNk`Zr}tc@+Y!V7a-B$YC{O$!s!h({q1t6qMDmKL+5_jN{k= z?|ZO+&aaxwr=2j`;w-x!mfybYX9bB82)kBwqLyYBt95BP!FxX2r}Ec+xgWE?PRILyF^=4mLX)j8P6W=4G(}$v*(IFHJO2r zJV(xB%Qc^97TnL%i&R@JB(AbfkY*^N01D;ckHrI=llUp#5ja?gKMaY=2t#P%Xpy`e zbhjN#PA*DOXUz@+ z6Yv)xRcuA5+k#9@PRZzGjuuxm_bD%8M+Vk>4_nFp{5Z#GuN|nb+7L9Ef&7vtH$1mg zst( zuFRobp`s~D+n6|zKGqK)*xOMN9(fWnzS!8oky0OC6}h~yR`(bGazSY`p|W@;g)Sd zwzSgBWQf-|x9VF3NgGbp6l;=OkLOwe8KHZ@})&yP(Z0d}^ z3MZ5tQ#629suxNdU_GaaUPN6+MAparD86ef{Y?e~#sE!e70dB?IbU|PH-@C2U|7?X z72jBiD2QtJLou3cwC`YvOgLA1*K>VkYMWz(98GS^@KP>6*m-`&q-s~<(_Il(W&|R0 zQ34FYb_IwbBTc8Nxy>xSXOk&W`xl?lew%S3waIE5t5=ah-)KKD^#6Ux2w)k(vkqsh zZ}GxTtMvp&C^TKFQzmHw&KSOv!}3KG&zYB$*g`Am?wZj$0m~O_UPaKbd%bhJj6tJo zSD!PIq1Z6EJYZd~8u64#00(q#9Tznl_5hfZuBE&d$NYarRqu}Yjg8{6;rN>EeTZ-k z88Q*VXw1-1+G$?rA9S2d$2>^2UyW}iq1nYge&2sxFv_oU4} z&WDicWXhf6pZ2^{fCJN@W0=Xy1<*-)W?KY^*Z+>H&kLF^v`6gOvaP{SfoNwGX#?0e z)Z#5T#srqxR((=HM_CIdut!!#vKfn9elFC57{ivQ)iK*&`4V=}OI!6v)tnhVu&(_? zO0b>5Vn>pj*|%n0P{1O^TtFz6#JK_@0ms&^bH%MFuH@_<{M2~-+*thVXujse-b3c0 zN4=nb?f;yVBM+0dkZNjDH5L6bp8+rrr17>)t7B8t8(P6$L*0t}BS8(aFu9OTQ7Hs9 zt8sdI%AS-c&P-9B<-&RYJtCwiG^B9Bmq_pY9NYv5FS=T4MB8s!ifKV^?Ie6F!?~Ta zX3$2~aNN?&cLBt!XRcPy78>!gES^+-P-lph+G}oCwmFRM&@(0Lo_gO%& zOE1T=hyWoxF&RykSLfbQ#k|Bq5~p ziVj4EaQQPDOemew@-!e(Elx?RP>@lsU@fSe5Yc`}mbs=ZwA+O#hK^&}n5zW=-weF{A^%!{DW+D99Oi)#J5@kq!G3`ahwD*3NH z(cqXpX-(fS`vtP{D3EP%d?2QM;boKdY;9#jFqMy%OLKoZS?~Mc&Cfrr26D(ZX2+%A z{3ZVn{xhf~?pQ;Olfw*8AMc7e7*NN-al=klaQBkDZ`jkgdVXP>n8I!%_Px~PLPt9| z#KWns&0|3cfxL?-#^}^2cELC3vXMjCTP3|ve1N+JEW+e8l?7=j6HAAkAaE}JkA_D7 z{CcD8rFDr-t2s|0Ivy~w`&fSlz+?l*KT_NVhKp{`G|gCgZrVntO2YNp!o$Bb&-^~s z9`Na3c?enN0_$si|5sI*Zv9J9FvNjPZKk~4rNb`&4q@P4%@Brg?{pX*ovp(eN4oD< zlx&^R7etMv*0#F;T&3SkF^94dg!ZTJ+olF@r&d9LLX)e>i9*F=n^+Ir0o z{W>~h0^~f8tLK21ij8I!FBpa(D8VbIaXtK6>n(n7SO~^`i0J1av3RhAA>gYw{Lu~dFVyfp@-J+|` z{Q1%Eus6d%6;n}zG$yx#N^dpWz_5G%6qt|JShG+0;spF{y11k^=MY@d6BAL$h{!@$ z1T)}t;A}jFJ|`wuPxgmhuwD*e1;P5a&O0ElS7?3GP~=?+gXSS6zG+KS$IjEv+##0` zOzSwyGy?vgaMk>6TE-t78v{jVjg&3Tp0vuYWQrzm^+8-GqyP$2N;q^PTt0P$EL{UK zCoYo7Q2-O)y%erVt)SLbLYrEKD?+={J5ziZz$7J4!5ZGL7d$H*O0+jA4&(CL@X#e4 za)~W~oAhT?MYSTl&S5}7Q0T7aSlF})D61#!h%}HltI`LIYkd(8jh}{e3h#r=Nxn(B zR$bc=H!O_KueyWtyTTM0N}?16+I@-%zW3^F5^xnJ(qh&bZ97SnJ-Hk7rpa(D=^%#C z;{@wAyJHxjBqULkim+ye+q$FGM84$+T%YiT)Lwnp$Eu=o+m`*AgUzPGWGXD6yrpum7Ueh74Nygg#rnJhyZN1Lce{^z_`;j|ptrp2yt@A-o47rtw zfZiqiB-rfJed8|NB21Cgp75&XBcxobAd>Lxhxa%&i~|^uh1Js=5#<2*+fbIA@KPvg zv4&bWlCJWlusP53oS_%m`@9-#AjEok0zT$TjOx~bi)7pBaGtL}^FfC?2v(jC?%X$9 zA*P@B&MzZc%aWPh)-5_YLLOSSXfRfMFjPdXYg^s@I`7|i#Iw45zaJpnS9I_P;iulC zVyLucd2EBquyT+YrFiRLulb|78QA^th!j^xq^a|Mhrx6v#N8~2iHK~FW0SpE0w7!v zx*mZIx@t1%(iIo-bI0dkgdUfP+v`waAoz%&GpC|7X}}GZ0+Opr#N03|#?XT*YNN{Z za115pN{Y0Q&BNtBAouuAx)mJV*C6zhA#aAfs2;Uy1R)v}W=`#RSM~dEcZOA!H!ln# z*t|S9=XCJl2KV74o^*w9Of;nE0spYg+vCw2@MSR{yyay*j#j0xKjrmax{76TvCQV4 zR9R*IX{_Jm1$|eXujvV0N*~iOL~Bx3(EppXJisOviQb)dByZUlMu|lbbn(VKHT&D? z&&)uU)vq&uEC!TjBIiLz7Vu>(i4GSf9N|Dm=I-K^`aFPEt=$=M183#{4mil$gv+ls zQkNMBvb5~v&>~vZZ%N3vnnrjS9LBkiz!k!x)K_2`hmAF9U>2b5G0O-`i*c*m@QfBF z{+SCE%4CfYLaPLBuN0`ccH#+P(r)RcEgK2nW=s97bE3z=?t$BKONAY4HO@FzR+{kH zc+1+z{JLcS{&vQXsuFNtdIH-B z5;i}YX(=d=Zf+s9!!0a-5Y{m_U(7olCFd5)Wc$g)x|-8CzTNjgcBhN=+vTU#5VHj? zIf~sx4pcNNa^9i~ghE;kJ>3&s4?Zgs-RxyJUK#fhHS} z`yqj-4u0KsRZdWYGY5GAp{VW@IHxS4Su(&3!0?B5sP9qxL43{BJ8#bb)+<`fLn1X{ zbN5d69I7lhCJCRpW18G+pAHb>CE{w}7t6Ij)tw&fE}>Ac-c!13N1R$sZM!MKs-s<| zFkdtNSeeE&>Vvb+0BUDy7&NJYZrl~(b_a8=uZct#Klp23@lb~_8vIe&TIH{YCl364Uu=!g|_rF2}ia*DIY-A0mHijqB5JM8GS3?u0sDy^+`jGD- zRG!%<*}7~_tKr!0A~EQ!F&khibC_jNZW*_l4&g&yPv%nzp6;CJKb)#QuQiKaLlHVL z7sGY&Up&2V0{E&*e^-Eh2~o-lOUeBwH&c%}Zr0T5Xh}0&GJfe(G66~YCNX;HGaZZ; z{?$Hq37uo*IuaquK~4yhR_|T|MnGr>^C`--{d=vrJG;Z&D*ZA7z`$ha|2CE`p0l?J z(UxmhCDE0Q^OBLfvzeir_;-DipHkKB1VT0BguPV~aAMoqvQcyMYvWCZ5MfP^@VB3+ zun@;}&;)O*JucKG3r#=Lzlxt|3<#Ot0}lbW4UI5?tMnbGp(RNiQm3)tzv+@NypO4) z&P=5CpbkxV1;XcrUTkWhF%cL2<7*!G9WvvL^IWwH+M%@eN zRw6-q03KX{FL#SPWzm3DS;o)K^DUyize2fzuUl^4H6z%vt!5Ro(!3{hjP5PZ+KXQy zBgGYFQ(#Y_^u9)Ny zWmQ755?q}8Mf3QN(_QqSThmqn41T7JV8>2weD)4LE-=eugNEyky5KTHI)JpM5ojjG>ZPJL9RG!8N=e3w3vA8P7 zqGP6A;q0>*IOl4-POvJ|>g5t1`J$hX@Nm{thV_)?r#uN2Y=Awt5@n>XvoAm!Wv+t) zcpV)_VjN1vrp}3*`pX4+jrPq9K!u7exJd=C{8+PLNar^ah|oEmzqKM8LdU!A#o%!E zfT`axGih9rW+a3Hp7}6&o&|cc2S%g4XqppBfiok!5U!}!67Rkt zt+%$g(*JO8RDh5e&|=F%LH~@$xa%_2rS?>1k$fx} zb{TH)QOElUV*0FKfva}}|1!Dtkym-lk;72j7H9Qt%AfYJcSg;vMDZg3Yg#b^2#N&Z z?CzW=WI!Wp8x4<}oB@0KYxuEh<>*t9I;W2yX0zd4Ci$Q-8U~^i6I;s1YWM5?+yL9}ipumE)Uw~86u~?aVSj5K zb7c5N-K>fUBiSRSEw%z$8dUQG5T5{GJ%HMPw@MIJ0AG-h>dk4`-62W>v}B`DU4QjiJ3C#GS>UHT_=KR_>LED4y(Cp-Cm7lL+SDH`}5dQg3~?5W20gab|VyH4%7}0 z9=0QsD2h87k%%Z)p~*H5PzdB;e?jI%B#DC@l$t;X9XvN+!v}!K=C-OMpc>yz0jVO} z9reiS=#}rVWtPLP216~_%Xm%8~Hv=p&M%j@cmR%d%WCS z-?jv{b8>vV96Y`j{;U8xd$@j%n*Nx{>9FL_)MbpaEeL!XpJ{#q{w>I<-kq1`)?^if z+QK%{@~L~OQ*VR@1s?ioL9v{JWl9WW3B&v*s9g1p6j82ACZ*4ov!=KN8Hnb?Pki8N zE`BMI-C;o|W-TT!Y8AV;4seBRTz=EH`S*Zl_DmQ?#gEYhRW<4N6?=X9^hwtp5)581 z9o0PPnr&qj(~RH^pi(i#rKM2Aup7OwNd%Lc;a;fWut{0*iO!qV1G9vmG*t^aWDI@^ zMBx7E`bm8)&4QSu(4^NojRy*J#D1~9781NCMs80!%B@*vIHv!5DArgK<9%bEuSMOXfe;t#; zuk10?Gw1qpWCe?Y#}hQBC`+<8m=l@M7-oCU3=N|)NLO(WRI5ti`jO+RzcZJZ!v^Iw zRq06e>q*_bwd$qYa)7E()BED%L<2N>kvG>>F#af_9!Vdkw#I~IVBFBcO+({0nRA{!d1A<2YzgoOx`igmo8%=ycyn85_4cq>?QE46lW zfbT;*ONQfbdZkIf{fHsrg}C}pO0A`d26Y{O3$U>i8eH9ew-rba))viP0oDub-b}{C zkqy4mWWK$jA|#^DRtqEk}t>pJa)wJrO3h7fS+%DZts-N=9H-3gf+>Iv-HofZPsZ z4w!gC;k-z_{~(#j_{xel_xVnF6h$klz0_NqUy%zUV+QH|vuQUY4dmYB6K=QmWC{GD z%?S?a*-E&YL%N0L`V~)8{Z(4Yul5^HVz_22$H=x~3o8>CgC*+J#SL`halh9I1p$b< z9P2H=fv8jwC?lG!z+fz9+f)aPls#rK0wBXhd?J306Mw@Bv$1n36b2HPJBhfn$5|W;1=a%)293s~qu%x_zt46;KBg zWhq8lD6DzA6$grIP*%g2)!jXoelV4T98zw#_2%PEZ#;E>u>0#Dt%dN{J`L=@r5+}Z z)(1L4+dRC+BaD<9Oo%NVntW8g1665NrrknSLx*VqwBEB_?DcoK8= zq?%a1?MFq6Wi1CgfqVxA1=MoUCqQ@N!G@T)g>!I*cX&dz;NHvX#=s7uwudh|=3ckJ zqz*;S@)u4QN0F)1E}lEOo3rgRloSE7L%s%dVC?NAU@Lmu6 zFQ>uHmci0vOAmYBm!S&FE0(CN zfgZy}4ryz-o+S7YvqWw;BJo2-%ZJdVVK}Dlcv&53_}ojEWQSjW>i?=%wIqK<1DWXL zhHR`iZ;}$|LJ?baib8LBI4G`73tM&2Dc$C=T6)5@>Qmrt{07DY?*#@Tr36aolqO!R z3Y!aS4LPpiC#yV(5(K=qxLZo;FS?qZ9ikDG;PMBGq-;>IJL2Tlb6v#uIxqfud^k0~ zzCEdrd>l0ap#l+YrKHAGB<0FdVcmi=VCvVF2cx7iXZoJdn*HV|r>tEH%HqE9ddYTy z0iP0e)vC_?8D5$!!5dr4sA6vr)Hz0f5>E`&YT*r&S{|Y>{+VsZ*w1rmb;FFs@CNcZ z1M1;%uX0ZnoP!p)igT2zbeFbmy{zqid|0r!uqkz+(6Ox4ZURXj_?HMWQKoUFx{X!6 zV&2mInO9>@4@9uLc>K~IBSc|Znq{jZ>9L_~J3^#S65`u7YJ6s?+W*r3WGLlm{Tc0^ zz-y5A+)yYYz6$Ui1iy0yFM~T)*>(+Yp%=09@@-z#R7dn`s3M0R+QGmGPGCMuY@Lz%F{@U3$v$1BZ&#^w9Mv2`6;VRz zZJ@tMHn$8jIp}G29Fl!XPxNoUT0@YNlSiqfJTL@><_wU(1>S|E#(aaV)p8h~K=Pd0 z@&okn2`B-%s^b$C@rT#m3r0d+_s|++%vphSo)@1?H^H+i?T_#Rr57=T7!Q)bE z$x|Of13_2=WPsiYQC75PI5awae{H5-zG|J??4Hm=(v&fL6jcg zHuZ2?Rh7)SY&tq2wLsU__b4&`QYkv$Gd#B3oArnzS@CVv6Yv$rGY16Y~Vvk|7NUir@@2YgruKqrWFmx ze(i~JTpT2*-b9d(N3MnJt}n|)BsWbW`=Kt}I;l!9uZ?f+$5GrrU0h z=2DGib@4J2iEkxAsDgyi^qC9fs{t6|@XYVO`k~us%ofqy_@^FejHiE_vCy~a{@v9m z)*DQ<;saZ`6W&hr%8UkSGF+G+G{{Z^h~lL9g}-}EOZ$I))tAm(J`R~WilPVMCE69o zJ*rXa8)={bdiglDCkPq~#z23XUFb3T7eff-YbdGe{J*E*ZRzAp|r6^@Mr z8*x*dJ|kPzg7=W)`(V1W>yiqNfn6%BV4gYXhd3U!44GN0A2L{%gyAsqRfgu)*O$xl z+y{rv!nC{d#4dY)m>ACu7~qtvs$8gAWuxZ{7E|W_sBV`q< z1(!`a$o2s%lCz0WbqlS%pYZ7goRcmI7wdYTTb2}PLw z=(S^5rd-+nX)0FUnTJ^aiuue*|txMENrkf zVu?gz+De3#2IkPc8X#^{1fbJO=Kib7POgKp{WoM#Tt|~qeJ>UNk&pbvY~7ss#O*jj zrxDt=;Wb~!r9a}wzqMmVKYLe0w)}ZZ@)dx7)$rm7oX!SS-;&OQf$@X>1~FvLMRpxI zH_=jozow8q3dMxd6NgCRO>13>^yJ~Li&y~0^f8{#e&FRr2k7N=#oVd${splI|MtKT zX{y{aYzdcmX+F)G#$*tUI>RxAoDN`!1vMK^rO?aj;%Byc9In@B?wh(5+cmwlTSt~a z<%h1j*{ zs(~O0=`YN!YO+9CFbRWWF%gd!73m4}+@2S~B~&37`%7K@J1K=NyD_ncI>@4&bH}K; z=l3N0zS%mrF9JiUK+}#m>nt1+uD(kY6q4Y3WSU8MG~lB2`MfJn`r(q{Cp=r*eAxC%WyMa!O~ z;GZG}`t`rii^p<%w7i*oDc}R*{6Hf>EaTT7>B zZwO{;1JN@o9amrHKFFq>`y(0`Mn$;>Y(U+5cDyTYK=%YU7)(nL>2bV9_e)k`TX_#L zMes7Bh~8Ax@IwP*DU4<(j)-_8@zlTDIyc2SYT8gwU~FwGeEjSJ84kn3u$`Hs zVzmFF8dK-WX-YC*SkRd=Z4mw`>>Y_3J9sg3e~nmb z8$bsVKsU7$PE0Li3+2-Or1R#rrOweWyPrL_p3C`9jK0bpge-%kafts&A!d-x)$n{c z(}%9biomcM>|1ScbQs5tNx4c@+k%{RjK>jH!r=I{spvZ;AnW^RogGyyCl?qcx>j@# zol)8%N^&~y+t$*wXeb-DtY%N8e9`;&Hb7oZfm3XnTFYGpiMBLO^ZM2~G(6cCNUFh@ z@pc=;opB}_q$po6iBQfeoY^>nH`Sk&A3*cqoPW*ezNS;{CkqJ4O=NCR5vDKJCn=Np z16SAt2*!R)9MpluHFY?MTTvsw)OAkmhLg_%-rW2kwCqv6PD6K;rtMrEp%v)r1z@s{ zA>J@-;!f!uRb}e}szrE~`Tj77Ap=WY(ij$m>Jx~kx;RZ}y22$PXo zXxX)gjgMb36I0S$7%+fhu=RZ(>%})vvDUU^U~WK;F3)m{{^bTCM@QP){B=q_(c3Uq zU{P&r`;QLI*){_#hG5AsycW#t0RYuaKL8NBp=3Bs!q6TuVWcUErMMo|-zKKrn@+dS zP`CZV=tqB}6@%z-pC{sI+{4q((K>erRzv43TiKa`;|8@*4yMK=J7x+UR^4!eL&@Vt zGNucjznC;pte-h`92{p)7sqn30h!6t@g0)UN&|Emn*Mt1{b7N_Zid3-t1`HYz>3Qj z73Tr-I01+}2@3L|D2)?sDbo39sLQ0KijL%7s5v;iYJ~3^AxW_|6~K`3gNeV}{T>+A ziF0s;68p_xZ~hIXkk?q28@&3}G-4Zu`imqu(I02!X?CmQV*2ECcpkPfzSUX^=yeim zgaEZtBH!pL=nPKvtVp3MNB?2Q8N-l_C~eS-ed7kd%dAmOOJ5*_8j_!L2}&heS04lj zom*(k@gRpVW~*@{2%s!Gwc2q?%K8TvSG1Q2j)IAmb3;xV$gk^6u>O6$W_Uib8FMa; zBP>^>al=dV1P1sYn*__RJ%{^XkAQ|+x}m*bxx~8Rxc20A#zk%QFrv&28+Ep5)=-1c zVq|_6RUDNP^@MlLzlZ*v6mts{H|jnkYoBA?Rd(%Zu~VdfDFOMFD3rM__cSjgj$naB zx#mFqdz_ZXOuVjo+R)>F9Zg^xw6MxuTZQDD%5OPLnRq@zj!lXr_S5e_+>@CVyJFQ) z+DG48SvBN>R68vTJ|{zxUv7oYt*!hf_Cdfq9Rk8Th+UIR%^M57f|B92fOs;i()R4u zu0)p~Mj*bb=K*Hz%HPy~S2xZ!ngb4a*M%Lnq@XD%RF5>E$sYJ7yK)8f%sL5;mvwNUk6=ovicHX<7 zUJ(WUp!c1<029Nm?jEtTj7Tfbgc1lmaLQJ>f2XKQ?E|_1R$|)E1X>I+))8OH6~^H1 zljwn<k zP&VT46~JTX1bR~YI~}EpZ~Fcl0^L)s@At-zcn^3-YE?UUmqWYT;wCMdh^S24Q`SqY z#RNADQd}EN)8RvKOCI?#FDmbXyN^LeT@xpt`olbWX*0E4Q7nTQiQ=u6xaoPOCc6sk zVr*CtJrxR%wFM&#n)i+c+8lj15hOCU-drZFD?kEPL{H(Gg@Fhkw>YQfFiEUqd75{^ z3CUiC?i(i@s?RXs0=iFqlAnh%h5duDfKwOk9nXtR@7bcQ7n9f!^Rnwb9=n_cwXysI#$LQc3d>!tsL- zy0DiFO|Xk!Q~>x=2WcPDS+GfHydq_@)oYbi!rH5b^tM%X<%@A}Gcbip2X(dc9lcyf zor`ni=;y!*3N+e_xAYuHZX^~u)OCZ>1VC8WVCK%d@rw$NH@e7gX8Q=-Td^3zd)^q* z+py5$7Rz^6`vaan$>d_R-OQJyZqyr%F}ujglmUv@(z(KT&iv9?l4Xw%6x0Q+(2yZ@ z2_o!E~AQx1sxA@MXj3Sc{Mmq7mb^{yU54=s%X`-cj*)N&sxk z#F+9{`y#~@uQ?IKO@_2+X}F=cvf%_arc~5Ze1sD`e@3?}T91SXr}TXba?atgxpawN zjtb8h!i}EdEUvg|$DS*JDzK^z>z9!>BSKHKWurF0v@-KSK8sc8O}(h<7em*{Jqd80 zvxnQ(9t&tiT1>t~$i+KsH#tN^XQcn>U8f|nq=jY)FR{gnJYK++***gT~Xi`KUP zF1djY#QoZ{%@p{<5qEelS`QP&o6Uy*RiwD_x+!{&wzU(ZsQ`y~g2i%md_TQ6cBn zwY|kdcYje+Wn???1xfq~K$2&i+EjBGkmezXyfsZCd^m$taN(aZR}ig;)ZzN8V_T-j z^^b#8($;*b8Z~IVAnRaUjG}E(4P6sFS-;4>lZja|)~o*plbquq-Q6MThsTV$+ddg) z`nr8E7LuRV45rOEHX1#XNCj925=H3_NXDyr-W$2nTJik(E^lcT5csCvuS5aC%B1qj zkG|?L0d8z27nrFCv|d_yg&Kk~p5yzG zK`~XmJ(nU)7sMJYc3=;1Hb;iMf0s6#nc*Y6^Ff8afCuqd-wT>cVFQL+LRgw~gZsO? zL>2z$fr}|<>$`;_Awor;>>OMyNQ=+b-4sTARPD9UV6-%$QKyX$*o%-3=Ph{L0z)3D zr^Za#1#!{;^JQnwqgX#un#sO>{AqLq1;^bFl?sLt*WF>g#a)&ZX2D3JMQ$0yr2;J% zAgMP8r*ac=(g$GD%nMEna`c{8TjFin-)YnoBZg@GgMp8)W&c(*j$Ty+eRz;lJC&lX zfl(M=%qF64pqeT^@-Sw3=Sjk^nGo2i{-OJ==(!2%(BzqX7)w?O>$!AShRq!e+Y<)= zWJjPTJ~@H}{AcjfGvG+_LF*Ti`zHu_hf?9so+N(hz&_wX*@0f@*LzjJ<9Ap9>&hHFpH&3N<>Oi-2rULPUcX4o_Z@3N-$N%{_gr3bY zJgstgvVVaZ5GS@{ZNNvht6~SuI`5U@+=F(RkdZ=+;4n19wW;8uzOKZgz$9YY)3AFI zI?I6c0PLfaVYZ$lP`eKO;?h7{4XLH9xdv7!G?t>Ql@b$@8+2p5osK7dzdvD&s4F&= zTai20M~z%r<{Hcw=|!o3v_GBYtSyHlUZXHbkV*@%=p741uXDmaP@%XT#w=6kD3003 zGoH9MOwk{R&Ti_QnWU>09LjSZGVSaJ1?1gDUjOc@afkS#S5qx zGPZKnPX(^j$FO-*SFlwMs~z^n_`Xfe92^J`;C;SWe&hnar{?~kyiC-_etUm3zK__& z#Ky+>eq3z))YzxLr(*$M3am$TUl%8Z1Z%H5KWaMv*8_kQzL8|YF@K~1|3KUqT#WUH z^LLu~NL$$0ZnJ5pDedL$_s1!4Zu94N%O+t%`iFtEjm5`&``oj~BVpih<%;tE0G2>$ zzdJQ6D_PTeNpfrdT|N@1^O2=dV3;}YWBWyx>#JNq;1 zDw@*l78P8-?6EfVP9dp-0~^0oGAg{U2IAXf&JKT-|1EZ(>@vaN0~;OQmRy!Kc?&Yy zlT^!zBngs?tjGV&zB4julp{J;kVzL`l7*H*pdD_qE&x(XFilvT-WimyZlgroin0(` zz!f=n{39jAz>ury8D)QPP!tM-=y(Pdgu&DSw3I}nrs0x)d`U&YoIi9tEmE}MD&6I`o1U-Ba)C z75YVPgpHSeZs+q^OQMgIKjUwB7n8m7E8YitckcMGmSH#WoBD#*?%c;hlihf;q7@FZ zWoE%zd8cwKc8lZ)*|=l#KWBb)zWphiVW@v2z5}Kh)$f5q!)n1aq!lyKmgHBYW~IC{ zC!n{L56XsY@CXJ^k2|;|3hgC=u^dyIi*^=uBO>N7Jti|obyH&ipfE~i;Y%@t^|NMX zdjRydmL*YwR%#(NSlMVrv&d2|x~AE!X$9Q*Fyj8gO_%%QjxE zx82jL3l&4X-mtPNsNP$M+Yf(%<12_9 zF}#b4d`t^-F0Q^mvmgV=ZIVN4Z`?g3tfYn_^hQPl5ZP0f!v$hT7aMgT?**$JkzIX% zHX?k&ChlLpId?~DIme_tm-rhO=_2z9PAT*nh3)_Ik7lyw+dqx}7!)-A(?89%92u|v z&y_dBL@l`Y%)kD5CG+cwWfOl~LiNvR>kT1H=z2LJR}!LOd5$L(=1{Z$c1}vzHt!Y5 zsAd906cJZChB#ys=mPi=g|#{YgFT{r;)ou@G|}p0y|jX5OetC~ zF};Orm(bKGHfsuyq~m`UhKj}vgw!mPLg~86U`HvL*7BB#Hk&b$X@>bYZKi{ffrKR4 zf{HowfJdaHIZ)JJz0wx9Akyy{of*}KYuLQ05z(CgJ8r=5eVUMWBAeyq#Xd5yN~UQ} zHI2{08s;W`OPAhvkMV%80YRLgm3o{CCo3KTN?m<_7Tp)Hp=@LGr@%BH48w-qPw$u z+z32_-Q7lVm@}=~P<_0v6ME2A?8A|Qkm)GETFW+0EV_N9BPH#%Y=n|n0vHlRKr_Q) z-^x5K@?dyqN2hxIcsVTST@sSiV6$PXTa0}@d>GmohBkhk zFo=XGboUGl5J+ z*A3HM={bLd-P}0Zl>UbW!a-sM1m32-^*Gi;(837)IwQaw{^4XCACEI-<{-Dgu4!9B za9hH@HUv+%r{u3t`Pn+h9bSvM15d9maD?goe+{f+X@y?B;B`K(XswrM!5ei(=b`VP^au62n>DLOaSgT_S?kqa)Gqq z&T!)99{q)BdQ3hj+%kWg_;lDPi-LazQA49b;s8#IY7vYe)XRO%knVbQ#&%Xqr7qno zdm848&i=sjqO)&%UUYWyqO;q_bG4`D1(%_8*X6IlIzDz?2)UHn2ETw%P9L^s6%QOm?7`Pf9B2oQ?f3#%-S8$)KAu z*`Gl?bjr&CjelMa=+FcD-csA@5w)_#wj(-J9R{u6_sbQLCD)p{0DFIb81RRBSFSz$>wUK5>9_V7c;xGez`-jAHsW++YDO(J>c~6O*#u15GzV{z$^(l-LfLM z(*7IZQ9gRtJ0Hj`TaIiPJ~8w{-H!(h2lHgwYPzP``04=NXDIdJlT;8md>$$e4C_3o zMXbT?kre!f08&Mgh7~?(HA92<9wXNfPa!*4+(85%j-d-haLa#|hspvlN}(3K!eZ5m zfxIx34DtCMLi=6E$SE$wh+Il-{y2y9DIoVZlBr9n;ge6YLpae-xj)u*%E6flVeN=k z1TX`3A6(F?-%GB@g&?xFOFHyaxYG8@cI^B!Z9KuIp6&k0y0d*dAA}tMSWWR8umnSh zi%U1ca_dyHd18OeP5YFro&y4DmIR5~J_D~ad>%=@L(?JJXGe(gfPHp`^sXK}=$`p4*e}(t`sCGW3191hXsOZ+amBDd1|z#$C)-18M@8oG{l+ z))w$!ExLakYVx*)@#4#Ow@(|bQ!`abjJn=9VJodIsDfy`nf20FOZ0kh8r2a23$RspA)h&1r$%^U6_fl*ua@N2mBPL{@T zGNHj&E69bIF{=2qU^bXhX{r;~B?#WL>tl31xRZalR;y0hBQCO{fqfLbI0o|>6&Wk= zR+PCMRLh7b_^0iM>v(u5v+E3(-5xhILIHG$V&#a-E zii3YQ>>&TP`7t}VOTUK$BxmI7wi-EC;C0{*{Lm0Ho-hn>zyohMc}ic8Sp7#`m2DGF zHgTCYK58nBHOY;57?1+u=<@8;)e-ii2muU7v-e0zq71s3jCT+ zYevo%R0vkYGdAbNqgvB!fjpiP!aYH1k3P&VB17JzzIPZQJHU^S4 z0<1x5o5)&mt4LzT#vXsWf?nDtyxmaV=t&J&r#AG+)b0+=u%Zt@h!jU)j*W!=o~wVS z$|P)w7)-Pg1>t&wcf(q_co?7q@}NFB=%Is$q169jYA6o|=rZ@lS;}g+II$lfIz%Ol zikFBwvRN6FLa>=BA}g7m{wlxO7iUOeF(OLWhgg~45)qOzVz;S9_m;4{F&AsHjH7q% zD~PHBR%^&ZSsdd*>++uvN-VsbZO$k$)2nmUf z;EOQWme;5Vh}~4A7bLVzEu3v+K)q3yaL8B6zF(kkKSXpWX_mc~*02p9Ch- zDkZ7XT7;weMxBR_;yG5-FDJcj`ArowE-*WMZ93=U-qcy(|tFojv%nfiV-d-9dj7Plt%{ncmhT z1ihBL@k&qw-p-ku6egGfe1@s02PgvO-^SFb$5zuc!05te%g#W+%du{GG10R2XuU)S zp-Cv)Dp}vuZg>}Z8Lq2qqDd3TLQN+G(5fA5vu38#(u6lUWSAz}OAMAnE%vSQBf4Z# zVE_byk?1R1->nuO-0pu)V;*s^A`uPd`bJKO&>JwDqIqDqKD z)l%OYYo^bptH{EfBB{4Y72RDj7UUD(lvGTW4Kc;LnNZeOf)IZ{EM=Kt#$Do>;9SvB zVhdJS5*2FYXhZgDP3QsDDWH7>hHL`xSq>2%_5aICL#*+pmT~MvhFvgYmnhE#HJEm) z71%c0ZF~C7H<#z}(qQ$i6NKR3&FKnF*FvSqn@4{t>#7|{N91>-t#iAx5KJ3J38{=( z=TzQpn@Y?z(4>DCU!Gkc`)gCF(Ig#fn^|M4X<>_L(vC0BE@p-?qwF}%GAG4q$;Tno zSgO)unt=Xj-cAsc&b8M2bdX5uL99o2WI%b%oo46xbVmuP9I8?(?><1g)~sT}r7f%F zHJtJi-P<%R5z3DnTD(LTOqPOF!5_2DX*pr5su0KlBwv5-(FV5nZG>X4f&vQ#dX-&m zC*Od(EowioZSAMap$kmy+1v|0YpbiM@<@V9J9f`};nVJ+lax$OWQw2npt}xlqd7J# z(ZTbBuvV^VPBSbrgQe+#MtxnHQo2UL`S;lYI^qIaPcTCnak!h7icF1sbNpnt=xzB~(bRulV_O>8+0LtLnlgPS4$wFDR<-Pn*(oVpkmil2x=K-mWN!+`8P(y|)PiW< zWd6igCQOAHE>oMGy*0j>s&}N|Tj!QdwKL{Fs`L+BQpLp-VTG`vpGlcvEq@#1UL-?n zTbf~GZ|VsuYY+%lx8(cMv-eJbj@hS7hx|_9BTRqQnXlMHCuf}5=wV&EwHS`5vPmpV zWBReHZEdqvHYuJS%4#HA72bg{=VE7c!8hQs6O9K@^?Uer|JtRKbBWlDceYSwZ4U>7 z!vQcGhl4}Mo@U-z-`?9*!?9UKo4a^`&|3#~0f6x{u>s!gze;g$@IRYpAyCT=I{5Oo z-g$o;PB5YqiyOUl^Iz4?=-p8tq18gXd$s-knPc9fca}cbz9l@*O}@jilY7HdLmp5y zoP~{vo=MF7d+#mAQ!4gu~vDUTRZ;f#nO>Mw_NsI)qfqBA)oYa`Nut^!)Y3AWuIsQBQr`4@))t;qdZv zQ)+ZDaAsYG-zrIMK}1eXyzRc3{GG4Xw)uO1j@L^9Sgp$t5=`bbeZ2}ej$Z>uIH0V4!K3QCP+VUTTKw0ZFa@%U~y3F z^`drYy#QuPpQo=Jc`$mQ=({1%&E`o?afHfei-ex$c(iqgZ>Y3E;u(5-cIorg))g@3 zT`mw7iVkt2j!{uU?k>nYWElv1T9e+Z!Zee{M*h-mhO>7Sq)*=!%CAGozrf_!B%Vet4FNg(6=-JJf6U-bE0=Y+maF4`;W4h1qA!Yd{+BL$CCoTf<95d#2je2gS(URnx#Pnj)LOl7&Cix-nDJxDnQ5FziARA%V>UIInSBc|;)s(& z4{^?6!UefkLF|6diIORrlNktH1X}4i7Z2T(#R-PECL6Hsl5Nq{_HWMOK1*J~wKHtQ zH98GD(hZX89$J{Dii>|bf{6KQvA_T04}(eFh6A7LEB#paEhl2+vPk8a(IJs~<)?a^ zSWPITp1ao@#CV&`3?+ch-OT7&Yb#ZWphtoSSX!^kTf^`{1v4FTITclH{@2cjEN=@l z8)T@tkmrMsKMos`anFVNB}qy_)l`!*@}LGo2`QA$0B*%zS7Uz+$|>W^YmP#-MfJAX zrkbko*W|8PL_4aXr9*lXRXbG<&=r>kp2fpz1v+Uzp$l4<5AcdcARImIOFCo>bwR@H z3fVh^pb*pFVI{WJM3gJ@Ex3Vy8Tecunb8u~-OIy!?{eBDMcQx%}^p6=d-uYDT z-KRQ)fS`X^zKSxcC{|qT()F~_i1#firQ*3gHka-Vh+zu0M$A=QIi7&M6{hTxDI$hA zAv5?VJy0Q;_NjX(sO7&|UoFVvp8eO$zttSH|I2e?R&`Zpx)@19;VR=+@uzs&M}J~7 zu4iT{{!fWBGlii`5!cnml7#izMiAS7>}r!X_lkd=8ox12a2*gRBWf}`UrJym^-hQv zu@3Es4$+ZHiXgZ5ouiXwC9AV#W{fvxgS_(SWFcMMv9mm!y`5n?+3Ni^s87QcJVURj zR0fX3ybN*U2CYdmvsYSFpv8|kO~p(7My2TvwM%Xqohez*He{IKe z$Q@Kg2UQVJI;e^jjln@Qm)OqSS!!(n@bvusX|B$z5AW*Si9-whX&v?JYu0S-JN1d* zmI5$@hQ@A^dhlT=rd|a-cmC%3$5*F+zj%KID`(>w^_it?X9~To(TL#v!?qt{z-EFA z7<%)?b!1$@jy0tpvEjNId{Sf;_xe^HPy2Q%wsrj$i;~Q2`(jwwh)sVn zDLA*oEpL`5oT{csTc9TDkKFuUo?BVR z!5vDwTZ3k1`EhzQRxZ6f-x}fKLfvz*qwEpQ+Ghes?Xx*t)*aBMW;dc>5@*MtXLfDl zOE3~2(t)dOknlVL9`Om0wre15wWVA|;+`^vdwj~aH(u^nm?pqbjTSe9`_O-CU-jBo z_X75`B53H7&`{T%+yibTTe}Mc{~sV&QP+U~%9!SXe&Q_CJAkt)GthcL$a`lSH|87{ z)>Av>_v{{v6rEnJv)D!TP6L&&z*Jf=Dep+XU36 z!D=@Jf`ISVxyhdOovC(B^^UR6sOAQI24YKzK%a56@ODL`a1%dKAzYG#aCs?Qyy zH-RR%?3vWg{o=}xuMx^x5n!w(=K6N5_@`R%U~q=)iw6wwD|#A?zFgW+Mp@6*7gk-Y z{|iEif%Ul&rBr_}^@@Ll=Ui@|@A_=6RpUfr&558kP7)%`4t#GSp;Yzudox23E%M=_ zMqSV{WtxoRQt^ISq}apk1O%^FkL9d=b^sijio#Wql=J z<5aof8O{mBG4!DgL=7}gs!E(?(>{67gk2vZ zxTpZ<6k;MuCW-1rHVT`+5C(Wdq60H7#sRzQz*MaH>)U@)8OOff;!k47Iw4|e+lczK z-Bv=dnN>2rcqoJk)QbLoW>?Kt2L~>?O5}O4<}PxqJ&>5V88YPt_}!`wAUvmU&f_SK zDG`iWvut(@O*vgLGZu@?Ju$G;F3X;ilrXv@mI7*d4s>7k(qWfn{t0gg0x?YN@I2ONSsul=euQ{(4i`t&o2!I-04_~SQW+FOfHId$ek~4$82Sq zTONXXKbls6J2E|#W>0D=G^T~g%cg0zmh4(@OjEuEq#f6^p(2;8hu(0d|8wy`rDcK6 zIgxL;f?pnOt;}#Ad!?)vhJu?V#KQn@4a0IP;xK< zFRd>=Q#Rhtu`yMP%7$@P^CeWjzNqvyy=wKH+p8@;j*PKb^l`fd*y_{+zxhgE%`J9h z`&@tI&9c#s-kiMF=D@IiIW9D5{g>wOfZF^U6_^S+K&K9`t^Ul)$F*u&b)o>T@1IIK z!I=e#!3+_DX{Y-$D;xCC{g_L`F8c7TgF7-k=tb&lT&a`pgG+W$DY+X&*E7T5F?|5f zY$p9}2?woDSL+Wq3xcXjOoX5*+fggHowG4r=G4YXY1cwRmz5N5VlQJ1{&UU`j+mexxD zJwzpl+z>c?%S#n)9CI~6_H@Oasd#_KhL09v=Vm9)I36{f^?HclWUN`%zHw^NjJ4yS z&-Hv5PL|K!qOm8#PqI4?HHRo?(Q_`Y()u`BewtPBFOjV}#jOJnx2jJVDd#S9>xwiDJ-l9DNVXFs&oqD&1k_D*h5GPQf$J&3@^-B_~ z{;4gMBpwu<2*HIO7m*TCnCl#iJCb^~aDcA#1UMa0>=o&*TL-URPl%|ybT}9s+Ds_( z=@FwEYo!osoXyv`kVd_w`7%(Jhs4p%78s2+`QoT}ty&!$r~+D=9hR9K>^#^r(nejk zk!B(fbYYw=+fW#T0~(d+trLHd!W!R_<#K57>=!02tvjN6 zzAYFGdbaGx6>_%h+%xEQC?tIL*pqgoB~nxlxRgH)Tfx;`x3 z(WOxZK}H?xnRs3eCL(_|WmTdX*3G5txh{X9`K`)vDw@ZrZwSS0cv;2CSx%{q>{&Ui z$3;D$4JCMJFAy1awlwDYuu7m~H23Yi{ATot1y5fZt2Jhfn@n-CojVfPrex1r-)h)5 zEJY=aopak;Q46jf9JZ)qQ^!wS&~J$dO@6VcG*;2pWv9Qj%aeah#w5qEf?w$6yt0B& zd^AV1XeoqoDl*iOnw$)MgJSW=JH@50Tr=#q2l%0-pF$3nV+tzn@ zQ(0NZYHq!xMm2w70T~9y^5E2!R#(}o-YOlfG4dS_28YJXXBufqTu`Zo{l6f>5}xY* zn)I_mDiBNB^>nyE5uDq3XjNm~hza9v!+~yeA3Io*FSaE{w7in6$N|WtHglkzZl8bA z$`Kw&1!Xj+HflxFY9d>TEJvoIK~j`GTj?MtITzEOuULOSY_w$GI0g|SDTN?RWz%qw zzC~qIS;9|MysKALnl!0OVjHgpt{2Dk!R=|0LVI3w*1B3<8(|YP!9unf#4_{LA;O%fKz5ek201nZUcj@Sl*p+ul6;8#1-F=y!j?(;6(vK5&67IF9saJOZ@3Y*b4) zZhhO)Q6cCAt17;}hIA6qWHQE-9aqul1y4bGEG6+thcxGS^XeKU8HM02;nNvJG~|$O zMuZVzU|!Jd5FmFXRfejtG|K1isqX0ud~WQIDJQb#NK!IIW0=7Pa?Th}2)ZSN znSmNs6P%x$r=;e>8y(7FMH9-vI189pZ8n%y>x}dai7DXqa|8#;ta*JR?WR{W*X^bz zrXZqC3v*?+k;@K17H`JEwZf{DgTL#(y(51^LFD)}%4$k;A{EYyR`a4ywTY1N(RD`e z=m+kGQxO}B*%fz9fEu}H$V7qlSvUK0K}&aJ3hJ2FN8wDL1gOGb#zoD{O=GN%uo}FS zYJ&8J1WYVol*AdNGpg@~VqDK0TbPHdfU4Qf!+sJWUp_dz@X^Y0F#nOM8 z-Svii*n`~M!c`Ku7{=dxY(4P>QKbNV6BUb^Whf(f*oWJVD+8Ey9JOv&;DJ;-Zu5(1 z=CP;OF(GKmOAD`JQfZ=ur%{(AW`J|7?gHv9@Wm((G3pZ%Ye9rY36k$2O zBS_uz=COi~d8`acP{JuoXw>+O*HeFEv4piJ_iQvm!KI|PSuG3w?B%UjwdH-L=Md(% zicAoK$bvI4o4`E-y6gc$|CpJZs9|OqV#L^Dk}*l{ED$@DDB;Y6|M#pWst+B4OH&Vb z8tDO+aAslrqe)VoSpl_^;F(0pm~&~lho;P4pGg{XpBSFyKcKH=rs{Nn=7oRpV}&_B zlqls%>HpUAmk}%&8uNRkVq#YHQJLwq4S11JAUy5Vd5aF_K7+`<^AW1^gb|LFK51Z| zupY%T+*H(FLf}5A`P1sONF>L+%z)Kic+U?I`ff~^C9amJ#dydxY(llU>X3>lm_W#+%yPL}|F3)st&CiXlLK+fa1tS}rr(iyc-!YSL9u0q};M723<|L(> zdXQ@4BgotWq~!{7vCeXOhI4W|C6=xLzvt)!R+_&RluV4U?`g{-HH?`S z&nCt@F8+`8708W7q$x}-WNI5cPV7iM08%!crN?uW^&U$nL0CNmY}%OiTGBpyCp`|i zgH`S>>h7WrEO%rYnkav%Dw}OqeGxz`3m@v{0g|Ah8*>_1pM?q%f=9MuKrcOz7C{H^ zu1`OH_U9J|J^1G*&;I(E{^!Nn`St15i%)BReEgSB4r0xU_R~*aJhw1j2N&lrKK=Ch zUn3n`TP|acA1)pWYSMRI6D=(66?|e*`%aUT;|H3Txz9juJPd!8vP#u)6{|tqX`kWSV59idtoe8lFB#{R+q}6;HCL0OGoqwE{BMl>FYsSxIQkZ&GrnZ zM-pXC6o2{blV{J4UVMVaycF_yF!Oq3yH6RWM-0*EQZ)1N}hD!A3zkK%M6J7sbpQ98{Td-$0%X9~Jn`-Wm009TCVMg0z!|r0Q z62ImDXs7CrX0Bc@I4&l(kn#Chjciofw?vlSpNOTP}Krz$BryM7nz z`{rDWZ6o6rK}Bd zCU`A&pv#Egz}$%D^i~F0LG+{~U`n58M#|VGqa&MhqA-L`LIR&Dy2q{b29nenIk>vh z1^4xPFv)+GY(fM$)_>ES=l4E1t;Osuw%)s}J|Jy))&jhw<1Br;T+}RLvNQ;y4rB`F z#4QAbvq}ds>SuU^2s@A9;I^9$1<10Q2xOjP%KC*ML;66{0eZvzPSNeg%2|RSix|$C zkG>!e2`LoBm`sQOv_ASXF`l^==F&*CTHX{k$SQw&uCMJKWo1}rJa7`DtR;jn#ue+@ zJDB-0ve}fdsdpl7C<9Ha&{WFp8BF+y(VttPL`M2QwSf?{l4Had)djdquPBp2v!yqb z`FLZ{L0ip-6*c}rAr4-f8SdZ)p9tKbS&t5DaHe!vgSK>7gQ&wA?BaO4INnv|R}jbB zVGVzFSc3~ohc&pibXbEO*5Jz0VGUYku-Q19BMw?Ax`G@0Eujrcy*mW1Hu z2o$avtgw8b?2u;XSW43BfhE04PsjkB zB0&;bP@A?5o8My%6?)rK@L?KG^%)jVRWMzF&)tY?SqtAjEeMgfcL{IRB?$z^NGaZzOmb zl((%74S>p>BFmZRl7vVZ>eXUtwVep4FL*Zxo?$_7`j%xu7K=8M;OaNhG+ckr;EV^W z?)HS893!a1CM2n0N%iM_fJ3Y4_`^tA{h}MVZjD5JF#Y=R-WGQMm8?()6it47&(N$PlJzEAX%tAp0wR!P? z^CBbiB|0Dv>XU;WI(UB=O8pG83DpDd!m}#{PvTHi;45 zg^@a}Jt}_?DmV|aiuwZ@MqS(N1l^S;8H8WLsbK90ire;g%@a6ukE#TD=N?L;fMcKx znIvGZHMg=$ZO4D!*CSN1VuA_+Vfx#wh;IP+;hK{RF4dSY<)9X9bVL1mLYG4$Y^Q-f z1AIb+ped0k>VB##|7iBamNVAI9^>y6@9EUmLbI87)BgRM_U_TNsV~!Gdoi_Q1%k~+ zn|bDhYs&0#z-b<&uWPMZYcK=wODkpo`uW7@)lT$RAU1!leakV_+frZ21ZU*(?Y31| zw%Vo|>)QTU5aF=3oZ?j}oQ$oa$(d|8tA|)Ko`$#s)b&`dz16xb*VQMe&$37LVHiT8 zwy*w*Q*rq~m$`bjtJE4SQD?;x7WjJ0+G>PGSdn`i&->f&+)}^{S&WGo4>`BxPp>Y~ zm!`_C53zp`Tp2O{9OBxe$2wbq8+46xjvDNhuMgP@9sX4UiNQ-jQe+j4Tc3@+NqciL z89LI>P5}A+cu+}xGh$(wmSanzHL@jj)2Eig&J0juV;Y%#m3 ztYUtRgx5o__=qw``?z&69O5vMtdo;EIVqrYa?*eDB4u{L@NE|6U)T&*@SmbDGCV>A z{y0gg)c-}-*RO)+C*gTsGN%%P4P$R=pWEBe_wAEga|ON*jKTI4;bu(PRpk(}D_ULk z&ZiTRE=0%1F2Wl?vayFhFi!usM0Yc}tMwCcG28WMCb7l$QM=y`=_*)}U*C__w~m8y z7ukQcc@#8S_#R8i6I%IQS>#*CRv7@J?T;Q9|M-C$*s%sbZVtCT zShHV4QS92BpsI!0x$&oE)`!P|kl1|_F>m0-K;?p+L#02PkoW1)Jc6uDwe~&FC9Z!n zWPZYRFF}Ay(W)22*EXFz&2QF42nc4ui!y(6=ybujCL4Npn0{GVZG?*nqYlB$1sXhr}X<#05qL`&G1ZwF1<%%RQo|?F}n!UkGXY!A08>8rpw8 zG0=97d=}x66o7J8M=c8!+T*az;-liDaLl%iUe+QIF%GG$eN^W@QOO<^i|p|c$aao9 zwokONJz!C;|1h@-mUYGZ)T1Aj~o6|bO8Eod-UugK<#PzcBGwe#|FL~ZUe|V zRX5}tgav+EPl;L)hSRIdFpI5E(kKUuqzGrVwepEi5u_B!iva3@I@b;;ooj!`+S0jp zEH95?U>%n^W_?Yo!3U(yUC#1317s;~@cA}~D1cW}GWt_VsyqaqP2HiH8tUKuR2pu3 zhK476F8tn(-A}6{#o^Nl4K-BJkiO7nscJC)4GoZ`Oh7Ecb^3MoRc{MDCX4EKOHfXQ z;KCZs>%%g>t8_G0L>LWo6?{$p&Tb;$|B)GzHM}(Azcm7X_kLg-mTI*VmoQ8 zIRF)s21{=&K~gaARyoNNNe8yF!6d)Of(#O#qqFNvlnNSv#`+XRwoY7|E$y7?GMY>; z&)YlHneW{l@0`la??IFFcPvSYUSozwMpJuqef9U($9mI&cKPzW<~J2oqgU2m*E{)U z`+!R`)7XlgnyX=lQ@MWw%qhp6Tm@Pr7T|4N&Em8gcR2?h9ma0Ykn~BO-fefF;jVPm zsJ3%YhP2#=wO#Q-P+K8N{CU;A7C!FCbj97UrgzJ%0Xbd_y19Bn`pyPKmPCH8oQf3> z)xvvi{VfJJR+DGPBYiqW$sCTfQ@@Z0l9bA+U!=mx-J%2gmH~gqfA;G1oAZkvdV6*8 z=IpKh*OwQsFW+4DkpAoc_Ry97=Qr0kZ(q;XLRh)Low#o+UGTuQvfzbHa?^PT_x>Gf=jzVT+k6^=EnDp9LgFhs^UBY z9c04O#nb~9Syz82csVi`Ql%a1Q^_+^ziwO7lq7foBet6L(v0K?Joy%%g)kQD%-3Qv z;F>8g(~(xgH$xtv@3bJubE=ec3$XIdlIkTfo<&3nn#dl?_(=AU5?WyCAw`orqUWK9 zB*7vX_mE6-W1pvND6mwbOjIeB+*~W2fg0nlFSZ@>)PR36HHYYCbvX?*o*5O3c*dFJ z8G)4~ECodIW%umjV`oa=P14fmdhV7!tVzI2-|^GE{0&%`rH{d9>_`35-KtueOSkkj zv*gPkC(9hj`zRUXWjn5qh9yf@&co7EYaW~I-pT5@O;TQDc z%KAuQF*0^-(2>kOofWH>*5BY#sx;|xw!NH4iAQG93C<}ST?zg$tz5J)H9uHI`oeLF zG9xe1;r|+Ac_c|T95gFCM!)=m{?~#B`u8LMk!^oz9uoS0|8LZI;c(d)3PJ9%$g9o^ zQgBHX7t_lH7#wrmw%7OHq!fa%Mf62?aKTly^cre()YEOuZ?+oXB!Dl_=XqHdor`~9iWTYW8rxnQ?u2f*Mz$Km27!SFc>|4q zW&%w0Jh;tTr4Or?Y|X0Vcxrw8j8V{xZP`aTet1RLNR3~jk6--xv%j>RCUek9`Xymj z&${W1&DU7hE$b;6uf3UmQi=3x^C9forCqdHBMkX+nrG9SI;kRl z9P7@=s?0<=Wi&7Im+0Bbow3TRRuC*V-wvjhikxFjXh#C)`YK84DbQ-i$e8@$!y5XE zneIbr$z#C5x)MAs6C&Uavl@n^PEUWQ1u-YjxFu?t&R7Pl`vn+02xgRxoc+PM6)cY{ z(I3@A&0SprMxiBHK~jX#sKf#@MM$ct!?v~jLvXQvNJ5n8cNY{g~%&sV&kB& zp1eGN_F}~*^KUJArNBxN!Cs>O{{FQ8|KtA8KOEVAJnR4U$KJ~y{#g6-hvR?G|In6@ zE#ix+GNVz3`_gd`Za4JcGUY>bBTCXkUuc=3hrVHO+qIKc4|G+_{ABv*0NPmo+_t@u z z^^H}Zi<3m8@}zno2Srv2oDJmo$0RGIA|e%IkY2!#Ym_=wS;ecc|V zF~f>T1wyZ2E(RDZX)`rzG0A5BE?KQUBgxJ7V}T#_h$?qdEJT}{p1`K3x257j6VnOF zP9z=mu}H>L5wHWD;DYvHAPi2+AWuK?7vzE~cc+qP|^%SKPV&&)SJXU&g{JaKN|u8bAy=H0Q+ zKDtLao|-6n&s}Qyzt1kkptP#FW3qicW9{98ZO0c@5FUS0!;d)1L=-`^tz2ZBl;zM& zF7FLS@8)530QhFDYF2VjU-zR~3a_M7MFp#sCD&b!WL!Hcd-aK6|Hl=W)(m3T+)SX99E<5($ciFe%#18s z7^X%(o3^QukaKd;z0pMXNxWrl6msHhr@iE5AXVcHGGSj!?AnJ0qyh)^D8OmwTbD>uZ;@RR>LK(+i<6;aOkhMJU-wNrmVvap;F_DI0X#jUKLR#~W;TF@zJ`XAROuwa}`q zgjLZ1wO-diG_{8nq&EVn;%h9S9i$R+U!q=hE$^In^U5)RDLV;3kYDKCN5we@z)zp? z0QK80uenIx{{qL0VKoOdsg=u+2bUYSrG|#zX^GJ<3WuDtZjRsRe>(WbWtAg5t|Zw$(Pe#&(!8F44|+3 zO@l{?&4S{zchU`;Np?~da4Lk_wM(-8S9@xaTW~ntGcrub2TljjyJx8h3x>hN0bzWd zKmpY^EYF@paEgiOJzA4dY)#QVvs7ytGoEL}S8L@WFk0S@$*7(5=s8--T>dHkzG7V$ zr?~;Cs6qYpQL?B6sf#7Z;l^z0N9o%(*^>v(rA`RI86FV}Ubsm>^7UHvsBBO|5Ru~t7V5Q2`y?*wdP}4;sxg||>v8fP zQMcO9(t_W}Yd5lyA0q(o?=}Pmo=-nIs{|YRp{Vh9FC)^R)A-c7wdw`MyeA05;1?)9 z&-uLUYhm4fKqE@9%sRxSUrz59H{b(N^_4HT>D#Nh9?S*s2%D$!rT41gZmB&It8b2J zWAjM?1{B-hZ7p+`H!JY{xK8nKmq*}!m-j)b!1di&zuJQP584%nL+rI3{hy{cE5Sd_ znw&z`I*}gm1jjdGJ({8M63<{zZHr z`)qup;HC31@tt}8JNhRI`ILbSR=NoKcr)DSblnh?ZNWUL)Ojwg>2B;}kK?&3ax*(F zxtCn@zN_Are4@YN`pd5gp8w|u$XhL@&EI(;S33H#w#udZ3s3Z&Z;e!A1S~(*`z{jr zWC^hkkXKZ@S9+$&-8Ug(feS0OC!g0Z8)TlGD=V_Zb(l5DSRjJ;p&->Ok|zp05Icwv z#b8(%j#`q&U_kznVCj;)igvvtmiejvcwO#@e>~TY|5aFXzfKOs{BqEne+ru)h0WY9puo5?{8=mHuaJO^?E3dG8`%;wqWp zy^U3gz3cU2ZLC;U!yP?+696XmrE5r4d8Jfxu-{rbX!p`Welk{rV6jkCkHaGTRud>k4g+4BC8Qm=<2gCiRdcZ-wlGw&TZB-D%_Bi=gU| zn8bAI)ZQwuTBoUdwi)b1au-2UJ>G~RBZ>v8`kHj ziC7qzYFd-kO#%2p;u^xv49c;3^!m;*DGs$(orII+#Ee4~ce`BmPRA_mK{x6*R&&i4 z%v<*dOfQKF68rD0gvOJDPsPevsTNrrd6tQz9C}1R5G4$xm^VGm@#@x4Xu;jQ=n_Nd zAKWzD5Or6g2K3avg?S`vtf^^+gR;Nnlj#8E1)%=9kmR%j)>MoB6%1bq2Fx;Wjq zl0mo?$rPN>&SRzYmeJ-S9IUQ(+=Y$}Z)OK((y!Gl@50Bt+0+Q@X zqm=-RH1@3VWVVWf;bJOuh9z8y)rb?9Y3s-FD4BdMTSe%3J_h!;`BmuMNtrq>LY3p*wx+gC+4a4nVC-M$X=)|G z!=^a_hK`!1ZW_;Gl{}nKVP@;*^+}z@mf-NWuyjFuQYQ#SgRyVg+T17hEiO~~qo1n9 z#(;0`lUn1Sg5fM`7wTcPVANI+HEZ~cRl8ifmu2HDvmEWQWX7A#vT3ZB=;f{>*Wwbk)~y%Z1YTQDB*myX9KE@=>qycOCWZh-W$IFU;^Mhtp2ZPy>Hx&^<;GG!ii<|S$sTAxeI8i>cg@T za1WS9<=v*tZ`eD(_mDRB(PSA5eqqTq5c5&e3X>pow4;^hdt@;m3eK_Ypm|g3@>B=X z*H?EVjawCkcAd|hUJ$c(o6n5HujU$AxH1~_r$gAOLSmEy2=uMVbpy(;Q$aDOtQON1 zOIJoiiqxm;A+|%ru|PxyETw^f>+IR7B}A+gRWnI`Rjkbz^mWbyr%xNUG$5@0+KS8OD94&>C;dxrJv=&~`%3IDcnW&yUk z%CE&J>DSU@U+=8NspifAWtZt+oZtXXZU}v8j-)F*EYQSN_mznsa0i=;+oGTW%bm3W zvXEi$p^~b=nFet7(!jO`=vc*;iBrjV`~{(n4r<=nbvu2L6GnRAVg1EXx17~wPsy}H zLObsrPlL%Fh!D3siZ%1eiVaTB@FM{?UB5;@v5uw3W~~_WF~t3o_K7t$iew6v?|GvH zIPeR|NMU0A4>O;O%Y-W8sl}mrFS88JLy)EyB&^MfND`ny6`B+y4aeNKzF{{$N;|V8 zSZFBlV?rK}Gzrf&(MvtuE&XmPHVRDnqh`ls$>)}5p8 zQ<)EGCg-Mu1bWao@nJ<_Gy$(^HV@DyQLOW_+oL1s`Nk}>U9ShO)*t4 zb<2~iD-j@5Fyv3{(z>3ET2N6f+m$nbZR$(0n!7)Qg}8r5sLNfVny8G!juUY~(=tJm z8|O%K8Q$-Nt6#PN^wh|SvXTRySmBSt=Z%)Y4>lHu)7Gwfm{VNQsIn|=UaqCYEwkKk z!!4s4wV+v1;60~V@nf5pU(l)|6*sE5rdG@-0hU*kRG}k27C4v0ye}v0oo#6{Rrc5Z z(mm9UDhn(vgJ;nYTuelB{Iu7iUOB{`a5U#tt zwH8GxNY5uM>JeNXo9nO%b1XUOt+pM!S4}-pkmr#~} z0iq4n$_Z4rpnLq2v~L(w>T)?JUwyZ}77t8@@5{ct)IobAdN$en3}QGSif>C3+5FuUutsZxcq0EQib z8ybD-U)3XgpQ~Ogv}IV%KDrLhw&OIZv?i+()Bvpz;g-=~JFZYiv4aEzXj|?wp+`U@ zPTpf}YVRcyeUaYG;)nX68e3HfZ7C}RbR3BPQW+1QZ8o;kG+%;-qPT3cp!tKaA~pDO{r)s~xnpznTYN7bf;`V#y2 zDFe1F4)y>c?_MSDRc=B1D6fCI;3wAtl=c+Bo^dGAtx1AiGiD7XF6>D&0JDX4S?;WH zn{ylT{o=-q|M|=oUaJ~2z*2sUb=j4aXM8I_E;YPFG87ktV(Km>L8xMQMHU+8gkn6B^YBVd zL8#Y+VkFX#R2xE(-y=j~ok#8jDygOP!;6r42jwz;7|)t%pMV;YDBb(cU1Za%#NA<^ z6|&yT#NCiI`nMd0|Mu~Jo3y#i<$rq>Z6#<%Y5D)z#F3Q$=Q{nHuH<>*uIugu?(gSzKjIU2*+8!Nui!lHM9vrXTrF=qSUq&HyNZitf>w+Bv*-YLMVE;SLLD>7 z@C&XjE$|C$`7ZG_*4lpwb$KLL{o{U$<>DZh7)rb%YsmACLWQ6HlasZ?3My%&)MdQI zq>4YI4d=O7-g4is6!(9y{cfZGwNvrGWIkQp*3kur{5I8EyZqxRk-qiswuN zz@*Jt{sn35Pg5}U8h49b<{C6%Ykq)%;=T&(oqW`5n zMDLlh6HeYD)(2*WCA9(6pGRt}#9B!YZA=OcX%nQqeNqqLT!UNx8g4wiA!bo!_vt4 zulEp|B_Iu-zl9yP#ReVH6;0#A8ATwUHXzP~UjmAro|pm>O@zTLYOgLH;|WP<7ox|W zn5hZ47i@}!I$^_CTbODfm`M9lR&fJgLqEx|X;jD302CC7!xk6$%BZ(|LVzE`^iRdF9qvMV!wgct<>KEfZ^tFYHU6$TpxipU|2R&Rdl=BJzwG~Thr|AxFeSpt7475*eTHslWdh~ zMy*!m0d>1DEB|J^jo;e!d%+9b<@O?3L*4tycMnRylj(3J{avgo8GSxAUj+}Z&f!i; zWl5Ig2_7L%Rf(^_QIIOwJ#1ap7VO}sO3DzEsR$8ESIyJXD6xzKP>R86@8jcz{|x@) zg{u@$q5`hS)}7Is0>{)ab(KR8l%-@aWq-P;1`M0qKF1SH32QH29tMAhq|E9}MA2{m z4q5oFG27f@r$6g!LDxClUv)9SsiuE0O>;HKnx^5qEp$GlhE3}e+PmGzzG47FkX_v7 z++Ow1-qVf2u>BbPy-566*ngoBy3q-Jxl5uGa@bvkJQM2jh>fA2bk4&J*BZe}0ggJm z0ziSHZ0(tp9p0Zfb>lah|2A}vxQemcv6?;X;?}|*7`!>GSahJ)D+mgD4vKkZuGqay zbr9uI-&SdpRUu}^O%$Dn9_LL}-VkXmb{dmztvKCrJTF|alHEU>K zQl6#_6%7b}wxMZ1!C<5Oa>H*wdE`1P0-TvS)1yg;&#hXri@gMn3V($}GDDkZf+kY< z6xbU&0i0%sb5i9V{ohAi2o?H1UGI@T%?UcQFh)8}f{ZF40-bnd-66rX>UMaGG?DWbBLo-Rn%aJNYIK=d%Po$H&C|y1|T1c z8q&=mJo4YL{R2C+N9cYL$kfQWLHPIlG%WCac^mffWbS~2BeAjpi?p2rE(H-?di3iN z>^u3_Wu|X_9rdxnRB=bwJpi3I=Zj{*wPhPG684=Ai5V)XP7hng%KElWYdrm^4P5jE z!z-q?4*T-sK<{^PAF}12!`He~dcfcsju1<7(rH3@lGZ}sADkfw6c}d%^F%t>MGVJa*u{7l+ha-gg1AR1|8JK=T+KEmngHb+=|+ z_w0pExOpoFPG=axt7Om~(f}Got#k4bnOv0fQx_ua4aT>_H{+m{2 z{xx16to&5zANJHG$4_XEfhzALnt~#6cmVoZkZ92FdMxe5NZw2K%SX?FMrMl8TkLHc z6j#D$h^6CZK3n_>_1aQUixzDNY5`n0c)7SXMw49&#K#+NB3H9Vdw`Zjf|-hbRmonx zGK`;R0*g7tX!+n~9ig`gopG5N!3x*Gla*yI|KWv$f3F9s=1%k9=RArD2D#Tr2`YA< z5a@@cOF5I|Gj|hy0#dQ{M%7`COom}|}xu-Hy|ZIO=J1)Zg+9LsN3A}<)7kY7 zl<)i4TkXXCq*gz+hXO+YOwGyX^NpaOW1Vm$xtt%vw=td};3=kTO74NY^d+Ygl?MB= zy^s&LjorQB@@%n}l}rjuag#kQQwu3(f3W)b4?gfq(G#=$^uYstUwolu`0+j4r9fG_ zTXb~n$P%_D;21BW??5A~j-i3TUhKKfEc4$Wh>r0pGBdcM>A3EirRm49tScEHyCNseamO*9B zS&<2!gT`ik@AHvDt0_|-R;F#G_CNm8YWqC5Epn3501f2)hxZjix3;(ToC}<@K)Ea1 z;Dv=?lK6=o)a{X;&%G!5X8Z&;caOcl*>)8EO&c8<#OcT8~^S=aH-=7{#H!!fl))NmDOzO^#DxCqc&t zQPKEcKPc*e4G_XNq{bKPF5G8QM#vXvMz9vTg<15pcnr0?6q607V%>5+Oq z$x`SJmXkz$s0<4=uH;f(M?A>fNp4j=sCTOw7ORt@={C%gS=Ed`ME{SB)=SY0i#k8x z$@*Vve~3%w_F?(e9}W{?Q3PH1T?bcFu(c=GC1X@Mu^&wr8GmVY$$g}@P%ehLT)iPL z0BE?ildHlpJ?Y!D`-{X}Vh?JdoA<5W*jYU3BIzbK5~m!YR-y1p6&_iZ-EKjA0C5Pj zNyC=R9#)0&A&y@pd$Q#vX z!_^aZO2}4WiW~RO=8uFEa*FKy6kOy3j{y-2CyUT@lYrZIo^LPcM+fBnQQ-yBCn71* z$T-4L0BQA{Fay5iLSJ{Y10^{bQXf1xi}Ib9nes+@J?LH9g(-^lMMe%XYN{L9pm^gJHxywucm&rf{d+XPg6ew#*m_AS~t`dOKkRml)h zq09*(P{6=om;GSg)-VL!YAfjfEc>aLH#6@PK>=Dxa(b zeurdu%D20-We1o14f}w)d=X&xESN;s-J*|_ZRIJh3=^oGzb^6jTPv%&^sOp6^3=kn zbH~3UG83i~9MVi#%K}>nM#R+S>to8f_`}d_^xMyR4FuDn=wIl0k7_@b2CDb_BYNbc zxn-UY^^PH|Em?D1kNY($0FzEQUC&ritVvob!(aqU&OsbNPDKqnQx(Lh(+8begdpu* zVp9O zrbbLou!|Y4o}5kbfjlC8C?`biqjb;k0!Y1}5OZUcu_@MIEm#K|@R2B3HDw=B7B3W> zslRA(zQAr+;U;cE!vsAg4#u}y?elzIN&vvtEdARO=4O6&|2Tafx4N4PT&69nsvX4( z)D}xQ(J|hjD`M?+FKyYkL<^}Yvavd4vsJaS-0%)`^U6B1aL0c&sXNZiOj2Y)cCK^D zkOhsmxKOkcD}%KGP^r*Np?S1U6OJQ=Hn;Q+{oL@mL1jfFt4ABv&EvJ}8xtKr)&L&= zx=K2u!;vUEe6iW06}8t+L0#o-x27tRh|h8E?nNo==;7*Qj=2y6JUo{~&Mke?iPvUh zKhsohjnIm@7eNWYWEOFm2bVAm^pQUU<%6R%8T}mY(=hS^EIDDUr|UqxtS4I#n5GdS zT(b(en4~s@jMX(ua;xYM<~;Gbb;``cc@t$^k(v4(@H)*V#ji5SY6=2)=jyE!t~Qhp zcnkCxz}nS#!{sbZ=UA5+n9O$)i7-r7ay1+Iv?v+`-E$W!WlDn;}-gRJ*&6w!Gh`6T2Y9r5=2MMP>B~^^7*k*989euV~gDDa#$tjRD zVxij(k{~afZg9ZxIIQ0fu%WXNRS<>RdoHC*l>BDr=&%&Yx2wX~Z&DFy>r~#s$Uz@# zfMsk8H&OHwka!+%uPT;*?~eqV(hzZF?4r6(Wss2o5VQqZcqGVzfQv{6l~F#Kir`S4 zgz*vBIaDECL!&lcWYm$J%nwO1K`R;o?$0;i#f^YfY4d-7uXc03c*i>1^Yy?0qzYVPcnoEZ~MZ4+I7;4Tb z5$_A84*YVMT2T_Hdk9Y-b32=sN zL;iHTOt@7y=qQc=JTdJJio0}LauQZ_TVimWci4)uHYx6n zT5^>6i%ZfS+j%_vR)6SSR_Sl3tX4v*-gu;N-&j<9*7$?l#7IUXkk#iw^F%TnK z{mriGZ_EK(RnYph1|rvq<{Xxtv!A}Q_yaTK6~C|S`4CSlKq`-7cMD@A8=Me8g+vYc9M773T}IQ*kN>*!iuyh)Qc+$`$nS^Lh4@E!R1)>BbtvtoW(K+j(M?C4YYthDZ}qKrfQ9m+Ge?%}=u z^w=Q9+hEnb9O>avn6WRlEm`pZ=bBh%nwY1W$TWGL^VVCK%xFT>t1%4^K25b`=(S&xEH6nO`tQDy6~!FgNhlg zaj(CTLSreNX*_h2HmJe%lEvj$Z$C3Ce;!#Uf~%Crg=dnso0lm?&%=fpY-q*ep4hcy zzWleE%6TH2-YZ14091Bcj^|jn!FJi6i6p+!yvmHRo`nXvF7KhRS z`4jz(>t%L^V`9Sgja1l&Q|9+WXR&4()#P*g;grTkj4y^G>rfC8a)n2K2qS6)#-Yqi z4d09GSE(36E|u#jRIACTkqR|yQ~&xN?^Gu1Cl;YA9^^_d1aSv#a9npZu{5M2H6!{6 zFHVHXFp#{efG@*lDDb@*WIthH85)EFXd~F+(Msry-_5Cxgj4pSR{Whae&d??VJ5v> z6_Sh~LAswNDzbsoJ+-M&{^*@?J~Cn|qlmYP?oSx6&yz(!4Yp?N-0YpWHahgr#T%%? z1d3~b=MI4LW@P+Z)((`ebjL49ltLcr81g!nV0L1q=u(LzO~;NK!=99LCPrcafIdO} zGTTtwPSyWbm8t9JunLbMb^~2fMp!9u$~IjS<<9PH|Gry3-(}FN)~|%kj=r2zgfq+s z2+sb5$RLW76$+%R4EP;g!sk=Z($Y-0H!&|xu{F1m3GmfBe1XFlLLY?`W2gZM-o*XNY> z^)~{4-T>{hqGdwA=y{G;xnFIl!Qm*_H*SD274%8jUys&$TA9OpfH0b4l8aLZpkd8} z9g9XoQP)Y2u=jQ#ni@J87HjN3Rr~aVPv8+PfC)Kku15KCQeUY2qeyA^(SJSqq0o1| zvI-Wg$%H!HjKTRy#Xt%0{QJ`oFm9l*P8pRrSfHGwzP)WKzk8wQl32pmo4vd?HA&O@ zCPK!u7uDrq5!fk}hUS(C7}s#Wsee(9jyQ2zd)(RRj|~*>IZ*1Z7tPP8uD4==jNHg4 z?q9DW%Bvl16QP0}Wj$2mD+!RWdhr(6;wjo*(P++Qc_)d_r-f7v(xvs_20Eds6XPT9 zlvug5039Ut`r@(C^DRM{5~g=kCai6)gDxzcDQ0#EAyIH9YCC`iAWWrS>B`#A49xLv zRNtjsqso$&jdTa>XFXKr+Tl6n>*a-PYF{$1^iQuZ_rsU4=tQmA?@V6~Z+;!=%{b2Y zk}Nh){Uq@G@JkbOAA=(w9iCtS@2B!j#^gNxd*wYxk4b-ul8CLhvn=@|{9EBUNiSTZ z*8$aTc20cs^HmHej*7qh&qVvN9)3RBuVNTPtwk3wAxE_n_33NiW|IGX| z`u{xtS^xK}00havUpNdJkL#; zMHy6mVhQuVPu+rRe2u6$AMeSeBOAhgKnkR@a`b9-0N5MvRZ;p6gt?m$x;12BSVY-S zzTZ&6s4Nh-gjZ{D`RF5#R)O7cic_vH^R^V(sF%nagph?^Si7A(P`LG1Ov(W&d&_i1UjS5`ut?z_8Hxj0o0 zbY=u;!fNlS-~UxB0b;7;Kid|`x}lxqP5tp zf2XpW7`TMOuLTX)A`^QfST<78!T-P5B>S@PkrU(RK{QV~l!L_ds<>;6X|F7HT(u;o zwBY{rff|Ms>x}K!@;`Y@HGF9zVCRco;j-cB6-?=BybGYXwA6~RiyPEWi0)n~;U)e6 zagCCuspMH`>}xEHZZF5byhuOi9ShK*9Y;+F(9zgpn}Pyhh&Wuj2!aK$^15KNs-*SN zb)HT29!+)b|Nju4|4)Di@P81Vz>ZdMP!XJsCzxm9X>}EXCtLx4HK@}rlZhc~Z1y#0 zosm&j33vo;V%9b)w-csp=rTbsaW%F33 zL3~|^JJA6TWn%nl+>!b89y>rw5P|3BFbVddKpa?m=Eg_wSBQ`HaptNG--U@2A5$T7ZL94*OtI*9_F#*Q!2(0@bZn` zyeW`+tFl-CRhD#P>rK!il&`z^%P17Vg;0@1uyAs6aho2wOUGhLnkPyttN<=;Z7R=v zm>&Q@cK1j!UNK|81ETMFE#q(z*lV(BO1-;FkB(J2qa+bak@Q-KZJKC(Yc59lsMOC^ znLn(BB@%v${8^1Wd13!|D~J;EkHYfTmyIM&$B!W z+sUzoPPNf%6H$2|SQUjRcfF$-iKJY(rts8uUj&!W3uk@~*J8w7H?#Fomu^3#e-YcN zsW`sMks!p`0$9LPCL3$06@+GE3Qt@#5Tt*`M49^rcs!0Wl9}=;1=O?c;pXKwYU9&D z&TcP2TO`ot>e=12#rNx}lY2nVjEOkJZv4$AR?5lT%~5*Fkpi8O%&aulGoyIA>nIyI zh3PL+i4-jqab}2r9cM?btYgB(wXr0Eijj)Z4AKHS!V>NN)ZAlkx1y7*X1wa~OH3># zM*bZ(@krJ+Tik?fl#qLNYao4>ROLB`?RFd>!fZVAIyAm?0|rX&7et3)IT!>j?qwQ< zFnbm{nLOG=yUN*c;|4D{EWj766T4~p8z$I;9S*;Wh)t&?m@0FxY6V#CC{$-_ft74; z1f0>O4+o+yudhKRWx2|88Kn0|Xcq$YP|h#ksBTri9%Y-Y7(v+=0gJsv@v=tlZwDEm z8=j5JZ0bfaoMvGvw)CCa+%g{4J=<^lDoj@^thO7WSr5X7uj~%b@cs8x0t)vdQlE-H zDJu3Oj5iDo^;0hM5kgZLcx!y)&gMxU{Y(IPZ!B&wD3I9297!{X7y66`cEwV9{oSke zC?_^Zv+Q&=sJi?fB3G7XS`L=`P9PS)@5o8TR*2S+?=X03kXp(^xJiz%(K(8KhWVZdk>Ew>0T}RKQ#)G4ZNI@~ zGrqWshMrQ|!yd;Q?eyNNuvvUJm!!5I4rBFktk2?z4haks&DmRmf`HhNMHw-`6Iq?u z5PgH_K3}bjw@j7v)v59~Wu!#a`1JhLb=I~KZ_bozPcAsXh+ig=v^d|Yf{X3GP7Mjw zo4qz`nIk#0#&QT2bc7=*;ZNd;G=x{iQ|X0MnR^COw;&P}K6hh|gS6OB*oevk^bG4; zbx#`z!tJ}n=6!;a#*V6&$pQnwL#sSSVJo>$;Yi4KQ2<7AF(n@*GXbeR9-95-tA@8k zKCKB-hSr0;+aW?X9#YbRL>B7^7s{mG26RC*`8SzjK!~0^2A5H?L+ei-yCdc-HQ#(g zdFp(o0|92Ie}#661%{y#DFd^d%p5QFDnIfv;~+(&O8T@f9@Le;b2@SXRMEfr1ww;@ z$?mVK)LAd?4=|fl%uCe;^!^>bk1jr}rr8Jb{{+4;i4!$XeQoj#!?)r3x5DJF)+O&k zPG|pd_OgZ6Q}A(A%#O^CqUjG~g*9T^y!y;A%VwD=|7tIAhsZYE8Lbr`r3`+(v>Jf3 zXnal-;o8ip`_&%S9F-CaV9woxTR;zHAlUHF%eJjWR|?rK$d5i;D#Q8}AsHd!;o6Gf zQ47xDWh`u+Z-;TC3U$B`ol(LGGl_mUaakgeckN3O$ZnSQN`0N0FM{yfGf%;P}+vB$h}7FSx5h*npYUW<*01NLmR+}i3KyO zU@o7vEkJk<9kAp9biFL95KO(}g0D0{OCDxe*Pw%j)%-BCzjxXBgxorBloB2(>s;O~ znzWYO+3`eMtAz4+bvZp4jQ+wMo#~EeVv$yoE8_bo=zBhfn*DO!MHY(p3!#G9;buDy zJ0SNIaj~l5J|;Mj<;T0nqrkQD{9QyKXUfT+SiofI+ZcF*_mj5_*ehJKV!Qk+4I^PcwdrR1WUHQPSBjz@uI}7 z>84^m`6(@Zue7cMGUHDw&(gOABod+hcGw$Y2NXm^g@l=qcs06SQ6=Vd+c>{{_U-b* zxlo|Rl38fZns7m7Hb7n8VaVloJ5WZ%J(6;gC(6{DtknCUD$^o{CE%GXW&r_I2^;bU zcK~GY4bG~pC~fu&1P8ztGxvl$!9j-sC(nHIWq|S)OhHRk3PnV4o;@cl1z1L}tXi4@ zv+Kc^;?r&L9nFWGZrpk%95Y*dM`+i$5Ee<+Q*DesmK|ED@c@b3v@=4_pM#}>n_NSW z$@Sh0(k+iC?$q1Qg10J+cp=CYvfon0_Is>qhsHKaYiUIch<<6M)$#NKln<*^l zpiwHyufN6onGL_;DXhXi2j8^sGq19kNZJf!J%PDGaS6$m5=P*yu=&_HtwmSHARt90 z3o>o6{ad<*M@nv@;c4Fs;>-~Ezk-Yup;CKn-oxnX&wr<|jh1w#OTLgTvX*9QJzx9P z6{6mgF**+OJBZA08FutlXYSX`luW8OB*SntLCE{)s?t`WkrY`~mO{*L= z=wQdU`_--8cLdy6NgU1YVH>lcYks%~7^Sf_0B0}+gpAFmAA)jtNbG=axaaT;*dr0A z^Hg#a7@$lhH**GNCxBX-agZI_kpPZd36--3gbHHKxlg4mI;YC7llG1@=s7EF2_>vF}Li;Q)2Ly9n-<(X%<(Z+{0xk1GL8EJ9>X`Z1nt z)bUS1mBBxtp0jz;$;D97P(fgAl!(broV;?+dat*OJ4ooS0*py)5%n6Zi@%$dVNsce zBPzXKZ4qRlw(5qD+yw3gmYwsYdqnF&UINd{-Tdu@3Xub}%+32tz;hsv3wBjpW?D=e z#+(ODTDc#XUp8&&F{~^&&|klm?s-@;>z?cYT1dCh)!*C=KA^w^$qL-;jFq_TX9Z|Y z`_(5=uq83iF_%c#;4u)o91&ocm%)U8ND5x0Wb=g_q}O_)5uKHMapYkdKy2I5%)ukv zHEhO`WpW3zJLN8A9~B0(8FAwJVIQV%O%d*YpU7BR=paqCH9ejlGWv$ZKcizWm6*5# zXsua)0+uPP83tt8w{r`tHvczOeR=p zJ;?2;Gb*Ny-0Sg;NF-?0mX@Rm#BLE1HUmiNc;T>l=vKZ5=yR&=ewu|k*6l6Z{e5Du3q8FC}9@5YM*{wX*9YQ_lp)qDyec2 z(sS0@U*tcx`h=fb=r}&9(w!}Uo8}NV#YnfPtH9spo_XAz0KW`27Yf%Dda@mTcm*CM z5dK$u`Tp}{Q;xJdt}EqsKWX2!nf$PZ71)$73PuFAS&uHG?sMh}U#GmHQ@;A7Xnjt? zE&K7xCoJJ@96sy!!#?g|ysN)!OhIZ|b5pgCCT#V?IJl_BCLzVMxZt0F*|PY;!$j(7 ztHLSG830tfTU$DA%A1hMA57%4XPGx|9-)wzqf@pdUnKen+vI7stlJ)mx4$>FwP81% z!=2zhk~?|2ohlEGeggWd-(qOD@~mj|=&ycd4jgZq?1cAcW$8)Uk@Z~lp3zee6E1HP z+2W0WU6xE^WSh1y+u3)(#`ChZlmbq%sZ@zu8|P_@iLB8y8X-HQI<-~@8 zImfN%KzV$ixrOS0*G9v?Jvf?njdDF>Bx}huEO%!UVT2nH>q5l@$6<2p7-b)8D zeA4hGd|6*>inSAPlTdoBL}E!6eS2!jB1P*hnoD!lS>Uyy;9BAZ!|%;#$^8oX1Hu&9 zB2i=%TvMO|&egw*)q&H$X<=bkS76=I8;K{q=LhFo*R5qWwC#tY`Q7}S9Pc-m<4SvV zvwe7@Y|TKQET902Kk>Y~0&d{l!2#21A23SqqY~Lk;LZVDI{H;R_IOP8nnI_uDv#Zl zRbc7~)7N&FESzc5XLtRM5?s(@X}Xg+>DDNattag6H{PDsQGr*^`);>{ZOzRPT}@+- zbmLj8HT`Lp8IABm=Jg31J*zlU+6?Bazp*a^NnvenrW05tV0r_3zL<)L-SLmp+V#0B zYfRi02eTc0xraC~c8eW9q}!P9!$f$IREl0#<3rGG7V%vStmzu1)Hk7VK- z6>e6Pe_Lg?cnI=FKP71(Se*4TR0bklKbwT8utR~Y&}JzSrFQ~5|2io`G7cPz{6p}Q zH6)pmo*bM+#X3{Y_DR2!!WJy>OY}T*9{B}gl1W%S*sNJ4GFk4A=P{19y_EqXLowpx z-xYL#V34iGU_M?%ZK^ zA#$Md)O5jqA1+vegCN?NStOfISI{Q-sh;v%*ufp-n>Qg< zonWF9Uh;ww*MF-sIQmFfOi zeC&={*og|94QN?uwarNO4-H*`)#X2(R-=4hVzlj%t#aOR>~2LDjAOnIJIswywHav~N<7Ko$O)NRrXxUO?j+*!YyaMAwWuFb-{m^FfHd~9J+1aM|{Dd&59t(17m)fHlXnGbhurfs{a-rB?UN9@hMy0j<8#Xnm6 z2d-9`nq0Gr06CrniJFV?V%Igw58!-n691kt7Lppa8cs>D6ac}?K~EkfCe;qQJt@sn z3TrG54kwTh+RiOAF_)?w#9`O>RzoiFAb_taQUyB=)&jST2CxV(!I|1^LK^<)E8+Vx zNv5{=reDTgH@J9KzLEZ4tlec$U0t^*Xf_hu-3jjQ8Z@}OyE_DjP0$4QjZ1J1?(R-- zcXxMdUinU+bGxg$tM2{9T+>$7{=-^pK4XmUO~!l*oytar0zB5W*XYR=88RTC8)ItY z{&#CTrr@v1=k(QVHAD3f)%T}s>Y8*F+6;8OKN(||+%K`7;nTTi?x^g`hk=OMTU=8kgX2z=A_5W?h-qecd=KZ2q9MV zQ!Kaa!(e5P0j!RjiGUqt9o*lg71d+$x06fhOII{2iCq5C_BIu#fX3ahSfFpCFTJgs zt9E*(c#QJ&(oFbH+Zd*EKZvwojCv8<_^RiA{IvUTuD|ee&DFy1?#~A$9kM*^6 zKvpTT{c2Tp?BS*%Zti~GkYwSG3H7dcyA%GDWh-rgP(5@JFb8FrP~o^_I%C=08!@k( z5MulJYBGH$RhYFng63-WEt(4CKg3_DRePd~2lbr|ej72>d)SxCUf!Hen5da2l?4=O zUpcpk6l!d-Fwbuq&)&9cgKU2kD}Y$!NrS1XYTk&cMMgxc zOcX$0zN39U6F_c@v%DGC&a@~<^1gNL`O_GwSNkf8^aLmFOmx&n0wmwkq*z#KbbpVl zP@(ZgXhOa5Xbo9kVK*FQrqbEyl% zyH^!Cib4W4Ep5NRHY zVL?WON#_iRx#0F0gO2$Qsr?7(f{o5==gnzvv~jAUWEA45>@q84G8*;>t7NJBL}0l` zb}k99BI%xK>(wNZ#0`eigmYvYn$ez!TljLut$xP3uoCOZsj>6nGuiW@BGw)&HqFykdyIueb zP+=c?o=>oDTZK>X_We_qv2nc>(XK;bX~hw|)jE0rMkYDVw(O{1o&-a=b-|ZYw$$^m zpJEGTcIcXQ&#pR?I08yblahtuB-bk?!9T>Weezsnb$<2=_ob_HVB_KR4$U4u@(dN! z7T_j7j@A`UnVth3sBp+WUwU<@$)NhjO3Kw6SC=eCj7VU*7!;b`YUxB}Ncks@`#ypa zBbi`!)kL_eOQ|r%>U-p14hGxRe_VR75H5aYGV;r+j5?{In<6tf+5&HIuLhm<0cZeU zK{)*YdEh61$#HyHUAdYx9qoP1Jdm~E7S#N80&VgGq}ni|d!VS;c<>ZPa#roUdQG6+ z9kL`^Kp`@UQ>}byf^joL{uH@M9cp1;`pTTL*iOTt;7{Dwol!|6H*ee6(ol1e&;xb# z0WeIyH}scv6~zYEsOq-_FEhftoQq2W3MU2@3m{CoGq#;E$1kGrSY_zUo3a3x9^=xn z8(QlcM@)LFME%_U5V>0rj#OC@Cez?opQz&(9c=l0pRPwT(fz=)tdd{2_%Z9Rp-_ZX zBCpl=#P8hCkMAe1Pu>rNk|vd(f`lY-7#q=pM;Dg?rSm63 z-^eGV_rie`3H#?%qE>xC)4H%IZg&Oj^I(RD=9tBVMD}8TRzc8@fsbD*<9uvNB-?En zA2x#8%-|!shGDuhB{@YTgmQMUE0BaZx!f$^N! zC9o=(z{8>a(VMx5%BTtGJ1g&96(;q&`Qgaqhkarg{1DvvyoO!%(w#d^>Mz0?)43AI zfkYz1e*Lc(Y}(#j`fRj~sRabze8va-$go(^pJ$lLaadh+ag<7AI|e>YBPKie!ishp z)y2dIflnfjA+vedngqz?JabIT*)51g4Sb_^fd?K_ji@-VTS3tRFFpCaqhNB}nq!4N z4}t8xKf-4XrC--o{(`oF7;ses~SV4%AnG?_xZ%7dt$lV^D(Rx;=Ii}sl^9|@Wdm#ogzk~&)4A=Zg(V? zInniYd0;-ex&(ItSP&(xKJ0b&ezVapnr|jY6;lk$*FFDY@L+5~J>rmi%xH6z3adA| zoWQg^m-dP#7{_r^S82$s_H2?gh}~c9hKmhdz5scTTY^tpPfj2xuxK`Jp*u9FOME6( zf*z{SVePc)9#7RU<$ToLW9MfbQ7KuM7Nw^}Ta>pEZBp0@G%!y4y_VO+L|ej9+Sjnt zargdsOB@QletQ0X^>ncgeD!+I`g#!!VK)xTChlYNB?s(bWem>q@{Qa^KZ6Kzy zwqXD~dG8+gi?rR@*l7737t$2#HTckI<~Mry?R)lmJ^!4|R|Ut7r$JM$KOiP{%n|DX zu2aT7b=Z&a;-2M3G>2`!NjF>zbEi+n>CUXkRod-JuhH818ECbWhNVB{)+!~TTfE); z*6Sw5&s(ma`}u8N+ckXUZ^jQ>9{Ba|D88k|VV_=)e#2rpYPT9sPVVcRehR2qZR4c} zU_c{9hGThBI`k{xlz0YCrb+i)=*70xIXo}R>69kX0x8%cG;d)cvbAF~;F3)_+5ok7 z{mzs`VVmD3qLWd($|o$5`Zjt;XEDe1up;Kx6IKRPHa8FxwZ%-qLZMH`7u`rT;i1@? z2^vs{!6Hew4VapzT(zP-KBj^aG=)Yx4{T>9i{_>{&e_YWqWc#NbbQJR9tgCz*eriU z&m(044cJa{Fbiygbc6wSvtZM89j0R^RoYr=H7p&=<_Tdk-XiQR5C#@%HDRz>Z$nKn zIAa9{@)yXds88WP=qy$ihC(xZejGYe5&z1Rv;kDU1kFC91^1xqCFc%6@<7%n)#Il{ zk0zyfXlgh9VY#V3lNHN?w6t5m=u4tS>WNbY$|)_-yBurm#e=!|Dz8j6;l;pnn%w%Q zM>FLSZQU}K8#8cYZQs8sF#0ZRnp@>;m?VwW zke>eVadhC>$VAuQFm>+?stZR0-y(W53-eNz%Kyz?ep^4akE91}euv8dmxQjLM8B^J z#3%e7#Zk(a|1@@9=@SmEVq8~*XRTez?Xf1({aUXrpuP)>7B)#A{|%{=`Vh^v%ijb! z&r|TbD_wCmy84m`+v?{pUAp3UIi5x%*F*S!zQd6m7ui2$A-qqBD)fb#LmoXSoN8PM z&m>aH0nFX$!_`Qd?@IZSpo05~Mg{_DfU_hz^0k~X_SAia(Zrmrc8U-D{e&LY8hz?q zZsDqqA8&-tP|#f`f8%1pAjz1qCj%)@ppgXhk3F7Wqa1j^InC_>e-i$7n}KJ5jp@ z?~Wt5Ao=-31)&$qTl2O{vweJ>956pDliriu;CXGOvCAtM${NaWzzlkAkIZL0^y`kr zVzN}^!JzJ+;>x`Y_W2vS=~KF%`q4GN3CnS7sPurzJi~DP8RDBo@05SPbRA^q%1Ox> zNnODFoZ3?_)(Y0`ukSD;s&+MY{KhL@&z9^+3I+&uu#-%l@5vMt6=D17AK_=oFa_@< zMifazI)`Wr0xNgFG^5ADhm%G&Rh8^w)4l*!rL!kuU~R&IbLWN;27tWB0U=lo9dEZ2 zKsnoKgylL(C?26E?#I)k0TA{CfC)$pu4jK-kqg&fqR*8ez9O zu&#fBiLgln5%sasT)n|PVz!?nurp9qAr}5rNZ~XJFw&=(?R0*>1DVFjnamurr`5v^ znU>ZZNt<&CFdf3$?w9ABBgoCq7mA+D*go|Y9%q;EbL^b2g0Jgrb7Jx|8L6nfC^6HI zc}};CyE2!|&TaZDVSCJ&7J7O4;7xYk1Key%>!WFyU}h^^8P&Hs;ZD{(Z;b6wz3u9< z)!agQ$vl6{ky51E6jm(mD;=epReYmz^#hq@0?3(uWs_b~Q}wu51hPRAK47!7#L|ta zUf`n37Mon?a$;&%`U`P!gkLACbC^(+^<{%>{s6Rr$X>FT{=yaN&|jn7)xIK1%ym8ApOI_inX`w>8`oX~&tKN*GBe)! zJlx*SGv2-T-=n-fT51#H@26QG-FJ(R9qxaP@SXkBni$G%{(IFw*TC~4i~aYteQuvvX6;#NIGY|Ul}Ct%6_ znYyW7Wqaj=a283zx{8vy%U>`?Vy2^^;!K|kpNlkbi#5uY3$C)ZtW6GN7m}Q? zwI+@@O^0m>Fabd!T--SFw;I;Ag$k80)etec%JIAmS8bY0%fSnuxOoGhpaH*=T z3VS37kno*2^EO4i)^$0fpbx{L9#3xk7#sI$Jx1VoJHkRmZWfEf#Vvz44qV%CRZ4!0 z7+43cr;n}EiWqheIDOTqlZ&WmPP~=-Y*i6O_w(J#q%&U3P?E0WZ-D3%~f(yDfI+&2a@oPm~5vVY)oe zAAYIuf%ry=&Q5{)Hh5kv0*0)X9yawmo}B^<>Oi_B70G&l8yGu_SsoOt z8y|;2gjvR=5(|}z_Cs8F!pg<3$}ur;n`8-Wh~XX)%`jNmI5>@oOtXU5GDB5%%%~yB z`6gRyt^&(m#Xsm8Vi(3JGrN8(Wy zqeHuX%bWH!^5!GmEBXGbYRW9`G+!b&d?YP1=O^((@{N8EnY6;XeJ{8Gc*+6a0#{<+ z{pq^bw^HQ>7W4G~j6yy7ESPiwQ_f|MWD+k*&pwtxTCpK=$8F?}}IyeR6Xy=mQ&sgYcZaH`d1_qw6zorV; zYcuXD0fpNKJs6>-w@g~*66zPeve`SWJF7e*E1~}R*0S?>x)BoM_0Gc*8VVj(UDg5q zZS&O8&?|KKr$*srMU^6<-#1@gpSs}P2(AYLH?!-fw87~aHU_J29zABwC$$*n2plSyzoG+THoo+?IMhtg1!Qn*eRX4l9lyj`9|5 z@K-DLXgt3owVucm;}OMkX3pVxx%sKAFKdib-DrPGXg%nSQ)B21zCevnaa z=*$RV@nkqJyVQ81EH4imLO=_#Iyf#&MJ2{ja0>Xkd-Jg^Jt(Kt`V|D7-}do5KHui6 zHD%$t5TeKrc@UKLJKmSiW9TQIa3rqD(In|AsK@$u5Ql@eR( zM2<{RCv2{-)L}2KyhoGuL(!$FO#^t!JmtQ#`$;J zLnF&AHYJjjGs@lzv^LD4pHt-WjlsvUzL{7lX(wH{>}1hUr(CmqXBC3zHZRLOrtzS$ z{z*h`IUbRl=UFKOL7MTCG=~njfvR3?3wLTWPZ2m8=gx$P8}A=>sCGw-wK^pvPj7|g zo7(|1V@CV6< zW-d4lOV4{+1i=^}D`i|}WW1n1VQCLbbjD7YYH{%X5y-%6!5opH>`PWCYkO|Y3y@#P zIe)5DQ;Fg_wXM{(bLVyo&BZ*F8R%IeCgvsjHbwE~vvSvm8A~z0q>pNaVCzYM|{ zv2IN)3B~jsv4w){W~Qg1-f!=b3Bp(& ziYcm7s9!=o)_`5rC2B^voFq`28YdJwYMU?45?o&I)(HMuyo5a11&}`V+?E4`5$I zIHv0IUuGJkuv)-Y7P8-w66Iv=PE95fcp}2$I>zt;4?6?0YVc{uXrB$bk1YW{Qdf7O z%SjirKkoeoQXnK6yY7>(ewXr!G41g1nxZSnyb0TGUPr;i4@|S(b>VlpPHM;4rw+TC z7#}OvoSV^|h%D$on@jCenJ|ZsY(H|_fxp?7>O22Y##}t!cBrcp*@)`+SqnHdJ`i$+ z(gO|0$_)p^4&6p^U$}i|_mP0_iCg9h@jrw!Sjy|cz!|9AW7DsM-^!+MMG)UZ$CcI=gSw;qdxdzT)z8Fn_FEua+e?Nn-inxIv27(xr@do(1i6Ur` z`m+XD^v$phhFTv-oI0w8T0<{_}qj8g5s^2SU>l)tpBFQ^$rAr2u_3OypI|wImJKNo){VgU`YFP&WW&P z^ep{PH8@5z$Hi>*52&&mPd^Dj1nWy0Y4+D!-mEMWok#~`!0wUSY~`c)BO~N0RdxQn zW?4ve%6*@V&@{rzz=i^<8~wub#cs_*mngb}ET=FM;iy{`BH9lcp-^e31y|b%y>8gy zSmZL1n14^c0^hnP)FuC5X#O$@Rr0eg-g7_7ViA#k#E5Y$&WuIMY%*|ia;URUJ%kIU z3Ow8(hly{>JXIeO*Y_5Ps?8Ckof(s^f@G)Dt*sXup1Y!yKhoE9_F_JFio1l$@BS;% zNYpePaX-r2U^1XSx~+X4>Jq>cbmYO#w84<2b=G1;gfR{_39p1|FC~l>3bctB(=-ik zgbI5#Tw~95Sw@zN4T#bN#7ES>EF>TaNHr*wWu6>Dv?d%R{0a%nN{v&&yAcdRi1lCUF}F(|Y)ba0 zaWMp(ugL>6fV|LR0r*Y#;eQn6BG8HnNa*xenzjeReB_^i3JVJhph#!J8IR+h3nIpKWfA!epCeVxPT2i zv!x6&^K=B7RN@t@gnZ`IA)5a&N$XR8nIzBN50msCl617KYo2sXEb@fHNcq*w4<*Gu z4H7f>WX!SaV85(ekO^O7O;#Ya$J8K*&>jC<>nLUGxst-g^YQWKvpt8f&dlrUVx7za z?mqoxFsFg4co$IYdDytGE0h*iWR08bUz!9!tSZ*}ziE z7aLC<&Yv@~Q~vG5&1ATMZhCEwSJNr9+$k*rKcrEy z%!-~4h)n1*=g_-tV=UmZD&4Q%e z`f+65UFdef!AE5m58zVnujANIjrM=Rk$vO;4{-E*4A4BRiTc}o-C<^7`7rBVsO?sP zj`!FeygB3T@#6aBXg2V6uz^Bi>TZDr(EJ zct)ULE*!f_BHF&JCP$q5bE%IY5lD3`E*qB`L&1^jt5$+zArd%MbrB2k;T(b&DfG{gyt^2qAod} zh)Oz9FF@u>(T7WXfw~K>0204v*OtLB$t0yM3$swM5vj~VUSmPG$lV2#qgh*V1=vt? zl@~-(Hnn2L;&j>^TmLfcWv@%(5sgSwgYkKDBZYi_Z)IsM z99NWAA?tngf@ATi>ebnU#Qs;FH%7{}B0j9sJ0aW+w4%4V#yj*n76XBij4p+V4 zq{r+qqe(-m{Lqd8h_Cl%YLKASOki2eFzJBNSTzl1KodUmyrDcE3+0b8oTtlqH`$+C z#>yW8x?u5UFhZIhuB;5+_we7>~QIrIYG%?2DF;1LZXomY_iwA-d(q%Fk*$sb!aDO3W7peJu% z1v#|B8B)PHWN9^aldzL4WCdtbkGHu1L%ph#ApGmckMzuMC*sDlUwoDZv!6+>7NhJA zZnuhXnOuYwhm36Yfut*XI&f5Qd@b` z9D*hhIS-VxmTcicnbE@ z9XtZmoYR&=dlRnswFOGh08bhr^s=|+;LsD6yf43<$}Wq3=|Fl=c|zm2M~obKY8;g$ zpcFq0VVUVH2D8%DI2Dm4h7N+297{G772%3}eK?ep2^sXt2Oq1gUPH}dWEuW-8};Ax z*j8DE*=mN2aAY^TT`!_~>Yb;?PVcX1-OElxN*g}6Tz7FN#b_6|GW$M$hcdLFl*>M; z2}d7Vezf)0w~_TrFf^@r@s5s=13Zo|63|DHlj1Vk7%W$;{JiJCtaWWKiw+{Q!VX%t zZ*M0^5}VY^aFCgm|D=7t`x3lTQ^w7>|WXU*UAYZwauw~NDB*n%L8N*S>7%=k-1Dk_2H!{c5+miLcCLEXmz zH-Q$}MW49N#HtLcjXvhe%rb5~B(RmG@%#}FJ}y=Aq%Twr4MSwIX;_OXi$K$5z~Zx; z106rEMtKruhScrPX9x6t}8C8kj1l`svg4K$2!0Ov~l^9pCRdR9&F%)6Zx}7}KfhD|pATO95G*4$Dic z+0G9*KMhV9`Q!wY@g=t?e(V zhl6)lL)*w*PPOp{vu`psC9YtAPb19GE3{z9pE=>aCG~W0fdYNh;1F@e%wC?YOE1|y zSE0QkeQJG3!Mr{ITe@a}jc&S)gX~|UQ4^C?W`(0BDpGeeRdAy!mhX6rNsdVj86Bxk zYtYrYGagS=i}}-~J;l!%LahmMtBTgH9W(yT5U+D^U*(Hrdx$iRsl7=|3n}%>SNDNl zzNcm{pQnr{gIL!TcwEQ~1KK+URDu&LfRfJuLVzpK!WqCE$OV4hHiRL3bukRl_6yog zmXtN1qRz2^Kwe0PH8B`**|EI{b-Ez})>$y9DV4@hBz%^w9xmS2qy`kH@s-XTEL@MM-jz@23#jz(jFy4q12FbpFlI0R%11wfH43MBAZqUl)yuEi>! zU}>)kDtCX|ANEv|9PHd1e)DrURkrIkd+1V}dvb482AZUJYT1lZ4zS?c7(&0Tma<&T ziK1BbTm+5)O%3++4LO+E{mM@6b5a~K+e7vp8XR3|GlkwKAB6>y@yhRaNIX5?7t0~A z7FTxeKqz+f9L3fJ$$tVXlq%q>KY30Qu6Di%*oTF>(rH0&CJRy~KKh~ zlx3930BV&TL9}7UiF~J(wns=~lB5~y`g*bQpEuIyhr?53Vj={kenXVGxDkIv(glVH zNq_59EtwRB1w)VJ#9)csd5DZ}+Xc)*UfB(CHi9`9#@@5Ivk_~967gCpFzVB&OpTLW zFlj8`+kLMCa21m^vxH`pG~YYT>p9^~fL=K%9MlUzXcuN`*SJgzL642sq39>QL>Zw1 zHkVZU!`|{M3*84nn}L>Tvkgn?Od&}tG?jT@U_}^_^tu&)oa;0YA(!Y@lqzs`yQ#!+ z+t#EtOq*TWhrdCQ6Ub-MDp%qC((NW$4;`1=a7fadpDVc&UsD$-R747LEFWAB2hu6m z$j&_mmb@zrs;c80R4ws!TiLOGhfZ9)-qnV!lys}g%#i_|ThYglB5C)yg5cshCaq1l6-~E=F zwj-F~F~J;~oV#?6RYQ?lR7a6}lw8CUt@Rw(GP!E~Kl|T~_cJT$xFbHw196pnX;_$> zF(4sib1f8vIWeu&3T;o zs5HqTGEu>)ziZAsq=!x!_{)+e^AqH7{EYosFLB3J%9pXf4>q7jJI=VqDz)QadUQ;J zv4UABuaP`wFOD&kyNI)D0o7Gq6bJTLDlW5G6OBY9XbEFoa@d1&Pqxr=dJCg3!4`uT zA+kmEWSb1N!63#o?Ieqn$UvGw|Ly1BWG-20_R{>VU9FI(7&c`+EY3*hVifvGGT0K7@HsqJv-`nDeh z7+0g7hj2ESwVEE0Q*c z>`R~wtTCgf1n>e0%&{-fHVxt`C(X~rupbzF_pT*S( z!~VM;UJVr3o4s{5IQyJHD@863u1lFXqK1%Q3TuAG*d>n0D$0X=O))VZ!97Wr@bLxH z;cCx!=8bPvLopY|*{M@MGx{RczwQL$0*Jn6JKMQ`CIZ#o0GNS2Urd%`@Z7f8e3EY` zup060izbWh4^wMR<{Gyk;O88>G|PX^#YYZAr_aQHLeAV>uuJJ{{4oio@tjFoNW31x zliNK^%LuXXQ~+F|M}US58n`PvZDVk?#Svz4=_eAxasRpX%er<}GN2or~1 zgz|D$gLxx$R}KpZ=o9Zjo!Zhs8nm#{0t;8hEni9KQB!isIb3ZBBCaC4Ix5{L)nIO} z6VRw*7p?tiYp4!2kMik;*7o#AdI}3z#qzmA%(3ar*|`6Vt;lh!A!^m5^U3EiOX(`r z&a=j;;ib&zsZG2pg0CvyOdi6O2$5Y%4vjkDqb5n6EM@M1gv#D-+Ul+^RB6Q*F;50g zE*e3`?gj-Kyw!syv?jbZBW>M~QG>xV<<1A5Hm0~;vt>soTTfT}n}yfm$Akk*PGy7x zPryJE7M5l924{_JHOZ|$Wp!Ai0tGaAZ%T6^<=ibDP(@!bgMz7DO|NJ0C989DxyMqb zliQ@`?Vm5eM(fYUmkY#)1gCJ41gfJ_YA!k7h0}F2GP9sF;k(a9%|cIJ&rgG7qc)#q+*T*EvkQ7~1MN z_A0UXm_#qQN^%7t`d&r<=-MafG=u5`ZRGIqZnz{|9!dKJg4{|4y`IZmq$f<>R-@Ri zUb?UL6(7;+*-pt){8Aa+g5snqBiJqXL@K(~S=+y#`7`h_a=;bWSpr^~usP_6OZMo}cAg*zYlxz1b?KAuml@GI)9n!UpLcA?u6r!=>|`Bj9+k&jRq#2Dx^zWTO!8C} zv@*SNrRbWYC$<+|#Lx%|@gLFSd=Bdif#v2&Ky_z&-G3Wh_*B1ehvM zGEeCi^!u^nqHkO=Xbbt0%YufYq*YTO+ zY5zk#ntJ|E^a%Vvq#nQHEuT4!yd+P19|jqNjkqsOq7yU+^L(Q5!a5>^vt5lLmE})0E}lI8B1vVq@aqc)#b#@3~j}2`}@-TC8hh+_CY0{yhQ- zgfy6|rjEFve?TO2&{7-pw1P->an3I`-!5o0_F^z(dMbOi%}k!QnO;WzDe(D`qL|rg zVM#*}7DbY(k0GNJ&}7J_jy(AIAae9s-*CPGwV&EpG$?wg0cuv(>enG;wvipFf|fh4 zCEbnPCS}KW*~~xj6WdKWt?^<`S}Z~v_0Vtafn_H| z;bB&9x*?t1!V6;zxiCpl1@-j#G7va>NVSsvfN!Iv@eN!o0K({T9B80o`5_7_AH@^YG} zKcufZ*@-?NGEn_Et}e@6#t@ z%$s5_pODs5H<%g11bmZed5W9-47sM@E5(Tr+ezob?LP!0jFVfW8scTWvzSCM27fNp zJNAf_ij)zco5Y{3WZ^T;DHM?{=8h_BZC*a);jRpjU;}14bQb?GJt2Y4C+Xxmqc2z@ z%O30Sf&>jY{;)kxuttC3m&GjH6vR|g?g`6RUei{Q;DyT6yl*OHnfV#P`Zp>=+%Ep! zak)581I#y3h8_qlV(-dwVk%LZtLC4IZ?7^b*BR}w7iwKdm+@8P`hsG)3P2sNx4(gJ zHpXd&<_qoF@g)0H*i;>QuO4txtIDZMnmd5JW67Zf6sAsIW@o}x{{a=QCyV-acD+;oqpkkpj20x9`4I`hkdN5!*OkDlZdApzF(Eg$ z#b2N{rU`4qVrk+v#-7}XoHG7LXM3fJGdfx)#HrS^N-w>vzJ>v9F3n>3-_U~10|6G3+ z;CsLScMfp6D=9=yuDe%xN{jZ41Sw?3*^8m1@3rNr|t^IFAv!H{m`3@On?eux|{ ze#2NYb9N=R71|`Z%;>H*)Sx!}ZWm7k52|gw|HWm}eOgdv`p0F82z=p_{*;`-vc2KfHpi!9^@}5x()m_I1oH%Vhtt(s7j}L9o$LB^{9(0)%4Lu3la%F z)ohDqO^O4Fz3;UZJDs5fW_)s}cU9xt<=j!v+>t6ADPk5*28$2i>Ae%@B!2e$7xjca z3P%|7u6s9spr+;8qdD&>5Am=J-2}>0Qin;85bk+8h?_RdfGQ$qf-bU;qk+o_zvH8? zz*n_mc9<+UMmF8e?>|otCX9bMw5*P(;#WU~iPQ%QUgcg=+^qMqqbHNRy~y22^y>3c z{=a57n0s%6s>pJ-JLW|nl`F6b&+O!{d~xFcy>P-n`ORC3={PRK^rbr=NNIdRr}x{@ zaIG6#SKu@mkfrqR5u&(z({G&X)a9UKD>mL?Q%~C{@HY$9!AU2nMDseOJ^KCs=2yA5 zn>dKH7LEl#F{o_(5_9kksBDXx%F-AZG+eU>I@WPGlAU07u z;;LYx_+ap-|8Q0R?Eh%hwExno+PXwpEB~ccvwFd{o(ANUMkl?dhQ6RS*v+fdClGSiG3HALO$!T3bQ=fC1(pC~3r$1-z(}17eA}*$?Sh+RNwrBVz>oQDoNs(L5Rj~!J zNSJ7sG$lsD=aFBiir;;6jtzDc;ne_GLV8;}Lk$^)=~FDrl|@&GabYS2O+fD-6lO_^^Z z7V;T~;naN9QDwkE|NS+sLt=$GGf$)mniYbv7=6=XUg*x=AM>Os8AIy6 za%XDi)UiQpx*;+AtiWpGH^%o=PeIpSV(%J=wm}1AmPYuNFYm+tt(5P=XM@1bwrdBc zv4X$`WrtUl;+x0Hfq-|@g;=2Ha#>=MY42%p(5jU>ytY_H+Fv}DmGf^N>ol1j-EvU= z-+63ZfBgg+w{>W^m_|*ASG(W<;SdGbG>W>wZtPd<=UU=uq{FXx$aebyuQ2wC>Va@m zjOwgH;Jb9yU)jh${$;qA2gN1_VP+H@Y*wT)1&Fw}~Rolumm9Z9E3N{zGCLNQwR;vB#&= zGy05wli2?uV)JGL9p)nTUbKui2v!!OvkjPaX)NeJ%CpuD0>$*D>|ICnf^;8FK2o4g zeB?L9{_K8U6CSfHK6pyHL*(Ix>io7SK3MK!@-Z;+G0<}Uaas2<^K8@NBTMSvGs}HG zrhQo2AOil6ET?ym1SrEFe?N8|y!>% zZNp#p`MBrDR(~&Ev2YEHOe*3~c`>l1hR+=1icD@bmFE0rZi;dvLVM7^-i$U=a$Fyv zu*VV^W|f;$Wj!pdK26%$=fH8a&#GC&{8U(f9jTm4)bx>g0iUZnoFVtBXF+nlkf-!) z;o2=0E6HCSsMclDbsD7m*sbh%Fxx<0nhK!NqB)k#)2`M-J==Gpg39u<@%TyD6wCsO zEuq~jGOIHx@FQ&E)1O>B+zq4EbwA6*RyNQUcu(29{Jh!!+Pa!|`|HB$&&^~eJ=bDn z=xpY2wKe-Ov*`-NN4%x9k-#!^qJ?tAWABrO{MfktkI2 zz@yHtbXBb+bFR=xvJBGzm&B9JuQ>&6&KVYAq3@YWb-|!F1EX$z zT!cedJ6M-jt=NjY0CTHdI&|q@(jq?UZwZG(hX(|I*B+G+~$l%CX{Ju zUQDia`s+%2L4d4FbS|YV60k$E(Rg*D7Nfa#Zs~uFD3=J{t+R)7o`R{@6syX1F8;Eo zXQ&-T^NV_6gIaPCq*N5N`?3%*tLh>EH6J!{0|p&Vr#!{KkPnC*uZa7Dc>z~jF!wE-u~SWQrR}a#}^#!`p=5^1p<1CS-?bY^gwQC zM=prs0bCyF$b7S@N9>OUURK0&M9~IOio#$<#@=u93-5%3vA5A4_M(!7A}KG^ZDiIh z)Wn@zJGR}Gzijd*XIqI17cf3xXP}F!u zH@^R(7>d3+6kW<6M;PSQS2$aVucwyfQn9OM5xZ`{F9sM2k}S{zI!#^+fy@2AxJIQ( z-^WHmVTV|_v(5P(c-{1}yvU|ZSH9(cAIcol+~gA@TSk3^)l1$i&#@uZagf#Kh}=Eu z6}=#HYq?*W!K$|4w0*@;;J;?vgKz;zxb7t|&~vEm%t|@Q>>njIaJY2cii}s)y$Tng zUtehg@w)ymzRoE)lYmXzu{p7ATN9fT+qSJYwkEc1+qP}n$;8-v2mAlKCtKBrebQCk zT~FW7)z=LzIX`TaEUGQbC}!REC$e>3o7EIuP*k64nSK1al{|X3lQBMX(Rv=0wGn6) zna9oBSA-AR>BI`qxlP+Ro4OYdzCcSLz_LZPwmzGsbeQ66qt+eL>=c1dgzUwDGWP0j z?dh)-ALk;OA}%1>-Av)c4CIb^oa#RqTr)WZU@!Pr!ML<7nO9PuCbOXvrN^Gn+UhqI zKY39C}CYu^BRHn3s>d`{qhT3a_gzv92pN?#*3Y0no8qP&nc!l4pK@NWZ=$}MMc0@d0u|G0QA+)T2hmAti@#zvfE)=W4Jnbc@ zCN=N+T353{#X_yovV-}AdMRMj+V}SipnjGvM2{OeQDGD|rA;QsN>wy}n6c8wEvom0 z04>j^p3w#MqcMenT24iub|Pn;F-L~$Wo)af6#qSg)!Rx4k9Qh^d`?kHYh&ckQM0uh z%df2yXwX@K*a-9FiOj^UgiC9^h)JSE< zyMCOsm8ll;$?b}i14KC&l5LL0SYc27pk6Q>5IYiy2ZjyOGO2LxHyWOqj|%%<&vp{? z%DYtWi>)VU=3%Kyc#(b|5tZ5vFp;TD=HS{;gS?(km^Fa)6__1C#&Qiq#x#%`y&>Yl z*rCTqlJCUb>i}&uMA(gvdJcb+WSrGaK8|O-ge@cBxGyBa;W9yc7LV-?eV-uq&i2di zm|U7(icjXb*CBA~MOAd2y&wU6(ioWMNi9llCZw9?>51Xb)6gKEp+WlsdekV{BgM-n zrtT)EI<^$!mq9$JobW4&D_}1Cg!JO`dP+J zfI~e{fq@AEoY%k!W%e^x?E)MtTnfsP&oRd!Sw4GtLzLItWr!^&$FC>b%LqXt%l5 z5iS@Rfld4*TkOgdjVwb<;~bFoaizrFIsZb$9=x4^0IKB+343;G{Cc0R_fH3}qKlCj ziY(4BXYac^_^4i_OUSt@gkI63M>dP&L^&*86Q`cX(iP{0^d`KON2wSJ<)#GVdZ)ww z4sw?xbUg!ya1)q4ez6WvcN|lLT(jt(WL}mIoDN{GU|uPnJk-Wwu#{RzJwAuXZ-<5e zK?yV$K!y;Eq!TL(apY*)#O-+@M(#>JPuK7)w)w`8mkQehh*2JmxmJ@jG6dO zc&=>Tubo0NXuc3DB24VbPZQm|;JrYt@loe1-fOJe{$whUlY=s#0%F_Nw7XW`ZQJ)u z=ib>cFzgrPat%)UzwQ)I(l*YD{K@5}p%aDagpNmT)0du3(ns`PGF*pNc3V?ap6{wdeF|?Z(Q~dUTu>gFuFd-EP?t5gyq*2rm zRs&!`c&f^OAkm5Wjbactckw(B&39a`p?XBa^sg(o!y;5DVLqmQ{_JIRLPv9o%8iBN zA3k{y)}*bzCHF_4yQv=5unyfnsKtmJjojX%>t{^fkk&q%L5MWK`iG(o3h2+?` z08(~GD-@No)lT7P0A>QdOR;G9L7jzJUP1ds_v*g&jr}BcTM2LM6-gf&0zN@s^2Jf; z{^0z=0s*&{C8fWy^)5ahIzOryAs~H>)TOn8(`hp;?XauCr?(8jQu;jKBTvR`)(M`w z@ZJnBz7k9D3pGYO|6Emjeme~KO$F01x)`DaDF8bw-BEX(YB6LUyBD@#=|O&N^w_Xx z$UZ-5P5LM-Id(H?-oM;oA=*pP_;xXR4-e)o&v&-ko5I!z90ahOJw|LkubAOyCj5r) z6mRphRBNz1)r(Cd9*i?levvwS`!>6=Yu#wA@^N^n&@VHilcbZ}ko1y^waalWtIs@V zZ+4+0)9{JkMo$Np#D(`C10qT5;@bJ_seOikU@7EGMJD6cFbrM*wOzWsNcE?wZskqAFslBY|LlTAD%X%Nwo9Fr*8ehV$ZnJs`XYJ!JMN zte|xqERApZ{?_^taMC2N#I$1p5muE9JJL`(u#d6sm3)u(-o4Y#F^dSf9dfBp@Vpb& z%gGKd!N?;wmOPU}kcy+0;gtK%&f>r0|1Ls{(;XiHa0A--HPK>ww$j<~4a9+BhN|lt0UZX!T0m1Cm{LW6 zP+xCEcn$veH$O*JT|zux=l1@DqL5p=PF^>1H=4H@s}WX|@X&aNTImSO@@T*LjiotI zG%r&I8UU)(DSuhDwVhlBHeUDFvz6M-D4e7C6%WDRu9!*p!FFgvmZ3<;W2w@-kvDbt z=iT=7-a1jUzbH^&DeiOyyWXMOV5|j8>l_-LU;4gUEYIpFAKhy0S3F~sRB8PPIAJpb z7K%n~w@Zvx5s%)4&j*?zeDY{E$}W5SJi^XZivh69@AL)S5bwsE*U+-eK6`%ldi8<6 zLGs_jqv>CqwWv-5K5=G!M{Zb6gC|d1(eNcVP>TjD0z27<*Z*OZ6I5gB0lgKAI zAj>hzk!#dHf4rd%5U=@y_Ov7^yCd?|WL#40#k)ta0Y@axE29icWdD}10k$Jg8KLa*T5A$ zb*TfFUj^cPaMIE6GzLNZ1ndd^Cb6p{Qt$L_Ix#3&Z8`xn_%i8yAE2v2DD(JCasbD$ zM*iHFiPn3D0+`+?GY$3D=JQipTT%9B!=M7Y9!nW*ts6~FkIRq4t1*819^TK9jRX#} zvZ>2Fe0U>rt%#B5SREk-2SXM~J>)`w=P=hrD(vRo+tB#uVVDOQO!t?B=+4Hplsy`9 zGtZLQEq&7JLEwR$5rd%xn`VCK@;w?mH0NmM9gs73Poa~g zf+Ky`@X_}E`m&!?Lr329R=%Is>K;+CPT-iVL?yVqxw=+m34QceF8iYAjETRPIDFjTCSdf&F+;3e6)5Ctcz?z)UvoZYr z*0aTbj4LYSKR1@veSdhiJfJkX0f$l!Vycj?w&cKsE>aPZ6C|zs0 zG;TtN&PqEzX4y#=*50v7eEc#}svE^s6X@LXJNQ3U*itq+211^nYT&7=o%rca|I-H)N=5-ZSIK#&Q8|}ZW`)u~9Hi;AV z-fqaD%Y*r$xK17Jer=x3HhoG&P!$J@61QkW4>6iCWcy_NzOsY02wT zf^P=Kh#`L>#|^pg<^UpLQrX~)Nls~iCOwxo?R<#%8*5R33=1~PywWL*;RViXf`H=~ zhNic>u1j+B7;Vmg?--Ze%K38*KDw=?#R{*+U~DL%f1IaUjzvK$ensF;^G!$*XNtK5 zJuODlQOc1*jJ9+$$;zK8PlaOwxqqUn!1VUE^|{1OBkn5ahXJ)JI_erB!*8A;nA7L=f$-U{WSEQXL3_bDzWy+N#6#m2pBE*i8Mu1OO-ul2qws zd1d9e&T;eDQOF2*Z^e!l5<{$?bEBIB68mEBY5l72?VJ@ zc%(@%EWAyS>v7$?dJeoJJr9wVyHNwKd^Gx)nKpy z@dog>`z}^#>O51(0_m^%xedg;*tJb^)RX0T+?nuXq#vAAi&x=NuGQ{bUC0;P4b1ux&qIAx?rFVTd8&Pk!)f+Q+NYW8p%bVy z_`lVeFugZo461k7C+3fYl^H6GbD5AiTzmn zS!Axq>}lNkp$v!w!A<++D(#1nhahD}7&RMeQTqF=s4w_<`edI{hw#1&iWD`t5XdiC zM9{bok2f#rcTy|VTqMA7wtb9m#Vp}1n$R~D5;k|`{uc2NTR#g-j0TJu$mlab*Xa59 zsMcLJjJwE>EY*XOqlPHzTjuUU=r98Xs+%q~yxQ$t-RSXR;-A0WoxtACYLe2ByK>llF#_+W)~?L7)1$-^!Ui_w z^d9`jFt*u6p0owRt2jhm(jyTxW_Z_v~~gzpN&!4p#8fz{^GK`*|jLeXUK$>+p1O!hck$ zL~^acHZW^v9-N-Bjvi@mZ)KvE@mYeG8`q_6YVG(A06g4U66+fzB4vDW^E{W|@ABmN z9kE&y4Txlr-}0|Nrc{7g-C+yJtg&%l1&CoHy~Fxtd$UZbmWD->qcLn+>~*0kNN*vt z!DOOUfWz{d>N)F`tF0>NeRgIp+Cyan+e+4VG-CbkN<6oi z2qHfh_1o}DxQqqY3ZFQxSgrnf7lF6F1ewiFK#+`Rz(z27RRvJ^8=<~1qhhBFoX|RT zV^460!^WTAS#Z8aJ^U9QTmtctQ)g}Pm|_8bTZ z)zH0ZESb2*Yw+&_7q>V?l^WMX>v-KGeo&Kv(zSZr<~dG{;pyw`-bQw!50uV25*~$v z1L(LV2oo*Fr6$1GlZ?={WD&+hI_DX6AA{)|xTLP)ee_f~rIH_xJU3Zo_sZ3aq@tLn zh3`}owql~uu(MA=jn^eX$&fYUC_6$6`c-tMmB}%$xM;ehI?}Ai@q0(I99n$2$$<)H z*XenoBy{U&NHiXcGh7Xh#FJlwRPNwAIPqo)3aa%ykpdm--2wj!E$LzwsLJyM3Z0|maM zIM8g9{u{t(YrHsoNOaJj3Dm2|4@i0%c!*qRB=9v7X`0X!;;#ytb7|t4|AEeRM0JxX zmZa2_iOk(WuMDG%wqt3G-~oUb@DlMJ_x8i_k-BKi&voNwiL|G9wE(2mtzbK;?C4Y* zAQ^(!^U)?|7Y+3Ov&v3C@?q;oF`TlQ&uXC5%gqXl;kAjj zFo6nxefeqs715@t^010_(6B_B$VLlKxchc0D=iAcXD=$8WD#psm7vq_Oq?k%Zwr!z zE9pD?iWW*6pqN@FJ=sZ2UA-NsW)EUav!8{Lx}CZ$2;tD=6_wYp+y(TZgu zd3TK^NJ-)hs+x1se2ANfnn9#cEJ#$DYkfhZiu&(aFh~&l8@h2%ZmGjTpFN8) z!uQ9!U5syPpPsMJN6A6X2fweAx3}}-r{0dYi;KgPo5#n(bGh!;ZjUebn{MVOZ{6R6 z1OCsA7{O>UAPF<{8}ny%vT-R)LhHx4JZZ!RRHSD>9yDD)Wt$}!rblm$9`r% zSL7tFfe1QUP`5P5o69s;sguM%CkWfk2ogSsWO3;>)S2$J(yUJFgfHs{OrxsNvOulC z!h%L#U9)XU#uV^lFR~Be9(-gz;((nwct33W;1GIB5Nt$BS48QJaeA<>>bdARGs1HJ z{e8X5_wTLiCG5tNtPUnknKm|F+*6d#1WlQh@I4CZ+8oR(dGQ-qGK3gc z6zHbQ&C4-pp{(3%vw?;jh!^M9bjBgQe{1Dn6@l&%3VR)dDXV58XbUs(OpIF@-CScH zD8DP`xR01)uWb@+&N9e5p6}Fs18YQCIui{aJxK=-4 z*#;@iw7dOW3e@4AM6@Opw}WTuzRRrPFONRk!8bXzwjSaA(NrA>pBAj)Hv^%>^uo72 z+bhwb>R`7FH{Z_eIuyO%ZQ`&n#~o1a_}6@iY?_Ipzn5bJH+12St^oKl6um)#r*>>N z{flUVmA$}KNam($NQhl8g!ISP_GLj#dR)Y7{GSf3a%G4>suuUU!94z$kXO}kSsXo^ zO^p=WWf1p}{cvrzg*GdaU^GqdLt`5{>}pcuqEmg1unP)MYF3Yg&zlm zmPzn~7HxDSObF^IcDkM)&}3nJk>=DVCGDT5?DLBwmv*slCVXPpi5sg)Da>-eIT zh#KQ#wP&yt6nhNf+DZwjO9Ey4+Oehbkh(2^XGmQ=z7?5$dzjQd6z`qCS+jbeL+!r; zXp~>XhfLmOs{p*4BARtvRANm!op2TC7a&r2EHL*vm!jW=VkgmAKQG;f?66Iz3HNLs z#aqh4`Tgw`sW0_N!zt3mM1<;tCuUKVFM8Ma=z?B`e0oYP@!GV)_MHaEQlCKYBd{F4 zx8mPKE4vlX6g$XJYN4>3!UeLG-=cq#FPbPDHD`|;@&HbZeSdCmvP7BPN#ygs`GkT( zxalSZ(FH$cnmey3&2YKU3^>aFREWNCO}fzFwb#U&U6MxeT;N7zzh~EGtS0~wm|iob zZFVN75Qa=`D;d?e3{lGgL1`29`i~z~OnM9UNPn^|1+PYJ385SS>*X@R`L*vN zE&RJ|6@vH8yW@nhDP){*!lZno39j% z_|~E+X0Xb5x?P2=Fkk_Qr9I3#Bv*<;(Eu=Vwn7|9sns|SP6K-_0bMH-i0sZ-^!*Dw zU5d=xQNL*@@S4<8 zpYOZ%vy`GRjvP6RdG8KthN>vB9f{_Q#3?!qE*DtWD@QyhAYi{5x2_A>47(i?@g=1YjE&;5aCzD6eVA|!88QGdVKf*;@@)*S^AEb|bl9c9llYou)|eDT zbxpu-U@t^pz%c!+^)AI~CN=;Pvud}er>sfHqKxX+eOM;=EV+WhfS`h9FLIyLYqR+; zvUped8SX*Zr5IP_mL9^lQk>hlQVfe!UC9mgT#z~tKcy%H(NKi_70%6_ePNAJnRO^f z`WuvOl1BQgN0PRCDu4OyUMmPxGMwQwBB0QhIOx5l<(xYzxff&=oi%`-_Oq9DT#_vA zv)E9CU;E;Lb|KU?N@*Ue!Ofyor2}JM?ll&V+Ty zICF=T0udWIm>&;FKky|om%dtCjag4VZ(4H4f~pb-O95`MPcTH!P2(C&w3UfPqmCI+ zw_jd_dG2#e3WUOh1tXvX&Tn0o($UJm&$?qF_fB6xh~z6!-)_>F##c|JB3nRv@?cg4 zbdq>gkO=*^7D1zUEx2e{C2I^Ums|+R9XP$KMr^JSggs3Z?w}uz@WQ=dPxm-_@#EFv zl9*ZY$Mthh#+$Jy=9lnkJ-B4UxBK2Qf*x$Lw34FxxQlZ*>i_@~BdDv(qlXGQx}+vi zIkIa=Rj)aNbbXQRyUzAp6KP^AgQYTHKsRQ6uGjhwQ&s?qDZQ_PcJ zUTPcKHfU492n0M8t_#Imm6ZPZ*GAz>%XPX7o%yEWA+x&=g_IcRDrkOyiFcN*WrAuSJLG4c z+n0x972_4D!wi2N?2f;Ih{#ytQ?$baXBPk-sTZl(l>@};sI<-PY0ZHN)+TmiW|^VI z*eT%IoR=_maE53n{cZ>uhhVk0+tfjqhn#xAyOAstA+qICe$mg|8q-$Rb>5kajbT7g z9mPQ=E0iNf;Xv)x7Oah{U9)~T-gYTZm;c0+UL7e}mf9~BwyuIkxtc&993qtpznt7I z3S!+=Mgc7HZo$hGg$R^ybd9l^!x2aitwiz)p+KFSTp2VQ22d`*JC|f_Mnm}9oj4*W zH6gck%@h4)siBd&jCOSszo>pMj-cOM0~c3VS^-YGfDt-A``O!F<$Xi8GfBgkoy8jA zx@PH!T#1#w>9C?2wT*k^si1}=gs?0JH>#&FRMR#6J2#EdB4w>N_&#Gfsd>r7xcCAr-P6$4pi z8X*YXPQr`!5)T$Y(nPG#NHDKBk!RvAkmM99xI(U5<_vCGtn(boof;J*e~;4%+6+Pf z0RW(!2}ogIs=~UpJ&}J`On{YFpwHt@p%K(=Oe6M#68r+@b*6%+-GMoMs3yk5JUBai zM7Y*B;nDbLSZ8=Yif-i_H(hDzsSrd4(R)>WG65RlP(cMt;Sin2i6J|UKF6&4saFau zW6>Uk30#@8@)tvRR2Hj!E53UOZ(6v!%79wvvm&FXAMW-Ey-JcpQLxgOQ^eN_gi%%l zo!Q2$=O}n`fa*}i@GQ4B${HJ4TO<68e6Hwqek|m8s(L}U@ftX&Zp7N$wJrJS?g**OB^%d-FTA%*q;bOIm)mie0=tPgZ++U&#L1cC`_HY60mD3 zRjsu8*7Iw>@!wrX7_RdPxBB?6HPDtv&z-v<>tIz%r?Q6>A3-g*x+^ouI!-GFspATvxt>;kGf{#A1pio&9|N39mMw=w z+E8f}?(%uzl+2`ur=%&))nZl^8a3{+pcNX>*ANBG4)3tgR!;bT( zJjeQshSZ|P-0N73h=}z}Rh-HOc5}{w9H`?Q`5UMfmrpBAm$U^$=Qc0290+}oZ5PET z$n_L2#=nTcXZONwJdC`qD-LK7$szNBB>U(nHv@pz!DhMXrnAZ`+nlD^9-tEoXYJBE z=DF?*HTWU)+IV7~&P2I^nshJOLp)1noFMC?r`=;qfqjnsrNzWdQeBX;x;=lQziDI8 zY;!={;hx@y9TsfE8pau^U6P?xQfuVkAzIaM*37kv33;7*rFqK469iyU>MJ9}RNx5Qx#kS9Xo-*lK<4K8z z*NeH{mA2r5>odJ2`+dp&4d6y3$NdPG=k8fD*(Vjk|_JKCW)ZVddDGNaah;H1XC@3(t)Vnd|k6IL$N=bLy#pl zqrCB&&Co#oM2|SbR)tol(|hcul&D%74{QnI+SDRxPC*<)>NbP%fjr6IUFxS{4f#<2 zNqgY5#t?UPU{pZ#lba&=fF!VT{4lh23QS zFZ?CzUi{yZDmHU)DUIkv0}Q{0&W=2U!FTZ(V9m;|l)_f2a3Gm`i!Ie3>***Q+ov^mU+x`^1*{qN@u_}fz zS}Fq252fr+*L>?D;ciMnqLAD?+Tg6RFRzp`?9F8I2$2Bt#@}aftO`wd+j{sB_I6iD z?&Ds44>!~nLp(|0r<3IBz=p%82iY#2MZ)pyT-qq9#{k?cJ4W-y8_L=#kua5!@EjlVJ@g6-heTJG&1E$$+g(hCE%`J?xN&f-iujEqutaYfJKP;T%|G&g`n5KUJfCDcEFAc@D07hU zT!ekuwWM_C{;*%0H7uX`3j29;V~Tt>TIb12h^or7fm?s=62!q2C?0%V^Z9QXL0NA$ zssl_+hbq`OJ^OA%?tsM||jL7oGL;*8F~^sHXgLkN}_} zB0Hc;4TJ5^Jn8mxVp2oYWvR+)CV_tIWop>#Ry4gw$DwM7QfF<<`5RyGBVq>!=Pq?y zgo2rxR;M`q9k%8qzQ|b(eGNI_ne{F*0)UFOB*?UsTTLO4I(|TPf_#49mHLwpbAj65 z1ydH{Id?tM`$G6w(lsR(U1RlXhoA)!Wmv)McS{n_W5XGnCbytj_*UT_r|>w=EM!X#YCXSyEFYzp`r`VlEEoIHpDPSe8BYx z5Onst98RR8-*_jKD4Z1<5cNAIc9W}f&cS7B)uEwP;I+X)1 zgE<0^ztdLeGy{KVfXlW!TWLj~FjYfqwzabxy?~SDl?mCQf2>hRnvXa3Bu%y?c#ap z>m+-WW7Wfys^&SSv`{-N2GY=TsLIcQZpA}c$lbe38UIt9$q>XqLcoT(D}NkpM&Q<9 z=V@hTtkES9@bxJEYemLYxW^|zw`&Up zA=_+Q*~MMb2Mn3_e)+C7w*#lYP~{cr*FCuS1q4q75~Q0h^GO67vY@78b@9pE?PxKI zuOrFwB?Ex>eS^Q-*Uj_(AOCh{=GW23)fytd_Se<@`Q;QMf9CQ}*v>m-Nu1LEbqhMz z^tu;XQJHx3bB4P#6 zXU3}TDtHhM2HW_HndK8q8 z82;-(4Qm)g01uhG5kbhT7126V{^d@Av?HODjLiF8#IFMW>8~FF$;cXkcb>3%E&ueS z4g0&W>f&%j#9XXve&nM-M99Nr85?amRC<4)t)p@QA>lzqgxS83@~O_O$00j_c;-E|@Wm{?} z26n+vK4g)SuzMKjVM(=mS5m26zp^3oBC!bttv1LF{&Dwj5hbfG!Q3)n&)V9DVdc55 zX?V!k0(`@NI}P|5>R~rr6=YmcC#(#m(|I7z9=dnVcaVEgS$C!et46A4L+9G38S%M< zlQ^ioX|71F>r^iJylygVe%ckbIV)whsbYY*(f+Ho4Ho5Nb&!4+%DbBD^6^n$O|O{c zJr(lXkWe6df$y!TO6xd-(oUG|bgKx6sioFH2LycXiB(bv0HdJ#e~q5+>ccPnb~)o- zKzk4T-XM4ec8}z}#<_ojdw?)W)TB2LrYxGZ%v_Jk0=DIpYJ#dh8q9wgfrf~>>0HYg z9oZ-&&Uw+2)vqw@rw3ZEe+8R<)AD%|G&MUMyP|_y+=dAo_nW~?uuox@t+T2EEtl!}9Urh%pip$9{AC#viQG<6H z9xEo77j9rtY|X$bD{4rsE8COb2WW3!fWP2O1ytv_3jJQux&AAWA>~l=Er&@-8alTT zT8Dt6d}MtWN5WsnN`<+|Zgrt&+%YV+nMs|sOU7Qso{ZQD4>KG@s0S}S%=axKTf zww^_b-XZZDDlLKZjMU*0a>1mxTdAP92Bq|P)7#sRn-9mmPzQ@GuAh8u^6kG~0S?a4 z5Xr1Y0E8s)H_M&YjE#46LXNm$nU8?e@;z54op3FMIua=%j27mG5tgTKw|<8R3r>mE zK>&!DCTQWu&j{U6=j?-fTfH(Iu^r(Ri-MhkD$0~N+WpVbyJ3_v+O?D_k#Y?hH3o4D zea|y+J{$SZL<2fI$I`?a z9L|XV`)bK2T0E&C`K`KdCfkU&IHT@-VfIoFy%UL8nT&>PiLkmp9(9U)o)Fy&DP`2ug62ww7{j1T8BWKDcPWJ(&VqDrVRqacoAb@K^xBs7c76#Ar@==l0PKUR*2|%S8WzPJ zs+Ei(o64IT2x=Q2UQ1EaCOJViO)-sTKJXT}!@Rs%9b48o>LyKeJO05>8|KI&Rc^s9 z2aq2axPYUcWKaj11NPnY?B;dDuO%Ty%AI66I#5iuDQixTqEM=lnbWwVW69{vVYBmT z&wU2oCeqK}Tv^#zY?lFd(kJ-Qwjr0uUM41sjRY=^g1 zSDR!9TFR1*1H2h6%nG(VEG?Qo#S0etlMf@S(<>2d^z>o)W(kR`+f({yJCvSqPE>1K zmaO)on_{TS+bM+%^cTtImSH9XJ6T{y9;&AotUmV&1@ zhLiC;@-Iifi^_C1tY-e8`h^hNkZ$cDwsxp}3>-zb0yg+70!?|E9-Zn+!2)V}se+ZH zp^BS+we%~9)5D{oO1BF2621R%BkWcP(Xu$6zuNr1N%F0zYC->U5;_KSCh-gKe#_tf zRzCVkc1(%#t8K6>akfuMHFW6+iTr5!zZ7*)-_kLx$&zryzTs-vx1m|`0N0pM5{O{9 z5yd6GfNvR5B7ui#S|0d5EZQI@Oo@B3ay8?ktE>H{12}@0a@s+#s%Aa8@1i7qR7Q5_ zLt%wb)dmd8L)#FB z)0zJqYk#2a>S0~y-WERp-X1U77&ay{klO&hw#!##%)kqQaj|a)Wop1^moUC7^sddN z;-w}U^OJRP`x0Z<@Z1emKOkf)DAKAt_8{CIj~<7Z7RvuUY+u_Jxjwh$?9D|6{m!|L z_pURM)T{t**tLWg#+ixzO~b8l!PAWZHx{V}>p`=sNS_=hn*bH~Q-eFIS13L;EVlxX zA(sF-c|xKADsYu9^CPlk3)=4TD|qfq$Ykr~dOgDMa+0eC$ys|(LesR}OR{lXqbHFm zjKH^rk)dO}wYS-fE1tDqHwAx#m&D*kl>C|{ zRm;-96giTWIT&4wB(T!;L$d+iey{|*aEr{v;>0~zByCx6yX(s62*3$`cZ%I;E0+=! zKJK1tThMCccbo9^rVf_`HiK0kE!GxL3dO{qy)X=vd-yXn~CL>1CeF$y+elB9YwomIm7e07Y(sdb;Gs6A1e@8(D{TRH)tn&-c6 zV$xN(Lr!bpAr`AyvIP)zSy|?naZ%ioS_=yOTh-mXBuPxx^&UP??lg@%*+BvZGA;X~ zNI>nhU+zz(*-d6*w=W ztCemmL-YphI6T9u4~n{t+!6uNAdNy6XLq&PZ2(f7WWVrGub9GK`|sH^CokRtnV7+V zTBRq9D(8Q{z^!SmeqFbCg-U-g(VYJd2(q%>18e3pInfXGSX+^W{)9w|%CgMOQ7liQbZ7&ui5XEHwS~xX!5j;?K)AS0A#1@=uqPl6{i>+ypI`v@D1AX(>V zdi(sm_$qjiI_4zMnb1>r zBGib|%&?IChR?Z4Pi6#sqx{mUE#N2K9qV(++Jd^!(Lg)QN@_A$>D;Aua)zIm>S40J zmbFkdGFx?=r$lb2Gp602%~yBPJA?>aUBK8aWc1u`jl9tx7!B2#+nE!V;D|#?{?$a1 zq5~2)ecbgYmBt2PmEWC7OQ2LFloW9t3XE^;Q9q#Knlgcr*j^FPJ^#;7MTu*--I)i0 zu2Fn9h-HVT6bSLcr=!e7uhM8>yU`A!zRa+xh8rs5FnC7Vc|}F({@0=!t27zqdH;@G zGtPrBWJJC|%!>J<+*?b#LYb1aiPAFro{bHs?P5uA0GcnJ{EkuppxSBz z{eD@e4u`$ZhMgbKSV1qUP%m}pLjKF=n_Mtj|B{p)Mxb9s{{WIMJs0MWWvU;7gk=c!ui;zBnt#LY#KEY>-BAO8A-jvy(dyq&omSK6)UD{D zDU{uO7z#{|NDKrNDVRtkkIqq|{r(-oW)z5Ni?&A|Xay65?OaWIz#ifz*?hfTjWd}q z9^116Lsnv3YZ-^a^@l9!^YzEpFj>pNN^Gi6!~W5ushPd}dSZyoDc|>3M9Oog@Y27h zzt<0JCLk{W>?ll#Sl@cIB3bPkBjZ%7Jyc27L&(w-Jl;ZJMH5Yv{Kn(7y7qn8yUH4v zy;|i=yE;uh8dID*ma>?fk%=?JtCBE?Y~TRU$`}-2Vsk)JJ#Cr8=f`v=+NOHiXWQ)B zRMFCBvtJ&_ZZn^zRnh90Tgqh;D@Wxou@#kL*oqdw9Gt6v=ZSx`*J4O8&+E0L6ZO2vsgt>4Z>t1jH7l@zyq(LYrJz3!!bI`}3^Io~!v6Xs zGl|*9^dxgv#CbKjNCfZc?MK88mcMY9tFVjS^OT)L_t>U3*%B-^MrmY~R{{j8dPt{+ zwiPp=`Q5W826Ls|)D4%8tG8nwWV6QjH9m_Z*>P>X0h8k!vV?S+D#3cCV6pa%7&q0q}GQaCSc|ZXK5&G)ZP~W zVtg;5jK+N%gyxg`B&vAgRLt~M8Er`_Yd#7=$!fzDa>fHrGw}fG8ssNL$c@^600BAZ1BE6l zbdI;bW*FG11qY^;-J>L`7_f0r zWDnbm>EFka5nZz#fninRM;-d*M^X=_lmeDTrF`-cU7Kh=qmy&}{`Y)D*5_+HwiNM9 z4ls&rjmRDbqojq5#PsfWIn7?-U>9s@_g=N~IiFcg>k(xpvDp%QCpA>^N}T5Po%2X| zk^xYl@tFB;7x=AywidXAcn_su`!WPzJWlwq4X*HR2qy~>;~b$N<#P#U^s(fHON*>| zd{wJz5bS)OWrXsqM!vw;wbjmlfX){C-qWoAOO$`D1v!GnFQbEibSmXA=0Zr1#SkNw zX~J$hCpP_%<7Va)cT4YIXPPdcN*Mcs11I%Wps=<*!5$gn4fDOlLG zEwppe5d)QmvwFn_j?Vy^UMso(0Yy`5zgm8SN02TCTKE1BNc5qJK3{CYh+`0I_BE=% zO-#GDop#Gumnp~SN6+7kOK<=<6b!u_^?AOW-Vz&OX-(e^l~*oB{+F<}|IS+q8aN(J zDjoV2ApN%Yb3M=0qTO<(x_nX*&hU0g#Cxy-WdLKrU+vgL68&C?NTgeA_oM-b31w@q z3|H>l#ThF3CFc?kjjA;sOR&~?%}~Bc2->JXz_<3=^YBL(@d5ZO$wo6z+#%9P80N9f1l zV^+4N5L?!vA!v^Dl`?hS!ygZ*?>0;`aXuGmWO7`X*GW&Mr-HWIG-4U5^XHbF>{`_N z&`meR_uC1$UMN1}8pVJ}A!EKISoZ!N_T^GhWF}MB2QNmezrYt*^w$l~W)wBsnNzB- zHOX(bmj4>r4XKq(oWjYb2kJk9O4OfH-r4cCf( zDC{~@Kkwt9gP#zcyw2zM8A%(nd^rfGM*vz$yE9sKaIR&#g^cG*x zz1EB$IDjnnck*Kr91$0RD9J2T5mU)!& zDdZE>EBS?Xv#=yqasNe+|A#`P%9cGrpr|epNno_g7T!V2C;vCEyhDCXI6gdU)7&Y+ zZ_@#c-sw`=y;mJK)`g}0f&hTtyKePV+z^^~R;s6HzW1W7pjq%v*%{r3*#7ggINW8@ z(up5N=@#XB7Qj$@Lxmb{>K|OmK};AQq%Tk{p1owKOMdBot>o}{ld|PJ%pq78ZAb^0 z+q>4Nf|mg7Ti1*^@%Pus7zh`?ppXeLjJ_RBhdm(c72{ODBN5Ew!1<=F zQ;Q}b9FXd8<#|WAkZOxUMD(C>D#MVPDkQh*No8Vo_ukKDD96RG`H&d7kSLRMdN45* zjD9as*Zx*H@45!`L`qViFg}QYi}Ona9B|nbX_B^`9t0KR{z%b(ZSnh5mO=EGd@!hJ zaUnIkL2PB+^0y}eNX?%|05LMK<}Vk1V63POa{%Jdd@v!|(~-3Zw{S+KGP{~V>tZ8A zvEu;HQBKa*XC!qdA}UxC5(LMjm{$5Wno+p;~rv#(m&i%`2f;G z?USR16kMchbCyCV_ew7( zZWzIrx$3=3YK0;AE$-)RJZC$4UepHnGtWFMbX(adICM(!A5^M^Eh<}h=N=f?uSVf&5}l5T4y>L-qieNoAY&vSx}^r zxJ9hc%gbh*N$(=gV51*b9k&9-R0!m=ic>t)nU1s1R5?*m?;Y`Go^Pwy8@9fNAbk?a zC%$%@Vx09XC}P&`cii|QR^`Q~ZqqMFg#7R#Ld1V=4N9PCr+lFHrl^Il7XbFEYwvsq z;tAypEk{^@_5#17xt(~Tk|MPpWh9y?r&vZz{@#*pEelk&z`608;X!HsuaG+9^v!7V z{YGQHtG7$68(#t5;Tu3M9n`o^RlN9v4-EIe)5L1#U}h;S(c+Zc&vgEY_3Z_KQN{Dg zOi!eTy9kjntSIJs@-ux@I)Fao6XYlO-3QEaNe7ilWV|017J9@}r6IBwN|sqC*_3_V zZuA0#7l0N(*M6eALp>6yz~D7!vo6Ik1r&^URT;3;VKp}( zV8|B!UR9z_kYwx5qT1(D10O)q%}3x%{Kj3ESG~NmEQ{gv{MO_K36f{(H}!`NuVJXv zflNVRhBp&2Eu=_SVb7OFI+M*UIM|Gs1uGm`*iY}I&(+=!Y>&0ntFQwq9IG`W7^vg2oNLe?D1)uXuj>huyPRv z1A=kAb7bhS3X>rC*&xCOiVRLySKI{t@uSi#wBv4|N4K+J1kdjEEASpdddO0eL5yTE zG)K3o@u9t4gh7V{VL6a;KoGf*1SqzJ7K?m$8HVUe3rS4|=s>ed*>Lx-m}_Y%lvk|D z{Bdc{4L;sX15`hsVUB1jH`UM-*wo99Tv_Eh&YNgPtA4g0Tjs3|M<8A&5lO-&`yCfd z24%20VqB{f*samm{^BWVxFa!SurHaDzJ5F2v-)QTWXnod!yee$vV+gpKE135k<`hH z-_c@fdsc|m=IPSwBVFWBN8xDq(940SU(B<7OWodFm=>E2Dh-%r(rNgk>Q-4rZFeY3 z^^?_Q?wLg7?wX3(NbbCUpZH-sGs}b#o|e@(!@-070}pnmh=cp=sy*CR()8)P8kDD1 zFRAfpHsf9ctRRA&`~0>8>akeV+7I$NP@m9$Dk* z76fCb`K*fTRRxG&>;oQRtOnEQ(*V7*<-rW2_{8WWykzOy1&u_omtnYw>;lHVlCC@= zO9aD>{zLgq-tER>nMlf`7LU!)4TqsE5#aVZ_6{Uf)yF2x)#XfOuq773fo@7%Cxqj6 z{5BGg1S(lmW1jr4Pgn^Ht}qE(6$wHGa(12w#}&Tz6%x>1squ%yZcw{Q8Qs;TDCFh+zhw@DgPvx?L|DJjo+=kT@2^RjoDq9TN@MDdTs53dlz z1Z(lT`MmYF&tmd9$nm^0&cAVE+aKtJfn7T8KDrZi_^(rsJD%GK#+XT#<`)u_Lf%2VX%#dZ6gPs~u?7V>< zTjpua&={wbb?O@K63rt@bZv$jaaUm49t;Qn4FD!$sfFoE4+h*0V(L4 zziB)HsuRo4W6Q>x-ReH%jf#MV`PO+Uxm>+dPSf*jy?dd^Iu8|bBR-+f;gB~3+~CL*QRy93mB3}-+#IVPFsUjPc7a~ zjsQEODzscjniePnq(wg=GDN(>R$F%s8VWTAdsF=f5c{#>id_9%;}fU)rUhPLeHb)r zoaxgrI!stB|Iuy?Ze1d_j>U3N-!ieIh|B$r1?VJJ z=7(>XsW;yFb8w2Ix51qzDa@Q12bua6D!cDIfJ2h&&X?nRSb6>(;rH2(faviA0Jv>O zqc-nuJAc2QgiJHaCQLa%PYEVfb4Ej(Ry{@QS%inCaOWzfi;{m$@KPIY1Zt2Ss8b;+ zscN5L9Vf`;!|qDrEuTZdJ%@{M7^)ldC!%p&=b{b`LRtb9qG%9s#H%o5q+RKb#8QAv zT2?Ilg|CC@QD6V!!9yTaMi9w11AMAaWG_L0K@C}f+ck-qLtI@xWmXs0e@aZQmL%O# z2~AAcDE=dq*^kU#8Xx~s6_d!+!a}4|Ao~XPkc$X-r$YM^g9Dd`HD-B8tNH$wbtO|kh zm$Vsj&M)tQD519%c3EW=aIcJOs`Fft7kl`+X#(y+v=r%!xJ=c+h)W1){*O!U{*msF zquoBI55CU}79tcb(hzhaVDUhWOK%)Y@%(2254(lTgV-TY^)4*30=fMWn5w4C<=PEj z^%D%EvX7pKYGnpqRk}ul^vL9+{VwG?tP1xU+(2g4Jqe8|f*Tr8kViG0+?z(4`&n1F zZOOty>Pn%PMlQUB5K{*Q@Tj3OazRG5TU?FCu1N8*?OP5=+N$;Bs^fu`LdS704M{EMS5{FcZOS z36g?>g|@@|dk_-C`sV5eaIY5pL$b2+D#pzqxf1zHQQ!l0*7o$X1G&m(lIu~eHZg&} zkK(qQiE$9Lw*Gqn96-9jiM+XOjOVK}PjxC`F$0NDWuZOR+B6 zNWA=upY_I=tPoC8+h>5<-26=rPk0DUVMw^wU43Inx65nq!mnhl+pB@Rm#>vXzgd@^ zTJ`F>S6mX_)}PL^AG|bI`%}Qykpp)+e0pgMQpGjtXR}uT;EVO)={9x=3lr6yub8&v zXP7UKm*)`90J=nYWa>h@S9Prf!(Le0SOo_5V4A&xf1^?N9cw~(N8#%(>gWyI=p7Ao z0?V>g?lsCke@#2at?Xa-CPg{p?cIJEfL3WH&0425jF*wuUgFSuBrTtUG!6FJNsJ7Z zEN{oN|QQ*QJx-NQH#HxorJ6FNa~n zqY6p_u%*`wJYY^VCGH`Jnv7yBERR2YC#1|T<`Q$_jz+&3D&>tQrbTK4bcr)8h#ew) zw|^I1~!2l)ba98+LsAtI-lV?XZ5`*=f5@u-R zrUl)1I9}nbtCc$8*?VxW|E=fErE33$urFH(z?c)zM|+=U@-7RKtGoL~d7Urbx)Ul0 z@N%Hry7C+hqP)i2i70dcT<;GC&11Drt1+MzUPv9#_a`%WCTn!ijioj5_^s*^J5+X{ zLl`~#bd+v%geVs7W9Xi$ngG?zT>FP=s^4K(s5~Qqg$meE0)6AYyX|_Eh-lxMd+Z(q z2>xkl`b~B-x0&v7K%dn~V}OGwi5B(u0%xNgvET^*Nejy)zIw8XxoVmp{`*wRH_s$^ zarwfR=lZNSW1f@ayS#P=t$S7B*|(wDVg0aTflt`M5Z$$u8fYLyb@H;V!Oe8Q+nq~o z2%R(EiMIXm)l->`B)P8P;>Le)i&UfpU{pVlTOZu-JqZgf<8z~ zu@`wg>UYY3(ZLn`O6=@73G_{rjrQf>7C$RjIEJ&ke<}Lq&-Jh5txtfjZwE`M*_fRK z(~#?`sh|p&$>0@i_SXuBIC@%2TS^CqKtfrI#}uxt_T7&X_%$LRLjaOe$(MZ!5H9-R zd#yKFkDDUt-6i}zHbl%5Dj)n+TCg(e@wlu`JHQOK3hD^9I#36;T9$jh==YrNG4o8s z=M$slygJEVPnCDMLPlrirM9dt_9r@h=C;adH^WAlQBcQm2-65Bl-c(FGdHG#8uEix z(_jA0M`$5$2GZpc*jHh3nZJ+>pmWJnXuM=N`!3ou&(xK;3`6*vFm^Lo8ke-n!wjSw zJ30ZAa9qS}USjkd+S6eRGWna=QW0G7SB(ta7{o6_nYY&M7bJ;XVLWPxyX1{(5SxJ_#mO?fnncGxy(7BthpZY#IWZk9sA0Ne}R5O*>1@Aqn z_*66&NLva3zia1SSLFHBh&|NjvbY z?m0s4<|o`a6;P{HpjE7*JGOZY6PHsrh1j;U|2~@PrK~FgFI@v;WgAOE#|wbs)Pweq zIh;`YpX9mtv$}$(`=a5MJ7pw*Ow+3j^yanNx5a@;*s}N5?k#(3;fzoxgBw&Eomern zC9D8K@_$Phx8t`lDBTiN$1ObV$|o+nPxHc9t;vIiTdXSMPN?(g$e=5Fey~pZc!olFS?1lkIXfR=up8zL-;&yF z5oUT05c(r)P4(jQBE5ST<&-8eF*9pgsDkf#1?`kRIXxQ=BMd@*Yy?5`zA|xMBbuHZ z{~n&!=;NkUbBTiW3K-+ATFUo{5S9eAlqbnRwa|*AH9Jl0EOL7Lj?>j*^mja`S8A*j z%1~q9wUvnH{rT-_P4871-T3lFKUxW*WL={oju)N(hZVcOMI%@<}_AKP0w2q$aQvMLfSfO4x~%*=Fj*1}p&bMjk^U+CFGQps#2(Cw*%P&M30YZDrQDFjdQA%LbY0 z$xL84su1T8WCC)jg4QBzMm{B=$Ej$d4gF2_xdWTc~c}EUQy%n@%|INkA&73 ze5Z;pIJLO1thLYbTASf4YfwbH8Cgy%%0+cY_++nfbj8mt+{e*1$^xpLDrCF>#YU{P zP2GEkp;9wb70Rp$^@3PUAHi2{DRmYpV<)vkN{k(e&}L|>xzP#pmxViEx=ou>?VO-^ z)(@|M_4^1qN5UkfE+QYehz9HpVO@6Z-2=23tLKT^S#Is$AVErkVnnmbbkE^1m>wPj z56^392y>Fe_3wx@=TaB*CdbgBE_0q}A_;y~ZAHS(OTqw_$G zvO4tI0l|cb@DsR+^sPTFj_R5i3i^DQ=D+Cv>Q{zYIZQb# z>D#9XhU*rLqIGzMo2?YFr@Gh^z(`NFcW zWe_6-2rLd)S_?Z;_OG#zX5_cXN`r~+;LzsGdjbU^v?L&{u*N6>55x!`s-&06Vl)4! z>3BNNFk`~3X=iOlfMf|1D-(?r$**xE%&u+TL!pk7u_Yo zhxYxgATMEas-}299;kOzKT7SgYaewA+RW(1llL*W2)(2arKaO6Dkp}byDn;Z>`K)+ zl6$oOoH6zWh=PV&Ik0Uy8HVTeaExD`DA64Y)BrcKgvg(pO+85NR)PBR_3Mpw0q-)` ztrzjwl-nnwBTx0eAzVyn40g#EZOdCik@=Y1k86JHYKQQ zSP#=5j0!e(?8<*joNNmPqyCBt}GJ}-A@%`%n z988P>-b8G$a`dz|HwM-&9U%IL_bz9n%EY0T%e*^(8v1H;9OyGx-Y0zwKuq09xJdn9 zStu{z-)jP}5$bkzeJd+>yVN701%+iA@NOOs`h_?Y<-*nqh-@vt zYSlGw9L}D$*%lOmROQSKgO1bvxY=O4TVX)}RjSk8?W4Q2{hXW3#ldmVRFdp8v456N54hgS%bK?1UYu73(M^OA$;;nsy~yUFC9O7$-mX2Vy2ko8=!IV)i2P zhK|J$eXkuj1|V8TfA>leZXhaa_1;ErY#QYGs{BD{|(Y=ZcU|$(?H7iI+XR7i*BsXEi8k zvxnFoeKNd}g5bjqTh_M*lm$gA2L@QFRGZ?=@RJv}UHZfA&Dd(Ri<*+Z30Xm+pt2an zi;)QAJ!AJ{n3^d507SotB&-5~@j6Az@F z?oK0_-|o-?6_iLm@X|&ydRqtL- zwsoVs$Sz)f#3w6bP`EF3jc5(^X-~5_EiKV2hH^eJ5U`wOZxVVhNSCGZZKQN_7sm^) zI(cg$YhgX*atN{lS{fL4CCs4^29p+qBdgi? zHoI}X#gF0CV6~mCeE%s2EigNP>H;LRE?|5+Qb(zIq;OMmHrnz9aRPB(+g7NjABG!u zV~JIs`-Uy5xip+b8NycpP;~|V)y?mQ_r%YC+dr0Ny_2*tubY_#3D0>Nbk~4LEI{?C zPn=7oNc414j?_J|H5mR(D@+89N-~_XJ5EX*&Z{1g(jph(#iDEKMUDmNIcnHl0S|6( z8?LA((;0-Gg!}t)0vsLC z@Ml-O+=kz{w*CR4ya1&ok+@Ox%xWmA)Xdqf=)~Eg`HjClFT!&7vwaSR7jyVloMhoN z6=GnC(jR#yo6jp85upm;ljxl^NMKP@nUX>~7tm|^J7pW{&Or}Zp6QTXslS7E1LZ7&a)pi&;4!$L9H^=j-E=<9V<5;#x+~%~&VGYOhMF zx-HS!aC5pAKO>$TO=f0`8>G)7X<8NKbyIC*8s|#2D3Cynr*8q^rDagm3kmN6acE7m zZt>51WngiIye2fAm-=w%a)NQ8GrLrnVhyt2JlLe_E8;34mEKu4op`k?e`awU_=_o?+V0r;2z{B zPJKwPe&Xp70&KDx{@?mzd~%#O`rCFoKL!UCi`);S*Z!^IkiW>6DO9js6#1eljj|Kf z=_^B~`%VH9MD=VL3EnGldPVsEUO(@DexZ_Lu>I194%cdb4|}6=HIOqZSatf4%NC?`D{n6bMvu`h`{%+hu4h$y+hwMx zxo(mKE9FnI8HT~+OwIg7mRc1ymPpIo+ zOF|E*{SnQaBj#<;%0PSmIz2TJuQsZOJMjnsyLT0$l*K+Lg`5~z^Je=+X(bRZ{1*=M z7J&bujT7ZS_G&zeE7?RrIjPU3CY<`c>#5)6(qlolRe=%$%|6f$12dYSm&S7N6P3~^ z!<@}D?D>8hL8|o2MC@eAnt6TWqJpEVJ4`Ny13DnSf z?_i6V7B48O<`Y^e?ZT$adZ%9+B56b^?esv_+E%5fRwo>PuJaanzM>WoDb^|v~s+6$# z8x3?xnnCgM>S7|m6Fkm_`d>=sOZ6@#x;pj}v|UEoWqUUnI`*lBTSk51RzZI zeGFn=aQV47>S+l}chSVBhbBHYlG06aU`XqpP8@DkC#UY1^b>5{`|{yF0D^F#fq>_< zAMb(Kdb$nTFc8a#3+dvu$R6gy1aQ-GLojFd$n{+4Vun?2Z~w=xqFOx;R;Q&pj>Ear z-yl15H9DM|4J~wZV|4Xq<;K$@Hi*d{`tAIjg?k&nNveh;U(7jB)?DP+Zr(O4uJYw!5=Nm z6tTtKmU4CV!`T@`e4A|Ln0T}T;@hVjTxSSq7T0Ny8uA^-yFPGkp-ejR3or$Vw~lVZ z{){s5b@kragyp-9EUwroE$t8(=ifDNXzk3O{|1M%o@Gbc7FprDRnSL^1!=OP0ezws zA?CpyNZ0sVEOqr0UgOn20$d&z&KUDTQNtpNTTw45X==$~I#6oT1=6lIH-VxR zuH6dY^?YDIz@{44Y=!j>AW%A6eALTk%^E=v?h7JyFfkrslZo9p~~2D zx>bzT?FDy?(WX!r&T31;U+r$ZiTci-K3x|JG5XBm!J84kIi^_*<3YY7G89|ho&+63 zARfz4Hh7+-CzQE4rmd^WTr(bk8k6GxZu3!!w;!Um>?Tlk0oKgL4E`fqLVFl1D)5@^ zzhVr@0PV3g@1Yw&kB$u#z@OHrsLqduprEfO5<_R9e`=#GX4F8)9n}iJDyzm?;tXR( z$zYM%gPS%?0N9V{(gO9eyY8_6g>uiWQ>dEQ<@zI>kN%kpHjB=|wk=pMya;F+X8I3n z0$$=>p4b%tSRH3y(@uZsLF0R=n3Gqfmn|b`RB^XCnYWw>MLB#}rqf$#!6DNCq=6f_VbGlJNzSYZ(49!&SidPiOzK`hgH% zRJ`tDb@GZiC;?AXABruGL-As-QX>Jhh;Ks;A-Nb!fIBaMaNX{oTy2@_>>K{26gYRG zFJ-=CJ)UzZ8wpKv=;ZoR(f(S*`Sc5`?3n5cz}+N+Wzo!v{A+7r{vE&B&BaqQ8ua4CUGA+Q57AA5t-KKlPdV$%Xr zq9n8b)8cH=;M$7oQZWfhKr(}VVP*+t^)tZqx#N+@-tVgB7#WSb z8^iO%6G>b!yGz2_zi=lqEw=efka7>W_03-0Nh<@J_s+xi&b^pWaw-}}3|eVNaQQwJ z6AWbl9W~tYWO!i-o&s=bR{E6`CLEr$`Puq zLQ0ZJ$?jV2sa^a|&{VH;p9=zJlXS)508bO61Cu~8JIVfMFbQwNEJ@Jt!TPWf%gg&| zRkb#?@J{lSI~p+BsYf6`4$M%h9^MgX_vKg%*~SDh_RL)mOl5(D;Qrk2Lq+a$$)hkyZRg zVqbpe%tEk;Tb?9h%%y;+D0$~h-R#&kt8T=AIUyj7r>0G_xk(r$O(-0At1TL9ceL@B z1_6P&pRJ4125|`fjWtuZsNwDQAou6~B?taiKN0kvD_6@FB-3~Ob~JNtbU+8H0Af=u z!i(!;>Z-Xy*P+c6`1PWfb`|kb%DSA`ef1BA(^tH*q^O4kx1#b8xrsUdk|5Jx`(sZBpXE&jM@Aioxp~Ae=b&TYBxJ5RzVjqbt7w4T z{FX_p6e*!)J0XTUM$35x=;$+MZQ#sElUi)El6)Z9dJAVP&Y(H&(SILqz>@~8MK`xC z^(@0y1YIQ-nM6XN*j@yG+Y@b4iq>t%=L(Z<95{HzI0@ZY65H$6r^|ZGMNE0z4~Fg= zQ|j|mqjArCqKG}jFPJKaRwDq=4+NwE0;dAcb!4?KB@)qp6Qz!TOq46}q$cps850SR z{Z%!IH4+=t@oF*5ipQOT;inoJautgjQ#8-4_@UuD8Fl#Q7-NM)M$aoz#xX8j;=65U zL|r55R0l-6GRvltGD%tnrh4xVN(9>Yp{ZR^=*)|uyRSYo!p6_%;~f{{X0%qVaitsY$sv4UjiO*Ce7^coVT68CuH% z-a=L+QcDWg+)23Dt1V0GdFOX^!oz)3KV`$8%OInxW>_Nq$Pe12*eiwFMCv0nD3$t@ zS?vJvPWsd0TBS++>I2i7)dH37%4e~|KmIS^1 z?Y8k7Z0Je1n6pUpeiV&7{X(&4MFot=zdw$d@ghM>mrMJD3vHac?R+>p0LK%FOM_8Q zi9qP~Crj@T&7`~QK+GunP$LS#Pv&J1)c`qL2GTfAc~}`oJHKl@ z3w;EH7AAK!4Py|=BR!Kb0T)lQP#AFZul&ly%vJB@ixjq?`X-7fxpv2YOM}{Hh#CYj zkt?gBkz-Q?EO+zj!uK=T(8Xk-c7wD9=oO;GocbQX#IAbo%^Ek*il!iHExu67FwjH7gxk@5UrNzCOp~rfnhzJ4;;mvaN5u1ZGR2<@ZAI1 zy?c|+tjV%CEb25|Hi?wfS!`pRe(zs}WlhvFGCtZ&jQ~vK|?Y`d%syQf#7iGD4gEL?BxxtjP<8 zWIO7C?+M83O3Dr0>SI8}d~#4~wP`h3Yf)5Qdq=M7h9XK0nR&d8Ps}&Mb;ejNgh59G zL&O^*>!L%kM0UB|d;dH-(_lo9xSe5?2Yi=&ooqyLuAFEv>U#qIer{nx7TAe@oK|6) zbHuFlZE!N`ckz7q64f;yaFo98U5QG_z13J3rT~VzDDo_DcC-?eKZO?f=xO3{gA0_G zrEvXJ|2kv;!U(BPFdr6_vrRN~ksL&$rE0KZjFup+fKxGarR9eS;V@7?gYpZSz}`1| zlTgI4i)OW|;vYCm5YxgOy6OJhe|$V0!nEjfCXSlE zC1PLvBgb*c@JK@~_0{TD;b*;kt~cPwTpto$TVu7GKTpszu8#$qs0yNzL>nb3RCKZ>s~_e8WKPo2@@Hw2!FNA#xnm4Q|#D+Tgx(F(!yiwF38JG!3u zj956a#q<)Xvr$@+k)~<%BIk@kyv0`0vGMTQ*A)H9D#VE%&{R04!7}C`Q50sq^%Wxt zI8|p*z}BMoveD--4~a=K0HBa~) zaEcybM6gaGL!RZW6d(|AQCsMQ2GNc4vC%^#+xdf#^H|^G4TIRJ+^Vm}we zvF_mqTZ;lgT-!g;@ObOGAFTtTwdMbvI~f1mscl?Goc)CjS&gAriu*}!ikqCtL*hgr z&S!oex|8Tnr^{Y7C!_GL>aAYv?@D(m7qfM}QXKq{j)H-+yb;&g!JNZYJj9KW)b`om zpkIP%5;&beggjMF57-EuIw^>Sk$XmC`qfw>07sUA{yF0(A8{K^tUg&GNAn1GUV&49 zBX;Ud6VWKGqtW?N%K7Et_vrQ7yG^^cbb0!9H3~PT5~!vQ!ANdjH<^V}T2q>O*Lgaz zT$9Y7T3});?|Hu)P`0<7u5ElXEU_DlJep2{_GT3Pfcd|1J8#@^rT4 zA$l<)N(@C*%_+f|$yv(!jTqs9!t4HZBd;VOW)kaMC$62TDLtfAs7B@6SWQ?dgz)zc zAxT)yr56t4Yz|EZDitOtr!cueH$?nfn$f#DIcdlgnaQ&ab36kC@GHP|He)21<}7yG1uLY9P;oJ>x>Gi=f${V8=|k8#bKlk zrK6n>1sJiAJ1BRzr%BkZ6xTux{6Y6BoY>CTM($xG={$ant>c-}**cHo>L8~_W&9-C z(jJiwwFUZX=IyRZh={T>9AAW@OBdm!1ra^?_lIFjZka+_qb`9-)-YM)B&u@ zklN7y@Mf3WLzK(Xht&xF0gvbw3W`LZ{Xm1c~aBVFn#jE|VJGfQ?+}V4n_Y1=Z|U z1kr(0ybm%n7SZ)%tt+*ysU{khR^bD%fdo#&vSMYcJScrcZo<<_TrSJm0U)i-G)}~R z9V8*z&+Pp5=9NA$V0`_j`IEF6Yg4mO1I$)#C6X7n*fiTMXLyLHx}YT3I2z^o6^pla zX}}Rj2H`>otQc*F33k5;x3G_URnCp``iy6#J4v8pR!0x&ar8gg4@QMkMnp_4WIqI& zMD0V)*dT+>h6Hf@;l}|WjdR%_q0=K+@LsQnpggKp+8_y7&VYB3Qk8DqWSTpi0&*9j z?)!YHBS0boSWF`QyB6lhjkS57y9sUKX(`I{O*6k3c$MLR?&~0(`r5UTN_8v2akq92 z6i%JYlCRpx&HQ(ei7kGS!F1&L91zOouDON2uZrHv?@5)_5M=tDmi{})e2%p^k23YL zLQ|ns%5UB%CuAw>Dw!mJ#4D@51i0qNS)&^Q37nC^_44Im_jsXwpqIz!0FJ=U^)hNr zf>E8`{?*87wro^lU#$D3Bkws`a}QK0b7^aeCONM;9EWML60`<@zPizIZky?(W}UM( znXeVSGg%K5xY>WfusWg#Fwp+HTrOwVGM1e*)4yIhx~d#R;v7ssb>IKvGOI!E#-EmASS}{R>5rUf(PvIcd~2jcBV3~f=jk( zDY~hFh!8|+q&3oxM@V578XIHoVfHpSCVch!f0cvVXWXDLge{4R-I+W@eU=p1GZ=}xwgUwTnDrI9~;$zHe zeL`6Snc~Uny=jBxS?ditH$8bpZV_MG$OYw*+cq+?R6CGmctto>4n>5Np|#)+1%*(k z2A-wm9dzaWXM+|kK;CmpnmTk^pd6z_O?4pOlsN_o7#!^K{Dih)>8^x4h5_I;L#|g%63r|xOVUi(W z37e!Rv{58FC@MpW#;`^a?AJ=GE1?YqiUi3SJd{joGCHP80DDa#>LN@-sopiS_4>9` z$rY{Wy5D`_6*ca&9xXQ?%;@-7EuA`F#ZjV{#Rk^^9F$qhS(AxyWSt8R)S~OvFWG~gI&ld>WkHbm! z0^bw#uHzi z6H^T?O1h|se#iABORU%2-GWkLMG_4z4u;m;MKP|7tyrE>|12=K)-sUx3(Wz4G3{)w*XZndfp{AJ_?63wW-N`_{kKvb<< za&^`*RTO*cxmPuzYu{Ye< zwylY6Zfx7OZQHi}&gc7k=b!GXr@PNR=XUkupCf>MQ^7Y*s9vGUYS z9Z7SNJldMldP((F3wP`CQDjZ%WVC5@f_KGupXvM}2;}u#7KsX6aI8v<)~H>#Ww%V( z;IjE0mKJYqtsPTy2Oi57n}wIGe~~=lA0Tqv)Z76*;jbFH=$D? zsoZH=?9xR>$P#3Jzyy88?z~vSXW{Uq%Ip?zW62)@jFCDSsb{t& z^)@D=sQT_T4%oyfJu)fB$KHQzdXk5TGLp!TbA40sK`J?DAKpr7l!@Y3fGlv}LS;s- zOrYg*vSQJ=rKhq;*weDJD4<|XmO9TYvs1JPkJofv2V9bk(-ow(ax)L(_E(Dg5S_6ve_T_|`^l(3=?R#wScySxZ;d^lx z&NyKrL*c^m;H)R^m6+eVQ~@5CDS?Y#k)y{tRnskvie_Qm63V;G$1@o@1NBG3-j{r( zmzw7Bqh5Fzr|ix7(cbx0|643(m-<~iBCQCdN95;G(cR5g_|Vt$%kbx(@rPJq>m7a(?#3ifQnFvHpUyxV^K9{@V6(S&tnD zm?7*zyH(zpC|jDoPcn7@2dfYl0NxFQnM;D4W{XpT_qA+!O-p_ErCMSLXh(2nNu{*) zuUZ#JWh5-3PpbK^xNiOuqbp9N{V)Ltfobv-YX#Ft0T2ucLXvlCnf0y(gKKwfiQ2fE ztP(L~p)ECFWqBg>26mRt$<2u)u88)QeNfYT8+dTm2STKZ9io!J{X!dyj9dPZqTW(- zC{U{E=+CDw?*|5zq1r3_og`{s0@4CIRX31ZH}*6HMV!**T%w!p-8`#sr@A_w1c#CT;oq`EU?r#=AHNnFJ#_OE z`B>8--m3)>nON=V5F2jc7P2-nc)A3|Tlz+(|H^}ssM#y$Aw7RTy&XzkN{l{x>>I5g z8;5yC)sc$lA+}Bxcct}N#9iURRkP{RY$1P0m{7!&D)e$gTWg|2^a;ewrAi1%=}10p z+GfK@q65+yp_;e|Q;~`HA4PoT9k+>_C+LdgLpZ53Vl#j9C2q)UfG|cdIvhWnIu3bo zW9^PQRBDMgU`Z`LfWwF2n!v0A4)Q4HOq;5}4cFI>yk{WG{}iG6sY{~VaGf-z-TZw{ZR*m;()4+VA;m4oAJj`S?9O0 z!$r#rCsC3jdUjjD(jwk8wq~gd#~4)_yXkihfF$LgN8RWBf(hsFEl!%It?eG zsd-?B&9}_PTJf#E>7Sa}4rbRR5l44{S%rvUUTDQ;v)8E!YA`VUQ8O#G!cOpLReGvx z>)2-;mV0ICI$B)6R*{ujMJ%A_=G=>{xutdsCdeu2k`VGD&=d!ob@y~R$vGN-p3aem zd{`Sgpjh5cC7l!Qc2<|VK=AV(0kvFTJKog#E}s zEukoYxhcZtuc}M*oPeqwOpK)k)36l~Q<#5tmCP~>l^S=o)VU_q7TD47YxW9E|J}aJ zr8wzzSv7#;dAEHzq?T3s(`FkN zd3YW39X8Q%uu1ji<*?1-?PcD)VtXQhqykPG&6h0HUSPo#KPpy@z;UZCugQWqM^q6<4;@J_3rCJx=D2Abj*PR=bNq&r zE;(FE3BYunKGaM-8>xx(nkxV}X%kIgBgIsq->*f1B_b^OLpjJhp_^r56pz=aut)xN zH#`~rz5&6~KanB#v4Jdu?46JcgC`h?T^xOK`r++?I4o6Ix0GWiVmW3?90-25M|Sa!q@%768Z5b>5B+rB}?YNOAq2qg@Sga1Q~S*)t`uiu)|A>WDn0z zIG{E&an|oQ+5%ZQ?PBO zujYLa7Ub+QaNzMRC_-pBx!0qR{*%^!b8_QWGxKIQ~E>2$F zH`isa+1pj3Ptd97#4ei~n4>`oThoiJ735um17!u&t(yO%+Xkbuja6ScL}7hdyNd-? zaiTF^(1E*HLUt@q))Z9A64SSDsbzLmFsw_Gc+;A`9<13df-0839V*PerCR)UKr*ca zpE&U11!lKEv#K1lflokL{ZCtD>HAzYPj$3ReN@5RZ8ZqY=-_!fE#vw;I}c}od0*mN zWf=rk%&uDR=tKq;qJ8}Ra))|vVCL^jfj?LIcAr<;Pf|>7UR)jHGPI<@Gkxt_?P`lmzWB%H?@e(xpCqt;CmEC z2dNEg)I+XLd`O+EkoI-s;tI*H*$U0e^L0cCmXO13Rg}wR+yto(rb%j`Mco%(mNibV zJAgG(G3ic|Lh6mrRMPl0;CGW$iFjCoPs?*lXUQvjA0;3%R*EC2+cBQDJT!JxYd zQ7KRI4?U*P8B}E|w0?W92^z?GlissABhoRjD69OAT_3aRXmtsH19v`Q_tZVIfi>FZ_PC-p}lz54k^8;@~ZD zp_tuSoll<_OW*Uw-*bu{chAGCI-fVjK%3Okg-5o0ZaaF%w{>ZtOIIXZd%@j6xpk?O zaLvj6KTAZJHJi?!*%_aeZ@t&7Oym(`sOI|C56p?pQZ=P-ER?_q_ z=_wYj_q%RRaJcZ+K8H}JQf^se;98ZadMN_?3pe3tRC|CoCpp5XvULH+e497_-h;_i zV!rEjsBf9SY^q=8P~RBUKH%T zyq_yc{R<$9u{9)J_#Q+7fRTL3tu2Pjqzkt;=peNB+uSt;%4?)fBv1Mk@$5KQ%aIB5 zTlo=~d9i94 zs&11J!zG>ohjLMx0~a9t@kKr}(@JSfioWj5=L{LtP{a8A66f#XSAZCu4NXzTQfU+q zX`~%SuQ_`+Hc`4>_xzB?OtM3wADo}fppTQ5qyf!Re|D6b6jGnjBUF2Ms23#C*(yye zs?-DZs@ zm-m1JCU(mRBEAVkNz%DoVtK5#IV-Ims)iNU2YQ{aPge5d!+ASma^BLPzhv7>@RxrW zDg6>JAAoJCiNGk1BvcjJM;7D+paKzH0P{2vg z45I?&HpEG;_Oa9|88xt8XM=Kl@|23a52x0ya7!Hulv3{X(bago zLpskO(nnTWk`06Cr$2^7SIUotSqQLZ0(^jgBZZZIO%}53Ml{aAY6y}B9&o-jQ6Tb< zvIR3cF?|#M_hrYxHVH3QFn(PTyua2gP8(amp7oqm!mw`ior7#@9lbPF-Ap_7d?_-V z|9|HxUy*FANo?`bqZ>j|Qq@yW|A{B5(BM$z5$RN;kHZ6j-`66CK zZF4ZWO*ojunT}oeHSU>lH(EnvtV7i2;h$(ELw>nr@*m>ch$oe>MO#O9+(8+wDWK7 zGfIc^&jwp_=viUgss`-p__*eB&Ea?)FFLJeN*5Ew-0PJgBm*nRX1>dgk2CwHL8;7e zrY@7ch#`X}HI3z-gu4J>d4pxa^NvNe`VXfw)c#ov{%H)#OjYx7Ls4SO+G5;DaGPA3 zxq)G-5{rrqVVUVCIuf?BEH~G*l4$X<>H^O5N4LE&|M7NZw?*_N++ty4a^HP3gIw;V z;cub#Fr5rMP?Pqs$_M{ z>41jM$#ByTWz3rj?%IwyYNo2n6}v*tpdx^;TEr;Cs5#N);p^t~ojUm!D6oiz*14Ip z8c{EE*%E#^W-UhiwRXq&km5G~JJhY#Bzk^wGnm7I9AkSE^>JjltQ1QgG29 zD}R9aEzE{__g~sv7=WV8$&mhn?s1p5qID=l{++!REff=&*nL`$A8a#mv8(1g@m=Fw z|9dBMtutQrY96)PHutE5UVMaU9H7*CQt99j@@`l(a@tQiLQ)^4i6>zIwT2)?oM`%& zDjCsFPdlI$0F>(;ZG(%yigod4)|ss51vw29Rb#hX|J+IA>!i_eO0VFL(YNTUl!E?; zvo?ZAFpC5rWg76i;CO2WHu+wIu1$wkRJ9&!AH_~qcIx*E0*DbgFNT3M5*?XudeB1H zg|0lRJe8w2qKl*14Mtuenw9DL(p)B*mXAcFMHo!l1S4u`v<94~^pjSBu1$!0v5ifp z_VfaaBi2$+Wx{Tia-#);41Z81vOVhPx@8*a$CC7ckA;D#NV5p)I~70g!_xi~E=q;a zVu%!|Sx{P}Ai?Dw(SR1r(p_5^ub9}q%O~$LxFh;?EIhz}(xN3rokp}AP-YNh zj~;#c=iL#m@S!|p*}A7+j+@qEh361=eA3*knHM>LgSMSWPPA}AJqD&!F288@kWJ{B zt#%UQ-`HCNl&rD__G85wOzskYE$uf2Uzxfq?HX};xsrPH-=D)Q=8WmB`f7Btaq(h~W9cWST04UJ{Si+H0nMCD;?Xh7229Lsl`?^)P555kfWO$BP!TM2OjU3PrMYF6 zNtH_8kA*xp+kDMOAC0m8)SLMp3BB%KCwZ+GC`N#Lalfo-&>5?1JF@`t1 z40)xnLApsO>MrH6m=8RDCgI|Q5wfSVnu2~e>g`Jeo7?jz`V`si>0g*M@fCG7vC+jz zE-f3Y@`Z`1a$27G`9-6znEXf(;~@2zWJhE;z14$(kbi|!0$YpXX@&8%8(rO)vlGQ$ zr~GEBR2k1Ai&YaYhExD;&%bi`YV_^fv2c zfepbIuSCtt^R^^_lxBOEu~s#-6$5*{b%{^zT1~FpfRn~;#lqr)LWNFQAQ1hn^tNuZbJnJiQ@vnhc`nuKfc>>j-4T$xzEiNPC0ziU8JXI+h2CtdM zs^y!5#;(O>4&)|X7(l1QAaD<*V8FxW+PBcVW1DNQac8k!o2gYOVkIaO?}F+K$S2Ca zC?UA=?x9EUL)){bgK%?_bkBmOtMzbQW-RPYr7QBvX+VM~1jh_9RAQ#k zXoAD3fa*12+C=(QoV@!ZW(Nm?RA&1(q8ax+lh0{O}dxY+u_!ZrBuy0I@)40iG+It zih8o<{TE~bg)}L8JmCG^NYzdkl#=tujs+!a?`XT%G)>5QCCy*wg3n?J(mhu6I%*Bn zj>4D9W6XnrW0a$-Egrbko%Tlxrv~`sEwBMhx5No~T;d4pk=Y<`x1=U|c@=A|I1;{N zaA5C;#CC~tXHu16-9YB~ZN$7oii zf^p0Iu#kI(FAwtK(6QY#$~h8s`7oTRSK;=(FKu`uSiG1g2PrA%Y z{lMkC5hTurT&st;ysh8Z5CHwEmRHY#_fP0GL0)hzLF~W;r&Ql&JyEfL4OfW-yD8~f z5~vxQX#w2x5rItAj!5`^_SO9OWMMd`RKtnd13OL$(T*qQR>2XaXle_gCPbW^@sgtf z5JJ$--vT%Xd^ieB+F#e8oqr>{$@;2Er9R9<0_(SI2@8}RQLYi@x7Bqy6_gW!9JmVM zDo&aL2NN8r$8D64N!YS_IxvSkap51696#&m_j^vL~_N@C181>7W|HUSnKvww$YPLZ-J_juNBF>+|jiP;=%^7@Rz3IB6c`GUD>~?V?>< z99{aA<@~>YkRc@8%hJ?ob!1Nc+#%b zxiS4O5f@O(bQVR2Ol!um49jBvM%gT2efYUAA={A~*Q;*dX zqF1hCIv&z0u~~Zq1R2DR!%^L#9DtwZO3$TRC0c7Kx$c!=P8g$Jlw%z z3ZZ|)3rY=-Nb{~qb{ZzUZ45nLB=;Nwu{@^Se!$);fjx;|<4ROq<{6U@Hro|rw{`n)0R3T-q)J~zIoW}oa{44E_?MzIF=IA4CM?(-B+weV zyI4CfGBD?>bdn{0J@qoV?u_LaaGyy0+ag%Au~{eH@g>4fe=+VjY)Z9s=Z>7NDjzEd>CHOj=@a5WRAvFl^MxK}90`+y)SB?2J z$+~+@)-J&??#o{@@_PRovrIh8VqS-(N_2n`YCPH+XbqMZ7XV*OWuPX4N^$3urMR+U z4d#%MCY!5+uc|Bm9@EWOO+8Ne{y|xRvQMay>M9uZD(yD|b)+#} zun>gww_Edyirtoxu?!)>{85hq+=gTjsL8iD8)kva!5D_*{2j=^s~f91laH1FKf<%n zw}lRJz2Wqeb^sT`bix=d!3~a>xGNszU4Uuc{myS+a11e6M}8n0sGv%@HE2aZoSQo` zi0JW92vw^|i(f4`N1h9R3+;bzRjS^T#Q8Ip*2~nvt`4Ufw_>Wp8paqM8Ggu>`&x4iHO)u z3XFcoKsEdEQAj<%Z9fq{$0}tioXCrK%xY?w_ohIPe|E=rxN-xTk(Q9NM%m}eguND< znZ0kM10E08g|zPAo*EzmUL#fbxAA;E#saQ{oP?lZZXTGXA&~U9lzk1Oma%wfH(NK` z$)Susu`XRDsa&Y(?|Xx>YU_}Y8M<|FCEBUI?bzZGY%+)twoSmwB|XA!+G)_9y@{{i zR9$M_#i7h{E)wP2)jGL4R1Ej^-z+|jp3x;9Ji<;jo17Cr_%T~Sd@pzK?R$r7`m`pMgF6kOh;K(p<*cD zfPjEq)dY}-JXgC1M3PwP8cz@4>VQS4m(syhFgv|Kk z@P^EAXAKjHqUbw@gA|oseEN>j>?ddhtLqU2oylX{Q-gcEJ;awMgMvj96XXvTwpga9 z%L|6>#3V>Z{a8W_jA`hO06uPBqyw6bxbW0P@&T$-SK*;dN~&WfAvj|1=U?}0pcKaY z^T3KbPJRNz-p!Z5skYqq${uE)>yc(bYI!S%kkmtN1~WUS+5h|HMpJ{Y|Q8J;=AZ@E*5>`ZVBgQiA0Z3a^Iv z%)_40?;j@6qZyK@72b~$HM+nMuaZqf)C3M$OWI|~LXYw_ND_+xj>3E?VjlkDk6``y z_5~^V`6&d81MY-*@@md>ByuC?FRSVl%dQKKTPqH^kLDsnFTM(R6IPsaXx{lD`|NoV zA2jkTF;^ZEFUp+d-eYuSQP0|ZYK5oy;2+6UjRY8UwyI`A1`PHLHs6IJ{#PyobCCd| zOME}^_O?rH=AfBcweb3nlf01i>n;3oHX4!i?}-@|ltMOiqCM^AS)8yb!W>9Yi-)*^Gzu_ef2OO$`@I5?`4DB)$~x~h`1i{99AQsz zETku~Kvu>OGF~pKy5HV2ANyR|s=df#9G5y|#e&k`b;U`b=_y~3ugnvyjEnhsdb8#Q1)X^mbj z82f1{#WeA7VQ;M9>UyGab~I#1v8590wHe@_MVU0|Q1JFX)>nSEbUKwFw02%>OP_}&UUiHf7nYp2d>+3( zvL;F_HD$P-aPfC?KjD_nuh)HvADS1%v`mhZ1G44pKA_Dv+2p zTc;L)-$Jwfy2};*G29+xt1B(TDChsjF2UA2%_QoYNV$U6OcCp59%?H^7su<*IUH`< zsnMZ>2DRdNhS!C`fa(LPUMQa*-{3SVkL!C)+P79!?LF0P&g-AKp)cFFhcCbQ8);9@CK&CbGeihF1}-~W9SW9=YoL9=Gqi??HR2)+0?&& zx+`Yoct=+CTn`c9)R6|gL<+MVvk7G)7u~C2e+lUw)4JVAUWzwe0#d^5$ww0?OAw6^ zU?gWHD9?ze9@}fOP^BSq5=KpW{m;;UEZdp@#+z|DZh$6Jp(@DZ)+slVPv7{h&AAVU z5Q~J3IY_3a(U1R1(ic)o<#7fqJh8d8IezQ@$f;V^!?8b1biSp~eO4kco-=bSTDB9- zSE;T85Z!NGJP^?f{AljpbivoFAMbSFp zj!GbAE&|>0cq%H^w#_c4p=B+K0Iup9Q)buoLG?XztN&?)KrkK%)>?v=JzE9AFtTUc zW*ebJ4N9k3qq+NOmX@X%#n$k&xQU^X>s8}jnVaqVX}-=Tnzxb4w16(c#)5{Vd{A~C z=GDnaX@BY^=|SV0cSUw1Pi(Qv!N3IIDAZKEs?>l;yIDk3`qRE@Jknn2E4iYh=4Wn5 z8MsUI*vE!dycWg3SqEKG?eLJ1IQIuFAz`CUrQCnxR4gm#!ju1!_Brc%Vlxg6f3fcM z*6?(z(r$P37|L50VKW5#n&}xkjN2P$=)a=R$rhbpoP#T;VcD!iva~}*ZFhkI6RWp4 zB%ZyR-fD&vS?m5zqK4)LuAd^Auw@aHK(kWm@+8dr=crsWK9C8(a8dyi$< z@9n%BGs^*Y9ZgzqvE%2c!En&pyz`MQkYu{Q6C6G3FJPS#^pAsQ+wTA-idbSyYbDNh zwt5tA-pD?!=Ry>m>DY;Y^)Bs$GzB?-oeqY?`)9pwxNx08x`x4uUnJx?et?{>Y5JNH zMbz{4cfS`DF`pULb7mi~n|m~o*Lvkre+*e9X_I)X!|h})z#XW3UT+fe)GePyF6I>x zbNLbM@Fnj|b}h~8Jp4EpXu)q@{5Th6#%~_-xP5_O;ooF){Rq|2vxYqnZL_s~ zf!FTk-&AD^QVW5qJF+O7or3_^HxO3&b0edv%A?s{r_~#H%6L!&FYi5my>Eh=`i{UR z^$06;>5-7B^L*og!0RolH`Io}x#`qwH-x@S&swh$a#Mt{w~}KBP;_)Ls{8QYsB#8$ z?y-uhRa(+-EWEDJa|hC_34NT`UbJ~T2T}x)tY-a1y>Rk)BTK9|;`<9BR%*a$6%76Z z-dqR|-aHSOlkMCFz?dh5H-EDdzvIhyt72u#cUH4 z6gR<*JKNr51wx1?-Z}|?!keQcY6knQcC9m43JF|H(VTtB$-S`{_JIT)2ujen7l-NCeq7-s-lQm8pM`lL5%;&p?9K8p!JZ z2ZM$JJ!$wOUGCzH?kGJ43&y;)^%Q+60dLi?GwXlC|F!5qf@&ChOu?S7gfs?f|83~g zv7)Nz=tL@LumDxG%!JG?a_RxNk``5s#4Fyac)+*|l#xgO)fh|uVx*DBV8b_|+7A#i z6J+>?_n-Ft1SA>Y{jZtJ$FZEcM==z4!r~_nLJx8Q$X{F?0W{>4PsV?OSQHls33xdL zwW6xvO<3Gq{NGe4YwTHDa#jFMhZ3aC&hG!41=|-Eb0gcp3))QlcCSW|z7}bduM1S> z)IZ9px0UdQ6CLOjtJzakTr?bE1-wT<#01ZR*h4S0`3GBesi#s}DR!eo_j$tZb=cpN z>O*iUu2b)jw1`LbOJxo4)NZ^5vN-^vv-bhjC-BtAWros>9$o``WM*{)j2(b_OJ&

D7meI9d(q20PoV;N|p$=JX^=B?~10qDm26iu=R$ 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

diff --git a/js/console/src/components/utils/GraphHeader.tsx b/js/console/src/components/utils/GraphHeader.tsx index ce0c717e28..b79d8ca263 100644 --- a/js/console/src/components/utils/GraphHeader.tsx +++ b/js/console/src/components/utils/GraphHeader.tsx @@ -1,38 +1,66 @@ -import { InfoOutlineIcon, Tooltip, WrapWithIf } from '@pluralsh/design-system' +import { InfoOutlineIcon, Tooltip } from '@pluralsh/design-system' +import { TRUNCATE } from 'components/utils/truncate' +import type { ReactNode } from 'react' import styled from 'styled-components' +/** + * One-line graph header shared by built-in and workbench dashboards: a left-aligned title, its + * description behind an info icon, and optional actions on the right. + */ export default function GraphHeader({ title, tooltip, + actions, }: { title: string - tooltip?: string + tooltip?: Nullable + actions?: ReactNode }) { return ( - } - > - - {title} - {!!tooltip && ( - - )} - - + {title} + {!!tooltip && ( + + + + )} + {actions && {actions}} ) } const WrapperSC = styled.div(({ theme }) => ({ - ...theme.partials.text.overline, - color: theme.colors['text-light'], - textAlign: 'center', + alignItems: 'center', + display: 'flex', + gap: theme.spacing.xsmall, + minHeight: 24, + minWidth: 0, + width: '100%', +})) + +const TitleSC = styled.h3(({ theme }) => ({ + ...theme.partials.text.body1, + ...TRUNCATE, + color: theme.colors.text, + margin: 0, + minWidth: 0, +})) + +const InfoIconSC = styled(InfoOutlineIcon)({ + flexShrink: 0, +}) + +const ActionsSC = styled.div(({ theme }) => ({ + alignItems: 'center', + display: 'flex', + flexShrink: 0, + gap: theme.spacing.xsmall, + marginLeft: 'auto', })) diff --git a/js/console/src/components/utils/GraphLegend.tsx b/js/console/src/components/utils/GraphLegend.tsx index df934d9487..efcbd64011 100644 --- a/js/console/src/components/utils/GraphLegend.tsx +++ b/js/console/src/components/utils/GraphLegend.tsx @@ -1,6 +1,8 @@ import type { CSSProperties } from 'react' import styled from 'styled-components' +import { TRUNCATE } from './truncate' + export type GraphLegendItem = { id: string label: string @@ -10,12 +12,19 @@ export type GraphLegendItem = { dashed?: boolean } +/** + * `wrap` flows every item onto as many lines as needed, `row` keeps a single + * truncated line, and `column` lists one item per line. + */ +export type GraphLegendLayout = 'wrap' | 'row' | 'column' + /** Series legend shared by all timeseries charts: line swatches, small muted labels. */ export function GraphLegend({ items, selectedId, onSelect, maxHeight, + layout = 'wrap', style, className, }: { @@ -23,6 +32,7 @@ export function GraphLegend({ selectedId?: string | null onSelect?: (id: string) => void maxHeight?: number + layout?: GraphLegendLayout style?: CSSProperties className?: string }) { @@ -30,6 +40,7 @@ export function GraphLegend({ return ( onSelect?.(id)} $interactive={!!onSelect} $dimmed={!!selectedId && selectedId !== id} + $layout={layout} > - {label} + {label} ))} ) } -const WrapperSC = styled.div({ +const WrapperSC = styled.div<{ $layout: GraphLegendLayout }>(({ $layout }) => ({ alignContent: 'flex-start', display: 'flex', flexShrink: 0, - flexWrap: 'wrap', gap: '4px 10px', -}) + ...($layout === 'wrap' && { flexWrap: 'wrap' }), + ...($layout === 'column' && { flexDirection: 'column' }), + ...($layout === 'row' && { + overflow: 'hidden', + maskImage: + 'linear-gradient(to right, black calc(100% - 24px), transparent)', + }), +})) -const ItemSC = styled.button<{ $interactive: boolean; $dimmed: boolean }>( - ({ theme, $interactive, $dimmed }) => ({ - ...theme.partials.reset.button, - alignItems: 'center', - borderRadius: 4, - color: theme.colors['text-xlight'], - cursor: $interactive ? 'pointer' : 'default', - display: 'flex', - fontSize: 12, - gap: 6, - lineHeight: '16px', - maxWidth: '100%', - minWidth: 0, - opacity: $dimmed ? 0.45 : 1, - padding: '2px 4px', - textAlign: 'left', - ...($interactive && { - '&:hover': { - background: 'rgba(0, 0, 0, .03)', - color: theme.colors['text-light'], - }, - '&:focus-visible': { - outline: `1px solid ${theme.colors['border-outline-focused']}`, - outlineOffset: 1, - }, - }), - }) +const LabelSC = styled.span<{ $layout: GraphLegendLayout }>(({ $layout }) => + $layout === 'wrap' + ? { minWidth: 0, overflowWrap: 'anywhere' } + : { ...TRUNCATE, minWidth: 0 } ) + +// a single row clips overflowing items rather than squeezing them all +const ROW_ITEM_MAX_WIDTH = 220 + +const ItemSC = styled.button<{ + $interactive: boolean + $dimmed: boolean + $layout: GraphLegendLayout +}>(({ theme, $interactive, $dimmed, $layout }) => ({ + ...theme.partials.reset.button, + alignItems: 'center', + borderRadius: 4, + color: theme.colors['text-xlight'], + cursor: $interactive ? 'pointer' : 'default', + display: 'flex', + fontSize: 12, + gap: 6, + lineHeight: '16px', + maxWidth: $layout === 'row' ? ROW_ITEM_MAX_WIDTH : '100%', + minWidth: 0, + ...($layout === 'row' && { flexShrink: 0 }), + opacity: $dimmed ? 0.45 : 1, + padding: '2px 4px', + textAlign: 'left', + ...($interactive && { + '&:hover': { + background: 'rgba(0, 0, 0, .03)', + color: theme.colors['text-light'], + }, + '&:focus-visible': { + outline: `1px solid ${theme.colors['border-outline-focused']}`, + outlineOffset: 1, + }, + }), +})) diff --git a/js/console/src/components/utils/axisTicks.ts b/js/console/src/components/utils/axisTicks.ts index 1215aacc5a..26d531ea6b 100644 --- a/js/console/src/components/utils/axisTicks.ts +++ b/js/console/src/components/utils/axisTicks.ts @@ -1,3 +1,5 @@ +import { AXIS_CHAR_PX } from './timeTicks' + export type TickBase = 'decimal' | 'binary' | 'duration' | 'integer' export type NiceAxis = { @@ -114,6 +116,20 @@ export function niceAxis( return { min: start, max: end, step, ticks } } +const AXIS_TICK_PX = 14 + +/** Left margin wide enough for the longest of the given y tick labels. */ +export function yAxisLabelsWidth(labels: string[]) { + if (labels.length === 0) return 40 + const chars = Math.max(...labels.map((label) => label.length)) + return Math.min(Math.max(chars * AXIS_CHAR_PX + AXIS_TICK_PX, 32), 96) +} + +/** Right margin so the last x tick label (centered on the edge) isn't clipped. */ +export function xAxisOverhang(labelChars: number) { + return Math.max(Math.ceil((labelChars * AXIS_CHAR_PX) / 2) + 4, 16) +} + export function seriesExtent(values: Iterable) { let min = Infinity let max = -Infinity diff --git a/js/console/src/components/utils/metrics/MetricsCard.tsx b/js/console/src/components/utils/metrics/MetricsCard.tsx index d00e8c2cfb..913e64793b 100644 --- a/js/console/src/components/utils/metrics/MetricsCard.tsx +++ b/js/console/src/components/utils/metrics/MetricsCard.tsx @@ -1,7 +1,15 @@ import { Card } from '@pluralsh/design-system' import styled from 'styled-components' -/** Card for metrics graphs: hairline border on the page background, like workbench dashboard panels. */ -export const MetricsCard = styled(Card)(({ theme }) => ({ - backgroundColor: theme.colors['fill-zero'], -})) +/** + * Card for metrics graphs, shared by workbench and built-in dashboards. Hairline border on the page + * background in light mode; in dark mode it matches section headers and dropdown popovers. + */ +export const MetricsCard = styled(Card)(({ theme }) => + theme.mode === 'dark' + ? { + backgroundColor: theme.colors['fill-one'], + border: theme.borders['fill-one'], + } + : { backgroundColor: theme.colors['fill-zero'] } +) diff --git a/js/console/src/components/utils/metrics/MetricsGraphCard.tsx b/js/console/src/components/utils/metrics/MetricsGraphCard.tsx index d6403c0be8..30b5edb589 100644 --- a/js/console/src/components/utils/metrics/MetricsGraphCard.tsx +++ b/js/console/src/components/utils/metrics/MetricsGraphCard.tsx @@ -54,6 +54,6 @@ export const MetricsScrollSC = styled.div(({ theme }) => ({ const GraphCardSC = styled(MetricsCard)(({ theme }) => ({ display: 'flex', flexDirection: 'column', - gap: theme.spacing.xsmall, + gap: theme.spacing.small, padding: theme.spacing.medium, })) diff --git a/js/console/src/components/workbenches/workbench/job/WorkbenchJobActivityResults.tsx b/js/console/src/components/workbenches/workbench/job/WorkbenchJobActivityResults.tsx index 5f72c2a8ea..d77994e50d 100644 --- a/js/console/src/components/workbenches/workbench/job/WorkbenchJobActivityResults.tsx +++ b/js/console/src/components/workbenches/workbench/job/WorkbenchJobActivityResults.tsx @@ -32,7 +32,10 @@ import { LogLine } from 'components/cd/logs/LogLine' import { GqlError } from 'components/utils/Alert' import { SeriesSliceTooltip, SliceTooltip } from 'components/utils/ChartTooltip' import { dateFormat, useGraphTheme } from 'components/utils/Graph' -import { GraphLegend } from 'components/utils/GraphLegend' +import { + GraphLegend, + type GraphLegendLayout, +} from 'components/utils/GraphLegend' import { RectangleSkeleton } from 'components/utils/SkeletonLoaders' import { Body1P, Body2P, CaptionP } from 'components/utils/typography/Text' import { @@ -797,12 +800,16 @@ export function WorkbenchJobMetricsLegend({ selectedId, onSelect, paddingLeft, + layout, + className, }: { series: MetricSeries[] maxHeight?: number selectedId?: string | null onSelect?: (id: string) => void paddingLeft?: number + layout?: GraphLegendLayout + className?: string }) { return ( ) diff --git a/js/console/src/components/workbenches/workbench/monitoring/DashboardTimeseriesChart.tsx b/js/console/src/components/workbenches/workbench/monitoring/DashboardTimeseriesChart.tsx index a203cecec6..1d8c36ba53 100644 --- a/js/console/src/components/workbenches/workbench/monitoring/DashboardTimeseriesChart.tsx +++ b/js/console/src/components/workbenches/workbench/monitoring/DashboardTimeseriesChart.tsx @@ -1,4 +1,8 @@ -import { seriesExtent } from 'components/utils/axisTicks' +import { + seriesExtent, + xAxisOverhang, + yAxisLabelsWidth, +} from 'components/utils/axisTicks' import { ChartRangeSelect, timeAxisFormat, @@ -13,12 +17,10 @@ import { JobActivityMetricsChart, METRICS_CHART_MARGIN, } from '../job/WorkbenchJobActivityResults' -import { - formatUnitValue, - unitAxis, - xAxisOverhang, - yAxisLabelsWidth, -} from './dashboardUnits' +import { formatUnitValue, unitAxis } from './dashboardUnits' + +// tick (5) + tick padding (5) + an 11px label line +const X_AXIS_HEIGHT_PX = 24 /** Metrics chart pinned to the dashboard window, with drag-to-zoom. */ export const DashboardTimeseriesChart = memo(function DashboardTimeseriesChart({ @@ -42,6 +44,7 @@ export const DashboardTimeseriesChart = memo(function DashboardTimeseriesChart({ const margin = useMemo( () => ({ ...METRICS_CHART_MARGIN, + bottom: X_AXIS_HEIGHT_PX, left: yAxisLabelsWidth( yAxis.ticks.map((tick) => formatUnitValue(tick, unit)) ), diff --git a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchDashboardPanels.test.ts b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchDashboardPanels.test.ts index 44ff25f2d5..9ec3a80030 100644 --- a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchDashboardPanels.test.ts +++ b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchDashboardPanels.test.ts @@ -8,9 +8,40 @@ import { toPanelGraph } from './DashboardGraphSource' import { dashboardGraphNeedsFetch, dashboardPanelIsWaitingForData, + dashboardLegendMode, dashboardPanelVisibleData, } from './WorkbenchDashboardPanels' +describe('dashboard legend mode', () => { + const many = Array.from( + { length: 12 }, + (_, i) => `entrypoint=operation_${i}, operation_type=query` + ) + + it('hides the legend on narrow grid panels', () => { + expect(dashboardLegendMode(320, false, ['metric'])).toBe('none') + }) + + it('uses a single row on regular grid panels, including before measuring', () => { + expect(dashboardLegendMode(0, false, many)).toBe('row') + expect(dashboardLegendMode(500, false, many)).toBe('row') + }) + + it('keeps a legend that fits on one line under the plot, even when wide', () => { + expect(dashboardLegendMode(1200, false, ['metric'])).toBe('row') + expect(dashboardLegendMode(1200, true, ['metric'])).toBe('row') + }) + + it('lists overflowing series beside wide panels', () => { + expect(dashboardLegendMode(1200, false, many)).toBe('side') + expect(dashboardLegendMode(1200, true, many)).toBe('side') + }) + + it('wraps an overflowing legend in a narrow fullscreen view', () => { + expect(dashboardLegendMode(600, true, many)).toBe('wrap') + }) +}) + describe('dashboard panel loading', () => { it('renders a loading panel without fetching until inputs are ready', () => { expect( diff --git a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchDashboardPanels.tsx b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchDashboardPanels.tsx index 3b03ad2815..9dc08aee77 100644 --- a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchDashboardPanels.tsx +++ b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchDashboardPanels.tsx @@ -1,22 +1,22 @@ import { - Card, CloseIcon, DocsIcon, ExpandIcon, Flex, IconFrame, - InfoIcon, ModalWrapper, - Tooltip, + useResizeObserver, } from '@pluralsh/design-system' import { WorkbenchEmptyState } from 'components/workbenches/common/WorkbenchEmptyState' import { ChatMarkdown } from 'components/ai/chatbot/ChatMarkdown' import { GqlError } from 'components/utils/Alert' +import GraphHeader from 'components/utils/GraphHeader' +import type { GraphLegendLayout } from 'components/utils/GraphLegend' +import { MetricsCard } from 'components/utils/metrics/MetricsCard' import { MetricsSection } from 'components/utils/metrics/MetricsSection' import { PieChart } from 'components/utils/PieChart' import { RectangleSkeleton } from 'components/utils/SkeletonLoaders' -import { TRUNCATE } from 'components/utils/truncate' -import { Body1P, Body2P, CaptionP } from 'components/utils/typography/Text' +import { Body2P, CaptionP } from 'components/utils/typography/Text' import { DashboardGraphType, DashboardGraphUnit, @@ -26,7 +26,7 @@ import { WorkbenchJobActivityTraceFragment, } from 'generated/graphql' import { groupBy, isEmpty, maxBy, sortBy } from 'lodash' -import { useMemo, useRef, useState } from 'react' +import { type ReactNode, useMemo, useRef, useState } from 'react' import styled from 'styled-components' import { COLORS } from 'utils/color' import { isNonNullable } from 'utils/isNonNullable' @@ -207,9 +207,6 @@ function DashboardGraphGrid({ queriesEnabled={queriesEnabled} onRangeSelect={onRangeSelect} onUpdate={onUpdate} - reserveDescription={rowGraphs.some( - ({ description }) => !!description - )} /> ))} @@ -236,8 +233,6 @@ type DashboardPanelProps = { queriesEnabled: boolean onRangeSelect?: (start: Date, end: Date) => void onUpdate?: () => void - /** another panel in the row has a description, so keep headers the same height */ - reserveDescription?: boolean } function DashboardPanel(props: DashboardPanelProps) { @@ -262,7 +257,6 @@ function DataDashboardPanel({ queriesEnabled, onRangeSelect, onUpdate, - reserveDescription = false, }: DashboardPanelProps) { const { useGraphData, readOnly } = useDashboardGraphSource() const needsFetch = dashboardGraphNeedsFetch( @@ -318,85 +312,64 @@ function DataDashboardPanel({ const panel = ( - - - {graph.title || graph.identifier} - {(graph.description || reserveDescription) && !fullscreen && ( - - {graph.description} - - )} - {graph.description && fullscreen && ( - {graph.description} - )} - - - {fullscreen ? ( - } - textValue="Close full screen" - tooltip="Close full screen" - onClick={() => setFullscreen(false)} - /> - ) : ( - } - textValue="Full screen" - tooltip="Full screen" - onClick={() => setFullscreen(true)} - /> - )} - {query ? ( - - ) : ( - - ) - } - textValue="Query" - onClick={() => setQueryOpen(true)} - /> - ) : ( - graph.description && ( - + + + {fullscreen ? ( } - textValue={graph.description} + icon={} + textValue="Close full screen" + tooltip="Close full screen" + onClick={() => setFullscreen(false)} /> - - ) - )} - - + ) : ( + } + textValue="Full screen" + tooltip="Full screen" + onClick={() => setFullscreen(true)} + /> + )} + {query ? ( + + ) : ( + + ) + } + textValue="Query" + onClick={() => setQueryOpen(true)} + /> + ) : null} + + } + /> + {graph.description && fullscreen && ( + {graph.description} + )} + {!graph.hasDatasource ? ( return ( - - - + ) } } +export type DashboardLegendMode = 'none' | 'row' | 'wrap' | 'side' + +const HIDE_LEGEND_BELOW_PX = 360 +const SIDE_LEGEND_FROM_PX = 900 +// GraphLegend at 12px: swatch, gaps and padding around each label +const LEGEND_CHAR_PX = 7 +const LEGEND_ITEM_CHROME_PX = 36 +const LEGEND_ITEM_MAX_PX = 220 + +function legendRowWidth(labels: string[]) { + return labels.reduce( + (sum, label) => + sum + + Math.min( + label.length * LEGEND_CHAR_PX + LEGEND_ITEM_CHROME_PX, + LEGEND_ITEM_MAX_PX + ), + 0 + ) +} + +/** + * Like Datadog's automatic legend: narrow panels rely on the hover tooltip, + * a legend that fits on one line sits under the plot, and only one that + * overflows it moves beside the plot on wide panels. + */ +export function dashboardLegendMode( + width: number, + fullscreen: boolean, + labels: string[] +): DashboardLegendMode { + // not measured yet + if (width === 0) return 'row' + if (!fullscreen && width < HIDE_LEGEND_BELOW_PX) return 'none' + if (legendRowWidth(labels) <= width) return 'row' + if (width >= SIDE_LEGEND_FROM_PX) return 'side' + return fullscreen ? 'wrap' : 'row' +} + +function TimeseriesPanelContent({ + series, + fullscreen, + selectedId, + onSelectSeries, + children, +}: { + series: ReturnType + fullscreen: boolean + selectedId: string | null + onSelectSeries: (id: string) => void + children: ReactNode +}) { + const ref = useRef(null) + const [width, setWidth] = useState(0) + useResizeObserver(ref, ({ width }) => setWidth(Math.floor(width))) + const mode = dashboardLegendMode( + width, + fullscreen, + series.map(({ shortLabel }) => shortLabel) + ) + const legend = (layout: GraphLegendLayout, maxHeight?: number) => ( + + ) + + return ( + + {children} + {mode === 'side' && {legend('column')}} + {mode === 'row' && legend('row')} + {mode === 'wrap' && legend('wrap', 160)} + + ) +} + function StatContent({ metrics, unit, @@ -815,57 +862,53 @@ const CellSC = styled.div<{ $x: number; $w: number }>(({ $x, $w }) => ({ }, })) -const PanelCardSC = styled(Card)<{ $fullscreen: boolean }>( +const PanelCardSC = styled(MetricsCard)<{ $fullscreen: boolean }>( ({ theme, $fullscreen }) => ({ - backgroundColor: theme.colors['fill-zero'], display: 'flex', flexDirection: 'column', flex: $fullscreen ? undefined : 1, - gap: theme.spacing.medium, + gap: $fullscreen ? theme.spacing.medium : theme.spacing.small, height: $fullscreen ? '100%' : 'auto', minWidth: 0, overflow: $fullscreen ? 'auto' : undefined, - padding: theme.spacing.large, + padding: $fullscreen ? theme.spacing.large : theme.spacing.medium, width: '100%', }) ) -const PanelHeaderSC = styled.div({ - alignItems: 'flex-start', +const PanelBodySC = styled.div({ display: 'flex', - gap: 16, + flex: 1, + flexDirection: 'column', + minWidth: 0, width: '100%', }) -const PanelActionsSC = styled.div(({ theme }) => ({ - alignItems: 'center', +const TimeseriesSC = styled.div<{ $side: boolean }>(({ theme, $side }) => ({ display: 'flex', - flexShrink: 0, - gap: theme.spacing.xsmall, + flex: 1, + flexDirection: $side ? 'row' : 'column', + gap: $side ? theme.spacing.medium : theme.spacing.xsmall, + minHeight: 0, + width: '100%', })) -const PanelTitleSC = styled(Body1P)({ - ...TRUNCATE, - margin: 0, -}) - -const PanelBodySC = styled.div({ - display: 'flex', +// the chart is absolutely positioned so it fills whatever height the row gives +// the card without its own height feeding back into the row +const PlotAreaSC = styled.div<{ $fullscreen: boolean }>(({ $fullscreen }) => ({ flex: 1, - flexDirection: 'column', + minHeight: $fullscreen ? 240 : CHART_HEIGHT_PX, minWidth: 0, - width: '100%', -}) + position: 'relative', + '&& > *': { inset: 0, position: 'absolute' }, +})) -// a fixed two lines, so charts stay level across a row whatever the description length -const PanelDescriptionSC = styled(CaptionP)({ - display: '-webkit-box', - height: '2lh', - overflow: 'hidden', - WebkitBoxOrient: 'vertical', - WebkitLineClamp: 2, +const SideLegendSC = styled.div({ + flex: '0 0 clamp(200px, 28%, 320px)', + minWidth: 0, + position: 'relative', + '&& > *': { inset: 0, overflowY: 'auto', position: 'absolute' }, }) - const SkeletonStackSC = styled.div(({ theme }) => ({ display: 'flex', flexDirection: 'column', diff --git a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoring.tsx b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoring.tsx index 0a47f7a860..6dab2a7b55 100644 --- a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoring.tsx +++ b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoring.tsx @@ -35,6 +35,8 @@ export function WorkbenchMonitoring() { const isDashboardCreate = dashboardId === WORKBENCHES_CREATE_REL_PATH const isMonitorCreate = monitorId === WORKBENCHES_CREATE_REL_PATH const [updateOpen, setUpdateOpen] = useState(false) + // keyed by `${kind}:${id}` so closing the panel or switching resources doesn't lose a job + const [updateJobs, setUpdateJobs] = useState>({}) const dashboardQuery = useWorkbenchMonitoringDashboardQuery({ variables: { id: dashboardId ?? '' }, @@ -67,6 +69,14 @@ export function WorkbenchMonitoring() { monitorData?.monitor?.name, monitorId, ]) + const updateKey = updateTarget && `${updateTarget.kind}:${updateTarget.id}` + const updateJobId = updateKey ? updateJobs[updateKey] : undefined + const setUpdateJobId = (jobId: Nullable) => { + if (!updateKey) return + setUpdateJobs(({ [updateKey]: _, ...rest }) => + jobId ? { ...rest, [updateKey]: jobId } : rest + ) + } return ( setUpdateOpen(true)} /> ) : undefined @@ -130,6 +141,8 @@ export function WorkbenchMonitoring() { kind={updateTarget.kind} id={updateTarget.id} name={updateTarget.name} + jobId={updateJobId} + onJobChange={setUpdateJobId} /> )} diff --git a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoringUpdatePanel.tsx b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoringUpdatePanel.tsx index a837f4a583..e39e361f83 100644 --- a/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoringUpdatePanel.tsx +++ b/js/console/src/components/workbenches/workbench/monitoring/WorkbenchMonitoringUpdatePanel.tsx @@ -1,6 +1,13 @@ -import { Button, Flex, Flyover } from '@pluralsh/design-system' +import { + AddIcon, + Button, + ChatOutlineIcon, + Flex, + Flyover, + Tooltip, + WrapWithIf, +} from '@pluralsh/design-system' import type { MonitoringResourceType } from 'components/ai/chatbot/input/autocomplete/mentionTypes' -import { useState } from 'react' import { useOutletContext } from 'react-router-dom' import styled from 'styled-components' import { WorkbenchOutletContext } from '../Workbench' @@ -11,21 +18,40 @@ import { monitoringUpdatePromptSeed } from './monitoringUpdatePrompt' export function WorkbenchMonitoringUpdateButton({ kind, name, + hasJob, onClick, }: { kind: MonitoringResourceType name: string + hasJob: boolean onClick: () => void }) { + const label = kind === 'dashboard' ? 'Update dashboard' : 'Update monitor' + return ( - + + ) } @@ -35,25 +61,19 @@ export function WorkbenchMonitoringUpdatePanel({ kind, id, name, + jobId, + onJobChange, }: { open: boolean onClose: () => void kind: MonitoringResourceType id: string name: string + jobId: Nullable + onJobChange: (jobId: Nullable) => void }) { const { workbenchId, isLoading, workbench } = useOutletContext() - const [jobId, setJobId] = useState(null) - - // Reset the in-flyover chat when the panel closes or is retargeted. Adjusted - // during render (React-endorsed) instead of setState-in-effect. - const targetKey = `${kind}:${id}:${open ? 'open' : 'closed'}` - const [prevTargetKey, setPrevTargetKey] = useState(targetKey) - if (prevTargetKey !== targetKey) { - setPrevTargetKey(targetKey) - setJobId(null) - } return ( - {kind === 'dashboard' ? 'Update dashboard' : 'Update monitor'}{' '} - {name} + + {kind === 'dashboard' ? 'Update dashboard' : 'Update monitor'}{' '} + {name} + + {jobId && ( + + )} } width="min(720px, 100%)" @@ -105,7 +137,7 @@ export function WorkbenchMonitoringUpdatePanel({ })} placeholder="Describe the change. Use @ to mention dashboards, monitors, clusters, and more." bgColor="fill-one-selected" - onCreated={(job) => setJobId(job.id)} + onCreated={(job) => onJobChange(job.id)} /> )} @@ -116,6 +148,10 @@ export function WorkbenchMonitoringUpdatePanel({ const UpdateHeaderSC = styled.span(({ theme }) => ({ ...theme.partials.text.buttonMedium, color: theme.colors['text-light'], + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + gap: theme.spacing.small, })) const UpdateHeaderNameSC = styled.span({ diff --git a/js/console/src/components/workbenches/workbench/monitoring/dashboardUnits.ts b/js/console/src/components/workbenches/workbench/monitoring/dashboardUnits.ts index faadadae76..43358e890d 100644 --- a/js/console/src/components/workbenches/workbench/monitoring/dashboardUnits.ts +++ b/js/console/src/components/workbenches/workbench/monitoring/dashboardUnits.ts @@ -2,6 +2,7 @@ import { niceAxis, type NiceAxis, type TickBase, + yAxisLabelsWidth, } from 'components/utils/axisTicks' import { DashboardGraphUnit } from 'generated/graphql' @@ -83,9 +84,6 @@ function trim(value: number) { return String(Number(value.toPrecision(3))) } -const AXIS_CHAR_PX = 7 -const AXIS_TICK_PX = 14 - function tickBaseForUnit(unit: Nullable): TickBase { switch (unit) { case DashboardGraphUnit.Bytes: @@ -109,13 +107,6 @@ export function unitAxis( }) } -/** Left margin wide enough for the longest of the given y tick labels. */ -export function yAxisLabelsWidth(labels: string[]) { - if (labels.length === 0) return 40 - const chars = Math.max(...labels.map((label) => label.length)) - return Math.min(Math.max(chars * AXIS_CHAR_PX + AXIS_TICK_PX, 32), 96) -} - /** Left margin wide enough for the longest y tick label in `[min, max]`. */ export function yAxisWidth( min: number, @@ -126,8 +117,3 @@ export function yAxisWidth( const samples = [min, max, (min + max) / 2, 0] return yAxisLabelsWidth(samples.map((value) => formatUnitValue(value, unit))) } - -/** Right margin so the last x tick label (centered on the edge) isn't clipped. */ -export function xAxisOverhang(labelChars: number) { - return Math.max(Math.ceil((labelChars * AXIS_CHAR_PX) / 2) + 4, 16) -} diff --git a/js/design-system/src/components/ModalWrapper.tsx b/js/design-system/src/components/ModalWrapper.tsx index f46e980809..d6119ba037 100644 --- a/js/design-system/src/components/ModalWrapper.tsx +++ b/js/design-system/src/components/ModalWrapper.tsx @@ -72,6 +72,9 @@ const ContentSC = styled(Dialog.Content)(({ theme }) => ({ flexDirection: 'column', overflow: 'auto', boxShadow: theme.boxShadows.modal, + // radix focuses the content itself when the focused child unmounts (eg a submitted form + // swapping views), which otherwise draws the browser's focus ring around the whole dialog + '&:focus, &:focus-visible': { outline: 'none' }, '@keyframes popIn': { from: { transform: 'scale(0.8)' }, to: { transform: 'scale(1)' }, From 84bdd467ac27e94e64438489521d1641655a2a2b Mon Sep 17 00:00:00 2001 From: michaeljguarino Date: Sat, 17 Oct 2026 00:49:10 -0400 Subject: [PATCH 6/7] node dashboards --- go/client/models_gen.go | 131 ++++- .../cluster/metrics/UsageMetricGraphCard.tsx | 11 +- .../cluster/metrics/clusterMetricsGraphs.ts | 23 +- .../components/cluster/nodes/NodeMetrics.tsx | 184 +++++++ .../cluster/nodes/nodeMetricsGraphs.test.ts | 136 ++++++ .../cluster/nodes/nodeMetricsGraphs.ts | 451 ++++++++++++++++++ .../components/kubernetes/cluster/Node.tsx | 13 + .../src/components/layout/PageToolbar.tsx | 8 +- .../components/utils/metrics/metricFormats.ts | 3 + js/console/src/generated/graphql.ts | 323 +++++++++++++ .../generated/persisted-queries/client.json | 5 + js/console/src/graph/cd/clusters.graphql | 149 ++++++ js/console/src/routes/kubernetesRoute.tsx | 5 + lib/console/deployments/observability.ex | 8 +- .../deployments/observability/metrics.ex | 63 ++- lib/console/graphql/deployments/cluster.ex | 58 +++ .../resolvers/deployments/observability.ex | 14 + schema/schema.graphql | 113 +++++ .../console/ai/workbench/mcp/clients_test.exs | 21 +- .../observability/metrics_test.exs | 63 +++ .../deployments/cluster_queries_test.exs | 57 +++ 21 files changed, 1811 insertions(+), 28 deletions(-) create mode 100644 js/console/src/components/cluster/nodes/NodeMetrics.tsx create mode 100644 js/console/src/components/cluster/nodes/nodeMetricsGraphs.test.ts create mode 100644 js/console/src/components/cluster/nodes/nodeMetricsGraphs.ts diff --git a/go/client/models_gen.go b/go/client/models_gen.go index b662a548e0..3eb93d46c6 100644 --- a/go/client/models_gen.go +++ b/go/client/models_gen.go @@ -2239,7 +2239,9 @@ type Cluster struct { // cluster-wide prometheus timeseries for cpu, memory, network, storage and pod health, optionally broken out by namespace or node ClusterUsageMetrics *ClusterUsageMetrics `json:"clusterUsageMetrics,omitempty"` ClusterNodeMetrics *ClusterNodeMetrics `json:"clusterNodeMetrics,omitempty"` - NetworkGraph []*NetworkMeshEdge `json:"networkGraph,omitempty"` + // host, resource, workload and health prometheus timeseries for a single node + NodeUsageMetrics *NodeUsageMetrics `json:"nodeUsageMetrics,omitempty"` + NetworkGraph []*NetworkMeshEdge `json:"networkGraph,omitempty"` // a list of node healthstatistics for this cluster NodeStatistics []*NodeStatistic `json:"nodeStatistics,omitempty"` // A pod-level set of utilization metrics for this cluster for rendering a heat map @@ -5828,6 +5830,74 @@ type NodeUsage struct { Memory *string `json:"memory,omitempty"` } +// Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node through +// node_uname_info's nodename), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken +// out by the `groupBy` argument and labeled by `namespace` (and `pod`) accordingly; the rest are node-wide. +type NodeUsageMetrics struct { + // fraction (0-1) of host cpu time spent busy + CPUUtilization []*MetricResponse `json:"cpuUtilization,omitempty"` + // fraction (0-1) of host cpu time per non-idle mode, labeled by `mode` + CPUModes []*MetricResponse `json:"cpuModes,omitempty"` + // host cpu count + CPUCores []*MetricResponse `json:"cpuCores,omitempty"` + // 1m host load average + Load1 []*MetricResponse `json:"load1,omitempty"` + // 5m host load average + Load5 []*MetricResponse `json:"load5,omitempty"` + // 15m host load average + Load15 []*MetricResponse `json:"load15,omitempty"` + // host memory in bytes + MemoryTotal []*MetricResponse `json:"memoryTotal,omitempty"` + // host memory in use (total less available) in bytes + MemoryUsed []*MetricResponse `json:"memoryUsed,omitempty"` + // host page cache and buffers in bytes + MemoryCached []*MetricResponse `json:"memoryCached,omitempty"` + // major page faults per second + MajorPageFaults []*MetricResponse `json:"majorPageFaults,omitempty"` + // fraction (0-1) of each host filesystem used, labeled by `mountpoint` + FilesystemFullness []*MetricResponse `json:"filesystemFullness,omitempty"` + // host disk read throughput in bytes/s + DiskRead []*MetricResponse `json:"diskRead,omitempty"` + // host disk write throughput in bytes/s + DiskWrite []*MetricResponse `json:"diskWrite,omitempty"` + // fraction (0-1) of time the busiest disk spent doing I/O + DiskBusy []*MetricResponse `json:"diskBusy,omitempty"` + // physical interface receive throughput in bytes/s + NetworkReceive []*MetricResponse `json:"networkReceive,omitempty"` + // physical interface transmit throughput in bytes/s + NetworkTransmit []*MetricResponse `json:"networkTransmit,omitempty"` + // physical interface receive and transmit errors per second + NetworkErrors []*MetricResponse `json:"networkErrors,omitempty"` + // physical interface receive and transmit drops per second + NetworkDropped []*MetricResponse `json:"networkDropped,omitempty"` + // allocatable node cpu in cores + CPUAllocatable []*MetricResponse `json:"cpuAllocatable,omitempty"` + // allocatable node memory in bytes + MemoryAllocatable []*MetricResponse `json:"memoryAllocatable,omitempty"` + // pod capacity of the node + PodsAllocatable []*MetricResponse `json:"podsAllocatable,omitempty"` + // 1 while each node condition holds, labeled by `condition` + Conditions []*MetricResponse `json:"conditions,omitempty"` + // container cpu usage in cores (grouped) + CPU []*MetricResponse `json:"cpu,omitempty"` + // cpu requests of pods on the node in cores (grouped) + CPURequests []*MetricResponse `json:"cpuRequests,omitempty"` + // cpu limits of pods on the node in cores (grouped) + CPULimits []*MetricResponse `json:"cpuLimits,omitempty"` + // container working set memory in bytes (grouped) + Memory []*MetricResponse `json:"memory,omitempty"` + // memory requests of pods on the node in bytes (grouped) + MemoryRequests []*MetricResponse `json:"memoryRequests,omitempty"` + // memory limits of pods on the node in bytes (grouped) + MemoryLimits []*MetricResponse `json:"memoryLimits,omitempty"` + // container OOM kills within each rate window (grouped) + OomKills []*MetricResponse `json:"oomKills,omitempty"` + // running pods on the node (grouped) + PodsRunning []*MetricResponse `json:"podsRunning,omitempty"` + // container restarts on the node within each rate window (grouped) + Restarts []*MetricResponse `json:"restarts,omitempty"` +} + type Notification struct { ID string `json:"id"` Title string `json:"title"` @@ -16781,6 +16851,65 @@ func (e MonitorType) MarshalJSON() ([]byte, error) { return buf.Bytes(), nil } +type NodeMetricsGrouping string + +const ( + // a single node-wide series + NodeMetricsGroupingNode NodeMetricsGrouping = "NODE" + NodeMetricsGroupingNamespace NodeMetricsGrouping = "NAMESPACE" + // one series per pod, labeled by `namespace` and `pod` + NodeMetricsGroupingPod NodeMetricsGrouping = "POD" +) + +var AllNodeMetricsGrouping = []NodeMetricsGrouping{ + NodeMetricsGroupingNode, + NodeMetricsGroupingNamespace, + NodeMetricsGroupingPod, +} + +func (e NodeMetricsGrouping) IsValid() bool { + switch e { + case NodeMetricsGroupingNode, NodeMetricsGroupingNamespace, NodeMetricsGroupingPod: + return true + } + return false +} + +func (e NodeMetricsGrouping) String() string { + return string(e) +} + +func (e *NodeMetricsGrouping) UnmarshalGQL(v any) error { + str, ok := v.(string) + if !ok { + return fmt.Errorf("enums must be strings") + } + + *e = NodeMetricsGrouping(str) + if !e.IsValid() { + return fmt.Errorf("%s is not a valid NodeMetricsGrouping", str) + } + return nil +} + +func (e NodeMetricsGrouping) MarshalGQL(w io.Writer) { + fmt.Fprint(w, strconv.Quote(e.String())) +} + +func (e *NodeMetricsGrouping) UnmarshalJSON(b []byte) error { + s, err := strconv.Unquote(string(b)) + if err != nil { + return err + } + return e.UnmarshalGQL(s) +} + +func (e NodeMetricsGrouping) MarshalJSON() ([]byte, error) { + var buf bytes.Buffer + e.MarshalGQL(&buf) + return buf.Bytes(), nil +} + type NodeStatisticHealth string const ( diff --git a/js/console/src/components/cd/cluster/metrics/UsageMetricGraphCard.tsx b/js/console/src/components/cd/cluster/metrics/UsageMetricGraphCard.tsx index 0bdc93c4ed..32c9c978f8 100644 --- a/js/console/src/components/cd/cluster/metrics/UsageMetricGraphCard.tsx +++ b/js/console/src/components/cd/cluster/metrics/UsageMetricGraphCard.tsx @@ -9,22 +9,21 @@ import { } from 'components/utils/metrics/metricFormats' import { RectangleSkeleton } from 'components/utils/SkeletonLoaders' import type { TimeRangeState } from 'components/utils/timerange/useTimeRange' -import type { ClusterUsageMetricsFragment } from 'generated/graphql' import { isEmpty } from 'lodash' import { useMemo } from 'react' -import type { ClusterMetricGraph } from './clusterMetricsGraphs' +import type { MetricGraph } from './clusterMetricsGraphs' -/** Renders one usage graph; callers own fetching so cluster and service scopes can share it. */ -export function UsageMetricGraphCard({ +/** Renders one usage graph; callers own fetching so cluster, service and node scopes can share it. */ +export function UsageMetricGraphCard({ graph: { title, tooltip, format, series }, metrics, loading, error, timeRange, }: { - graph: ClusterMetricGraph - metrics: Nullable + graph: MetricGraph + metrics: Nullable loading: boolean error?: ApolloError timeRange: TimeRangeState diff --git a/js/console/src/components/cd/cluster/metrics/clusterMetricsGraphs.ts b/js/console/src/components/cd/cluster/metrics/clusterMetricsGraphs.ts index e2b02050d3..750adc22de 100644 --- a/js/console/src/components/cd/cluster/metrics/clusterMetricsGraphs.ts +++ b/js/console/src/components/cd/cluster/metrics/clusterMetricsGraphs.ts @@ -15,23 +15,32 @@ export type UsageField = Exclude< '__typename' > -export type ClusterMetricGraph = { +export type MetricGraph = { key: string title: string tooltip: string format: MetricFormat /** the only usage metrics (and so prometheus queries) this graph fetches */ - fields: UsageField[] - series: (metrics: ClusterUsageMetricsFragment) => GraphSeries[] + fields: F[] + series: (metrics: M) => GraphSeries[] } -export type ClusterMetricSection = { +export type MetricSection = { key: string title: string description?: string - graphs: ClusterMetricGraph[] + graphs: MetricGraph[] } +export type ClusterMetricGraph = MetricGraph< + ClusterUsageMetricsFragment, + UsageField +> +export type ClusterMetricSection = MetricSection< + ClusterUsageMetricsFragment, + UsageField +> + export type Metrics = Nullable[]> type Point = GraphSeries['data'][number] export type Group = { group: string; data: Point[] } @@ -45,9 +54,9 @@ const GROUP_LABELS: Record = { } /** Query variables enabling just the `@include`d usage fields a graph needs. */ -export function usageFieldVariables(fields: UsageField[]) { +export function usageFieldVariables(fields: F[]) { return Object.fromEntries(fields.map((field) => [field, true])) as Partial< - Record + Record > } diff --git a/js/console/src/components/cluster/nodes/NodeMetrics.tsx b/js/console/src/components/cluster/nodes/NodeMetrics.tsx new file mode 100644 index 0000000000..a0ff886714 --- /dev/null +++ b/js/console/src/components/cluster/nodes/NodeMetrics.tsx @@ -0,0 +1,184 @@ +import { + Flex, + ListBoxItem, + NamespaceIcon, + SmallNodeIcon, + SmallPodIcon, +} from '@pluralsh/design-system' +import { MetricsEmptyState } from 'components/cd/cluster/ClusterMetrics' +import { usageFieldVariables } from 'components/cd/cluster/metrics/clusterMetricsGraphs' +import { UsageMetricGraphCard } from 'components/cd/cluster/metrics/UsageMetricGraphCard' +import { + useLoadingDeploymentSettings, + useMetricsEnabled, +} from 'components/contexts/DeploymentSettingsContext' +import { CompactSelect } from 'components/utils/CompactSelect' +import { + MetricsGraphGrid, + MetricsScrollSC, +} from 'components/utils/metrics/MetricsGraphCard' +import { MetricsSection } from 'components/utils/metrics/MetricsSection' +import { MetricsTimeRangeControl } from 'components/utils/timerange/MetricsTimeRangeControl' +import { metricsQueryWindow } from 'components/utils/timerange/timeRange' +import { + type TimeRangeState, + useRangeQueryData, + useTimeRange, +} from 'components/utils/timerange/useTimeRange' +import { CaptionP } from 'components/utils/typography/Text' +import { + NodeMetricsGrouping, + useNodeUsageMetricsQuery, +} from 'generated/graphql' +import { useMemo, useState } from 'react' +import styled from 'styled-components' + +import { type NodeMetricGraph, nodeMetricSections } from './nodeMetricsGraphs' + +const GROUPINGS = [ + { + key: NodeMetricsGrouping.Node, + label: 'Node', + icon: , + }, + { + key: NodeMetricsGrouping.Namespace, + label: 'Namespace', + icon: , + }, + { + key: NodeMetricsGrouping.Pod, + label: 'Pod', + icon: , + }, +] + +/** Prometheus dashboard for a single node: host, reservations, workloads and health. */ +export function NodeMetrics({ + clusterId, + node, +}: { + clusterId: string + node: string +}) { + const metricsEnabled = useMetricsEnabled() + const deploymentSettingsLoading = useLoadingDeploymentSettings() + const timeRange = useTimeRange() + const [grouping, setGrouping] = useState(NodeMetricsGrouping.Node) + const sections = useMemo(() => nodeMetricSections(grouping), [grouping]) + + if (!(metricsEnabled || deploymentSettingsLoading)) + return + + return ( + + + + Group by + key === grouping)?.icon} + onSelectionChange={(key) => setGrouping(key as NodeMetricsGrouping)} + > + {GROUPINGS.map(({ key, label, icon }) => ( + + ))} + + + + + + {sections.map(({ key, title, description, graphs }) => ( + + + {graphs.map((graph) => ( + + ))} + + + ))} + + + ) +} + +function NodeMetricGraphCard({ + clusterId, + node, + grouping, + graph, + timeRange, +}: { + clusterId: string + node: string + grouping: NodeMetricsGrouping + graph: NodeMetricGraph + timeRange: TimeRangeState +}) { + const metricsEnabled = useMetricsEnabled() + const { + data: currentData, + previousData, + loading, + error, + } = useNodeUsageMetricsQuery({ + variables: { + clusterId, + node, + groupBy: grouping, + ...metricsQueryWindow(timeRange.timeWindow), + ...usageFieldVariables(graph.fields), + }, + skip: !metricsEnabled || !clusterId || !node, + // every graph selects different fields of one un-normalized object, so + // caching makes each response re-diff every other graph's series + fetchPolicy: 'no-cache', + }) + const data = useRangeQueryData( + { data: currentData, previousData }, + timeRange.revision + ) + + return ( + + ) +} + +const WrapperSC = styled.div(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.medium, + height: '100%', + minHeight: 0, +})) diff --git a/js/console/src/components/cluster/nodes/nodeMetricsGraphs.test.ts b/js/console/src/components/cluster/nodes/nodeMetricsGraphs.test.ts new file mode 100644 index 0000000000..3382bbed54 --- /dev/null +++ b/js/console/src/components/cluster/nodes/nodeMetricsGraphs.test.ts @@ -0,0 +1,136 @@ +import { + NodeMetricsGrouping, + type NodeUsageMetricsFragment, +} from 'generated/graphql' +import { describe, expect, it } from 'vitest' + +import { + conditionSeries, + nodeMetricSections, + podGroups, +} from './nodeMetricsGraphs' + +const series = (metric: Record, ...values: number[]) => ({ + metric, + values: values.map((value, i) => ({ + timestamp: 1_700_000_000 + i * 60, + value: String(value), + })), +}) + +const graphs = nodeMetricSections().flatMap(({ graphs }) => graphs) +const graphOf = (key: string) => graphs.find((g) => g.key === key) +const seriesOf = (key: string, metrics: NodeUsageMetricsFragment) => + graphOf(key)?.series(metrics) ?? [] + +describe('nodeMetricSections', () => { + it('gives every graph a unique key and at least one field in every grouping', () => { + for (const grouping of Object.values(NodeMetricsGrouping)) { + const all = nodeMetricSections(grouping).flatMap(({ graphs }) => graphs) + expect(new Set(all.map(({ key }) => key)).size).toBe(all.length) + for (const graph of all) expect(graph.fields.length).toBeGreaterThan(0) + } + }) + + it('breaks workload usage out per pod and drops host-only sections', () => { + const sections = nodeMetricSections(NodeMetricsGrouping.Pod, { limit: 1 }) + const cpu = sections + .flatMap(({ graphs }) => graphs) + .find(({ key }) => key === 'cpu') + + expect(sections.map(({ key }) => key)).toEqual(['health', 'cpu', 'memory']) + expect( + cpu + ?.series({ + cpu: [ + series({ namespace: 'a', pod: 'web' }, 3), + series({ namespace: 'b', pod: 'web' }, 1), + series({ namespace: 'b', pod: 'db' }, 1), + ], + }) + .map(({ id }) => id) + ).toEqual(['a/web', 'other (2 pods)']) + }) + + it('measures request efficiency within each namespace', () => { + const efficiency = nodeMetricSections(NodeMetricsGrouping.Namespace) + .flatMap(({ graphs }) => graphs) + .find(({ key }) => key === 'memory-efficiency') + + expect( + efficiency + ?.series({ + memory: [ + series({ namespace: 'a' }, 2), + series({ namespace: 'b' }, 1), + ], + memoryRequests: [series({ namespace: 'a' }, 4)], + }) + .map(({ id, data }) => [id, data.map(({ y }) => y)]) + ).toEqual([['a', [0.5]]]) + }) + + it('derives utilization from host and kube-state-metrics series', () => { + const [host, requests] = seriesOf('memory-utilization', { + memoryUsed: [series({}, 2, 4)], + memoryTotal: [series({}, 8, 8)], + memoryRequests: [series({}, 1, 2)], + memoryAllocatable: [series({}, 4, 4)], + }) + + expect(host.data.map(({ y }) => y)).toEqual([0.25, 0.5]) + expect(requests.dashed).toBe(true) + expect(requests.data.map(({ y }) => y)).toEqual([0.25, 0.5]) + }) + + it('compares load averages against the core count', () => { + expect( + seriesOf('load', { + load1: [series({}, 1)], + load5: [series({}, 1)], + load15: [series({}, 1)], + cpuCores: [series({}, 4)], + }).map(({ id, dashed }) => [id, !!dashed]) + ).toEqual([ + ['1m', false], + ['5m', false], + ['15m', false], + ['cores', true], + ]) + }) + + it('breaks filesystems out by mountpoint without an additive remainder', () => { + const mounts = Array.from({ length: 12 }, (_, i) => + series({ mountpoint: `/mnt/${i}` }, i / 12) + ) + const result = seriesOf('filesystem-fullness', { + filesystemFullness: mounts, + }) + + expect(result).toHaveLength(10) + expect(result.some(({ id }) => id.startsWith('other'))).toBe(false) + }) +}) + +describe('podGroups', () => { + it('keeps same-named pods in different namespaces apart', () => { + expect( + podGroups([ + series({ namespace: 'a', pod: 'web' }, 1), + series({ namespace: 'b', pod: 'web' }, 2), + ]).map(({ group }) => group) + ).toEqual(['a/web', 'b/web']) + }) +}) + +describe('conditionSeries', () => { + it('always shows Ready and other conditions only once they have held', () => { + expect( + conditionSeries([ + series({ condition: 'Ready' }, 1, 1), + series({ condition: 'MemoryPressure' }, 0, 0), + series({ condition: 'DiskPressure' }, 0, 1), + ]).map(({ id }) => id) + ).toEqual(['Ready', 'DiskPressure']) + }) +}) diff --git a/js/console/src/components/cluster/nodes/nodeMetricsGraphs.ts b/js/console/src/components/cluster/nodes/nodeMetricsGraphs.ts new file mode 100644 index 0000000000..d8f97edb0d --- /dev/null +++ b/js/console/src/components/cluster/nodes/nodeMetricsGraphs.ts @@ -0,0 +1,451 @@ +import { + DEFAULT_TOP_GROUPS, + dashed, + divide, + first, + type Group, + groupsOf, + type Metrics, + type MetricGraph, + type MetricSection, + solid, + topGroups, +} from 'components/cd/cluster/metrics/clusterMetricsGraphs' +import { toPoints } from 'components/utils/metrics/metricFormats' +import { + NodeMetricsGrouping, + type NodeUsageMetricsFragment, +} from 'generated/graphql' +import { isNonNullable } from 'utils/isNonNullable' + +export type NodeUsageField = Exclude< + keyof NodeUsageMetricsFragment, + '__typename' +> +export type NodeMetricGraph = MetricGraph< + NodeUsageMetricsFragment, + NodeUsageField +> +export type NodeMetricSection = MetricSection< + NodeUsageMetricsFragment, + NodeUsageField +> + +/** Per-pod series carry both `namespace` and `pod`, joined so same-named pods stay distinct. */ +export function podGroups(metrics: Metrics): Group[] { + return (metrics ?? []) + .filter(isNonNullable) + .map(({ metric, values }) => ({ + group: `${metric?.namespace ?? '(no namespace)'}/${metric?.pod ?? '(no pod)'}`, + data: toPoints(values), + })) + .filter(({ data }) => data.length > 0) +} + +/** + * Every condition but Ready is a problem signal (pressure, NetworkUnavailable, node-problem-detector's), + * so those only appear once they've held at some point in the window. + */ +export function conditionSeries(metrics: Metrics) { + return groupsOf(metrics, 'condition') + .filter( + ({ group, data }) => group === 'Ready' || data.some(({ y }) => y > 0) + ) + .map(({ group, data }) => ({ id: group, data })) +} + +const CONDITIONS_GRAPH: NodeMetricGraph = { + key: 'conditions', + title: 'Node conditions', + tooltip: + 'kube_node_status_condition: 1 while a condition holds. Ready should stay at 1; other conditions only appear once they have fired.', + format: 'count', + fields: ['conditions'], + series: (m) => conditionSeries(m.conditions), +} + +const NODE_SECTIONS: NodeMetricSection[] = [ + { + key: 'health', + title: 'Health', + description: 'Node conditions, pod capacity, restarts, and OOM kills', + graphs: [ + CONDITIONS_GRAPH, + { + key: 'pods', + title: 'Pods', + tooltip: + 'Running pods scheduled on this node against its pod capacity (kube_node_status_allocatable pods)', + format: 'count', + fields: ['podsRunning', 'podsAllocatable'], + series: (m) => [ + ...solid('running', first(m.podsRunning)), + ...dashed('capacity', first(m.podsAllocatable)), + ], + }, + { + key: 'restarts', + title: 'Container restarts and OOM kills', + tooltip: + 'Increase in kube_pod_container_status_restarts_total and container_oom_events_total for pods on this node', + format: 'count', + fields: ['restarts', 'oomKills'], + series: (m) => [ + ...solid('restarts', first(m.restarts)), + ...solid('oom kills', first(m.oomKills)), + ], + }, + ], + }, + { + key: 'cpu', + title: 'CPU', + description: 'Host utilization, reservations, and load', + graphs: [ + { + key: 'cpu-utilization', + title: 'CPU utilization', + tooltip: + 'Host cpu time spent busy (node_cpu_seconds_total), with pod cpu requests as a share of allocatable cpu', + format: 'percent', + fields: ['cpuUtilization', 'cpuRequests', 'cpuAllocatable'], + series: (m) => [ + ...solid('host busy', first(m.cpuUtilization)), + ...dashed( + 'requests', + divide(first(m.cpuRequests), first(m.cpuAllocatable)) + ), + ], + }, + { + key: 'cpu', + title: 'CPU usage (cores)', + tooltip: + 'container_cpu_usage_seconds_total rate for containers on this node, against kube-state-metrics requests and limits and allocatable cpu', + format: 'cpu', + fields: ['cpu', 'cpuRequests', 'cpuLimits', 'cpuAllocatable'], + series: (m) => [ + ...solid('usage', first(m.cpu)), + ...dashed('requests', first(m.cpuRequests)), + ...dashed('limits', first(m.cpuLimits)), + ...dashed('allocatable', first(m.cpuAllocatable)), + ], + }, + { + key: 'cpu-modes', + title: 'CPU time by mode', + tooltip: + 'Share of host cpu time per non-idle mode. High iowait points at slow disks; steal at a noisy hypervisor neighbor.', + format: 'percent', + fields: ['cpuModes'], + series: (m) => + topGroups(groupsOf(m.cpuModes, 'mode'), { noun: 'modes' }), + }, + { + key: 'load', + title: 'Load average', + tooltip: + 'node_load1, node_load5 and node_load15 against the core count; load sustained above it means runnable tasks are queueing', + format: 'number', + fields: ['load1', 'load5', 'load15', 'cpuCores'], + series: (m) => [ + ...solid('1m', first(m.load1)), + ...solid('5m', first(m.load5)), + ...solid('15m', first(m.load15)), + ...dashed('cores', first(m.cpuCores)), + ], + }, + ], + }, + { + key: 'memory', + title: 'Memory', + description: 'Host memory, reservations, and paging', + graphs: [ + { + key: 'memory-utilization', + title: 'Memory utilization', + tooltip: + 'Host memory in use (MemTotal less MemAvailable) as a share of total, with pod memory requests as a share of allocatable memory', + format: 'percent', + fields: [ + 'memoryUsed', + 'memoryTotal', + 'memoryRequests', + 'memoryAllocatable', + ], + series: (m) => [ + ...solid( + 'host used', + divide(first(m.memoryUsed), first(m.memoryTotal)) + ), + ...dashed( + 'requests', + divide(first(m.memoryRequests), first(m.memoryAllocatable)) + ), + ], + }, + { + key: 'host-memory', + title: 'Host memory (bytes)', + tooltip: + 'node-exporter memory in use and page cache plus buffers, against total memory', + format: 'memory', + fields: ['memoryUsed', 'memoryCached', 'memoryTotal'], + series: (m) => [ + ...solid('used', first(m.memoryUsed)), + ...solid('cache and buffers', first(m.memoryCached)), + ...dashed('total', first(m.memoryTotal)), + ], + }, + { + key: 'memory', + title: 'Memory working set (bytes)', + tooltip: + 'container_memory_working_set_bytes for containers on this node, against kube-state-metrics requests and limits and allocatable memory', + format: 'memory', + fields: [ + 'memory', + 'memoryRequests', + 'memoryLimits', + 'memoryAllocatable', + ], + series: (m) => [ + ...solid('working set', first(m.memory)), + ...dashed('requests', first(m.memoryRequests)), + ...dashed('limits', first(m.memoryLimits)), + ...dashed('allocatable', first(m.memoryAllocatable)), + ], + }, + { + key: 'page-faults', + title: 'Major page faults', + tooltip: + 'node_vmstat_pgmajfault rate; sustained major faults mean the node is reading evicted pages back from disk', + format: 'rate', + fields: ['majorPageFaults'], + series: (m) => solid('major faults', first(m.majorPageFaults)), + }, + ], + }, + { + key: 'disk', + title: 'Disk', + description: 'Filesystem fullness, throughput, and saturation', + graphs: [ + { + key: 'filesystem-fullness', + title: 'Filesystem usage', + tooltip: + 'Used share of each host filesystem (node_filesystem_avail_bytes against node_filesystem_size_bytes), excluding tmpfs, overlay and kubelet pod mounts', + format: 'percent', + fields: ['filesystemFullness'], + series: (m) => + topGroups(groupsOf(m.filesystemFullness, 'mountpoint'), { + additive: false, + noun: 'mounts', + }), + }, + { + key: 'disk-io', + title: 'Disk throughput', + tooltip: + 'node_disk_read_bytes_total and node_disk_written_bytes_total rates across all disks', + format: 'bytesRate', + fields: ['diskRead', 'diskWrite'], + series: (m) => [ + ...solid('read', first(m.diskRead)), + ...solid('write', first(m.diskWrite)), + ], + }, + { + key: 'disk-busy', + title: 'Disk saturation', + tooltip: + 'Share of time the busiest disk spent servicing I/O (node_disk_io_time_seconds_total); near 100% means requests are queueing', + format: 'percent', + fields: ['diskBusy'], + series: (m) => solid('busiest disk', first(m.diskBusy)), + }, + ], + }, + { + key: 'network', + title: 'Network', + description: 'Physical interface throughput, errors, and drops', + graphs: [ + { + key: 'network', + title: 'Network throughput', + tooltip: + 'node_network_receive_bytes_total and node_network_transmit_bytes_total rates on physical interfaces, excluding loopback and pod virtual interfaces', + format: 'bytesRate', + fields: ['networkReceive', 'networkTransmit'], + series: (m) => [ + ...solid('receive', first(m.networkReceive)), + ...solid('transmit', first(m.networkTransmit)), + ], + }, + { + key: 'network-errors', + title: 'Network errors and drops', + tooltip: + 'Receive and transmit errors and dropped packets per second on physical interfaces', + format: 'rate', + fields: ['networkErrors', 'networkDropped'], + series: (m) => [ + ...solid('errors', first(m.networkErrors)), + ...solid('dropped', first(m.networkDropped)), + ], + }, + ], + }, +] + +function groupedSections( + grouping: NodeMetricsGrouping.Namespace | NodeMetricsGrouping.Pod, + limit: number +): NodeMetricSection[] { + const isPod = grouping === NodeMetricsGrouping.Pod + const label = isPod ? 'pod' : 'namespace' + const noun = `${label}s` + const groups = (metrics: Metrics) => + isPod ? podGroups(metrics) : groupsOf(metrics, 'namespace') + const top = (g: Group[], additive = true) => + topGroups(g, { limit, additive, noun }) + + const perGroup = ( + field: NodeUsageField, + graph: Omit + ): NodeMetricGraph => ({ + ...graph, + fields: [field], + series: (m) => top(groups(m[field])), + }) + + const efficiency = ( + resource: 'cpu' | 'memory', + name: string, + usage: string + ): NodeMetricGraph => { + const requests: NodeUsageField = `${resource}Requests` + return { + key: `${resource}-efficiency`, + title: `${name} request efficiency by ${label}`, + tooltip: `${usage} as a share of requested ${resource} per ${label}; well below 100% means over-provisioned requests, above it means bursting past them`, + format: 'percent', + fields: [resource, requests], + series: (m) => { + const denominators = new Map( + groups(m[requests]).map(({ group, data }) => [group, data]) + ) + return top( + groups(m[resource]).flatMap(({ group, data }) => { + const d = denominators.get(group) + const ratio = d ? divide(data, d) : [] + return ratio.length > 0 ? [{ group, data: ratio }] : [] + }), + false + ) + }, + } + } + + return [ + { + key: 'health', + title: 'Health', + description: `Node conditions, and ${label} restarts and OOM kills`, + graphs: [ + CONDITIONS_GRAPH, + ...(isPod + ? [] + : [ + perGroup('podsRunning', { + key: 'pods', + title: 'Running pods by namespace', + tooltip: 'Running pods on this node per namespace', + format: 'count', + }), + ]), + perGroup('restarts', { + key: 'restarts', + title: `Container restarts by ${label}`, + tooltip: `Increase in kube_pod_container_status_restarts_total per ${label} on this node`, + format: 'count', + }), + perGroup('oomKills', { + key: 'oom-kills', + title: `OOM kills by ${label}`, + tooltip: `container_oom_events_total increase per ${label} on this node`, + format: 'count', + }), + ], + }, + { + key: 'cpu', + title: 'CPU', + description: `Usage, reservations, and efficiency per ${label}`, + graphs: [ + perGroup('cpu', { + key: 'cpu', + title: `CPU usage by ${label} (cores)`, + tooltip: `container_cpu_usage_seconds_total rate per ${label} on this node`, + format: 'cpu', + }), + efficiency('cpu', 'CPU', 'CPU usage'), + perGroup('cpuRequests', { + key: 'cpu-requests', + title: `CPU requests by ${label} (cores)`, + tooltip: `kube-state-metrics cpu requests per ${label} on this node`, + format: 'cpu', + }), + perGroup('cpuLimits', { + key: 'cpu-limits', + title: `CPU limits by ${label} (cores)`, + tooltip: `kube-state-metrics cpu limits per ${label} on this node`, + format: 'cpu', + }), + ], + }, + { + key: 'memory', + title: 'Memory', + description: `Working set, reservations, and efficiency per ${label}`, + graphs: [ + perGroup('memory', { + key: 'memory', + title: `Memory working set by ${label} (bytes)`, + tooltip: `container_memory_working_set_bytes per ${label} on this node`, + format: 'memory', + }), + efficiency('memory', 'Memory', 'Memory working set'), + perGroup('memoryRequests', { + key: 'memory-requests', + title: `Memory requests by ${label} (bytes)`, + tooltip: `kube-state-metrics memory requests per ${label} on this node`, + format: 'memory', + }), + perGroup('memoryLimits', { + key: 'memory-limits', + title: `Memory limits by ${label} (bytes)`, + tooltip: `kube-state-metrics memory limits per ${label} on this node`, + format: 'memory', + }), + ], + }, + ] +} + +/** + * The dashboard layout for a grouping; each graph fetches its own `fields`. Host disk and + * network counters have no pod dimension, so those sections only show ungrouped. + */ +export function nodeMetricSections( + grouping: NodeMetricsGrouping = NodeMetricsGrouping.Node, + { limit = DEFAULT_TOP_GROUPS } = {} +): NodeMetricSection[] { + return grouping === NodeMetricsGrouping.Node + ? NODE_SECTIONS + : groupedSections(grouping, limit) +} diff --git a/js/console/src/components/kubernetes/cluster/Node.tsx b/js/console/src/components/kubernetes/cluster/Node.tsx index 0b1824301b..2236ce1516 100644 --- a/js/console/src/components/kubernetes/cluster/Node.tsx +++ b/js/console/src/components/kubernetes/cluster/Node.tsx @@ -18,6 +18,7 @@ import { useTheme } from 'styled-components' import { getResourceDetailsAbsPath } from '../../../routes/kubernetesRoutesConsts' import { GaugeWrap } from '../../cluster/Gauges' +import { NodeMetrics } from '../../cluster/nodes/NodeMetrics' import { cpuFmt, roundToTwoPlaces } from '../../cluster/utils' import LoadingIndicator from '../../utils/LoadingIndicator' import RadialBarChart from '../../utils/RadialBarChart' @@ -54,6 +55,7 @@ import { const directory: Array = [ { path: '', label: 'Info' }, + { path: 'metrics', label: 'Metrics' }, { path: 'conditions', label: 'Conditions' }, { path: 'images', label: 'Container images' }, { path: 'pods', label: 'Pods' }, @@ -302,6 +304,17 @@ export function NodeInfo() { ) } +export function NodeMetricsView() { + const { clusterId = '', name = '' } = useParams() + + return ( + + ) +} + export function NodeConditions() { const node = useOutletContext() diff --git a/js/console/src/components/layout/PageToolbar.tsx b/js/console/src/components/layout/PageToolbar.tsx index a34854fb1b..34bff46092 100644 --- a/js/console/src/components/layout/PageToolbar.tsx +++ b/js/console/src/components/layout/PageToolbar.tsx @@ -165,8 +165,8 @@ export const PageToolbarSC = styled.div(({ theme }) => ({ zIndex: 1, })) -// a divider separates the heading from the tabs, which pull left by their own -// padding +// tabs pull left by their own padding, so marginRight alone is the gap between +// the divider and the active tab's background; keep it equal to paddingRight const ToolbarHeadingSC = styled.div(({ theme }) => ({ display: 'flex', alignItems: 'center', @@ -175,8 +175,8 @@ const ToolbarHeadingSC = styled.div(({ theme }) => ({ maxWidth: 280, minWidth: 0, height: 24, - paddingRight: theme.spacing.medium, - marginRight: theme.spacing.xsmall, + paddingRight: theme.spacing.small, + marginRight: theme.spacing.small, borderRight: theme.borders.default, })) diff --git a/js/console/src/components/utils/metrics/metricFormats.ts b/js/console/src/components/utils/metrics/metricFormats.ts index ffe95dd419..ff537047ee 100644 --- a/js/console/src/components/utils/metrics/metricFormats.ts +++ b/js/console/src/components/utils/metrics/metricFormats.ts @@ -9,6 +9,7 @@ export type MetricFormat = | 'percent' | 'rate' | 'count' + | 'number' const BYTE_SUFFIXES = ['B', 'KiB', 'MiB', 'GiB', 'TiB'] @@ -36,6 +37,7 @@ export const METRIC_FORMATTERS: Record< percent: (v) => `${trim(v * 100)}%`, rate: (v) => `${trim(v)}/s`, count: (v) => String(Math.round(v)), + number: trim, } export const METRIC_TICK_BASES: Record = { @@ -45,6 +47,7 @@ export const METRIC_TICK_BASES: Record = { percent: 'decimal', rate: 'decimal', count: 'integer', + number: 'decimal', } export function toPoints(values: MetricResponseFragment['values']) { diff --git a/js/console/src/generated/graphql.ts b/js/console/src/generated/graphql.ts index 4a09893920..2b46980c8c 100644 --- a/js/console/src/generated/graphql.ts +++ b/js/console/src/generated/graphql.ts @@ -2625,6 +2625,8 @@ export type Cluster = { nodePools?: Maybe>>; /** a list of node healthstatistics for this cluster */ nodeStatistics?: Maybe>>; + /** host, resource, workload and health prometheus timeseries for a single node */ + nodeUsageMetrics?: Maybe; /** list cached nodes for a cluster, this can be stale up to 5m */ nodes?: Maybe>>; /** A pod-level set of utilization metrics exceeding our noisy threshold */ @@ -2785,6 +2787,16 @@ export type ClusterNetworkGraphArgs = { }; +/** a representation of a cluster you can deploy to */ +export type ClusterNodeUsageMetricsArgs = { + groupBy?: InputMaybe; + node: Scalars['String']['input']; + start?: InputMaybe; + step?: InputMaybe; + stop?: InputMaybe; +}; + + /** a representation of a cluster you can deploy to */ export type ClusterPolicyConstraintsArgs = { after?: InputMaybe; @@ -7019,6 +7031,14 @@ export type NodeMetric = { window?: Maybe; }; +export enum NodeMetricsGrouping { + Namespace = 'NAMESPACE', + /** a single node-wide series */ + Node = 'NODE', + /** one series per pod, labeled by `namespace` and `pod` */ + Pod = 'POD' +} + /** a specification for a node pool to be created in this cluster */ export type NodePool = { __typename?: 'NodePool'; @@ -7103,6 +7123,77 @@ export type NodeUsage = { memory?: Maybe; }; +/** + * Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node through + * node_uname_info's nodename), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken + * out by the `groupBy` argument and labeled by `namespace` (and `pod`) accordingly; the rest are node-wide. + */ +export type NodeUsageMetrics = { + __typename?: 'NodeUsageMetrics'; + /** 1 while each node condition holds, labeled by `condition` */ + conditions?: Maybe>>; + /** container cpu usage in cores (grouped) */ + cpu?: Maybe>>; + /** allocatable node cpu in cores */ + cpuAllocatable?: Maybe>>; + /** host cpu count */ + cpuCores?: Maybe>>; + /** cpu limits of pods on the node in cores (grouped) */ + cpuLimits?: Maybe>>; + /** fraction (0-1) of host cpu time per non-idle mode, labeled by `mode` */ + cpuModes?: Maybe>>; + /** cpu requests of pods on the node in cores (grouped) */ + cpuRequests?: Maybe>>; + /** fraction (0-1) of host cpu time spent busy */ + cpuUtilization?: Maybe>>; + /** fraction (0-1) of time the busiest disk spent doing I/O */ + diskBusy?: Maybe>>; + /** host disk read throughput in bytes/s */ + diskRead?: Maybe>>; + /** host disk write throughput in bytes/s */ + diskWrite?: Maybe>>; + /** fraction (0-1) of each host filesystem used, labeled by `mountpoint` */ + filesystemFullness?: Maybe>>; + /** 1m host load average */ + load1?: Maybe>>; + /** 5m host load average */ + load5?: Maybe>>; + /** 15m host load average */ + load15?: Maybe>>; + /** major page faults per second */ + majorPageFaults?: Maybe>>; + /** container working set memory in bytes (grouped) */ + memory?: Maybe>>; + /** allocatable node memory in bytes */ + memoryAllocatable?: Maybe>>; + /** host page cache and buffers in bytes */ + memoryCached?: Maybe>>; + /** memory limits of pods on the node in bytes (grouped) */ + memoryLimits?: Maybe>>; + /** memory requests of pods on the node in bytes (grouped) */ + memoryRequests?: Maybe>>; + /** host memory in bytes */ + memoryTotal?: Maybe>>; + /** host memory in use (total less available) in bytes */ + memoryUsed?: Maybe>>; + /** physical interface receive and transmit drops per second */ + networkDropped?: Maybe>>; + /** physical interface receive and transmit errors per second */ + networkErrors?: Maybe>>; + /** physical interface receive throughput in bytes/s */ + networkReceive?: Maybe>>; + /** physical interface transmit throughput in bytes/s */ + networkTransmit?: Maybe>>; + /** container OOM kills within each rate window (grouped) */ + oomKills?: Maybe>>; + /** pod capacity of the node */ + podsAllocatable?: Maybe>>; + /** running pods on the node (grouped) */ + podsRunning?: Maybe>>; + /** container restarts on the node within each rate window (grouped) */ + restarts?: Maybe>>; +}; + export type Notification = { __typename?: 'Notification'; annotations?: Maybe; @@ -21072,6 +21163,51 @@ export type ClusterKubernetesMetricsQueryVariables = Exact<{ export type ClusterKubernetesMetricsQuery = { __typename?: 'RootQueryType', cluster?: { __typename?: 'Cluster', id: string, componentMetrics?: { __typename?: 'KubernetesControllerMetrics', cpu?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, mem?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podCpu?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podMem?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podCpuRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podMemRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podCpuLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podMemLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null } | null } | null }; +export type NodeUsageMetricsFragment = { __typename?: 'NodeUsageMetrics', cpuUtilization?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuModes?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuCores?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, load1?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, load5?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, load15?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryTotal?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryUsed?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryCached?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, majorPageFaults?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, filesystemFullness?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, diskRead?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, diskWrite?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, diskBusy?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, networkReceive?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, networkTransmit?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, networkErrors?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, networkDropped?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpu?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuAllocatable?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memory?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryAllocatable?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, oomKills?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podsRunning?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podsAllocatable?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, restarts?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, conditions?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null }; + +export type NodeUsageMetricsQueryVariables = Exact<{ + clusterId: Scalars['ID']['input']; + node: Scalars['String']['input']; + start?: InputMaybe; + stop?: InputMaybe; + step?: InputMaybe; + groupBy?: InputMaybe; + cpuUtilization?: Scalars['Boolean']['input']; + cpuModes?: Scalars['Boolean']['input']; + cpuCores?: Scalars['Boolean']['input']; + load1?: Scalars['Boolean']['input']; + load5?: Scalars['Boolean']['input']; + load15?: Scalars['Boolean']['input']; + memoryTotal?: Scalars['Boolean']['input']; + memoryUsed?: Scalars['Boolean']['input']; + memoryCached?: Scalars['Boolean']['input']; + majorPageFaults?: Scalars['Boolean']['input']; + filesystemFullness?: Scalars['Boolean']['input']; + diskRead?: Scalars['Boolean']['input']; + diskWrite?: Scalars['Boolean']['input']; + diskBusy?: Scalars['Boolean']['input']; + networkReceive?: Scalars['Boolean']['input']; + networkTransmit?: Scalars['Boolean']['input']; + networkErrors?: Scalars['Boolean']['input']; + networkDropped?: Scalars['Boolean']['input']; + cpu?: Scalars['Boolean']['input']; + cpuRequests?: Scalars['Boolean']['input']; + cpuLimits?: Scalars['Boolean']['input']; + cpuAllocatable?: Scalars['Boolean']['input']; + memory?: Scalars['Boolean']['input']; + memoryRequests?: Scalars['Boolean']['input']; + memoryLimits?: Scalars['Boolean']['input']; + memoryAllocatable?: Scalars['Boolean']['input']; + oomKills?: Scalars['Boolean']['input']; + podsRunning?: Scalars['Boolean']['input']; + podsAllocatable?: Scalars['Boolean']['input']; + restarts?: Scalars['Boolean']['input']; + conditions?: Scalars['Boolean']['input']; +}>; + + +export type NodeUsageMetricsQuery = { __typename?: 'RootQueryType', cluster?: { __typename?: 'Cluster', id: string, nodeUsageMetrics?: { __typename?: 'NodeUsageMetrics', cpuUtilization?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuModes?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuCores?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, load1?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, load5?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, load15?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryTotal?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryUsed?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryCached?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, majorPageFaults?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, filesystemFullness?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, diskRead?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, diskWrite?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, diskBusy?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, networkReceive?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, networkTransmit?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, networkErrors?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, networkDropped?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpu?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuAllocatable?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memory?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memoryAllocatable?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, oomKills?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podsRunning?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podsAllocatable?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, restarts?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, conditions?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null } | null } | null }; + export type ComponentMetricsFragmentFragment = { __typename?: 'ServiceDeployment', componentMetrics?: { __typename?: 'ServiceComponentMetrics', cpu?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, mem?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podCpu?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podMem?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, cpuLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, memLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podCpuRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podMemRequests?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podCpuLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null, podMemLimits?: Array<{ __typename?: 'MetricResponse', metric?: Record | null, values?: Array<{ __typename?: 'MetricResult', timestamp?: any | null, value?: string | null } | null> | null } | null> | null } | null }; export type ServiceDeploymentComponentMetricsQueryVariables = Exact<{ @@ -26607,6 +26743,103 @@ export const ClusterKubernetesMetricsFragmentDoc = gql` } } ${MetricResponseFragmentDoc}`; +export const NodeUsageMetricsFragmentDoc = gql` + fragment NodeUsageMetrics on NodeUsageMetrics { + cpuUtilization @include(if: $cpuUtilization) { + ...MetricResponse + } + cpuModes @include(if: $cpuModes) { + ...MetricResponse + } + cpuCores @include(if: $cpuCores) { + ...MetricResponse + } + load1 @include(if: $load1) { + ...MetricResponse + } + load5 @include(if: $load5) { + ...MetricResponse + } + load15 @include(if: $load15) { + ...MetricResponse + } + memoryTotal @include(if: $memoryTotal) { + ...MetricResponse + } + memoryUsed @include(if: $memoryUsed) { + ...MetricResponse + } + memoryCached @include(if: $memoryCached) { + ...MetricResponse + } + majorPageFaults @include(if: $majorPageFaults) { + ...MetricResponse + } + filesystemFullness @include(if: $filesystemFullness) { + ...MetricResponse + } + diskRead @include(if: $diskRead) { + ...MetricResponse + } + diskWrite @include(if: $diskWrite) { + ...MetricResponse + } + diskBusy @include(if: $diskBusy) { + ...MetricResponse + } + networkReceive @include(if: $networkReceive) { + ...MetricResponse + } + networkTransmit @include(if: $networkTransmit) { + ...MetricResponse + } + networkErrors @include(if: $networkErrors) { + ...MetricResponse + } + networkDropped @include(if: $networkDropped) { + ...MetricResponse + } + cpu @include(if: $cpu) { + ...MetricResponse + } + cpuRequests @include(if: $cpuRequests) { + ...MetricResponse + } + cpuLimits @include(if: $cpuLimits) { + ...MetricResponse + } + cpuAllocatable @include(if: $cpuAllocatable) { + ...MetricResponse + } + memory @include(if: $memory) { + ...MetricResponse + } + memoryRequests @include(if: $memoryRequests) { + ...MetricResponse + } + memoryLimits @include(if: $memoryLimits) { + ...MetricResponse + } + memoryAllocatable @include(if: $memoryAllocatable) { + ...MetricResponse + } + oomKills @include(if: $oomKills) { + ...MetricResponse + } + podsRunning @include(if: $podsRunning) { + ...MetricResponse + } + podsAllocatable @include(if: $podsAllocatable) { + ...MetricResponse + } + restarts @include(if: $restarts) { + ...MetricResponse + } + conditions @include(if: $conditions) { + ...MetricResponse + } +} + ${MetricResponseFragmentDoc}`; export const ComponentMetricsFragmentFragmentDoc = gql` fragment ComponentMetricsFragment on ServiceDeployment { componentMetrics( @@ -36908,6 +37141,94 @@ export type ClusterKubernetesMetricsQueryHookResult = ReturnType; export type ClusterKubernetesMetricsSuspenseQueryHookResult = ReturnType; export type ClusterKubernetesMetricsQueryResult = Apollo.QueryResult; +export const NodeUsageMetricsDocument = gql` + query NodeUsageMetrics($clusterId: ID!, $node: String!, $start: DateTime, $stop: DateTime, $step: String, $groupBy: NodeMetricsGrouping, $cpuUtilization: Boolean! = false, $cpuModes: Boolean! = false, $cpuCores: Boolean! = false, $load1: Boolean! = false, $load5: Boolean! = false, $load15: Boolean! = false, $memoryTotal: Boolean! = false, $memoryUsed: Boolean! = false, $memoryCached: Boolean! = false, $majorPageFaults: Boolean! = false, $filesystemFullness: Boolean! = false, $diskRead: Boolean! = false, $diskWrite: Boolean! = false, $diskBusy: Boolean! = false, $networkReceive: Boolean! = false, $networkTransmit: Boolean! = false, $networkErrors: Boolean! = false, $networkDropped: Boolean! = false, $cpu: Boolean! = false, $cpuRequests: Boolean! = false, $cpuLimits: Boolean! = false, $cpuAllocatable: Boolean! = false, $memory: Boolean! = false, $memoryRequests: Boolean! = false, $memoryLimits: Boolean! = false, $memoryAllocatable: Boolean! = false, $oomKills: Boolean! = false, $podsRunning: Boolean! = false, $podsAllocatable: Boolean! = false, $restarts: Boolean! = false, $conditions: Boolean! = false) { + cluster(id: $clusterId) { + id + nodeUsageMetrics( + node: $node + start: $start + stop: $stop + step: $step + groupBy: $groupBy + ) { + ...NodeUsageMetrics + } + } +} + ${NodeUsageMetricsFragmentDoc}`; + +/** + * __useNodeUsageMetricsQuery__ + * + * To run a query within a React component, call `useNodeUsageMetricsQuery` and pass it any options that fit your needs. + * When your component renders, `useNodeUsageMetricsQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useNodeUsageMetricsQuery({ + * variables: { + * clusterId: // value for 'clusterId' + * node: // value for 'node' + * start: // value for 'start' + * stop: // value for 'stop' + * step: // value for 'step' + * groupBy: // value for 'groupBy' + * cpuUtilization: // value for 'cpuUtilization' + * cpuModes: // value for 'cpuModes' + * cpuCores: // value for 'cpuCores' + * load1: // value for 'load1' + * load5: // value for 'load5' + * load15: // value for 'load15' + * memoryTotal: // value for 'memoryTotal' + * memoryUsed: // value for 'memoryUsed' + * memoryCached: // value for 'memoryCached' + * majorPageFaults: // value for 'majorPageFaults' + * filesystemFullness: // value for 'filesystemFullness' + * diskRead: // value for 'diskRead' + * diskWrite: // value for 'diskWrite' + * diskBusy: // value for 'diskBusy' + * networkReceive: // value for 'networkReceive' + * networkTransmit: // value for 'networkTransmit' + * networkErrors: // value for 'networkErrors' + * networkDropped: // value for 'networkDropped' + * cpu: // value for 'cpu' + * cpuRequests: // value for 'cpuRequests' + * cpuLimits: // value for 'cpuLimits' + * cpuAllocatable: // value for 'cpuAllocatable' + * memory: // value for 'memory' + * memoryRequests: // value for 'memoryRequests' + * memoryLimits: // value for 'memoryLimits' + * memoryAllocatable: // value for 'memoryAllocatable' + * oomKills: // value for 'oomKills' + * podsRunning: // value for 'podsRunning' + * podsAllocatable: // value for 'podsAllocatable' + * restarts: // value for 'restarts' + * conditions: // value for 'conditions' + * }, + * }); + */ +export function useNodeUsageMetricsQuery(baseOptions: Apollo.QueryHookOptions & ({ variables: NodeUsageMetricsQueryVariables; skip?: boolean; } | { skip: boolean; }) ) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(NodeUsageMetricsDocument, options); + } +export function useNodeUsageMetricsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(NodeUsageMetricsDocument, options); + } +// @ts-ignore +export function useNodeUsageMetricsSuspenseQuery(baseOptions?: Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function useNodeUsageMetricsSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions): Apollo.UseSuspenseQueryResult; +export function useNodeUsageMetricsSuspenseQuery(baseOptions?: Apollo.SkipToken | Apollo.SuspenseQueryHookOptions) { + const options = baseOptions === Apollo.skipToken ? baseOptions : {...defaultOptions, ...baseOptions} + return Apollo.useSuspenseQuery(NodeUsageMetricsDocument, options); + } +export type NodeUsageMetricsQueryHookResult = ReturnType; +export type NodeUsageMetricsLazyQueryHookResult = ReturnType; +export type NodeUsageMetricsSuspenseQueryHookResult = ReturnType; +export type NodeUsageMetricsQueryResult = Apollo.QueryResult; export const ServiceDeploymentComponentMetricsDocument = gql` query ServiceDeploymentComponentMetrics($id: ID, $name: String, $cluster: String, $componentId: ID!, $start: DateTime, $stop: DateTime, $step: String) { serviceDeployment(id: $id, name: $name, cluster: $cluster) { @@ -53453,6 +53774,7 @@ export const namedOperations = { ClusterNodeMetrics: 'ClusterNodeMetrics', ClusterNetworkGraph: 'ClusterNetworkGraph', ClusterKubernetesMetrics: 'ClusterKubernetesMetrics', + NodeUsageMetrics: 'NodeUsageMetrics', ServiceDeploymentComponentMetrics: 'ServiceDeploymentComponentMetrics', Usage: 'Usage', ServiceTarball: 'ServiceTarball', @@ -53996,6 +54318,7 @@ export const namedOperations = { NetworkMeshStatistics: 'NetworkMeshStatistics', NetworkMeshEdge: 'NetworkMeshEdge', ClusterKubernetesMetrics: 'ClusterKubernetesMetrics', + NodeUsageMetrics: 'NodeUsageMetrics', ComponentMetricsFragment: 'ComponentMetricsFragment', ServiceFile: 'ServiceFile', GitRepository: 'GitRepository', diff --git a/js/console/src/generated/persisted-queries/client.json b/js/console/src/generated/persisted-queries/client.json index f6418320c4..820ea3c928 100644 --- a/js/console/src/generated/persisted-queries/client.json +++ b/js/console/src/generated/persisted-queries/client.json @@ -667,6 +667,11 @@ "name": "ClusterKubernetesMetrics", "body": "query ClusterKubernetesMetrics($clusterId: ID!, $group: String!, $version: String!, $kind: String!, $name: String!, $namespace: String!, $start: DateTime, $stop: DateTime, $step: String) {\n cluster(id: $clusterId) {\n ...ClusterKubernetesMetrics\n __typename\n }\n}\n\nfragment ClusterKubernetesMetrics on Cluster {\n id\n componentMetrics(\n group: $group\n version: $version\n kind: $kind\n name: $name\n namespace: $namespace\n start: $start\n stop: $stop\n step: $step\n ) {\n cpu {\n ...MetricResponse\n __typename\n }\n mem {\n ...MetricResponse\n __typename\n }\n podCpu {\n ...MetricResponse\n __typename\n }\n podMem {\n ...MetricResponse\n __typename\n }\n cpuRequests {\n ...MetricResponse\n __typename\n }\n memRequests {\n ...MetricResponse\n __typename\n }\n cpuLimits {\n ...MetricResponse\n __typename\n }\n memLimits {\n ...MetricResponse\n __typename\n }\n podCpuRequests {\n ...MetricResponse\n __typename\n }\n podMemRequests {\n ...MetricResponse\n __typename\n }\n podCpuLimits {\n ...MetricResponse\n __typename\n }\n podMemLimits {\n ...MetricResponse\n __typename\n }\n __typename\n }\n __typename\n}\n\nfragment MetricResponse on MetricResponse {\n metric\n values {\n timestamp\n value\n __typename\n }\n __typename\n}" }, + "sha256:faae44aa24c3955bb6d6b69f3b33f0c21734ef814014b62159c43e0993a1f0bb": { + "type": "query", + "name": "NodeUsageMetrics", + "body": "query NodeUsageMetrics($clusterId: ID!, $node: String!, $start: DateTime, $stop: DateTime, $step: String, $groupBy: NodeMetricsGrouping, $cpuUtilization: Boolean! = false, $cpuModes: Boolean! = false, $cpuCores: Boolean! = false, $load1: Boolean! = false, $load5: Boolean! = false, $load15: Boolean! = false, $memoryTotal: Boolean! = false, $memoryUsed: Boolean! = false, $memoryCached: Boolean! = false, $majorPageFaults: Boolean! = false, $filesystemFullness: Boolean! = false, $diskRead: Boolean! = false, $diskWrite: Boolean! = false, $diskBusy: Boolean! = false, $networkReceive: Boolean! = false, $networkTransmit: Boolean! = false, $networkErrors: Boolean! = false, $networkDropped: Boolean! = false, $cpu: Boolean! = false, $cpuRequests: Boolean! = false, $cpuLimits: Boolean! = false, $cpuAllocatable: Boolean! = false, $memory: Boolean! = false, $memoryRequests: Boolean! = false, $memoryLimits: Boolean! = false, $memoryAllocatable: Boolean! = false, $oomKills: Boolean! = false, $podsRunning: Boolean! = false, $podsAllocatable: Boolean! = false, $restarts: Boolean! = false, $conditions: Boolean! = false) {\n cluster(id: $clusterId) {\n id\n nodeUsageMetrics(\n node: $node\n start: $start\n stop: $stop\n step: $step\n groupBy: $groupBy\n ) {\n ...NodeUsageMetrics\n __typename\n }\n __typename\n }\n}\n\nfragment NodeUsageMetrics on NodeUsageMetrics {\n cpuUtilization @include(if: $cpuUtilization) {\n ...MetricResponse\n __typename\n }\n cpuModes @include(if: $cpuModes) {\n ...MetricResponse\n __typename\n }\n cpuCores @include(if: $cpuCores) {\n ...MetricResponse\n __typename\n }\n load1 @include(if: $load1) {\n ...MetricResponse\n __typename\n }\n load5 @include(if: $load5) {\n ...MetricResponse\n __typename\n }\n load15 @include(if: $load15) {\n ...MetricResponse\n __typename\n }\n memoryTotal @include(if: $memoryTotal) {\n ...MetricResponse\n __typename\n }\n memoryUsed @include(if: $memoryUsed) {\n ...MetricResponse\n __typename\n }\n memoryCached @include(if: $memoryCached) {\n ...MetricResponse\n __typename\n }\n majorPageFaults @include(if: $majorPageFaults) {\n ...MetricResponse\n __typename\n }\n filesystemFullness @include(if: $filesystemFullness) {\n ...MetricResponse\n __typename\n }\n diskRead @include(if: $diskRead) {\n ...MetricResponse\n __typename\n }\n diskWrite @include(if: $diskWrite) {\n ...MetricResponse\n __typename\n }\n diskBusy @include(if: $diskBusy) {\n ...MetricResponse\n __typename\n }\n networkReceive @include(if: $networkReceive) {\n ...MetricResponse\n __typename\n }\n networkTransmit @include(if: $networkTransmit) {\n ...MetricResponse\n __typename\n }\n networkErrors @include(if: $networkErrors) {\n ...MetricResponse\n __typename\n }\n networkDropped @include(if: $networkDropped) {\n ...MetricResponse\n __typename\n }\n cpu @include(if: $cpu) {\n ...MetricResponse\n __typename\n }\n cpuRequests @include(if: $cpuRequests) {\n ...MetricResponse\n __typename\n }\n cpuLimits @include(if: $cpuLimits) {\n ...MetricResponse\n __typename\n }\n cpuAllocatable @include(if: $cpuAllocatable) {\n ...MetricResponse\n __typename\n }\n memory @include(if: $memory) {\n ...MetricResponse\n __typename\n }\n memoryRequests @include(if: $memoryRequests) {\n ...MetricResponse\n __typename\n }\n memoryLimits @include(if: $memoryLimits) {\n ...MetricResponse\n __typename\n }\n memoryAllocatable @include(if: $memoryAllocatable) {\n ...MetricResponse\n __typename\n }\n oomKills @include(if: $oomKills) {\n ...MetricResponse\n __typename\n }\n podsRunning @include(if: $podsRunning) {\n ...MetricResponse\n __typename\n }\n podsAllocatable @include(if: $podsAllocatable) {\n ...MetricResponse\n __typename\n }\n restarts @include(if: $restarts) {\n ...MetricResponse\n __typename\n }\n conditions @include(if: $conditions) {\n ...MetricResponse\n __typename\n }\n __typename\n}\n\nfragment MetricResponse on MetricResponse {\n metric\n values {\n timestamp\n value\n __typename\n }\n __typename\n}" + }, "sha256:2c25fa615c78b54eabbcf3ec42a187d3eb9809e88c260157425f28d0f83e8566": { "type": "query", "name": "ServiceDeploymentComponentMetrics", diff --git a/js/console/src/graph/cd/clusters.graphql b/js/console/src/graph/cd/clusters.graphql index 505d939887..a996dd1c0b 100644 --- a/js/console/src/graph/cd/clusters.graphql +++ b/js/console/src/graph/cd/clusters.graphql @@ -968,3 +968,152 @@ query ClusterKubernetesMetrics( ...ClusterKubernetesMetrics } } + +fragment NodeUsageMetrics on NodeUsageMetrics { + cpuUtilization @include(if: $cpuUtilization) { + ...MetricResponse + } + cpuModes @include(if: $cpuModes) { + ...MetricResponse + } + cpuCores @include(if: $cpuCores) { + ...MetricResponse + } + load1 @include(if: $load1) { + ...MetricResponse + } + load5 @include(if: $load5) { + ...MetricResponse + } + load15 @include(if: $load15) { + ...MetricResponse + } + memoryTotal @include(if: $memoryTotal) { + ...MetricResponse + } + memoryUsed @include(if: $memoryUsed) { + ...MetricResponse + } + memoryCached @include(if: $memoryCached) { + ...MetricResponse + } + majorPageFaults @include(if: $majorPageFaults) { + ...MetricResponse + } + filesystemFullness @include(if: $filesystemFullness) { + ...MetricResponse + } + diskRead @include(if: $diskRead) { + ...MetricResponse + } + diskWrite @include(if: $diskWrite) { + ...MetricResponse + } + diskBusy @include(if: $diskBusy) { + ...MetricResponse + } + networkReceive @include(if: $networkReceive) { + ...MetricResponse + } + networkTransmit @include(if: $networkTransmit) { + ...MetricResponse + } + networkErrors @include(if: $networkErrors) { + ...MetricResponse + } + networkDropped @include(if: $networkDropped) { + ...MetricResponse + } + cpu @include(if: $cpu) { + ...MetricResponse + } + cpuRequests @include(if: $cpuRequests) { + ...MetricResponse + } + cpuLimits @include(if: $cpuLimits) { + ...MetricResponse + } + cpuAllocatable @include(if: $cpuAllocatable) { + ...MetricResponse + } + memory @include(if: $memory) { + ...MetricResponse + } + memoryRequests @include(if: $memoryRequests) { + ...MetricResponse + } + memoryLimits @include(if: $memoryLimits) { + ...MetricResponse + } + memoryAllocatable @include(if: $memoryAllocatable) { + ...MetricResponse + } + oomKills @include(if: $oomKills) { + ...MetricResponse + } + podsRunning @include(if: $podsRunning) { + ...MetricResponse + } + podsAllocatable @include(if: $podsAllocatable) { + ...MetricResponse + } + restarts @include(if: $restarts) { + ...MetricResponse + } + conditions @include(if: $conditions) { + ...MetricResponse + } +} + +query NodeUsageMetrics( + $clusterId: ID! + $node: String! + $start: DateTime + $stop: DateTime + $step: String + $groupBy: NodeMetricsGrouping + $cpuUtilization: Boolean! = false + $cpuModes: Boolean! = false + $cpuCores: Boolean! = false + $load1: Boolean! = false + $load5: Boolean! = false + $load15: Boolean! = false + $memoryTotal: Boolean! = false + $memoryUsed: Boolean! = false + $memoryCached: Boolean! = false + $majorPageFaults: Boolean! = false + $filesystemFullness: Boolean! = false + $diskRead: Boolean! = false + $diskWrite: Boolean! = false + $diskBusy: Boolean! = false + $networkReceive: Boolean! = false + $networkTransmit: Boolean! = false + $networkErrors: Boolean! = false + $networkDropped: Boolean! = false + $cpu: Boolean! = false + $cpuRequests: Boolean! = false + $cpuLimits: Boolean! = false + $cpuAllocatable: Boolean! = false + $memory: Boolean! = false + $memoryRequests: Boolean! = false + $memoryLimits: Boolean! = false + $memoryAllocatable: Boolean! = false + $oomKills: Boolean! = false + $podsRunning: Boolean! = false + $podsAllocatable: Boolean! = false + $restarts: Boolean! = false + $conditions: Boolean! = false +) { + cluster(id: $clusterId) { + id + nodeUsageMetrics( + node: $node + start: $start + stop: $stop + step: $step + groupBy: $groupBy + ) { + ...NodeUsageMetrics + } + } +} diff --git a/js/console/src/routes/kubernetesRoute.tsx b/js/console/src/routes/kubernetesRoute.tsx index 6dcc1ec10c..9382af9c12 100644 --- a/js/console/src/routes/kubernetesRoute.tsx +++ b/js/console/src/routes/kubernetesRoute.tsx @@ -38,6 +38,7 @@ import Node, { NodeContainerImages, NodeEvents, NodeInfo, + NodeMetricsView, NodePods, } from '../components/kubernetes/cluster/Node' import Nodes from '../components/kubernetes/cluster/Nodes' @@ -839,6 +840,10 @@ export const kubernetesRoutes = ( path="" element={} /> + } + /> } diff --git a/lib/console/deployments/observability.ex b/lib/console/deployments/observability.ex index d58d807318..85f85cd9fe 100644 --- a/lib/console/deployments/observability.ex +++ b/lib/console/deployments/observability.ex @@ -440,7 +440,7 @@ defmodule Console.Deployments.Observability do """ @spec query( Cluster.t | {Cluster.t, binary} | {:usage, Cluster.t, :cluster | :namespace | :node, [atom]} | - {:usage, Service.t, :service | :pod, [atom]} | + {:usage, Service.t, :service | :pod, [atom]} | {:node_usage, Cluster.t, binary, :node | :namespace | :pod, [atom]} | {:pod, Cluster.t, binary, binary} | Service.t | ServiceComponent.t, binary, binary, binary ) :: {:ok, map} | error @@ -463,6 +463,12 @@ defmodule Console.Deployments.Observability do |> bulk_range_query(%{cluster: cluster, namespace: ns, rate: rate_window(step)}, start, stop, step) end + def query({:node_usage, %Cluster{handle: cluster}, node, grouping, keys}, start, stop, step) do + queries(:node_usage, grouping) + |> Keyword.take(keys) + |> bulk_range_query(%{cluster: cluster, node: node, rate: rate_window(step)}, start, stop, step) + end + def query({%Cluster{handle: cluster}, node}, start, stop, step) do queries(:node) |> bulk_range_query(%{cluster: cluster, instance: node, rate: rate_window(step)}, start, stop, step) diff --git a/lib/console/deployments/observability/metrics.ex b/lib/console/deployments/observability/metrics.ex index 17d31f83d4..effd20996a 100644 --- a/lib/console/deployments/observability/metrics.ex +++ b/lib/console/deployments/observability/metrics.ex @@ -101,13 +101,48 @@ defmodule Console.Deployments.Observability.Metrics do memory: ~s|sum(container_memory_working_set_bytes{cluster="${cluster}",image!="",container!=""}) / sum(kube_pod_container_resource_requests_memory_bytes{cluster="${cluster}"}) by (pod)| ]) + # node-exporter series are labeled by scrape `instance` rather than node name, so they're + # matched to the node through node_uname_info's `nodename` + @node_exporter ~s|* on (instance) group_left () max by (instance) (node_uname_info{cluster="${cluster}",nodename="${node}"})| + @node_selector ~s|cluster="${cluster}",node="${node}"| + @host_fs ~s + # physical interfaces only; virtual pod and overlay interfaces double count pod traffic + @host_nic ~s + @node_pods ~s|on (namespace, pod) group_left () max by (namespace, pod) (kube_pod_info{#{@node_selector}})| + + # host-level series that no pod or namespace grouping applies to + @node_host [ + cpu_utilization: ~s|1 - avg(rate(node_cpu_seconds_total{mode="idle",cluster="${cluster}"}[${rate}]) #{@node_exporter})|, + cpu_modes: ~s|sum by (mode) (rate(node_cpu_seconds_total{mode!="idle",cluster="${cluster}"}[${rate}]) #{@node_exporter}) / scalar(count(node_cpu_seconds_total{mode="idle",cluster="${cluster}"} #{@node_exporter}))|, + cpu_cores: ~s|count(node_cpu_seconds_total{mode="idle",cluster="${cluster}"} #{@node_exporter})|, + load1: ~s|max(node_load1{cluster="${cluster}"} #{@node_exporter})|, + load5: ~s|max(node_load5{cluster="${cluster}"} #{@node_exporter})|, + load15: ~s|max(node_load15{cluster="${cluster}"} #{@node_exporter})|, + memory_total: ~s|max(node_memory_MemTotal_bytes{cluster="${cluster}"} #{@node_exporter})|, + memory_used: ~s|max((node_memory_MemTotal_bytes{cluster="${cluster}"} - node_memory_MemAvailable_bytes{cluster="${cluster}"}) #{@node_exporter})|, + memory_cached: ~s|max((node_memory_Cached_bytes{cluster="${cluster}"} + node_memory_Buffers_bytes{cluster="${cluster}"}) #{@node_exporter})|, + major_page_faults: ~s|max(rate(node_vmstat_pgmajfault{cluster="${cluster}"}[${rate}]) #{@node_exporter})|, + filesystem_fullness: ~s|max by (mountpoint) ((1 - node_filesystem_avail_bytes{#{@host_fs}} / node_filesystem_size_bytes{#{@host_fs}}) #{@node_exporter})|, + disk_read: ~s|sum(rate(node_disk_read_bytes_total{cluster="${cluster}"}[${rate}]) #{@node_exporter})|, + disk_write: ~s|sum(rate(node_disk_written_bytes_total{cluster="${cluster}"}[${rate}]) #{@node_exporter})|, + disk_busy: ~s|max(rate(node_disk_io_time_seconds_total{cluster="${cluster}"}[${rate}]) #{@node_exporter})|, + network_receive: ~s|sum(rate(node_network_receive_bytes_total{#{@host_nic}}[${rate}]) #{@node_exporter})|, + network_transmit: ~s|sum(rate(node_network_transmit_bytes_total{#{@host_nic}}[${rate}]) #{@node_exporter})|, + network_errors: ~s|sum(rate(node_network_receive_errs_total{#{@host_nic}}[${rate}]) #{@node_exporter}) + sum(rate(node_network_transmit_errs_total{#{@host_nic}}[${rate}]) #{@node_exporter})|, + network_dropped: ~s|sum(rate(node_network_receive_drop_total{#{@host_nic}}[${rate}]) #{@node_exporter}) + sum(rate(node_network_transmit_drop_total{#{@host_nic}}[${rate}]) #{@node_exporter})|, + + cpu_allocatable: ~s|max(kube_node_status_allocatable{resource="cpu",unit="core",#{@node_selector}})|, + memory_allocatable: ~s|max(kube_node_status_allocatable{resource="memory",unit="byte",#{@node_selector}})|, + pods_allocatable: ~s|max(kube_node_status_allocatable{resource="pods",#{@node_selector}})|, + conditions: ~s|max by (condition) (kube_node_status_condition{status="true",#{@node_selector}})| + ] + def queries(:cluster), do: @cluster def queries(:node), do: @node def queries(:component), do: @component def queries(:service), do: @service def queries(:pod), do: @pod def queries(:noisy), do: @noisy - def queries(:heat, :pod), do: @heat def queries(:heat, :namespace), do: @heat_ns def queries(:heat, :node), do: @heat_node @@ -118,6 +153,32 @@ defmodule Console.Deployments.Observability.Metrics do def queries(:service_usage, grouping) when grouping in [:service, :pod], do: service_usage(grouping) + def queries(:node_usage, grouping) when grouping in [:node, :namespace, :pod], + do: node_usage(grouping) + + # a node's host series plus its pods' usage and reservations, the latter broken out by + # `grouping` (`:node` is a single total series) + defp node_usage(grouping) do + by = node_group_label(grouping) + + post_process(@node_host ++ [ + cpu: sum_by(by, ~s|rate(container_cpu_usage_seconds_total{container!="",#{@node_selector}}[${rate}])|), + cpu_requests: reservation(:requests, :cpu, @node_selector, by), + cpu_limits: reservation(:limits, :cpu, @node_selector, by), + memory: sum_by(by, ~s|container_memory_working_set_bytes{image!="",container!="",#{@node_selector}}|), + memory_requests: reservation(:requests, :memory, @node_selector, by), + memory_limits: reservation(:limits, :memory, @node_selector, by), + oom_kills: sum_by(by, ~s|increase(container_oom_events_total{container!="",#{@node_selector}}[${rate}])|), + pods_running: sum_by(by, ~s|max by (namespace, pod) (kube_pod_status_phase{phase="Running",cluster="${cluster}"}) * #{@node_pods}|), + restarts: sum_by(by, ~s|max by (namespace, pod, container) (increase(kube_pod_container_status_restarts_total{cluster="${cluster}"}[${rate}])) * #{@node_pods}|) + ]) + end + + defp node_group_label(:node), do: "" + defp node_group_label(:namespace), do: "namespace" + # pod names only stay unique within a namespace + defp node_group_label(:pod), do: "namespace, pod" + @cluster_selector ~s|cluster="${cluster}"| # cluster-wide timeseries, each broken out by `grouping` (`:cluster` is a single total series) diff --git a/lib/console/graphql/deployments/cluster.ex b/lib/console/graphql/deployments/cluster.ex index a184d716ef..4c6dfd7dd6 100644 --- a/lib/console/graphql/deployments/cluster.ex +++ b/lib/console/graphql/deployments/cluster.ex @@ -35,6 +35,12 @@ defmodule Console.GraphQl.Deployments.Cluster do value :node end + enum :node_metrics_grouping do + value :node, description: "a single node-wide series" + value :namespace + value :pod, description: "one series per pod, labeled by `namespace` and `pod`" + end + enum :version_compliance do value :latest value :compliant @@ -496,6 +502,47 @@ defmodule Console.GraphQl.Deployments.Cluster do field :restarts, list_of(:metric_response), description: "container restarts within each rate window" end + @desc """ + Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node through + node_uname_info's nodename), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken + out by the `groupBy` argument and labeled by `namespace` (and `pod`) accordingly; the rest are node-wide. + """ + object :node_usage_metrics do + field :cpu_utilization, list_of(:metric_response), description: "fraction (0-1) of host cpu time spent busy" + field :cpu_modes, list_of(:metric_response), description: "fraction (0-1) of host cpu time per non-idle mode, labeled by `mode`" + field :cpu_cores, list_of(:metric_response), description: "host cpu count" + field :load1, list_of(:metric_response), description: "1m host load average" + field :load5, list_of(:metric_response), description: "5m host load average" + field :load15, list_of(:metric_response), description: "15m host load average" + field :memory_total, list_of(:metric_response), description: "host memory in bytes" + field :memory_used, list_of(:metric_response), description: "host memory in use (total less available) in bytes" + field :memory_cached, list_of(:metric_response), description: "host page cache and buffers in bytes" + field :major_page_faults, list_of(:metric_response), description: "major page faults per second" + field :filesystem_fullness, list_of(:metric_response), description: "fraction (0-1) of each host filesystem used, labeled by `mountpoint`" + field :disk_read, list_of(:metric_response), description: "host disk read throughput in bytes/s" + field :disk_write, list_of(:metric_response), description: "host disk write throughput in bytes/s" + field :disk_busy, list_of(:metric_response), description: "fraction (0-1) of time the busiest disk spent doing I/O" + field :network_receive, list_of(:metric_response), description: "physical interface receive throughput in bytes/s" + field :network_transmit, list_of(:metric_response), description: "physical interface transmit throughput in bytes/s" + field :network_errors, list_of(:metric_response), description: "physical interface receive and transmit errors per second" + field :network_dropped, list_of(:metric_response), description: "physical interface receive and transmit drops per second" + + field :cpu_allocatable, list_of(:metric_response), description: "allocatable node cpu in cores" + field :memory_allocatable, list_of(:metric_response), description: "allocatable node memory in bytes" + field :pods_allocatable, list_of(:metric_response), description: "pod capacity of the node" + field :conditions, list_of(:metric_response), description: "1 while each node condition holds, labeled by `condition`" + + field :cpu, list_of(:metric_response), description: "container cpu usage in cores (grouped)" + field :cpu_requests, list_of(:metric_response), description: "cpu requests of pods on the node in cores (grouped)" + field :cpu_limits, list_of(:metric_response), description: "cpu limits of pods on the node in cores (grouped)" + field :memory, list_of(:metric_response), description: "container working set memory in bytes (grouped)" + field :memory_requests, list_of(:metric_response), description: "memory requests of pods on the node in bytes (grouped)" + field :memory_limits, list_of(:metric_response), description: "memory limits of pods on the node in bytes (grouped)" + field :oom_kills, list_of(:metric_response), description: "container OOM kills within each rate window (grouped)" + field :pods_running, list_of(:metric_response), description: "running pods on the node (grouped)" + field :restarts, list_of(:metric_response), description: "container restarts on the node within each rate window (grouped)" + end + object :cluster_node_metrics do field :cpu, list_of(:metric_response) field :memory, list_of(:metric_response) @@ -687,6 +734,17 @@ defmodule Console.GraphQl.Deployments.Cluster do resolve &Deployments.metrics/3 end + @desc "host, resource, workload and health prometheus timeseries for a single node" + field :node_usage_metrics, :node_usage_metrics do + arg :node, non_null(:string) + arg :start, :datetime + arg :stop, :datetime + arg :step, :string + arg :group_by, :node_metrics_grouping, default_value: :node + + resolve &Deployments.node_usage_metrics/3 + end + field :network_graph, list_of(:network_mesh_edge) do arg :namespace, :string arg :time, :datetime diff --git a/lib/console/graphql/resolvers/deployments/observability.ex b/lib/console/graphql/resolvers/deployments/observability.ex index 1a675964c8..76ae109fed 100644 --- a/lib/console/graphql/resolvers/deployments/observability.ex +++ b/lib/console/graphql/resolvers/deployments/observability.ex @@ -137,6 +137,20 @@ defmodule Console.GraphQl.Resolvers.Deployments.Observability do Observability.query({:usage, service, args[:group_by] || :service, keys}, start, stop, step) end + # node names are interpolated straight into promql, so anything that isn't a valid + # kubernetes node name (a DNS-1123 subdomain) is rejected before querying + @node_name ~r/^[a-z0-9]([-a-z0-9.]{0,251}[a-z0-9])?$/ + + def node_usage_metrics(%Cluster{} = cluster, %{node: node} = args, info) do + case String.match?(node, @node_name) do + true -> + {start, stop, step} = prom_args(args) + keys = Enum.map(Absinthe.Resolution.project(info), & &1.schema_node.identifier) + Observability.query({:node_usage, cluster, node, args[:group_by] || :node, keys}, start, stop, step) + false -> {:error, "invalid node name #{inspect(node)}"} + end + end + def metrics(%Cluster{} = cluster, %{node: node} = args, _) when is_binary(node) do {start, stop, step} = prom_args(args) Observability.query({cluster, node}, start, stop, step) diff --git a/schema/schema.graphql b/schema/schema.graphql index 1aaef0cd64..b528d90862 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -13239,6 +13239,16 @@ enum ClusterMetricsGrouping { NODE } +enum NodeMetricsGrouping { + "a single node-wide series" + NODE + + NAMESPACE + + "one series per pod, labeled by `namespace` and `pod`" + POD +} + enum VersionCompliance { LATEST COMPLIANT @@ -13945,6 +13955,106 @@ type ClusterUsageMetrics { restarts: [MetricResponse] } +""" +Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node through +node_uname_info's nodename), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken +out by the `groupBy` argument and labeled by `namespace` (and `pod`) accordingly; the rest are node-wide. +""" +type NodeUsageMetrics { + "fraction (0-1) of host cpu time spent busy" + cpuUtilization: [MetricResponse] + + "fraction (0-1) of host cpu time per non-idle mode, labeled by `mode`" + cpuModes: [MetricResponse] + + "host cpu count" + cpuCores: [MetricResponse] + + "1m host load average" + load1: [MetricResponse] + + "5m host load average" + load5: [MetricResponse] + + "15m host load average" + load15: [MetricResponse] + + "host memory in bytes" + memoryTotal: [MetricResponse] + + "host memory in use (total less available) in bytes" + memoryUsed: [MetricResponse] + + "host page cache and buffers in bytes" + memoryCached: [MetricResponse] + + "major page faults per second" + majorPageFaults: [MetricResponse] + + "fraction (0-1) of each host filesystem used, labeled by `mountpoint`" + filesystemFullness: [MetricResponse] + + "host disk read throughput in bytes\/s" + diskRead: [MetricResponse] + + "host disk write throughput in bytes\/s" + diskWrite: [MetricResponse] + + "fraction (0-1) of time the busiest disk spent doing I\/O" + diskBusy: [MetricResponse] + + "physical interface receive throughput in bytes\/s" + networkReceive: [MetricResponse] + + "physical interface transmit throughput in bytes\/s" + networkTransmit: [MetricResponse] + + "physical interface receive and transmit errors per second" + networkErrors: [MetricResponse] + + "physical interface receive and transmit drops per second" + networkDropped: [MetricResponse] + + "allocatable node cpu in cores" + cpuAllocatable: [MetricResponse] + + "allocatable node memory in bytes" + memoryAllocatable: [MetricResponse] + + "pod capacity of the node" + podsAllocatable: [MetricResponse] + + "1 while each node condition holds, labeled by `condition`" + conditions: [MetricResponse] + + "container cpu usage in cores (grouped)" + cpu: [MetricResponse] + + "cpu requests of pods on the node in cores (grouped)" + cpuRequests: [MetricResponse] + + "cpu limits of pods on the node in cores (grouped)" + cpuLimits: [MetricResponse] + + "container working set memory in bytes (grouped)" + memory: [MetricResponse] + + "memory requests of pods on the node in bytes (grouped)" + memoryRequests: [MetricResponse] + + "memory limits of pods on the node in bytes (grouped)" + memoryLimits: [MetricResponse] + + "container OOM kills within each rate window (grouped)" + oomKills: [MetricResponse] + + "running pods on the node (grouped)" + podsRunning: [MetricResponse] + + "container restarts on the node within each rate window (grouped)" + restarts: [MetricResponse] +} + type ClusterNodeMetrics { cpu: [MetricResponse] memory: [MetricResponse] @@ -14202,6 +14312,9 @@ type Cluster { clusterNodeMetrics(node: String!, start: DateTime, stop: DateTime, step: String): ClusterNodeMetrics + "host, resource, workload and health prometheus timeseries for a single node" + nodeUsageMetrics(node: String!, start: DateTime, stop: DateTime, step: String, groupBy: NodeMetricsGrouping): NodeUsageMetrics + networkGraph(namespace: String, time: DateTime): [NetworkMeshEdge] "a list of node healthstatistics for this cluster" diff --git a/test/console/ai/workbench/mcp/clients_test.exs b/test/console/ai/workbench/mcp/clients_test.exs index e199a87a1d..a38f54baf7 100644 --- a/test/console/ai/workbench/mcp/clients_test.exs +++ b/test/console/ai/workbench/mcp/clients_test.exs @@ -81,7 +81,7 @@ defmodule Console.AI.Workbench.MCP.ClientsTest do assert_receive {:DOWN, ^ref, :process, ^pid, :normal}, @stop_timeout assert_receive {:DOWN, ^client_ref, :process, ^client, _}, @stop_timeout # our DOWN can arrive before the supervisor has handled the worker's EXIT - assert children_drained?() + assert child_removed?(pid) {:ok, fresh} = Clients.ensure_started(tool) refute fresh == pid @@ -116,14 +116,19 @@ defmodule Console.AI.Workbench.MCP.ClientsTest do end end - defp children_drained?(attempts \\ 50) - defp children_drained?(0), do: DynamicSupervisor.which_children(Clients) == [] - defp children_drained?(attempts) do - case DynamicSupervisor.which_children(Clients) do - [] -> true - _ -> + # Clients is app-wide, so clients other modules started (eg workbench engine runs) can + # still be supervised here; only this worker's removal matters + defp child_removed?(pid, attempts \\ 50) + defp child_removed?(pid, 0), do: not supervised?(pid) + defp child_removed?(pid, attempts) do + case supervised?(pid) do + false -> true + true -> Process.sleep(20) - children_drained?(attempts - 1) + child_removed?(pid, attempts - 1) end end + + defp supervised?(pid), + do: Enum.any?(DynamicSupervisor.which_children(Clients), &match?({_, ^pid, _, _}, &1)) end diff --git a/test/console/deployments/observability/metrics_test.exs b/test/console/deployments/observability/metrics_test.exs index 14983d3141..3179058058 100644 --- a/test/console/deployments/observability/metrics_test.exs +++ b/test/console/deployments/observability/metrics_test.exs @@ -109,6 +109,69 @@ defmodule Console.Deployments.Observability.MetricsTest do end end + describe "node usage queries" do + @host_keys ~w(cpu_utilization cpu_modes cpu_cores load1 load5 load15 memory_total memory_used memory_cached + major_page_faults filesystem_fullness disk_read disk_write disk_busy network_receive + network_transmit network_errors network_dropped)a + + @grouped_keys ~w(cpu cpu_requests cpu_limits memory memory_requests memory_limits oom_kills pods_running restarts)a + + test "every query is scoped to the node and fully substituted" do + vars = [cluster: "c", node: "node-1", rate: "5m"] + + for grouping <- [:node, :namespace, :pod], {key, query} <- Metrics.queries(:node_usage, grouping) do + assert query =~ ~s|cluster="${cluster}"|, "#{grouping}.#{key} isn't cluster scoped: #{query}" + assert query =~ ~s|node="${node}"| or query =~ ~s|nodename="${node}"|, + "#{grouping}.#{key} isn't node scoped: #{query}" + refute Client.variable_subst(query, vars) =~ "$", "#{grouping}.#{key} left a variable unsubstituted" + end + end + + test "pod usage is grouped while host and capacity series stay node-wide" do + for {grouping, by} <- [node: "by ()", namespace: "by (namespace)", pod: "by (namespace, pod)"] do + queries = Metrics.queries(:node_usage, grouping) + + for {key, query} <- queries do + case key in @grouped_keys do + true -> assert String.starts_with?(query, "sum #{by} ("), "#{grouping}.#{key} isn't grouped #{by}: #{query}" + false -> assert query == Keyword.fetch!(Metrics.queries(:node_usage, :node), key), "#{grouping}.#{key} changed with grouping" + end + end + end + end + + test "node-exporter series are matched to the node through node_uname_info" do + node = Map.new(Metrics.queries(:node_usage, :node)) + + for key <- @host_keys do + assert node[key] =~ ~s|group_left () max by (instance) (node_uname_info{cluster="${cluster}",nodename="${node}"})|, + "node_usage.#{key} isn't joined to node_uname_info" + end + end + + test "kubernetes series use the node label and dedupe reservations" do + node = Map.new(Metrics.queries(:node_usage, :node)) + pod = Map.new(Metrics.queries(:node_usage, :pod)) + + assert node[:cpu_requests] == + ~s|sum by () (max by (namespace, pod, container) (kube_pod_container_resource_requests{resource="cpu",unit="core",container!="",cluster="${cluster}",node="${node}"}))| + assert pod[:memory_requests] =~ ~s|sum by (namespace, pod) (max by (namespace, pod, container) (| + assert node[:conditions] =~ "max by (condition) (kube_node_status_condition{" + + for key <- ~w(pods_running restarts)a do + assert node[key] =~ ~s|group_left () max by (namespace, pod) (kube_pod_info{cluster="${cluster}",node="${node}"})|, + "node_usage.#{key} isn't joined to the node's pods" + end + end + + test "host filters keep their regex alternation intact" do + node = Map.new(Metrics.queries(:node_usage, :node)) + + assert node[:filesystem_fullness] =~ ~s|fstype!~"tmpfs\|overlay\|squashfs| + assert node[:network_receive] =~ ~s|device!~"lo\|veth.*\|| + end + end + describe "service usage queries" do test "every query is namespace scoped, grouped, and fully substituted" do vars = [cluster: "c", namespace: "ns", rate: "5m"] diff --git a/test/console/graphql/queries/deployments/cluster_queries_test.exs b/test/console/graphql/queries/deployments/cluster_queries_test.exs index 8263d3fe2f..f1ecb6466b 100644 --- a/test/console/graphql/queries/deployments/cluster_queries_test.exs +++ b/test/console/graphql/queries/deployments/cluster_queries_test.exs @@ -596,6 +596,63 @@ defmodule Console.GraphQl.Deployments.ClusterQueriesTest do refute Enum.empty?(found["clusterNodeMetrics"]["cpu"]) end + test "it only queries the selected node usage metrics, scoped to the node" do + user = admin_user() + cluster = insert(:cluster) + deployment_settings(prometheus_connection: %{url: "example.com"}) + + expect(Req, :post, 3, fn _, opts -> + [{"query", query} | _] = opts[:form] + assert query =~ ~s|cluster="#{cluster.handle}"| + assert query =~ ~s|node="ip-10-0-1-2.ec2.internal"| or query =~ ~s|nodename="ip-10-0-1-2.ec2.internal"| + if query =~ "kube_pod_container_resource_requests", + do: assert(query =~ "sum by (namespace, pod) (") + + {:ok, %Req.Response{status: 200, body: Poison.encode!(%{data: %{result: [ + %{metric: %{mountpoint: "/"}, values: [[1, "0.5"]]} + ]}})}} + end) + + {:ok, %{data: %{"cluster" => found}}} = run_query(""" + query cluster($id: ID!) { + cluster(id: $id) { + id + nodeUsageMetrics(node: "ip-10-0-1-2.ec2.internal", groupBy: POD) { + cpuUtilization { values { timestamp value } } + memoryRequests { values { timestamp value } } + filesystemFullness { metric values { timestamp value } } + } + } + } + """, %{"id" => cluster.id}, %{current_user: user}) + + metrics = found["nodeUsageMetrics"] + assert hd(metrics["filesystemFullness"])["metric"]["mountpoint"] == "/" + refute Enum.empty?(metrics["cpuUtilization"]) + refute Enum.empty?(metrics["memoryRequests"]) + end + + test "it rejects node names that could inject promql" do + user = admin_user() + cluster = insert(:cluster) + deployment_settings(prometheus_connection: %{url: "example.com"}) + + reject(Req, :post, 2) + + {:ok, %{errors: [%{message: message} | _]}} = run_query(""" + query cluster($id: ID!) { + cluster(id: $id) { + id + nodeUsageMetrics(node: "x\\"} or vector(1) or up{a=\\"") { + cpu { values { timestamp value } } + } + } + } + """, %{"id" => cluster.id}, %{current_user: user}) + + assert message =~ "invalid node name" + end + test "it can filter by upgradeability" do user = admin_user() cluster = insert(:cluster) From 1c751d6b4380f73ab5e072b5f401c6c111f2655e Mon Sep 17 00:00:00 2001 From: michaeljguarino Date: Sat, 17 Oct 2026 12:31:35 -0400 Subject: [PATCH 7/7] improve node metrics/logs --- go/client/models_gen.go | 4 +- js/console/src/components/cd/logs/Logs.tsx | 7 ++ .../src/components/cd/logs/LogsFilters.tsx | 4 +- .../components/cd/logs/LogsMetricsChart.tsx | 3 + .../src/components/cd/logs/LogsTable.tsx | 3 + .../service/settings/ServiceHelmSettings.tsx | 38 ++++--- .../service/settings/ServiceSettings.tsx | 2 +- .../cluster/nodes/nodeMetricsGraphs.ts | 4 +- .../components/kubernetes/cluster/Node.tsx | 35 ++++++- .../utils/metrics/MetricsGraphCard.tsx | 97 ++++++++++++++++-- .../workbench/job/WorkbenchJob.tsx | 3 + js/console/src/generated/graphql.ts | 22 +++- .../generated/persisted-queries/client.json | 12 +-- js/console/src/graph/logs.graphql | 6 ++ js/console/src/routes/kubernetesRoute.tsx | 5 + .../deployments/observability/metrics.ex | 52 +++++++--- lib/console/graphql/deployments/cluster.ex | 4 +- lib/console/graphql/observability.ex | 3 + lib/console/logs/provider/elastic.ex | 11 ++ lib/console/logs/provider/loki.ex | 10 +- lib/console/logs/provider/opensearch.ex | 14 +++ lib/console/logs/provider/victoria.ex | 16 ++- lib/console/logs/query.ex | 5 +- lib/console_web/controllers/git_controller.ex | 4 +- priv/agent-service-chart.tgz | Bin 329103 -> 329100 bytes schema/schema.graphql | 53 +++++++++- .../observability/metrics_test.exs | 64 ++++++++++-- .../deployments/cluster_queries_test.exs | 5 +- test/console/logs/provider/elastic_test.exs | 18 ++++ test/console/logs/provider/loki_test.exs | 9 ++ .../controllers/git_controller_test.exs | 34 ++++++ 31 files changed, 468 insertions(+), 79 deletions(-) diff --git a/go/client/models_gen.go b/go/client/models_gen.go index 3eb93d46c6..2baa7584cc 100644 --- a/go/client/models_gen.go +++ b/go/client/models_gen.go @@ -5830,8 +5830,8 @@ type NodeUsage struct { Memory *string `json:"memory,omitempty"` } -// Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node through -// node_uname_info's nodename), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken +// Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node by an +// `instance`, `nodename` or `node` label, or node_uname_info), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken // out by the `groupBy` argument and labeled by `namespace` (and `pod`) accordingly; the rest are node-wide. type NodeUsageMetrics struct { // fraction (0-1) of host cpu time spent busy diff --git a/js/console/src/components/cd/logs/Logs.tsx b/js/console/src/components/cd/logs/Logs.tsx index cefbf4c29a..d0f849017f 100644 --- a/js/console/src/components/cd/logs/Logs.tsx +++ b/js/console/src/components/cd/logs/Logs.tsx @@ -47,9 +47,12 @@ const DEFAULT_LOG_RANGE: TimeRange = { live: true, durationMs: 15 * 60 * 1000 } export function Logs({ serviceId, clusterId, + node, }: { serviceId?: string clusterId?: string + /** only logs from pods scheduled on this node */ + node?: string }) { const { popToast } = useSimpleToast() @@ -102,6 +105,7 @@ export function Logs({ time, facets: labels, operator: queryOperator, + node, }, fetchPolicy: 'cache-and-network', notifyOnNetworkStatusChange: true, @@ -154,6 +158,7 @@ export function Logs({ logs={logs} clusterId={clusterId} serviceId={serviceId} + node={node} query={throttledQ} time={time} addLabel={addLabel} @@ -202,6 +207,7 @@ export function Logs({ diff --git a/js/console/src/components/cd/logs/LogsFilters.tsx b/js/console/src/components/cd/logs/LogsFilters.tsx index 47fb508f93..462cb926d2 100644 --- a/js/console/src/components/cd/logs/LogsFilters.tsx +++ b/js/console/src/components/cd/logs/LogsFilters.tsx @@ -65,6 +65,7 @@ export function LogsLabelsPicker({ logs, clusterId, serviceId, + node, query, time, addLabel, @@ -75,6 +76,7 @@ export function LogsLabelsPicker({ logs: LogLineFragment[] clusterId?: string serviceId?: string + node?: string query?: string time?: LogTimeRange addLabel: (key: string, value: string) => void @@ -95,7 +97,7 @@ export function LogsLabelsPicker({ }, [logs, selectedLabels]) const { data, loading } = useLogLabelsQuery({ - variables: { field, clusterId, serviceId, query, time }, + variables: { field, clusterId, serviceId, node, query, time }, skip: !field, fetchPolicy: 'cache-and-network', }) diff --git a/js/console/src/components/cd/logs/LogsMetricsChart.tsx b/js/console/src/components/cd/logs/LogsMetricsChart.tsx index 4d4d8cc1dd..91937d8f8e 100644 --- a/js/console/src/components/cd/logs/LogsMetricsChart.tsx +++ b/js/console/src/components/cd/logs/LogsMetricsChart.tsx @@ -40,6 +40,7 @@ type ChartBucket = { timestamp: Date; count: number } export function LogsMetricsChart({ clusterId, serviceId, + node, query, time, operator, @@ -50,6 +51,7 @@ export function LogsMetricsChart({ }: { clusterId?: string serviceId?: string + node?: string query: string time: LogTimeRange operator: LogQueryOperator @@ -80,6 +82,7 @@ export function LogsMetricsChart({ aggregation: { bucketSize }, operator, facets, + node, }, fetchPolicy: 'cache-and-network', pollInterval, diff --git a/js/console/src/components/cd/logs/LogsTable.tsx b/js/console/src/components/cd/logs/LogsTable.tsx index 84cf24d79f..e23de786f9 100644 --- a/js/console/src/components/cd/logs/LogsTable.tsx +++ b/js/console/src/components/cd/logs/LogsTable.tsx @@ -28,6 +28,7 @@ export function LogsTable({ labels, clusterId, serviceId, + node, }: { logs: LogLineFragment[] loading?: boolean @@ -45,6 +46,7 @@ export function LogsTable({ labels: LogFacetInput[] clusterId?: string serviceId?: string + node?: string }) { const theme = useTheme() const [contextPanelOpen, setContextPanelOpen] = useState(false) @@ -138,6 +140,7 @@ export function LogsTable({ queryVars={{ clusterId, serviceId, + node, facets: labels, operator: queryOperator, }} diff --git a/js/console/src/components/cd/services/service/settings/ServiceHelmSettings.tsx b/js/console/src/components/cd/services/service/settings/ServiceHelmSettings.tsx index bbf19e6426..c9bab20caf 100644 --- a/js/console/src/components/cd/services/service/settings/ServiceHelmSettings.tsx +++ b/js/console/src/components/cd/services/service/settings/ServiceHelmSettings.tsx @@ -49,19 +49,26 @@ export function ServiceHelmSettings() { if (helmSettingsData) reset() }, [helmSettingsData, reset]) + // git-sourced services (eg the deploy-operator) carry helm values without a chart + const isChart = !!service?.helm?.chart + const attributes = useMemo(() => { + const values = { + values: state.helmValues ?? '', + valuesFiles: state.helmValuesFiles?.filter(isNonNullable) ?? [], + } + if (!isChart) return { helm: values } return state.helmChart && state.helmVersion ? { helm: { ...(state.helmUrl ? { url: state.helmUrl } : {}), chart: state.helmChart, version: state.helmVersion, - values: state.helmValues ?? '', - valuesFiles: state.helmValuesFiles?.filter(isNonNullable) ?? [], + ...values, }, } : {} - }, [state]) + }, [isChart, state]) const [mutation, { loading, error }] = useUpdateServiceDeploymentMutation({ variables: { @@ -80,11 +87,8 @@ export function ServiceHelmSettings() { }, }) - const formIsValid = !!( - state.helmChart && - state.helmVersion && - !helmValueErrors - ) + const formIsValid = + !helmValueErrors && (!isChart || !!(state.helmChart && state.helmVersion)) return ( helm settings - updateState({ helmUrl: url })} - chart={state.helmChart ?? ''} - setChart={(chart) => updateState({ helmChart: chart })} - version={state.helmVersion ?? ''} - setVersion={(vsn) => updateState({ helmVersion: vsn })} - /> + {isChart && ( + updateState({ helmUrl: url })} + chart={state.helmChart ?? ''} + setChart={(chart) => updateState({ helmChart: chart })} + version={state.helmVersion ?? ''} + setVersion={(vsn) => updateState({ helmVersion: vsn })} + /> + )} {isAdmin && ( { const gitEnabled = !!service.repository - const helmEnabled = !!service.helm?.chart + const helmEnabled = !!service.helm const healthyDependencies = service.dependencies?.filter( (dep) => dep?.status === ServiceDeploymentStatus.Healthy diff --git a/js/console/src/components/cluster/nodes/nodeMetricsGraphs.ts b/js/console/src/components/cluster/nodes/nodeMetricsGraphs.ts index d8f97edb0d..7b5447fc46 100644 --- a/js/console/src/components/cluster/nodes/nodeMetricsGraphs.ts +++ b/js/console/src/components/cluster/nodes/nodeMetricsGraphs.ts @@ -106,7 +106,7 @@ const NODE_SECTIONS: NodeMetricSection[] = [ key: 'cpu-utilization', title: 'CPU utilization', tooltip: - 'Host cpu time spent busy (node_cpu_seconds_total), with pod cpu requests as a share of allocatable cpu', + 'Host cpu time spent busy (node_cpu_seconds_total, or the kubelet node_cpu_usage_seconds_total against cpu capacity without node-exporter), with pod cpu requests as a share of allocatable cpu', format: 'percent', fields: ['cpuUtilization', 'cpuRequests', 'cpuAllocatable'], series: (m) => [ @@ -166,7 +166,7 @@ const NODE_SECTIONS: NodeMetricSection[] = [ key: 'memory-utilization', title: 'Memory utilization', tooltip: - 'Host memory in use (MemTotal less MemAvailable) as a share of total, with pod memory requests as a share of allocatable memory', + 'Host memory in use (MemTotal less MemAvailable, or the kubelet node_memory_working_set_bytes without node-exporter) as a share of total, with pod memory requests as a share of allocatable memory', format: 'percent', fields: [ 'memoryUsed', diff --git a/js/console/src/components/kubernetes/cluster/Node.tsx b/js/console/src/components/kubernetes/cluster/Node.tsx index 2236ce1516..ba4121d6c6 100644 --- a/js/console/src/components/kubernetes/cluster/Node.tsx +++ b/js/console/src/components/kubernetes/cluster/Node.tsx @@ -14,9 +14,10 @@ import { filesize } from 'filesize' import { useMemo, useState } from 'react' import { Outlet, useOutletContext, useParams } from 'react-router-dom' -import { useTheme } from 'styled-components' +import styled, { useTheme } from 'styled-components' import { getResourceDetailsAbsPath } from '../../../routes/kubernetesRoutesConsts' +import { Logs } from '../../cd/logs/Logs' import { GaugeWrap } from '../../cluster/Gauges' import { NodeMetrics } from '../../cluster/nodes/NodeMetrics' import { cpuFmt, roundToTwoPlaces } from '../../cluster/utils' @@ -56,6 +57,7 @@ import { const directory: Array = [ { path: '', label: 'Info' }, { path: 'metrics', label: 'Metrics' }, + { path: 'logs', label: 'Logs' }, { path: 'conditions', label: 'Conditions' }, { path: 'images', label: 'Container images' }, { path: 'pods', label: 'Pods' }, @@ -315,6 +317,37 @@ export function NodeMetricsView() { ) } +export function NodeLogs() { + const { clusterId = '', name = '' } = useParams() + + return ( + + + + + + ) +} + +// absolutely filled so the logs view gets a definite height inside the scrolling tab content +const FillSC = styled.div({ + flex: 1, + minHeight: 0, + position: 'relative', + width: '100%', +}) + +const FillContentSC = styled.div({ + display: 'flex', + flexDirection: 'column', + inset: 0, + overflow: 'hidden', + position: 'absolute', +}) + export function NodeConditions() { const node = useOutletContext() diff --git a/js/console/src/components/utils/metrics/MetricsGraphCard.tsx b/js/console/src/components/utils/metrics/MetricsGraphCard.tsx index 30b5edb589..334bdc38ca 100644 --- a/js/console/src/components/utils/metrics/MetricsGraphCard.tsx +++ b/js/console/src/components/utils/metrics/MetricsGraphCard.tsx @@ -1,12 +1,19 @@ -import type { ReactNode } from 'react' +import { + CloseIcon, + ExpandIcon, + IconFrame, + ModalWrapper, +} from '@pluralsh/design-system' +import { type ReactNode, useRef, useState } from 'react' import styled from 'styled-components' import GraphHeader from 'components/utils/GraphHeader' +import { CaptionP } from 'components/utils/typography/Text' import { MetricsCard } from './MetricsCard' export const METRICS_GRAPH_HEIGHT = 340 -/** A single titled graph in its own hairline card. */ +/** A single titled graph in its own hairline card, expandable to a full screen modal. */ export function MetricsGraphCard({ title, tooltip, @@ -18,16 +25,70 @@ export function MetricsGraphCard({ height?: number | 'auto' children: ReactNode }) { + const [fullscreen, setFullscreen] = useState(false) + const triggerRef = useRef(null) + return ( - - + + } + textValue="Full screen" + tooltip="Full screen" + onClick={() => setFullscreen(true)} + /> + } + /> + {children} + + -
- {children} -
-
+ aria-describedby={undefined} + onCloseAutoFocus={(event) => { + event.preventDefault() + requestAnimationFrame(() => triggerRef.current?.focus()) + }} + css={{ + height: 'min(900px, 100%)', + maxHeight: '100%', + overflow: 'hidden', + width: 'min(1500px, 100%)', + }} + > + {fullscreen && ( + +
+ } + textValue="Close full screen" + tooltip="Close full screen" + onClick={() => setFullscreen(false)} + /> + } + /> + {tooltip && {tooltip}} +
+ {children} +
+ )} + + ) } @@ -57,3 +118,19 @@ const GraphCardSC = styled(MetricsCard)(({ theme }) => ({ gap: theme.spacing.small, padding: theme.spacing.medium, })) + +const FullscreenCardSC = styled(MetricsCard)(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + gap: theme.spacing.medium, + height: '100%', + padding: theme.spacing.large, + width: '100%', +})) + +const GraphBodySC = styled.div({ + display: 'flex', + flex: 1, + minHeight: 0, + minWidth: 0, +}) diff --git a/js/console/src/components/workbenches/workbench/job/WorkbenchJob.tsx b/js/console/src/components/workbenches/workbench/job/WorkbenchJob.tsx index 9d16718161..fa9255e399 100644 --- a/js/console/src/components/workbenches/workbench/job/WorkbenchJob.tsx +++ b/js/console/src/components/workbenches/workbench/job/WorkbenchJob.tsx @@ -126,6 +126,9 @@ export function WorkbenchJob() { second={job && } secondColor="text-xlight" secondPartialType="body2" + css={{ + '& > :first-child': { textBox: 'trim-start cap alphabetic' }, + }} /> ; facets?: InputMaybe>>; limit?: InputMaybe; + node?: InputMaybe; operator?: InputMaybe; query?: InputMaybe; serviceId?: InputMaybe; @@ -13160,6 +13161,7 @@ export type RootQueryTypeLogAggregationBucketsArgs = { aggregation?: InputMaybe; clusterId?: InputMaybe; facets?: InputMaybe>>; + node?: InputMaybe; operator?: InputMaybe; query?: InputMaybe; serviceId?: InputMaybe; @@ -13170,6 +13172,7 @@ export type RootQueryTypeLogAggregationBucketsArgs = { export type RootQueryTypeLogLabelsArgs = { clusterId?: InputMaybe; field: Scalars['String']['input']; + node?: InputMaybe; query?: InputMaybe; serviceId?: InputMaybe; time?: InputMaybe; @@ -22691,6 +22694,7 @@ export type LogAggregationQueryVariables = Exact<{ time?: InputMaybe; operator?: InputMaybe; facets?: InputMaybe> | InputMaybe>; + node?: InputMaybe; }>; @@ -22702,6 +22706,7 @@ export type LogLabelsQueryVariables = Exact<{ serviceId?: InputMaybe; query?: InputMaybe; time?: InputMaybe; + node?: InputMaybe; }>; @@ -22715,6 +22720,7 @@ export type LogAggregationBucketsQueryVariables = Exact<{ operator?: InputMaybe; aggregation?: InputMaybe; facets?: InputMaybe> | InputMaybe>; + node?: InputMaybe; }>; @@ -43746,7 +43752,7 @@ export type LoginLinkMutationHookResult = ReturnType; export type LoginLinkMutationOptions = Apollo.BaseMutationOptions; export const LogAggregationDocument = gql` - query LogAggregation($clusterId: ID, $limit: Int, $query: String, $serviceId: ID, $time: LogTimeRange, $operator: LogQueryOperator, $facets: [LogFacetInput]) { + query LogAggregation($clusterId: ID, $limit: Int, $query: String, $serviceId: ID, $time: LogTimeRange, $operator: LogQueryOperator, $facets: [LogFacetInput], $node: String) { logAggregation( clusterId: $clusterId limit: $limit @@ -43755,6 +43761,7 @@ export const LogAggregationDocument = gql` time: $time facets: $facets operator: $operator + node: $node ) { ...LogLine } @@ -43780,6 +43787,7 @@ export const LogAggregationDocument = gql` * time: // value for 'time' * operator: // value for 'operator' * facets: // value for 'facets' + * node: // value for 'node' * }, * }); */ @@ -43803,13 +43811,14 @@ export type LogAggregationLazyQueryHookResult = ReturnType; export type LogAggregationQueryResult = Apollo.QueryResult; export const LogLabelsDocument = gql` - query LogLabels($field: String!, $clusterId: ID, $serviceId: ID, $query: String, $time: LogTimeRange) { + query LogLabels($field: String!, $clusterId: ID, $serviceId: ID, $query: String, $time: LogTimeRange, $node: String) { logLabels( field: $field clusterId: $clusterId serviceId: $serviceId query: $query time: $time + node: $node ) { ...LogFacetDetail } @@ -43833,6 +43842,7 @@ export const LogLabelsDocument = gql` * serviceId: // value for 'serviceId' * query: // value for 'query' * time: // value for 'time' + * node: // value for 'node' * }, * }); */ @@ -43856,7 +43866,7 @@ export type LogLabelsLazyQueryHookResult = ReturnType; export type LogLabelsQueryResult = Apollo.QueryResult; export const LogAggregationBucketsDocument = gql` - query LogAggregationBuckets($serviceId: ID, $clusterId: ID, $query: String, $time: LogTimeRange, $operator: LogQueryOperator, $aggregation: LogAggregationInput, $facets: [LogFacetInput]) { + query LogAggregationBuckets($serviceId: ID, $clusterId: ID, $query: String, $time: LogTimeRange, $operator: LogQueryOperator, $aggregation: LogAggregationInput, $facets: [LogFacetInput], $node: String) { logAggregationBuckets( serviceId: $serviceId clusterId: $clusterId @@ -43865,6 +43875,7 @@ export const LogAggregationBucketsDocument = gql` aggregation: $aggregation operator: $operator facets: $facets + node: $node ) { ...LogAggregationBucket } @@ -43890,6 +43901,7 @@ export const LogAggregationBucketsDocument = gql` * operator: // value for 'operator' * aggregation: // value for 'aggregation' * facets: // value for 'facets' + * node: // value for 'node' * }, * }); */ diff --git a/js/console/src/generated/persisted-queries/client.json b/js/console/src/generated/persisted-queries/client.json index 820ea3c928..aa7c1715a0 100644 --- a/js/console/src/generated/persisted-queries/client.json +++ b/js/console/src/generated/persisted-queries/client.json @@ -1412,20 +1412,20 @@ "name": "LoginLink", "body": "mutation LoginLink($key: String!) {\n loginLink(key: $key) {\n ...User\n jwt\n refreshToken {\n ...RefreshToken\n __typename\n }\n __typename\n }\n}\n\nfragment User on User {\n id\n pluralId\n name\n email\n emailSettings {\n digest\n __typename\n }\n profile\n backgroundColor\n readTimestamp\n roles {\n admin\n __typename\n }\n personas {\n ...Persona\n __typename\n }\n homepage\n __typename\n}\n\nfragment Persona on Persona {\n id\n name\n description\n role\n bindings {\n ...PolicyBinding\n __typename\n }\n configuration {\n ...PersonaConfiguration\n __typename\n }\n __typename\n}\n\nfragment PolicyBinding on PolicyBinding {\n id\n user {\n id\n name\n email\n __typename\n }\n group {\n id\n name\n __typename\n }\n __typename\n}\n\nfragment PersonaConfiguration on PersonaConfiguration {\n all\n deployments {\n addOns\n clusters\n pipelines\n providers\n repositories\n services\n __typename\n }\n home {\n manager\n security\n __typename\n }\n flows {\n permissions\n startWorkbenchJob\n pipelines\n previews\n workbenches\n __typename\n }\n sidebar {\n audits\n flows\n kubernetes\n pullRequests\n settings\n backups\n stacks\n workbenches\n security\n cost\n cd\n ai\n __typename\n }\n services {\n configuration\n secrets\n __typename\n }\n settings {\n accessTokens\n ai\n audits\n chatbots\n cloudConnections\n global\n notifications\n projects\n userManagement\n webhooks\n __typename\n }\n ai {\n pr\n __typename\n }\n __typename\n}\n\nfragment RefreshToken on RefreshToken {\n id\n token\n insertedAt\n updatedAt\n __typename\n}" }, - "sha256:9ea0a36bcaac8f039c8e1b669c72a5eda5699dff058d50d9220704dd1a3657f3": { + "sha256:49f037376f12afb039bfca0262fc4fcbd689a2622276dd98231961c5f46a46cf": { "type": "query", "name": "LogAggregation", - "body": "query LogAggregation($clusterId: ID, $limit: Int, $query: String, $serviceId: ID, $time: LogTimeRange, $operator: LogQueryOperator, $facets: [LogFacetInput]) {\n logAggregation(\n clusterId: $clusterId\n limit: $limit\n query: $query\n serviceId: $serviceId\n time: $time\n facets: $facets\n operator: $operator\n ) {\n ...LogLine\n __typename\n }\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}" + "body": "query LogAggregation($clusterId: ID, $limit: Int, $query: String, $serviceId: ID, $time: LogTimeRange, $operator: LogQueryOperator, $facets: [LogFacetInput], $node: String) {\n logAggregation(\n clusterId: $clusterId\n limit: $limit\n query: $query\n serviceId: $serviceId\n time: $time\n facets: $facets\n operator: $operator\n node: $node\n ) {\n ...LogLine\n __typename\n }\n}\n\nfragment LogLine on LogLine {\n facets {\n ...LogFacet\n __typename\n }\n log\n timestamp\n __typename\n}\n\nfragment LogFacet on LogFacet {\n key\n value\n __typename\n}" }, - "sha256:14e64890f9fb4a797a6ad0dfeb4a93b03422869e202f969e4b38f6a977513865": { + "sha256:1b9f8e9896d743570cb04125038d58cab053d6f13fec151d095d7d4771b651b9": { "type": "query", "name": "LogLabels", - "body": "query LogLabels($field: String!, $clusterId: ID, $serviceId: ID, $query: String, $time: LogTimeRange) {\n logLabels(\n field: $field\n clusterId: $clusterId\n serviceId: $serviceId\n query: $query\n time: $time\n ) {\n ...LogFacetDetail\n __typename\n }\n}\n\nfragment LogFacetDetail on LogFacetDetail {\n label\n count\n __typename\n}" + "body": "query LogLabels($field: String!, $clusterId: ID, $serviceId: ID, $query: String, $time: LogTimeRange, $node: String) {\n logLabels(\n field: $field\n clusterId: $clusterId\n serviceId: $serviceId\n query: $query\n time: $time\n node: $node\n ) {\n ...LogFacetDetail\n __typename\n }\n}\n\nfragment LogFacetDetail on LogFacetDetail {\n label\n count\n __typename\n}" }, - "sha256:06956e5500b823ae48a18bd80fd599a778b4297631f7036a26548d173a8b7fcf": { + "sha256:1d9622a36096ddb93d24c12866896f0ced19cb7baf66a3f50eeb40818a8df81e": { "type": "query", "name": "LogAggregationBuckets", - "body": "query LogAggregationBuckets($serviceId: ID, $clusterId: ID, $query: String, $time: LogTimeRange, $operator: LogQueryOperator, $aggregation: LogAggregationInput, $facets: [LogFacetInput]) {\n logAggregationBuckets(\n serviceId: $serviceId\n clusterId: $clusterId\n query: $query\n time: $time\n aggregation: $aggregation\n operator: $operator\n facets: $facets\n ) {\n ...LogAggregationBucket\n __typename\n }\n}\n\nfragment LogAggregationBucket on LogAggregationBucket {\n timestamp\n count\n __typename\n}" + "body": "query LogAggregationBuckets($serviceId: ID, $clusterId: ID, $query: String, $time: LogTimeRange, $operator: LogQueryOperator, $aggregation: LogAggregationInput, $facets: [LogFacetInput], $node: String) {\n logAggregationBuckets(\n serviceId: $serviceId\n clusterId: $clusterId\n query: $query\n time: $time\n aggregation: $aggregation\n operator: $operator\n facets: $facets\n node: $node\n ) {\n ...LogAggregationBucket\n __typename\n }\n}\n\nfragment LogAggregationBucket on LogAggregationBucket {\n timestamp\n count\n __typename\n}" }, "sha256:d86d6daf39197ee5434862f7fe0b278a785a959a1ec0c86634d7af08735d43f3": { "type": "query", diff --git a/js/console/src/graph/logs.graphql b/js/console/src/graph/logs.graphql index e1714ace55..1c23c7f495 100644 --- a/js/console/src/graph/logs.graphql +++ b/js/console/src/graph/logs.graphql @@ -29,6 +29,7 @@ query LogAggregation( $time: LogTimeRange $operator: LogQueryOperator $facets: [LogFacetInput] + $node: String ) { logAggregation( clusterId: $clusterId @@ -38,6 +39,7 @@ query LogAggregation( time: $time facets: $facets operator: $operator + node: $node ) { ...LogLine } @@ -49,6 +51,7 @@ query LogLabels( $serviceId: ID $query: String $time: LogTimeRange + $node: String ) { logLabels( field: $field @@ -56,6 +59,7 @@ query LogLabels( serviceId: $serviceId query: $query time: $time + node: $node ) { ...LogFacetDetail } @@ -69,6 +73,7 @@ query LogAggregationBuckets( $operator: LogQueryOperator $aggregation: LogAggregationInput $facets: [LogFacetInput] + $node: String ) { logAggregationBuckets( serviceId: $serviceId @@ -78,6 +83,7 @@ query LogAggregationBuckets( aggregation: $aggregation operator: $operator facets: $facets + node: $node ) { ...LogAggregationBucket } diff --git a/js/console/src/routes/kubernetesRoute.tsx b/js/console/src/routes/kubernetesRoute.tsx index 9382af9c12..11ca26e0a2 100644 --- a/js/console/src/routes/kubernetesRoute.tsx +++ b/js/console/src/routes/kubernetesRoute.tsx @@ -38,6 +38,7 @@ import Node, { NodeContainerImages, NodeEvents, NodeInfo, + NodeLogs, NodeMetricsView, NodePods, } from '../components/kubernetes/cluster/Node' @@ -844,6 +845,10 @@ export const kubernetesRoutes = ( path="metrics" element={} /> + } + /> } diff --git a/lib/console/deployments/observability/metrics.ex b/lib/console/deployments/observability/metrics.ex index effd20996a..d88bf7a5ae 100644 --- a/lib/console/deployments/observability/metrics.ex +++ b/lib/console/deployments/observability/metrics.ex @@ -8,9 +8,14 @@ defmodule Console.Deployments.Observability.Metrics do @service_selector ~s|cluster="${cluster}",namespace="${namespace}"| @pod_selector ~s|cluster="${cluster}",namespace="${namespace}",pod="${name}"| + # node-exporter isn't always scraped (k8s-monitoring only does with `hostMetrics.linuxHosts`), so host + # cpu and memory fall back to the kubelet's resource metrics against kube-state-metrics node capacity + @cluster_capacity_cpu ~s|sum(max by (node) (kube_node_status_capacity{resource="cpu",unit="core",cluster="${cluster}"}))| + @cluster_capacity_memory ~s|sum(max by (node) (kube_node_status_capacity{resource="memory",unit="byte",cluster="${cluster}"}))| + @cluster post_process([ - cpu: ~s|1 - avg(irate(node_cpu_seconds_total{mode="idle",cluster="${cluster}"}[${rate}]))|, - memory: ~s|(sum(node_memory_MemTotal_bytes{cluster="${cluster}"}) - sum(node_memory_MemAvailable_bytes{cluster="${cluster}"})) / sum(node_memory_MemTotal_bytes{cluster="${cluster}"})|, + cpu: ~s|(1 - avg(irate(node_cpu_seconds_total{mode="idle",cluster="${cluster}"}[${rate}]))) or (sum(max by (node) (rate(node_cpu_usage_seconds_total{cluster="${cluster}"}[${rate}]))) / #{@cluster_capacity_cpu})|, + memory: ~s|((sum(node_memory_MemTotal_bytes{cluster="${cluster}"}) - sum(node_memory_MemAvailable_bytes{cluster="${cluster}"})) / sum(node_memory_MemTotal_bytes{cluster="${cluster}"})) or (sum(max by (node) (node_memory_working_set_bytes{cluster="${cluster}"})) / #{@cluster_capacity_memory})|, cpu_requests: reservation(:requests, :cpu, ~s|cluster="${cluster}"|), memory_requests: reservation(:requests, :memory, ~s|cluster="${cluster}"|), cpu_limits: reservation(:limits, :cpu, ~s|cluster="${cluster}"|), @@ -20,11 +25,16 @@ defmodule Console.Deployments.Observability.Metrics do memory_usage: ~s|sum(container_memory_working_set_bytes{image!="",cluster="${cluster}",container!=""})| ]) + # k8s-monitoring's default cAdvisor allowlist drops machine_cpu_cores + @instance_selector ~s|cluster="${cluster}",node="${instance}"| + @instance_cores ~s|(max(machine_cpu_cores{#{@instance_selector}}) or max(kube_node_status_capacity{resource="cpu",unit="core",#{@instance_selector}}))| + @instance_memory ~s|(max(machine_memory_bytes{#{@instance_selector}}) or max(kube_node_status_capacity{resource="memory",unit="byte",#{@instance_selector}}))| + @node post_process([ - cpu: ~s|sum (rate (container_cpu_usage_seconds_total{container!="",cluster="${cluster}",node="${instance}"}[${rate}])) / sum (machine_cpu_cores{node="${instance}",cluster="${cluster}"})|, - memory: ~s|sum (container_memory_working_set_bytes{image!="",container!="",node="${instance}",cluster="${cluster}"}) / sum (machine_memory_bytes{node="${instance}",cluster="${cluster}"})|, - cpu_usage: ~s|sum(rate(container_cpu_usage_seconds_total{container!="",node="${instance}",cluster="${cluster}"}[${rate}]))|, - memory_usage: ~s|sum(container_memory_working_set_bytes{image!="",container!="",node="${instance}"})| + cpu: ~s|sum (rate (container_cpu_usage_seconds_total{container!="",#{@instance_selector}}[${rate}])) / #{@instance_cores}|, + memory: ~s|sum (container_memory_working_set_bytes{image!="",container!="",#{@instance_selector}}) / #{@instance_memory}|, + cpu_usage: ~s|sum(rate(container_cpu_usage_seconds_total{container!="",#{@instance_selector}}[${rate}]))|, + memory_usage: ~s|sum(container_memory_working_set_bytes{image!="",container!="",#{@instance_selector}})| ]) @component post_process([ @@ -101,25 +111,39 @@ defmodule Console.Deployments.Observability.Metrics do memory: ~s|sum(container_memory_working_set_bytes{cluster="${cluster}",image!="",container!=""}) / sum(kube_pod_container_resource_requests_memory_bytes{cluster="${cluster}"}) by (pod)| ]) - # node-exporter series are labeled by scrape `instance` rather than node name, so they're - # matched to the node through node_uname_info's `nodename` - @node_exporter ~s|* on (instance) group_left () max by (instance) (node_uname_info{cluster="${cluster}",nodename="${node}"})| + # Shippers label node-exporter series with the node name differently: grafana's k8s-monitoring + # sets `instance` to it, kube-prometheus-stack adds `nodename`, victoria-metrics' stack adds + # `node`, and bare scrape configs only have node_uname_info's `nodename` to join through (which + # k8s-monitoring's default allowlist drops). Failing all of those, a host-network node-exporter's + # `ip:port` instance matches the node's internal ip in kube_node_info. Each is tried, keyed by instance. + @node_instances [ + ~s|node_cpu_seconds_total{mode="idle",cluster="${cluster}",instance="${node}"}|, + ~s|node_cpu_seconds_total{mode="idle",cluster="${cluster}",nodename="${node}"}|, + ~s|node_cpu_seconds_total{mode="idle",cluster="${cluster}",node="${node}"}|, + ~s|node_uname_info{cluster="${cluster}",nodename="${node}"}|, + ~s|(label_replace(node_cpu_seconds_total{mode="idle",cluster="${cluster}"}, "internal_ip", "$1", "instance", "(.+):[0-9]+") and on (internal_ip) kube_node_info{cluster="${cluster}",node="${node}"})| + ] + |> Enum.join(" or ") + @node_exporter ~s|and on (instance) max by (instance) (#{@node_instances})| @node_selector ~s|cluster="${cluster}",node="${node}"| + @node_capacity_cpu ~s|max(kube_node_status_capacity{resource="cpu",unit="core",#{@node_selector}})| @host_fs ~s # physical interfaces only; virtual pod and overlay interfaces double count pod traffic @host_nic ~s @node_pods ~s|on (namespace, pod) group_left () max by (namespace, pod) (kube_pod_info{#{@node_selector}})| - # host-level series that no pod or namespace grouping applies to + # host-level series that no pod or namespace grouping applies to. Without node-exporter, cpu and + # memory fall back to the kubelet's resource metrics and kube-state-metrics node capacity; the + # rest have no equivalent and stay empty @node_host [ - cpu_utilization: ~s|1 - avg(rate(node_cpu_seconds_total{mode="idle",cluster="${cluster}"}[${rate}]) #{@node_exporter})|, + cpu_utilization: ~s|(1 - avg(rate(node_cpu_seconds_total{mode="idle",cluster="${cluster}"}[${rate}]) #{@node_exporter})) or (max(rate(node_cpu_usage_seconds_total{#{@node_selector}}[${rate}])) / #{@node_capacity_cpu})|, cpu_modes: ~s|sum by (mode) (rate(node_cpu_seconds_total{mode!="idle",cluster="${cluster}"}[${rate}]) #{@node_exporter}) / scalar(count(node_cpu_seconds_total{mode="idle",cluster="${cluster}"} #{@node_exporter}))|, - cpu_cores: ~s|count(node_cpu_seconds_total{mode="idle",cluster="${cluster}"} #{@node_exporter})|, + cpu_cores: ~s|count(node_cpu_seconds_total{mode="idle",cluster="${cluster}"} #{@node_exporter}) or max(machine_cpu_cores{#{@node_selector}}) or #{@node_capacity_cpu}|, load1: ~s|max(node_load1{cluster="${cluster}"} #{@node_exporter})|, load5: ~s|max(node_load5{cluster="${cluster}"} #{@node_exporter})|, load15: ~s|max(node_load15{cluster="${cluster}"} #{@node_exporter})|, - memory_total: ~s|max(node_memory_MemTotal_bytes{cluster="${cluster}"} #{@node_exporter})|, - memory_used: ~s|max((node_memory_MemTotal_bytes{cluster="${cluster}"} - node_memory_MemAvailable_bytes{cluster="${cluster}"}) #{@node_exporter})|, + memory_total: ~s|max(node_memory_MemTotal_bytes{cluster="${cluster}"} #{@node_exporter}) or max(machine_memory_bytes{#{@node_selector}}) or max(kube_node_status_capacity{resource="memory",unit="byte",#{@node_selector}})|, + memory_used: ~s|max((node_memory_MemTotal_bytes{cluster="${cluster}"} - node_memory_MemAvailable_bytes{cluster="${cluster}"}) #{@node_exporter}) or max(node_memory_working_set_bytes{#{@node_selector}})|, memory_cached: ~s|max((node_memory_Cached_bytes{cluster="${cluster}"} + node_memory_Buffers_bytes{cluster="${cluster}"}) #{@node_exporter})|, major_page_faults: ~s|max(rate(node_vmstat_pgmajfault{cluster="${cluster}"}[${rate}]) #{@node_exporter})|, filesystem_fullness: ~s|max by (mountpoint) ((1 - node_filesystem_avail_bytes{#{@host_fs}} / node_filesystem_size_bytes{#{@host_fs}}) #{@node_exporter})|, diff --git a/lib/console/graphql/deployments/cluster.ex b/lib/console/graphql/deployments/cluster.ex index 4c6dfd7dd6..c22df6db63 100644 --- a/lib/console/graphql/deployments/cluster.ex +++ b/lib/console/graphql/deployments/cluster.ex @@ -503,8 +503,8 @@ defmodule Console.GraphQl.Deployments.Cluster do end @desc """ - Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node through - node_uname_info's nodename), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken + Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node by an + `instance`, `nodename` or `node` label, or node_uname_info), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken out by the `groupBy` argument and labeled by `namespace` (and `pod`) accordingly; the rest are node-wide. """ object :node_usage_metrics do diff --git a/lib/console/graphql/observability.ex b/lib/console/graphql/observability.ex index b804c22e4e..ce4922a128 100644 --- a/lib/console/graphql/observability.ex +++ b/lib/console/graphql/observability.ex @@ -143,6 +143,7 @@ defmodule Console.GraphQl.Observability do arg :limit, :integer arg :operator, :log_query_operator arg :facets, list_of(:log_facet_input) + arg :node, :string, description: "only logs from pods on this node" resolve &Observability.list_logs/2 end @@ -154,6 +155,7 @@ defmodule Console.GraphQl.Observability do arg :query, :string arg :time, :log_time_range arg :field, non_null(:string) + arg :node, :string, description: "only logs from pods on this node" resolve &Observability.list_log_labels/2 end @@ -167,6 +169,7 @@ defmodule Console.GraphQl.Observability do arg :aggregation, :log_aggregation_input arg :operator, :log_query_operator arg :facets, list_of(:log_facet_input) + arg :node, :string, description: "only logs from pods on this node" resolve &Observability.list_log_aggregations/2 end diff --git a/lib/console/logs/provider/elastic.ex b/lib/console/logs/provider/elastic.ex index 3fdcb2110a..1f12462ba8 100644 --- a/lib/console/logs/provider/elastic.ex +++ b/lib/console/logs/provider/elastic.ex @@ -102,6 +102,7 @@ defmodule Console.Logs.Provider.Elastic do query: maybe_query(q) |> add_terms(q) |> add_pod(q) + |> add_node(q) |> add_range(q) |> add_namespaces(q) |> add_facets(q), @@ -124,6 +125,16 @@ defmodule Console.Logs.Provider.Elastic do do: add_filter(query, %{term: %{"kubernetes.pod.name.keyword" => pod}}) defp add_pod(query, _), do: query + # filebeat/elastic agent: kubernetes.node.name, fluent-bit/fluentd: kubernetes.host, otel: k8s.node.name; + # each may be mapped as a keyword or as text with a .keyword subfield + @node_fields ~w(kubernetes.node.name kubernetes.host k8s.node.name) + + defp add_node(query, %Query{node: node}) when is_binary(node) and byte_size(node) > 0 do + terms = Enum.flat_map(@node_fields, &[%{term: %{&1 => node}}, %{term: %{"#{&1}.keyword" => node}}]) + add_filter(query, %{bool: %{should: terms, minimum_should_match: 1}}) + end + defp add_node(query, _), do: query + defp add_namespaces(query, %Query{namespaces: [_ | _] = ns}), do: add_filter(query, %{terms: %{"kubernetes.namespace.keyword" => ns}}) defp add_namespaces(query, _), do: query diff --git a/lib/console/logs/provider/loki.ex b/lib/console/logs/provider/loki.ex index 514718dd39..c0ee4b48c7 100644 --- a/lib/console/logs/provider/loki.ex +++ b/lib/console/logs/provider/loki.ex @@ -95,9 +95,17 @@ defmodule Console.Logs.Provider.Loki do |> Enum.reverse() |> ensure_matcher(labels) - "{#{Enum.join(matchers, ", ")}}#{line_filter(q)}" + "{#{Enum.join(matchers, ", ")}}#{line_filter(q)}#{node_filter(q)}" end + # shippers name the node label differently (promtail: node_name, alloy/otlp: k8s_node_name, ...), + # and some ship it as structured metadata, which only a label filter (not a stream selector) can match + @node_labels ~w(k8s_node_name node_name node nodename kubernetes_host) + + defp node_filter(%Query{node: node}) when is_binary(node) and byte_size(node) > 0, + do: " | " <> Enum.map_join(@node_labels, " or ", &matcher(&1, node)) + defp node_filter(_), do: "" + defp add_resource(ms, %Query{resource: %Cluster{handle: h}}, {cl, _}), do: [matcher(cl, h) | ms] defp add_resource(ms, %Query{resource: %Service{} = svc}, {cl, nl}) do %Service{namespace: ns, cluster: %Cluster{handle: h}} = Console.Repo.preload(svc, [:cluster]) diff --git a/lib/console/logs/provider/opensearch.ex b/lib/console/logs/provider/opensearch.ex index 05c2242bba..47a65dec2b 100644 --- a/lib/console/logs/provider/opensearch.ex +++ b/lib/console/logs/provider/opensearch.ex @@ -105,6 +105,7 @@ defmodule Console.Logs.Provider.Opensearch do |> add_terms(q) |> add_range(q) |> add_pod(q) + |> add_node(q) |> add_namespaces(q) |> add_facets(q), sort: sort(q), @@ -145,6 +146,19 @@ defmodule Console.Logs.Provider.Opensearch do do: add_filter(query, %{term: %{"kubernetes.pod.name.keyword" => pod}}) defp add_pod(query, _), do: query + # fluent-bit/fluentd: kubernetes.host, filebeat: kubernetes.node.name + @node_fields ~w(kubernetes.host.keyword kubernetes.node.name.keyword) + + defp add_node(query, %Query{node: node}) when is_binary(node) and byte_size(node) > 0 do + add_filter(query, %{ + nested: %{ + path: "kubernetes", + query: %{bool: %{should: Enum.map(@node_fields, &%{term: %{&1 => node}}), minimum_should_match: 1}} + } + }) + end + defp add_node(query, _), do: query + defp add_namespaces(query, %Query{namespaces: [_ | _] = ns}) do add_filter(query, %{ nested: %{ diff --git a/lib/console/logs/provider/victoria.ex b/lib/console/logs/provider/victoria.ex index 470a959cf9..269c83245c 100644 --- a/lib/console/logs/provider/victoria.ex +++ b/lib/console/logs/provider/victoria.ex @@ -39,6 +39,7 @@ defmodule Console.Logs.Provider.Victoria do defp build_query(%Query{query: query} = q) do add_resource([query], q) + |> add_node(q) |> add_time(q) |> maybe_reverse(q) |> Enum.join(" ") @@ -46,8 +47,8 @@ defmodule Console.Logs.Provider.Victoria do defp line(%{"_msg" => log, "_time" => time} = line) do facets = - Map.drop(line, ~w(_msg _time _stream)) - |> Map.merge(line["_stream"] || %{}) + Map.drop(line, ~w(_msg _time _stream _stream_id)) + |> Map.merge(stream_fields(line["_stream"])) |> facets() %Line{ @@ -57,6 +58,10 @@ defmodule Console.Logs.Provider.Victoria do } end + # victoria logs serializes the stream as a `{k="v",...}` string, whose fields are also top-level + defp stream_fields(%{} = stream), do: stream + defp stream_fields(_), do: %{} + defp add_resource(io, %Query{resource: %Cluster{} = cluster}), do: [cluster_label(cluster) | io] defp add_resource(io, %Query{resource: %Service{namespace: ns} = svc}) do @@ -67,6 +72,13 @@ defmodule Console.Logs.Provider.Victoria do defp cluster_label(%Cluster{handle: h}), do: ~s("cluster":"#{h}") + # vector: kubernetes.pod_node_name, fluent-bit: kubernetes.host, promtail: node_name, otel: k8s.node.name + @node_fields ~w(kubernetes.pod_node_name kubernetes.host node_name k8s.node.name) + + defp add_node(io, %Query{node: node}) when is_binary(node) and byte_size(node) > 0, + do: ["(" <> Enum.map_join(@node_fields, " or ", &~s("#{&1}":=#{Jason.encode!(node)})) <> ")" | io] + defp add_node(io, _), do: io + defp add_time(io, %Query{time: %Time{after: a, before: b}}) when is_binary(a) and is_binary(b), do: [~s(_time:[#{a}, #{b}]) | io] defp add_time(io, %Query{time: %Time{duration: d}}) when is_binary(d), diff --git a/lib/console/logs/query.ex b/lib/console/logs/query.ex index d3310d616d..ad65fb1381 100644 --- a/lib/console/logs/query.ex +++ b/lib/console/logs/query.ex @@ -12,7 +12,7 @@ defmodule Console.Logs.Query do defstruct [ :project_id, :cluster_id, :service_id, :query, :limit, :resource, :time, :facets, :namespaces, - :bucket_size, :group_by_fields, :pod, :field, :operator + :bucket_size, :group_by_fields, :pod, :node, :field, :operator ] def new(args) do @@ -29,7 +29,8 @@ defmodule Console.Logs.Query do group_by_fields: args[:group_by_fields], field: args[:field], operator: args[:operator] || :or, - pod: args[:pod] + pod: args[:pod], + node: args[:node] } end diff --git a/lib/console_web/controllers/git_controller.ex b/lib/console_web/controllers/git_controller.ex index 892af302d8..027fcbdee6 100644 --- a/lib/console_web/controllers/git_controller.ex +++ b/lib/console_web/controllers/git_controller.ex @@ -79,7 +79,7 @@ defmodule ConsoleWeb.GitController do ]) agent_bootstrapping(conn) {{:error, :rate_limited}, svc} -> - Services.add_errors(svc, [%{source: "git", message: "Rate limited"}]) + Services.add_errors(svc, [%{source: "git", message: "Rate limited", warning: true}]) rate_limited(conn) {{:error, err}, svc} -> Services.add_errors(svc, [%{source: "git", message: stringify(err)}]) @@ -103,7 +103,7 @@ defmodule ConsoleWeb.GitController do ]) agent_bootstrapping(conn) {{:error, :rate_limited}, svc} -> - Services.add_errors(svc, [%{source: "git", message: "Rate limited"}]) + Services.add_errors(svc, [%{source: "git", message: "Rate limited", warning: true}]) rate_limited(conn) {{:error, {:dependencies, err}}, svc} -> Services.add_errors(svc, [%{source: "git", message: stringify(err), warning: true}]) diff --git a/priv/agent-service-chart.tgz b/priv/agent-service-chart.tgz index 9c7ab107bc53f235823b3f3e46dd0087f5b7296d..ddd7763377509edc5a9ccc502e7badbc006de9d4 100644 GIT binary patch delta 216965 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 z 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

o%8tHR`#@v}+qma_RIA!sp5KUL_hGDIz%<#? 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 BGpGOn delta 216944 zcmV((K;XZOixiKG6p(a(ynOlU`Ti^Tet-YjKK%Z8Q_5SGq;3pDKD3|m;(jB|o%`R3 zIPs(Kz`1?4;m+s! zi`~E(i+K<&W+F_TXf9$mjpB`&>xU`)A38tS7&@Ul69>*2J-^|9I9VJVIMXzpCkMN` zcXxLq?rD@vH~7iC%c1TvUCiMZm~r5HE>3Ubwlwt*y}7@EcIyV2NFEmfwBP^z=dYfB zUb+7-UVgs5|4-09agN2cn+2)Eklfng4VAi7JO8Gh%76UT!?i)M}|;*>_LK{z183~V!h@F=`1WB4@5JtZ0+Ac8H*q{Sq{YS2tv?py zk#hnFXF)$YcYYAyk8%ijKZ5t2WG+0Mf|F!db2pvh&>~DSm`pl#Q)dP{@6X}=!U%aM zcYZpJGFTRj6#HXbyl}m#6T$p(jqu26=tS{Y#MrfbOu&xtp$mI+GicmgU-hJGt)3m&Lx%Pa?dR|c&EMVmTQwek>*UjrVxp!x{ z6ItR;!~uNaC^7+)nu{3>8Vmf|amH@y9ys@lpZOzCeYT*fkKoY_n%jZ%!;c#q;y#Vt z!+0V;0?Yzs0Z`SD0^NI4SgJFPlJpEG46_TPu^0w_kq6Yw4ad$n68K%}%>9rlT|`ji zLVx(^j+4L#CyoG6;k4*z19&lUM34yBKRE9s#ZB^}U_3;W!+UoU;#>%FeZG4MEP051 zI$=A|Byc0DvVae1qiI+2@lq*C}ZH zF`vMHO?D*$k!m7;tggfR_=vu8+yvGbr3d(rv-kPSmprBG^Uh6quzTgRKuqH#itAxOeq#Sfa~f8uOq{@8i-^5yeq+jLv*Vn4;b zh1re%ok(++LZ(6 z+J)nzuMm=u@U&UA{0q-7Drb!Yvh7ni}b)8 zbt>E-o&L;UMRCf!5`4t{^xfcC1n%NOz{ZXN%=cgNI{j#zf42wUrT$C+cD$GN+3|9=~Eb@9Su*KveD0+3yDhX>Bf*@imduYt}T zi@6BLBJ>vD(#6UTee5Udp-V}=j^o977G418h*&+i;m-(RIe77+#K!|aa3)hP9{G_3 zlw{ffD)TG|&LRK_c;)o^U6h`|D&QG^_~{epy~LV)BWM^WbtiC(qa;W1KL6~YAm`-# z`v^DDog6rW!Nvw`ViE=7TV%8UXTu8sDTw$KwrUgZdAhl=kqEf-DQy`~^fI~;z(}8; zoV__bI{E4CiCpIyO!z`Rj0hDmw3;W4bqx=czN}gL0EdikeNP;E9$f}n@dcBAOIR^r zDkO18M)*0$ zvDz-pAwic+^%}MEP053=Mj-@{xEdMGe5*1`Ml5J#sZ+yT?BSWqIH56e&9c~ zoaG$l{e9_&MCfrfK5$sT>kvCIHXj-lF(vK%29U)!E)WskNcePE+S^a)O3v_Xvjp!4 z$d)eR$^mvTsQ%7aWv~lh#lDx+JwZrj@WtL2djpyQfM*6&VQ~a>2B^P(K2u4h4xDGe zpA*Q}KIXY|_sS0dS&4+967EDC&DGyS=kU!N`Wq4AdthkJfp&d`{M!OHXJ$Yl(6__n zT@>O2<*&a@5QXf^sStGG2uwNTKA)a#C?xtv5Q^Xmh7-UKG_4Aa0!}wJK5ie-aT-C!igW=*FKmA$ZVHzM|lerMt! zALbV%wb0-2BbT)LQ+yrao@Os`f`^+EFw&ue7&?r!c*%vKhwz|0t$doFsG;j-3B)Y{ zImP26kHvq3D5O?56Ei~TgI9ZdZ~Xy%=gl+t0sv{opT&F%Glr{wG(47uYe@zbu z{>)ch)jqa|&ut+0b^+`cG7NNH8!6nfSREkpuI}|U643?!JPD#JU|?vv6JTj@ivOcg zJzsrES~iA27<__$>}mj1A{qQhZ>m+pw>iE^20MU$Tv&GqSdBgrhXu%rKI5x^-mmDj ziAeE*0H%Qdy>nB4Z;F2~pNfCY>8l^hv%sG|t4`yy=I*OqRNjXBUz*<-d0J6@*H~_@ zZmM?3(hhSqv=ewSJOC;ZEbz4GTR6)QZbpcFOW}*sY?wL>cGR?X%KJC3?%!Sg{w=eB zU4S4r@P8I@!&*uY6qeQSTjBe{V&xK6GjoK%tZCNykHr~(SHIWa)j?Uy=5J63H+bJP z!`H#`@f*wuH}iRtP5U1v+t>btd%kg#!||A~J>zpi%5L&CUF<{=bwp@`qbR!Z0hdht zG;ptmAQ!puLcL>R$w7*2o%#jj5J9x_?BuOui2bb5U=|1e1H0s3FXZe-`NT#J5HY|B zj(=VK5gDF;L{qdCvL_@Pn$XmaMY|#QBD;b?og1;xebcD<_6&@d;4yqB_HS|DtX|^t&?H$7 zE*V&w6nrK@o%zRH^!A^kqaB~@dy@5X8hbM6y#hbjbLTCd_k@Xu#Ub36I z$xQ+>>{T}5e}{(M1-=1h6(kQa1XxXAmtYHqQd-}ojhW#h{g5@tXsUr*Nw3hSw}3BD zwv-66cA7=vAbItixB5geWx!F-R5P21o_0djaKT%Bnl#*wm3o$Be)_5WHizx&fv1gISwrSlb=f;#NKFFt=( zvHv`Owf|ym|9OJ;kALibwsCSlNAi)DlpZ7~jW#~p{q@(4fBa*JxCHKatzu$??+u(` z{v_$9Mn}{IG9S+9J2o|%$|2_$ByypD=e&AOfBLhF41}C}XD}Q%vM&KMgFiQDrb-X3 zM?n3_!ujtEP$S&PF)F}l4Wo_k1@}$Qr#J$xCjpG>xyaZgaQ{qfNh^mwf-xgk!Y#^J z1ju#kYC*el{O$su#XF4Fo$b-a={4N)05G52K1nELC48|%h_6O zvQif18x5S7+Sjt;P3>Rf?>2jn+=%@9Q(DKtpX?7epQGLp?qqb%+r{syc^1CxIk|c4 zhv~I5_}|I!eW%M+$I^5ZQp%iMAP zTWWh@NoZPdfzAy6FmMJx4fC>n=L=f(oKoo9rTw8MZI=^+;*v^8Q@(L zb}K$MlH68_+-$XOM2yZ@Bwx| zH9tGWk0x+ACY~<}=LSe3SN0O1c-RDK*8E@2|MU80?tJCWU>*Gb{@$yK|L2SS{r$6k z4Z;S0;J@qm&!=dTl3@^ApNI#^#+s;osfdX@j;Gd>nthWx{13ZgJ08Ws99A(RcB0Y4 zyfB}Ud>*>Hdi6qt9?uECZTC~J_TsVMdfp9l_mzB28&>EwzyFw6>~Zn{cg272KYLb* z|K5A~Y<>TqpqbZ>Ai&MiX%zcE6FDE`2 z0!@l+E%#++`Z5&@%b#h@Va|g%&~87mGEhA95aTQm{CbH4uSs8q&zECuRt2i&!X6cW zM$v7sJZheO(Gn1>K(7A4dcc_ue_k~d5oH@rfZCWTP*(&>r4(aVGHq8WrP$wrp4KO1 zb96>F=h0KL&HcH+#6`FjA3Q%?VKR@E%B?uaav9hj3kNj8=07XVYPqX6SmZ-Ofv5x~7Y*KNLf<5c_`a{&yxek~9Xqdn|`G74{`> z+Bz$Q^P#u&H`UDhZ<^Cri3hsw|I6ol<@^6~e_j9QNt#ufonf;ImAqRIPT zR^1m9pKdp4m&%C1PE%jBNf+IN`(FIE*y}>dfcnA;x`2W9;#3|Hb-_5iqVjx;G58Ok zaaqnC$SVmf(a4Kp5uuiB214$jxcTz13TLn?B)Z&Ls=a@bECpKry{L{xLa;jOdg-{} zVGT%p9{JJ>QUOQ#+|kEZRgrpszQ;a(T+T$-8hZB9(hT##+6Y4x{YeOL^=M;s^MBR) zuP^r3{NGcwPn=@@gJBnAXdV}6zS0hIxQ>v03OJ<$~*lWb17(@6k$0te%X_?p4f zJD5cfn5SDozEsBdZiod9Nd<_(I$QHtT>JMxQ;0eHU)v)Gy-S@aq&IPYO6VX@3EoE= zqvMO8E@S~fnW*%;qYEtYmTZhBe!5Hl^7J=GS3k$Q^soA2I@!g4)W_sD+|4_}RO8v4 zD==<+HcIa1@b8s-1OK8w^JgPKy_1d4{$~R-u*ZIsCC=&b35+Y995+V(Sh&0VIDEA+ zx=k=S{O-qi-^;vs+(Mb#2=5pf|k@9o}b|Bs_R z&27}dUoE6+K4ZeV>H3Exhajt~&~grOgd=kV`Vmbn-!we%27aS|hq&X~Su!U8NG}WA zxb6vLiM+_*N7)dPs4Y|OmACtDFrT{nlC_wMna;WdZ-<9xr{6ulD17ZWg>v21`KvM! zH6?SM@*FiIJjcQ#MaOIdW=cM*#_+!kOAfX;V;QW;nOS)XTq;3*su*uLXbC)iKf0a@BqA^yt*-iY((2apyrZ5(k z&VWrG(n3Op{@M5wZB;7_%fbz-O^qK2%6l9S0zKDz=B{{uiTNq0qJ`%t7ngZq3py!2 zl>E`kzNquT-GuGIq8a!em8-!%70b>&i zoQCksOaw=6BA)oH@Kll^9)i_rl@qI(5A*gKKbTp+YL2#g@v&%0;nKnLevH=wE4$&< zYQTo7)#CwwY*(b$f9kDE;7I4@76Im(HnwXVe?qN57>pP9IksL;(KdjLR*Fe2|)zsoLOFc?x^0pu^Vr%boaMTqTirQ;meSIm+WwAF9&= zj5>FJ`e(qIA(lkKBIZn(kJxvq?&Q8l!BpxZcZ~C=tn?swE*x=>LxA{6q9k1NAVBPa zbq<6(Ml=T$T==)u#bcXi$y9CPh=pB0F{+#aKQ|G>#B%{$#CT$|QB({HwjC?2WA>kh z0XTIM&ADa^;J`7ben=G3O?(8)P^5QJeB)q$#lxo4yozAM+_3bkELWj*TxYNu54ojp zTl&+a1tB)NPDN`gLo+#aU7M=kSSZ*T*SYRP)Bm;uzOoBs=gN;Bk*D=(!&0N?a`9w{Rwy3xR5%*KNyNxI6gHgsgIZ z$Us3Kdn4X1Vx};>5O*x}17|CONo||^M_eyXwc0u0SAUkxuy%U=Rw422$p+V*Od|;d3RwvoM!zl$Lb}(n9;lzu)g*uSguXgO{9y4HcqT_IR)Wy zGQ|pju4F>t!ZE^-jBbWWT$*65af2>@B#!~W@_&HCSaNSly>x*Su#o5);i>%YQtXAa zoIia1m2NCqEIEPNg`eEdDJz4+g;-hFGghiWsr1q}5Y1F4JDHPv;0S{vu#Zetu^T2dKXh|wN{P}9piMn03k6m9MrKMf<7!h<{WRh+R3GDx zFi0Q>x?zN5w{Cgd*oMud_(~ePafmD&i#S*y3d~1iJTM+P&gnI?e(*ACoNvPDE+j%6 zf?%LDlr&%6BW^cyb+Q|OLb#qM<|*EirYSOVK0y7Ipe)x7&$XZwZZpn1`Oq_x-7vM7 zW*~-BGANeG)o-w2SPdLiRT5a;E6lx3yP}V*<5bW%a7ES7DYcSZThmJ*3A_>E1T(fg zfA;ySFP7aVzUX57T7)u<#Y1O~WLD6yz6%MrFV;fNd8vwtW!a4$JJcM;J}Vt0n5 z#B+RfV?$XfHm?zX?t**~(SBjOf%q_bw76JjaWu|6G`+#rN~z2<@hMuV=;p~{nL;s% zQcZ%nA!fkolc9m9qNLTG#!>MlQvgzZ#k7h9mW;M1*O_E4tRWTf0kCBodXRk>nA^=Q zdmWfUq8G-+xKwE~BrIcrUiSB%wE&rZs^Jmo&UE1X*AIt(!~f?FfBtbx{;@aw<4-#W zKYnI>{BirwpDv5Y>iD9(6`)npOT|GbXxJfQ3g2FmnE4gvINx!;4T;({ZIlSJnyi@I zhRy)HD(3+=ex@;+f0tt~yCw91&4y48JXZTClxA3t9YU=D{n1F=yR$hEZ}h=!v@EM; zlBoSxo$#@L^#elz0LW1O^_lu=`_Ef{9ku?x{n;)&WWd&sKMZrg8vXd$_MeU4wwDAm zS=?+~x2wY%ey;X0$u`vf#z?RBCx+VEpK#VSKQu@X=8tY1yNk+i_rpA+3gxUG&fNL% zMl5RXSHtMlE_gubsPwE~vzrCzJUv!dRcoXD(6p9+)nm^#S$pbsjCt|(Ar4A}#+}at ztV~^S5qhW~SNW1T4I{y5l14Elj?cfzt}3aKCECLzoFCeq?l;%E{6FJtS+CE$b@+e2 z_`K@>{rQWR>-=9&(LQ$nPlCTk@cKN@YJEN7>v|7QoChPIqF-m68Qz@QGL9~UMTgEj zv*cNSOzu2Km|!y0K`CVo5aIOGV~OGZ4g`_Y#wsDrS6+&;w2}H)!N9BZB!%5k+8KUW zOD1}ckPhh{)~=&#*U`1>=x@<=6wA=rIgBbqs#=SiD2N5#w1esVk{(i6#;6O#Z&!_} z?7d#c`U8WCN?SCfr^;Q-=ukV8>JhV~r@!2Pbr9X1cCqeX;X}u2MfeJXZ|)R?ACe^U z&>GC)P&KRBisno|w)@O5aDiIYs(`z7S8wFIYU)a7g;!biOM9k75xt_(Moo9ec)!tu z5oqnZh`bu%Ce!;!MX2zSj1)!L!Z{%~KWB`HC6fAd32>xkmo9z14opqEmj3kH6-A7H z`~n?PQkvc$pcq-g+So;u!Qm!T{Eqc-i;s4rW|(uleRnV|dBG%Ixta*uTZius-~8qO zo$NT@pPycy)F}+lPrf@n`Mwue11QesUGAx8^pHBB)J<-7`90;R6XjFxGkA_ey6uSy z*~m!%i7-)6$%_NsJZtu+79q6G@75Q8cK}7@(h)Ti)KBJqcI2+(#z4urBRWQL56pE; z?s(%mT_pk7C00uw+Q8qlmFT!IE@*6-+$a7*bczL%vh^NUjcLBoa>yHleSuV;8zC2q1j%J{W3 z&$ISDSo~$<0TV5-)d+bL3?^JFKndDGFb>_bCM8Oktim?q6i7o@fT`Od!T7GF1P2o7apAg05(H?X03>pOceI4my%DHFcO|~ArbUCg}4|WmeR@{Szp)jrHz4MGw8>t4z+cFtKvVix0?@5fCMu3c9voNAF za;EMr@WBx(AmEk{nVSbL9N69Hx?vo3Lx$PC%fdYv-=7C zXW4~w9h3*Io>NSJe6TH`>=?Vt?0{lU>}glyK3pi7z0@b(d6kKXoNWwjJ9Ed3j@__P zzJ27oqht5I#ZcNVhHf~fvRIUU#j7&i78{$@aftSt`K`%6KK+e?*)MUST7{T`lz}pe zlxosw=6j{5pVr~n;b?aY$>u^m*C5+aKdY5&J|b^u3;$mgT-$?ufZP0kUq0J={%pTo z{|CQ(wX-lLCref;-o`~O{r_k0-J9Dul6=ws@2BX{I1b4*07{-m%qaG(gG*5|!xDu{ z()Mw9ymkR-g1u~XWBWmhb9BG^t<0>du5N%tWi9ehIG0-rcs5<%|A* zKLwVObtQF3%Fe6PK7Be%kz_|Vw#*|c&dEw=5{QIIv_OE3hh$|k-~H}KRiOYQc$yuN3RP5ctn`I6D9sgreZ|+B1hqEfS#);c@Utju+s=J z7u*!lz+!)En+!k?vtbrCrlVu$H68tYfI-o_9&5gyW#{MiiYnd*LLy#w6#BGErR|bDm@jwMEcq*>gx%>p>=UI7Z<~lEf zg~*>x+jx%fy*F41x{7PmAyXL7A(Wpn9{ukk77yvwkN)xE?^@9RKa>4w$xm)Y%+$fdZgwn6 zIC5ebMN;|}_UUilYpfnc_C5YEVLmWA918D!RGGrrZ~kbMzFx zitX9-(?45O{H&?RXW?L?{F$ucrlo)6RH7%$e6ovcx#@un^kC2Yp{W?MvAUP#ulP4q zCaQ@?jym3kheQojhm-eh&H=+pWVkAax;o&=@5Di2+x<86r-p56&DzuKn5&}DjkC>3 zk|*(Y;1d^(Rb`ZY`oxKf|IrvN<0PrzmRin<2w`zaH__AL`-^6{JVSorqPBmWEWZok z3Lj`qiCrm)HXAvj#Nrp_nZUnTUz53_3i7qS4%}&@2|R-L`hL`tJ@$sl)Dr4-N7>|n*rayE%h=_Iz%6%& zOKx4p{K(6`FvoFxdE}RcB^!TfL%lnOS}wMJmHq9)J0n-N@wX;T{zVMX`k7JReM>!12Fk-;!Z?ql@fddL0q2KcYIOg1IWopJlhq3G?QJVpHB zI)uwyh-h}KDWF+X@sU;Gg2-f%p^Bay#9BC-A$kxT&0nkqQZhXrUcV z!iq5$BhQ6*1_G=H?**YpGAZE4jfa}RN#Gr&(pNNWLy>LnVK{xY-b%`O$;^GU4(McC z%5qv#uf+|dfO~>x!fj!nL?+UVGriudd6zEnQD{;nh_I^^{_}rbfhT42?e$`xJnv*~ zbPg;ME?_dl1Dnj4N`L1J#Jv3U@0N8DxxscX7+8W1VBUR&*w;k<`EfPcyMZSS^FHt!)}t+15%N9}D?>yTDaMXAamtnD=~)h0E1ZlV6EFnX z&-!wiYrF!P@sIs~7J8VRj13{IxUtX8xVdJq$F_^!$3ic!)PQ-It zy+)qLnyhaZvB^z9QiSrls&pW%JOwgwUSObGH+YW^170+G^a$&j@`#EUi=aCUOc!L9 zGVo63?eTy5K+;5vz&-99<$MfPr9jcn;;*=@8M8FSIM!cxCo^m`<+Jy*l#?T!`lwM{ zy-TMaJx1!2a$l9g9D5W>3NbSd)zp9E*eSBPIHxgsispFFLp5+WzYMA`lbh zUl{mb){T`qpzqxVg72cXN)|)$VdqJu0byq_BuIboK%Mh=Zacm1P2mPJasP7d#Bf!t z->lK2crB2s>G!CSr71Ss-bB2VG)QlE~KxGPgt=EoPO3qRz8v+7Xa{KJFTD>9JwH#$ydp;K;l;w1C>3Z)-iK+%`h)E*Xi7+6J-| z=bMcOV^QlOpL71Mq-Vzt9I}iSb>Mz58$W*%l9pfN6Yfa4{%903=2Cxc`DShE-wd19 z_JqaHsXs#&{og2M61VyvU>0EtZ2DLtQ0jjZmI19B=ZVZHX8~>ubS>bj&{)N2oj9ku zwu3OONyZ|pN_yObpY}RyNP7A+uy-EsmF|NI^Hzd6#rN;g-}dHJopqI#wQk{BUtWJd zWw30vxwqUlXIzn#yTCAd{U8xng<)gf?%^;nSxPjk3X)L8)MQT$YcLFn6!#QIfWlQ; z1RZabApRp8HFf;rI#A?j!6_YNhYmx-)g$~$iOnpmR*Yy&)^37IlfmPQ2DVLw76Xff zX!M-|7o*A^`rsvDXj7coyMs9z^+sia2%}WCK01Vlhhsfn+Tw$HQngpfy2a`gg zNIAPUL-Go&s)!jnivu>?oiJ-0y_=q4oc>jxp|wE4F-vd!*&6<2)d%I-VEBIpRbjnO z3R}@eAc~3JMt<%ShBW(Lx8!zmRG-(sr5uV@4gKtR0mgNJ;N0bKCKULkWPghL!_sw9 zf2mz=lG=EAf3z?;>2H-m)tQK#6>@%DW_vk|EDhVTe1iygp%s%2s8&T4HBOimd`;bT zhfx=-u0-3z`zONqig<23lpcQ^$7En|T$C?O-x|gr)wZBamlBU#oVGe17gLvZbXlNE zQv_)W@&~LBLpMU&_o<)WVtl+1OM4#HC{Up;4kM@XIhTbl^m4s8EiBS2>Rini@3kJ# z+4xntzp%?0oApp8B&ULlIOb8+YgmhL)ce-ii)CBaZL@~U<`H+z8Ww*rPh;z@rp~pk zG*gSf*?QZQA)Z1UVLRVSHP9@qHfJy?7a>-*CycADx2KM?tvBG!RJCMb>25s~TFIGK z@cs3+y#U;L+e$!gy}1PF)|-96ZoRoFs@yhp`SqH?X+`T5;v5NBWD}UF0DyJ;&~L=^ z%h%q&&VZzI+w#PZb*g{A>9h!G9(H@k>)mUT0ZD57G_TY5nh(f29wb-qk%L~yZ3DJy zH*e8KJw>jzY8SLf`Q3G|`ufO`+@1zMlG~G@NXntt$CBi>3y6~3p59%c>eH}{^I%<5 zqHGn_l;9mfJRnWkU1t=P0=HdD9!Q=k<8kRV%myLhe;`IJLTx;Ap8`ktl z+S77jmSvgC<|KM=#y&AO{gt+N07WpOw5t+<9(cwWtd3tRMp;}-lF#9oe}bPsMLPa~+!>{HdSwPKeu;8uhq zPI*xnJo}D)Z6bdZ*`I~)5L(5&$kL)#IbG48o2$2Mq^1lf!PKXJzQkkhyNT~*3suGx z*@Xklw@Pl-i+7PBikG*?gvPbR z0HA>dCga!)&2n+8*_+EcZ)^IOq_J6An#=O=?v6ur8Kc>koyI-o$SU%i?l;ce2JsL` zcGMGPE5Ta^c@!t`s&%;X4AQYyXX0;PF9O-R{AvBx03192hET<;jR zji^JT@Gi{OOZ)WWhqumm6kB%#FKM->wX@4Agf)KKwz0d zA4|zfACFOGBEVJ69n7x`a4zR;IqYx(Qqy6HZGo;7)VPZ*PzCl-`n`HR z@P<)HX_=`iontweMD!X5F(zDcsju2nsLp?Lm@`*G#1q?nteoH_OT-e%nsdH54~2k~ zL{SQnnc~kt!o72P>xJmel}@val1BAo;f?O7EugHS3jB)g!PWcr9z!m>62BZJL8gT~ z6+luZmHi$WH1j6@9U9@#V}J{0ahcKzs<%iBh_}KHmQ6fUutKu?AO@f-;R$ou7n3ysJ`%;O^&U- z>o8q7-|5VGkMQ<$PMgZ1Wjn9h1i7q|F$pX~`{#zt`5k5{Gaq>Z)9!-N;F^%PWv#1n zf;WY_VXRH-UAn5QTQX!uaVj?piIsnF0!i2xcaW_=@N3H<1^B9{TBNbd103atlfft7 zh=C4uG6GInFfD%i_?Um ze|mH^GG9ozwtG7_Z!#86{aZNO`=om9XmSdjCqo+-tUa_|C&%hl4lflk2OW_Q1Zr;< zUZYu9Ngg#p08e?1Hxc)f_PWdsN`a%!l9*gt^iGja0k;3=+8$Xi7gM(a_LU7M!SGfT zmX;Sp~;)C#Lhc=e#jGHxvo0*q&2hh9U4j5)%m_#VK5%B3BBe6&ksJdH(MB>dgD$ z>}URUM-Q6xrQ9eUU59^>;f6TxRwzdS#|S@W+u^*B!!I~@j{=Xw(V zLkX{RZy93sfuV=tl??IOuoo_|{g_p4H|53fs5%(2qCV9*uS=CIok{9(;X@=_N`3-l z2QoEC^mlBOP`qf7`G~hiiKK1;wf_>aAyc;ER2930f^b!i8Bi|!n zJ8Lk)Wq0^mW-U}nW2Fd9AMz>T@H@Fc=p%NvHBkT^UG&{`x^gwc5*s6?tlK3_QMz7e7WZm zJ|MpS)#uLzAmM-B+3DwBef9ir4uRBb9PiYBfA)SBa;eEdfC}xCz}PIBhqQ{p-@<7z z^`h`5AcHMMtLC{dO1oVv?H)Ukj54SuGmak!1*AI$V_(BErX@hkLW6K-uWn;2y(`KJ zQC4(vS_#Mk32$eI%A0omS;#IRzGWC6%r2X6zW(yrvx9%nzXYYdNI`O{ecWMeVG|^g zLR>$1NzyzZ0Q}hd;_GM6yo2X7;GwXzN^+q5QiK6?7?)29_U^CWeEs>CIL6N^5M;LWxJ;b0-=$6A zNUs%Vv;HGo+Xv>b0lU4SI9V6;FM_?=wbMGSwT~!48 z#Ss#+S{!LXN_3%UeS0q{wlmF(m=%n-EaC7FyFwfcrIBY6kXh~anpvs}&qb1o^oqfgN2cLMiMXS~ zWE{gDxbks__%v70RH5Noeye;`w-LF<)uMmbh*;weHUjS;y83XD9X?2$)dBB%3$nU{ zAgg>fEyC)O)*`Gv(prSodfSD3`4(Z-YxCyYym{NULwWNp!fK1KYTa6d)fQpZvb6}S zEyC*N5muR?1kS39g_Mz5HSJUbStYH}q0{T&KM`XU{gvS`I35m@BF?Xp+rSbtux5XU zo9hkvhGv(u+*`8Z3A@~U*TP6=+2?jmdVVnq(JJ;7Ry{ek6!%bcjYnAgOa4JT5jk!r zmP}3IO3p%2z|`m8yEvXu%?l|`?&bk6W)R&d9xZ+!!UZl3P(p;OP0U5+z$vprLF&VO zm<7_GAVM*;6<_IN>X?sigKJ9@JG*~INWdBlJJ^Mwr@2X#S_gSqxLCNXAjv*86c)tJ zi3{&S_RJ#`RcGaibDFe2oPYpP&W}~?Tj4l#O7z7xiwexnCHA^ zJbv9JWQ8=9g_*&;^6*Cg0pzD>B*Q+wd4{H*AzynZ??J}7#+dhn>Lk9#j}L#RqD)S; z3&)W*j#xch*R`~bxXWlf7i`=Ewr)Dbn`pd0`vTUGIsMAf=O#<|9Wfu_ci7655 zED7VhZY9t{=3Tipxk1|clkQ)#SC!XRkgaCE@BvI$cney6(;FklVM_#w z1r#t!lp*OxY#19kh*;4b8xj-tM_qzv)ci2!Y*K$*Z~Q1T_S)EMvuS@Y1{RWTVMBSG z>P;7kis*%riHUM^FXb16++}VxDK!&c^U1=$k%hd#8_VGk2Wm_mc|zumiIW^A)2VM! z6P~^CJ|QY)BJ~-1_oH$LGtLoe+UAD zxrOG(OrF8$A@&7m1+st9yAZDv{INPt)+vMM(E}<_LRhkIYNIhQwdrlfF*e1cGxiUs z;oUHhiVXJO)c){%opwl4k9LPeQmF`5GUo{ByNZw}KS&_xI*kIc*wlx&+y@(}wW}C~ z(T9ySUMs0Dy*8Sw3q?cM)i>bMA0?Uh9p#Xp2Bcy)E%;r2ce;N<=)+lVS>U_LY|l<$ z5}|;UGamQsy^rDg*$Zzkc%OfXDUt7QGW<`R!+(3;`4qEpLjY8H2;S>gHnz(2XWh$h5&A+nYtqXTC5J%d({f72Y?AQ_P z*wN+L@#&kh-gNZIB)La`E_l$o#wm=}J9!&C5InE(UJ7UOQIHRh;M^xiqKAeLLyS@} z4gry)n~i>tVkj^|O!KhTOt90r^?WP`JWb*dE~c^J-SvNfD`1q(6li%u7aw zkwr8K#{Pe#@Quu~ehYQuX&CM3QM<%Y*v8(uMcu9AL0do4?rCD|o+P?%6LEFB5K-qW zhFH1v){pVBvn-0MBzOn)v6ih5|sGvIk+pv8ONO?MIBl}ALoCU9$P zqQNK@TM$1MZGOewHnwEAAvv2mP6-FYY3=n+ao>PY)Xy(Ae7V6m8l?VN`+JsB}rE*CfZ_@ zI14EdPz&J~H5S6G#0y|ex8uD|FaTEY+(d-J-uUJ!X{#eHZmo{k>WB;5`Z{8kMQ1Sr zO&Z6;R#Se|*S(jKKlTFp;b;_QR^XL`!E1jClPY3qRwIHEQiQ4w%5O$#eI8LyuD@Utu#hGop3KqHr;AcM6vw;QC~xNQXMP*urSryzfG zn&h7ROp|m`^b-5p*y5SCZ4f|RZ(TW3eZSNVtH+2*5G6rdyhj$&tk3qXIqE_{W^t#f z#^6pwoe5pi=(9?KHT$&bzS-HXjDhEzOjj(2SA&)LcOn#xnDH!`6_G^ww8CmyGg64> z(ttHeL#t`}M(V&g_J~IEl5!P->j!_?or67U`+!E90x&YSb4!Sc8^lR$1RZhHn21hn z*&e&W4)xFy<>A8sYp_RfGr(<=#%4Pwc^$1yD`#N^zUJzh-G-I09BH9dRn{utTS-}n zC(Co~Lw%Pl~A@cai^N>`z7Nt;>H|z;@o*;cU`@ zk$Z?Rv5GkScM+5|Zj=bUg)jpeXM5YrnnCSd7$$R28)7fiR!i1yx5YGA#jKCnjxgm>8tUz&Hus8238tTISdCA=HZpH?Y^01)sJ<(zB zZVKW?&;x11I~kmNqck)`u-3V^f+=rAUY=aN^``&jxddlAT zF?^RS-3NpIcW(}nFv&`Pernv~qKM9cKG}=rz}{+G>nzUA_0sV6Hi&;GC8EBC_h$hX zV84!a%^{W&xZi(VC8#|Uchk{rGYhv1!7Nv~*>~A=7G0u&6(2Gl*VJUaV{|3Y*9IEf z_KBT|?TKyMws~S36Wg|J+qNdjL=#MS^ZUQ+uKVGB=<3~1@7h&;&e~nwTdl=%Ln?d% z`vE_7X2Y~K*3HP&U$m#wqosF|1^>&`v~Ih!1mNk5#^l+Vk1>_BTikQQB6XkkdnfD0 z>k;0sqn>IrmMyX|s=lTbX2wtq?-ZE|NB+_Oz~uwon&$Q#k{jrAtAZm0ENa>wE2laS zO<4j@@`}QU<#g^J68lJc$t|pm1n=J$<|CyyJm*7VO+moTlUKFEKG@@PYhCXr#{zdW z+8eZnE7Zey@c?B!K*@bzK69SmVnt-d7-Oo;jpD_Ko=)pKDx2@l0C%{v&~JM~G3_%^ zf_T@n;w_l{WCwch;X`^z{66ZD63AiXYnV2LQ+7!rDeWKnXKW~hZe8vwT=1vi`RQ2q z$|{J9XMm{?A=N28&7_c&FB&f9D{3f%JrlLJn^b zk%}M>X~O&hDk7Bf3gTwovN!_{>5yb~MP3mSQz`f4EgTTf@K_9%3>jSPSP0PmLl=?3 z)_+!pD8iO2lo!QCJ#s1z`7hFGBhKOLo(Z!5WD@nf+&q_?9K(S1rAfEA(60H)AecJ&+}nd4o4^R`>pa z@FRvUbo@XN_(3@G-7PH?K%Pg*HP+Mp<0WS!91;)zA?|Fu^*pKe6m{}D zQURmk2`iq|Jhf{erKy2!8DHm-%Uwe-*}j2j{v16BUAhk;`b6w zTEzn7D&*wo{(%B{3gZa`iTOd`@qw|9by|UG<#;?d_(MrU)&rl};rR9m4QA-Pt_8Px z5DBQ3N{xlgl44WLAiuI11nyVJFlgp}u--{*dOTtrXy0NL0xzC3_=W zT4L5ylVEsRPMy{bhw~8Qj+hxTJTs~Y-GeuuBn*Xva7v{VXO$bRNK1hJ`29cSuVqr4{%B zUYoHi9fgA?1$0bhDXJ`kV5i~a_l(D~Mtc3h&&t9Xr8{xOg5=UUF(j3QLoxa0+sVdh zSc-a*7_2J&sCtVBe_AOQaJiCd!0IfLjIBwSjlt(cY^IB!i~`w7Nnhp3^nt7KWu{Mp2|*RIBanC~;;uqClx$Jluf= z*%c1d5~qAnMkb73-on$ntVO8E35P~XZ@4>i_AI=^zpI@J)~6e#h9fhB&ta&>@H8l$Q!mnXOOOt+Ok1lC8G)LOx6VmvFVbP6Bn zqI>x(Wx)B3TF}3EBC1(T>4B`Pr&uOAwn|hGb}NN3@uaAxx0AD!=%LgMiOG7tuwtp} zSce$wK`+cHxP!SjU#UrIqceDy(v^P#7JD-MH|~< z06)Kzp=^?(qayFDPk?WCqk*Pu;LW7aP2&LP7DxB)e0_wRaFK+YCFXxl;j7%v@(%cI z?DlaopBft+39yt|HmIgqraYfvOZZo+JR5EL4rVr?ecs=j z`U{;7-FwTR!GBHO0_UelNFSBdqj6Sga>pZ8tN5Bowiys6`R-{3Ut1{vAI9q-DyE$v z*<{=7_n2ck#7>EfG|E!QwOrmPSDu9;g-u-RGZ?z9opU= ziT4s(P#d_#EQiLo&LN6ys7a?flM9+NMoL)NGQ3?_bZvL-5vJQFq0>oRBd>gHo{Yn3 zkr=;|a7NwdwQqXQY)l&QcKchL>K3X^-L;29~S#+Ux<@{gKZHa(HR>)8hqEIrSy=2*+rBH+Djoxtu*Mb1JLP$=8)o*Ml;{1IE3q;l8bxmpo80mSoOszSN1;rP zZ{EY74#-b&eU(t#>&o+b=$DtnWhi6Bv2JN|sT5!g;4c~03ytQg9qmC{v`s-3$%5Xp zWuY5#>mT9dRqcr1H7zJDScQ$>+v?9{?Feo7#Q%OtdeIsmM|<~t_m(`7rj^-|BJJcFXB1&wxL>&{Yuf){9@ zPVb!VimLKc9dQ^5@<})h2ab8=>xC>5T%K2?H(DSMv&Wek<@}16S2vMj+1y55C#z<| z+(y8w^>lbHJxUA2htEsJ#Bdxa*uO1DZY}H_f}?_lSm#Y{tQ(}%*Qs9AmJmzQOwL6> zUxZz(N4X5)lqU|aZoS;FE*w0kO$9VmPrEnr7&k- z+x_xBZ(u418IuCQ2(>SNQcO*Xiefkhkcivw`?V}72sITg8@kSWw3p$@%ust6)E`#{(#A+#aGLuN-?U8SpejJ-P#RmH?s)z zXSfM@TwC=(H>8XI3{OqCSZPJN?yZQSbweV>ViPD|4~e16E4rdX(6K#&Bjc^W%U#&+ zLo^=s7WW--Bo~Uw0I{U!^VG8EmrmL;E}e`q@eg9K3cF*K) z-#C{W4K6r4Bw}Xw+e;L=Fi5F8?*V}#FNts+aRZ~dJ^Sp5OAErirpYh@R`CD^ql4L0Oc4WIP0|gcZBz@q(-+5iVUwK&Q0B^ z{>6li`)f9_f<-L3o$0aQ_X%bLlvEw!v~TgBKW%twv_D{f(e{hb(&<=&EA_cg6{O5A zMj;F>C-F_~(#!&V@m}(2t|w5?dtT0RPZ&~gI<5Z(e|_c+!P(n$dtO#p^Q&pw@T7P*tzWcKvP(8qImG2a%|r3h#{4RZ%D&YXfoTSa!CJmAqd zmM$fZ460RqRzIdHK-AH!L%w@iIMx1Vk{!Ntk4~$fJ$<$6nbHiZoXEh?LCPv^c9^mp z-c4B5Zle;^;+Ua0sV*1IB_4?xy{-JWcSZN*z;LOfy~=hf-z{lUmniL5-NBhIl*WGT z!2XqQ{~pj$P<=^pE!~}6wW_gez{1t#5jGq*rwkxA(X;b*FB@ZZZ&ji^cSu3B^;2!W-(g*zsefZk+=f+-t@=f;o+4NRx*8HQmYO+JHJv>Rb=pnpX8rY`20us>0U`f;{4LcGRnO%|_gE zUx&6E|K|KvY#X`RJoGp@+d2e#c-utpwT#?MuKtXgZ6UmOHMSuU17uAf?JA53=twSL zDZ3hdBmbkCLowX`S;Nz8{)}o(DBKN)rP;*ld&{rnYoW*$ctKOJyW?%D`9{AAG#F-@rqhj>5|C|I^u$7GQ2=NzMP%xCys8w{lfw@-bo*hr6>gF$iQA<`iME*CVgXCO1vj>}BJ7U!AAC!m z`j72<7&V>mF&{JN?f&=Adw#bp?w72IHIEt10_a1lud>>Cuq~?=i~kW5gR8#=baq;E zfa%}F8&izj_xxHB^mU*d4piOgRK_jkp#b;rICM0Jz9_{W|MQyNl~o;cXeQ~Yc07#9 zbOvOx!G)WC1=<8pkjtotZVEi^|J#PlMt@RbfyrbLh)vo18T_M&TK~%}NwohC@Gk|$ zGsqQ|lheYfZX{ao32rGa$&c zH@6svOx(VrY6ZG2wz@ZVob1aVUO~i;+_1s z;^2id@h$G0Z`xb&96*Iv-!Wpz8C>k_ZRgb!bCbw}K`ptgQV3;!Pml{r?Q)$FB77=V)Ry&c8WLpCcs0DFaK^Z6vwix5dPPZ!Zfz^ znSum(M26V-43TSKfmI{QQ&21uJAStjzB^?ExEwKSI|Mg##L>XSzYb_$Y#WZEAk1z6 zRMYm>*WR1?hYlXac*@do?FL^!nBK2Ba+FoQbPU|{oW<^z7hvrQBkra?qQuZcqV(6` ztWErVp~Tv9esfQm7D9U@^rmAqT~gI`fl0X94>>OXqd9*Vq94Kd zE_sq}D&x2Gq`<%kmm{4~!Yur}9pmBZqoGr{jV3#N&AIDB9sVDed%__ zRh~&n;2PvnJyLBaty9K)puY=v7Qrq_ZCvxKNB1RZ+PL)E=j{{GI&u)IoCR@;K{zUy zU}&ph)1V27VZN!Za`uS;bDwB=jc3qR;hmZ2k39j{9H1%x6&vV<8B7Sm98L8-(Rwh& za$W^3cp5fE{uRtn_s!t`=edBCgA(Teq}zsD0%79Y0dV!0F}V% zS4;p;G;o7n>LC6*&Os^Xh9t+MQZVVE?dYS{f1-n@@9OI#yeaRi;p_6|b?==0R7m|A z9BWBz%mq281Dg%~mAT4uZ5UvfLV76|V37U15?^2Ws(@9{WbZ&N*?1#V#4<>}taBnM zh76}}!v$N~3oiOB!*|q+On|%o;D>k0?L`Xd3eRa#l#1iK75`xz zi&(;s(lrrMSBx>0IwvOjZQ<|X6{usd4Tncp#eX5GAEefl@ohB@V_dNe!eVRCu_R|B z%W~;C20tW-YiWNvBH%IUuXJBBitry(2s! z0p40ja#Q8c((+I_Ua_@>xjjwV8d{an=&@JZ$m6#}rN$mu^?WBe6cCR#Bz<5fiAqpF znjHX&Ys3%OrnQd!KmT!V7Pk&M>y5}4XzsiynLn%6NVrCe>K3p}6)w7CdNU(z z7>(pVO6LLg$`l&oF&&w0*uMHg1_HOxq5MT77LD~7&yL0{iHGP2wLL1 z>kgile&pS+d;Tw6wDb3OxM-3=h{+t6{IlP0M@tXQ0lA9nRqN}kx}t^XE@&HH#- z+ELd#S25X7`z{lXJNljR;PigbIJ+h~JE7=wRm@ZE%_YSUgu}72pY?*A z!oPykU#3Y_fr+bZG1oV2zPgBYQ(_%Ws(#XNaxnZ%|BE zKE7GkJifL1@8#URA?ez?UjD6Vd)yPKGMahLm$7v^8KVb^8&FZ>d7Q3-#4lT}#*gSK zXh1LrxSOKop5nPOJX#wjHkqmu52hJ8mTT>fqkFNIALCA`lHQ|?riRX``|DV7!l{|m z9+I88T6E~bWtgJ2U=aQsG7K?FrSxJ9Stofu!>fTkH$tsL<%`IULrM9hyku_0gpOCG zB_(Zf^h^T&DYhF6Xraz$!aNiaE}DMP5Y%&Ttd8-zFHsUTR@k`a{y4f328bW;YnnzYfWjC;GCb?cX`Me9(q z!GXM+T!$W(4cYLMAn6A=J?85j`By#ez(*vG zm!P$n34bn<34)_$F;|rYE&|)0Rz+9u7mMzBgt(R;Ri&+rmjH7GN=7s%?3iS|5=gbI zC3!y1*!;7qq0D3yYCiOVo}36cbt9fW_(h**U(qmN0kA|Kb$b`{bDl~eSSy7OMo7|g z4w@TC9mOfe29jg5f`zx|mMPg6QRojQeJy=CMzE3c8l@|+6}R>;+M`|Fj1$l zlQ%EQl z;D@_mhtX*fAjH40haw#SDVoZp_1Q}U_f!QX@C2`~x?sa8n1K&L`JyaqJis%U;96CT z7Rv#-0VzG)c`-`K5aU#Tm{CfBTeQMSE{G+wp)N-P;vprwlJBq0=QDnq`ffG!P#ge- ziXy%H6FmqihPI~Z4*6m{m86_yNKHjOMlErkZOT43)G*dZa06h}KO_B(icvQ&kRwoz zL$JJ|4665c;kYnlxOq`y)b=tM}x2h@uUyU9L@d*H6I|NT`L|*;!g93Y**E?hi+20^ za+@!_YkYtDY7_U|4}Jo7m&Zpil~qM6;K*B0iSwtvOr0jE8Y>E4jP zC#~rqV4u>dA=wZ&%_FBGKHId;;LZlR$ozpb#-I%AEdIe|jIxdh(WLf(qy#g*XrDWp zw*Us)%e1Ef4-H#T9n|S7yl5V{siYJUz%Fix0n(R{DACoQAoLGIqDaifU^}c}AEaOxs3D%Kqz{=2Y-|sdbUyw=2Kwz8Q0|6cX;cF#xK9aX3Xy*1vvl%f-eqFkDvMW9C~*24*~l; z)m)c6V;uPljt~2GRDSA`33!VFa82%Am04zYV4S}AcKm9VU+1S<+u`k7=vq zHe==2R;%{d)e{_mS*VHIRVAr5L*6pUJrNE)gPgx!-$e(b+ceC=C@0%`pS3fM`mjgs znisaASRbka=;ffuR83I53+tgl85|ek4A^ls`dKQt;i^tGNxE84wibxu)kKt=t-bmH53{G-PYt2D?^HDax4mW>D5vc>9 zvG~T($(Tnb3MO_04`;iP?B~VK1b_Qr2%Cl-@I@3*+B! zv&QrW$mkcBL@0A2m37V-rr@6Q6z-mO1e^$e++&faRY{;nb^l%BmZ836?RK`&Zwt*L zq@~9_GFdRhei$C-wc7){GRUz>x$&rT*eG zJ$1thF?U|RnyA=_k}M4khBRqLNg_8KFAt=sbSx$~(yzc|LHm4G zw(*h;BL|?LM$3ZfzR=W-pm&lg?-l^hM5yKSX7#Hlzva`R=6~eQYhSGP<(K}l_E(#A z&DU1*|BKFiqxK(rfF$9TM_}8h!-n>k$K@BtH&54p$KO)EyXt(kDdq7})?Oza8$I69 zE0_m6+I~Ayep-RE2MIL;$3^{OVt_Pqcp3e;^F0T6(cMUjXd@T1vKz<$5IZ=Vn?1<+ zB27@#QEn=el1vwbszRmYeeH5Y@+B*Ah^2e>x0V#dGa!~l&cKeE{+44IBt0U?!D0~% zrX!eg2?4G>vt~nXk}o+3qHw_X8NJZk zuVC~!Uh@`HtN$g$+Lm#|_f$NzqmDI1FRiO5HMnAR^~UnLA1XSpLdtkBqA zOgkk&Ud#2`Wck#XBBC0)vxA=UOOY1wUO5BzLY%l5N<((S*D&ZTA{$t};75E0{?LQ{ z!w*E_Dx5pGK%XB64)>826oD{v;bcS+b}n2-=Vl^`G=QG)abAeC3j5x5+zF@C5+1pl ze@S9n&s%inw8pyH>j6Iqm8VY$uXo zu21yLjUBlMwvXJkV-RY$>0WL&@bY4}9cfpr2`VVc|K)NoAYieYH8 z>NuR?iI}(hJi$+(M>M<(dQ0_PLp*a;9q+c9-g$lK!J=_!r+GTDhIuM?Se$lL-;Nv; z&`ncVS&$N2_N2ae#;?Zy$Q@f#OQO9a_Uqn0H%+ZsRV_iCL_uv1zmM`|Fl(jYv4P5X zo!4v{xUSki4;2)u{clP9)0Tty+$2>nPrrL{@zlU*)fb4b&{8>4a+o}Yt)r**cl&-v zjTkCr4f#gmZ~tmC99ZZ^Ljg%460%U~BP1(Li6D+-x04m>*o!4B+HhoHbGVUYn6Cyj zEy{o_23sHw6m5SK4|N;}@*(y|)Duu!xuuBXb)x!kGG32Cso_6HMD5alpQ0$e@ z@|GwU^9mU87!ZX!2WzkvUMzW%9Ya>poH$>CDo$9l{ieK07i)kU_S&0TBF?j1w(!DN zOV68Zg{fqO>v2nmITSi3$*d;+p?sn;A~4?rfHuhsAsHy-&JP+hUIX$KYM0}V6sqk5 zb^rX_oBjyEw3=FaLOL9lq2BI@XyCxnuAtKVN#7BVEXN4mmFcS~@h1&+Dv8ldALVTg zb&)sJOOJt%>4x&wr9FV?D)4|ompJ+ElaUG*A%C39vkC-sS<{B#~ zMncq@)FVROBt1TuiJ{XyHBHbOarH$E$bP4^juxQrtvEHAm}@la%GHDO{`C6N)wEVM z_ZtCT*Lq$_(+2M!;Eq*sg2@=3Yx27ogOQ-3AHE~zC5n^@E++2IB>btiR5lN`kuj|H z`J$pp1>O%io@lbpW?*zw^TUFZ2p}`pIIWFrYm5LzP@KxFgs!<=V5>fq^>2mS-#5Jq> zLZ>%cc?sj0Gm@S8p_?&sPqm4xL$V?~dwWEr9$0e3|M2;zC;UsI=fS4Q{yMnLw#C1> zGy9p4;>B*8u6Zl;CkgCsa60H<=|OL#ie+&Uv;0lP#l)x>_@n{_(7OsWs!(`d z)}16>s72d^`!t2iIy4$bqp8%p7w!nD86HmdsNNdKP{VSMk7qcR?H8fNjK3&eN#4si-o)$&Xqo$21ABQRiv}HO>dI2rZ(*`aQ=`a1zzf zaJ_LO9CHs3v&e%Z?@@0$5W|iC7RU~I`BTA~cEJQ&>tSXFCsEe!30Xj|5S*`VW> zrBT(kRnZf}Uf>WMo;n!1^S3K%vYKi*I?#&Y!yNCW=vK;k-?Y6cGf;_fA45i)77wyam@;Mmvk7Ogjrm(sqk)7q(4SGn3#` z{f(P_GyZDh5UHI>c=+xh_KoW-Y$9-5+lA?F2!z0#{O=U26(Dr5n&q)l_vHyNBv)*x(Ni z+>XEeZ|sR2__#IQ+0$otjA<~8eY6MV-(|@4osQHK*IZFaBvtWh16%I2)Ncx9Vn}HI z^AEERp%j_Zp&+(cMzpCWearD-DlI`c4(ezoi{iPN-n|FaZ~2V-P8zRlzHrxMDp!Td z+hoep(U@htzd?Zs*2#|l(j(dewhvseii~dR<6opp1Jg7t!yfNkvd0-{Ry2E+1oA#} z0OFF0Siv)AS6TS?1n`GY9BP0aWI53+bujhtWQb#(PMzLt8C-2j7~t^x5@j>=FbZwn z>RnJ5v0wl2bVJx*A#C_1o{vO#X+p+Ccg*O52nm=13__r3BW1apY4+pAM(BfP$URpo zIve7IlLG9pc{kjesGzM97orAug5iS%OK_RP1U-W<(GMbIXyDlN94hF3=(7Rz*ZbAn zpMy4N=sv#7&+D~0q|c2a;QPt#){x){avmYkw+GMj;ddqQ$;R{LjM0g?=Opiw?}dWv zZKXbWXb9*a$ey_iMS$?5`;vVj2#YRC!|!(=RaJtZTol)tuN+oz>hK72Eg~eJt!%`I zx!V?`h7F^H4>#Xq@thvA5u2VnzcL*eNcWjFy{C@w&dh?)kaO@ac5POUh$)$i838FG z?Nbx0BBsosB*bxBG@o<~JXztzVwv^SSImtV?-QVHs1&nj{Dp(@PXMMuJu`HcP6xr& zfZ17POg+lf_-V;vNC3eCs2g@%RFs~EumetJOjRu#%SLcLZUyMZ`09hdF?MM!yQ-XN zRjgF>FJ^Twd1R4*r45CC~Fsjd#tOzjT@$GG+PbkajOO8tG>=BR$D?#3mMhs=g?mk>s7 zUk_c;UVBg!)?a@-|4xpUKcoWm?XW7{!gN`Jw)lT5a;{KBZqBFb6u0`HC{~8Gx<);v zN2I1r;D^@lFu_?#F~7#2T7V2UJCk?gVgNnMO{P&C4~VQ=MFe-23ZCMMe3LMaq`aa| zx1f-@Is%+TSSmPHVMs*85uk@0M9^+ex}Fh7GhA{UuQ2lxW86z{0t|~oe~b;hZ99|j z-()BE^Q;ij%AAN<_d4Sy8liwFUec=ycR@H05eCjv96?O<%{27T$}(%$Y}35%-~iD~ zLpK?tEgzmPWeANJ(Qp!J;>b-nm_1S}JTY$FkRc4C5KF)kC5o)|oc}U{r5)VD5TV6> zuNf#QSlG4ZDpFBW3PF#GRJLfzfeFT*hvw%Cl)1a8jFT9jmd9#JF7RXhxZ{VR{<*(B zSE`ip7tUi<^yfnvtvWvVRzJvv5`on`wXi;m^2B2H^Fx8C8A{NDrPs*~_iK+4l@puQxk8f`4>Un5#o-UA35@28R_H>M(C-&K1OtFXb~FUSi7==` zsz`b>i%iZszI{$Xq}p*N{ZwdaP@hM1pKz6_JC+N!VPn~nwNkx5Txhw$rNA-SB%e8Q zj0*8P5`mMuaq5t*+1}Z|^Ti&X`NrjUIKHUD*LzUsFc}t91%F49Ny9S}tQP4OFy@WJ z*ha46tIL~2g=Q-)v-q93e8&ALc$uI<8k-Arv>_d_<&zRCl!{J|l;)72@zB}`?y5u- z;ttRbOe@b8(_NqiZ_cDT34sQ}Wn;7*U{t#4yWoWqaM;Q ze{AM<2RDx)}4PB(p z9VZ}w+jOQ;hensq$$Tyk_MBOgRQ{71(fhnuO(9ZlR_TKI#ZY*6rR;seEpJf^ib#mi z$ynm}IGM z8+KL_NS&68sx|^iI>4WOK}wvs0I~0g>o5-^2>N|`aJ^B^RChhi`#Z9u1=KRB6q=L8 zG%2Fuf>CcR~@I7OqZ~?9GtFcjB3bbF*X`^{0Pr*;fG%d2{FM)i{FAj(6Y&Hc zE?%8$m|zq#TA+@hzwf&4$;7Ltwsa~Z^2ksK8V4&&G!7)%fm*LVMvpn)IcC|a;vUN$ z{4(34;c}QXUz0U+V^78CL*#}Ai=|z;s2hzWm@Ael{KR~~EBv;6BUAS;9V?i%Klv8( z*m$Kd`tgNevr+9MheY*WzrCl9lIy_B#5L#pc`MCHI)EW1^3|<)X3Ff?#07u&DmKgc z($34WpwJ2nb$mjVKOg){iOFhUC%%ikN6s$nY>F+lZ7zaTAtOr7ZNjeOUimI535ozu z4Z@WyCsFhw(uLYuoW||A@CaiAFj)oDHb&i*)>ozl2)R_L4^oB4Dgb9CGJbIp0_)gt zt&5S6guwV)r*_$u~g1n4A8TeeT3Ox25A|FtlgL=;T`}^f+qya{tHD$G46;b z&Dh??F2`Hx5nF^~nB7%t$O&i3`4G9ii{76Ov?W;m^KYP|IW^Nx z7rDP;0cKr8z1Jxs%WHdv^kyn$)ldNrL$slB;y@M(b;;m9Z-S|cz$dj`iJ`I=X&?X8 zWQ9pP`X;OmUHU*zpQ-s-e359{)oG)-!aM~WSexG#I5Wb1>&(_nvrdl^4n|68juiTp zl@xMHqYAW>KRLk@Rz}JyT&;pH{H@tlZELCQSHpdI1Nq{cG^~_y_(y9S@2VbDj6*^L zN`V6yoV0sv22AUd-OoiJ_X`f`n58h~8=t|@XKB=Gy!xgkzbGBwAKa1@PHp!n7ed!h z-~L!ya+G{A#hitW)5svlVhz9)fq8@-W;3D0&OGYE(_`PvwoYi>?j0pk8N%Q`As1=rvzOGTO4ZL@&IF^ zpAoRv%W>@;#mT%xIu0Vu>3*rRO|5r6z)86iCEi9({foH}0-X_(pK!JRS?&)}dg8{u zrzUf(u#Y#SXir7AVgm;jzAlK6%-F@=adSQJ9 zy20FnaV^zxB-Ms;Xehk?bWky~Umd8$8bz|gzEsrvX4A@|U_OB25`-6L)qWVjKrq4P zU+`+Q$CWPuQUV4n@enR7`Rv{bi4>MfWQ3MAb zCKl(iq)>xo)WR7TcGh59CjOwN(F=5)xs+E!aa~GOKX(Ge#bFhsuMfZR<(hv=;l->! zMn%%fHO*@{K#i@SN`aCH@uhS|twACRz?saL!2wYX;EhS`4~ z9wHw&l3~6nh(k?6aLC-RVxJ(cRGz<6`znc{&oE{MAVh-U`JkOCtPxan==b>Ey|W7m z9?hVQ&WHMpHu{+0lah5nNcOEgK1i!>@c`VVV7>jCSDzdsp7$%Ry= zViSl(o~G_HgKGs@BH=gc-ol5>^@iJ#KF&52T=ao(e0BsNaf{4y7If?uCA z2IpEG+*R#C-Gu3UT=NnhO)PPd^(?{(R|tWa*Gwj)LIuHb65-eziNz)<56g@tV0^FU zFenvRLu9uR(FB%NzyS0RDb=;r!N$yNp2Y#Gj)iP^BIU+$qR;vypt`pqiI7DbW)3Xo z?VaCZYEpzXE7owB-4aDV8zEZ%^g(+f6>qGFvt`Sijz(=sZ;aE9z%ao4lpK4*zRQ)R zRGrH7^Lunlrcg%0EiIdnKK3G&Qv+L(D$Xuo9#jZKJ|1@SivG@Sa~gMA*>ou|EKmn; zOQ?qH2I9q0$)3R!CleDTIrf`4_DN{)OZE5&<{Vz0AyXaCgj>bK72C&yBoKAhb9xb@ zS;WesJO4ujA9H9FjgAe8JGQDh$r(tqW=Abk`6(tz-hmAU7VeVOop+JwnvJ6* zFCel%0iAgxkhWGIpqs$V0B6RR1);Qj$AaPI8~HNUH-a2Uz-HR>{{Ok8B0L2xrb;}- z8aq3hej>djV5ly|wdorX9ngy$2oB!5DB0dh(OyS2XkcxgXf$h^rV+WJ3={mm@^8pu zcOAQ!{!I0B+YqeiM*ACmbAgpjOgvG-9oECJ)>eV6li>=ODj%(cBFKGDUqvnUDCjT* z_FS-3{#d7aYNz_oSSu0oHn^n|i$dFX@bsU}HuVtc&~-RliZ-@>wfz5Vwwzq1!ut&M zfB*lcTD`$dP>%VmI3&dH%&p|c4+4J&ii%rQUwz#x`F8S5>a6JS+sOjo=VuL#4~><> zo&P*&z;72?!RgGqe`T#7diP{UKwC*gz5c$B)`9(vMMD1V#6ttZpPso6?ouxC^(V)1 z{_a>$e@9dagdjO@O_$X*XZkV*eo*%u*>7jrkGc+eToWyq(1_USR2X<36Je#lI|(>k z9^jswZ0Az*tCoqQdfvv9KVJ?i>klb$(-2O~fynR?Gqr!vIXsBjZOhRjDVp98s0@>5 z=5j*J^iB$pD?yCQ3)Lbot%C7b=$sd0!~C&aZ{FF4ZAMpCQW#mpwI`B8Fc8d?&NepW zCWM9i#f{JLx&+%Y+}(j^8CymbMorX4!+>k6vyM&NT|(H=4=oz3lIw_u6L%A+1rjEp)|7R;VAlO z59&tVzl+P?#e8!H>i0rGBkS+kJ*#+4%{gUevx3ps}}^OH51)x}9Qp0u1^!n$kgb9WhOXx`HLZ@j`4 zJ&{o+G~QDR;2&E^8YnNr=HBA za5>;O`XXs5Ov0p-vimMCpa}246o~SmW6cz&e44{)OCN&6eH)^cOA?7WOyqlekMyzP zobXLQ_~aFSp^Tm6bAf?cLmqr0gxQ)U4MHw@ z!YwGuoYw;Z*sQtey|u_vMz|GJIk>-1Vnq_0NBg^Ftm^P0ZhB_K%w(Y;Iq>qvYJP$} z+^8nyz+{e^6f1fb`R^$KlKk?01d&FwaVRv|pjB@*uU<8bEVOcg)3lhYe|{#T2_X#B zaCw9VTS8X@e;l=kdVB=U~q4_?eEU& zpF{nCc3oD41wGX=Ri-PFT2tb9zK98(ph+ zauTl{+yY}l7)l2Zgj-kcCp)(!Ei?dcZ2!T8l$_2kXZqt@26S3_wR`iG^nD&?G)~Bt z)Z=&JAIL^1l1K1o;)J?&UY|E-cF2vv<_zfJCEW&hBbT#AYFs6PIVNeAL)oH$KTL%u0ehH7~#CEummSR|v^G31a>H;D62QEgBwrMY{ zisyIP#)yScK9ewt{5u}yq^J>T)&|uVhTp`j)ueIEgVsVDE7a2=Q5iLH;!hMY9*sTaC31n;DkpbJso4=O$14thQMB~b^X?%u;wVp6-!Lx6(9KY) zY5q-Jg5a$%ZKwK0%Pqc*V$%~jCD6rq=Y$O){*^*)1!5F!8l`jQff@J`C#3u$Yo_d| zUNQM1Uxj?;C3?m4=Pq#%mgFeK(JYYh{deVHFa&*jL8Zl|;GCX_GaVh|8AByZZ~5p~ zRs2Fzg?ye%t8j2siZ{ZBIXD~ce}6(Wip zm)zkNQ{aFW3ms`K->0%LB8C=j*N-GkyDNlEIjYNUoWfCnSU^j*GO2P^2&xt+IUda? zV_;D2$HBGQJrAyh!%-8P+~RL-QovrS6zU$DE->iv6>f7(%7D;tOeDH-?NM}&Ac3yeS>G8g)|A;$s)U8$zROmWFyPzN)NYo$mQQm{|}4mh_h$ zd~8X#o$gmno*-Cj>c1ZD0W-s8Ogr+2oJQG!cf7@UF$w+L3SUIRM9Mf5Tx5X=_P|M| z*V5LAXmX_Dy20kLDzsAA=$1lWsJIuen}4iT+Hc9aiy; zTxh4tLK?e4Kj7pf55e+vR(Of8i-7LyqxD>IVhOfJc8fe-oE^ar9u){3NhMiRJDAy( z$2aJPEQxo1N^~L+C_^{dd!DcC*c?WPw}^i5%;Pxq9WQ(;R-{f%be3H9N6gI3bSoKY zhMZ+alyjH*CWmzek{b)G5G)A$OB^WYv?Y7;7&f^&Lx&p`6S#40-mrwRoZ~34?j$fU!l+<&adza0I@0k3(9B@<^*z$!k`V;F zf+Ct&E`z$l2;*z&f*$YeL&6t!d;$JdZBm-+SUtYARTXAntff zs>6^8=v^nDX#JH@6xxT!=YzP8qne+~&|t)dM|X4}*5OC9fuWVKH5VgU7JAPf*qO$C zT@P8Rq{f}`^V3#?qrHcX52hJfZM(oSs)L*uHiqK}>oE-pw4gIq{VA?6(J_WjES;2= zs1fYs$~T=p#MMix*<9rUMmK>G_HN8%*|h(Alnyl6M&3tLSQS1V{koV11e}8v0&Z zMXs0;h)jA#OX(t~e>}}fUl5j8xpepfp>3!7q5kRjL=8hh9v-xa|IjJsF z)T*k5no23L8la}QBMk;X$LyB_Qff|r;y}xYBFMJe^uVK7DG4f3gvZ#tTVFx^KED&P z`x5ch;NIb>qfR_0{TZp&21X*PAB!$yZ&Z_lhn8&YDb9mL{HRZuwd6Iq@sFlsjFVyl19+3})9+7Yw5n!#0tYhqq0{mfg6%Gt z63#PZF&cdn=mT0nb*#f87PhWkTzDp;`tx-qSp#Fbq*OPpWC|N2=@;QTyYo8U9Mn~%z}H!UI3=v5}eoidhy?!dkZ((Z=vA5)RDLHTB;B>xYR!K7YLGs2SQiE z$38$ke9y_X3zMG3X)$TMo?6+61L#FVy~f^LKCM(5l>-C6cU_mIm*=^8(=rO2mG1Yu zQzdMvec^95^GA^)n7aC_sg-%H`SK8*-xk$#V2vLGq{Yfp^9>~{8UnhC-gR1l@|R0#E(k02bcGIZx_ohUb94osoIlQ<22@9jwFKs`OFrNQAQx?B`J^q2 zqg3v2PTRy2d({$|C$@Pvb)l({%7gj^e)wS0^>>@mw{DiMQOcScb4gg@e&f-#7NsjpIn=WSb=Y;e4 z$h8!myHLTQT_lVo@f#$#`b*!6w}GHe0cP;^36n^)coa?QYCX-~@Y*4&=YeDLOaCis zZsRsg@*yDvYHw2<$@b=2HGx|saQH`*$izdg#tp3+3fw2ds!r^-k14y2saX&;p-fjt zA!Ti386_kV-&f>g`HL&%jN-mr3HTP#JR#wLBHcqGv*=;+s0|u13b#$DEWU>ggQ|l; z(O`}nm6ftGBs0N6t3-@shSUEj}|_ z-}1)`lDXiA@yFuEUDver_XUu*PtZc{P9oy0JN5nW8!-hTQWzF7g-T5-r9Eg(xPlTe8;}_X!?+ps1Nid%LNk+t3U@wl*8W?fY zicj0(N|*J~8Q1vp4ks1(M&3-R`S?wtuiN|okSuB4WeZ)ch|~0_jxgnyj-IOi^T|1N z3FrfvNkSSJQyjB~{d!WD?tZ1K9s{oEW@s5@69{HhNO_^(%YW&Qm_sjWWF(wryaV9~ zMd?iXGnVXC2-8tCDAjRF#v7DfTiB`=mBoXE@l;Z?MQAdZh2E82Et(@Pk?cN+z~ zIV5wFYZF?D7o?k-Z7q=zPkcp*GpJ8}6F7ECvF)^-9OjVqxZy?zsd z-7dHm66HO`!2iy&s5%&PjwYc)t%81Oeu@v;AOEEPp930}jiyBt-{ z-limnQHet|M;36H6MM4BXlrlZSmA{JPH>(v?CAwKYv9SJspr|O^4g{(n0>V*+W-Hn zS8N@o1-_TF25GkSW(NG1RRR9NDjg85dO{h$yY91b#^X#f+`m0&WzD>MJk2?HNUOCxw7C9 zU1=LlGW6Cd)sR%tzY_IV$E`ViS_SP-(8&&%4bHSe5<~fRJ`ed$IV@Dr zUnZ4pF2s=U4%h#?So!b43h*DXf)jMMe~vKCLeD6J&EO)IU*3u~$Qj^uf~h#CFktu> zRpF8}fThXHe0{LLGA`fy1Jq>;ZVd6%>0Q#7+ts_tcQhEng*Cc=9EmMb-|%^4d-6tNfcG_UMMBvI|6QYn+DmBlTK;c1 zC9B8m7c7E#bRRo?ME^2EBVkiyw4zyqU0&4`xHJQD^^-p(MM= zD0A|cQ-s1*o!9EnYGE(!A^guj<;7JvlQV+F#~ZQ|A>(M10AB zhhHJy$K4|xaCB;Q{B)@?Z1JZH#=R19UQfBpEH?`P=#sCPEE~YYN_I@Kc246&a%pGn zuS7kypod3;-UJ_b_2Q9`3`Mu!G8+rSF1#Zy4QVMKK;!CPARFJ$Cr%;+r5uiymQ z`vMkl2p~_FW!;Bw{c0`y8~VC;TWvgHQAa83Wp%XJ9Tt`6RNogVG;#Mu?4qiO9ayxh znuTn?*X&4+v7cwpcbhjvHOB8n|XP}%xS3BE^HhVl1QsuG0MP4*6zK5#dWsjqn-F`LXE zsN?D9jyNpWv?-6n zD4>sHAuUJ3)95XL)&^<3b4y~>q7PWg*1ARi%{Du8>q)n{0k&-XF-%r}xWF|!N8a+A z%-+pQ?~ZVMVxe;jDwMi``b2(KgZOF6eBjsR|1c4o%Kybg5_vWvt%3hf zC!(kjdPM~d_8%uQ9b;li!FE3+wD@heh0e^ThvZ$SARuiB{T@NIz<`m*REdTG{7atx zm#6p+_8ENI*JUSMyXf&KEsVmsNea+`L}TvaXea|{tQPA>hZtpm&MSWHkNeBSfFgvdW? z8gE5dd*!||3oS| zce4?SN&DfBT+*5cQEFPUve;{>q+necj)7Ww1-ZIU7d%GOj% zHwY;|4MmCxzo>GcE4e2)OZ*myZ~cxYdD$!{3)m3ArrMFK;-XAxNs6e1dGPxz%JvA| z)fe2Y8~gb-cBHJu_-T$gPPHTEw0{xV(i?Fy7vn-qG@J#*F@+qrTRBBQ8HK zG0y|o&BPR00snFzu#5jU_wj`D={}C7?x-aqI;@=WXL*_dxeD&8rSf_^@AjqBJIWf# zo0vNBF=t<0C_ZM>KQk(H%;u4z;Y`D_r?(!=HP}d=@sI(q?zlninmP}gS$w@^-5<{Q z9% z7Y56-L8CN)l+bORQzIQ4&z~{;f9}9+1&d5cujm#;Vnp$x9O0uPWtcba5c;b$A_HRj zD{Sb@2I%z$3VFs_UD+376_;Bc(H9fb?;WW#Vx^X~YUs5L`ICs!o?HaUqka}#IcAy?9sZE+>Y^5S!BJ1m6*bv+CW{hH3p9(>`}bi+`T4`Gg} zVSX-=*s9<+3eYJ@t-r%0po8S*GnfM?HMUbCcR4L@Fawd(E&y_oWjZcg9{J|1_D$~zpW=f6sFWVREo}=yCr3!a`1t?|-c{LA zyk#7q?o`UA!02>dLg}g}gQOHkdfCIup4@j`d5``-qdAkE^L0B%vM3gVC~(gEmA|MLz{?cPGuj^##IaS1M(BQZ$H7 zJ~i{I;*<0nx;lVNrOt_NPU$o z^d}Fz={$&&D5(i1w$PBe&b03pt)_1OpSl8L>mOaQWApijp%Op&f{6Q$_JwY{$+2px z9~E|)+2b=uFJhxG7MZ~nB2gN&eVd)0ZBu?kRICPOi}Q;L2ZA04GZ03_y8Wjy*ji7L z-WJIqhEa)x*`J(mFpk2p{vn`lA@}3>Pj&@0r(D*h0v(_0hGye8{ju-bSphC)JQQ^@ zi{NICQZ%;R{w`4*R8j>H(5{0K73uyccbq!B%5gLkz)q+HMO=f>}fM)GXYUcDu^t=2>>@k%{j zM}s9dP{wOF>-4uilY_okc2slv^Xi*cM)Hk?^{kUx;cZuxi)5o$mZqs0ljr^njbl+HAcR$Bk)*rsK)6-o;|MSa&46^{T3|Xh7 zUWRCf+FjZ|Q)3wqzy=SYD$O5YkcZqReWKy~yr8Dyna}mu=UuK|YIM0^Z_cknYSeL( zg1-3d34M1`R%?QS-aILJ_T6U2iNlgRqdxOrM+ay#1_PX>+$>jJcb3WheJ{V3x>zd* zbREz_NriFc3Q_bvzKOL4^z&k!W03=#kkM@_A(6H2_ z<}|?AvnXoVjQ;9OR{FzccWswhaAn=)MP!?_Fj>$o^@o+#Mq3;mHHMncCFo*J!4)B! zhJ(rf)Y)HPZVVGXrOK|tLr!65za*ob)YyF=W?mH78u8P!ReGtoWh4G;RGgS)qY<0s zUrp0U9h?4{@$!i@1D=dvW14Fk-6~O`?>mPWY6ud|Ei_CW?wJ&8#-29zbO;PiP;4wP z)ItI(?8vxmxvgN6lIimq zmK2_ZalIUzY23!Pg`!IuIHYT6xXVL=RYh!o3Th&b+$9QPHq5!*e|7u<%qwVNoTryQ z#kz|Lo0e6Q0nIh&nfeEI-C|Cwsv{T###9N@Rk^$Qc};%+FN`^7uYBFWtLekZ+Qu1S&e?hT zMVIfx{`T!*ipRr4&dl;|==-zp0j2M4RCU7ITGa;~&N{5kovz2Cb^#>gDQfJqn6D6c zRJutWdK}+eLvVX_JF2-k}_CBZBMNf(F|gPh26X%ST>)% zrWWUYwQvgyXC4(9s!D{yP>3p`f~c1bo+1S3ZM~3;U`jvHN=UF8_2ZCPFzmgGj}n>_ znFYT!Aq^)=ij1Zum3=3c4Xe#!9>-AZa%n5Jyb|c&GdOx~yuaG@m;YW-jZ1LSK5!5_hSgn$ysa zUI^qoTd`vFxZe(uX6DB)wH)54uX;Z<-`Vyf{$B6$^kmdG#};pDcg?nw~es&DPeFA?* zhGO_Eh8@0DM;uM(Ul=$V7jL2|xMa0l>!j76CRAlK@E0N12ECZF1t?6a>-(TsqDKD7 zLMs68LrW!Frq3bBX4p#Ay>2Gp5R-Ct5Uub@Hm_Wt!Q93xEPG9Ib{3KJAxL=uh)Rx- zD$K5?>NGa2>zt zX4rDtfNMD24N?!fJTX?x7)D0#u*KQ$^y5wC8~r}y&`W`H{Rnt>sJWq|?tTLQ0y6bL z<&TOVY+Q#D`mk3k<7~xCMWuxX*r09JaKKsTv-~0VOf!W6mjwNrfGTWiu~NXL8Qyo=~8Q(&8tPhpB&N z#<|*u?$CowpKB*^5L5T?s-2+86dpN zRC%pcW{>>rBv05TLH4b6e{38MdL7(9?Lt$+UmF;wsL?#?aDqD*$AZNXqa&sRWe+$tAz1*h2 zE<@OrA;yOkK|{FLK_Kci`P|#j?w3~rjPSuNHog1#8g)n%j9q0AQ1fx4h;!fhNN^GCayBy*6ZtvW-Hd6y(s3SXN5+-`~H#ot|lU0i24+FG-sXED{&_VUHFLhO`D6+e_SC1r9k;0enr!=LU@>g zU~xD52TeXzsVMOg-s2bH1$Mq82GTAxj8=l*G^UZCSWqd8;3M4FiuK?V5XqhSq3aD` zuHT*LIH=i?rn#ye8eOev4|wUooMj=O%liqc>Y)1Z zs8#qRkF8WYP#nSY;~*BUid;Vg7?`r$$UQ zM@=fvvQwx5J)zPlghc$Klm(ow@5&I+@ zS2W+dzl9olbTB!9#lu{u6~(+SNNT{)@n|qte{OsE5}VCfRhi$VveV zc(V?|!YWfqpSk>ZV{*hpLu8gd{VTm{Ns|wtuWck=iv5D~oSI6mw_$=2Xyxqw%oSXM zu%P2qTJ^w9a*KgkBlZ2YV6AY8E*c|%s@|{~g|d_Uw*L8>HcPv=ibM?hd%m;SKpqwB z^Z1_^I6`UB!iOJ9VO4xxycVhnU&k@@On-$ut_?VTJ<0XZJQZiX&U1DjXNrEh2UC9r zlA;C-B;FvbHj(C%=9NPoQgh#hx5@$)(pl%=>LoGjf1E4u?zpzoJ3Wnx zjJD_~7)KexGi(UE=@r73=vp_$c`@;D!k-7->(7hR^;wC9iV68yT)F3(EOj%VXJIb< zCOAo}-@juN7pF)_fi&QTh8Y(p@kP=S_+vs{_Fj;en}KmoxCk6rC(vr+q^%jbu*^{rjQ241(>jI6DyY5`9w)WFL(^4fP*^(Sl$2&7-7HGdU2KiNun z;bfJaJ80P7u*5%8lhj|dyaT>crRbGu^H^!5eAm|%W(K=S5Ztcj(d7M+aVq+p2E_FH zsjx)|c3ZqIyiFlhwzNN56SJ}K4V8!zANA0@ApErnLG_^ZamYj~m)QPGCBgmz97cbKB$ktKOD0Y>2RjwQj z^w<{0b}Cl2B}bVumsue;`rN{V1{hiG@Ut+oN7jF*NIlFl460KaMA$)8Wfd{yAo$yw zHUwHFWFt=cj2298uSyqbXuIIT=HC~X5LmlXyK2}F9%k?&=3)qqv$VXvvYw^Ad)A92 zm}hZqbqU%1u)5>X1Y^QQ6t(&VjH`TbTZ1RJiI;x%@}QWN5+IDPZ%_xfbQZ zy~+-kV3%TY9>Ji{ouKVu8}_gaA7wK&!)uaHd}y#7&A=di$t;+{Izu`P##!8+nLG9p zSSelVRR&8p(=T3ov8F1^jtbk?@`P*Y9&ptMbf@Z8`duqZ1CARNKf8YSs&^b?s)4gM zsfYFI=Lk;b=_w!zc-(CW0Rdhg$sTphMsGaLev&<<&#LgQS;vJELtIE%8-q@kCiAXY zt=-(gqTH8cdvIaFFRJwo4f`v1nP1d`hWFOCn2nkHAtDK{q~kErGIV5U>tnyBe%qv) z`p}_R-dh(-vu1-D=H7qx4Mt+NF<`H}cWEP>qV0fV_|e$|b_5CQyPtEys;TPhsx<@NS6K(M=*;LbfpO_Zjb9smslLS7IlLyE}5=WYb; zU_|7H80WO6@Gto~GMZW#F+64(P7z^?#H!W@361st#d7u%g-w9zp5;5Q2o+g?V?RZ@SIWt1%?aMi;6D>z*YG~ z__i5CtGT=N@lU?dgw5XAc+B=>IyyQ?+jH>QyJU1DH` zwTy(z-pF}<&?j&HlvMTEz9iI?AebUZsNb%o73ZV77|y>t9S&D3HXm~qOXFd8bb5`< z{woHdp+zv!yEc1DyiX3`;m(8Q=o5)>rJ%!+B7c*`Cy0YoHAW2%FuH=s8c9vMR$oZXJ3)7!5>_91+SlefV z%AcrFuvR}Oir6Tcbua2P4Lp)u&6+bfW4LF-roN}l=<$1Td+9p?zQiI*7z2}RX0Sb}s`58gI?wMY&Z#a`c+$;R@ie+531EOw0oR3kR94Jvog_26|mO*I9j zFk4@}+wji{G=CVe57mwi~D?1)?HG(mM-9kEKLP79X>KdJSzB zM1|lkP|?#Kc?5h1Bu=_A$(r*lkXJ{%lE$`NOzN&lsf!x9+R$2z%We2hKpyTAGtOxk zKXTcZ{Fk~ES0j4~q(PB{q#d#9Q{DjXwpK9kHp2z3_?BOcVI!8B&TV%gZ&UsT2#2bf z4%b3A@ZbC|_jNAjU-u8+PTXK&2O1Naj$_rJU^h%T~G-ZGRw_YaEH(RPIF0$4h1__l5?+7829G-_) zwY|F9+DG;U$P~q4-g7br_-UmI`DO!)tpp(PO<)_ah(rInT4dl1K$fKj8eNPST}(@? zq;0FMyd-%Y#I>LEm4B2fWW4ejRe*U*cs10AOY7{iti;SlLd1*o96dV_gSmg;?g0lgt#D2r>CI?M0PO3yD*XF$ZACB2ZmaOF_a-y z1>Ixik-Vmlu85&}{u(WV;?$+tsqV#LM2LesRww8^= z8)>2?z~HmWrox#X6I4efhJNe9j~aOFn{zb5`xSK&O1AEWb-J_lJq5k5ngoHFBrR-P zY{yr76}C4dPqsl8$+1*kE4N;0L(e1i5xF~9K5L{?oFOQ>BMzN-#eMrAycPGIz@}$f z6fHgt(l{PkM@%L2;HI5g;>Yv$1;8o@lJ?aS=p2(~B{`>)cHs%l>TYXzBPk&VZ-X2J zJ7K#@sj_1jc*SPy?MUccyJ>97G1QD&* zuxF@kT5k5pA=vXwUOY&oLQbtTKSEGVcWb6yPR)oCe@ zRVz#gz4~J(5BP)tWO^NsCn+uj^+SX?qV(&>>t!5GfZYbBiHLML;k7h@SI)g;m`7HA*UDXF_cffU0XS>w@`5iAM0HV+UR%3{l?|?dbk?^r z8W_`ge8|q&UWJyH+0Jh~Jd!GO2yYd9_+>eElH+5Ms1Sl*2OI$7JyVxGDLI6<7t4L4fL zb$fa{QtS^AK!iE4@rph9si3k^xXcU0pa)p5$CJoqq6_O-(eE^fYb|)zuGiF*miD5q z(7-&REM-4}2>lYS53-Umt{XVy!MCOk$=lhLz1BN`oyaMqfu2_LuT)FnRvp-=LP(P8 zKNuLNYr&+PBG4CqXEtX9BFs-A?X|6f(dwEV_>DtI1(w+rvh3bam{Dl&(lF~X`kD>y z!44uJ$(*X?<|NZacPnHXmV#*h7A;#3?Bcu$G)@wvocmV}!*-P;n~>c*PS0kB8jm|W zYw+=Kav1_=%7>oqJzo$Klw%U0xv7N^6HMrhsky|Ms81YB6U_697rGakffwPBbBxfqUhOyI0nJ>*(_E(#RIiB<& z@Yg~Suulf$|LG&vf<5wRn0Tu;?riznVR-e}x@%J`0TF@;T(Y8g<}dE)CE|svU4KPs z3@&Ixb{;+KwZya`e~~JWG;L(%?(tJ*4-=lJ4st2$Z%O_2&FP9D$0;+pu!-wU9=6?` zLK!x3NIm&hnqa9+(jWS-)fPN=rd=Zn8D66G;By{>t0xq3%uq3xdMX&G7F{+ooQ;3! z$dH-k6v_K*q@euk0Msp)&dr-rV3~ zZJSkkS3T{nVGAmS+4LsmsndSS@G^{N_h+f~s%d97NcFPuLgOHWVtgyAxQ}MrZh2o7 z#Y&IEHH!PY5m;L#NQwGDYyOYF;9mx@ht?%5fD~x9e&@L9unjMap*)% zD`w_~02nU>+8Vn_1}P5ojT#-lusg98=-(epw0Om{uXEl_-)&x$Y1V#k1e?v28FJw+ z88L0o%~f2Z$sg0Fs7#*go#0Y)m9mdV2$48C{IcX@RL{Znh|cF;4LqMb#T|5YdIOJZ zD}~e}Kj8CdodVbbR5rH4mC$9wY^a_65xQ3<0B*MQc7ok<@bWJ=`Q#n4W1wF$ay@I5 zTp46vIQ^@AcxAeOd16yC4;v(OhSMbPbfA}X<7#jY6th^`je*W% z&))5}YwHrAHA~5dzy6WDUgjG;$ge96XsaeaTqpanb~WL)>$ksegi&^>TFyCw!LOO? z(8tUdWVZJ8b~3KmK|u&Z?mD8aZG%vI7H&@H5sESDcRu5#ObupX6}o}(eb@sbubr!x z`N_zIthgFcOCGX`4>u*;6Dq~@=Wsoa;^1>fbW#%yEg;E|{(s_59P`J+;0dz<7~E-< zr=k8-l(89^%@T!~q9W7l*>&xS@H(pYZtYo8O8bTgM0Ph#3r={Mab-yo$I7M^4--2K zJTR>bt}rRbHTG>@G~v6#?*7B$yp{Zx_lP^NI%MBhh|qrH3tY3@=TRe8b*tMR>4*zO zZh<;pD|t{4+}hH_jQo4-rGNwgTL9KKP2OCn`S*li`pX_@(hO?@uzcDMtm}i% zc5xVQ0`RT!E^4R5hG%auA9XlEKc-MrSkL^^Bu&C!OioXK?ePjuNLOYx`BX4*nY`L> zb7aRleAZ131})koyvNGQu;YVgm1$H$UHFnt8^*eR4+w0?uKpXA^2gS$jGTXyWtMqrgT8oNFwB?8LIQ3mDDyCw5zEiHYf)L?pMm=zH2e8+g2tlRO&ASHbzxh`x2Pob=gU& zqR|~A4R;|LgG9{1S)zFGM_(7|$?G!Ey9ac`>hR7*ow5CG1OlnT;J4u@L!%h^M}-;Y zhI$sd^KSVgY{iY1fKJgz|2smCW?WmUVHJf$!z0;&L5viQsb0uJrKFJ|+DXFY$stxA zkFlCEmZ;k3>Cm#Z!!oD~MBg#0uG&a(5NrGAm-*1GO~@@HZ!PaCSbT6&NxO=gA%sC1 zMMv0@TCxO>5O5HCGx&!YLyjP+*QZG?1Lu~p&_D$p7CaPs;C=bawIe;8iQ<5Q?Aebu zRqFHcTR|U;0dW5C#`ja-hLC*gvt=7(_=Er(2Q>++0k&WCT@Au65XRljc1?l=3x7-- zc##kIIRYK>AX}b7`PV%`1R1bofbgEH?~Mn-9?hXYc7BvLgT901850UwKNB!6kw%H- z$lTvy%N+IZwET(F}3lEa;tW##AeMA8lv%AsTs?-8STEdUy@&2 zT(}u*{75RsB^GGEj|>O+2d2TTi-Wu7`;(Vsx3kSelA;l3%_?}tCWJ6Qv3RL{vt)4471!uRlkjBNQ zVVWtJC=Ro0tC4K_uAQLPU>VX02sN*e2BT4-zKaOxcLMIe=W;85ewB>~ACYP@?A#ORlxNjD zB~;V9~*8_dU)J-u4)3zrh#bZU>Y|ECo$@2eL=Xs6Q{e;X91T zfRVG%6VkanYuUd3_VcLjg#zgxKcppVr7@zHImM#ikm@G{ky51#Lg`Nj?58y$GtQE2 z)L;PEMy0eFBnLd$-kD5I{}`j|PJp@_YMh3G4!E8yi4SEV#KfvZb&E^b+w9I^^8E=+ zay}fI3)~}hb+4G9v=5?DXqB%0cev~&U>rxvy3_Ec1k#J3uxaYsGeJ>YBHrSs{emonJ zh)a#biIPm?Xn!{OBzR<(_#6iqdRiufweay~S}H;@)gce3gT8!9s^&@WC_t2bOJntY z`lHic0Nsn)?9|S+fVVCV;VClB^4WUnm;?Tqy%@j2)Uln~KZ(m5ZHu2aE6J~-svGy4 zbQ0f^7C7EhARRXk(<6j0t|Q=NPd$`M-e?oVcXRHds#}E?;9o@P*nbD|Fs((?fD9dX zRfFH)XWC7xr^%NI<%TPsd4E*SVl|2MK^S3zY#&Ok(bmk#?9gXe7H?flQsT)~O+@NB zULfW>i;A@&PoLX*lC&+j8=ijYqzAKPiJTRc%loAoxpKMVS(A@~udI4u?{_kdEgmA7 zX?@h(+?aPgxOc5DKOF($9~WIdjW;(SA6F@#sRf`3@M&zb?)6 zaGy^evT|;x8G9w%+`HbLrZsCQl0wL-w?f4q*^=Qh1jUZ=dwjf6O#n zxl=b-aeeE)SAp4>7)qiQ_<4g6GO7eEj!;gfPcr*s!L~vwB=8De!r%I>T}uOUcJCaH`iTQ)F&5}r`AD<2CJca>^tY*>UDVBS#gRc!G<)HajCcfvyw)oy)n7x*Ttwj+`k{g(u*(Y@ z0+=)x#Q7rk9=M4Y5N26U z$a@>aK;3?V^c8j){5h>rO518tzY23TE75=+`#ncEwP*>nW*)nk+-y|9!59*~GyM@X zkvQ}d&(z)--1l2rMM`AgdlI(97C)Z=8yn4x)>+v93aB|1t;AqaypI znfs%{Ai4ti@&w10iEHv)0iF;VD&#`cIk;KY;y)4j*yMX}weIdot0@EZC6vJstbO-< zBQal?_?}?}{QQCnyrc-BMQDe}>Oo*tk%Y@qyA1?^dS4~gH#MEprK7bP zmx#o_DJKxI4UJ??Hb&AP#4+)tCMw*`idTqFurH11#f4>>wAvHYx8_DgM-@Mi2v5}lY^I&>c5SXbr<{f2~5mcBga>G1~(xfkndkAZAi`3=WOa67zjDEG;+#bd+1g zm-#F?%=R10@4juAM^4SwU&+=O95u&4P!@SC;478=DT0-->k%N9?aiQ~k->_GyAAEo ziH(v!@O;B%Av&_Rwe_nGE>%yKryw6UL(k=oR zuLmezqID-Akg$)Jxb&@pTP5nUZOvTl7Ynq!-C@%i`Ea<{6-hOsMB)!B@@phfG;MPzVn5v=@|7Cm&Wu&Bh?&$Yh43tg!F!iQ6rr) z_g78@Lh(}N<}U7*J=2iPLUNxD)58G0pjKEdSc)D{6mrp7f7`Du@J(H21T5}G7Osys zGN^D4y#ZIaY(5-4D0Hwn0)f(qR+ZY-xO`in+LwF`kFW&I?w&BikwkUYbXHWAG~eKV zwwP}d6D5EbY@;VOFbiQZZsyXs5XRh7`s&D&CU5EVCIQ#+59-{a zdOfXR>ifKl8)Puqs83PH#6AG>_W=LLJBaX_NV=BhK4`BigyX`H%?kJZ{-S~r%nWTv zO*`^>-Vo<#FR0#)CH&rwZ^5YR5s!GDt96I*%iNm9r5VBmx>HmO%Z#hgy29FTv(W*O zlM@v$SleejSIptbBVX%ZC0sC^cy7LChG?N-wRQ1(?`Ks#WVnOB`z!$t8;rm|jd*gC zbz8FE$oc)x@W6bL{_&r4O zOOf8(<(srtZob(LtR%(H{A#aQjC$?5CB%CVs;877RoqBo5f?hGQ<}-Sx(0C@^$>T= zWo)px-5`#Lc$4Os=D|rIzn|T#(i6ecfV2`a(t1+r8v41#u;;*(0#%uZo2}#tYBeq8 z8CJ*TSa^dJDgma?6GSw|)dIT*vw-?{ezJNceS!p%v^ftfHI#k9T;vM#`n?|* z4jTDoQ&eJE*DBc?eviX*zHn`YUJQvY_|*|KN!Ud#sBr((&AEYxqgVODHI-&Pwb@oB zZv`bJj{By2%oJC$td3R25sWnJx3~0rGfPZ>Fax6-RGhnN)E8rpdawV%**%3v)_&{4 zk8Pu4vt!$~ZQHJ}Ivpn+bZpzUZJQn2>M!rR{%h@heS076v#Mu~syeGV=QHMS+<$vB zAtXs49%KeXqyPHu|24R_d*23Z)!zUd-?#DqHXpA(cVqK^z3}DubUgW=<@2v)&d)2w z(VVt_DPJ41y4hNJO4e9$B~`d@|Zy$o0E-g&cPo$EHVXZ?!vFwGJb zjn`rhl2gUJi2jkqUd@58>eA%Aw00+F^ z@crE5RO>6w<0(?L)nRHRCe^$Z2k34#3eEeAVNAT%(t+bWdo1bvB~H9)9uPNfaLQ*8 zx!)2w&!v_C>xSjoiJu+x>v^9yT(HU2Ycpn-${h}x$CYO!c$acpGTk@C3=xT`y@g}q zjYn3@vSs|mAG`R*j6?WbfU8J}JMxY3oaW#yctacJmXn2N2L=G$9xFt)e2NtolZqPh zAVur(EKxlT?Z5^xXhHp_5Kw?S4RP~AcOxN{6yq#_*iEsOkx97V0Q9wsoP$w5}sJy2q@r0K-c;)T+#cf&CZ{CLB~p^<7cxT#>pO zuD0HtUr3SYtUiG&+bFk4)GwB+X?XB#MAIMAnLo&6M`zDl18aPqA*NV%Hg`DL*5B=X zsy=f4M5mOU&%koA7QmyZ(a%6FK*h#UEUGspsWj7P;`|km5>(6H`$j-|0nKgI#%;;N zZP8X&!9F})v4&fZCOILK!DM{HlF6QuG(76|73gtr@W~ZDu0`=9&f0?!8TF)2m1;5$ zmE(A!lW+M5uE_vG0j_}&7Av&IjwM=GkN$;>2X05ZdN-Wq2C&rOyKUxaaVC=~!3z|; zLAvzO(KYXZuNx7D|8BSfm0fI(WFIYlqik2O;n^Oa2=HQ;Jq4<;WC3-h4UzN~7gAQ5 zd4Wdmf9MbYv>FP}s<;cUh4C%&|J$B>bwyFS*Fcni;lFNO&!TiJWBnAqbA^H*5$cNPiEc*Aj0S;Y1i)R4;;WC7R}_ zsyL?+X`V$WsHD;qe1(b|5oId3D3i2!Cg2qLNGIs=hZ6GF@K)yD3!m&s7hXzd@}y<- z7Ph^DKS{oZGQLSS<$+4uPfZI_$mUZH~18_t=Yp@-^+)g0O`KZ zNl7y0?@v5&@^bk+TmJw62s-Vz%gLynPJ|_eE3J0`BhyhbP^h}V{P*Q3{&U_cdr(bS zqKh2GD$LpmmxT!eJmx%~icF)uXp8BC2# z=Lp-wS=2JAuN+iPL^8m>6t^zOW`dPx_Av^2({-t!N^J1=?n)^@v;;TIE+ehuN>q&f zMcBYI>(qNS0#!kb51&fRt#jLnTTfPbgSsi#x=^sC{F$S?)w()xuQvMa}8E)kGU( zTpN{(&JHLD*75K_lE6gwE-qmHp2DZ#e%|lYza4%zU$?#xc!R&xs6B%wa8lI9ulFBP zPNCF#x6Vb-3VuKWQYfo|?Ne!8i=9^N@&eu3r$1ANi<6%V(+I}I75EDd7*B)W={k?a z?_-ZcUjF8Ie#$S|d0lIiEFo*8?9U^?e}dPLdEqa?oqI6Tk-vtZvPRX==y7g^HL9@y zcm3^r;GAc14vVom8=)fl6nf-5`s8v9Dr-+&gTFNni4QCSDr&Q;`&(GoAfbwswHi-$ zT4%cWcna{X>DQ-#A296H$vJ#0;{8!j)PAtOp}5S^4Wm}zXlR)q1V6E-*a|RU89jVz zs@$g_^RMis3Y~s{E7rFvjoJN%rK4;|nU4g=O_OZq7dRB&70I*S;Ku3V<+~8R(gJ^Y z7rJzOaIath%=aweC967!pD$k>c|1H?+k6+5KmO`*(&~jGc3+jydkL}OvQ`v29_d8y z#U_AT_GfOwv{CfS*Xc?bfM{GM@Ko(=f7h;hwqgyEkBhOZ+?+44ZW2R}H}v46iK zOKu0W!1+);tS=4@nx2SZv!~%Xa;JzE304Qw*8iHa!#d_ zR_s+v5*>uX#_nFK$Yyn%d_T|5_(O-5PuNOq{2EQLI+~V$`>`RlPL-kVd%kZIk0+Z` zG*6xk)r_CogPGhXYUqcFSX^(wHv5YnTcQkd9aC8_B@@G^t#TLF-3%KlF`g!rBQH_C zFtyD+>H=_s=3D%Su57?u{)umNj5YaA(8a4mv866sGkqZdQ$U`rbLE#gRr_tjT8JG> z7_~t*$vj~km$eji;6sIA$;Q6~A)ua9xfJiLOE)uM@aRd$2k9%-Lu{}vJdE+rD~Rs! zzz!`ILca56hYuqQZBdB8fBBM`N*T3oCBUU#O{WWY`sI3jmJP}di#N?fzb|XMm({4f zpmZHcX{>uM@0Tul`$v~ZJ^z<3VH*tt@dE2pvsn)~azre&Il)lSNEVrsNR{Q^wy0K& z?gClYw^jAR1WFc#iWj=YN|n-UBwijv3$=*{pNNuffw^#Y!yhB+aGt?51I()O>m*nU zVu|{N9F$6dx6zNUYR$9?fjMA2>C>wz__sV*1B)c;MD31vlIcrdp&rYr@s2lkG`z{Q z4NhQIn$;QJR@0!|A#I4f21Yf z5dK3;G%&ts3BX^dJnqYuG!*#BqlIJ+h%;B&!g*<>qQEQ8SX=&YlEkZK*6kli5(RQ3 z;OU>*zF5*ufnz1*a9t;XKLjPv@q4R6>Gqn1hz>u@3PyoLs9qXRSfwNjM;aa3c>7e- ziWN^S-~3nJC&-B-UydM#A`CP1c%>cz;JjCTzbc9;(%kCK#aaaTtryfCKh}c1y((l2 zB`xZ#ij8d*-t}pkG??6M>T+A{LRomz<1b!!LpyF=R2D~7ki4khPRjOEW;1`s}zvl!@VJ2)Q0hkcKFrF`a{ zgrD4-`Gg#**=Wnas!Y=6`%3**ytO479%51tgCZ-8^h1u$oaDsdzg7Vdz~4H)!M}on zeh3U9fMGiXS@5d8BqKLAXD2SN0_^@OjkMzW%AyfPr~^^cqjTFy=G~qz z6LYe;mthADW(ilVG^0Rg$iBOAFA|OQ{6xqzl>s|j)Gd)uqC9ySvljyrgXGL=od(KDIFp7U;LS-nX-mkKi?CPbMs`S5Nzec7`&Ox*m@X0qjIBX_arJ z=AD-jexr$$0!Mx+cQSH6VIUc;QCMU~@yJpdgUxxT8FEINl?PiPk^XTpJ!&@Sl! zMQDF;!r!G#c_bUJIT+1Ah(8sG_5J#8;jNq~Ng_6ncgkBBd#hmaR@KmR8BeUvryK3@ z;6ey#!w7@`oQ1+<*GbQS5kSJBMDaLo1=gEdZQylAuJQSbs=}_5zKI$BVh2a2MZxeb z7U4yNGLsX;$OR~UPZgv=}}b6^QOHsYI=$XtPD0gY%R2|i0M3#}an)=#RG1&^HT)lkavA zJDw6=Jx9(YTj+O~Lpa~HoAmK<0_ZwaTfY0^8p*c>9s%>mt{Mr($9zxpP zTW>3*z=Ca0-8SIQ!;!6o=z8O-5ZJ!0npsIht9FD(>Z2-TNnacJB0ORcPVW4-P_k_2oEX%P@T{h}e2%q+Bh zqApaJ5j1`_h9nuXG-r_dKZZ!$EvdxW{5oIgi01=}qKdCYEBu}-BofjtPQ5I~(K3N~ zET!EmPVI{jtszEVcdUuiE&i7w0{m}?$c2qNZ0tv0x4zOjF&z|6W$-ck33WSq<+mH| z72V3U)ao>aCs$FOVs9v=g0sAL2~G|i%WT1_XM!NsiQ#8&Kl&jIfR)72SCdaRDtQ|x zCW<)Q=t`uK3`Rt*#xBV3ZRdnmk>l-7r7UqX5e7|WWI~GG1W>@xSKisl`MFnPg zOL)2mdr1zJjYtwQ5z`rbkbh#Yb>F^udJ8EL4^;?!+ms!CoC3_~lo($>F;gKtWIIm-Bt5s+&-drQZU9_ZzCKmukLQMaz#wDCXhnzS@o$ZtrhNWz8y=-R}yHS^^l@AZiUceX^DT#>XFjyx>|&sfo z>Pl|VUPf`27e%C(80H8iR36!vd+!`{vX3wq84Sj1Eoe$qT^@0Z$(>MN?eRk}PwBKpc#jGfBStgbikK z27GcTB>s5MM=$HNhFzsq5TMq5m_6Z~pLmxnMK$y!5OfllQ8&5~DD*Ki zciWbAWg~h()XNT)yOCL;=Ew}Q5jEu?C>};Nw(-d&U3>TgHHRm`A!XscA|Lsho~*dS z;3v1|qlFDX#SqMz&xr~^+?1xVf)=6;k9D&qw$E6yyaLVIC-mpIpj}Dm09?#{Un*t^1 zR>Jr*Of>bSNs;Xi-tFqAa8j84GwXK&m3(PE46C<=lx1zo$?(X$Oi1|LbLp-BRztw=ZU3ktvN#fzp0%ohm(3(HcFyvY?}XjZ$5aON z96&}r)`ZRFCSrQr;FAX$83b3&fJdItJb~Zx!GsC+6;J(NWT-cIgR_DqB!D_|4ZcCB zwIRz^L5hx;|CJ1YRDRehx;ou6$Tg3^f%c|6Oa2Lxf1_L7ACaSIb+g=ei+KI57|E>y zy8N8esvc8jr}BF6C!_Fd(Zh9gFtKpDArLiZ0TwjYRm@G`Cn#IE0_-I`BeQRLb-y&I zBI}w9!xWrXXwwE}s>`moi?VU%67G$nzufPnKRYj8tT!D1Xj~)DbSAbYm?DJa&*!lp z)q%9kC1E~|G!M|!ThQz!s24vk#6!(gue2A^CnI-t7K>qZrIT5a#CXC~jHmi)ba>_Yzr|BuX}}gV0(T8Ey&*hcPrS^s$k!$_QE@&DHzg zsBWIqj=u#0+*o=iODKUmzR=**hd0yKo<^pcV*7K<50nE96VLoi)tT zYUT}Do!)6>8$zXyg|d2ew&J}@mC>D9gw;YP=GwzS2MHn;!peyF8r-)-pgX{7lWtEG zcoJ} z_9a>XP4!jgf;7b_T>t04xGDD<&~xp|$nmU9d*QNO8Rl_z&lJL{7%Wy+M7GW zqhoXuk}vevHPtM|7u~#S_FL#b)M;StKhz0+u*cN=jr)B|M`aiMxr1rdayLOsa#e37 zl#^i06X5FX{90tt!8?eY{||DqF*tg1b-!5dE$6|$MqVr_UI47qaJugQX0_s3chZ=czS5yBQCiGACY{$djWwVLx;Jsm&C2Dp+NrHV_V2UowB( z2V4*q4ul?@k*xUKFafT9@W%2X$RcJ1qDkD})ucis^OqTT?=?8WJfD2cAP(0aCk>;N z$Nvnn0}E|nACd-2y@3uIwj}{h)If@O$MgCCjbH952s3p%@+;3{v5Yyuo*$-2I)DG; z*N5SBx8U=G+276hhE&XjeCDw!l!))uy4O6z2JZtF$z6O>0Pi7gzOGgfq-7$FOH0X# zT!n=XN!nKfPmR3t@Y>B*fe`o7XF?*p<`HR-X`+^7UkDr3D2GY+%Pr1T0&K|Dpx1i9 z!s>ra)P(bV-#B(t?;q<_Q|LX(+IW}k3yHb0ac#~-8U48HXS=Jz9&xztfv!zvh;m-v z#Oyx-N&P3@933Y{Q!QLvg`D_VoNe+uz-ck~(*NFcmM1BueX+@{6=Adxv|Cu&8p%c$ z%sf==;<@8V-jn#$`}70&-Ha_^vEqMHYKr>5VrVwrSRa8*5G2vRInP)O3|J;p5_$N3lRSzM!=wpK2{sbNbKHIMvXPb zwfo?cQEWmPRxh3b2N4=F0(NS^hG%J&$cuAoWgw)-GxW3`{dNMhA(MndQI&GZU4^u2 z$k6|&ROd;b`@Q4QIc*UX@3WM;>#)UkRKN~)q%Y(9AoPChKbpi0i=nk3_@Mg(qG(z# zfdE>*pTmT@qh#}{7I9plr!)JMnL>g&vM3PlG*a&`<9P*jy>(^Znms)Ys2Iw|*4O?s ziX{hR7LzRK1yTiIq3Jq{DdQnnUmor>le%dFl$phlmNc_$9O9TDe~=N&LCdXB9rl>Y z0x`7MDM;>LE=3%em-7{lc#!k3N6~XKVsR*`B1gk8@g=5e@X~MGP>Nbls%~$IbV3ln z(mVz$At6O*c0k?OVve5z=@~6ie*B!kgJ!|LKLoL00N6S-chwN#^{jw~N4pjiT4lwv zqm*ttAw#^#wPM@b{C`alwKu+gUNLsp%qeG0tYV z!4?)p0mTE}mtvAy!RDO7aMTL%3|t=!w|>!r2MN*;bJ&aciXP(B(vcAIf32T<(g z$SAeI&Z{jcN)s)0uGJ=sb3){DBe(`&+L7#4^IMEC>#brXG_WKRIM${xn%B0n7kB{& z?tfAw-I>>J@50SF&v8!{S^Q|7QA6YMBp#GP8uEAur;;+|ui5~XLskEv zBu_a0k|cT1Ox49lgUb24wo{tCC9FCj;35ag zLL9SwO1gr?1L~?E-#x3{>RJ*BP}B53!b|e>`iPY;qd$y z$-TwM?f_|MlnNKat{!rTeuTK$T?P=%$AOBd0hB*Pnag=)Shjq$hhvI>Fs*^EmS@z% zvle$jxry@GgKLa|D z#!;$Hi$V#Ejj<^->U>@eCMbUE9>!JMn&T>eDzBwMTnjz20t@#5Jv=UIwRh;LjMIfv zg0>Nq7p+t}^(tJ%9jwNdHKQBC4Ihh-I$CsBLh)e#kGp{b*c=C)=PSq7FW2mgG6TleiMw?3B(4g=??01q=piO!7(bL% zk%mYHT`+j_xI!WTjGIbu`Y@Qgv0J4g^RxQqi^7IcPe%gZb7%sNfeRn-M3nhp`K$(TrPKtY;q8ba12 zzd%wA7eOR(Sl`vNeC!HU&B8C6-nte(9cj^VGAQT7S6jqLvvz& zb+%Sqo3CUhq#CEJ-z_+QIQO1IPGOF7A1I`i#Iu?9>89A!LaW;e*DptmvcLM<5>P4*K8OT@8vvmbV{eA2s}TF`3^CU3Ud*(@)=WeguM&^d5!E$hcg@?6zK5>W4E?FY5rp+~s z_T)@E3|tjkui`V&?I^Z>c*HOrjaFnRSB@h0n?d>cA}(N<5WC3S5G@IiXBunXp@gsz z3{^sN-j5J^E$~4@QiuR`1MzArqyVi%W}}>%?W*v?E7Z;X!Clj<0w{o+eea*-(0NH6 z;-L&ACyWCdENxC}kenYb^h(@~Sx&kJdURsHcNj#}p;2<;`pQWLUD#~D!q-mnTpKif zF`3@wkhOfihDwysaADCmuMN2p`E2=n%_Y>u=E}O}krCiCI`nAEQv;(xMgdO0gHAY> z2QgIAcZTY`6&VBKZ;7n%#@n8v1pG$V`jxmA>b`Yu)^Iu-xI>#`vtM zaB8FFYcqHf$z2NJ_?87e?+XmrieUQ!g8%Bvlm(N)+h?RNLJ2%E`RlCcCuKxT^pF~$ zO5A(IiDiU+L{e{;q2dHCuK-HRTM7_u)>G~v?GwBswjg)psCQHwX2E=})_mX*)*8PV zGLVO1!C4s>u*X2XD+g-FF{}b!hO&6;k?8-t-Ejx*_1#@EZ1VQwQB#mVjK$2uQju|l zz8^AEY7Jm6pabi^TgLF!6#*l?J_f3*SOS0dhRU2yvp&!(vYlfi@&WdJUVb=`?Q{6V z;$j~{5GTLh@LfsMM!#u=z z^_EoIx80o=JfCUE*8+s#k1#!BdVMp|qD-(hO#d|qbMCZ@t;&ARqznCf>t->=7Baa- zEM%$-%`R_TV!Dw;{~i!A_;H_NNT}F5o(^C5r)jCL#Mj$alwCc=87)NaW~HgZ7n;_% z+e6`fxQSZP>I5RH>wZSLbRb$zz6hDQh8?PHiRaU+Uki3 zSo%7dMyYXNB;^tq`w*XM$=y>P0zI~R!OR~S3WouvbcBMnvJUVJX0!B`U*O*u$%1od z?@tuKFoSs@(C@9}K7+4eA%VqVf*efj@m~=V zOX6u`z^3z=k*Bm>ge}C_g@=n`NII}CV%m@cw1}ATz(pb$iap~>4pTR>y!(=HGLllq zVFN*m%L1_|MQhcEu6o~Kor3uK!(H>a>E|~n?2UvvA5L1$g)aK&TqQ7db3V~=;&D3a z&DRp9xU-Rvw(^j){5>h+%Isx?__Qd~f;hsvJOBvJl|z(Z8#%c-b)6!+IQ=I+n4>EI z`TC#U92EZ2+gpf2cuopHMtZPQ@pEA6xMCe`7?W^T{xDTaBFeT>&ztFxcG?PRXed_e28dZ;6*`aky8T(|jtYgY4H zf8Vh)l-3#4^d?cjd%u~LxI!8Z;)Zho#wSy$r80zkB&Q#runYt-J1*Y(usZ3a+Oe5j zd1KWpjv+0&?vCRcpl6@P{Fvyp0{TdKC0sz8q)P>23UifX_CQiLd7HeUty%Z{berkl zV)(z&AIaaa1g+S;R1z3CpmUT$6>;h$fMc_ej>n{wGHf-}g7bRtjoC}M3^+sshB+2- zms8~wwu&zfXk=$nV36jIjx~j4AMg|cQmNrJ_lj`rQJqP^PtzY|K^``3V8d#^2Vt*- zvwZq0#osdKe@3hMIY`I%jz2(nnD3KMbUQ(rJK%P<_h?$$iwk*Zg$cifn=7W?b+ zwTi>L9PuK15nc%-u-haK@-4*xM3X9U#v=KD6Zf=)SUIwv^|9IgBG$MLJc3}Wrw{*O z=!bzF!uu^aF_Ke=yu4U2Y?Ns_4jISbRcCQuHx70843du=9JD zUr<62zBHgCQNF22j7=sqYRZqa#@1@k70JXpl8WqPgW+H&BBFj{hs>aD_qtfv_3)@wf;FdC6>-iX*_@SRiKIaA&SAg5W5tGPFKp@hg?j z{(H($3KDv(szHjr6@*(5AZH5+HU$&aEmi|khgl<04Ckj{;TUV^t?^eAnu!TP9Y;v@ zrWV8r4TJ?Q-lpiu+(N@ub@pSv=q|yv`727oCfJHS<;eDqG-Y(|si@e?O4Bnt8QmG1 zuZCVx#*Qe_wPx_wD8lgL^$D!0Im437fg54cGpf&P2wt#0T2x3Qfarmgz%-OE>^sHy zekXAR7Uz%9a2;7}2~=S}kYpenm=|;8Zyl-VA$-~P+m0g!)Yf66O_1(NQIcrcwKr`% zdq-mRq)kpH-4nrOtesxiT7iUeaUPe<``)~_8_|> z?SdZCHll4jQhW14gGY- z&y^(mhewuI>{dlfo7@q`A*>GPjofIhCLj<=Xgxu#bdLM+0PXH325nk5nJ_GAC`~IS zidQWxB6ToBQt;CnZ!O(mzT;At;hm-^B*iI!fBWC+{AN1Q){%7b*3-k({FfrZvR?H{ zmSHw+DUlG>vzX#Gb`H|2hfcC9ozW^R1oxAZ0e|a@5QO}*)$af{+s)>+hLo%94{KZK zySEK*BGi{rz~;6=1#{7U!r+Ep^=lOk-;6%8qtxRKnv3U2)?LT#bsu(C>

K#Vur%11t88dktZ}+WW?Y@6k6d1OU7F`x`>ii^tJ-|=IaZ+7xK{B-! z$buJpSK9z4X~ys&N<%-es>0ib;CxjJGwWRhQ`8dQMFg%uZ@Vpgbw+}1+?I99i+K#( zA4Ry(3FyoVP6XL3JWNZbm3^sP7csJXz!KKo*cO z;VaUDW*$w!w5d=EFD0#!ON8PZ>fj4rA_I=}^enAV5j3HrlDLK+zM5M6&yLdVwc}>c~_!L&X3t!I;Tdc`W|0 z7LDq~CC9H#1$MxM;ONNvhSL;qL(knU5AKTl4LUwMQ0p!ZhCP#}Tk@Gh9rS;W@C^XB zhhbQ4goWB~MBAa4(MNVu88y`^7r69C6*)AtkRUT-$CD>qKS>+BZ}W~nQIV6;Av`M{ z{$ZOFyR@V!U zAI@q&qGZe+zKNG-15bXQ=@E4^aNL)H7dV^x1Dext?QTY2Zx*6h7A+!Qh3$1_f!L}N z_O)>#u91LbeRUKt);g!Jf2Y?mWm12pL9tLY-h;TG(pospGrw3|(V7fupb=az-H-NZ z*%XKbYGbUy59AzjfyHw!ugmc=X@iIQE%C${C~3PzA5Y0D`cN@4wwpRbvMvkM>*`|| z0uTlKiEmb(;OZ5<5Di$CE${oJ!wD6+_#1gF?SS2J8!SD8e*~*rkBg&`ABqPg3@F~Q zpT+P{p)U2mTVhWpHXsbdf>DxA+Y?xB@;|8aD`@YOS&$TJGg06BCITD#O%+Lr?TbX$ zMsIQY1Np6PoWn*KxuGooR7-~mL$WV^2ON{pNe8Q~4u3NYSHRr!?~H7K)DPyCYST|9 z0>;mzW08PPkUP?#4%33^)au2yGxYK5jrbsd^NgL+aPWgX+fjHHIAfB8#utL0M@S17 z4f&}sJcXdyeYaN?eBnK99h@jK{7GWDcLGHUpKjB6pFuab9d1#cZm7>IHt0_531J{tL{)ri;?^4o9JKtL!z7=>Y$7?XB)EU2*Q#i z!?lnld_`%G49-=-*2zhsTm=vP1RA0t>6uqa9sRky;lVcHXB2ssMPKtKyP2;XjrzG& z@>Sh}h;;=7tX7|Dt&jPgS4MG_TcOA?kGDO%pAw<70Qe5pXwt7d_!WM22Nzr zu&->b?cfhir>scLR_@*Y_#8jrtvNen6rq!Z2k%rq z3_?kd9dk_UYvAv#Jpm%6%%tkXV**f#;9+@>-4?y+-imGMzV2S@pKX4$W`_zH4Y#&e z6}KE>%%kgRem}+<_WNnuDxh1F_!m~(<=_Z$&IYV_ixAj#fe9c0qKXBEcibt~?|eD6 zMWh|1RkT5UfM*>L6PC_Bns)qXQM|Mp>=bS`%cW-fayftGe@DEiHJm}OU)el5NyfnN zfFqY3acNV_>g7)&s|^;B&FsWH>FHcs9 zRwE9_l+geWO6QjXa9%ig8ku9Fjgh3%@AapAn_IIs?&>d!!W;XBgQ2j_G$kLU@&q6B zmr{&`>~5Q@my@&z705YI*|(;v*Y5B#F~HlfYF*CU!gTvg?Cpohh=!hj6bFTtcJWeazM+L zn3WdUMIFv#9MrR2`H}Ts$RU5KCT8O>kfZ(Iz`mq-0#lpZg!Iub4^pIEc+JQLk$xu&?Ot+I)nLI%I~#HHqlT4 zAe%KZrr_*wAP19H^@G0{TnhbDT~T7y6}3Ti<+z^#^3u>*ZDMt8_Mrp6rJO}xAHXJN zgQ42N-_Rrt3JA&hA(01KYdH8}b5%UKVW=#{w~K?q#`_6~sm z13X9q-oC&Cw9xRxG-_mamAaI)IBoZzG?7;6!6C)@*8>$bK<@{=sM0>ux;aqOBpg(c z5#n3)cs6b=4!MH^y5r&r6RC6EscAEMYGQq3eh0F1d$pI*{DB3=pK!=p?b)j&9-lwvx7j8m1}k%LVAOE2rJ~e+#;AWjP8@oS%bh=3}L`msQ-W#evyrw4^ zMU6-yR(3*s;@UZSSnBldTMS^|=8vSmA}Wk5j_J-HWq;)ZOrQtTyp$2jvo$=Q|8MJ% z+Tl@4*|-7454w!pb@)+$i7TSvo2l)_#<)O!ai(SKD)THkS9ifXYh2;FOdCh>l{A1W)OmzS-2VDL`xY%Lc?sV_{e zPrsPO5L4`m3%~ue*Ku#aKb`=XWuVRdv~{CuwxpEkeOv(Eo*I5HxL{uTWe7jWdZ3T< zRh$*}@!C9NTUb!O*h?{4#{Si_y87(H;k%8w_r!PQSjZv2J#=)_$xyZ)_p2q>v_-S8 ztb?M0Z7m)wX9?Ze=E1V(Pazy0btJ9_g&jmmC2@L0e5k`IOlWKOMH4PVY63(>v+16C z+g#i=JVwQSd7czTzjap=`xkAHbu;=)8^CL#`DHgo8AV|vW>Ry{L5Kn0tSoGZWK&$i zBD-2pRDCdyH3vsNqtfyo7*V zlYs_`d-TW7>y^^;+fr{v_zRV-VSbe@5Y8@Jv}c_;8}4ma!$Qvsdb9Tl7>gfIkxW%P z7!44zzX{D9gb0KY3j;cNFD(HrwLkqjB< zLNx!2_;ljA?J)2!)KM`NVd?{?LZ|BTIseqjL`TnRuUDq}ZxlU%sKX@Is)uAmD(0fU zJ(butpJ=;;kh5b47ODtR{x)_4vEPeAh%B#g8H>>3PFy2q>bT=eS4DdQ+lBQIGv08R zJq#7-V~;Wt;KUCX98#K^kBke7tdi^_9HZMRMNf)sEivc!iDr}q_`wM&y#OjLK3Ew3cudy<>QpHtH;w=%jY&`%xr-$|7f1{C3}Gi$03crK~UokqZew@CdutI}XaT z4!PbT1KT4vR1s!*>4ZVa;SX{vv;8}*)kbJO?>kU^ktZgn)|5C~FEw*p#vtvt-=)`u z%(ZDPSJr^fdcH7ct}Qm$1l!b~w5EP(%iQL0H9sWfpo*EzaVbrD((#dmf#l=;2kg-d zhG{>!KCn{p`XT@7h~LYDWp)4P2m@&1%#R-D90S$rq#o!KCG(!A+!$TmwwfJ**cn`m z4g|$KKZKrnk`HKwM$5IKp_$J0s&gPh@hdrEdf8$7W8OMAOwc{yrkb*7&e@=l_#O{DD)1xtorIoj1FV+RlfdV|aQ_5Jv+ ziPr6tM9o#!W~;FsA^W^q^LyysnIaafq{wZ)25S48PGg&3PS;DcYHZ-cd5AO9hAuh5cRa>D@@Hy^~{S zM2WvW;Ix`r^Mg#Yb&01%VLlqdj(sj&*qTXAyd5SC*Ai#Zx=r1@OQE=Qres>m&HpWH zs}&+6Bf);a;G6|ElaUuKJDBXL768rPU=YOp_A8`X_`05Mj(6;s zvyTI7k-WjYf&f5!0XakcpsVKS79Y2@Pu!{c=(ZAwY%<{M6pXdvAZs%|K=rsnLmPOk z=$5uB#|ZpliMAz>k3jn4Kz}jBFw8GTEK=tp-Lt+W?4teplA1?kC%JQ(0vQFa6?ysD zBkAYxAe)^r!Ah8w|L&Sh0&jq?t>m>wdiY?HJc69%2Y|rsP*N`-QhxKy%NQvgX$q8U zVFdyba_x>m$&r%2IC|K(?A1l_d8j*%U#%_0Lw2$qxc^txP+rVQuti$TwTMp4n3mCI zeb&eb{Xp?br#izFr`k}mIA!+-lm$vBPKWEFpM#uJS*RtJC|tQYkQsgCO3iu$8|&#n&tTVH0$o|G8u9U(h1@Q)}T67Ij%S zVITSauHe_<(T#H2ZNY>Tj~k!8cx1qt5!!t|n*~~yS?^Pb7nx&`5K8dxsbb^XeUwdH z-4z}@-pmmqTjNeEY3UTv%tlQq!(GfnF7|H#6dDNoa?BmR0c)j|AkQ7`yf@lc^+*Pq z$KaA6AQ)nP2n+;9FrKY;(%+%S?a?DqOpNzKv9_f#;NLIgdN`BM4#UpVq*4YL?~%y~ z&t+RQ=p#S}R<8w`X;$xuBdtq`f9am`UJf~I3|Zh&kAZPVcH9nQ?vVNVLf$y>guc3_ z)`Nqf0vLPGcgK;g{!cj3_WA`U4rnhs>RRJoz}p%b$F>KL{ZQZV&-p2E+LSmbot4Gm zmQc%Ae&cq1bY6*zl&}06^PsaBW)XUOp}7&4Opf_~wX_{e$JS1-e6E5nB7R@bm;#$I z&S*KN0!#&t6Ha_lisrO`QHt9Ae^Cl#qkkv`2EW3?J`*WFDeyJn|DY6Pt>y6pm9yQy z6Cv%*3TAuuX5Kgl&e#x$R7{1BC^(aK^<7n9b^X#nWIX3l0yZQe6(H#Fww z`g#hz$E-Sr8^+3$Dk9o`zHmZf90boT$1t62(6_aFcX|p})7MgsfA^YEeO@<6 zXM`v*=Y#;Xr1Y*jD#~l??cCt|PN%;AEjA07QIZo{6UxcR;n=0<{cYl6{+~*-C2%ZF zP<3-sK*(tBJ4gV(+RNR`5DkO%2fpYeVs3y+ho&|{uC|l4n@XRPjN39fQ}0jT|F{Xo zf84|g@Jv&;AzAai8Mh%pDnQKwMm92*2o9}?&yN`Tq$an_uTK^#!w(MvVQ2Lm&65$% z0xuBzQJTCap){hVPgHag3RpsM3bsmV5Ha!B260+Zf&7ESfNI`5(*kJ4AuGjBjhjaD zI#YPOvaZ6;Tv(#N+U0v+qZ)1xjNc#Mx?*vNm69^R>2gXoRcAz*sUZ%>A!+FE02@)+ zYbZ<(zgOVYTc0Q)pD0J8a9%;(rP4ov-~f=^EB_574*n;Q zAmRJ}1`-T>$6^QS(~M%=om_mM7q0`KydT{@wK4g<#i`sdmU5u)BA%wo%!1a~5w|_) zUMp_e>mU^3$yDOXngUod^2de;UA=PO4Y=I91r~;A`3`0T94v)Lv z&v<)34!I5%gjcY;WBHJ!)Bmt@Tq8+`^rt%afNvmJzu_F9q}07Om~e{8FM(FwdD z`_OS*h5{okFJdPC5bhFN|6dp4ak^&{SB=oMc;jHlQ$)nW*46v z1uH?WT64Zun(D^GpZnTe(3B1PNV<@x9&kHHk7L*r+n-t|k%pWb&yH=A8zgE57#RS3 z2@c^1u&8W;DywX#zGEKPataW6S?vf`e(m^LkRdQtFMC$sXhKTzrNO%Qj_G5O57LdfOtFEq|y1 z*Kj}~JOyA!cAPXrC2kFm>v&of9kn6Z|2p~N8czY)Kg8b#S=%~->bH7}WcGJHO*?hag z0dY=$Uvlw+wm&Twv_T`y}*oZ9_Nfiqnx#5&(d zi%GH=a1l|KJ7EjMx4Cp3#oYi4IzEb*7forhXi#E{Z{*cAxOH+6LG7?Q!}ry}9(C|$ z7Bcb*srGp1nYgC$dp_@ED2JA3wK;T=z@(8Y&)p|L)=O}=h)Wo_s1yKDY|wqQxq3*zANrz($`J+iumHodC_B zsg_pmQM}Zy?{ehIe7^W1AW-({ok@TGO+eNS5{!+M2r~oRjuizTb0;h2B%eJ6xT(}q z%oAXNufckian=F8hj#G6mM3Voswu)V;^{Jc+orXl;(C4;woO#V!M{h77?q{nM5S%& z3+yEbfle@>OA!6tX<|BFbOh~Y+BGD0653+Mhtr9D-oPLnqovuB?3&JhY?g8QgQCx@ zI{xb3h+D2FszE6Kv*I(4WwQoU6;sPhy1l!pF7} z7Scaln7H@Dgze{E99%CJO48_%7F3fYRi^}pOs|HSE+n07@$T+M_{5R_Y~5 z#Jj8E41XW^E!@n(3k1b|VNm=U4m8}vZ@MsYq%g3@s787e=vwan|57Re`2X1|5p3>m zWzXoGud}_Uaa~tnzi4(!su{dMTRE4o%O(Zqih^mN?FGVHB^MU_?YMbD(l-gE>-P+H)DY7N5UPP>Dec-jzilSdmP zu@hb&unVd}MTpLF@fK1>RAvn;>ng4RivxZ_yp6!0aP742r5V=vX52(oIioi28vxRK z*yLq4M{~$|Ur4jU%?$F@pyaGLFopABvaY(Nil|oTSamy1OI9`Zj4v$Li012n?6>P% z6No6(#3CKt43@lK|Gz!RCD2)=@eiE47-C7MF<2d16=H5_6Qy1NN@G zl%#-9a}TgX#^y&b4p9G4-xzFJ?VsQo7wQLEz7<^qMV;dnCn{Z$wtsLnC(ekXQ9FU;Q<+RtR>Qk z_udB>@x(wtw5%9BGxQW~`5{p=CJq6|+Z5Kdfm9S1WoEK&)4Zg1r>A40B zzwzR^?v0r;kvgPH-3w0It>n{C9F-=C6(}a#_jmMIl|y!r7s#>H*us#oFfdya%V|UN zzESY4K&21TA|-T4SbkOR6#-5_4=GvhibpGVhcOi3O#~w`pFJ|(*=omyV@U{(I`e3_ zEV|wnmM@Ya;;U9`gLpl7;y~F}LSu+o$PfDsv~}sZtn;MtQfA?L)AhP;m!zuRF2vj` zX4lTuiG~}gMC+tAIn&ejVB?*)fc!?W|9tJFK9nJfP76UW5%GTxCjrQ8rX5XIay-8y z9$}he*^PrX`)y7c+Uc8uh2SFPoR(MAOw((jke>6KN(4g;h_m{3DO+;ZArE%EXWBL-Z!wO<{9Lg9_)z|up00DpauLC@Vv+0(2KhE2teH= ztKn7S*L)o3@cBjX9coqRTdeoHOVOAxI%VR@H^xcf)+pXRSQJ9(6mqN(8-OArDe%pB8p ziaX<7k-_N%H2Sn(F%1zHZ=S>`#qO=4$fAhRhk0A`prcBiCMA4)1OU(H%UkOJ$CZM- z7y}NKMBP(W^oZswTV45 z(cpUkyxS4BuEKq|2`quwm?5lP#K}=S^T-dB!UG0430I*iU}`} zmHVca8sAIWiT)6)=euR!XnF|eytcqX4_UveI!nXAf#3Oq$xFu3*xjlzz<9HGHmKO! z^SFV7RqMK*eCH4S4nT4+Z0RP7aOc&37rw8!&3hbBp0Ilmcg1*sbpP<=SA1@jssnjw z!y>aZt5^~QV{y11R+pta*9`$cYuJU2edqp`o4hV*S{*@73w*bQv*tn7R3Zt$jzd*TV1I+w>#KgKPRTClK z_v|7(n;zKJ$x$IO-B4lob-RUtHW(_mAR2_9;Gn~VLtwso?+y2U!^KGYF<7>G zO3(b7%B8}iV^Z8gVgKxzl&mJxVh7!hlylGmsmq?Z2EZzn(MiH8h7^b816JON=Q}2q=YbLnT&kPdFj;B$@A~gk3Ia zOLM+7Ygbm}$sB8a?>j8&y&FTl5e5*JE=ovau2f=QzF~Pq47>gZ_^h=57x?^0ng<4+ zJmfTKEC%-flV5z`!neJ67$*>D1(&yxU8THD3bhe6Wh;>1k81K$KwioEdaf}3kWC+APo8xd){8ikM3A1LeKm|Jsg-Xi*j*BZ6B6h>$JzC3NCzs1hAJAV2@Jc z;`=gx0K|Zd_xoT#$^56KAEqv|D2OPNHg2}z3UL}UBwT#YYzl&QVoYbW*|w`KqHi=( z{)R?2GJ2&V+I{9cBBt*lEfoE)(Kt#Nfs&(n5lz|}z%{o&#;%*%9_=5l8|L#NlG_3& zw@AjQgGUgxKZyf|jQPGGY}emT$4;q?GQsn%RfM3F5g$OR=fE$d+@#u5TuMz*oGldS zJU2=U3(1Kn9{X}j8-?)?JcVo2pp;KCgSx!{zANX*Vn|c9r8lpVa;6U7^DchG)-=fC zAY+R00B9`HymVhkaxfshqaXEeJ4~HWL*FGxLB&BP0y_T#dx99aS!ZvXnBs|Z{I=A0 zZ!gDL*cen9^!R)k@^jtmSFqY0Cna64Y=qRA!RF6?Bw-!aydAsv6>QrH=Ta!H&7HGU7i|@5= z$wRB%hUt1ST}gzIcMF1!yL|k$mXrZ%CRPH? z^PYn`Qrjph6BdLp!lFLG!_GjrAeuGFNF!`I-4O;fgdedGTtWDyhF*65s-a@g6t;f5 zx0ZK`3yyAzo0e5n6ZW`(sL(F0*oZnfzXPCA1(msQa(717Udu(XMM@4 zQXVcxMe@{As#v$v+maoyLH&S`YbSd4XWC@fwyP!KjzO_ZG1vHVT%jtF>`j55UpVda z-UL(RTiNijINBfr&j@yX$Yf+(iAQya#eaw&3~&Ppgs~SF7X1RVb9Z^2eNiXC&s^D);QW7mYs0a3x9%MA;e-A&w*J+-~I!M`toPEH4RPz zD+NEX$ybl{OW<%Ph0=`1dqUe>;jmY7goiStznoLOzEm6G!@?{jC0sqt!OIO#A`)E&YQ zu(PTOYtC>%M{Kw%81Br$=Ph0^4QaSFzO&+nIENjoW z6DzS-{VMDNAJAB^a5fM*%_Hg!G(09%1z0c*oPT6X5TwY!=lG$B-`~}xgQf6Q=y~kc z*#W&dqh_P)FEvQ!OU?HS#L4=_Es@GIi>@I8C_m<^-(*Tb7&oOb&}$|!oiWto54w(b zjv7gG<|RWd_Q&oe*8@j0tg%?6@8(%$ii@@{@cW<(RRq}Wx zeYN5w@4a}icVFsH{p7@%%Y^-B#LF@({GV5B{Ax{k{A#@uG}!8DP>mO3gw zWc4>TkdpCWS$sI;6*yS(rSv+>ugNcmTY0gyuONQ_qhb|n!4GT)rH=>+G2UR4x`#VT z-qjM$8lGSRB4A@U(-oRzzvJ-WHD!Qv^w3xx_9{r0)o>8102mUyyb_b_RiOb5dCI^N zb@jgozvy8LjZ<(V9`k8|OO#Akfo8SPgR%Tc+SrK+Ad!DceKV>2PgpRGNAfII#Dn@H z*WQuW>-Ir6UdwZo^wAQ{L6jBs_W!umHGVziiH5P_s4oITD&Bc?9e#Ro)=0xEa@1Z$Zdwe1v1JWtOf@c zR_NthoyD5HB5%M_@f!e$8b*U^fcUh5HKwq(YU!;Y!jG*GBjb+9Z_e|YE%nO2hj{8I z)UtAaT(`V~1(#SPg6=w0DR$KL_-LRp};PB#KTNZ1mXb2^6CbmSfscidpQ%9`bXvwu818YE{0 z8SZa>;}=~@T{L6uUD~SJ@XQo>cjv`UTS9w3h=gX%VBGiz_xJ}Eqk^<$=t_80G00_x z)rm!&`ptDxfpt?l2|8vWSjo9+Uibh$2k)4lc<^Z$09+xixbfBzSn5mUAGfDh05$=j zrPv1h^kh@f4UME@XBZxTva`d``;L>=4XQVvm3FkIt=WEGa(2k1C4&px8Z zI3@+Hx`<;&s5T^Rkcp#IdfU!GWmVcci#&g|*7TN)z2lw8bdo~5POhZx8g_nnDM_{- zCxXWn*qbbBHsbNrf(Tv7R(Z-)dCrp06~`I=1}!}seS`jy{Cv8o_aTmnROJZp3KoJ2 z!6M2Rp$DS%GF25f47;nH0%(0#i6p3%ZhO=s#;9kY_Z5HPriabeMxbP$v6xsNwP;O8 zo7m-fMfJ98C<-XT28x2GvDk8-*BrIpyp7k0vbytnYk1#UHm@IY#I#|#P_kbo^Z>nJ z|8dtAEs%(1y7&cq+}ZZT{dXU$;qNjOB~V_>hC0tuFI*>Yw$TDe0eRE+tmO%jan4qP zQJ70g>OAlWe!sktj;rDdfpO20xCa0_VB?;&XlX&PPUG+jugKH0-wO<>gd5nQY60!U zE}UnHM9=k5r;noKJd@>X9ZPQ2ZshtAPrr9$)j-C>n_>E)O8piEBGCzGy*0s8tzIWgt0$Png}xc$Ajq;QO>YoqSX?c)>*OIGz=uO4laC=oC+c8SXiFvL2~QMi_8+vXaWr(B)@o{;$p=@dy~e{^M?=5hkOg_S zxwvCDjOf`7Ag|$lV6jKB>VCTO{jeb6T4iI+vVCV_0x;3Iq^H(p1~#ER1{_K67ag6p=yJ-Bz#!**^-L{$fwE&}&?#~-*se$_41|CN26x>u} z&m+}6-c}wl%DFHSln}K4;|RObK*}sBLjoMI`igEbGD?CGW-8Rgu0k5!pr3d3d;8up zFHdoY0|0leI+vopj;{TseX1lL`j_Z2k^D~ony{r#*oM4H;d4xAzg{6k=#g{XOczX+oEf^~-O6g6(itskuKysIvJ?=FDsG`pktOKOx8h?Ap>}Ftzt^@OwG`Cw3A-U zH<4MNz4PizT}JouGOCCo7K#%vx2}6zMS$Q7nB`C%D^r(QF#;{ThpJ-R28E~+olE|V zjd(`aJ(RuJSFGA_opaxSPXJZ9C!U7&9+)cb%f{w?d0ofN^U4I=`4CNim@eelpvI}5 z>`R5XB9N|8>C}7#N12VDJVw*lA(bztKTExz!m2pzewWo59izD#mv3hrnkHplFd%-3 z6X#X}@mGNN*vG5gc{tPAj$=1pIw&PQ{?*o87wA$i6><6x*DM82+HI5h%#V=#TWqC@dbt$^lvy4M`4XHYog70seY7DQ8{ zbF2p3X6YhdPv-ShOLqqI-3o6qo?N_BAACNY|6bLX$*Q;)oM~H*uXwAq^$4k(z@G z7;DEE*8DqjlDf$TK^7pF2$Rw=f)jGmApP)i9s+!!Qem1F)B;mJouy_a;30P=jBF>H zZvOE^`}X8|hwfBx!R-ggnC(2)P@qWxwq@YHmD@<%lBG3DFFZC()df222vF&nM#8Mz z{2;HKl-^vc6KEZTc3pmCgkL+Tm)$-J{E zl3+ivS!t|!nQ{V-i{JfrO4A^C406@Yv%%x;1GPL#EsHvZlR;`Qy*_9E7JKVZDA)CQ zz`&coMyIMh2@ML2z`WGfUpt2J?l|=+$}gryry1EZ+61@0Sa~ znfmOHaqrYwWD5Xd0iofuzG}pqsF@nyLwyqgvGfgvg zF0R~`#8SP0?${khn;2jGCgs}S`zhf{KT%kQ%p=1iu@nJ>YqdxVZk6O{;(EdijA6`| zUh46;6h|LI)LqiHcDIH_Zeh6Cjlc3@Gry~H%SI^46#H`4_yojLpR(J%VI4M=4kc@JOD-t@m~=|#Ab~4aI+wu|h(?6=lH+5~8B*yka<~^IKlIax&nc=;T~NlP zqkC4o8vh>vLO{L0%;qXdxvV*qcI*}=y*_%9ge0jGWF#PS47oT3DS27hh)!Yw*IeBF z;;W}58JLmuFP5^&)|7}wiICAdmk4wXRXmp?R5HK|EMlgR8jUxWc7Nq~&08XJkI=e-ep`b=npV8` zvn&NIAEU0RrnGS#*O$qu@^`%4Z|nqq33XA~I)Tj;)%}h=VC|daD-?X%=v(rHu)%|O zdp`;YSAz@OL8CU-|F|W~^(;YLLAgBO$7F)<@xL33RPv3$jAD8Apf=QK;hba<*3Z(K zx1HsTZGTh|mZSRATBM)TTo=+Ie!T&0hN zrX(NB;-kvoOKdZ#f%EI>KO1H7NLt z3xD_stRYu{mv&g1C7fcVN5fGvzCfrxHADKec41SYjKQ)uw_sGnAQqO!{rXl1zH@oG zR`@V4My$Hy;<1)KDCVz>r1aSIl?4nx6pe*421`$>;>34|48|_z#l+efPR~e1O(Ct! z$JdF9aACXT(1gmYIvbEaVCSZegm7Ud-+$T(FHR$AY;NdQP4^i0!c_+S--A_?;N!m+ zc1>zc4w`yweeE3jfZo~};7w)|Bkh|^n`vR=yjjYu(qyDUy8gPg4=I62d^)>z#4T^m zx=7mMS+(JmliSZemZ<%1%gf9&-Y z0`ZkCTH4ldI@{_+TN4^0`H!Nl%h^RTjp6L}x9SoF*3ZDy_Xej!4n!^!jSTa(B=Mb# ze`QJkqKL_vqX#=@m{{pPcFb3;0)GdpSp_Xsk8OasIHoD&_hjUmpmbDU;kcFe8S5On zE~b~uA?t-7ze=u?u_YG~J(hH`9LC;HqaC(bZ}ABe{AIiGq**Z^p*JmQ_i8y%ZuC08 z+=gsSvJ=vih3j+S5L?-_LtLX|njlU+mwah?&(ByI(tXWJiU$^B7zrmq!hd0;1fLM! za-Q!6l~vo!JI$qdeZl!CZY3-U19k@W1KoE2gdkw~;^K6wNw5S-uQpB6DCUXL7nD#v z3OD52t>@}-X^Yx>}6bq(zO&7`2#2};FihpzjgU2N7@w8ujD>L$5nC;| zBf$^F@2Mb+m95c6HLDzFt~z_$PUcGKrjs}WxwvmS?K?>Y9!IV9On++V?jvdcGm^GZ z&l*QE9ZC)z#jnM5e<$y!<8+u-4&>aZ zO?Y?Ex^mQy(ut-7Qh5W_3?xd{jC05U9Lf73dYpMEAMq*n_>ojySzlcDJ8lpJT@%MW zSFysNF10upC4zg8YJVv8;Ln#_LXZyA|zHCbY`xG7~?8uY7Gwm7A4 zsjk*Jv*e4fzUXVRA`O2Px~xIctUq43w!`S9Ov|Z+r<^&Lh#f|^Ane7>>!x@#?!Qv- zgSEw0pVXTa+JDTaG5S%pu7xm6zJr~`l}S@E2nT=2gPG$N&G$^#tvyj@S%CxID(9#V zn2MQKiF%-x^k~tL%uz?t4|=08O!?L;{;j!YO$%CFapW?2eI)&lqo&BCJjt&Kh6e8@ zbPwIc#j;4D;MnW>@MuSE{-e5t+k&qzW-uxWfVcbfpns#8BninOL%*7TdUS(%jV|1V;;;mi3D(Tt$W<-njY~56*+c}Q9aDPPr3bm@mN`YRVXE=K zB96pBbJT+qi{Y71td)G{P~0%emLv6Uoxlbv;5ePKRdA`tuE1zxdCQp~36`lAqf=Ia zd`s$ROMgG(av8?}X(k?Gy)%lHv~X`RUKUgbP5F*`Qi^1pT*p-51HQU}sTC@^FX<wgjIQ8<5GA7(8kNHX0>cUsEbWDxxJ zC_SgCRt~uxX6%$k3sL?lu1|u zOi6D7@LRwck3jS{IpqcGUCg|0Xh3yQP=BXHPjbNKrxj#?)<;Whg-{JQQl zml3;cPrCJPOp#8`>4chEFLJkm?M>@$zs>@8c9t`MmK4S%D0 zh;(ZVFbznDso&225RcQ5IfWpl`N8j-WdxPL5*(03f1c?4eCc9CQ?qNo&IcBtbq5ee z6n&o&t)kJtk2XWIbP0+LEJv)7ApE@O?6z8mw@xr7*U7l|3<84-sOZF23zf0uw{GIM z;cLtLAc$Bgtbj8W*C}oNcY-)wX@C4KeTvb@MR}P{nLWTL`1Q8qN!bduP-Yn3i?$%D zXRIN?dni|advst<7`E{8#3#D>Iky2k=>iVgnH0@|iEU%12bDEc>0Kq;Yb^=LeVJiP zhdV7jekSP{=;dI5l(SUI#=U*_L;idYuyLtNC?X-P7WL_M>=achAE!+hskQE{V($=B>@a7Wj9Fp$L|M>bwTiL#vLX;#gF zmZP*VY{7)V=X><6sdB86Mmy9OKd-TLrewwm+FnDmWS^ycca{SmZhxwt?G?n(-d}%- zSu=x|)}UvajaL*Iih_GGLL*cg@5!a?wRafkN5;E}GT-EM2G>cOM-E_?nDQ(olKzAw zO9sX)&-z$ii4e~`Vrsa~;M`Swjhsab#!_@XqkSPOXNBy|QV2GhZJw}ePKNnC zoU^CVHkE-Q7Ihw{V}FBX(wH9?-@_(6reoadQm+wsHL+ru58I?!3D!GeRoDfxLp z^G1HY6jjqLn|E?Zzvr?tga+>nKTdkQz&TpxhF2-EZYH87XSS40#^Gv~8%pC5l5!=d# zQWL&cqKN>{#W*f5RG}%wkA?OF_+|Q@yi2A^0L^liIUf+Dj3(e2SC=RSxeNC|Cakta zsV%7%YKO_gvVUAqT`YGMNCW@1pR4!tSE*{tW;n04Fd2RZ9!E^OZU(v0adN?Xm5*yg z?m@Z|s5902v3T<@?1&Q?+m^kp$3tB+U9Xse*7{YEB+<+CtVr-UXK+5T`SfJ}#DF|cvBUXdQYIx3>^{@iCj8WsBb9YNak~U+yCOFO6 zIp1W^sDIy4WSbLwIZ32!h#Z7qH7AG&t9BDV+f2eWR#W3B_3F5_uNK_EE?#;mWx_b9 z?gFHfvYHLAaKr`&ZeP(9DD>}RuzA$0`>b0cR{|KSOqn}gpLu({pB~myCsl!e7zz`E zsetD5$=q0w^3gNh(x(+?LuK|h)8!o!{R%RBn}2hmA<;iHnLWUBjnNK)ZcIWHz_A#v zL?1A3a{WX;-p;&Eduw&k7J0BM{$0)y3$d9THu3=H*1`RJDjsn=H}W+kR?YbTEqgso6qt*Ur;|s-}?5 zpZo(rBovkE=6AOV?1~{Uchho}nMqvSl7FL@{7w=duy9&)3)Tas~7Pz`VQb}zf%o`wUmYH{Z=u%!Z5fV8HYm!XPI6$I|=4zE0cN}_C zLN!1*E>2-c-Ti{fMe^e0vy035VYK-bmkyHbyJb~NpJnJQvMl?6XD#274=T2J0e@%t zyI1@jEUTdFc$DbC=dNX6Co?*5oHp|jiKY4?nJ3M8B*mTz7u=A`HFj{CB*jG{?vfL# zTfaC$M}FsN#oXRQ=)N6LS=0}~Ware^@L*hI;bbe2Ffb2$<>HH%mTR$3@fENrfleBxQ(zJf!!dfqw)aX{XkrY@jlaO%X%jwF*$##?Yj-?YkUjJJBS) zxU5V>#yFm3!^?-y>1xZ)tLh+CUm+J7gXU2{#}#KnE=@j@)k@lIbsGl^)Xd~qySgQB zS?j>?2?Ed~))YLvAIR9b`SGn4My}slsnw2dqhNEM*P)z}4H^G`m|Dx(Tbpx35q3 z>b($47bww$zIUps-Xv$2d4A>5@b-c__s-EN(~ELf&O{%lx&s?GCQh$c8s(+31m`&s z%$bmx(B25fk6e@UQ+?wN=6?{x=jM0Lr^-oV_wE>Ny@H7kf7VTGt_|CC*E(@Ad7^B+ z30nP&ZQfO+F{{r_w>7356HogD-;CtdCt(1#dz{@*s0B}IbwDjTh;eIk92Xiy-Ld*y zRQPPCCaT6M4Jh~{lk`1~!)@2CNlHZxvi{<)TT>(OIkMJ=9k*@eG@SM-z zorBfmUGcfcOL^TsG%r+v;yN8Bd&42ca^2aKKfxU!;sTWoJ*l(bv7B(=AsX9Vb z|6yAxa@zrUJR4IG`hO;~;c5_MbIq;?a$$b3^OzTnmD4!J1`yzqZv225tGK+f(3}Ys zN;XH{`COKwAM<$bhUoNK)(W{R&UUYS`JV@G)`Wwn%v-7sUrHZFM0dP(v0Km`htR84 zKBR>FBxdVIwCx}cF1=*nadd^((_)1QAnR!axn7Pu@e zSbAJ4+k}LZ5^vNdwib3l;l>7!NqtVX6yF(0 zDM{iYG=(Ol+ah_Apk2eP6(6ibKVPTG4GChP+n|TUTA2y`pWV^+{UyD+g$21vj96yt z&b2wmS`EH5E^!1 z$I==XRU}PerJJ19C<@5UDyn0{t0Ii^_JUnkSlP;|livPx`MvuLJOw zdt5ikA}b^*g|L1!wLx@9xZy0-GPo9sMedJ13>ZJE*;~j*?Np9W{7o)k zt4S|9CTL6h37z#f`QiIyIBU<@@YeTXV}IAZvfqLHp1SLa0=-Gxw`auxJX*fQh@soQ zzDKIyQ11eQZAenDutUTHE&n5u>T{Db<*3}X?m6eC%FajzoX;@4*Ifs;?!|wr6LtV9 z(f@nz333-zFzdIVqyE+YEWb9^tA_yG=H^5 zTW2c=W2kL99t{ym8!r`RK~b4Y)H$Psw;DkWuTLyh383yY1`dQVETCV&_ZNB5ng$rb zRAr_Lq7Y@X3CIFNs_zmPX^Eb`Z4+}+3oALr-Yv`CH*e_HwcDKit$C)KR;iSqP;xtM zcF+Vy6%h$lNCDqdN74?SBnHI+-^cM(C!#)$8|xXpGCY$R;qKL#Vs0x3U@ zwy9ZHy52E(*S8?TwpQHROlX`}6h$bJ{h)HZU1XL<8`NY}b=SOY}bALZT>&nj@ zBfRm4>2+dg?Z3%;gGMXj9eftobZ$2YN$(MH0ZLmw&M$6H;2g)Jec)tOK@4*p8tv&_ zjXRaIFe1_5XPk%HfXB z2;traiRmzx?J&AK?_4~(F@N{o94zxgg=q+PEu{l_O@JJ_W=m<)$ndlp3_E~RzW_dz znOUtvnx~|(lVl9Ey?*KEmD{+$fJ23zQ+r@Y!9vCr+>C3%?8*Pr%{}= zRvt}8c0EO8qKZjuS#m$|IYjpHikn<8DbJF)l+RJ824}3i66PB>eOYWNh^>Kwxj<}W z_AbI7dk%p_dXa2U^TDRLbw3>65NhGaLt(T}ZC$UdUdZd_>V@7-I>h4WkKV5b#f0+X ztE$6v%01_1d z8EGYv7*_-};-#Uv&1Zti8WELm^QV>oMlCZ7ColgnW%ubEvVUwJ-^gu#`gqnof2q{s z^>goNZujTDi?!l1krY9qn->*yDU$5Y%A0Pwuo!19ECNho(qjI{SkV6$jz?Mmi`i4} zyZfCug`8$QyPeLP&Vaool6C|mXv%6m0qVkA*ceT=;IA#8WKDithP8E+ZCQ7Fjqw=4 zhtQX{=)0{|#ecg1iVpZ`jg+x~n>QufE&Fb1%{P8RY3p^Zb(JnFQ7)`NRdV{tn9Hb% zcAKL;iZt8Seppw;3%~?8*&ILGG3o?&N_DGoo?n5gE;~*E8$R@tX2X1NDteuyCBA{K$XFa%4?Ts=@PVdrhm~)?(C#u0Y)8&3=F?IOGhJ8 zt))bn29q{68qZTrt8G6TjTROpUo_R^>`B!Yn8FV=C(8O4a zOfj2b$dMEVW?hnPt;9UUJ9B~Tq^c7_E8dy_!qM3|OR89*;j%`0Xng^Xvg3SIH?}Ov z6OFd@AAh!XZL2-sQveD@+VHx+SGc<;@%xjjj+%8Wf*iVWfpC@R5u#H{r&bV5 zXIXNcAa#r|f{+S|d0Zjnko^@8#P?YVnpJt8;?Dh_gB+x7wHE%`6Z1dc%J0+3Y+?(Z zo2q=RxWkc&sHV`KtNfiRIR@U;Pm+HkhKYxqI5galcM*9p;=iV_hkw2FVgro-n z4rS9*yMLyT5TNtMEE^5c860CA9tD!TPO}5C(zbT-5;?>B81t!nY_D*4}FT#n_(9==tvR-Dm9w_DBLChjA$&^Ygp0G`x_X-y)ph zGk^K-bNTOQ(Qh7aM#u0!?tk$=9&h$>6P=}e)~oaPTE%8LDiK`P z%N@2PX^Lph($ceSn(|I`L!OvPe8r~Kyl4{6Z6bbeUdUQZ|hz3_9bmF@H%F zHJdvH0mVZSI6|bV*l4$s3TUEMP3YY-I(knV$you;$V9DK{*StFKoGo~L zLsGhNbxv|FS(2&fCO)oQ^e%6rJUU+xTx;E=TuBR$0Hv6^r$e@cu4Uh_BPT*mj(J(% z&ZnNo$c`CU5smxDCbu<4(wY?Lp?_L*5lr9)sjrQE{>3KbmFMm9%31{t{;!veY7fCe z+W%tPuF?)gf6XzVdYy3(dQj1@YYC zRgtBJFH#&!`rY#Ox)aaA_bcJM@}E^^*}N? zJPX41qrc=?Uc6udo6DM*`|Zx*3V#H4Gjbr|>@DoU*89;B*6?D#yJx=eoKqRRe$MQV>i7`C^##M)bxU0>qe?>`%4LxVP`pxs7Z9KJ*}H4 zdB2fK=Cevhh0*Le8BCFN;zw9@ntq4|QMTALZG^2|UJ?R@4e;yLs4SG6bpbsHc!R{s zBU(4L>i&MW{%HPF+q4>w(1?v7ZMdjx=N%9|yEQdpaY@K!3UB&2Hh-!93_-07&St}_q*7N_L3w9zZATz)U|E@w zNGt8euyZw~p^YCqkW08mE#HwqN8xCUkUx2-FnfH*pXa{pfKJH5X%^pIz zfs&+>L~X}q=K-WMe}C@_=1QFdwhulTTu`V)gCw`=2n3pB3Oh)vj+7}F5j-iabRDp2 z*@$pmnjM=K>LWnmOnWC4V71;Cn_AYzI_B(6>t-PHDpvifqp-<%ta*ueUD=YCq`tCQ z%0p34^nSCdsLw4?Q}v>4_1Z*LG9EL>vl=x@|L9QEU;Eg~`hQW~gtxF^w^2)97(S%fZ z%EAN$gs;k^@D}_V(=KjpRW-VwIF+AbAWRtiG_? zn&W18?zkDun=)dL!Y7WSfdUB$(c&gAMv`!%cn3HmgV~)s|hrM)sLgM;rqFnkLNA6wvySYnl$*(tqz%`C7A$PgOS7F*-ti+w28A@7a0b)7buc!$k%&tbwDcUV3Go7+)m2 zZB+=vQgMFZYJIhsZN|@(I(~|m(;nI{5e@N>5FBWAPy}$G{WG6s@r~<`Z_2}Q3=C)Z z4M-VRCx2DmZVLz%02lR9TdOSE`|%_?NXskqkL0srsD;(*Xa>u`L-?^pbg1siBu1NA zVjWY-dyo!n!3~enOLbT{80Y*{uo9;E4Vx4=E|QEZHXw}Zt#(^2DsU6ivW z%A4i27Gt~C`$b~B&1ca~%$6MDU48-Xr|I-XbeNU1!r&s$cZbrBBG_xzAyKdp5|--p z%If9kkj2gNMYNT?uRaG|bnE?jiT}we_%BEx@O3&&E0mkF^Q5qL6@H-ubmoVkCVYZo zx_`-nLS(WbsxloYVL2aU>mn%-m~)OltD_pFrD+I>NP5azU@z@s$p&>6d3|@3Tw%&p|vMK7)_J1|~9ib`7O@J6ri5TbPCyKrZWXIwOm1y?N z68n%x*$>xP#nhvNO)a*zPq9{6`gd4s_(LuRpt}-eTQn<-YH~};!p!#GBnBNZI{fBD z8uB8~kAR8#SEA4b^imodZlF$PGd*MDB?P{z99>4hjFB#FI

SBT;_|YgMTAL_wl-~3 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 diff --git a/schema/schema.graphql b/schema/schema.graphql index b528d90862..cb60245e5b 100644 --- a/schema/schema.graphql +++ b/schema/schema.graphql @@ -52,13 +52,56 @@ type RootQueryType { metric(query: String!, offset: Int, step: String, clusterId: ID): [MetricResponse] logAggregation( - serviceId: ID, clusterId: ID, query: String, time: LogTimeRange, limit: Int, operator: LogQueryOperator, facets: [LogFacetInput] + serviceId: ID + + clusterId: ID + + query: String + + time: LogTimeRange + + limit: Int + + operator: LogQueryOperator + + facets: [LogFacetInput] + + "only logs from pods on this node" + node: String ): [LogLine] - logLabels(serviceId: ID, clusterId: ID, query: String, time: LogTimeRange, field: String!): [LogFacetDetail] + logLabels( + serviceId: ID + + clusterId: ID + + query: String + + time: LogTimeRange + + field: String! + + "only logs from pods on this node" + node: String + ): [LogFacetDetail] logAggregationBuckets( - serviceId: ID, clusterId: ID, query: String, time: LogTimeRange, aggregation: LogAggregationInput, operator: LogQueryOperator, facets: [LogFacetInput] + serviceId: ID + + clusterId: ID + + query: String + + time: LogTimeRange + + aggregation: LogAggregationInput + + operator: LogQueryOperator + + facets: [LogFacetInput] + + "only logs from pods on this node" + node: String ): [LogAggregationBucket] logs(query: String!, start: Long, end: Long, limit: Int!, clusterId: ID): [LogStream] @@ -13956,8 +13999,8 @@ type ClusterUsageMetrics { } """ -Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node through -node_uname_info's nodename), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken +Prometheus timeseries for a single node. Host fields come from node-exporter (matched to the node by an +`instance`, `nodename` or `node` label, or node_uname_info), the rest from cAdvisor and kube-state-metrics. Fields marked grouped are broken out by the `groupBy` argument and labeled by `namespace` (and `pod`) accordingly; the rest are node-wide. """ type NodeUsageMetrics { diff --git a/test/console/deployments/observability/metrics_test.exs b/test/console/deployments/observability/metrics_test.exs index 3179058058..b8d65225bf 100644 --- a/test/console/deployments/observability/metrics_test.exs +++ b/test/console/deployments/observability/metrics_test.exs @@ -3,6 +3,9 @@ defmodule Console.Deployments.Observability.MetricsTest do alias Console.Deployments.Observability.Metrics alias Prometheus.Client + # label_replace's "$1" is a regex capture reference rather than a template variable + @unsubstituted ~r/\$(\{|[A-Za-z_])/ + describe "request/limit queries" do test "they dedupe kube-state-metrics series per container before summing" do for scope <- [:cluster, :component, :service, :pod], @@ -54,7 +57,7 @@ defmodule Console.Deployments.Observability.MetricsTest do order <- [vars, Enum.reverse(vars)], {key, query} <- Metrics.queries(scope) do result = Client.variable_subst(query, order) - refute result =~ "$", "#{scope}.#{key} left a variable unsubstituted: #{result}" + refute result =~ @unsubstituted, "#{scope}.#{key} left a variable unsubstituted: #{result}" end result = Client.variable_subst(Map.new(Metrics.queries(:pod))[:memory], Enum.reverse(vars)) @@ -62,6 +65,30 @@ defmodule Console.Deployments.Observability.MetricsTest do end end + describe "cluster and node summary queries" do + test "cluster cpu and memory fall back to kubelet resource metrics without node-exporter" do + cluster = Map.new(Metrics.queries(:cluster)) + + assert cluster[:cpu] =~ ~s|(1 - avg(irate(node_cpu_seconds_total{mode="idle",cluster="${cluster}"}[${rate}]))) or (| + assert cluster[:cpu] =~ + ~s|sum(max by (node) (rate(node_cpu_usage_seconds_total{cluster="${cluster}"}[${rate}]))) / sum(max by (node) (kube_node_status_capacity{resource="cpu",unit="core",cluster="${cluster}"}))| + assert cluster[:memory] =~ + ~s|) or (sum(max by (node) (node_memory_working_set_bytes{cluster="${cluster}"})) / sum(max by (node) (kube_node_status_capacity{resource="memory",unit="byte",cluster="${cluster}"})))| + end + + test "node queries are cluster scoped and fall back to node capacity for machine_* series" do + node = Map.new(Metrics.queries(:node)) + sel = ~s|cluster="${cluster}",node="${instance}"| + + for {key, query} <- node, do: assert(query =~ sel, "node.#{key} isn't cluster and node scoped: #{query}") + + assert node[:cpu] =~ + ~s|/ (max(machine_cpu_cores{#{sel}}) or max(kube_node_status_capacity{resource="cpu",unit="core",#{sel}}))| + assert node[:memory] =~ + ~s|/ (max(machine_memory_bytes{#{sel}}) or max(kube_node_status_capacity{resource="memory",unit="byte",#{sel}}))| + end + end + describe "cluster usage queries" do @groupings [cluster: "by ()", namespace: "by (namespace)", node: "by (node)"] @@ -123,10 +150,16 @@ defmodule Console.Deployments.Observability.MetricsTest do assert query =~ ~s|cluster="${cluster}"|, "#{grouping}.#{key} isn't cluster scoped: #{query}" assert query =~ ~s|node="${node}"| or query =~ ~s|nodename="${node}"|, "#{grouping}.#{key} isn't node scoped: #{query}" - refute Client.variable_subst(query, vars) =~ "$", "#{grouping}.#{key} left a variable unsubstituted" + refute Client.variable_subst(query, vars) =~ @unsubstituted, "#{grouping}.#{key} left a variable unsubstituted" end end + test "label_replace's capture reference survives substitution" do + query = Keyword.fetch!(Metrics.queries(:node_usage, :node), :cpu_utilization) + assert Client.variable_subst(query, cluster: "c", node: "n", rate: "5m") =~ + ~s|label_replace(node_cpu_seconds_total{mode="idle",cluster="c"}, "internal_ip", "$1", "instance", "(.+):[0-9]+")| + end + test "pod usage is grouped while host and capacity series stay node-wide" do for {grouping, by} <- [node: "by ()", namespace: "by (namespace)", pod: "by (namespace, pod)"] do queries = Metrics.queries(:node_usage, grouping) @@ -140,15 +173,34 @@ defmodule Console.Deployments.Observability.MetricsTest do end end - test "node-exporter series are matched to the node through node_uname_info" do + test "node-exporter series are matched on every common node labeling" do node = Map.new(Metrics.queries(:node_usage, :node)) - for key <- @host_keys do - assert node[key] =~ ~s|group_left () max by (instance) (node_uname_info{cluster="${cluster}",nodename="${node}"})|, - "node_usage.#{key} isn't joined to node_uname_info" + for key <- @host_keys, matcher <- [~s|instance="${node}"|, ~s|nodename="${node}"|, ~s|,node="${node}"|] do + assert node[key] =~ "and on (instance) max by (instance) (", "node_usage.#{key} isn't matched by instance" + assert node[key] =~ matcher, "node_usage.#{key} doesn't try #{matcher}" + assert node[key] =~ ~s|node_uname_info{cluster="${cluster}",nodename="${node}"}|, + "node_usage.#{key} doesn't fall back to node_uname_info" + assert node[key] =~ ~s|and on (internal_ip) kube_node_info{cluster="${cluster}",node="${node}"}|, + "node_usage.#{key} doesn't fall back to the node's internal ip" end end + test "host cpu and memory fall back to kubelet resource metrics and node capacity without node-exporter" do + node = Map.new(Metrics.queries(:node_usage, :node)) + sel = ~s|cluster="${cluster}",node="${node}"| + + assert node[:cpu_utilization] =~ + ~s|) or (max(rate(node_cpu_usage_seconds_total{#{sel}}[${rate}])) / max(kube_node_status_capacity{resource="cpu",unit="core",#{sel}}))| + assert node[:cpu_cores] =~ ~s|) or max(machine_cpu_cores{#{sel}}) or max(kube_node_status_capacity{resource="cpu",unit="core",#{sel}})| + assert node[:memory_total] =~ + ~s|) or max(machine_memory_bytes{#{sel}}) or max(kube_node_status_capacity{resource="memory",unit="byte",#{sel}})| + assert node[:memory_used] =~ ~s|) or max(node_memory_working_set_bytes{#{sel}})| + + for key <- ~w(cpu_modes load1 memory_cached disk_read network_receive)a, + do: refute(node[key] =~ " or max(", "node_usage.#{key} has no node-exporter-free equivalent") + end + test "kubernetes series use the node label and dedupe reservations" do node = Map.new(Metrics.queries(:node_usage, :node)) pod = Map.new(Metrics.queries(:node_usage, :pod)) diff --git a/test/console/graphql/queries/deployments/cluster_queries_test.exs b/test/console/graphql/queries/deployments/cluster_queries_test.exs index f1ecb6466b..d2c61a1e17 100644 --- a/test/console/graphql/queries/deployments/cluster_queries_test.exs +++ b/test/console/graphql/queries/deployments/cluster_queries_test.exs @@ -574,7 +574,10 @@ defmodule Console.GraphQl.Deployments.ClusterQueriesTest do cluster = insert(:cluster) deployment_settings(prometheus_connection: %{url: "example.com"}) - expect(Req, :post, 4, fn _, _ -> + expect(Req, :post, 4, fn _, opts -> + [{"query", query} | _] = opts[:form] + assert query =~ ~s|cluster="#{cluster.handle}",node="some-node"| + {:ok, %Req.Response{status: 200, body: Poison.encode!(%{data: %{result: [ %{values: [[1, "1"]]} ]}})}} diff --git a/test/console/logs/provider/elastic_test.exs b/test/console/logs/provider/elastic_test.exs index 7d862b605d..617cea0dee 100644 --- a/test/console/logs/provider/elastic_test.exs +++ b/test/console/logs/provider/elastic_test.exs @@ -28,5 +28,23 @@ defmodule Console.Logs.Provider.ElasticTest do Query.new(query: "request_id_123", operator: :and) ) end + + test "filters by node on any common node field" do + expect(Req, :post, fn _, opts -> + filters = get_in(Jason.decode!(opts[:body]), ["query", "bool", "filter"]) + [%{"bool" => %{"should" => should, "minimum_should_match" => 1}}] = + Enum.filter(filters, &Map.has_key?(&1, "bool")) + + fields = Enum.flat_map(should, fn %{"term" => term} -> Map.keys(term) end) + assert "kubernetes.node.name" in fields + assert "kubernetes.host.keyword" in fields + assert "k8s.node.name.keyword" in fields + assert Enum.all?(should, fn %{"term" => term} -> Map.values(term) == ["node-1"] end) + + {:ok, %Req.Response{status: 200, body: Jason.encode!(%{"hits" => %{"hits" => []}})}} + end) + + assert {:ok, []} = Elastic.query(Elastic.new(@conn), Query.new(node: "node-1")) + end end end diff --git a/test/console/logs/provider/loki_test.exs b/test/console/logs/provider/loki_test.exs index 90d2857b7e..4161bf5c85 100644 --- a/test/console/logs/provider/loki_test.exs +++ b/test/console/logs/provider/loki_test.exs @@ -47,6 +47,15 @@ defmodule Console.Logs.Provider.LokiTest do ~s({cluster="prod", namespace=~"a\\\\.b|c", container="app", k8s_node="n1"}) end + test "it filters by node on every common node label, after the line filter" do + cluster = insert(:cluster, handle: "prod") + q = %{Query.new(query: "oom", node: "ip-10-0-1-2.ec2.internal") | resource: cluster} + + assert Loki.build_query(@conn, q) == + ~s<{cluster="prod"} |~ "(?i)oom" | k8s_node_name="ip-10-0-1-2.ec2.internal" or node_name="ip-10-0-1-2.ec2.internal" or > <> + ~s + end + test "it ors whitespace separated terms by default" do assert Loki.build_query(@conn, Query.new(query: "connection refused")) == ~s<{cluster=~".+"} |~ "(?i)connection" or "(?i)refused"> diff --git a/test/console_web/controllers/git_controller_test.exs b/test/console_web/controllers/git_controller_test.exs index c9b0e306e7..9176b204a9 100644 --- a/test/console_web/controllers/git_controller_test.exs +++ b/test/console_web/controllers/git_controller_test.exs @@ -122,6 +122,23 @@ defmodule ConsoleWeb.GitControllerTest do assert error.warning end + test "if the fetch is rate limited it persists a warning", %{conn: conn} do + git = insert(:git_repository, url: "https://github.com/pluralsh/console.git") + %{id: id} = svc = insert(:service, repository: git, git: %{ref: "master", folder: "bin"}) + + expect(Discovery, :digest, fn _, _ -> {:error, :rate_limited} end) + + conn + |> add_auth_headers(svc.cluster) + |> get("/v1/git/tarballs", %{id: id}) + |> response(429) + + %{errors: [error]} = refetch(svc) |> Console.Repo.preload([:errors]) + assert error.source == "git" + assert error.message == "Rate limited" + assert error.warning + end + test "if fetching and dependencies are not satisfied, it will 402 and persist an error", %{conn: conn} do git = insert(:git_repository, url: "https://github.com/pluralsh/console.git") svc = insert(:service, repository: git, git: %{ref: "master", folder: "bin"}) @@ -213,6 +230,23 @@ defmodule ConsoleWeb.GitControllerTest do assert error.warning end + test "if the fetch is rate limited it persists a warning", %{conn: conn} do + git = insert(:git_repository, url: "https://github.com/pluralsh/console.git") + %{id: id} = svc = insert(:service, repository: git, git: %{ref: "master", folder: "bin"}) + + expect(Discovery, :digest, fn _, _ -> {:error, :rate_limited} end) + + conn + |> add_auth_headers(svc.cluster) + |> get("/ext/v1/digests", %{id: id}) + |> response(429) + + %{errors: [error]} = refetch(svc) |> Console.Repo.preload([:errors]) + assert error.source == "git" + assert error.message == "Rate limited" + assert error.warning + end + @tag :skip test "if fetching and dependencies are not satisfied, it will 402 and persist an error", %{conn: conn} do git = insert(:git_repository, url: "https://github.com/pluralsh/console.git")

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