From 28787833497350f49df8921916644a2842354a9f Mon Sep 17 00:00:00 2001 From: huty Date: Fri, 21 Nov 2025 00:24:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 24 + App.tsx | 494 ++++++++++ Dockerfile | 34 + README.md | 20 + components/AudioRecorder.tsx | 235 +++++ components/ChatBubble.tsx | 267 +++++ components/ConfirmModal.tsx | 52 + components/Onboarding.tsx | 127 +++ components/Toast.tsx | 64 ++ index.html | 84 ++ index.tsx | 15 + manifest.json | 22 + metadata.json | 8 + nginx.conf | 19 + package.json | 31 + releases/HTY1024-APP-SKR-0.1.0_20251120.zip | Bin 0 -> 59168 bytes releases/HTY1024-APP-SKR-0.2.0_20251120.zip | Bin 0 -> 67077 bytes releases/HTY1024-APP-SKR-0.3.0_20251120.zip | Bin 0 -> 83540 bytes .../HTY1024-APP-SKR-main_20251121_0023.zip | Bin 0 -> 83290 bytes service-worker.js | 42 + services/geminiService.ts | 543 ++++++++++ tailwind.config.js | 14 + tsconfig.json | 20 + types.ts | 172 ++++ utils/audioUtils.ts | 80 ++ utils/localization.ts | 926 ++++++++++++++++++ views/ChatView.tsx | 546 +++++++++++ views/CreativeStudio.tsx | 201 ++++ views/ListeningView.tsx | 705 +++++++++++++ views/OCRView.tsx | 513 ++++++++++ views/ReadingView.tsx | 647 ++++++++++++ views/SpeakingPracticeView.tsx | 397 ++++++++ views/TranslationView.tsx | 451 +++++++++ vite.config.ts | 21 + 34 files changed, 6774 insertions(+) create mode 100644 .gitignore create mode 100644 App.tsx create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 components/AudioRecorder.tsx create mode 100644 components/ChatBubble.tsx create mode 100644 components/ConfirmModal.tsx create mode 100644 components/Onboarding.tsx create mode 100644 components/Toast.tsx create mode 100644 index.html create mode 100644 index.tsx create mode 100644 manifest.json create mode 100644 metadata.json create mode 100644 nginx.conf create mode 100644 package.json create mode 100644 releases/HTY1024-APP-SKR-0.1.0_20251120.zip create mode 100644 releases/HTY1024-APP-SKR-0.2.0_20251120.zip create mode 100644 releases/HTY1024-APP-SKR-0.3.0_20251120.zip create mode 100644 releases/HTY1024-APP-SKR-main_20251121_0023.zip create mode 100644 service-worker.js create mode 100644 services/geminiService.ts create mode 100644 tailwind.config.js create mode 100644 tsconfig.json create mode 100644 types.ts create mode 100644 utils/audioUtils.ts create mode 100644 utils/localization.ts create mode 100644 views/ChatView.tsx create mode 100644 views/CreativeStudio.tsx create mode 100644 views/ListeningView.tsx create mode 100644 views/OCRView.tsx create mode 100644 views/ReadingView.tsx create mode 100644 views/SpeakingPracticeView.tsx create mode 100644 views/TranslationView.tsx create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/App.tsx b/App.tsx new file mode 100644 index 0000000..fc5ca31 --- /dev/null +++ b/App.tsx @@ -0,0 +1,494 @@ + +import React, { useState, useRef, useEffect } from 'react'; +import ChatView from './views/ChatView'; +import CreativeStudio from './views/CreativeStudio'; +import SpeakingPracticeView from './views/SpeakingPracticeView'; +import ReadingView from './views/ReadingView'; +import TranslationView from './views/TranslationView'; +import OCRView from './views/OCRView'; +import ListeningView from './views/ListeningView'; +import ToastContainer, { ToastMessage } from './components/Toast'; +import ConfirmModal from './components/ConfirmModal'; +import Onboarding from './components/Onboarding'; +import { MessageCircle, Palette, Mic2, Settings, Globe, Sparkles, BookOpen, Languages, Download, Upload, FileText, X, ScanText, Key, Save, Trash2, Menu, BrainCircuit, Link, Headphones } from 'lucide-react'; +import { AppMode, Language, ChatMessage, TranslationRecord, AppDataBackup, Role, MessageType, ReadingLessonRecord, AVAILABLE_CHAT_MODELS, ChatSession, OCRRecord, ListeningLessonRecord } from './types'; +import { translations } from './utils/localization'; +import { USER_API_KEY_STORAGE, USER_BASE_URL_STORAGE } from './services/geminiService'; + +const STORAGE_KEYS = { + CHAT_SESSIONS: 'sakura_chat_sessions', + ACTIVE_SESSION: 'sakura_active_session_id', + TRANSLATION_HISTORY: 'sakura_translation_history', + READING_HISTORY: 'sakura_reading_history', + LISTENING_HISTORY: 'sakura_listening_history', + OCR_HISTORY: 'sakura_ocr_history', + LANGUAGE: 'sakura_language', + SELECTED_MODEL: 'sakura_selected_model', + HAS_SEEN_ONBOARDING: 'sakura_has_seen_onboarding' +}; + +const App: React.FC = () => { + const [currentView, setCurrentView] = useState(AppMode.CHAT); + // Default to 'zh' (Chinese) + const [language, setLanguage] = useState(() => (localStorage.getItem(STORAGE_KEYS.LANGUAGE) as Language) || 'zh'); + const [chatSessions, setChatSessions] = useState(() => { + const stored = localStorage.getItem(STORAGE_KEYS.CHAT_SESSIONS); + if (stored) return JSON.parse(stored); + return []; + }); + const [activeSessionId, setActiveSessionId] = useState(() => localStorage.getItem(STORAGE_KEYS.ACTIVE_SESSION) || ''); + const [translationHistory, setTranslationHistory] = useState(() => { + const s = localStorage.getItem(STORAGE_KEYS.TRANSLATION_HISTORY); return s ? JSON.parse(s) : []; + }); + const [readingHistory, setReadingHistory] = useState(() => { + const s = localStorage.getItem(STORAGE_KEYS.READING_HISTORY); return s ? JSON.parse(s) : []; + }); + const [listeningHistory, setListeningHistory] = useState(() => { + const s = localStorage.getItem(STORAGE_KEYS.LISTENING_HISTORY); return s ? JSON.parse(s) : []; + }); + const [ocrHistory, setOcrHistory] = useState(() => { + const s = localStorage.getItem(STORAGE_KEYS.OCR_HISTORY); return s ? JSON.parse(s) : []; + }); + const [selectedModel, setSelectedModel] = useState(() => localStorage.getItem(STORAGE_KEYS.SELECTED_MODEL) || AVAILABLE_CHAT_MODELS[0].id); + const [hasSeenOnboarding, setHasSeenOnboarding] = useState(() => !!localStorage.getItem(STORAGE_KEYS.HAS_SEEN_ONBOARDING)); + const [isSettingsOpen, setIsSettingsOpen] = useState(false); + const [isSidebarOpen, setIsSidebarOpen] = useState(false); + + const [userApiKey, setUserApiKey] = useState(''); + const [userBaseUrl, setUserBaseUrl] = useState(''); + + const [toasts, setToasts] = useState([]); + + const [confirmState, setConfirmState] = useState<{isOpen: boolean, title: string, message: string, onConfirm: () => void}>({ + isOpen: false, title: '', message: '', onConfirm: () => {} + }); + + const t = translations[language]; + + useEffect(() => { localStorage.setItem(STORAGE_KEYS.CHAT_SESSIONS, JSON.stringify(chatSessions)); }, [chatSessions]); + useEffect(() => { localStorage.setItem(STORAGE_KEYS.ACTIVE_SESSION, activeSessionId); }, [activeSessionId]); + useEffect(() => { localStorage.setItem(STORAGE_KEYS.TRANSLATION_HISTORY, JSON.stringify(translationHistory)); }, [translationHistory]); + useEffect(() => { localStorage.setItem(STORAGE_KEYS.READING_HISTORY, JSON.stringify(readingHistory)); }, [readingHistory]); + useEffect(() => { localStorage.setItem(STORAGE_KEYS.LISTENING_HISTORY, JSON.stringify(listeningHistory)); }, [listeningHistory]); + useEffect(() => { localStorage.setItem(STORAGE_KEYS.OCR_HISTORY, JSON.stringify(ocrHistory)); }, [ocrHistory]); + useEffect(() => { localStorage.setItem(STORAGE_KEYS.LANGUAGE, language); }, [language]); + useEffect(() => { localStorage.setItem(STORAGE_KEYS.SELECTED_MODEL, selectedModel); }, [selectedModel]); + + useEffect(() => { + const activeSession = chatSessions.find(s => s.id === activeSessionId); + if (activeSession && activeSession.messages.length === 1 && activeSession.messages[0].role === Role.MODEL) { + const newWelcome = translations[language].chat.welcome; + const newTitle = translations[language].chat.newChat; + setChatSessions(prev => prev.map(s => s.id === activeSessionId ? { ...s, title: newTitle, messages: [{ ...s.messages[0], content: newWelcome }] } : s)); + } + }, [language]); + + const hasInitialized = useRef(false); + useEffect(() => { + if (!hasInitialized.current) { + if (chatSessions.length === 0) createNewSession(); + else if (!activeSessionId) setActiveSessionId(chatSessions[0].id); + + const storedKey = localStorage.getItem(USER_API_KEY_STORAGE); + const storedUrl = localStorage.getItem(USER_BASE_URL_STORAGE); + const envKey = process.env.API_KEY; + + if (storedKey) setUserApiKey(storedKey); + if (storedUrl) setUserBaseUrl(storedUrl); + + if (!storedKey && (!envKey || envKey.length === 0)) { + setIsSettingsOpen(true); + setTimeout(() => addToast('info', translations[language].settings.apiKeyMissing), 500); + } + hasInitialized.current = true; + } + }, []); + + const createNewSession = () => { + const newId = Date.now().toString(); + const welcomeMsg: ChatMessage = { id: 'welcome', role: Role.MODEL, type: MessageType.TEXT, content: translations[language].chat.welcome, timestamp: Date.now() }; + setChatSessions(prev => [{ id: newId, title: translations[language].chat.newChat, messages: [welcomeMsg], createdAt: Date.now(), updatedAt: Date.now() }, ...prev]); + setActiveSessionId(newId); + }; + + const updateSessionMessages = (sessionId: string, messages: ChatMessage[]) => { + setChatSessions(prev => prev.map(s => { + if (s.id === sessionId) { + let title = s.title; + if (messages.length > 1) { + const firstUserMsg = messages.find(m => m.role === Role.USER); + if (firstUserMsg) title = firstUserMsg.content.slice(0, 30) + (firstUserMsg.content.length > 30 ? '...' : ''); + } + return { ...s, messages, title, updatedAt: Date.now() }; + } + return s; + })); + }; + + const updateReadingLesson = (record: ReadingLessonRecord) => { + setReadingHistory(prev => prev.map(item => item.id === record.id ? record : item)); + }; + + const updateListeningLesson = (record: ListeningLessonRecord) => { + setListeningHistory(prev => prev.map(item => item.id === record.id ? record : item)); + }; + + const deleteSession = (sessionId: string) => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].chat.deleteConfirm, + onConfirm: () => { + const remaining = chatSessions.filter(s => s.id !== sessionId); + setChatSessions(remaining); + if (activeSessionId === sessionId) { + if (remaining.length > 0) setActiveSessionId(remaining[0].id); + else createNewSession(); + } + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const clearAllChatSessions = () => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].common.clearHistoryConfirm, + onConfirm: () => { + setChatSessions([]); + createNewSession(); + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const deleteReadingLesson = (id: string) => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].common.deleteItemConfirm, + onConfirm: () => { + setReadingHistory(prev => prev.filter(item => item.id !== id)); + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const clearReadingHistory = () => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].common.clearHistoryConfirm, + onConfirm: () => { + setReadingHistory([]); + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const deleteListeningLesson = (id: string) => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].common.deleteItemConfirm, + onConfirm: () => { + setListeningHistory(prev => prev.filter(item => item.id !== id)); + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const clearListeningHistory = () => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].common.clearHistoryConfirm, + onConfirm: () => { + setListeningHistory([]); + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const deleteOCRRecord = (id: string) => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].common.deleteItemConfirm, + onConfirm: () => { + setOcrHistory(prev => prev.filter(item => item.id !== id)); + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const clearOCRHistory = () => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].common.clearHistoryConfirm, + onConfirm: () => { + setOcrHistory([]); + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const deleteTranslationRecord = (id: string) => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].common.deleteItemConfirm, + onConfirm: () => { + setTranslationHistory(prev => prev.filter(item => item.id !== id)); + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const clearTranslationHistory = () => { + setConfirmState({ + isOpen: true, + title: translations[language].common.confirm, + message: translations[language].common.clearHistoryConfirm, + onConfirm: () => { + setTranslationHistory([]); + setConfirmState(prev => ({ ...prev, isOpen: false })); + } + }); + }; + + const addToast = (type: 'success' | 'error' | 'info', message: string) => { + const id = Date.now().toString(); + setToasts(prev => [...prev, { id, type, message }]); + }; + const removeToast = (id: string) => setToasts(prev => prev.filter(t => t.id !== id)); + + const handleSaveSettings = () => { + if (userApiKey.trim()) { + localStorage.setItem(USER_API_KEY_STORAGE, userApiKey.trim()); + } + if (userBaseUrl.trim()) { + localStorage.setItem(USER_BASE_URL_STORAGE, userBaseUrl.trim()); + } else { + localStorage.removeItem(USER_BASE_URL_STORAGE); + } + addToast('success', t.settings.keySaved); + }; + + const handleClearSettings = () => { + localStorage.removeItem(USER_API_KEY_STORAGE); + localStorage.removeItem(USER_BASE_URL_STORAGE); + setUserApiKey(''); + setUserBaseUrl(''); + addToast('info', t.settings.keyRemoved); + }; + + const toggleLanguage = () => { + if (language === 'en') setLanguage('ja'); else if (language === 'ja') setLanguage('zh'); else setLanguage('en'); + }; + + const handleViewChange = (mode: AppMode) => { setCurrentView(mode); setIsSidebarOpen(false); }; + const completeOnboarding = () => { localStorage.setItem(STORAGE_KEYS.HAS_SEEN_ONBOARDING, 'true'); setHasSeenOnboarding(true); }; + + const handleBackup = () => { + const backup: AppDataBackup = { version: 1, createdAt: Date.now(), language, chatSessions, translationHistory, readingHistory, listeningHistory, ocrHistory }; + const blob = new Blob([JSON.stringify(backup, null, 2)], { type: 'application/json' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); a.href = url; a.download = `sakura-backup-${new Date().toISOString().slice(0,10)}.json`; a.click(); URL.revokeObjectURL(url); + }; + + const handleRestore = (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; if (!file) return; + const reader = new FileReader(); + reader.onload = (event) => { + try { + const data = JSON.parse(event.target?.result as string) as any; + if (data.chatSessions && Array.isArray(data.chatSessions)) { + setChatSessions(data.chatSessions); + setActiveSessionId(data.chatSessions[0]?.id || ''); + setTranslationHistory(data.translationHistory || []); + setReadingHistory(data.readingHistory || []); + setListeningHistory(data.listeningHistory || []); + setOcrHistory(data.ocrHistory || []); + setLanguage(data.language || 'en'); + addToast('success', t.settings.successRestore); + setIsSettingsOpen(false); + } else { throw new Error(); } + } catch (err) { addToast('error', t.settings.errorRestore); } + }; + reader.readAsText(file); + }; + + const exportChatText = () => { + const session = chatSessions.find(s => s.id === activeSessionId); if (!session) return; + const text = session.messages.map(m => `[${new Date(m.timestamp).toLocaleString()}] ${m.role}: ${m.content}`).join('\n\n'); + const blob = new Blob([text], { type: 'text/plain' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `chat.txt`; a.click(); + }; + + const exportTranslationCSV = () => { + const header = "Timestamp,Source,Target,SrcText,TgtText\n"; + const rows = translationHistory.map(t => `"${new Date(t.timestamp).toISOString()}","${t.sourceLang}","${t.targetLang}","${t.sourceText.replace(/"/g, '""')}","${t.targetText.replace(/"/g, '""')}"`).join('\n'); + const blob = new Blob([header + rows], { type: 'text/csv' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `translations.csv`; a.click(); + }; + + const exportReadingHistory = () => { + const blob = new Blob([JSON.stringify(readingHistory, null, 2)], { type: 'application/json' }); + const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `reading-history.json`; a.click(); URL.revokeObjectURL(url); + }; + + const exportOCRHistory = () => { + const blob = new Blob([JSON.stringify(ocrHistory, null, 2)], { type: 'application/json' }); + const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `ocr-history.json`; a.click(); URL.revokeObjectURL(url); + }; + + const NavButton = ({ mode, icon: Icon, label, colorClass }: any) => { + const isActive = currentView === mode; + return ( + + ); + }; + + return ( +
+ + setConfirmState(prev => ({...prev, isOpen: false}))} /> + + {!hasSeenOnboarding && } + {isSidebarOpen &&
setIsSidebarOpen(false)} />} + + + +
+
+ + Sakura Sensei +
+
+
+ {currentView === AppMode.CHAT && } + {currentView === AppMode.TRANSLATION && setTranslationHistory(prev => [...prev, rec])} clearHistory={clearTranslationHistory} onDeleteHistoryItem={deleteTranslationRecord} />} + {currentView === AppMode.SPEAKING && } + {currentView === AppMode.CREATIVE && } + {currentView === AppMode.READING && setReadingHistory(prev => [...prev, rec])} onClearHistory={clearReadingHistory} onDeleteHistoryItem={deleteReadingLesson} onUpdateHistory={updateReadingLesson} />} + {currentView === AppMode.LISTENING && setListeningHistory(prev => [...prev, rec])} onClearHistory={clearListeningHistory} onDeleteHistoryItem={deleteListeningLesson} onUpdateHistory={updateListeningLesson} />} + {currentView === AppMode.OCR && setOcrHistory(prev => [...prev, rec])} onClearHistory={clearOCRHistory} onDeleteHistoryItem={deleteOCRRecord} addToast={addToast} />} +
+
+ + {isSettingsOpen && ( +
+
+
+

{t.settings.title}

+ +
+
+
+

{t.settings.apiKeyTitle}

+

{t.settings.apiKeyDesc}

+
+ setUserApiKey(e.target.value)} placeholder={t.settings.apiKeyPlaceholder} className="w-full p-3 rounded-lg border border-amber-200 bg-white text-sm outline-none focus:ring-2 focus:ring-amber-400 transition-all" /> +
+ + setUserBaseUrl(e.target.value)} placeholder={t.settings.baseUrlPlaceholder} className="w-full p-3 pl-9 rounded-lg border border-amber-200 bg-white text-sm outline-none focus:ring-2 focus:ring-amber-400 transition-all" /> +
+
+ + +
+
+
+
+

{t.settings.modelTitle}

+ +
+
+

{t.settings.backupTitle}

+
+
+
{t.settings.backupBtn}
+
{t.settings.backupDesc}
+
+
+
{t.settings.restoreBtn}
+
{t.settings.restoreDesc}
+ +
+
+
+
+

{t.settings.exportTitle}

+
+ + + + +
+
+
+
+
+ )} +
+ ); +}; + +export default App; diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3cd2c89 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +# Stage 1: Build +FROM node:20-alpine as builder + +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies +RUN npm install + +# Copy source code +COPY . . + +# Accept API Key as build arg (fallback if user doesn't set one) +ARG VITE_API_KEY +ENV VITE_API_KEY=$VITE_API_KEY + +# Build the app +RUN npm run build + +# Stage 2: Serve +FROM nginx:alpine + +# Copy custom nginx config +COPY nginx.conf /etc/nginx/conf.d/default.conf + +# Copy static files +COPY --from=builder /app/dist /usr/share/nginx/html + +# Cloud Run port +EXPOSE 8080 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..9487d72 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +
+GHBanner +
+ +# Run and deploy your AI Studio app + +This contains everything you need to run your app locally. + +View your app in AI Studio: https://ai.studio/apps/drive/1MdpOjnvh39r0kvYmztzlvr-cTY1iF2tW + +## Run Locally + +**Prerequisites:** Node.js + + +1. Install dependencies: + `npm install` +2. Set the `GEMINI_API_KEY` in [.env.local](.env.local) to your Gemini API key +3. Run the app: + `npm run dev` diff --git a/components/AudioRecorder.tsx b/components/AudioRecorder.tsx new file mode 100644 index 0000000..11fec18 --- /dev/null +++ b/components/AudioRecorder.tsx @@ -0,0 +1,235 @@ +import React, { useState, useRef, useEffect } from 'react'; +import { Mic, Square, Loader2 } from 'lucide-react'; + +interface AudioRecorderProps { + onAudioCaptured: (base64Audio: string) => void; + disabled?: boolean; + titleStart?: string; + titleStop?: string; +} + +const AudioRecorder: React.FC = ({ + onAudioCaptured, + disabled, + titleStart = "Start Voice Input", + titleStop = "Stop Recording" +}) => { + const [isRecording, setIsRecording] = useState(false); + const [isProcessing, setIsProcessing] = useState(false); + const audioContextRef = useRef(null); + const streamRef = useRef(null); + const processorRef = useRef(null); + const inputRef = useRef(null); + const audioDataRef = useRef([]); + + useEffect(() => { + return () => { + cleanup(); + }; + }, []); + + const cleanup = () => { + if (streamRef.current) { + streamRef.current.getTracks().forEach(track => track.stop()); + streamRef.current = null; + } + if (processorRef.current) { + processorRef.current.disconnect(); + processorRef.current = null; + } + if (inputRef.current) { + inputRef.current.disconnect(); + inputRef.current = null; + } + if (audioContextRef.current) { + if (audioContextRef.current.state !== 'closed') { + audioContextRef.current.close(); + } + audioContextRef.current = null; + } + }; + + const startRecording = async () => { + try { + audioDataRef.current = []; + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + streamRef.current = stream; + + const audioContext = new (window.AudioContext || (window as any).webkitAudioContext)(); + if (audioContext.state === 'suspended') { + await audioContext.resume(); + } + audioContextRef.current = audioContext; + + const input = audioContext.createMediaStreamSource(stream); + inputRef.current = input; + + // Buffer size 4096, 1 input channel, 1 output channel + const processor = audioContext.createScriptProcessor(4096, 1, 1); + processorRef.current = processor; + + processor.onaudioprocess = (e) => { + const channelData = e.inputBuffer.getChannelData(0); + // Clone the data + audioDataRef.current.push(new Float32Array(channelData)); + }; + + input.connect(processor); + processor.connect(audioContext.destination); + + setIsRecording(true); + + } catch (err) { + console.error("Error accessing microphone:", err); + alert("Could not access microphone. Please check permissions."); + } + }; + + const stopRecording = async () => { + if (!isRecording) return; + setIsRecording(false); + setIsProcessing(true); + + // Stop capturing + if (streamRef.current) { + streamRef.current.getTracks().forEach(track => track.stop()); + } + if (processorRef.current) { + processorRef.current.disconnect(); + } + if (inputRef.current) { + inputRef.current.disconnect(); + } + + // Small delay to allow last process tick + setTimeout(() => { + try { + if (audioDataRef.current.length === 0) { + setIsProcessing(false); + cleanup(); + return; + } + + const sampleRate = audioContextRef.current?.sampleRate || 44100; + const blob = exportWAV(audioDataRef.current, sampleRate); + cleanup(); + + const reader = new FileReader(); + reader.readAsDataURL(blob); + reader.onloadend = () => { + const result = reader.result as string; + // result is "data:audio/wav;base64,..." + const base64String = result.split(',')[1]; + onAudioCaptured(base64String); + setIsProcessing(false); + }; + } catch (e) { + console.error("WAV Encoding Error", e); + setIsProcessing(false); + cleanup(); + } + }, 100); + }; + + return ( + + ); +}; + +// --- WAV ENCODER HELPERS --- + +const exportWAV = (audioData: Float32Array[], sampleRate: number) => { + const mergedBuffers = mergeBuffers(audioData); + const downsampledBuffer = downsampleBuffer(mergedBuffers, sampleRate); + const buffer = encodeWAV(downsampledBuffer); + return new Blob([buffer], { type: 'audio/wav' }); +}; + +const mergeBuffers = (audioData: Float32Array[]) => { + const totalLength = audioData.reduce((acc, val) => acc + val.length, 0); + const result = new Float32Array(totalLength); + let offset = 0; + for (const arr of audioData) { + result.set(arr, offset); + offset += arr.length; + } + return result; +}; + +const downsampleBuffer = (buffer: Float32Array, sampleRate: number) => { + if (sampleRate === 16000) return buffer; + const targetRate = 16000; + const sampleRateRatio = sampleRate / targetRate; + const newLength = Math.ceil(buffer.length / sampleRateRatio); + const result = new Float32Array(newLength); + let offsetResult = 0; + let offsetBuffer = 0; + + while (offsetResult < result.length) { + const nextOffsetBuffer = Math.round((offsetResult + 1) * sampleRateRatio); + let accum = 0, count = 0; + for (let i = offsetBuffer; i < nextOffsetBuffer && i < buffer.length; i++) { + accum += buffer[i]; + count++; + } + + // Fixed NaN issue here: verify count is > 0 + if (count > 0) { + result[offsetResult] = accum / count; + } else { + result[offsetResult] = 0; + } + + offsetResult++; + offsetBuffer = nextOffsetBuffer; + } + return result; +}; + +const encodeWAV = (samples: Float32Array) => { + const buffer = new ArrayBuffer(44 + samples.length * 2); + const view = new DataView(buffer); + + const writeString = (view: DataView, offset: number, string: string) => { + for (let i = 0; i < string.length; i++) { + view.setUint8(offset + i, string.charCodeAt(i)); + } + }; + + writeString(view, 0, 'RIFF'); + view.setUint32(4, 36 + samples.length * 2, true); + writeString(view, 8, 'WAVE'); + writeString(view, 12, 'fmt '); + view.setUint32(16, 16, true); + view.setUint16(20, 1, true); + view.setUint16(22, 1, true); + view.setUint32(24, 16000, true); + view.setUint32(28, 16000 * 2, true); + view.setUint16(32, 2, true); + view.setUint16(34, 16, true); + writeString(view, 36, 'data'); + view.setUint32(40, samples.length * 2, true); + + const floatTo16BitPCM = (output: DataView, offset: number, input: Float32Array) => { + for (let i = 0; i < input.length; i++, offset += 2) { + const s = Math.max(-1, Math.min(1, input[i])); + output.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7FFF, true); + } + }; + + floatTo16BitPCM(view, 44, samples); + return view; +}; + +export default AudioRecorder; \ No newline at end of file diff --git a/components/ChatBubble.tsx b/components/ChatBubble.tsx new file mode 100644 index 0000000..4f7ae98 --- /dev/null +++ b/components/ChatBubble.tsx @@ -0,0 +1,267 @@ + + +import React, { useState, useRef } from 'react'; +import { Role, MessageType, ChatMessage, Language } from '../types'; +import { User, Bot, BrainCircuit, Volume2, Pause, Sparkles, Download, Copy, Check, Loader2 } from 'lucide-react'; +import { geminiService, decodeAudioData } from '../services/geminiService'; +import { processAndDownloadAudio } from '../utils/audioUtils'; +import { translations } from '../utils/localization'; +import ReactMarkdown from 'react-markdown'; +import remarkGfm from 'remark-gfm'; + +interface ChatBubbleProps { + message: ChatMessage; + language: Language; + onUpdateMessage?: (updatedMessage: ChatMessage) => void; + onError?: (msg: string) => void; +} + +const ChatBubble: React.FC = ({ message, language, onUpdateMessage, onError }) => { + const isUser = message.role === Role.USER; + const [isPlaying, setIsPlaying] = useState(false); + const [isGeneratingAudio, setIsGeneratingAudio] = useState(false); + const [isCopied, setIsCopied] = useState(false); + + const audioContextRef = useRef(null); + const audioSourceRef = useRef(null); + + const t = translations[language].chat; + const tCommon = translations[language].common; + + const stopAudio = () => { + if (audioSourceRef.current) { + audioSourceRef.current.stop(); + audioSourceRef.current = null; + } + setIsPlaying(false); + }; + + const handlePlayAudio = async () => { + if (isPlaying) { + stopAudio(); + return; + } + + let base64Data = message.metadata?.audioUrl; + + // If no audio cached, generate it on demand + if (!base64Data && message.content && message.type === MessageType.TEXT) { + try { + setIsGeneratingAudio(true); + base64Data = await geminiService.generateSpeech(message.content); + + if (!base64Data) throw new Error("Audio generation returned empty"); + + // Cache it if parent provided update handler + if (onUpdateMessage) { + onUpdateMessage({ + ...message, + metadata: { + ...message.metadata, + audioUrl: base64Data + } + }); + } + } catch (e) { + console.error("Audio gen failed", e); + setIsGeneratingAudio(false); + if (onError) onError(translations[language].common.error); + return; + } finally { + setIsGeneratingAudio(false); + } + } + + if (!base64Data) return; + + try { + if (!audioContextRef.current) { + audioContextRef.current = new (window.AudioContext || (window as any).webkitAudioContext)(); + } + const ctx = audioContextRef.current; + if (ctx.state === 'suspended') await ctx.resume(); + + const buffer = await decodeAudioData(base64Data, ctx); + + const source = ctx.createBufferSource(); + source.buffer = buffer; + source.connect(ctx.destination); + source.onended = () => setIsPlaying(false); + source.start(); + audioSourceRef.current = source; + setIsPlaying(true); + } catch (e) { + console.error("Audio playback error", e); + setIsPlaying(false); + if (onError) onError(translations[language].common.error); + } + }; + + const handleDownloadAudio = async () => { + let base64Data = message.metadata?.audioUrl; + if (!base64Data && message.content && message.type === MessageType.TEXT) { + try { + setIsGeneratingAudio(true); + base64Data = await geminiService.generateSpeech(message.content); + if (!base64Data) throw new Error("Audio generation returned empty"); + + if (onUpdateMessage) { + onUpdateMessage({ ...message, metadata: { ...message.metadata, audioUrl: base64Data } }); + } + } catch (e) { + console.error(e); + if (onError) onError(translations[language].common.error); + } finally { + setIsGeneratingAudio(false); + } + } + + if (base64Data) { + const filename = `sakura_audio_${Date.now()}.wav`; + processAndDownloadAudio(base64Data, filename); + } + }; + + const handleCopy = () => { + if (message.content) { + navigator.clipboard.writeText(message.content); + setIsCopied(true); + setTimeout(() => setIsCopied(false), 2000); + } + }; + + const formatTime = (timestamp: number) => { + const date = new Date(timestamp); + const now = new Date(); + const isToday = date.getDate() === now.getDate() && date.getMonth() === now.getMonth() && date.getFullYear() === now.getFullYear(); + + const timeStr = date.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'}); + if (isToday) return timeStr; + + return `${date.toLocaleDateString()} ${timeStr}`; + }; + + return ( +
+
+ + {/* Avatar */} +
+ {isUser ? : } +
+ + {/* Content Bubble */} +
+ + {/* Metadata Badges */} + {message.metadata?.isThinking && ( + + {t.deepThinking} + + )} + +
+ + {/* TEXT CONTENT - MARKDOWN RENDERED */} + {message.content && ( +
+ {message.type === MessageType.TEXT ? ( + + {message.content} + + ) : ( + message.content + )} +
+ )} + + {/* IMAGE CONTENT */} + {message.type === MessageType.IMAGE && message.metadata?.imageUrl && ( +
+ Uploaded or Generated +
+ )} + {message.type === MessageType.TEXT && message.metadata?.imageUrl && ( +
+ Context +
{t.imageAnalyzed}
+
+ )} + + {/* Action Bar (Copy, TTS, Download) - Always visible for Text messages or if audioUrl exists */} + {(message.type === MessageType.TEXT || message.metadata?.audioUrl) && ( +
+ + {/* Play TTS */} + + + {/* Download Audio */} + + + {/* Copy Text */} + +
+ )} +
+ + {/* Footer (Timestamp + Model) */} +
+ + {formatTime(message.timestamp)} + + {!isUser && message.model && ( +
+ {tCommon.generatedBy} {message.model.replace('gemini-', '')} +
+ )} +
+ +
+
+
+ ); +}; + +export default ChatBubble; \ No newline at end of file diff --git a/components/ConfirmModal.tsx b/components/ConfirmModal.tsx new file mode 100644 index 0000000..303faf0 --- /dev/null +++ b/components/ConfirmModal.tsx @@ -0,0 +1,52 @@ + +import React from 'react'; +import { AlertTriangle, X } from 'lucide-react'; +import { Language } from '../types'; +import { translations } from '../utils/localization'; + +interface ConfirmModalProps { + isOpen: boolean; + title: string; + message: string; + language: Language; + onConfirm: () => void; + onCancel: () => void; +} + +const ConfirmModal: React.FC = ({ isOpen, title, message, language, onConfirm, onCancel }) => { + if (!isOpen) return null; + const t = translations[language].common; + + return ( +
+
+ +
+
+ +
+

{title}

+

{message}

+
+ + +
+
+
+
+ ); +}; + +export default ConfirmModal; diff --git a/components/Onboarding.tsx b/components/Onboarding.tsx new file mode 100644 index 0000000..5a48011 --- /dev/null +++ b/components/Onboarding.tsx @@ -0,0 +1,127 @@ + +import React, { useState } from 'react'; +import { MessageCircle, Sparkles, Mic2, BookOpen, X, ArrowRight, Check, Globe } from 'lucide-react'; +import { Language } from '../types'; +import { translations } from '../utils/localization'; + +interface OnboardingProps { + language: Language; + setLanguage: (lang: Language) => void; + onComplete: () => void; +} + +const Onboarding: React.FC = ({ language, setLanguage, onComplete }) => { + const t = translations[language].onboarding; + const [step, setStep] = useState(0); + + const steps = [ + { + title: t.step1Title, + desc: t.step1Desc, + icon: , + color: 'bg-indigo-50', + }, + { + title: t.step2Title, + desc: t.step2Desc, + icon: , + color: 'bg-orange-50', + }, + { + title: t.step3Title, + desc: t.step3Desc, + icon: , + color: 'bg-blue-50', + } + ]; + + const handleNext = () => { + if (step < steps.length - 1) { + setStep(step + 1); + } else { + onComplete(); + } + }; + + return ( +
+
+ {/* Skip/Close */} + + + {/* Header Image/Graphic */} +
+
+
+ + +

Sakura Sensei

+ + {/* Language Switcher in Header (Step 0) */} + {step === 0 && ( +
+ {(['en', 'ja', 'zh'] as Language[]).map(lang => ( + + ))} +
+ )} +
+ +
+
+

{t.welcome}

+

{t.desc1}

+
+ + {/* Step Card */} +
+ {steps.map((s, idx) => ( +
+
+ {s.icon} +
+

{s.title}

+

{s.desc}

+
+ ))} +
+ + {/* Controls */} +
+ {/* Indicators */} +
+ {steps.map((_, idx) => ( +
+ ))} +
+ + +
+
+
+
+ ); +}; + +export default Onboarding; diff --git a/components/Toast.tsx b/components/Toast.tsx new file mode 100644 index 0000000..1d2015b --- /dev/null +++ b/components/Toast.tsx @@ -0,0 +1,64 @@ + +import React, { useEffect } from 'react'; +import { CheckCircle, AlertCircle, X } from 'lucide-react'; + +export interface ToastMessage { + id: string; + type: 'success' | 'error' | 'info'; + message: string; +} + +interface ToastProps { + toasts: ToastMessage[]; + onRemove: (id: string) => void; +} + +const ToastContainer: React.FC = ({ toasts, onRemove }) => { + return ( +
+ {toasts.map((toast) => ( + + ))} +
+ ); +}; + +const ToastItem: React.FC<{ toast: ToastMessage; onRemove: (id: string) => void }> = ({ toast, onRemove }) => { + useEffect(() => { + const timer = setTimeout(() => { + onRemove(toast.id); + }, 3000); + return () => clearTimeout(timer); + }, [toast.id, onRemove]); + + const getStyles = () => { + switch (toast.type) { + case 'success': + return 'bg-emerald-50 border-emerald-100 text-emerald-700'; + case 'error': + return 'bg-red-50 border-red-100 text-red-700'; + default: + return 'bg-indigo-50 border-indigo-100 text-indigo-700'; + } + }; + + const getIcon = () => { + switch (toast.type) { + case 'success': return ; + case 'error': return ; + default: return ; + } + }; + + return ( +
+ {getIcon()} +

{toast.message}

+ +
+ ); +}; + +export default ToastContainer; \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..0d50d57 --- /dev/null +++ b/index.html @@ -0,0 +1,84 @@ + + + + + + + + + Sakura Sensei 🌸 + + + + + + +
+ + + + \ No newline at end of file diff --git a/index.tsx b/index.tsx new file mode 100644 index 0000000..6ca5361 --- /dev/null +++ b/index.tsx @@ -0,0 +1,15 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; + +const rootElement = document.getElementById('root'); +if (!rootElement) { + throw new Error("Could not find root element to mount to"); +} + +const root = ReactDOM.createRoot(rootElement); +root.render( + + + +); \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..1070513 --- /dev/null +++ b/manifest.json @@ -0,0 +1,22 @@ +{ + "name": "Sakura Sensei", + "short_name": "Sakura", + "start_url": "/", + "display": "standalone", + "background_color": "#ffffff", + "theme_color": "#ffffff", + "icons": [ + { + "src": "https://api.iconify.design/twemoji:cherry-blossom.svg", + "sizes": "192x192", + "type": "image/svg+xml", + "purpose": "any maskable" + }, + { + "src": "https://api.iconify.design/twemoji:cherry-blossom.svg", + "sizes": "512x512", + "type": "image/svg+xml", + "purpose": "any maskable" + } + ] +} \ No newline at end of file diff --git a/metadata.json b/metadata.json new file mode 100644 index 0000000..f6f43d1 --- /dev/null +++ b/metadata.json @@ -0,0 +1,8 @@ +{ + "name": "Sakura Sensei 🌸 - AI Japanese Tutor", + "description": "Immerse yourself in Japanese with Sakura Sensei. Experience realistic roleplay, deep cultural insights, and creative tools powered by Gemini.", + "requestFramePermissions": [ + "microphone", + "camera" + ] +} \ No newline at end of file diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..555292f --- /dev/null +++ b/nginx.conf @@ -0,0 +1,19 @@ +server { + listen 8080; + server_name localhost; + + root /usr/share/nginx/html; + index index.html; + + gzip on; + gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + location / { + try_files $uri $uri/ /index.html; + } + + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { + expires 1y; + add_header Cache-Control "public, no-transform"; + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..6374323 --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "sakura-sensei", + "private": true, + "version": "1.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@google/genai": "*", + "html2canvas": "^1.4.1", + "lucide-react": "^0.344.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-markdown": "^9.0.1", + "remark-gfm": "^4.0.0" + }, + "devDependencies": { + "@types/react": "^18.2.64", + "@types/react-dom": "^18.2.21", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.18", + "postcss": "^8.4.35", + "tailwindcss": "^3.4.1", + "@tailwindcss/typography": "^0.5.10", + "typescript": "^5.4.2", + "vite": "^5.1.6" + } +} \ No newline at end of file diff --git a/releases/HTY1024-APP-SKR-0.1.0_20251120.zip b/releases/HTY1024-APP-SKR-0.1.0_20251120.zip new file mode 100644 index 0000000000000000000000000000000000000000..6071228582517b4a1bc26cd9e4ce0c9da8f38f39 GIT binary patch literal 59168 zcmb5VW3Xt=vMso5+qUh!xR-6)wr$(CZQHi(y=<%Z)9L>1i;i>djHns&SH`RynN=et zCkYG!1@J$fMHxrU|M~I1U-$r!0Afn&j0{XHv;uN+w2G1nvXhcmd9~Nd>@m#?Ut3$An;4)~dKbl_h_mJO^n2=8n#Wr# zU^jBN%?lb{LyeUR*uW4^TQKa&Apu*cW%hEBzF>DIL57!@{$gKgO170y1t>r>qm#x7 z<*()2ho#5{1paX1NtD9Y3>ObO6HGddPmF}s!f9FuhReA3|U8vMba zFcHqnaAFjyk$LC1nVnHX`X*S_57gHJ`OD(48f%$l&1p3Rz-58BcS49EaQY%niII=K z-Rn3)p1z72t`ff-{mag!_%*7xPT!%~HM9wO}Xxqb1il}b;P%o+1Q~ZFq zoJG&L&Ro5g8{yA=@OOaN9aTc=?4`GINxU$ZayAtuitfpn!7L|p{n?^F~*GzCL)WPbE#F_`HcinA)kmV z-Uovxd7fTibX+9f4Q_%ELN;z3IC$APFs|av4>l*|uE)R`s+gn9mM(gGdwZXMMuj+= zu)?W4B#+lB^`=B}b75sdMgtu&Jf5y0UcMArh4aUjS;p=;y!8@i;J|HTWqN95#W(|- z`uRWJ`_^Qe1x5oCZ}@;lmc!)6U@!3S@bK}n@OzH8s=^~+J~B9suVA=le>59FHCK;Zlh=Kjc-`6Ml> zOQNEvBGpTGRV{V0y*=cLCyGcrd-f{CL=hLTnCVgAqNgIE6@_U*yNiu782|FhfMB+R zfUFUZq@O3FoIW-G{msGi%f7$JSn2sTzu@Bl2_G62mu>@Ss*rKeEU(pE%-9_&D|M|3 zTuYTwMm{k$!ZS?%J#QbBvGrbc!u#&v&ahDdh@(|S#88X`bv?% zZT(0u7~o);7wfH_f>NLCq$up41>{dGIn>1GWj%?+U=u>4IJo5$UDDEybR!3grx^5Z zNp_4%Ie&ee0PU&)M6h-4M&)1`{-?(?k2V^%_UdaqBc_u5erPN2B3APc9Z!9c=re@C zs4k^!?dCNy1V~6RI1{B_<6m=9qa0wO%0Hx>_30Jpqu;lPqB{}WK#^#>l zLDYC+G%da+C13Ca(TJF9V9s>>#@cHvt|2>N1Ny?JyG`{fFWB`C<^+mWPdxZ={TfTT zKRv$%^ICa*T!(>HU21Urx0)^7KVz8M&Jif94DJ+M@VlFATI8!yLkV2wHzX?MHl^*2 zGp76p%I~jrz~|eN_mg0F0MA}NoX2SonZ1j5e{}HAp{{1P;zSa?CeSuDcww?-p~%9c z2T5j8cO*72!})*TeEWyQ(JU693ILgT8L?ztM*6Y z3k%@sl}s2o=twB=lxXY4jmtib*N8bQwd^rSN1%kfYz&PGBK^vDE$CgYF_QoU=!vE@ zNm0|@{2i|Rn%i%jL*!ShgVw&z^w>g4?S*=~O|8nv{Jz1&(s3L|Vh(fWeIgi0{oJA_ zN6N=gSsjWeF-koN0?=$7gew7`7;Z7K7$KIIQe6rp1p)uYo*hp$8O-}<9>Xn-Q#lVQ za3&Bl`c$Ez>n=^0x!MFldlUhkX1-sF=F$V^>IJawS4I=}k$Y|FrF_!vrNcy$my9#% ze9|C_EN$;<)d*t6j3&mV$eniO)yZ8PXR1Wro1DJuj%lKHb6YSdHc}KJ77{RkJBwRq zL^H4h56N6XQtQ^kVD1bmah?CL5Hc_t$&1N&4G;q*N!Fy)Iw*MDzQ#s5Y*dlS0M+BX z3*&hVcsrC>=v1P8H>NxA3cP>26?I;QiJ$){7zz~rTY^DS9)5{+wUkWNa9jEaJ_2;| zRc5-UGHDu`#6zxfij*q0pkRjM29Q(wWKTC!$eu#U&lb7nQ?o>V;24*o2E0?K^W^wc z;Vi;Z`o7M*Q}cB6@Xoo#6_Q%>GAhuSiT>WAO0AGf-->UcEG>94#pPokBAfrDbOUuH z>A9{xPb7&(hfH`1!c1{M5nUx6rK7{TZj+@0h&{@5@@p9#A1kB0Lv;!n0ui$y^pgC> zDuoJ9rhpcS0++K+x@@(AINXnbx63a;X0z!#*|RBVBA(Q;;ShZpMbZiPitzSvaYf$= zXG>zs`lERb)P%(eVQR<=b)irPJzATxZ#9MnDvk2VL}{R+d^6f2){8%!4M|*%{RL!^ z3+e?J4x@8ZC%hsE(gDkxEYXV3(yt1{uC>G8{aElSD)>~fas_@h{+*=`_+f&iV-b%- ztxX_YbIBz=yp1J-4Gvag#YTXMj~HxNp(wKXMq~OM7AT<=dWQogjVVZtYKycVl+xbG zR9%Nv1a6Z&#QaJYC@HJ4?cJU!^4DeW$xNI%i7Yhc-_ zfLp#}rd|b&@LZQo{AQ{{00_Q=cn-Bo>hiCxhA!M=K_Xw7=Yioi>hum5QA)F?7bmbW z_;BGfwO>M6>5Vc`pMX5ya|n_V%_ZaxJw>~&fPK>2<9I%0hG}~JGZ=TESUFy_;8;r8 zJ<`MnduL7q_nm)?%m?7iQ8sgf76!8r%^6y_U;YShoYuN*iB2c@37LAI{{+?r9*834 z?p4UoWr|rUoiJaZ(m%m*b|u8JyUR&+o?X7fR5UaA? ztumA}%bj7|{&W^vqP^napInx}T`d#5;P6wOO_q>B4$bY3f+-XM*)i z%&k>QdHtLsxLjxrHX4#quJ4N|TYZ+ay6& ze(PJXS68}&D-Dk{y|b*7=Epe&8sLNY)jU}e+$$WZD3>sY?&pg$oXqUm`sa-wny1KQ zkbI)B({LlM={kVu5yKqAf_Jj8!HVrOl*6nj(Qq&zgeIMZbQ5ScFH2~=VEurcU}S!h zXKWqF5a?LZCYrgeUP%MrtW)Sp?;-h`i9mdvUz(GC8SR~QKUC@*cQ(6I4_T^&XhtK~ z)1bUyT%x=>y3pN-JE*sZ3^MS7^pg;OAYT(bc2ezuW3hCD!=wi7m9OxmCDm%W5qGhF zBlKU;x4~r0Q^Yd&kL`bx??gSL=U!)7Lb&Vo$88gkCbEQxU2zq?kof&!boBBASWDpG z?n`rLDKRwt;5{0^Ah5=PKZzw|(ue2n#!HXRvaSOpC954TogYds+T+w?B#+IOhx$UL zg))iA>ZG(1Zzu=XvKtsDr{V7Zy)z|3z+Lu$^PDDV6L&3GYeiJZA^f(FU*KN3YKfK` z@wG5;6CJ1t`vbzC>;|ZTwRC*4eWjxaP*_#D;J2U9FXK68lK`r#cXy>D(DC7^y{70- zAlW4bn9m69-?XYnn=OwM1Dew~@*NN^Rlhn6>F}+S+L*ydZBQm2e3y5b`}AUF9eSCMk)#B zx~C{3KhGdwzBj*Et>dN4)wVf9x}a}ik-raO+U*C%7w8WS#E#LxQhl!+70wtWr*0?c z)a0+PU=P~C<7m*@Z%ps1>NscALd7ODW28mhF}T2<7m zmVokCHJ<8i*Z~Y@S@$OY%HNh>!S{WL`{on|24qDLeo^IU8^d@lm4ul)6p@3R6da~5 zwF%=l9^G_f$LOb+X-RiA2$E91Bj#Bgg?4Zjyo${XGCX`^_*f-`S_x{7{KZOcm@soz zgU)ucqd+y_elW*N0)7A$+^3t?3LBv}9$;E}5D$yD9#X2Ga`dMx{%+w_bU#umsTj}zrJNqM3@|kmxe!{>^sS|L! z&Eji*{Fx_B9u?R*<&9rc2T~*x2n9u);@8>eTc%Y_^svsvlR8MZBR%Vm;Lli7yJ(5D z%dp3koikS?0#3jRE5M2eMfM}Vq7G0cQk#I#@65=kzZ zug#QqDZYv+^W#hBk%Mf(f2}eDt-Yc=dR5*B!Nc$h-AcvOp_;VE?T;Xx``<`k(_8xJ z5J{hi3o7C}wHYkp=4A=u#B~BNA7%5NbM+iN5Cj5255H81p%iw13wHPD)WtRR&gsZd zx>;?Yf9RbkQrJ_8p;tg0W%iSpL;y-SVDlG%QxLayU;`1@WQt=PdD4wM7xd`)0}MPb zL60iPI-Unh;jn}4J?=@_(CMZzvc-NaHPrK~TxL!w-nu?#|I{Q9?(TU+*}?GP!1>6f z1=><#HjNKO8lV9UQ<|WY`WI!dr7=!Ki$U_gT_*wtCnTx^0Io_Fhp7O4U>`2dTa8%m z#V#1k5p`8lossNNGdrtw!M8>I4p96KL|2DsS`B7J!M8o4C%Z#gY%e53*=8blyw^|} zNdVo2{#uEM+Rvng*rScvopO0X&KGq3qUmlvZd874(PwI}1_dQkLR;A4q$j*|Qv1R2k;j=))@n>1T`L2njffgyq~6vr@9gu%BgHCg+a z?EM_2|9RK_`N;hl0h;=GoAmv;pZ!^5VOmqDIG@=V*;H{hFzN1ZIheCz7ML@X7b=yP zXtPTLsZi|T@kF(9S5I>>g%!GH4kpA_L+;rwIa&rWs-0}e{$hIT$3{091|Z5Wm&awY z1PSS|43`evngbt$uOwQz=ZZo?5zP87kf_qZ3Qt}dn@^~cSiSSClQ!`f?wc&3^q`zN zZt=97z$(O;*B`cGMrwk#lqO0qLhG2{B7?K@=`3;ceC@d2s9PZtRnhhtA8;NF7nJoHUxG_LuQE^9E37=Fuv}uX-2>@~=!3jq>H5mInVAhu*>?{vq zf~^`_m)kp}3|Efdyr0*4p4|8?*y$hgg}+=G{T2LFVwm5H=ch>-E9`y=q84UrA#O~H znk*NAxadW^E24OZME^R!0T}3aoQ*RtQLeiKSCLD(VoTKjDoOUfBw4AfLSt{gzJsBT z*~}zW-RrC;eskn3$vr}Id+IvR=)SWBsplwT7i>{`))rh;X<(>(~KMI=*!3uZQx~%*-I6Mp z@-`g$7z}_9a_vIKHHE*8innZ6txOm~M5Cej2!E_7L;>J}HWtMKs4GLBDb=&R1g1rB zp=%w2;}d7_^mHRXKS%jaUvtH*!{EM=OUNP|TK7!T{jn`;{B@;Aos1c`K|8k-c=<~1b*DVI7vP>;nX-O)cn%a)VvONEAY3~YpbuiG4F z+3{{Up#s0NDPqj3LmFdDmd*Pn%&n+CShJ|oTX1FS3-QMm`#5geW|dX=8d1_#n7~gh zqYzUKQyoQia<z)TlnN!&1YpbiN?Eq^>GPR2#dGh!q^am%(Mo`2xMlX~P$)(}cXwNu7jCsucXNKzR`Hn*+~5!?h3)HP<(1t5 zAz3;DkM)3hPlR~iu>$q^4|y&4Yw0L?seFFFh&ULpEsA4BL4FJ2 z&h+scHEy5VXZGunAziEt-S?s$NLM7H4^D+W(>^_?ET}Luy8X~bDw2l-;|=XEH-(sk zzIB2QgQ+Y%(s6l$knG-#SxdIsW}VnN@HDDlj96uwGZw5xpl?`qhP~Q#w|;trTIjEA zAj3-{DV!$xc-tY1c4uG~GuGb{9jn&-XiQPmqG-6TCt+G)vknY??7$AYSkf!%buW~P z@7UI@GGkHS2!%^Z-%78B>SEh}tz=hy22UQR$Z7TY1d%RHVj7Gt53v|Bd|mg%cV6^3 zhMSxf`^pqy;(|Y@fAK4z&sf;jfMN%0xqv)gT=>GXV1Q)q-#rmoa%-}~F)xWCawl0| zsa}?na^@LH)&BCLG>apt&H3c}XG;6p?tRV)5CA|A=s!x||F$)>GuDfTQ zox9ok*lyCVEW^^JSm~y^6HmBJ@hsh0QSOGxWOlKsMG2FQJRkLRs;!eqQJR?t%u~_c zfyW234HZg4yt5}4(}#qvI-k!Xg?d773Lkx$UX-`JX=U)|zDkzZ{-R90Ldr z@sc>&hupL{7jSj!UDggh3Tw~{#BR|mYbK^`Wp_us8%hYdnjBU z!8tq*5z2?_6rx2ySvXfv861%6h-EFg1PrXMLJGbdJzY;-PUTQy@vkVQTPqdZnH4&^ zh)9Fd7j^B3oH2q`L3$-80?{+sThE zerZ^emU9v03f&hknpzRh7{;6!eSJMr8d3N~Gw7N;VU%4hXN(x8Cj{bn8s+Vm+YM-r zLUDQS5>$Uht94{|;VDczR%3W6lNi{*s*_;v2fQ(F$+Qdt7FgETsuwsT1&30$sj%`i zhWR1<>hLF#)6917R~pInNeTo8c~UW;ut#wRzO2byr7W8}-t%;&Z#6h}s_REm56#z& z-uLv^ORI4dEgCx-?f1oaylAUB4M2@%@aH(=hyq-@JuiQ0l^IG#0#F1XzkUZW}~c-2W|s z0?tO}whG3Ewhl(d4*#fWIjdO5VzDE9&(vb%Q_&#Nu$U{FyK@$k#1oM!JFPxK3r5^! z408SbH~LiS<6hTG?HiB$TmNiaK4zbj;ltxlL38MrC^_x`aY6k0L;xAU+9IaObxsIr;Alq(1N%E9xB zbk*VqQZkM)Ni+@CHg&t$fDKtwV};ac_RHLOg(9=C8&GL_C-o|m^nP|(zgGE%`>c3w@Wauj1*#;-&%b=Is}c%LM8btdqN zP*ICP{)riac9}3Df&1^L(=_*vi~tF1hFLEvRzc$+pX%g-dJjnNMj6Ewl-h+qXXpv~ z9g6S3`5!~X+AKO^+U*JYjf>SC?~7|Djod6qu1@F8%yI^2c%HHs`ln6@R?_n2P76PK zc>EN2B8N<_dnls^I^rq&{EjKpcL*>qSG7u%4sjDJBJsjdy7p$+U{13PbpdCUYZ(}M)Z#p z5_a!R9Ks}f*F;&D1`Z*}*fz<-lw$h9PzF=@M}26eH^Z;6X37&;$A{YLtSKy82E3z6 zkj1c{DAQ?SqDzae3~Rgx#o4jG*)saIF>bgk5v^r)m!Y_PH|@s!Bz$|)%ybe`!vxRq z?)V~Y%d7RN5>I5W0hl6Qdyhau&tkeFhZOpX_#n-F0d67ii~(F54CH!K zL0S78FvW638@ew=^LS*q(R2_btaTph&`%W`G!+3tuV-U!M3R!{--a8>Q(Pv88}(qk z#Y=iUYxmNrn*XV}b<$~qv#!e`$fPmmRCd%w6Cf-dnQ=hOlL`$^xCgZ_2fL?9pY`?_ zEL7{O0Y<>kD`lGq<+w5BkcA$C=Qb}rEPz~4U||Kv{dVwCTJ(Wo{&VB-6(~qp;~sLic$3dk+2vRa3TvfJ8J2>IiTR z=$$W#$Wx3c-L7!0i#Bd&GKC*DGC$K!M#!BBg(>1=L+i=#WB5M!eVko>wtQXU-a20w zzv86YEA<{l&ee=Ape57^_KOvokv~NF<~x0sn3sRxYR69cbXICZ!Lu0A{CU^!av~b2 z#d~uw;*XZ1pm;50;?t16yK!C<+J~|e1T5n@e|UbRK7IK#3$(>AJT%XY&<)KcOa;~F zWTsfCalz?|js%LLe9>R1Eg9stZH$_PB>N3KQrz5fxrnyKp-191Y@n%PuAtr;9UA@l z2>{1D2VXV%Zc&z}L*8J&HgWm$0e?!)>l2w_-`|JhM|Jw1!Vy+U@*1~qpmS~Xu4ot} z2-CRn;}B^0ld?hkFJ}eG!}mwEQ_^MfUPJ@xXj|ZjmIBQ=S0El2b{7vX`>wb_jSj1_ zM`yu*+yeSCO$K8v%x(&daPg|^KfC1U%66!7FN^C)>K|&hDhXiwY#y1jdI-unK6xY} z&qmBwX2{j{>0^#xOr&@Z{MnBU?w zTAY>TxGqpP=7Z-MEqDgre_VglwuywT+Ls1Yz_}XLms{BuR{AgLwa4o+uI6Pnjz%$E z1F*r4h1iRXRvfcIxTR53g_mx`G9S>^Th_}4BDn*?GSw#%BEL|Bpc2FSyi-Dl9J~^d z=>w;Xj&tnrG}{Tr+X88XfH+QM#~w1~El%y}!Q73khq_%vg@P;l==(|Q;n~ACr}?fI zcrV3)>tyK#_=6T)O%d;2;Hl0;ls03xZ&e>EwR?~=R?l;^vQ%quDwu3+JTJKTVP8*0 zukF4faNjr{L=v!%7<9X*D)xjSuxh=&b{XV|4)Pp-wpC^^9*R#NcqH+QZvyF#PadX? z4Thk7Emu-A1Dc?j9&l}twd*Wf$ekj?L2vV(U#ojq$U`pwLgBli|M7-D-L1Kyuf6H_ zuUy>JrSJK=z_OvQrKhu{r?&`drnoTCU(qv<)U~)FWG0X+SLUn0g61W~YXEdCmt|91 z!K%D`jdCYZ+7WdXhc?BnKFJ;_1yiQCrdS?0sYR9zq-ENLQ90odoW3%3TuTz(chHFA z%~XLMMCoRIsUM4Gu-8~jcf6#G>J&G&5@g^8Uagpl=ZhU(X)>NHx+fy{>z#s94XYNI zUf@Edno)XT-0ss{ZOcCy5g+W_7+ju=Y46#39Zv{0Xz`?}VV9-NY^g6hLrVsy%49*k z%CFsoQ(fHFQr)GkBw|e$sq*UP`f^YQnXL4mk0@4;tY1jD1IFRA>!nRN&tHNiaj4HJ zq-eCHcz=VEN$|7h=!H|Y&s zg)ls1>=3C=Ol|oVRD)@JHdzAQ2vj>wENyk^Lah3Q_z=f@hG!_g%9a%}wChudFD%Js~g+0F#XQ-5Rn;s5}xEHZo7sNe9G&XYs&2ySfM@r zQG2r>MkH76CRXTL+hp`napO_?UL)RpvjAZGdtGT=XAq9{zzxxb)H7c_@%t@rC;f=; z3OC}7lTs5p83#r+BHi^+;+OTZ+}XDz=rWja?2>VQKF~+PhL)r?RgX!TX3+P0Dtr75 zwQHaRU&by;!)(Y3)W?S2Rs0jOL)mqig`Q27V%A-H-@APvDj%eFiS6F>gnrnQ$bkhz zkB?9vTwiGIK2d;ffmnQzi|8vMcTx7{V@B_Fml9hhzn}NV=4#;RELBnU^TDroxkQFM zJV_w2gER+KR&y~i)u+pu4ELo8AnP}{n26fu5%}DO>s>D*LV(wrqZEK`&^$$Xkt-Ncy!GPd%THAJ~K&3B6S&U69rda&T zdYk1cUtt-X+`g~UP_zZO3GwG+=8aWo!x|TU-+_1cW&8A@cyv+99C{ZsnubK9*sdVk z+hMsf73!5Dt%Z-J)PZyj;aX2uG=k@VkvJPRmyxNIdIc;-#PB1D@eo{Hx)^cEfixOF zO_Od)tt<@cTZ`_n=6?hxK_W0VNm6Yxy=7?;wi?D@5qJRXy3Ay!2vnpP$*O-EwxHO+ z|Ar;hr()@hV-v378E0L`mt7Jo1dbS40|t=T!-pRJ6Jg;(KRv6Fbr7EX);i`~?@o@} z`dvYwFcBFKbwpfNe_%Bg26uml(6U@g9yOeRfZbG(l;)*RH-n@@@29B*(Ez=1?Xs8S zi^NMP26O3Kbvyf!^*K+mBS2bA(Mqou&`b!SdK<=e)>4L$>L9_tds9T5)ZH@QM zZmH$)u-5KJa7c;pg7mv#@rxCXVn~wbkFhdR%8e_w=EzwQ&=C?Zem9WJ75k01SpE*A z6|dtFJBzW>MyhteY)q4K0h-DfvCz!GOmBXJZIOq}OJCF*)Ib@6bhJ!%T7bg)MHeA* z*c~e)RQNmQ589cmz{B#!L9a2l<|+p)kXj||qT?(lG!T46P$%$U?s`EQh$n_8%Lpp` ztfLp0jLi!{JW^;!YFM&2jBApS*M@ z!mF^32Y96FAo5}~=ygeeB~`I>uTYU@#s{hkO7}q5=D6)j5ti!@rNrWRHOUO4B}lo+ zSa0}z6!K;7hC{jBW^37_1}*)hlM^wVPIu}G&oDfEjBN{bZz-ds866y-fNJ-DaV8F+ zOZj{-0Dw5;|1LL|wK1^OcQ7)yG5v=tMXTxB9{xt~y(z^|E|v5!LS{cxE|!kS`2_(lI znA(0u?Uf1fAWipYAw$pyDACfbv{)3{*{v{83{vPqBH?O2K5{2LVS18f?Tg-agjKXg zA81?pTB6pfN0kXs)6#!SCK>y)4kxNpYS>%%l&t3d*fkt6e%U9I{pHm@<*CLoAbw(H zz5%4z^%bm&^PPEtVypNp@%7Qu7>BhDoOf zex`2$Kl|%uwWft=vrGlJw>A|ip^xb%q9L4iP$@pVks@CN?w2n{W9; z%tAPC$F5~?Px0(zLEQU!U9$SyffcXmc#M#)SWLtLm`PU%q9Kq@pbq#x+oYnhei_9g zas%T{_$5tos1RY|>E2{jfB3Da@KOb;(F@7CSv9G|y>2a1vkh(f)viZ?;#I9#m81M| zRkKBb@;-AX8iGaowHv;r7XVsefN0O;2G$CV32T!y()J76%5mPUgGD41MTm5J*hmqi zF#v>Dx=EuTQ)KblprYq>7ij36ug$KH{FE-z6=OlM^awn|vk`dX)+*ADY73*tM+;v$ z>svza(cqPf-v?f2i08go)43N-IyYNe4(OEeg@h~+bGoFS_JAf~KOmbE&c=Tj1AM?K zL$ZS*=&`@(#J|Qkub~$$^?t0re1sMZ14&O}3TC@%%?yH9n+XRdLw3mR*TCGd0?yUhJXAp!C!XmcBm;*3nEvvgpd5^QN55 zcWq8+F4tU&fOp8NB3X3+tC`f*e>)U&WB2ZfR+q*Qt`(@9W)#?0Z9pEbr0Zk1rpVq~ zsvL$n$hmyV&rtzT^}V?ISK>Gbj@!GFsu-LR0fB~^(zN?fh5K;QlAsPXtuu`}c!w)4 zqKn7eTm0hF{LL1y?ETf&cJ3oE-a2Q%gyo>ng|S2}8)Bazj}+VETZ?wiYDkk$>It~z zqtUFXupFChAuG1Pqug$<^cj~pb2eEz7@YV6*kRk=c!{GsC6^#z({g0OEU3-TYdho&N8%XuBp3+GvV3M`eq=~*N#q$yA57(~YHQn7;P44{jI9}h7ew|Y~s5zm7DOh)?uTKRT^UqD0iDzcrnCK?<@kXh|SUN<$ZjX zdg{}BVzEWGr=CQk>XjR4As}+bP!yMrOAL@39FH2!Ls?w*&)0bx1{-hAf!yKE61@Di zU+!s8jYu3z2FTX8Ga9d0v1WAaTs50(mZL8FEj=29_we9hS}Qtptx-H6+SRpJ`TG#e zcSee*>k-*PZ?EQW!M35p@<)o}vXZ5zOjXpxcJA09f8pvzl$Z0cNYsa(Y zld)8$W%qk2!sQF7_iS4Hy=eT`3YN`69p!J08K`~d^}-#YU+`2nDS8>4a7ti-$w|)7-bv+ zo;1H?Mw!?cMi{O`Mf~N}0=0YFGd|%#TPr>i1RQoo0_3Gwl06*bb|P-Lkl4%7y_I<- z&=G3?Lt06W>1aysX$mZ(XAyQZBhR6}{1u<6zC7+UXvB$MWEUPPLq#PFn6UFiJf{gJ z4hEwsF6$%|En&99wr0lHaY&w7rH{g6N%gPVa6lyR|*ruU*&1cOB~rcQ~aLvlhQ?VtlCvl9FAS+@GF}gXw_BX`Z%c_FP&1lT8UJKT2_sL!Udey}ZNb$b01bt)u1^O6-=y1XV5$_5e^ z8gkETI;f?T5ChRyFtdS!g>)i|tXxtO$$iD0rbc#(oQM&hEo=7~0+{H>Z9*lO_&bdT zG@hy{Yp)h3k)y2MwAckK$DWxcHdulLRMY+kqT2VpufwY`QUxpqZwhW(OP6tTT!!q` zwqn3uSBuzM&2Kh*W!6-3?U}EKE!3Vj_bCrwfPeZ|?d1T&7YG1=JnVl|7&f;tGIpag zbF#MjS5+}v^~YwD4dI(lw!i!j4*NVjxqT*w%Srx)AL<|)4eg478h{3mcod~P0p+H7 zJo_5=CF`@AXAmywdIB;hBwAnG*vEC};`W^zrtiaGtu3EdkC!M?Vnk$jy*GkDquT-h ziPj||lZ+qJM?ftlhQvS+6|BjD*XM1a=Q%H>~Z5|48x1^?I=?rSO2wM*JVs0a_r31@^s0^5H{eNo! z{PT0S!s4igZ762npiP>amR(F+5N&M*4}$Uzpy^;T-(MfKz9T-Q<#Jp~JnX+K?G8vr zjy#S&2q$@j+STr(f;BwzrLrUIbp#f@HPaf-Cbx*watKbXa6Cc&Zer|*n;}o z(`Ub;YvfwtDrl0holyG}fN)WuiHRAnV_f1IX8Q-TJ}3SqwQc3~#NgK5NvCpWS@s9j zUDJ$MF_5aD=h1z@}mgXqo$u_R&#?{YeWJK6B{wf zn5z_O@r$OSNX(SGOect$EvVm}I4MGZnR3D{U-alGeMbYi@HZX*6_b;TV615=tUB`C z4KvSFh-B0^S<)ismIzdA5*ecLt>QDIZK=FIP!Cf2VjT9Ak)6&kNdi^%AaR-h?1!j8 z&v~w`7CFe`)&lnB0n&A z^=7X61jR}vF>1}Y}z#O~|enLNCM9kg#C|N;@665w- zyX@|8^f`G3!1CV20FQ`5$sOQihmJ(X&y}7!FdINcO+ZVqi#N~arl+_yvP~oyTLVwz z8ge>y!;n zaqLB{{Ne>Ny;%TTwFxR;NYuS3@*G$J`i}jaR}h7uXGuhHRGlWr{UoWIBdgx`%T_adw;UUbsQzk*vYZ zrPx?;rrpT-I!-u-F2W31Ou_`UIIwlyiiN6D~+JCz= z{(}yU|8_Nj^N3L0oV6I`eyY7QwmOFu4v=3f_0bL_OmAOk|sjXP96 zPNoLQoX{5*X9&{D{fJ66Uz39&>(Ms#c<`K%ZM7ac%dQ#5Hd~ZEG?@G3D`E*J0CxeY zl9wt%G~LjH>>zu1+&GRCpuw_-u#OOw#7GPH6-`YUFehyPbPJzksWwH9#CB+JHik>4TIZ)^1s>dXokyUfx~4 z2Oy@{TES>g(QDJ)=L~r1;b_VlsTwhV$V@A^Q@B3FUgGXUaf@#5=)IyJQbkZx#3+Q2 zE|BtB>x=86(#AqKO0T8v84^RiTM_f6!r+|T$vmpZ=g$2nAYGy9(u>F5Tl4SDOP-*g zZfeTar@E@#H?dQ<<47&6KQvx}Ur9TZ2lpng&abflsUc2dpm?yq+ByEa{)3rx8&h)| zH#)<=Ip%+vl(qb(O&|k|cW#q!T?OyuN{MIXkfE<3(gcB@yd4oY!P;7ncYYmXlX^I6 zuHh(eIL0;1;Kvp0??#G#ge=)pMJ8g0W5tDNzzZg8YH~sc=E)gQx$3$EiAH%PqNfU| zXzhu3hsD|NwmxS0o_ui8ajatfTM>dZUJ6^*1+S^!{GPUqi-5T08aUQ~+vejK-f7V9 zBQ~$T2cjv(^BSMb>qQO{AWvUZiJ*83K-M^RyG%OSK+TA3#onLo#}9xyF|N%~@?(F> zaV+_)6=O)zh)rygYPxoRu8lonakziMk3*gF$Wj+RysD#TE1%feqpYc~y*;x=cmg?u z_GJ{=ZC$RoAH4q;U+uh$E9UyE(Wbw?O8xJB)lT2gQs310pJwNrFm5xzfDm%y9YHZ# zVQ&Bt_B@n7>wh#N#6?<9OP>#Mcl{)oQt-_2!+v3_o7+HxUKRRDI|<9pISmCo0B}MN zNEr>>=&x}_AOUO^s1O7sK~b(y&|S7xn7ZX0$FgXqwBq)5E<|sKAvoj5X6$x0s6Q&o zC^?Ty2@5>n9$ms$7A+{mWhI_+K)DY9<48^P1 zYQBw*T}iR7N=ruh?Bw<{Y<^+rXI^DiX-GW28xX~{u;gzi(-OIqwY>R+J{#V9;xPkE07 z!YM|AD>iJb%;gbBy`AetZwW*vNG>Kjn=d<7S{NiPI@Px9wVTUdA;MFl?qw3~{0tBl z_8RZ`=$-WyORq{*###Q^o_81zwO`aPie&z>@$xmDf^^XmfZ|>H`d+s99(VyV!BPp+ zkTBbnBn)y6y6P6?v@!N(T!4`_YptaA&F`Wkl2^QpC?Gn=JN6q&x!PzrK_eO^10?$l^%JrStcW;M(S~N3Z<1k6 z$vTA(wAv-s%UG8@Wlv4kTF=|9OWj=Fd~qhzmc)@h*|vFMPwi7Ffvg#)FECOX;eXUl z0DI!V54Ww2;W)zcAMVu9+66oLx8)yM;0%O#V<=1nTI6MlpLD~ zNb>ykf}lhPg+8C$hqZl^p8f^h|J~O2A8>*H4c-55Q(wP#>=+ar001WUe^dwfmpD^n zYjYcO#s6g(f3qR~vWRU>PsdF*q@UefgUWHGCE=2*qFTlCwunQ=Ei!wV1n$MVH=3{@ zk|C6FVgb&G!W$oGKZ5>Hl(%_vg;PodwabUrPJ*Uk6MY2xHvdC{G`GjJ_w7WsE=a8d z#vZdlJwyey0S+jWxmRN%@++w_S+&D;m6lg+l-KYZh5_}xpGXDQ-&vJxU1Z-Rgvc8q zc%*a>Qj3h%!wnPS{X^OVXQlLibqj*!Wi|?{mztvsT z*gH#AnMkp$o!a>+=U@JJ0 z<=?wJtQ(~GYg9s#0WP^V`BrAS9wrP6+ zi99lA3%APtxV^VQL3a|&Oz-Sfy?T;5e6Ftid(j$~@U=<;Uw+$u+_9Yexw!2^oPJej z*#VT63X=F4-74fl`9haU-s!dL^W_bWbnij#75{GeUobk|TY|GgS_}agDG05R+gaG4v0=c?trOL8Kq3=!YR?hGUjb zN!5Ys#*<0jaOYGt|CN$?-i7o`-WTNvC~;y^8l4!082nICwU#r?Q?twKBW+5cI+U+P%ujO#$Rwtx&)j z5d#d-@&+EC!_>K~c|?VstV`ziU7t^PcX#+Ir1rifw~8O|Q8PWuRES6iE4a)@x9gbt zgf*Q&-qJX1q>SDc>mx(wL4Q2=KJ-ItAL8zf z{=wp!^}(>YO>-4s)S@{}ytBy=0Okr_J8j)FzSc*Pq>>k@RAu#AT>iSOw`Lx-&*V91I?rkhYMZi|hkEOSpCb6xClRF}j%$Z=&Q@dn8^ zF-`}&M&@QlL6oNbYKvu<9WnGTbs>QTQTa*=!8nvu3B1LKLXAlMLh}`zP?c_VicSju z&*mSARTMbXisT(JJ0I9kh+A^XQ=6R2)6p`o_gTFz`h5 zpI5bFvl8x08Oq-3UdYmd`!&)<~_m`qCGTKFprcI}3r0 zyfN>UIFD`9P}b>~#H8jb%l*XcWanh3$}ghH?_IL&9S!>kLQsjgG!t|HD=rd1Pgj0P zjT|$DfRtxE z!H}Z&iw(qOdbnhGNWKU@C34!F%oAWhllUQj0Y(c*QpF_#AlMQON*k%aUilPL0z?p0FjMtW} zM*1;^VBdn&fo>2U9pjzHHOe`t8bJ%t`91~)qoizs>-u(c24w~Nld)C8P@3w<9A7^I zXHM|As08%m+wF)Ex6B*J#XhI)P7c)3)J1p!AM{H@-BJox=Cd((U7<>p2o z{>%!#RBX${vXBLX0R5OW=(Xz?iuXu9I4szlj3T#k!zhlB=*WyX8xKCMK5wzpkUW#@ zTMqgNGvLm}Q$cZ5!Y8ly*>O@ozbcmph@AVFMfqdNbO*188{NRUa`14W z&&L?&=_ta5ib!hl`-MdY+fhy)b%LET@Fq6G47> z9|_Xo3+#Jl!9Q%Wc9HlODdQb_g@lFjUP$ybhqQ>j@JQ9Y_ez7MbB1$yvoX!6CTaAq zMr$Hz(K=Z8o~|k=ZdOCI0>c=a-H#2s?4}}yQXk#l33o; zO5$FGf7}JV)poNMv9;7boum{LTNMnxyj{5}8UHB4wB*xNTtG`1SMmO{4LHbNd;@Ne zuJ5~?6wob+~tbbMFb|8>=po8+%sS6Y+9n|~R`PU{E+keFjOb2ATN#FgSiN%I zBZum!ruS# z!hS?~8~YtJKP~{=Up0l6!x9aaF^y*IWJKP{^9dOK#1XuF^%Aaw710iz;dwrIXrnq_ zwZ4@ni?s!wvLWKtTBL7zW76>pojn*El6Eo_k_P;uCU6D@sCs($dHYEqPxOg}<=4#V ziN?Ra%EjoR-+t4jD1;3vy32*Oo2KQKz!Vo1ze?u@`Jh}Y)A_Y3^+R6Eh5Y9RaNglWf!7}V9)VVMl6jzPhlYMW}Z9k`xb#rIpW)=-R^Rj3hdO692z_=?HA6g z+TTfrM}#Uft&fMZ(z{-^XZEo{j}=j#H^KiIs`-qJURM6Yj{gaIWd7eH2UjC2TaSMr z`+smXD~tci9PAXB5&proEw8W<5K-jyti+GlYETeR0I?Km2?X)aj!@V}QB3V)o}a(~ z)^dw>sNC!-*CeZTskhX2>yCw(7i(9>5P~cj76P#A8fOg28cN`*rLY|O7AcUV3^FEj zD(MW(@t^5#btVeUPPzP)(-g$Uu9$A!Po4sO) z4twlsqNh}R5gt&wJtUqpvw;HTQj}-cGXDTvnK@K>E6}WZ4?%(1!pr(zn-jcSvayW7C#^nuy zhpxu>g)0H89Tuz$zMU55#tFurWcDfl1Y9go8th5fmqK=TebU`O{*`f?T#3;ICW|>n z5z&Ot1{7P(x|-x}SH1B2$i5l!t4Q`Q1&QD(y4;r@YBbPPoR^?Y)m_vdM?sMWA@*c6BR z$u}5KaEVZBOlhILFr-S=l-lN&H{@LpEQXpzu`{482<>iGshcI0`p={ zI7&jCIL##e%D316sUE?D(2Bl0gxd4Rg5Tq`q=UN{wL#h1axW&3InfHHj>=DnZ=-jZ z$6_8?pkc&|Ef$pcWq;r8hA{Xk|C&y2oHRZi)y28*HcY}zsY2;}=1x-4nhI^6W>eZ! zNl7B!kqdo!>*6s{3O{OHRet&;rGj9W0UgkUrs%`VgE5NzuIz3HK0^^pHU9v_0&ik; z_lI*POx{SC@HA5rP|om;h(3jj0Zg36HA79aJUA)a$fKPEMLQl$TBbQ;NwLD&M83dP zLKVj2L5Yyz(|h<8%@;2&GOp5y6Z3`};jSPC9OqPys!Y4Z5{zy_=}vVMQ;RVEHbT~tlL>_3)kM2xwZb&lX?pW8l~81}l9Bo(4Bh-B*##$c@2>6E<<;5(P{;Z)S~grEoaWs!Dp!T7 zX~V(#*AxHwk4t?p=U8pO0z5?R>O{Kn^7(2wrst$%KXlqanBtQfi=@{8O7q^;8(Ail z38#kY!3m8XLYIeGo^{|F+P`PJCKTbIJ!8+ASi+V-LOc%l=iJe4#N{a{R}jhF`Ete? z+>I+lJr5Uh%(5^LCYv#nkP(a6_p=LVzQJwh7L4r}eqKL%L4OVHB&I)!qH>Y3EP|J{ z7n4dSfZQ?kB!TZ6QQ)W zBNLV@Y{>)j?t()Ce8{%QgwOEj_s$1D_Un(@rl?HhSx3#X`*=B>E%$JWm$Hv3 zM9F2bH4FOP=hELw*WLWFO3-o&Qvrp3*c!;v4H#S())zk#*hQ{*CN$PBdwQ$!ohDpAMM| zA0?KKBC#0p(X|mlPCjAuSy#W-1&{Tr9+6%cOX77hlFM?8>YW~B=vxHJ3HJ92R`^Bx zJ}|nrwEPiT(4sQ5=tg5y&(Q4{??f+0A$b0B*@L-go3?@7O*=gGh4VP-z|G%;(J-@H zUA0K1PjxI}T#~fBUOpV`C=0YkoaD@kkT0esjo3<O%)-55yR^veGy8_?EQKO$U#M z?|%vcz%#7}{BK!c{xsy|{@ut_ViEmH^CqZ+B)_Open!2aXH_)SS{2Jrppa0sa9^f#s{yZHkDJerYf}L^Eu(DT zvuuI+L`Ua*HZKUwaQdBUMR=@IKYq@jgsagFf7aS<-(}y)0$kCh)$qM~CFqq*8I}DY zNXwJMdz>)*k)^K|)epP*iB9c3|5~l_IbWA^DV)Nw6}Q^88SVZB`G2*{|1at$|KDHY zZmw3g|4YstPeSIXj}HX&p$!DY_TQ~#>tJGJYvpa^YUN=6U%NxEu9nNzXsiF9`oJec zDe5c+-q+t$X*tEFW2R<`5>+v8Fu7G{)hj9k-t(_9P=>M~Wom zH%9@`<;)COaQPQeNoZbrZ6jenH`sR^ISIv`Rvv{p6x}9vwbnfS$@s?>LhyGkM_lt$j#l3L(b~%L6@%b;czWof`H1bTAWyvpxiPY##dfMTGDRrKG^98)7(@iNI z8*bts7x$*JXfz`v&1ADW-pB3qbrJ1NfVOGP6bmNE83wwl`9^Jh3O^e)QxvQjg4uO^QdN8i z#!5im(Ky+d$jeT38grG9Kl!!gvWoVTLy*HuIJo%aB(KFy?eVLW{G=EWoqeX9-2&1j+V@_o{*FP@7&fwQf-4Fgzf!@^ zTL_lp>~HG|GgLAGpfZdWk#yW^@=X1A@|G3#lMd~U|#%Vtnl+$x|*NKUtUBI z_dWOUc<@8i$#!Xd#t-O(`JSf}94`n#%st~_jOYSXlRQ?7i|bpB2~jjd3mDKVc+pnD zn^`Dnz!1^ohMoBX221#V$+IK-4xQ_88j?>N4$^`jxA z*cl#zkBDB814xrR)g|t}HfjNFg~?6E?mXe z4epQrMZB9Bg|6Q?zRDD0CR zPU3T*M>h4q5q3@0Jg2|bhn(8+|A@v&v~Wf48%c9c(p+NSdC_i%CP$UFWY(ky7_;V6 z7tx%(_vXikS0#&)Ca{<5yJ_>4(JH8sLhxkBr(!N%SDN$vv<5!WUKMSP5)eXm%p=U}i~iasqEJB14W^_bx1_HIZ zeY8SWV_!_e2E748%7_8BMkZV!EI&Y8vaZv#?=0v+onKw#EkKDKhvB2Y^D-&*6k(?=v*ax2M8QoczSW48Q|Z59yZd#T^F zEy;1@!#o$S{BH$BFK(vtZS)ykW$L{varP<6;$TwhA7=$SpsNp%{K#9sh`S)(2xw!N z-otDYplMK;Wu**pzkUzoiHyUy7W};73ie6*KdbUVL{F(Fd#e?N+HOSWlk2TMz zTnbbN`Id2;U8}R;<*~s2DoI&Kcbv!?XjaIX6ik=6C@4`MAln5h2rHnr2mdn+LPev) z;GB!SIM=VnWK|O&DrBH>v}||XrQR!*Vf4iMzc-}Q6)NEnv?Ty0qBJ8mYPUc(DgJb{ z-IC8EMx4Fhy6w4(MC)PC0Mn(=$7*Rm99^16KX@d0OD88HchA;Dm{O`PMPFmY_xB)R za+M5nv(tUus3uq=kT@j3<`~BA?X%Oo+#jzzzrT1<87>R#lNmVDh`t2nnb{b1A*lq- zmh51D%F7X}5=)6`&;%%-hNjOchIDX5S?XKQb>s>q6a)wPin-Ro;%c6>*(y**LGk@} zOiaP;e1fqR`)ey?{p<&Vy8?lnZGV$$bLxfqP(!rxnTT=pf8Vs%>{HT()|X*AM^3X+ ztLoj&Bio}f%ei^@C+OYF0c3%e_KcU{y^oq60{Q#5ofU%X`r1X>QUtqlMl_V!hyHe37fu{TW9#;?jt$k&bkmR zU{s7V@2OtZy6wMn3Aca8-2T$XW&ni{B_uEzc9Cug-|qVR{$*|Cq=KekG%BZfLh<(V z{*K-pntR~KdJ)0^5uphrl4l)x--!e>(j1@mMC&hbstg{loNbP}y`#Wa16TN4a>3qI zsvM2tuWHt(49g7?^Iq9r4&2#LPPlUWJ)dS5QDL08Gc?6a2hU;jwz!8_y5Quwa}-Xo z({v+#0p~Oj8TXnA9gv4KNNbJBXZ;T1khV9qEUS3(R-b!qM1s3)$y^T}M{q-3v9KoJ zUZ`8M^gNc>Gu-0IBZXRv#JfpWi@;VoU`H0RH^+C~4n2_+t~y??`UiUH@qafZql2}SoDPpE;((7|-dTQ$_Et8V>m)Y`I-1j$wL6Z+a-gEP) zUC{JZ8E`1fV{X}D!C5*o#Ucfwe#G>op|v%=WhtjP&{G0C`Wsj*_zn|wp>(mdY_>>3 zd8AadKpK{cjqs63rjFpeMd)Zq5Bu=L-9EU$$@+WN!W{&j0PG)>Vg_-f10z8C4aypMlUQ|ml`r-sK&fSgb`e} zv_wgeCqteg4hGib{GB3O{l?JEnupRAeWYHAwp@cC?$k9yCGn^gUQ20Z9DA{gGXNQN zq}w~h`Fi26Koc<0Spj`8%V4=;4yJ|aK}LA!1QV~s2Ez`j|(Z=e;*HN4zl6?v;e zT;*0;d8X!7$BSDqIUOfjZFy0+I*Aqak+)&B53=ByIjUjQ=)AwIgpeYLaHRs9WocM0 zWwzrE^R~@fxc;YHLMz1;4n`}M1hfH0cSA<0{PNvMr-`>_%m+%JhzyZZ=So_$PHaiS zS^C1Kud(Oxul~fHhcizgS0gwR21wz3q%st6Z6UadG#}wW81Ixq_{8kPN16P*rA8zJ z=}f4jgJ}WUC4lxO>`?RRG0FHSi$AtmUB|SHJ6u$zZMUL3>>|p|nCjbPaGKUAV>C@K zISSfKj+e9(BDzL6S;kF$u_Z!MCq96fFMUvJv!UYUZm3h~r@CKxel9%zPKHuhj=Q z8pgTWmc|{b21_tO8;Fj9kjqX0_&5STKckbs+nzWA$LrqSaWFH=nKN9=AzwhS-I}ah zWTfwgMTML%Kxt?2^8pqnEwoMVv@qMCCgwBEV!cg}H9C%6YnYBTt5Zt$MEy%xwJ@{6 z`?8kI|2?VYb8}(j9!Oxyo6;<^!f63Egrph&wNTppfpb1|h4M0+D{VnKj~Dd(ThJQQ zD*jahzjB6amSo9p;rfG^Hs%l4qcuTZ=&vq85me>|`0 zT=FzE4V#XxPSZR=rWj)Nl$AuXN4dF>2}Sbn}caFtii5 zF-ogVF?U~S)n4(Lbt6_S-s}t2$~fv;G*i#USd3HwE23EV#Kk_P`LRk?G>|rX{Ht;J zk`J{&P+-hC$2GJ5wIj}rGjgLx)01;FPMoWqC|R`HCsp1)ensa`o$O^}W})lj-iM}j zGAxJ(a0xG>_$G0KLnmbS#tcUI0{Jq-)S%;naEZ^Ci0KF>IzHgjA-%Tih#a9ulh;A4 zv?y%AGS$C|XW;T!)_mliCMC)c9a!tGpBP|4RTEmx4K`{DCtsWUoG|zJDXcvb`UZi+ zjV@-FjQn%Og=~^wzi{0iIj>6bh@3NVN$wN!shE^wB=>}x5BH5Q$sZn=;Y5k(nN1`z zG^;%*o5<-m)*KNPNDehETV(b-vY=iDG&iM)8dlxZW5QmrR&sUC&(D!fw;jB#yn`7I z%3w{8TD~=^-rE=6tFga9o~|0o79Lv@bhl8~1$_;^Xro>xC2ASoYKDcK`g)&*)BTk- zuuW)#4m2oYC}i2rw0DABEO{L_d?~17{Lo(01PB=Hfg*rMgk#jJOrqTWXTf(|bU3`I z1->$iKPku)UKoBJ^lMIydjeic6yc47#dHxf{4C%S?kH?-n!?k9oF`nDfC zG2hM^Xj3~vsF4fSXe9c3wS^M%%m^;|1v7GUP^t?~WZzC)ls{>z=xu}KEiekE6am6* zP)bHjHoO*C4t|kaU$rahKIJqx6b4;p(rOuu_zlD$MCkHJf%7_UMA*E5vXh`nWMs|A z>=QXC6anBa5$gqrMyk0hT{!i+N*7>hnBlx!;zJXP$f5~kq=x%#Y6KOhQSHcwwui}l zCK94kH2CX8#II@0BNVv(ysXNQ2r1?MmFrq0{#9x$=Mh=Zm_Z}yt>}~k;O3V16k>BO zq56{@sN&=n&a;PZ@&k(ce^w9hvZ^ ztzp&ABz?HXP8|76O>zPJVLC(uU(jDTCQUP?uh`_sp`c3aH00Y(VkdgtRK~PzHkYdm zNpj+2LWf6+AIXuuRl0DJk{<*ZKr?{Q*;@+#_W0r=e`Ns*-RRy>cjmj~iVnj-(J zv4fj{}SuX*I`dB!JbEaUOCpy4oVFjBS28Z0?-N>Jd$ zYXB@V(w&XQO>P*q(}j-^KYgqLT=rT2YyufZ-Ig8Dd9T!mX@Y#A9l7dS zURu>mJ<4hK&K6;r%k`-#Gf!kV6kWUZxt!Nqu;!`W(3fDu>gx)=$}PC;j{kB$cQP#HX!% zOo;o_i8s<3%w8sKDjr*xY?FImU=_{YzdOJ5>s?sD06~h9^hV=n4i4M-Aj%nLBRp5_ zKI74~ZZZpzg2d)8OOV0QZ@)BenELv3bx+pYgrc|^A@kxn-N(xP*zl-6=AY7A6pT8} zJffyu(`68Kx5nYu2Df72hQ_Tw(zYAzU!e(94F@?CV8(JzO$H@*E5GAI@`M6s9C&gD z9!T|Gx3s`Ads!6nJ<^&CN*#cB&>|>vb#Fj)F+Y15R=qdcMO&%IoEr-wPhZ2wFHfbf z@sH4Qx58_=88<^o( zg^zS{`KTFUheU*&J!cPqGDfPWRruRC$Fg1~`M227awzkbEQ;*`7K`mrDuc4JUvCu< z8@uRZIsn1zEPo$YkN~+|fl0LT`R=f0MRaHRirja5ioED8G%6aQMt+E~9mdx?YHFU# zWoY#sNC1T0NEk5M=m`xStS~!A5PxfkpeA8Hc^>VHYs8~{BMPwFvaG&)V+PnWMrDPu zOT>1oHr6@AEL{Wj?8v`~$mv-DhU0np3$PF0X+Bj+`gn{QE{NZ_e~;jz5Cq2TUb0YC z%nZd^qTR{t0O5jQk&yn=8Y{M!Kyo47I+Tu?o_lO%d5h%C+(=}>E&^)%o zO}TzBevUmH%kK|D0c;LsO=Q!f5Y6RKAvssdzb&TS{m%*hvW4sx@y6+N6=&Aep`R9e ze&yP<{UVC6(|8IYxy$8ta^^HAF=S|lE)=)OH2VePSutq}2O@3L?MZZMp_@5m;-tks zI>N0vcYB?<>S0P8b0HQN?4^Ok-UUeXy=CCW7C|f6hPXBBV?QUf(QJ}lNwKqtfOQ6tmVm=21djaR0Wg9+TO2&i!OP-a*dMK-tR?dxW1Bj&e|;8lREydQB!;lx4Rdf(iR^BpH#4bl4qW z9}ZQ+f>VV5eCH*0eTahXHi1G@T(uzpK~qQE6Ku+zxOJ(&MkfdC7v0;g3d?@bETOev zuWEU2gCh4Wamsm%dm0OgTnyG2S-8}oFb)7^)hq9jT-D_ZUrs%A9LxJ+fG_+>c&FHg zjwn)o7%(XNMV`x>xI#A0*HEdQm@v(^26{NlB6y^HQly$7I!K)8@mXLMH#1OrlOeHO zkXC`Vb{XW!RLDeU9{Md(>PryDog$T31BGdbvNv)e8*DgHCM#@Th?AnIZXt?5T_w=jDcv;Uzir}@VNqyP=2F{Ib(WpI^=_5*_d4E4# z8oYzC-aH{2Hs6_(o2A*p+==Do<;DDVf;pc;&*801(V8H9YRc|k?~|Rl#ZO#PXX(?= z-R*O<`hEA%AZ$hO#p_dVOiVxu^x>V>)IBJj>D+7(JamAng0fm`oTjH8ix;R)Q)hy= zSwKthZ=Z{Nq{|fM+C8Ji_y4Wr`TsQpcDFL~_+JizxzX$vlaT(|4+Z~Q8npkj)_<~y z)&EufHvs;BcJUtT*!{=l^iLlYBI+0C>jgJ8U zbiZ9^%fIhVou|sfG!ZZH=_RVi$LUxgn(nfDF(XF*No_QQ_^w;R`pL*B`GjN82cNK= zAT*vL=8Ik|#hZQg0cSJ$h-B@GOtzGK+_V&aPM6&><}VRjK{vSbpIM9{$9@=+@ju9X-NOU>qwOUCv)-u&@EESIHv z*E3~7I_};XC2Y9{yJ9>fbOZoQW6?#CA%@nhpDQ2C^)XB+QV*%5JnxGWxTvJoC+hml zp};D>iU<`|hW%LvnA>AOJu&s$?%=$=N0vm{R`$B2xk6PxQeqjBuzFzCo1pYtyh$8* zJ>rNHzPFV$0n&ZuqWRQ@XDl=Vyjs37z=C=VF=+i$HepNVZ1r%88|sqa{FWEN5nQrB z3EiiH*8~nBiTx}cNk}XBDoDoIoS`h0upf z{^%0`lEPDilYaAOjW~lIsH8fBS>dcIbx)y$%$7AZ>|IF`A|$9b1>ya1uIYPb|5F+b z9K!gScy8LJ&vuP6^2IqYhiW2ygb~mKw#1~Zo0f5FBs)@ntzP3&{%j5v^U=_AxWz&fWBQkT@rZuwUAMcyD~PTL4n#S{_47OK?_<%PL48GL zEL@QH=s%=Mc#s6k1E0>^k4;T0YCnBWC^HGf@lk5#am38+bRF-4z|N~jK^#iGfcBfu zkK6nEf~2cA_8g=`2UXKGN1XW>qsr~Tlvp;#BgVSpKF61uS*6`&Nlv|e%!{6L$<9XWz_&go zUakrY4$REDgbDXGd+~d+PxnQzzT@Gi|1%9%Ag@du_6GZEWBB3;wLUvyGE+I0FfA~s zdx0$6wz$foeSq3~DxxPCd18GZg#k9#34`8;5+slY-D7B(FFnS?eq&8-us-Tp{ zb-Y2T$W7k0yaoqQsSwy8+H?SCPmg-LnBk%`OMvV9rX+t@6eiR0@4A8}3$QlEV6pN( zO@7^Z5+GbiKS@@S+?#H`n;aal9J-W55K>ThThG3@Y!Be!B6A2Hu9t}fG!-QXFU*oO zN5iySmQvJ)F`7siR{kdowjyq*2$&qcx%XOHRy;`fAF}pkDwj)Hd%fA(7NM44Qy-&~uE{tVNIA zeh_HIoGobS6&^exmmukwOv)Fj#4QbTl=)Ky{bp>er~tq6HLM5*U;kU%jE(l>QB0+` zhzJ|%=@SE~&wcHv-gDozA`>}EVe-NnqIg<+rpRV#^CMFFOJ)N5-2HIeFjfzAyHVhh z1VZec@(2S+y9@?X&1j3detIq92c-;!Dh?CksGl2WWrNvFZ#c*Ghp+9C72FKw%@XC= zh9ycv9Y6aVJqovOxnul|U)|*!AL$r21do46gP9#QDBTfq>eQ96r}Z|(wBPGfPX0pj z{=lQKbs}1fTb1f@_f)fQHZ|SQzIHH0fe%&@<@fZ%usu3edxv-REv={bycPh%1 zG)@Z*zQhm}EDVm>yi8}Ll}B!R&QW~kLKMTupGAKG!PmXVxpN0B^edpEAt_tbpd_Jk zxcpPVdBZImCm$|n;@UWVxy<%Y4|HE@2+Qi2B=&gbON37~YSgCe*GlI#CHoLFX-rn3 zG*=k8%1}7<{|ku-MnEWM?j?OAgu_bdY?oz8&hY5WMj zgk0w3;X5Kl!7>`?fgWk4fA~yBUwGQVT{0H43cf{}Q9$&mi1^64GkZi8k<5(cls`-? zyd3x6W16Is=Ajxvafwu%n^WOBq-k z+|XnL#k5_7B^%1wFwBOc1wOgj;RUovJqkdSIkq~5YS5%4^sTtMW2V4(%|xyyQ4U&$ z7R`e4gnp1fEv2YY6^qIF zP`O<*_zNt426;CVhPhp3z3BvG0w*@{S2BSHT4#nRW0fD8QSYK9Zdrp~?r*$%f2opm zr5kR$49&4FR)6h1DJFIG1eua7OkvcXD1G>%?d!HS7$Ps98%=S~o`mRhB9t?!FKwQMu?ak}wbbdSq`!nlLVy8S-18?<1?n(@TKl^iRgA_Uby)bzY|++R6?L zTByFaT z;TEz7gY()}8q6x3;wEzPyRw{`ZghRjoNxH*Or0&ft|=TP-fu!5RH#%?wrR~8r!l^% zqDn#^E{ye8G1j)&XE#*8Su6XdABCh7$Hd+0NY<+~h0iXx--LXgssWqGu@?wK?*`Wd zi0`ZH+;dh9kdWOM0(*LjS||Jrm%qo{w<|a*Y}^b)1mcB2wHY~2P>Jz{!0I%4G zx1P6o@)t+p0ilo7HL^JB9pZ1XzZhA52=tZ+@yXX2uy#01!DgKK!Dnn}+Z*oyeRB~N zy2ce`M1K>N8#K7p3!OL!o;IlCh0wV`b5e&KSd79^F}VEVy-fO|@GabM1)wm63!)>> z-KfDlpsjFTFFNI^5cYv(Q%#8YV@=F&-8bM|EV+50XUzs&fUX^P9>VI05#i7c2QCR_ zbnhq*=!SVi22Heg=@3c2%RXto(gvGlu4*=#H{Ictgy-)c@?IC)o}A(X_W{c+alwGSzgu`VaJ%MiPK4 z29F%QSHZtOpU*UXb`?_6p1fYa21E6Vb2GuC*9`jCf>xEvoy|4v>vu2MWA+fD7bTDi zFg-{_m{p+e6n^*>G!_d&%K|-L90>(57+2deN}NT2_1g}FucV$=?lvX8G6eU=9-zM! z&D=hmg5@@JbU_72mFJ>-2q#8^d)1t+uTnEFmu4=x-jLDzgM^~Ee(!D>jd`1Ty%~fz z9}eN$B+1n&x9zPX?k+=a21O%^0xh=o0#xqu&Ih{M0(z_d5JHk=%34D3O>LLF%8@c2 zoW=wX^Hi4dT)4G{8R-0oijsm<> zSbU`(>gW0|=)-=CH)*eh{+6K`tOm;4)Z{OsFZ@!M$}oolp|)MQnGte@9^U_`E*p;S zL8!u*JQ?_SPP;+ar)^Z=NT`_Dwk5$Bmy$Lb{^kHrlR?fu{~6_yV$sRy(G~Hb(DyJL zzd~k)OdBhF(d5ZOn=c)HyRqj)C1U;V4Zqb~QP4BZZoNf6Te;y=&sNb=_^T!Wl9{X0 z>vZlJ6pg8qpUxTpW`$wUDj3~8WXYx3=vPz73xQd#_FzhCtoYD;HKj@Dj*Dckmq?D5 zc$>92cy+_u4?v=ejeS?u3=Ag$+glgg3}<0|&H?Y5_}(TsCh8HRv?p$xC2OUZvzj?p z$V~yMdN0#YUfrUBC^3o|UiytS<1ZdwwkbcfS7sQv?>}Q_XV!F(XMHNanbq0zaeo{E zS4T&em#2S7-$ED8AG6bCyHl*~PZ^#n23j0<=<+bnS5o%HRJ*#L$~s^=!~Xl7h^rR2=rY~IBqD=)`bE7E1c>l=PwEG zdM97O81=*h_i&%vrL}sInT075bhr9fO@XXroYf$;o#~`Sf2a*K>QESZ6#fO$gk0%S zfoT%THxy{~XlexZOgqHY_qhfKRN$jsstfSgvl;g zAfReWARzYtciR2`107DL|B~)*rphk=(Y5_I+|iAcB-;`dtDXVEs|G*OH|c$q*} z<}{U1X~LdjeA<7USs)=XkPgrQSWGHD?UvyZ2?m507rQ+hL~(q6edNb#B;TpTBQ8A- zQ?1AI6cL6}oKg9G3SgQ@V^GD7IYv^)*2P7_<2Du}N3Dxz@-gIH{0nN2Eh(_otEFr2 zitHq!&@1cjyz%gn{g?tDmmRs&BaDkMDFjA+xCb7lqzJS@vLUwu z$S2os>+8vCdvpZCe&9||SDXackco~}a;f%7DMz#&=W?&o&xk^wJ+~pp`%5wXijU)7 z)6LvKgS7jA(5F~kZUtjWg6g>M{<5;WCe*gp3|j$NNSfSDmS2et#WY*mN?xEr96n`9 z&f-g!#|V|8All_X9L(bTW{n#&P|WQH?Uu^uXC$0Xz(+fU*5ZUOCLPPkn@+GNGU^xl zAeVCrl;fuEa{t&YbGJV}nqlZcQoklNO9YJcKBR~8%GDsrxXUZu6 zwY$)SLSFc2f8KaNjM81Ro)Uah{R$0?H6m2`X(?5qJ{<=-CCe8P8s+k%#Pl`gT_TWO zM0v`Wy#RtIJy|M6Ys7r!pv>jV4_LWOq}^&TD!#Pz2!~vuL*tq8S`@{*elFgvq$#t> zC-`3rsE?2Q8}$Oa$MB>lR2os--^era*X{vPpv$oVP;=NVy#~Ai$f$0H>Z=xIJc;qv zecwdlTizKyP0VqEmidXaPpMj+hCKG)~MWY#8m{1*SJzyHPp)K&G1HwZqpdiT5@1?PGXb z8pjqb^kktZJ(V($7AqDIhvr) zzITxLwj7LL=~7~g$v8do=y4%XcPJ?g8wS>PIz>U4P}A!p%%P<0H7pf8#xDmokowLF z&-LeTC(_SGz6xxP8AyvdJkgE!p$a=@#B`X7?4TI@}f2eF3n#eXT5%m2jpK+rUPcs=eu-?tij%OLx?6QMkm23^x*b^%`o?Zh(7ej z4gY42X>-TTfTznet8o(^4|huevih0Nb9$*5-V?e&iljW#sVGuvC3E57{4U+60(Wo( z<#L~FDw58vY;F>9ctHn>;Rl5;B!$^ne8Drr41Wk}MC*^Gp6uA-#~6?ou3hSJR_!Hl zFjdG=q0N^%J!c6mr9hedNqQ$Vj^!Z7V+y49YP_yYG_4_Ryc{^ehGVv1uk#OG3pA*( z$s7t<7};19IUu8mxmw2JzyiSJEjC#t<=}lx`m4*5Ds#d5*Tq)Nw88zDk#J-t4V(8s z4=M3iUUN&FYaS>w_|{d>g@eOTxI%knGzIPuKV%>*Q0OR@4>d@(Rb|aA zj+h{l;+E1f0xak8f2p0Na-@|gr^1Le(H78>IOi4~miwcVAUimQG5+auz8;{)5TLnP zd227YPYhmNI<*XbV7ut%1c-AQG0WqH=sFO*{hVdT1k$~MUePL#IT3Mi1c72q3jGmr z6u`qu?gz1Q*AUL86is)ViwV<0LXlE%mvz!c)qFUN6JyvO4sgMz<;EtF3an5t4A7gj z{3Xh;jP3NJ7dXkqd|(Do_5diTxD{lo4LnUKa0|?3{>?Wws?FmIh6Jcv7ldG1=8VeI zx-du$s?95-{5Y+Rlm4KPt;r%xQaAm5xBvj9*Csy6fcO>M5U5Ul`c;V$<7SE~pgp2Y zvESIMG<-PW7fI}D&d8${u#*{>4Id7VIsc&#QXyHF^kWCVXKt)Yh_tauJNG4{*$mLU zn7!)OJ_t2h@rHhxX9m|3@IhXD|Dx~1LLzoptP(c)>kQ&K4E(gzC9Gvz05cdgD;TDv z5}VkQk*>Se2nqhkvbitRS?lj221Q!L$f(Q!i~d4UY>Fi^+gQFbW{rUHzF%%90O>^3 zG3VGI@jY@H1GUnzDhKCA2R;^^^;;sLT0DTz6ObU1vEn@zbPkgrQ3^!a?*79Hsn7&T zTPg!F*v)SE>9iuOadEAmy)bNJEVSnKL%>XyD(BzFn|r$`f>trHw+_q=WM(SJx5+Z` zvhB2CNWh&u$LQKTup0qB;jJdLe53MP3uUJJG#%s2QV?9HiW zsPl#5%8>D6zrc-A_@B|K$tAE^(J`ZoA)eA-z0y=h**Ntu@RCyP)q@sgK#4GUX44RX z@0OPhQjhU*Qg;S~kh$|_#>d#)aY(gWl`C$wHme>{ovT&IygMtGmf$p|bD&+i4`=Jn zY~4oS346;+vb=v;_*FRp0th?+%0-FS_gFC!zVrK@+O2x)dAHCrQ-(Gn@I?$*Yy8n2>buvDKlkN6{$5ug z7&jSNZ_mPF^;2cw=T`X-Q>XumSDRm{&bAl7aqwvy&D<0o7lcRcAlNOhP=~b8P*~>! z?s+Kw7Agd36*mohJTOJl@ELhrDyw`gWbL56Q1BcllA4(pCavFjv4_Hm z3~frhwT~fgF{y_bf!N7S`Zc%>-Z$ux0bn0>}irv{==)6pULt)#fN~$8Pow$2saCz|3-rDRRg=k<5r5mXCSevZ}fqv^w=D-MX2PMlv8V+H_wi zzXRc!VDjqgl;imhxAFrq*_9ra*6*U09V#ie92iFxL)LD{iQsdA#Uj4&trROpT+@I< zaYt9`n1Fb(T7RU7gvpZSA;6pe#t-u6Et$+xE;SAc8vHaYF`VAOWn>?J1@BMC@I9dC z;pBvyE?bF``PD*>;3^`B;j0mVSJMDj`=ozS2Em8 zGqItJC>M~!_xs^I{zw#KNZB-Nxk%i2&rY#`?Wpjohm%_^!BT3w(MTP9DbmQ-e>@wg@zhc+Mgp0MXr2xov{5$x^Go?XcC|+WwBEMWP|{w{Ob|Ptv~baYE}q|g~wbP z6H!^4Y1>)a&ROn`S{P13dX_^q+JxQ5NvCvOiK6~|R>*&dv{ zT%eMM{zRXcYV@HPCg_d5hgrG4Pw4RyAA8M`pWCbBSiH?zes55B&8A`MhLMx@2wA&U z;Q;rPnNf3cg{_}sXi5&xi@NRhY3@ON(skv}{jG=nW(1AR{nww*yG!LIO4I)S_KOI{o5 z=KHz+!-;sN6i|#Xjv3f2{|9p+m`~H`Og9fB-(jgvuf~gxbGkPn0)@VZ-b~s4TEkqQ~9;20F@ovKnESxgs~qkm5g3s&<+3e3v&luQ8W*Y&RYr0c32fj#(^<6 zaQp)MBj8|g#YMHk?xu@W_kIX8=XpCvswro_t#r>2rJl{vh4#2ky&AEOvb7=G(AtUy)U1rLtbu zbyL+XsdDAlM38G<_$bK+bBk)xxbSkTuC96;y!3Q8$(5Tf2$7okU{?lQl#W6Vl-|$x zKiu14=IH!G1q>CzXDHqAB5HbVs-YUHRE*44As289_1%ckfV=AY9AV!vqEPPh>Er6R zZf~qUT?+HvlanhT4UbDDz?zJ67c_qs-F}Igw8aBfx9p1GZFf|%4K@CKJkI2Ve1I+` zd<2uOrtfvL3W(^;@gGHB*77aZ7n}bJ4m8XGgl(=s1nwq4s!7nXNTJ{T57lMos!~b^ zqVgqw@NB9$L7OTeP(yKb2DZ1H=6z^`b=X_00jq*W{vZD`((z;TE=XHFta+8Pw|04)(l}pk;OTfLtcN1rP|%3?;O$Qo!18 z+n-kJP4|nEnVtsR&4xlv0-rL9$!>G%XP{PEj|PKGp!QB~6QHYKI>eXM_^tg{eE}BXkRDNjnaM}lJymV1LYwsbY>+H24B}E6{~m&!RY;e9KEv)JV z4tnOhs_Gro=pY8loAKG;69jlAhkH9{_RQpc6qC6SL=aW2a)+-hq};#T=ui@A2-y0xzf#I}(z#w|fCbmc4I2aK3D!=eSQitT>_IH07RJXVvuHBRnT|s9ahCS= zNm0=A7r5yKAuN(HUQ>p!$28Vx`wwzkA>XO@k`Gb6bf8+TnwA3QCqnI?zQKZ7*zeR| zu)`FvkpB(R36ftHJ{&+4Azu63?geI(?FH5w+;oyD>uCCq8IT1HsP85^W}b|8c2-#gA(?LyF_xh_d(L` zZSuJ{FKS5OHG!qaDYCO@*lK!{;+o)HZyp~X+u{0z_bNg)9Mr%_vqUVsEWb%?;s~fU zbpO0nUPNOCTMQh6CDPwD!AmkAPEv|>Id}4FRT{;T*Qy1v!Z_3;!T|YK!_*^ku`lcSrP=WhYQDxEQ# zq~7{wpOxM%8o9O)?lI*3keb$OORRcHtky8R;o${Il3pV_!p z*WbXNql0{FFtMRE4A%ipaIVgP&(%DdXNd6hDgwBUf@b&ljh4)0s~@ek=hp>rFI+iY zOKFgEs-!i@tiM zGO0-?HJ43*F_zNuC;;FGmszE#w-U$(w?KTwKz24%Qn*)ECf-J3CEPPct^;3wl{Jk@ zCW_X08Xx-nGaUt%ar}L!tCMtC`BECvUU%`7=)*y-uZM#KBi;t)X5`eoh}L8MJB~oD zP!f+_?_zxShyW!HGfzF0f6p_Ph{cWRrVylIJ~+N$>F{@uYbUsU zB9Rgv;^=Ace7LuENB6ghwKJ1xjcv#xvG+{kaORWJUxPwd$L|v_36I-p`H=UEa1(9Y z^HNP{jExnVwe=fYHvDKsT~!x8FN5f(xh(w4+z(qs`d-^eeyuvc3nI%$@VIDQgw}wC zFwafbBv;Tysiw>RWiP7(U~exgOQpjKznB7%()a>GgRq{m(Q*vjoiV4t*hbY3DRl(( zARBB^oH~NN{MHDewsa#k=;e!?+5+2W8?vOnE8`P9{FR&Q4%O<`>Ln@zt;vKqb+d~> z1bqkJRMqkJyLvZu^=;43MKSj$$T4$((~KIytA|^=YX#oqvuWmn&6QwjwCTOQAlwO+ zz|7cJ0bRQKgvXnMsR?kj7M6;LvF!xZy7^cqA>I_qZMl5<`_T)-ba~TQSMp)nB27A$ z8fWuNFYNt*s^Z7%kuZo8q#~%BpAG&$Z~!er4SRZWN7cz> z-KA4*yw<7D%)<_FuEfc)S9Uq zCha}_pJ?&4l6~U$Pe;X(#wYFU#+{HYnn0W;^uaR*@F=J~wdk6KScDZtzi=>DQ@{)4 zwG^`fG63bdD44Z)L|>80R7p;B0hkIrxEKq?IJ1%vLSi#2CBX=}FZVdsuZOjRk zJpZKz$e9^t_yoCCRz$FV%9d?shMCPSH)tgpd&d32-PV@8S(XE=4kn6hU{k&eWSjh- zdWpNAoDi1c;lyCb7M4kaIDWp=5^$kLS{iFP;`3)?gBr*EMI_vY&s3}6Yc8G&GP=nx zJEG1AlzJWCtFby)At7)dilDA#Tpw>gi$79tGc;R8iS{$F*dmWY)RuDqfStx!50upz zzSac{n`tZsy;QCzNm_4fG&adCn}q;XU!#mD?T()Bh@y;u2w7~mSozTHo0tr4tz_s7 z|C1Wl_k=xGu=C~?;V13s9+aZGH(TaqA$p>xp)|v;$XZD)wWc&lZ*qy?{7y~VS|7gn zBX_G$5v4IxMi+r}seYMF`pC7mP~bjd+~Tz9l$~L6$z2mcctkK(M;ZA&f8~R@t?xkG%9Wz4xcckZ_A1Md8o<(CcX9L~$}P2=T%ef;Ch4BNiSrLH z2AgeAbbbSiT>pyk4TRPPrH)THHV%|LPTE`!_?z2$U30klmoQ%SsGF+xd_}_F#(!OT zHY}0UT4s8Hrtb`sklr4j9M89+pc_>v068HrXih1_Pz>Et7%(EkY*l7SPm$e{Z@-oZ z*nze6&CZg4Nva0~q*ypil%|y(G|r99wvLT8xZSxqX?zi{_eYxcKwS@`O!D7CEw(Vv znkD^Wrby|qzo6MXVrZ7?6>d8?JbKIk7ujp-p*-R_?iWIYHF(%3;i$5|BhM8 ziN{IA|6vwnssB~o*neRbB~!!yXtn?NF;M^&YMqr)#oAhxq{dRyLUmBF+`d|P4w^ze&qSR ze2ktUGv?1c$n@_SHLGpR;!!4 zx4o3RaIC|DtJ1s+quHv>SB2^w$Gv{u?!KQV9~aM)o!0nZ zV2ZKR1wkS@zt=Rb<)#hf(kH=8Xz6SgLh4Lwn5bT&_+k>bT(?UWvj58w)#}O9ey0_a3g>DMk!(2qVdZB0{&+h(i>9t3=Ypc5K`*CMr2)}U`o;$N;Kzl2D9Q>% z$SB<6l8^f(BzV^Ciep20WAqxt(F$ImuLqI-JHcHsLV%_lH*pY=kpUU3iO@juD;4XB7AWY?q#sItNY_- z-oCNl65?}?4is&`V}%D_el+akdz{CBygbr&j@)2=lgl( z*=v*vfAmf0Nx@OJ=z=k17@~hd*x|6UL2c?8IxXb?71*=SH_D|7RRU8<3Uzr@~U5{HjNX5C>?`A>s@%;DM_B}s_ zHf(a*#*?OEsl=c@gwoOrRePOJqda%^qERarX2q=^Z@p zZS(DHa5H=Vkb@Gj89@9=*%Fr$xbg~e4TcN zICjQSUJ+*eO>}T`KfTgLin*)UI$x&j6fzaD0PZ%0Mf^uV{F$yuk-M|poC-9Xoclc) z(v+;~rMXko^(FrQ7wO^~}^^p;Y+zTHQS{8-~6Kh|y9v}%pPM1d^ z$+#J=k(ZGQ%Dmz|XG}^Q$P~bfsa8sX#1A`;5>rGpy9?p$)5HGzje52e;$iEr}cWY!VI+J4i9%z6T7#BMAK5?sqB2 zxyG7>BHA9bMUcb@;VipZsfO-}@eEbQ{v0&)PObO>>*YevJ$g#CaOuA2Kx7E;<_KL%hR#_W1y z20;*o#?)!c=}bKr!uYDD8&%{!M`Rp^E(kp4tE0A*^mZ+@otF3X^i=l2c+e~aS;$H; zR)1!`3y62O6Dar4Q>(fpnG-_{5z-nxa!dP#7%`Cb_-uRc=saI8drL(?&179=8}+cTn%>PYgW z1bQDXzXVuFw;fUsN)}k-&*@OLV1RDx7*l_#ZDw3o5r!{6=zTP`k+VOG1R`+g)F; zo%*+DtUP;EdG!G=6QO_2y{faa;TA~_P|^^BxdlWa?#-Rw+(kY?&SV9QRPVk%3x+mL z83O*!1RyIR+aFuj%SM?x2ymBB-l05Y0fumFUKC7vRP&a}!dyK?U}}JZd&T$-Hxvvd z@x$$d?0^oV4IJ^57G0&_SAQeF`9WgPVfn)~0iMO?NrdzIwT0!z>wyX$FI2=rcyxW$ z$K?fKi!w+&V*IVEM|$9G!0lb{?Q z-{XgPWZIZh*?JoovF~}gnl=Jan#{#Kas)i2B3TuJk0phDv9ihs%QMq^Y140t>(GOb zm-HPoyk@T`JLR}(6(0AHuXY*1{Hd9P!#MM(Q@8?8Nk%})Dq!J*)2Gfo9ZWtvzj zW!EKzpX7KwvW#0t>$-}}4J7u(7u$;hg^!Om&NeRLi$#tT%IE?XDvH6XpsGa6V8`~j zL{!WhIqATzj@lIs*Wyq5g1VWwYZVfhV%C}4$3VDMy!iI86^N5<+_pf7Yk(+&F(k@k z*KOX702DIX!re1M#LDC5+%UmM(_lX2^^>6P*g+Dt6#_1Xs%X&;#qu1HiTC0FQg(AF zsqq3+cjKFge6zBLl8{VGG`_b=tAum46nxmp||t5c43#4P=>1 zhVu|+0V77n<`u(J>8$TkL%4#?NK^firj_7G>9 zrDUV6VUy2rlV8=mrKcJEA+=@YE7v&^8g!5IR|VW?>aJRgL#kJ)uAE0aWDPPZHE=<% zt{a}F!PF+VIeG|_lVKJrNVEl3Q^;t`P1R~IlJhQ|54Znp*Ie6zf8BYukguiZue$RO+fldjHg0U& z-nf!fwiezFvD}}HF+fS_Z#IhBMs=u^ES_AbcAmLkePXVY5DbDJJg0eDWDx<1Nqv)- zC1>y=LOX2Ies>o6>Qg{>+On75HFOFqMYp~{zVRl;Bw`{s}wYTMHXglmt{Sm@$kJ_%kpGlPVICi z&tQuP-*bk`tRhR)*Y`^Ysh3Nj{83~W!GiJ)NQ}m5WF3QLrj!^Ab*uQ|aw6+2%xNR8IQ5*O&?hVMWXA+o3)_?XgM5OhWMA3PZ5~{`) zFk!aZ=wFJuyHfTD>z(P%L;<^3?NeMzRv-)@;HAg<8Gfzys!kvdHxIu{?JoPhd8Pfq zsqL@JZXi&`tWup`>AZj>ed^k-{h^x?#EO`P=5sRDtu3@#a*$18`-y-ub8OZz^IuOf zVtV!*w~IF7e?z#^AmLx+T|Vy&Bh}DK%ALK|n%c03FLmzHZlWI(kJYR1xR=JYFztp0J}K4RPy_Aot)t7@ zTp9i&lGGx{2Y$^>m1$CL4W)bYZtDb#`xg}GJ3*4q)*aY<19ElhW00~{(ru>9h`se9 zDgH5r#~NUg6l512C%hRv5j);0rB-tnYx==`OCC=qj7*SihZ_|>96i+Baq{`SiuLcz zj*-N~!>Na=7tM0bZAbG=sfTx3VXd&Rp8Lqob&D|)T+B3pF(MVs3Ke+e;aM#tas3Pd z_w|>o(R=gOoN6!Rd_#TgCP*a?+}%@8vqr3ibXBffN0Hi!O6)X7tLnxA&bzSk&?fiB z2RV>gyC0Q(v$s;izq0|EHNJtC@Pe-ghf`lT$uDL-eX=Tz>2TkA)oR6df7wu*yiDZB zqKQ`DMO)qP9BXItx13DT+F2fW>JDXA`Eu=&OG~!U^cz(!iDrbWi;r^e1K|)3s&WJ} zYCN{5z?|j7I+~}P`JV@oP0_VK+K03DRUEgSIMgGkj>ByDNl0-)GOEvB>Ks2B0IG*M zQxs9b36KH5zdM)Hkl+$7OhmtryoIXiUvLh%I@jCAG{A#cPZ^4pSrQhco?yIYY3@2 z3C&s5J(k(Fer>Lm&#X*z`hP#wAr`UxBz{Q18$*cnL8WRr+MK(+tGr@a5$h`h3c zsiE~hM5EwjXzcROi2FZKO^f!W-60#scV3x6jGZxN>NQ82EGqZ#luHx>LlY(W;!T{* z+!%^&(>y#1{^lWL{cK}gt9)a4u|xvNxry5*ScGXL4`B9~8Ltbh{zFbL3lk^ zInc&Z+&-K8&6a1p0vAVkhj%^SHKpvL(>OD_D*n8NueFzKa)gm44+u(NjD5iB)fxu; z5EmEVuw%hd&zIrg2;*q^%t2!5kF?u_iE?($IEYmh%nR!e*@iUL13U@;{%iaB6(u1d znfo`wkq5SDl+O#(EK0S#@5Ae?wJ$~PnD_U`*(#4_iN}_>ed-%@gfCGPS^fSp7me|o zgoEU6Jd+f|Ei&%}eQ)2($C>NQN2+O$U-+rYbZRvT%3+@o0qtP5)SFfnUwz_4jLL_Q zdNN>{VZ4ZeIM2g8-%*4qa?%sa&_#RiF2N)!Pnrmk=5NX#>s>+l+znJg@y68m#&Wdmd-m+3Jb@5+kh$G7P*eg8BX1)>rdp(vM=39b zyaZy1;rX!)%$XGLI0>Fb&hsd_3~TVyif_qDSS7_$!Z@^!Q^TM|=<%+dQo_i;u>0xs zcYES+ST8LvROjnePR5$MEA#5mHZ0I+x0ScwX(W^@Z?+MjRk`GVeBCO>O0yw^roKYgl!)Y8`mH ziT73wL+NL*&Rr$S&+#B&v-eSw!4<&8rTJqw zN#Egdu`aEMtV3hu?6Y3fN@AQ|23DlznR4I3g|4@<|1TxjoT>K9`1DNv&#u6UoSCA{yQJ2s0XGkJ|)O z0@huEn|6rcqizyq|K2^@aT?q;^a@=iNE-jl;eO>NReOKUUTGMlTXq{E2z09o@wQ@{ z88-e6Nf`{EBcWep2!2m-U~zj=JsgD8fD1-5!`8o*@ry_yNo*j4N^kfR@GU|{mHvH2 zi1PsvDkz8M0`$$HBK4J(Wlmm6O;YfF@+%wS-`Fs!STa<0dW29sk33_HYpx?19E;%rt z6U!yBdB0cjK=@=Rr;5oV&wJ@B?FI+&&!28Ms2v!{aFOQ9>?c||pz?rEae~7wOAPf2 z32!T~9o-6JrH&9$QcH-Wbe;kzkfMuQ!^pB6Q-<*80+MzCOCMD*3esf$z-NJG6q{fN z@cwZdhEo_P=flX+&M7bgW9lGkJ)U}S-!ln&xz=bm#C>Mx`iJZ@)| zHk3`IaVb2FrriBkFXEuIY(-vyKEfAXuh_j0gor^F;(H~JbS#OU&4A6KKWdSLrH@HG zRxzBHvj7&`_$&GX)MnUYu%+EPI>2;FEjcKqEfd*mX!E=ldg!2gnRIpssFGjKy+wFw zaEjcbc~sRUYwz4n9TuY*-OCNyM2UN+gM;!bK*G!cUd=) zV+31y`#Diz>bY}DeJTU8ET4CoDa3-ZT&dZ_xc1`q&Wv1%^Ij2_5JT;?D$8)#BmvUc z;S&cOjZtI!iU zT46jHmv6QI9E*0HaP7Ge&KP80R^ZWqyb@U|!7#g(emq5!B%VlOau4NO>FtxM{1s_Q zCkTx|EC;LeByMVx%^TAAJinkj$-J!;?ESalAP;a0(0Pe!-*dIGvI{aWD!5|E#St{&N#gE5ZB_O~irNnC{2d7DJu%FyOnCH1zz^jr4*2MNsNS z#*TiYdsfp)4q<2rTgYtli>5#gfh-BcSuFwIbZdaL1O%n=xkN)Cc9d=3b@k4zXE%}U zr_yn|;`lP#))MFHTnAQ+O)d<2>)N}L?E#Lcs9d8sYBycPuLo#>_ah^FjuWuvVU5rM z>QZsKX*aFTgDYTF*Ip+!`LF@&jBDP()n*7B{T6x>ys9Eb`AfiHG{I^yM(gHpHjq9IlPtFT=XHOFqIw0js7gQshSn>pjP6POFrWy<9s z>XUi^Wo84OcE7xVSpMF0$V)Q#Sr3T=^bpZNr1YI|lS#=*=K9VeVhgj(DwdAxVFKsN z;N+Pjwa!*Q!$RQ}8@PUb5eYWI{cX+bNbTqpcy^{(O?2D38E!F6mhJm|>SG&?;lk2E zXhp2J_vF%6*ga2?2Zv{+3TmS(vO)@pR_lrqx}g~{(_=XV?23%nWa_6|r+RQ!%a>#- zBXVn#%?%WVa4VR%p`C{%Crch_(<#?k7M`4?a?A0|sg$FP8kH70I9*ZwfGk%dgjgC+ zIOXNR;5Q7XG$LKxF^G88G<--{%j)y;MSk}x(xMzRHr$=dJxZVi3C5Tn4o*`ND^YGz z@iNFlf=5xw(uH_&Q?U`GLj0tVdXFnhj@+fta0_RC${dar5einiq`O5YWbN;G^9acv z@lhpYM-0NEsuOPa#8Gc?wU2st&w7l`iwu!m4|mV+G;cd&^O3Cueu3tJc!Edpv5~`W zZ<0}!n1b_pS_&0f=|o-#dWL=o*BoGL?yJ>TLlIgZ)H$Vk&wjA4PoQlD7V@tq1R=WD zR8vRxK_l3FKF^%RG?%~rgU8##$l2ab!)mqW#j%!Grw9uN9FiG9-ZEsH7f7?w^}ZS9 zh4Bn9kXYArR?R`C_|-s3>3{DFuL2D`Usbzj?RyN>re#$(yn~v+bqj%V>f2HitfC&5 ziJJ4&8U$Amj&bl!A+E*aEU4Z%BR1tVxBP-|cx`<+>=o#;{hJCs+8}ua7ho;uMkai} zsCltE-_D*@BdY zFuT$HfY@ov;`Hk3{m>eVVRbCPsyF-3FDY2z73S{gkrB~)Vhbre=VY3@7wrZ$89i=# zfcZ}h(_F=Ve7Q5=yxtI_Vzn`EnnxN|PmNd`k_cgr>{K_a5;m8ZQk7F&TBodCz+@?v zBYTk$my2rxT*>39SIe8jQ+NZZsJMMy+UdgU^Vl)Sz@=Yj0m>pSi6gVP3H%6ed6n9z zk73EMeh)I)65-%O9vrzh8{t`QnInEiN})|5&+J35@5~GIaqXiI7C))OzKc13#+B8j z5uRpYo4oZnyf#IV5hMB1RI;%djwGqp$RP03b(k2ipLh#{3*WuK^({5-gjFD4&>#~= zRjubMal3Y0LYG7f@&@53AgyqfG!Ls-!GtL_`%c~2aLC+zi*l-#6b6G1P z+pPptO!4je2f2nCqpGTbeDB~UuLnmE8sy%d`K-eja{4n}#u8%9L1$wBW%j(Sij^~8M%tnwU;>8qE{jFtIZ&csYSfWz zi!<+{kfPf6nsVIcY4~pFx+D1O`Ix|Pig%y`^9t8}uRRK>$r?TuDF7VU zTz?4Fulbys&|lGIZtEk>^DIMGu!>g5tboNoOUULeWHW)t<8RXoAO;8hqs4(3Tod(= zV38W70;&$#hmi@*-V0*5`N6W;K<;M*M_td7GI=o_`lgS8YmXR`KRSh35T`KIJIpl} zln{rqxJKKGBjzlitFa>Ouo+V<`Vu$l`WZkb#dCfr~|=2T3OBZ7L2HFw54%wej|T64%10_L8v#46;nS|!8Nl8yK9@o9~I?~hO3PC;8dR%NPmz&O@AL}MSq%F zb6z87yL(^we>ywsxTu!*k1tC~cSuVpy>v*UfOM#IEU+v~?9!zmDItvl(kK#wgrpJ* zNJ=WOprD|n(j5Z7T@}-MDBY)q2a+p9G%WD%Mk}W>Rh(4cA z?assF(r0RM9jWJF5ZmyT&9jgZwR05Q=FRlzAV8+FZTe z{=)U)33F%PhFy4R`&y&1YwtQi1rN^|m~CJBWtZXDD--Pl=T}D;HdFPU)<@d9c}C<6%$ZSZ%|=0FAo z%r+9UCJg&)!>`=#p<&ibx3m2$9j>@Q)jW2G{Pz4Ht^%#%H+V?0oNj`xT~(M)F)bq^ zNqch9l$?1e^wy2`7yD3er4Llm@2=i-tz61pmGouN?YM|7xP=()+^PQXK3Ec7+%=C9K@gXoW0YMRDZpu)!9qtv*@ga*R$vZ5xDpc z*V3u?Ni*&`=isr{$u^;yK0+&{n==Vo73>iWK>lNB+q&l46<9w0X!4wc4npN(xV2u-B+4K=>Ctq++Z ztm((A`oLKs(KX}hxPxAP=ukEjp&d^P_L(Ef-1F&zqq5s@B+=@MWZbEhXw>n|C0E=LfAd2{BtHyk$RSmGSkp&Df7e`z_ky%W~hmi4KsH znBWUOE1ww{bR%mCJY||z@yeN!&4$+}`Ha1IoCpesQr!#-#D>>Ost$)rYZ_BjmfEsr zHrtL^0;H}qEH(tsE?>|B2uboZqZ1cKpiZZwGJKAcCE9RPGDxjMv)2uy8 z%w!2LcXr^_Fpd@8PK2~!PX+XV#pE~wn~U#R3Z_2TA|S#Fpc;5EKF<<2s zWiIwh?3u#Fp!1}dFAwRnN7Or>j?W9a5+wxO_k8|5g1sY*DJS9lfzcYLocf!gl5}*u zi-6!IyXc1<^xe)cojY`2fy(hQB*R(5*KSn4q+6#cl%&}7c=Dc@Q z|2~NHYCC&Nf;wr4!prcG@Y6&R)jvF5WVFx8t@*|4JdS{7pU4S^yI%JqG3( z^9RcT-S@l)uJcXLGF{o(yPeoSpD=AlA=lC_kQ4tUzaHmYu|~=)qVQ%*OXf0M5yR<< zQ&BQk*!>61E!-gl2+nG@Exc&kF)eP)Ax+IH^jK&Nlcv98dF^;UA1C2aN!h}Z&bD{( ztfq)37I=`_cU}ZTF(cX5x$GSh6uD+>klUzC`)wr0L9UH*Win{WC7k@6A4rh&4&f}D z>=`0z-`WP(32@?tC-3yI)3O6)A|LQkkg)Y$)@QycP+2exRh!Q}Q>-S2PTF3RD-|Zq zI9eZqnOJrfQlPzwTdi+!YFv6=JUJV2MA~x`GGR`tG9R)dvcQMPO_KRg2p#+SC~M7y z=XLGd?1e{T_~Gv#<=nM2XlqzZT{bZ{%L7jvv_x#;8>I!iz9Rq|nKf@nzf+rmLpMN$ zF-mggy&fV%$zjpm%-UoG&z$qeql-?NL#|>f} zOu=(OWYqU*EHf=0Sgc1~etRAjG)k^Caz?~v{h`8Hq;kR?3H+sY9$|5_G(tQVXWdXg`uj>^gv?C|{dJ`0sZX4pu6_HztQSSb+ z=X$H10kG?9?jFXK*-Gkj*bPG80{R9j8=}Z9AJcH0$vcWv?BAo?+uO-~J4KRjXXeE< zCFUVsa+OR!rG2r9#jjpTOMXi1Za!BYMo6li;41N1Q}s7k>sq}Ak1j~amJB2h=5J6w zQKJjrhWicN{OT+XnT5vQ1?JPMD=P`f%Bw{6dV!x7&1j;iRh7VU8;arBbnGjn3bTZ< z8)+VJVW(sVk%*zVp@>P8VhRC+@-EoranJdMD zepoBo7~4-+rs?GcuSvxC!R@V=a79qJgL8!%hc7knP#byBnX-)D!z9v(=Kr3?ld!3i#UVA6Ra;i&Ja7% zXc2O@&dnxbhJ|SxJO1;b!^SZRXlAodHe`1c?rJt=Q#|X7Tm)0;WJ+LCg+?dUbxvF` ziF$A;%x>E1BbFDB$wq0v5v;F0+>yv0>r+a&OrXS;&&!KKbrFG{bJwWC*!J|i*T3ng z*S>#sQJGY%xur>dOyd%%P5cw$+7)IDju@6VC3(6Ex5d^~;00r(Q{ z+z5n5WvVYZigk^mqpRsK55kaAi>s@q6lFr^(Rp5O_Gr}Qu4`hj!gzdYj)u%*J8lz4 zJRJLHx=P(n1*5wN*kbaVL2n6I-)%mV#eO9&fQMUoRF-d};A zRo1AT`i3Br{5%L{g*B)K`b6GPOG-;LjVK9~w2=mZ$3^LsI2|gZjmgu40BA6pQTr0SoEA1?Bxq?5}yit;7+v?#N z-s@XZC{k9-XF88tZnn))7R>&b@&79GAALk;&PKwG4;lE0vmO^`I z6VRL@gSdF)BI zI`HGOEEYev9AB{d=K9RRsCsnNWcM10^u2wZZZfr5(<1BuU2UFhC26amAJT!YI zJ$0s|d&8p!mpWOHP+K@eo;PPxIa|`r+HEuj=j3jmAG<#*%=2_A8%%e`Mco9+>qs9n6<5ed#Xy zohOFZOgR|PF$s?1CH_h`;pPl@{#v^((J%1vx~*>>p&@Yu<%i|++1gA;MuwI`2QR{L z@;nXZn!q8z$sH0>CvtBo^e9F35X;(1+Ro{vo(bI=*3?!3?L zH9j1At@N$WEqR>K7t_#*d%&qb{z6D3XkQW$t=!PaYRgtfb}=t2aYAHQ!Oi8 zrL>xMB#*IBlVeD&u(f3Ekx%+0qt%4)rV>dah8dT}!%Kr-42G{9^e{a~Sdf zD6Uk6C48jxz^^i5cQrBc(B|4o8q_AMJp&*AjPLhqk{_Yq^JRWpv+7xmLJ(&Eoi~Qn z&AQj5582sVh`A0z0&4i{lf&1}rfj>?OxHo5NRQYufre&4r5$ayM?GBRUT!{U{u)o#qAK;1--kQNE>F2>F>W!G}L=ocf-U)UeRKn zLe4^5xaih3*e$aKoY7E@hRJgeRAIyujb~%-Fd97Ec-?0rHxWOUy)#o_%*xFv&b^KG z+UtvsmLe@mJxOAWI9tqW7?g=lb8xjc?2BaXHG;wY3$&T350f}zB6Hs2i!(7*JW(A4 z4GF|XI!$cRr;iIKc&2L06w7`YxCW}nQ%Ow0+8%02ZZ)Pu)AT&{jgpdS_U8;av!g3h z87Qkj&@f^z+gRYlQbw1K;3CU#m{| zf!E4z8A?(&$D{jW$wv-*^Dh+P8BZ&Rsi-e+P0gXaRFOgJXP=r=4RY4Hd&l5Pl}sc| z53^q9=Az{RyD_CZ>E*sh6sx?fllcmpb&t)u-WK~QtUPD0(0tk}E&s;RiD%!frC3-j z1_+b}27&l~=h@dC#&3;6+9Kfpn>5`_$IM|+p3<+cR05UwGPPcXTWvh-v0c--aMg=x z&qf(FZJWD$JX<`E>csC;7R8ae_Q^1BkNB?yy4=ngmU_NbQngPcRoXMm=%PS>lf!dZ)RbUzP78r89Bnv5yFTn|{bTp_I{NIE6N*!Z_zsaOgyEL6<^MUsFjY z&+AzY`l&u;sb1yFT+Ke^fqJbDtX&l0?Gs4^fmbbxSFI5c0e@uDF0wMC5Y6#2_S=Ws zXS-DStBmpoVsmoLNkol-6eVrRAzkBMxb)~4wylhh^ZeN8m`CBkwsZ0c@Huz3)~+Kf zf@;4vYEv%+2YpSsl9QK_s3ke%i=wm4jsCl)%EWq&PWd-+UW|`9Eu)E~WhOaRZ)rTf z(pj43rkaB=;q3Pci6l!5CMRem_a z9RWw8Tw(vJuNcceaGM$gIy3-*IFIQI0hm+tf$X}+PB}bT`6cJQes@5|5@@L7mB*$% zRs0gl+5zTji*Wq+$``*^cpeVua{>Anj#a*s?o@rf%Ldf^H5D2oy(g(!NHX{{qxTTA`q>-#;e%B~Ie>%tQ&l%${JIOm9%$Hu+Ado-MdgqUsl5zEPgpV`K?dJ{k zPq%aYss6+5R>r5Qd$=PUf8q0(bL`IMj3Ce+pd@mv<|V(Y?TE65IwE}kc%AhBGXw5@ zsu`Xq^Jg8u<)6%;^*v~Rgl@&}YX3B!*2w|)hkwkHn7 z`A{bJ0kBS=Hy4=e`6T)e-ra>pNOACo!s60H|j<0Z=z1!>wJ=V@)had%%zUs zWd7=f=}Fwlr_#T1U(mmS`{^^Pjyg6l`vQSjfj=r>s?sz1eL7)d4H1!$fI^_Qq7s6V e5OIjOjffabNYvU!2qI{0D{N~cDk%(u+58_1c;4;+ literal 0 HcmV?d00001 diff --git a/releases/HTY1024-APP-SKR-0.2.0_20251120.zip b/releases/HTY1024-APP-SKR-0.2.0_20251120.zip new file mode 100644 index 0000000000000000000000000000000000000000..7ee3246cd277ff13e040688fc8991a27986b59ee GIT binary patch literal 67077 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 DMr3;K literal 0 HcmV?d00001 diff --git a/releases/HTY1024-APP-SKR-0.3.0_20251120.zip b/releases/HTY1024-APP-SKR-0.3.0_20251120.zip new file mode 100644 index 0000000000000000000000000000000000000000..e8d265bd7d0103cf97fdc1d1e0b161c5464e5026 GIT binary patch literal 83540 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 literal 0 HcmV?d00001 diff --git a/releases/HTY1024-APP-SKR-main_20251121_0023.zip b/releases/HTY1024-APP-SKR-main_20251121_0023.zip new file mode 100644 index 0000000000000000000000000000000000000000..9ac6dcebdfe648285814aa1b348dcfafcde03938 GIT binary patch literal 83290 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%0AWlxQIZ6 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%0DSl)^R2XFsJm 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 literal 0 HcmV?d00001 diff --git a/service-worker.js b/service-worker.js new file mode 100644 index 0000000..535018c --- /dev/null +++ b/service-worker.js @@ -0,0 +1,42 @@ +const CACHE_NAME = 'sakura-sensei-v1'; +const urlsToCache = [ + '/', + '/index.html', + '/manifest.json' +]; + +self.addEventListener('install', (event) => { + event.waitUntil( + caches.open(CACHE_NAME) + .then((cache) => { + return cache.addAll(urlsToCache); + }) + ); +}); + +self.addEventListener('fetch', (event) => { + event.respondWith( + caches.match(event.request) + .then((response) => { + if (response) { + return response; + } + return fetch(event.request); + }) + ); +}); + +self.addEventListener('activate', (event) => { + const cacheWhitelist = [CACHE_NAME]; + event.waitUntil( + caches.keys().then((cacheNames) => { + return Promise.all( + cacheNames.map((cacheName) => { + if (cacheWhitelist.indexOf(cacheName) === -1) { + return caches.delete(cacheName); + } + }) + ); + }) + ); +}); \ No newline at end of file diff --git a/services/geminiService.ts b/services/geminiService.ts new file mode 100644 index 0000000..47fc995 --- /dev/null +++ b/services/geminiService.ts @@ -0,0 +1,543 @@ + + +import { GoogleGenAI, Modality, Type } from "@google/genai"; +import { PronunciationFeedback, Language, ReadingLesson, ReadingDifficulty, OCRAnalysis, ListeningLesson } from "../types"; +import { base64ToUint8Array, uint8ArrayToBase64 } from "../utils/audioUtils"; + +export const USER_API_KEY_STORAGE = 'sakura_user_api_key'; +export const USER_BASE_URL_STORAGE = 'sakura_user_base_url'; + +// Helper to decode audio for playback +// Updated to support raw PCM (typically returned by Gemini TTS) which browser cannot decode automatically +export const decodeAudioData = async ( + base64Data: string, + audioContext: AudioContext +): Promise => { + const binaryString = atob(base64Data); + const len = binaryString.length; + const bytes = new Uint8Array(len); + for (let i = 0; i < len; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + + try { + // Try standard decoding first (wav/mp3 containers) + // We clone the buffer because decodeAudioData detaches it + return await audioContext.decodeAudioData(bytes.buffer.slice(0)); + } catch (e) { + // Fallback: Treat as raw PCM (16-bit, 24kHz default for Gemini TTS, or 16kHz) + // Assuming 24kHz Mono 16-bit Little Endian based on typical Gemini TTS raw output + const pcmData = new Int16Array(bytes.buffer); + const float32Data = new Float32Array(pcmData.length); + for (let i = 0; i < pcmData.length; i++) { + // Convert int16 to float32 (-1.0 to 1.0) + float32Data[i] = pcmData[i] / 32768.0; + } + + // Create buffer: 1 channel, length, 24000 sample rate + const audioBuffer = audioContext.createBuffer(1, float32Data.length, 24000); + audioBuffer.getChannelData(0).set(float32Data); + return audioBuffer; + } +}; + +// Helper to check/request Veo key +export const ensureVeoKey = async (): Promise => { + // @ts-ignore + if (window.aistudio) { + // @ts-ignore + const hasKey = await window.aistudio.hasSelectedApiKey(); + if (!hasKey) { + // @ts-ignore + await window.aistudio.openSelectKey(); + } + } +}; + +const LANGUAGE_MAP = { + en: "English", + ja: "Japanese", + zh: "Chinese (Simplified)" +}; + +class GeminiService { + private getAi() { + const userKey = localStorage.getItem(USER_API_KEY_STORAGE); + const userBaseUrl = localStorage.getItem(USER_BASE_URL_STORAGE); + const envKey = process.env.API_KEY; + const keyToUse = (userKey && userKey.trim().length > 0) ? userKey : envKey; + + if (!keyToUse) { + console.error("API_KEY is missing."); + throw new Error("API Key is missing"); + } + + const config: any = { apiKey: keyToUse }; + if (userBaseUrl && userBaseUrl.trim().length > 0) { + config.baseUrl = userBaseUrl.trim(); + } + + return new GoogleGenAI(config); + } + + private async getApiKey(): Promise { + const userKey = localStorage.getItem(USER_API_KEY_STORAGE); + const envKey = process.env.API_KEY; + const key = (userKey && userKey.trim().length > 0) ? userKey : envKey; + if (!key) throw new Error("No API Key available"); + return key; + } + + private async retryOperation(operation: () => Promise, retries = 3, delay = 1000): Promise { + try { + return await operation(); + } catch (error: any) { + const isOverloaded = + error?.status === 503 || + error?.response?.status === 503 || + error?.message?.includes('503') || + error?.message?.includes('overloaded'); + + if (isOverloaded && retries > 0) { + console.warn(`Model overloaded (503). Retrying...`); + await new Promise(resolve => setTimeout(resolve, delay)); + return this.retryOperation(operation, retries - 1, delay * 2); + } + throw error; + } + } + + // 1. Text Chat Response - Returns { text, model } + async generateTextResponse( + prompt: string, + imageBase64?: string, + useThinking: boolean = false, + language: Language = 'en', + modelOverride?: string, + aiSpeakingLanguage: 'ja' | 'native' = 'native' + ): Promise<{ text: string, model: string }> { + const ai = this.getAi(); + + let modelName = useThinking + ? 'gemini-3-pro-preview' + : (imageBase64 ? 'gemini-3-pro-preview' : (modelOverride || 'gemini-2.5-flash')); + + const targetLangName = LANGUAGE_MAP[language]; + const parts: any[] = []; + + if (imageBase64) { + parts.push({ + inlineData: { + mimeType: 'image/jpeg', + data: imageBase64 + } + }); + parts.push({ text: `Analyze this image in the context of learning Japanese. Explain in ${targetLangName}: ` + prompt }); + } else { + parts.push({ text: prompt }); + } + + let instruction = ""; + if (aiSpeakingLanguage === 'ja') { + instruction = `You are Sakura, a Japanese language tutor. + IMPORTANT: + - Respond primarily in Japanese (日本語) to help the user practice immersion. + - Only use ${targetLangName} for complex grammar explanations or if the user asks specifically for a translation. + - Keep the tone encouraging and natural.`; + } else { + instruction = `You are Sakura, a friendly, encouraging, and highly skilled Japanese language tutor. You help users learn vocabulary, grammar, listening, and speaking. You provide clear explanations, examples, and translations. + IMPORTANT: + - You are teaching Japanese. + - However, the user speaks ${targetLangName}. + - Provide your explanations, translations, and feedback in ${targetLangName}.`; + } + + const config: any = { + systemInstruction: instruction, + }; + + if (useThinking) { + config.thinkingConfig = { thinkingBudget: 32768 }; + } + + return this.retryOperation(async () => { + const response = await ai.models.generateContent({ + model: modelName, + contents: { parts }, + config: config + }); + return { + text: response.text || "I apologize, I couldn't generate a response.", + model: modelName + }; + }); + } + + // Internal helper for single TTS chunk + private async _generateSpeechChunk(text: string): Promise { + const ai = this.getAi(); + return this.retryOperation(async () => { + try { + const response = await ai.models.generateContent({ + model: 'gemini-2.5-flash-preview-tts', + contents: [{ parts: [{ text }] }], + config: { + responseModalities: [Modality.AUDIO], + speechConfig: { + voiceConfig: { prebuiltVoiceConfig: { voiceName: 'Kore' } }, + }, + }, + }); + return response.candidates?.[0]?.content?.parts?.[0]?.inlineData?.data || null; + } catch (e) { + console.error("TTS Chunk Error", e); + return null; + } + }); + } + + async generateSpeech(text: string): Promise { + if (!text || !text.trim()) return null; + + const MAX_CHUNK_LENGTH = 250; // Safe limit to prevent network timeout on long generation + + // If text is short, process directly + if (text.length <= MAX_CHUNK_LENGTH) { + return this._generateSpeechChunk(text); + } + + // Split text into chunks by sentence to avoid breaking words + const regex = /[^。!?.!?\n]+[。!?.!?\n]*|[^。!?.!?\n]+$/g; + const sentences = text.match(regex) || [text]; + const chunks: string[] = []; + let currentChunk = ''; + + for (const sentence of sentences) { + if ((currentChunk + sentence).length > MAX_CHUNK_LENGTH) { + if (currentChunk) chunks.push(currentChunk); + currentChunk = sentence; + // Force split if a single sentence exceeds max length + while (currentChunk.length > MAX_CHUNK_LENGTH) { + chunks.push(currentChunk.slice(0, MAX_CHUNK_LENGTH)); + currentChunk = currentChunk.slice(MAX_CHUNK_LENGTH); + } + } else { + currentChunk += sentence; + } + } + if (currentChunk) chunks.push(currentChunk); + + try { + // Generate chunks in parallel to speed up total time + // Note: Promise.all order is preserved + const results = await Promise.all(chunks.map(chunk => this._generateSpeechChunk(chunk))); + + // If any chunk failed, the whole audio is compromised + if (results.some(r => r === null)) return null; + + // Convert Base64 -> Uint8Array + const audioSegments = results.map(r => base64ToUint8Array(r!)); + + // Concatenate raw PCM data + const totalLength = audioSegments.reduce((acc, cur) => acc + cur.length, 0); + const combined = new Uint8Array(totalLength); + let offset = 0; + for (const seg of audioSegments) { + combined.set(seg, offset); + offset += seg.length; + } + + // Convert back to Base64 for playback/storage + return uint8ArrayToBase64(combined); + } catch (e) { + console.error("TTS Assembly Error", e); + return null; + } + } + + async transcribeAudio(audioBase64: string): Promise { + const ai = this.getAi(); + return this.retryOperation(async () => { + const response = await ai.models.generateContent({ + model: 'gemini-2.5-flash', + contents: { + parts: [ + { inlineData: { mimeType: 'audio/wav', data: audioBase64 } }, + { text: "Transcribe accurately." }, + ], + }, + }); + return response.text || ""; + }); + } + + async generateImage(prompt: string): Promise { + const ai = this.getAi(); + return this.retryOperation(async () => { + try { + const response = await ai.models.generateImages({ + model: 'imagen-4.0-generate-001', + prompt: prompt + " style of a japanese textbook illustration", + config: { numberOfImages: 1, outputMimeType: 'image/jpeg', aspectRatio: '1:1' }, + }); + const bytes = response.generatedImages?.[0]?.image?.imageBytes; + return bytes ? `data:image/jpeg;base64,${bytes}` : null; + } catch (e) { + console.error("Image Gen Error", e); + return null; + } + }); + } + + async editImage(base64Original: string, prompt: string): Promise { + const ai = this.getAi(); + return this.retryOperation(async () => { + try { + const cleanBase64 = base64Original.replace(/^data:image\/(png|jpeg|jpg|webp|heic|heif);base64,/i, ""); + const response = await ai.models.generateContent({ + model: 'gemini-2.5-flash-image', + contents: { + parts: [ + { inlineData: { data: cleanBase64, mimeType: 'image/jpeg' } }, + { text: prompt } + ] + }, + config: { responseModalities: [Modality.IMAGE] } + }); + for (const part of response.candidates?.[0]?.content?.parts || []) { + if (part.inlineData) return `data:image/png;base64,${part.inlineData.data}`; + } + return null; + } catch (e) { + console.error("Image Edit Error", e); + return null; + } + }); + } + + async generateVideo(prompt: string, onStatusUpdate: (status: string) => void): Promise { + await ensureVeoKey(); + const ai = this.getAi(); + try { + onStatusUpdate("Initializing Veo..."); + let operation = await ai.models.generateVideos({ + model: 'veo-3.1-fast-generate-preview', + prompt: prompt, + config: { numberOfVideos: 1, resolution: '720p', aspectRatio: '16:9' } + }); + onStatusUpdate("Dreaming up video..."); + while (!operation.done) { + await new Promise(resolve => setTimeout(resolve, 5000)); + operation = await ai.operations.getVideosOperation({ operation: operation }); + } + const videoUri = operation.response?.generatedVideos?.[0]?.video?.uri; + if (!videoUri) return null; + const apiKey = await this.getApiKey(); + const videoRes = await fetch(`${videoUri}&key=${apiKey}`); + const blob = await videoRes.blob(); + return URL.createObjectURL(blob); + } catch (e) { + console.error("Veo Error", e); + return null; + } + } + + async analyzeSpeakingPerformance(audioBase64: string, scenarioContext: string, historyContext: string, language: Language = 'en'): Promise { + const ai = this.getAi(); + const targetLangName = LANGUAGE_MAP[language]; + const prompt = `Roleplay: ${scenarioContext}. History: ${historyContext}. Listen, Transcribe, Reply, Evaluate (JSON). Translation/Advice in ${targetLangName}.`; + + return this.retryOperation(async () => { + const response = await ai.models.generateContent({ + model: 'gemini-2.5-flash', + contents: { + parts: [{ inlineData: { mimeType: 'audio/wav', data: audioBase64 } }, { text: prompt }] + }, + config: { + responseMimeType: "application/json", + responseSchema: { + type: Type.OBJECT, + properties: { + transcription: { type: Type.STRING }, + response: { type: Type.STRING }, + translation: { type: Type.STRING }, + score: { type: Type.INTEGER }, + pronunciationIssues: { type: Type.ARRAY, items: { type: Type.STRING } }, + advice: { type: Type.STRING } + }, + required: ["transcription", "response", "translation", "score", "pronunciationIssues", "advice"] + } + } + }); + return response.text ? JSON.parse(response.text) : null; + }); + } + + async generateReadingLesson(topic: string, difficulty: ReadingDifficulty, language: Language): Promise { + const ai = this.getAi(); + const targetLangName = LANGUAGE_MAP[language]; + const prompt = `Create a complete Japanese reading lesson on "${topic}", level ${difficulty}. + The 'japaneseContent' MUST be a complete article or story (at least 300 characters). + Output JSON with title, japaneseContent, translation (${targetLangName}), vocabulary, and grammarPoints (list of key grammar used in the text with explanations).`; + + return this.retryOperation(async () => { + const response = await ai.models.generateContent({ + model: 'gemini-2.5-flash', + contents: { parts: [{ text: prompt }] }, + config: { + responseMimeType: "application/json", + responseSchema: { + type: Type.OBJECT, + properties: { + title: { type: Type.STRING }, + japaneseContent: { type: Type.STRING }, + translation: { type: Type.STRING }, + vocabulary: { type: Type.ARRAY, items: { type: Type.OBJECT, properties: { word: { type: Type.STRING }, reading: { type: Type.STRING }, meaning: { type: Type.STRING } } } }, + grammarPoints: { type: Type.ARRAY, items: { type: Type.OBJECT, properties: { point: { type: Type.STRING }, explanation: { type: Type.STRING } } } } + }, + required: ["title", "japaneseContent", "translation", "vocabulary", "grammarPoints"] + } + } + }); + return response.text ? JSON.parse(response.text) : null; + }); + } + + async generateListeningLesson(topic: string, difficulty: ReadingDifficulty, language: Language): Promise { + const ai = this.getAi(); + const targetLangName = LANGUAGE_MAP[language]; + // Prompt asks for a conversation or monologue suitable for listening practice + const prompt = `Create a Japanese listening practice script on "${topic}", level ${difficulty}. It should be a conversation or monologue. + Output JSON with: + - title + - script (The full Japanese text of the conversation/monologue) + - translation (The full text in ${targetLangName}) + - vocabulary (Key words) + - questions (3 multiple choice comprehension questions in ${targetLangName}) + - Each question needs: question, options (array of 3 strings), correctIndex (0-2), explanation. + `; + + return this.retryOperation(async () => { + const response = await ai.models.generateContent({ + model: 'gemini-2.5-flash', + contents: { parts: [{ text: prompt }] }, + config: { + responseMimeType: "application/json", + responseSchema: { + type: Type.OBJECT, + properties: { + title: { type: Type.STRING }, + script: { type: Type.STRING }, + translation: { type: Type.STRING }, + vocabulary: { type: Type.ARRAY, items: { type: Type.OBJECT, properties: { word: { type: Type.STRING }, reading: { type: Type.STRING }, meaning: { type: Type.STRING } } } }, + questions: { + type: Type.ARRAY, + items: { + type: Type.OBJECT, + properties: { + id: { type: Type.STRING }, + question: { type: Type.STRING }, + options: { type: Type.ARRAY, items: { type: Type.STRING } }, + correctIndex: { type: Type.INTEGER }, + explanation: { type: Type.STRING } + }, + required: ["question", "options", "correctIndex", "explanation"] + } + } + }, + required: ["title", "script", "translation", "vocabulary", "questions"] + } + } + }); + return response.text ? JSON.parse(response.text) : null; + }); + } + + async generateReadingTutorResponse(question: string, lesson: ReadingLesson | ListeningLesson, history: string, language: Language): Promise { + const ai = this.getAi(); + // Handle both ReadingLesson (japaneseContent) and ListeningLesson (script) + const content = 'japaneseContent' in lesson ? lesson.japaneseContent : lesson.script; + const prompt = `Tutor for text "${lesson.title}". Question: "${question}". History: ${history}. Explain in ${LANGUAGE_MAP[language]}.`; + return this.retryOperation(async () => { + const res = await ai.models.generateContent({ + model: 'gemini-2.5-flash', + contents: { parts: [{ text: prompt }] } + }); + return res.text || ""; + }); + } + + async translateText(text: string, target: string, source: string = "Auto"): Promise { + const ai = this.getAi(); + return this.retryOperation(async () => { + const res = await ai.models.generateContent({ + model: 'gemini-2.5-flash', + contents: { parts: [{ text: `Translate the following text from ${source} to ${target}.` }, { text: text }] }, + config: { + responseMimeType: "application/json", + responseSchema: { + type: Type.OBJECT, + properties: { translation: { type: Type.STRING } }, + required: ["translation"] + } + } + }); + return (res.text ? JSON.parse(res.text).translation : "") || ""; + }); + } + + async translateImage(base64: string, target: string, source: string = "Auto"): Promise<{ original: string; translated: string } | null> { + const ai = this.getAi(); + const cleanBase64 = base64.replace(/^data:image\/(png|jpeg|jpg|webp|heic|heif);base64,/i, ""); + return this.retryOperation(async () => { + const res = await ai.models.generateContent({ + model: 'gemini-2.5-flash', + contents: { + parts: [{ inlineData: { mimeType: 'image/jpeg', data: cleanBase64 } }, { text: `Extract text (Language: ${source}) and translate to ${target}. JSON output: original, translated.` }] + }, + config: { + responseMimeType: "application/json", + responseSchema: { + type: Type.OBJECT, + properties: { original: { type: Type.STRING }, translated: { type: Type.STRING } }, + required: ["original", "translated"] + } + } + }); + return res.text ? JSON.parse(res.text) : null; + }); + } + + async extractAndAnalyzeText(base64: string, language: Language): Promise { + const ai = this.getAi(); + const cleanBase64 = base64.replace(/^data:image\/(png|jpeg|jpg|webp|heic|heif);base64,/i, ""); + const targetLang = LANGUAGE_MAP[language]; + const prompt = `OCR and analyze text. Explain in ${targetLang}. JSON: extractedText, detectedLanguage, summary, vocabulary, grammarPoints.`; + + return this.retryOperation(async () => { + const res = await ai.models.generateContent({ + model: 'gemini-2.5-flash', + contents: { + parts: [{ inlineData: { mimeType: 'image/jpeg', data: cleanBase64 } }, { text: prompt }] + }, + config: { + responseMimeType: "application/json", + responseSchema: { + type: Type.OBJECT, + properties: { + extractedText: { type: Type.STRING }, + detectedLanguage: { type: Type.STRING }, + summary: { type: Type.STRING }, + vocabulary: { type: Type.ARRAY, items: { type: Type.OBJECT, properties: { word: { type: Type.STRING }, reading: { type: Type.STRING }, meaning: { type: Type.STRING } } } }, + grammarPoints: { type: Type.ARRAY, items: { type: Type.OBJECT, properties: { point: { type: Type.STRING }, explanation: { type: Type.STRING } } } } + }, + required: ["extractedText", "detectedLanguage", "summary", "vocabulary", "grammarPoints"] + } + } + }); + return res.text ? JSON.parse(res.text) : null; + }); + } +} + +export const geminiService = new GeminiService(); \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..2ff5628 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,14 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + "./**/*.{js,ts,jsx,tsx}" + ], + theme: { + extend: {}, + }, + plugins: [ + require('@tailwindcss/typography'), + ], +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..c2da5b3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": true + }, + "include": ["./**/*.ts", "./**/*.tsx"] +} \ No newline at end of file diff --git a/types.ts b/types.ts new file mode 100644 index 0000000..80963f2 --- /dev/null +++ b/types.ts @@ -0,0 +1,172 @@ + + +export enum Role { + USER = 'user', + MODEL = 'model', +} + +export enum MessageType { + TEXT = 'text', + AUDIO = 'audio', + IMAGE = 'image', + VIDEO = 'video', +} + +export interface ChatMessage { + id: string; + role: Role; + type: MessageType; + content: string; // Text content or base64/url for media + model?: string; // Model used for generation + metadata?: { + isThinking?: boolean; + audioUrl?: string; // For TTS playback or User recording + imageUrl?: string; + videoUrl?: string; + transcription?: string; // For audio inputs + }; + timestamp: number; +} + +// New Interface for Chat Sessions +export interface ChatSession { + id: string; + title: string; + messages: ChatMessage[]; + createdAt: number; + updatedAt: number; +} + +export enum AppMode { + CHAT = 'chat', + READING = 'reading', + LISTENING = 'listening', // New Listening Mode + SPEAKING = 'speaking', + CREATIVE = 'creative', + TRANSLATION = 'translation', + OCR = 'ocr', +} + +export type Language = 'en' | 'ja' | 'zh'; + +// Specific Gemini Models +export enum ModelNames { + TEXT_FAST = 'gemini-2.5-flash', + TEXT_REASONING = 'gemini-3-pro-preview', + TTS = 'gemini-2.5-flash-preview-tts', + IMAGE_GEN = 'imagen-4.0-generate-001', + IMAGE_EDIT = 'gemini-2.5-flash-image', // Nano Banana + VIDEO_GEN = 'veo-3.1-fast-generate-preview', + TRANSCRIPTION = 'gemini-2.5-flash', +} + +export const AVAILABLE_CHAT_MODELS = [ + { id: 'gemini-3-pro-preview', name: 'Gemini 3 Pro (Default - Best Reasoning)' }, + { id: 'gemini-2.5-flash', name: 'Gemini 2.5 Flash (Fast & Balanced)' } +]; + +// Speaking Mode Types +export interface PronunciationFeedback { + score: number; // 0-100 + transcription: string; + response: string; // AI Reply in Japanese + translation: string; // AI Reply in English/Native Lang + pronunciationIssues: string[]; // List of specific phoneme/pitch errors + advice: string; // General advice +} + +export interface Scenario { + id: string; + title: string; + icon: string; + description: string; + initialMessage: string; // What AI says first + initialTranslation?: string; // Translation of initial message + role: string; // Who the AI is +} + +// Reading Mode Types +export enum ReadingDifficulty { + BEGINNER = 'beginner', // N5/N4 + INTERMEDIATE = 'intermediate', // N3/N2 + ADVANCED = 'advanced', // N1+ +} + +export interface ReadingLesson { + title: string; + japaneseContent: string; + translation: string; + vocabulary: { word: string; reading: string; meaning: string }[]; + grammarPoints?: { point: string; explanation: string }[]; +} + +export interface ReadingLessonRecord extends ReadingLesson { + id: string; + topic: string; + difficulty: ReadingDifficulty; + timestamp: number; + chatHistory?: ChatMessage[]; // Persist tutor chat +} + +// Listening Mode Types +export interface QuizQuestion { + id: string; + question: string; + options: string[]; + correctIndex: number; + explanation: string; +} + +export interface ListeningLesson { + title: string; + script: string; // The full Japanese text (initially hidden) + translation: string; + vocabulary: { word: string; reading: string; meaning: string }[]; + questions: QuizQuestion[]; +} + +export interface ListeningLessonRecord extends ListeningLesson { + id: string; + topic: string; + difficulty: ReadingDifficulty; + timestamp: number; + chatHistory?: ChatMessage[]; +} + +// OCR Mode Types +export interface OCRAnalysis { + extractedText: string; + detectedLanguage: string; + summary: string; + vocabulary: { word: string; reading: string; meaning: string }[]; + grammarPoints: { point: string; explanation: string }[]; +} + +export interface OCRRecord { + id: string; + timestamp: number; + imagePreview: string; + analysis: OCRAnalysis; +} + +// Translation Mode Types +export interface TranslationRecord { + id: string; + sourceText: string; + targetText: string; + sourceLang: string; // e.g. 'Detected Language' or 'English' + targetLang: string; // e.g. 'Japanese' + timestamp: number; +} + +// Backup Data Type +export interface AppDataBackup { + version: number; + createdAt: number; + language: Language; + chatSessions: ChatSession[]; + translationHistory: TranslationRecord[]; + readingHistory?: ReadingLessonRecord[]; + ocrHistory?: OCRRecord[]; + listeningHistory?: ListeningLessonRecord[]; +} \ No newline at end of file diff --git a/utils/audioUtils.ts b/utils/audioUtils.ts new file mode 100644 index 0000000..3f9419b --- /dev/null +++ b/utils/audioUtils.ts @@ -0,0 +1,80 @@ + +export const base64ToUint8Array = (base64: string) => { + const binaryString = atob(base64); + const len = binaryString.length; + const bytes = new Uint8Array(len); + for (let i = 0; i < len; i++) { + bytes[i] = binaryString.charCodeAt(i); + } + return bytes; +}; + +export const uint8ArrayToBase64 = (bytes: Uint8Array) => { + let binary = ''; + const len = bytes.byteLength; + for (let i = 0; i < len; i++) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary); +}; + +export const triggerDownload = (blob: Blob, filename: string) => { + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); +}; + +export const createWavFileFromPcm = (pcmData: Uint8Array, sampleRate: number = 24000, numChannels: number = 1): Blob => { + const header = new ArrayBuffer(44); + const view = new DataView(header); + + const writeString = (view: DataView, offset: number, string: string) => { + for (let i = 0; i < string.length; i++) { + view.setUint8(offset + i, string.charCodeAt(i)); + } + }; + + writeString(view, 0, 'RIFF'); + view.setUint32(4, 36 + pcmData.length, true); + writeString(view, 8, 'WAVE'); + writeString(view, 12, 'fmt '); + view.setUint32(16, 16, true); + view.setUint16(20, 1, true); + view.setUint16(22, numChannels, true); + view.setUint32(24, sampleRate, true); + view.setUint32(28, sampleRate * numChannels * 2, true); + view.setUint16(32, numChannels * 2, true); + view.setUint16(34, 16, true); + writeString(view, 36, 'data'); + view.setUint32(40, pcmData.length, true); + + return new Blob([view, pcmData], { type: 'audio/wav' }); +}; + +export const processAndDownloadAudio = (base64Data: string, filename: string) => { + try { + // Check for RIFF header (WAV) + // Some base64 strings might have newlines, strip them if necessary, + // but generally atob handles it or we assume clean base64. + const binaryString = atob(base64Data.substring(0, 50).replace(/\s/g, '')); + const isWav = binaryString.startsWith('RIFF'); + + if (isWav) { + const bytes = base64ToUint8Array(base64Data); + const blob = new Blob([bytes], { type: 'audio/wav' }); + triggerDownload(blob, filename); + } else { + // Assume Raw PCM 24kHz 16-bit Mono (Gemini Flash TTS default) + const bytes = base64ToUint8Array(base64Data); + const blob = createWavFileFromPcm(bytes, 24000, 1); + triggerDownload(blob, filename); + } + } catch (e) { + console.error("Error downloading audio", e); + } +}; diff --git a/utils/localization.ts b/utils/localization.ts new file mode 100644 index 0000000..3efa0ba --- /dev/null +++ b/utils/localization.ts @@ -0,0 +1,926 @@ + + +import { Language, Scenario } from "../types"; + +export const getScenarios = (language: Language): Scenario[] => { + switch(language) { + case 'ja': + return [ + { + id: 'cafe_order', + title: 'カフェで注文', + icon: '☕', + description: '東京のカフェでコーヒーと軽食を注文する練習。', + initialMessage: 'いらっしゃいませ!ご注文はお決まりですか?', + role: '店員' + }, + { + id: 'train_station', + title: '駅での道案内', + icon: '🚄', + description: '駅員に行き先を尋ねる練習。', + initialMessage: 'はい、どうされましたか?', + role: '駅員' + }, + { + id: 'conbini', + title: 'コンビニでの買い物', + icon: '🏪', + description: 'コンビニで支払いをする練習。', + initialMessage: 'お弁当温めますか?', + role: '店員' + }, + { + id: 'hotel_checkin', + title: 'ホテルのチェックイン', + icon: '🏨', + description: 'ホテルのフロントでチェックインをする。', + initialMessage: 'いらっしゃいませ。チェックインでございますか?', + role: 'フロント係' + }, + { + id: 'immigration', + title: '入国審査', + icon: '🛂', + description: '空港の入国審査で質問に答える練習。', + initialMessage: '次の方どうぞ。パスポートを見せてください。', + role: '審査官' + }, + { + id: 'boarding', + title: '搭乗手続き', + icon: '✈️', + description: '搭乗ゲートでのやり取り。', + initialMessage: 'ご搭乗ありがとうございます。パスポートと搭乗券を拝見します。', + role: '地上係員' + } + ]; + case 'zh': + return [ + { + id: 'cafe_order', + title: '咖啡厅点单', + icon: '☕', + description: '练习在东京的咖啡厅点咖啡和小吃。', + initialMessage: 'いらっしゃいませ!ご注文はお決まりですか?', + initialTranslation: '欢迎光临!决定好要点什么了吗?', + role: '店员' + }, + { + id: 'train_station', + title: '车站问路', + icon: '🚄', + description: '练习询问车站工作人员路线。', + initialMessage: 'はい、どうされましたか?', + initialTranslation: '您好,有什么可以帮您的吗?', + role: '站务员' + }, + { + id: 'conbini', + title: '便利店购物', + icon: '🏪', + description: '练习在便利店结账。', + initialMessage: 'お弁当温めますか?', + initialTranslation: '便当需要加热吗?', + role: '店员' + }, + { + id: 'hotel_checkin', + title: '酒店入住', + icon: '🏨', + description: '在酒店前台办理入住手续。', + initialMessage: 'いらっしゃいませ。チェックインでございますか?', + initialTranslation: '欢迎光临。是办理入住吗?', + role: '前台接待' + }, + { + id: 'immigration', + title: '入境审查', + icon: '🛂', + description: '练习在机场回答入境审查官的提问。', + initialMessage: '次の方どうぞ。パスポートを見せてください。', + initialTranslation: '下一位。请出示您的护照。', + role: '审查官' + }, + { + id: 'boarding', + title: '登机手续', + icon: '✈️', + description: '练习登机口的对话。', + initialMessage: 'ご搭乗ありがとうございます。パスポートと搭乗券を拝見します。', + initialTranslation: '感谢您的搭乘。请出示护照和登机牌。', + role: '地勤人员' + } + ]; + default: // en + return [ + { + id: 'cafe_order', + title: 'Ordering at a Cafe', + icon: '☕', + description: 'Practice ordering coffee and snacks at a cafe in Tokyo.', + initialMessage: 'いらっしゃいませ!ご注文はお決まりですか?', + initialTranslation: 'Welcome! Have you decided on your order?', + role: 'Barista' + }, + { + id: 'train_station', + title: 'Asking Directions', + icon: '🚄', + description: 'Practice asking a station attendant for help finding a platform.', + initialMessage: 'はい、どうされましたか?', + initialTranslation: 'Yes, how can I help you?', + role: 'Station Attendant' + }, + { + id: 'conbini', + title: 'Convenience Store', + icon: '🏪', + description: 'Buying items at a Konbini.', + initialMessage: 'お弁当温めますか?', + initialTranslation: 'Would you like your bento warmed up?', + role: 'Clerk' + }, + { + id: 'hotel_checkin', + title: 'Hotel Check-in', + icon: '🏨', + description: 'Checking into a hotel.', + initialMessage: 'いらっしゃいませ。チェックインでございますか?', + initialTranslation: 'Welcome. Are you checking in?', + role: 'Receptionist' + }, + { + id: 'immigration', + title: 'Immigration', + icon: '🛂', + description: 'Answering questions at airport immigration control.', + initialMessage: '次の方どうぞ。パスポートを見せてください。', + initialTranslation: 'Next person, please. Show me your passport.', + role: 'Officer' + }, + { + id: 'boarding', + title: 'Boarding Gate', + icon: '✈️', + description: 'Interacting with staff at the boarding gate.', + initialMessage: 'ご搭乗ありがとうございます。パスポートと搭乗券を拝見します。', + initialTranslation: 'Thank you for boarding. May I see your passport and boarding pass?', + role: 'Ground Staff' + } + ]; + } +}; + +export const translations = { + en: { + appTitle: "Sakura Sensei 🌸", + nav: { + sectionStudy: "Study & Input", + sectionPractice: "Practice & Output", + sectionTools: "Toolbox", + sectionImmersion: "Immersion", + chat: "Tutor Dojo", + reading: "Reading Hall", + listening: "Listening Lab", + speaking: "Roleplay", + creative: "Atelier", + translation: "Translator", + ocr: "Scanner", + settings: "Settings" + }, + common: { + cancel: "Cancel", + confirm: "Confirm", + delete: "Delete", + next: "Next", + generatedBy: "Generated by", + error: "Error occurred", + poweredBy: "Powered by Gemini", + deleteItemConfirm: "Are you sure you want to delete this item?", + clearHistoryConfirm: "Are you sure you want to clear the entire history?", + save: "Save", + download: "Download", + content: "Content", + tutor: "Tutor", + text: "Text", + explanation: "Explanation", + clear: "Clear", + copy: "Copy", + copied: "Copied!", + share: "Share", + shareImage: "Image", + shareText: "Text", + shareFile: "File (TXT)", + aiLanguage: "AI Language", + langJa: "Japanese", + langNative: "User Language", + today: "Today", + yesterday: "Yesterday" + }, + onboarding: { + welcome: "Welcome to Sakura Sensei!", + desc1: "Your AI-powered companion for mastering Japanese.", + step1Title: "Conversational Tutor", + step1Desc: "Chat with Sakura (Gemini 3 Pro) to practice grammar or ask cultural questions.", + step2Title: "Immersive Practice", + step2Desc: "Roleplay realistic scenarios, generate reading materials, and scan real-world text.", + step3Title: "Creative Tools", + step3Desc: "Generate images and videos to visualize your learning journey.", + startBtn: "Start Learning", + selectLang: "Select Interface Language" + }, + chat: { + welcome: "Konnichiwa! 🌸 I am Sakura. How can I help you with your Japanese today?", + inputPlaceholder: "Send a message...", + thinkingPlaceholder: "Reasoning about grammar...", + imageAttached: "Image attached", + sending: "Sakura is thinking...", + error: "Connection lost.", + locationError: "Region not supported. Please configure a Proxy URL in Settings.", + playUserAudio: "Play Recording", + listenPronunciation: "Listen", + deepThinking: "Deep Thought", + imageAnalyzed: "Image Analyzed", + thinkingToggle: "Thinking Mode", + newChat: "New Chat", + history: "Chat History", + noHistory: "No previous chats.", + deleteChat: "Delete", + deleteConfirm: "Are you sure you want to delete this chat session?", + untitled: "Untitled Chat", + transcribedPrefix: "(Transcribed): " + }, + creative: { + title: "Creative Atelier 🎨", + genImage: "Paint", + editImage: "Magic Edit", + genVideo: "Dream Video", + promptLabel: "Your Vision", + editLabel1: "1. Base Photo", + editLabel2: "2. Instruction", + uploadPlaceholder: "Drop an image here", + generateBtn: "Generate", + creatingBtn: "Creating...", + download: "Download", + videoWarning: "* Video generation (Veo) takes time.", + emptyState: "Your masterpiece will appear here", + imagePrompt: "Cyberpunk samurai cat in neon Tokyo...", + editPrompt: "Turn trees into cherry blossoms...", + videoPrompt: "Traditional tea ceremony in a futuristic garden...", + uploadAlert: "Please upload an image first!" + }, + speaking: { + title: "Conversation Dojo 🗣️", + subtitle: "Roleplay in realistic scenarios. Get instant feedback on accent and fluency.", + back: "Exit", + listening: "Listening...", + tapSpeak: "Tap to Speak", + processing: "Analyzing...", + feedbackTitle: "Sensei's Report", + score: "Fluency", + toImprove: "Corrections", + advice: "Advice", + transcription: "You Said", + meaning: "Meaning", + perfect: "Sugoi! Perfect pronunciation! 🎉", + emptyFeedback: "Speak clearly to get feedback.", + replay: "Replay", + start: "Start", + roleplay: "Role", + translation: "Translation" + }, + reading: { + title: "Reading Hall 📜", + subtitle: "Generate custom reading lessons based on your level.", + topicLabel: "Topic", + difficultyLabel: "Level", + levels: { + beginner: "Beginner (N5-N4)", + intermediate: "Intermediate (N3-N2)", + advanced: "Advanced (N1)" + }, + generate: "Create Lesson", + generating: "Writing...", + translationToggle: "Translation", + vocabTitle: "Vocabulary", + grammarHeader: "Grammar", + qaTitle: "Tutor Chat", + qaPlaceholder: "Ask about this text...", + qaWelcome: "Lesson generated. Ask me anything about the text!", + historyTitle: "Library", + loadMore: "Open", + emptyHistory: "Empty Library", + clear: "Clear", + placeholder: "e.g. Kyoto History, Anime Culture", + translationLabel: "Translation", + thinking: "thinking...", + playAudio: "Listen", + stopAudio: "Stop", + contentMissing: "No text generated. Please try creating a new lesson with a more specific topic.", + translationMissing: "No translation available." + }, + listening: { + title: "Listening Lab 🎧", + subtitle: "Train your ears with AI-generated conversations and quizzes.", + generate: "Create Practice", + generating: "Composing...", + play: "Play Audio", + pause: "Pause", + replay: "Replay", + showScript: "Show Transcript", + hideScript: "Hide Transcript", + quizTitle: "Comprehension Quiz", + check: "Check Answer", + correct: "Correct!", + incorrect: "Incorrect, try again.", + scriptTitle: "Transcript", + historyTitle: "Practice Log", + emptyHistory: "No practice logs", + qaWelcome: "I've generated a listening exercise. Listen to the audio first, try the quiz, then ask me anything!", + noScript: "No script available to play.", + scriptMissing: "No script generated. Please try generating again." + }, + ocr: { + title: "Text Scanner 🔍", + subtitle: "Scan text (books, menus) to create study guides.", + uploadBtn: "Upload", + cameraBtn: "Camera", + processing: "Scanning...", + extractedTitle: "Extracted Text", + analysisTitle: "Study Notes", + vocabHeader: "Vocabulary", + grammarHeader: "Grammar", + summaryHeader: "Summary", + chatPlaceholder: "Ask about this text...", + reScan: "New Scan", + error: "Could not analyze image.", + history: "Scan History", + emptyHistory: "No scans yet", + clear: "Clear", + analyzedIntro: "Analyzed (Language: $lang). Ask me anything!", + historyIntro: "Loaded from history (Language: $lang).", + tutorChat: "Tutor Chat", + thinking: "thinking...", + analysisFailed: "Analysis failed." + }, + translation: { + title: "Translator", + inputLabel: "Input", + outputLabel: "Translation", + translateBtn: "Translate", + translating: "Translating...", + extracting: "Scanning...", + scanImage: "Camera", + uploadImage: "Image", + sourceLang: "Source", + targetLang: "Target", + history: "Translator History", + clear: "Clear", + copy: "Copy", + langs: { + auto: "Auto Detect", + en: "English", + ja: "Japanese", + zh: "Chinese", + ko: "Korean", + fr: "French", + es: "Spanish" + }, + errorTranslating: "Error translating.", + imageReadError: "Could not read text from image.", + imageTransError: "Image translation failed." + }, + settings: { + title: "Settings & Data", + backupTitle: "Backup", + backupDesc: "Download all data locally.", + backupBtn: "Backup", + restoreDesc: "Restore from backup file.", + restoreBtn: "Restore", + exportTitle: "Export", + exportChatBtn: "Chat Log (TXT)", + exportTransBtn: "Translations (CSV)", + exportReadingBtn: "Reading History (JSON)", + exportOCRBtn: "Scan History (JSON)", + successRestore: "Restored successfully!", + errorRestore: "Invalid file.", + apiKeyTitle: "API Configuration", + apiKeyDesc: "Configure your Gemini API access.", + apiKeyPlaceholder: "Paste API Key", + baseUrlPlaceholder: "Base URL (Optional, e.g. for Proxy)", + apiKeyMissing: "API Key is required.", + saveKey: "Save", + removeKey: "Remove", + keySaved: "Settings saved!", + keyRemoved: "Settings cleared.", + modelTitle: "AI Model", + modelDesc: "Select model for chat/reasoning.", + modelSaved: "Model updated!" + }, + recorder: { + start: "Start Mic", + stop: "Stop Mic" + } + }, + ja: { + appTitle: "さくら先生 🌸", + nav: { + sectionStudy: "学習とインプット", + sectionPractice: "練習とアウトプット", + sectionTools: "ツールボックス", + sectionImmersion: "没入体験", + chat: "学習道場", + reading: "読書の間", + listening: "聴解ラボ", + speaking: "ロールプレイ", + creative: "アトリエ", + translation: "翻訳機", + ocr: "スキャナー", + settings: "設定" + }, + common: { + cancel: "キャンセル", + confirm: "確認", + delete: "削除", + next: "次へ", + generatedBy: "生成モデル:", + error: "エラーが発生しました", + poweredBy: "Powered by Gemini", + deleteItemConfirm: "この項目を削除してもよろしいですか?", + clearHistoryConfirm: "履歴をすべて消去してもよろしいですか?", + save: "保存", + download: "ダウンロード", + content: "コンテンツ", + tutor: "チューター", + text: "テキスト", + explanation: "解説", + clear: "クリア", + copy: "コピー", + copied: "コピーしました!", + share: "共有", + shareImage: "画像", + shareText: "テキスト", + shareFile: "ファイル (TXT)", + aiLanguage: "AIの使用言語", + langJa: "日本語", + langNative: "ユーザー言語", + today: "今日", + yesterday: "昨日" + }, + onboarding: { + welcome: "さくら先生へようこそ!", + desc1: "あなたのためのAI日本語学習パートナーです。", + step1Title: "会話チューター", + step1Desc: "さくら先生(Gemini 3 Pro)とチャットして、文法や文化について学びましょう。", + step2Title: "没入型練習", + step2Desc: "リアルなシナリオでのロールプレイ、読み物の作成、現実世界のテキストのスキャン。", + step3Title: "クリエイティブツール", + step3Desc: "学習の旅を視覚化するために画像やビデオを生成します。", + startBtn: "学習を始める", + selectLang: "言語を選択" + }, + chat: { + welcome: "こんにちは!🌸 さくらです。日本語の勉強をお手伝いします。", + inputPlaceholder: "メッセージを送信...", + thinkingPlaceholder: "文法を推論中...", + imageAttached: "画像が添付されました", + sending: "さくら先生が考え中...", + error: "接続が失われました。", + locationError: "この地域はサポートされていません。設定でプロキシURLを設定してください。", + playUserAudio: "録音を再生", + listenPronunciation: "聞く", + deepThinking: "深い思考", + imageAnalyzed: "画像を分析しました", + thinkingToggle: "思考モード", + newChat: "新しいチャット", + history: "チャット履歴", + noHistory: "履歴はありません。", + deleteChat: "削除", + deleteConfirm: "このチャットセッションを削除してもよろしいですか?", + untitled: "無題のチャット", + transcribedPrefix: "(書き起こし): " + }, + creative: { + title: "クリエイティブアトリエ 🎨", + genImage: "描画", + editImage: "マジック編集", + genVideo: "夢のビデオ", + promptLabel: "あなたのビジョン", + editLabel1: "1. 元の画像", + editLabel2: "2. 指示", + uploadPlaceholder: "ここに画像をドロップ", + generateBtn: "生成", + creatingBtn: "作成中...", + download: "ダウンロード", + videoWarning: "* ビデオ生成 (Veo) には時間がかかります。", + emptyState: "ここに作品が表示されます", + imagePrompt: "ネオン輝く東京のサイバーパンク侍猫...", + editPrompt: "木を桜に変えて...", + videoPrompt: "未来的な庭園での伝統的な茶道...", + uploadAlert: "まずは画像をアップロードしてください!" + }, + speaking: { + title: "会話道場 🗣️", + subtitle: "リアルなシナリオでロールプレイ。アクセントや流暢さを即座にフィードバック。", + back: "終了", + listening: "聞いています...", + tapSpeak: "タップして話す", + processing: "分析中...", + feedbackTitle: "先生のレポート", + score: "流暢さ", + toImprove: "修正点", + advice: "アドバイス", + transcription: "あなたの発言", + meaning: "意味", + perfect: "すごい!完璧な発音です!🎉", + emptyFeedback: "はっきりと話してください。", + replay: "再生", + start: "開始", + roleplay: "役割", + translation: "翻訳" + }, + reading: { + title: "読書の間 📜", + subtitle: "レベルに合わせて読み物を生成します。", + topicLabel: "トピック", + difficultyLabel: "レベル", + levels: { + beginner: "初級 (N5-N4)", + intermediate: "中級 (N3-N2)", + advanced: "上級 (N1)" + }, + generate: "レッスン作成", + generating: "執筆中...", + translationToggle: "翻訳", + vocabTitle: "語彙", + grammarHeader: "文法", + qaTitle: "チューターチャット", + qaPlaceholder: "このテキストについて質問...", + qaWelcome: "レッスンを作成しました。テキストについて何でも聞いてください!", + historyTitle: "ライブラリ", + loadMore: "開く", + emptyHistory: "ライブラリは空です", + clear: "クリア", + placeholder: "例:京都の歴史、アニメ文化", + translationLabel: "翻訳", + thinking: "考え中...", + playAudio: "聞く", + stopAudio: "停止", + contentMissing: "コンテンツが生成されませんでした。新しいトピックで試してください。", + translationMissing: "翻訳がありません。" + }, + listening: { + title: "聴解ラボ 🎧", + subtitle: "AIが生成した会話とクイズで耳を鍛えましょう。", + generate: "練習を作成", + generating: "作成中...", + play: "音声を再生", + pause: "一時停止", + replay: "もう一度", + showScript: "スクリプトを表示", + hideScript: "スクリプトを隠す", + quizTitle: "理解度クイズ", + check: "答え合わせ", + correct: "正解!", + incorrect: "不正解、もう一度。", + scriptTitle: "スクリプト", + historyTitle: "練習ログ", + emptyHistory: "練習ログなし", + qaWelcome: "リスニング練習を作成しました。まず音声を聞いてクイズに挑戦し、その後何でも質問してください!", + noScript: "再生できるスクリプトがありません。", + scriptMissing: "スクリプトが生成されませんでした。もう一度試してください。" + }, + ocr: { + title: "テキストスキャナー 🔍", + subtitle: "テキスト(本、メニュー)をスキャンして学習ガイドを作成。", + uploadBtn: "アップロード", + cameraBtn: "カメラ", + processing: "スキャン中...", + extractedTitle: "抽出されたテキスト", + analysisTitle: "学習ノート", + vocabHeader: "語彙", + grammarHeader: "文法", + summaryHeader: "要約", + chatPlaceholder: "このテキストについて質問...", + reScan: "新しいスキャン", + error: "画像を分析できませんでした。", + history: "スキャン履歴", + emptyHistory: "スキャン履歴なし", + clear: "クリア", + analyzedIntro: "分析しました(言語:$lang)。何でも聞いてください!", + historyIntro: "履歴から読み込みました(言語:$lang)。", + tutorChat: "チューターチャット", + thinking: "考え中...", + analysisFailed: "分析に失敗しました。" + }, + translation: { + title: "翻訳機", + inputLabel: "入力", + outputLabel: "翻訳", + translateBtn: "翻訳", + translating: "翻訳中...", + extracting: "スキャン中...", + scanImage: "カメラ", + uploadImage: "画像", + sourceLang: "翻訳元", + targetLang: "翻訳先", + history: "翻訳履歴", + clear: "クリア", + copy: "コピー", + langs: { + auto: "自動検出", + en: "英語", + ja: "日本語", + zh: "中国語", + ko: "韓国語", + fr: "フランス語", + es: "スペイン語" + }, + errorTranslating: "翻訳エラー。", + imageReadError: "テキストを読み取れませんでした。", + imageTransError: "画像の翻訳に失敗しました。" + }, + settings: { + title: "設定とデータ", + backupTitle: "バックアップ", + backupDesc: "すべてのデータをローカルにダウンロード。", + backupBtn: "バックアップ", + restoreDesc: "バックアップファイルから復元。", + restoreBtn: "復元", + exportTitle: "エクスポート", + exportChatBtn: "チャットログ (TXT)", + exportTransBtn: "翻訳 (CSV)", + exportReadingBtn: "読書履歴 (JSON)", + exportOCRBtn: "スキャン履歴 (JSON)", + successRestore: "正常に復元されました!", + errorRestore: "無効なファイルです。", + apiKeyTitle: "API構成", + apiKeyDesc: "Gemini APIアクセスを構成します。", + apiKeyPlaceholder: "APIキーを貼り付け", + baseUrlPlaceholder: "ベースURL (オプション、プロキシ用)", + apiKeyMissing: "APIキーが必要です。", + saveKey: "保存", + removeKey: "削除", + keySaved: "設定を保存しました!", + keyRemoved: "設定をクリアしました。", + modelTitle: "AIモデル", + modelDesc: "チャット/推論用のモデルを選択。", + modelSaved: "モデルを更新しました!" + }, + recorder: { + start: "マイク開始", + stop: "マイク停止" + } + }, + zh: { + appTitle: "樱花老师 🌸", + nav: { + sectionStudy: "学习与输入", + sectionPractice: "练习与输出", + sectionTools: "工具箱", + sectionImmersion: "沉浸体验", + chat: "学习道场", + reading: "阅读室", + listening: "听力实验室", + speaking: "角色扮演", + creative: "工作室", + translation: "翻译机", + ocr: "扫描仪", + settings: "设置" + }, + common: { + cancel: "取消", + confirm: "确认", + delete: "删除", + next: "下一步", + generatedBy: "生成模型:", + error: "发生错误", + poweredBy: "Powered by Gemini", + deleteItemConfirm: "您确定要删除此项目吗?", + clearHistoryConfirm: "您确定要清空历史记录吗?", + save: "保存", + download: "下载", + content: "内容", + tutor: "导师", + text: "文本", + explanation: "解析", + clear: "清除", + copy: "复制", + copied: "已复制!", + share: "分享", + shareImage: "图片", + shareText: "文本", + shareFile: "文件 (TXT)", + aiLanguage: "AI使用语言", + langJa: "日语", + langNative: "用户语言", + today: "今天", + yesterday: "昨天" + }, + onboarding: { + welcome: "欢迎来到樱花老师!", + desc1: "您的AI日语学习伙伴。", + step1Title: "对话导师", + step1Desc: "与樱花老师(Gemini 3 Pro)聊天,学习语法或文化。", + step2Title: "沉浸式练习", + step2Desc: "角色扮演现实场景,生成阅读材料,扫描现实世界的文本。", + step3Title: "创意工具", + step3Desc: "生成图像和视频以可视化您的学习之旅。", + startBtn: "开始学习", + selectLang: "选择界面语言" + }, + chat: { + welcome: "你好!🌸 我是樱花。今天我可以帮你学习日语吗?", + inputPlaceholder: "发送消息...", + thinkingPlaceholder: "正在推理由法...", + imageAttached: "已附上图片", + sending: "樱花老师正在思考...", + error: "连接丢失。", + locationError: "不支持该地区。请在设置中配置代理URL。", + playUserAudio: "播放录音", + listenPronunciation: "听", + deepThinking: "深度思考", + imageAnalyzed: "图像已分析", + thinkingToggle: "思考模式", + newChat: "新聊天", + history: "聊天记录", + noHistory: "没有以前的聊天。", + deleteChat: "删除", + deleteConfirm: "您确定要删除此聊天会话吗?", + untitled: "未命名聊天", + transcribedPrefix: "(转录): " + }, + creative: { + title: "创意工作室 🎨", + genImage: "绘画", + editImage: "魔法编辑", + genVideo: "梦境视频", + promptLabel: "你的愿景", + editLabel1: "1. 基础照片", + editLabel2: "2. 指令", + uploadPlaceholder: "在这里拖放图像", + generateBtn: "生成", + creatingBtn: "正在创建...", + download: "下载", + videoWarning: "* 视频生成 (Veo) 需要时间。", + emptyState: "你的杰作将出现在这里", + imagePrompt: "霓虹灯闪烁的东京赛博朋克武士猫...", + editPrompt: "把树变成樱花...", + videoPrompt: "未来花园中的传统茶道...", + uploadAlert: "请先上传图片!" + }, + speaking: { + title: "对话道场 🗣️", + subtitle: "在现实场景中进行角色扮演。即时反馈口音和流利度。", + back: "退出", + listening: "正在听...", + tapSpeak: "点击说话", + processing: "正在分析...", + feedbackTitle: "老师的报告", + score: "流利度", + toImprove: "修正", + advice: "建议", + transcription: "你说了", + meaning: "意思", + perfect: "太棒了!完美的发音!🎉", + emptyFeedback: "请清楚地说出以获得反馈。", + replay: "重播", + start: "开始", + roleplay: "角色", + translation: "翻译" + }, + reading: { + title: "阅读室 📜", + subtitle: "根据您的水平生成自定义阅读课程。", + topicLabel: "主题", + difficultyLabel: "等级", + levels: { + beginner: "初级 (N5-N4)", + intermediate: "中级 (N3-N2)", + advanced: "高级 (N1)" + }, + generate: "创建课程", + generating: "正在写作...", + translationToggle: "翻译", + vocabTitle: "词汇", + grammarHeader: "语法", + qaTitle: "导师聊天", + qaPlaceholder: "关于此文本的问题...", + qaWelcome: "课程已生成。关于文本的问题尽管问我!", + historyTitle: "图书馆", + loadMore: "打开", + emptyHistory: "图书馆为空", + clear: "清除", + placeholder: "例如:京都历史,动漫文化", + translationLabel: "翻译", + thinking: "思考中...", + playAudio: "听", + stopAudio: "停止", + contentMissing: "未生成内容。请尝试新的主题。", + translationMissing: "暂无翻译。" + }, + listening: { + title: "听力实验室 🎧", + subtitle: "通过AI生成的对话和测验训练您的耳朵。", + generate: "创建练习", + generating: "正在创作...", + play: "播放音频", + pause: "暂停", + replay: "重播", + showScript: "显示脚本", + hideScript: "隐藏脚本", + quizTitle: "理解测验", + check: "检查答案", + correct: "正确!", + incorrect: "不正确,请重试。", + scriptTitle: "脚本", + historyTitle: "练习日志", + emptyHistory: "暂无练习记录", + qaWelcome: "我已生成听力练习。先听音频,尝试测验,然后尽管问我任何问题!", + noScript: "暂无脚本可播放。", + scriptMissing: "未生成脚本。请重试。" + }, + ocr: { + title: "文本扫描仪 🔍", + subtitle: "扫描文本(书籍,菜单)以创建学习指南。", + uploadBtn: "上传", + cameraBtn: "相机", + processing: "正在扫描...", + extractedTitle: "提取的文本", + analysisTitle: "学习笔记", + vocabHeader: "词汇", + grammarHeader: "语法", + summaryHeader: "摘要", + chatPlaceholder: "关于此文本的问题...", + reScan: "新扫描", + error: "无法分析图像。", + history: "扫描记录", + emptyHistory: "暂无扫描", + clear: "清除", + analyzedIntro: "已分析(语言:$lang)。尽管问我!", + historyIntro: "从历史记录加载(语言:$lang)。", + tutorChat: "导师聊天", + thinking: "思考中...", + analysisFailed: "分析失败。" + }, + translation: { + title: "翻译机", + inputLabel: "输入", + outputLabel: "翻译", + translateBtn: "翻译", + translating: "正在翻译...", + extracting: "正在扫描...", + scanImage: "相机", + uploadImage: "图像", + sourceLang: "源语言", + targetLang: "目标语言", + history: "翻译记录", + clear: "清除", + copy: "复制", + langs: { + auto: "自动检测", + en: "英语", + ja: "日语", + zh: "中文", + ko: "韩语", + fr: "法语", + es: "西班牙语" + }, + errorTranslating: "翻译错误。", + imageReadError: "无法读取文本。", + imageTransError: "图片翻译失败。" + }, + settings: { + title: "设置和数据", + backupTitle: "备份", + backupDesc: "下载所有数据到本地。", + backupBtn: "备份", + restoreDesc: "从备份文件恢复。", + restoreBtn: "恢复", + exportTitle: "导出", + exportChatBtn: "聊天记录 (TXT)", + exportTransBtn: "翻译 (CSV)", + exportReadingBtn: "阅读记录 (JSON)", + exportOCRBtn: "扫描记录 (JSON)", + successRestore: "恢复成功!", + errorRestore: "无效文件。", + apiKeyTitle: "API配置", + apiKeyDesc: "配置您的Gemini API访问。", + apiKeyPlaceholder: "粘贴API密钥", + baseUrlPlaceholder: "Base URL (可选,用于代理)", + apiKeyMissing: "需要API密钥。", + saveKey: "保存", + removeKey: "删除", + keySaved: "设置已保存!", + keyRemoved: "设置已清除。", + modelTitle: "AI模型", + modelDesc: "选择聊天/推理模型。", + modelSaved: "模型已更新!" + }, + recorder: { + start: "开始录音", + stop: "停止录音" + } + } +}; \ No newline at end of file diff --git a/views/ChatView.tsx b/views/ChatView.tsx new file mode 100644 index 0000000..dc5c2c9 --- /dev/null +++ b/views/ChatView.tsx @@ -0,0 +1,546 @@ + + +import React, { useState, useRef, useEffect } from 'react'; +import { ChatMessage, Role, MessageType, Language, ChatSession } from '../types'; +import { geminiService } from '../services/geminiService'; +import ChatBubble from '../components/ChatBubble'; +import AudioRecorder from '../components/AudioRecorder'; +import { Send, Image as ImageIcon, BrainCircuit, Loader2, Plus, History, MessageSquare, Trash2, X, Sparkles, PanelRightClose, PanelRightOpen, Share2, Download, FileText, Image as ImageIconLucide, Languages } from 'lucide-react'; +import { translations } from '../utils/localization'; +import html2canvas from 'html2canvas'; + +interface ChatViewProps { + language: Language; + sessions: ChatSession[]; + activeSessionId: string; + onNewSession: () => void; + onSelectSession: (id: string) => void; + onDeleteSession: (id: string) => void; + onClearAllSessions: () => void; + onUpdateSession: (id: string, messages: ChatMessage[]) => void; + selectedModel?: string; + addToast: (type: 'success' | 'error' | 'info', msg: string) => void; +} + +const ChatView: React.FC = ({ + language, + sessions, + activeSessionId, + onNewSession, + onSelectSession, + onDeleteSession, + onClearAllSessions, + onUpdateSession, + selectedModel, + addToast +}) => { + const t = translations[language].chat; + const tCommon = translations[language].common; + + const activeSession = sessions.find(s => s.id === activeSessionId) || sessions[0]; + const messages = activeSession ? activeSession.messages : []; + + const [inputValue, setInputValue] = useState(''); + const [isLoading, setIsLoading] = useState(false); + const [useThinking, setUseThinking] = useState(false); + const [attachedImage, setAttachedImage] = useState(null); + + // Settings State + const [aiSpeakingLanguage, setAiSpeakingLanguage] = useState<'ja' | 'native'>('ja'); + const [isShareMenuOpen, setIsShareMenuOpen] = useState(false); + + // History Sidebar State - Default Closed as requested + const [isHistoryOpen, setIsHistoryOpen] = useState(false); + + const messagesEndRef = useRef(null); + const messagesContainerRef = useRef(null); + const fileInputRef = useRef(null); + + const scrollToBottom = () => { + messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); + }; + + useEffect(() => { + scrollToBottom(); + }, [messages, activeSessionId]); + + // Close share menu on click outside + useEffect(() => { + const handleClick = () => setIsShareMenuOpen(false); + if (isShareMenuOpen) window.addEventListener('click', handleClick); + return () => window.removeEventListener('click', handleClick); + }, [isShareMenuOpen]); + + const handleUpdateMessage = (updatedMsg: ChatMessage) => { + const updatedMessages = messages.map(m => m.id === updatedMsg.id ? updatedMsg : m); + onUpdateSession(activeSessionId, updatedMessages); + }; + + const handleSendMessage = async () => { + if ((!inputValue.trim() && !attachedImage) || isLoading) return; + + const currentText = inputValue; + const currentImage = attachedImage; + + setInputValue(''); + setAttachedImage(null); + setIsLoading(true); + + // 1. Construct User Message + const userMsg: ChatMessage = { + id: Date.now().toString(), + role: Role.USER, + type: MessageType.TEXT, + content: currentText, + timestamp: Date.now(), + metadata: { imageUrl: currentImage || undefined } + }; + + // IMPORTANT: Calculate new history locally to avoid stale closure issues after await + const messagesWithUser = [...messages, userMsg]; + + // Update UI immediately with user message + onUpdateSession(activeSessionId, messagesWithUser); + + try { + // 2. Get Response + const result = await geminiService.generateTextResponse( + currentText || "Describe this image", + currentImage || undefined, + useThinking, + language, + selectedModel, + aiSpeakingLanguage + ); + + // 3. TTS (if short and not thinking) + let ttsAudio: string | null = null; + if (!useThinking && result.text.length < 300) { + try { ttsAudio = await geminiService.generateSpeech(result.text); } catch (e) {} + } + + const aiMsg: ChatMessage = { + id: (Date.now() + 1).toString(), + role: Role.MODEL, + type: MessageType.TEXT, + content: result.text, + model: result.model, + timestamp: Date.now(), + metadata: { isThinking: useThinking, audioUrl: ttsAudio || undefined } + }; + + // 4. Add AI Message to the LOCALLY calculated history (messagesWithUser) + // This ensures we don't lose the user message we just added + onUpdateSession(activeSessionId, [...messagesWithUser, aiMsg]); + + } catch (error: any) { + const errorMsg = error?.message || t.error; + const errorMsgObj: ChatMessage = { + id: Date.now().toString(), + role: Role.MODEL, + type: MessageType.TEXT, + content: `${t.error}\n(${errorMsg})`, + timestamp: Date.now() + }; + onUpdateSession(activeSessionId, [...messagesWithUser, errorMsgObj]); + } finally { + setIsLoading(false); + setUseThinking(false); + } + }; + + const handleAudioInput = async (base64Audio: string) => { + setIsLoading(true); + try { + // 1. Transcribe first (async) + const transcription = await geminiService.transcribeAudio(base64Audio); + + const userMsg: ChatMessage = { + id: Date.now().toString(), + role: Role.USER, + type: MessageType.AUDIO, + content: `${t.transcribedPrefix}${transcription}`, + timestamp: Date.now(), + metadata: { audioUrl: base64Audio, transcription: transcription } + }; + + // 2. Update UI with User Message + const messagesWithUser = [...messages, userMsg]; + onUpdateSession(activeSessionId, messagesWithUser); + + // 3. Generate AI Response + const result = await geminiService.generateTextResponse(transcription, undefined, false, language, selectedModel, aiSpeakingLanguage); + const ttsAudio = await geminiService.generateSpeech(result.text); + + const aiMsg: ChatMessage = { + id: (Date.now() + 1).toString(), + role: Role.MODEL, + type: MessageType.TEXT, + content: result.text, + model: result.model, + timestamp: Date.now(), + metadata: { audioUrl: ttsAudio || undefined } + }; + + // 4. Update UI with AI Message using local history + onUpdateSession(activeSessionId, [...messagesWithUser, aiMsg]); + + } catch (e) { + console.error(e); + addToast('error', t.error); + } finally { + setIsLoading(false); + } + }; + + const handleImageUpload = (e: React.ChangeEvent) => { + const file = e.target.files?.[0]; + if (file) { + const reader = new FileReader(); + reader.onloadend = () => { + setAttachedImage(reader.result as string); + }; + reader.readAsDataURL(file); + } + }; + + // Share Handlers + const shareAsText = () => { + const text = messages.map(m => `[${new Date(m.timestamp).toLocaleString()}] ${m.role === Role.USER ? 'User' : 'Sakura'}: ${m.content}`).join('\n\n'); + navigator.clipboard.writeText(text); + addToast('success', tCommon.copied); + }; + + const shareAsFile = () => { + const text = messages.map(m => `[${new Date(m.timestamp).toLocaleString()}] ${m.role === Role.USER ? 'User' : 'Sakura'}: ${m.content}`).join('\n\n'); + const blob = new Blob([text], { type: 'text/plain' }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = `sakura_chat_${Date.now()}.txt`; + a.click(); + URL.revokeObjectURL(url); + }; + + const shareAsImage = async () => { + if (!messagesContainerRef.current) return; + addToast('info', 'Generating image...'); + + // Clone the element to capture full content + const original = messagesContainerRef.current; + const clone = original.cloneNode(true) as HTMLElement; + + // We need to maintain the width to ensure text wrapping is identical + const width = original.offsetWidth; + + clone.style.width = `${width}px`; + clone.style.height = 'auto'; + clone.style.maxHeight = 'none'; + clone.style.overflow = 'visible'; + clone.style.position = 'absolute'; + clone.style.top = '-9999px'; + clone.style.left = '0'; + clone.style.background = '#f8fafc'; // Match bg-slate-50 + clone.style.zIndex = '-1'; + + document.body.appendChild(clone); + + try { + // Small delay to ensure DOM rendering + await new Promise(resolve => setTimeout(resolve, 100)); + + const canvas = await html2canvas(clone, { + useCORS: true, + scale: 2, // Higher res + backgroundColor: '#f8fafc', + windowWidth: width, + height: clone.scrollHeight, + windowHeight: clone.scrollHeight + }); + + const url = canvas.toDataURL('image/png'); + const a = document.createElement('a'); + a.href = url; + a.download = `sakura_chat_${Date.now()}.png`; + a.click(); + } catch (e) { + console.error(e); + addToast('error', 'Failed to generate image'); + } finally { + if (document.body.contains(clone)) { + document.body.removeChild(clone); + } + } + }; + + // --- Sub-components --- + + const HistoryContent = () => ( +
+
+

+ {t.history} +

+
+ {sessions.length > 0 && ( + + )} + +
+
+ +
+ +
+ +
+ {sessions.length === 0 &&
{t.noHistory}
} + {sessions.slice().sort((a,b) => b.updatedAt - a.updatedAt).map(session => ( +
{ onSelectSession(session.id); if(window.innerWidth < 768) setIsHistoryOpen(false); }} + > + {/* Icon */} +
+ +
+ + {/* Content */} +
+
+

+ {session.title || t.untitled} +

+
+
+ + {new Date(session.updatedAt).toLocaleDateString()} {new Date(session.updatedAt).toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'})} + +
+

+ {session.messages.length > 1 ? session.messages[session.messages.length-1].content.substring(0, 50) : '...'} +

+
+ + {/* Delete Button */} + +
+ ))} +
+
+ ); + + return ( +
+ + {/* MAIN CHAT AREA */} +
+ + {/* Header / Toolbar */} +
+
+
+ + {selectedModel ? selectedModel.replace('gemini-', '').replace('-preview', '') : 'AI'} +
+ + {/* AI Language Toggle */} + +
+ +
+ {/* Share Button */} +
+ + + {/* Share Dropdown */} + {isShareMenuOpen && ( +
+ + + +
+ )} +
+ + {/* Toggle History Button */} + +
+
+ + {/* Messages Scroll Area */} +
+ {messages.length === 0 && ( +
+
+ +
+

{t.inputPlaceholder}

+
+ )} + {messages.map((msg) => ( + addToast('error', errorMsg)} + /> + ))} + {isLoading && ( +
+
+ +
+ {t.sending} +
+ )} +
+
+ + {/* Input Area */} +
+ {attachedImage && ( +
+
+ Preview + +
+ {t.imageAttached} +
+ )} + +
+
+
+ + + + + + +
+ + +
+ +
+