From b50ded67b4ab9e94ca8536490fd4c0da110a2f63 Mon Sep 17 00:00:00 2001 From: Pierre Date: Wed, 11 Nov 2026 18:29:22 +0100 Subject: [PATCH 1/5] feat(chat): render Twitch subs, gifts, raids, announcements and cheers Capture USERNOTICE in the recorder and show it in VOD replay and live chat close to the Twitch web chat. - irc_command() routes IRC lines on the real command token; message text such as "CLEARCHAT #x" is no longer misrouted (recorder and TTS bot). - parse_usernotice() maps sub/resub/subgift/mystery gifts/pay-forward/ raid/bits badge/announcement/milestone/charity into a strictly allowlisted "notice" event; sanitize_event() validates it. - parse_privmsg_meta()/sanitize_meta() keep bits, highlighted message, first message, reply parent and power-ups as optional "meta". - API adds a localized event.text (Flask-Babel, 11 catalogs), never sends Twitch's raw system-msg, passes meta through, and includes kind + text in the duplicate token so several gift subs stay separate. - VOD chat chunks now go through the same sanitizer as the range API. - chat_emotes.js: notice renderer with icons, bits pills in Twitch tier colours, meta line classes, decorateLine() for reply/first context; wired into vod, live, mobile, Twitch watch and the OBS overlay. Co-Authored-By: Claude Opus 5.5 --- WEBUI/i18n.py | 2 + WEBUI/static/chat_emotes.js | 160 ++++++- WEBUI/static/style.css | 150 +++++++ WEBUI/templates/chat_obs.html | 59 ++- WEBUI/templates/live.html | 4 +- WEBUI/templates/mobile_player.html | 6 +- WEBUI/templates/twitch_watch_chat.js.html | 6 +- WEBUI/templates/vod.html | 9 +- WEBUI/translations/de/LC_MESSAGES/messages.mo | Bin 80712 -> 83653 bytes WEBUI/translations/de/LC_MESSAGES/messages.po | 111 ++++- WEBUI/translations/es/LC_MESSAGES/messages.mo | Bin 83713 -> 86754 bytes WEBUI/translations/es/LC_MESSAGES/messages.po | 111 ++++- WEBUI/translations/fr/LC_MESSAGES/messages.mo | Bin 85922 -> 88971 bytes WEBUI/translations/fr/LC_MESSAGES/messages.po | 111 ++++- WEBUI/translations/it/LC_MESSAGES/messages.mo | Bin 82153 -> 85121 bytes WEBUI/translations/it/LC_MESSAGES/messages.po | 111 ++++- WEBUI/translations/ja/LC_MESSAGES/messages.mo | Bin 94009 -> 97319 bytes WEBUI/translations/ja/LC_MESSAGES/messages.po | 108 ++++- WEBUI/translations/ko/LC_MESSAGES/messages.mo | Bin 86049 -> 89191 bytes WEBUI/translations/ko/LC_MESSAGES/messages.po | 108 ++++- WEBUI/translations/messages.pot | 124 +++++- WEBUI/translations/nl/LC_MESSAGES/messages.mo | Bin 80274 -> 83211 bytes WEBUI/translations/nl/LC_MESSAGES/messages.po | 111 ++++- WEBUI/translations/pl/LC_MESSAGES/messages.mo | Bin 82260 -> 85428 bytes WEBUI/translations/pl/LC_MESSAGES/messages.po | 114 ++++- .../pt_BR/LC_MESSAGES/messages.mo | Bin 82620 -> 85686 bytes .../pt_BR/LC_MESSAGES/messages.po | 111 ++++- WEBUI/translations/tr/LC_MESSAGES/messages.mo | Bin 81740 -> 84588 bytes WEBUI/translations/tr/LC_MESSAGES/messages.po | 108 ++++- .../zh_Hans/LC_MESSAGES/messages.mo | Bin 76481 -> 79224 bytes .../zh_Hans/LC_MESSAGES/messages.po | 108 ++++- WEBUI/webui.py | 206 ++++++++- core/tts_bot.py | 9 +- docs/screenshots/chat_twitch_events.png | Bin 0 -> 72023 bytes recorder/Streamrecorder.py | 38 +- recorder/chat_events.py | 237 +++++++++- tests/test_chat_events.py | 414 ++++++++++++++++++ 37 files changed, 2542 insertions(+), 94 deletions(-) create mode 100644 docs/screenshots/chat_twitch_events.png create mode 100644 tests/test_chat_events.py diff --git a/WEBUI/i18n.py b/WEBUI/i18n.py index 71cabda..8d8c52f 100644 --- a/WEBUI/i18n.py +++ b/WEBUI/i18n.py @@ -93,6 +93,8 @@ def N_(text): JS_MESSAGES = ( N_("Points"), N_("Redeemed “%(title)s”"), + N_("Replying to @%(user)s: %(msg)s"), + N_("First message"), N_("Page %(page)s / %(pages)s (%(count)s VODs)"), N_("Page %(page)s of %(pages)s"), N_("%(count)s VODs in quick access"), diff --git a/WEBUI/static/chat_emotes.js b/WEBUI/static/chat_emotes.js index ce92944..601156e 100644 --- a/WEBUI/static/chat_emotes.js +++ b/WEBUI/static/chat_emotes.js @@ -400,10 +400,44 @@ return promise; } - function renderTextSegment(text) { + // Twitch cheer tiers: 1 grey, 100 purple, 1000 teal, 5000 blue, 10000 red. + const cheerTokenPattern = /^[A-Za-z]+\d+$/; + const bitsIconPath = ''; + + function cheerTier(amount) { + if (amount >= 10000) return 10000; + if (amount >= 5000) return 5000; + if (amount >= 1000) return 1000; + if (amount >= 100) return 100; + return 1; + } + + function renderCheerHtml(token, amount) { + const title = escapeHtml(token); + return `` + + `` + + `${escapeHtml(String(amount))}`; + } + + function cheerStateFor(item) { + const meta = item && typeof item.meta === 'object' && item.meta ? item.meta : null; + const bits = meta ? Number(meta.bits) : 0; + return Number.isFinite(bits) && bits > 0 ? {left: Math.floor(bits)} : null; + } + + function renderTextSegment(text, cheer) { return String(text || '').split(/(\s+)/u).map(part => { if (!part) return ''; if (/^\s+$/u.test(part)) return escapeHtml(part); + if (cheer && cheer.left > 0 && cheerTokenPattern.test(part)) { + const amount = parseInt(part.replace(/^[A-Za-z]+/, ''), 10); + // Only tokens covered by the message's bits tag are cheers; "abc123" in + // a normal sentence stays text. + if (amount > 0 && amount <= cheer.left) { + cheer.left -= amount; + return renderCheerHtml(part, amount); + } + } const mapped = emoteMap.get(part); if (mapped) return emoteImg(mapped, part, 'chat-emote-provider'); return escapeHtml(part); @@ -496,8 +530,9 @@ const data = item && typeof item === 'object' ? item : {msg: item}; const text = String(data.msg || ''); if (!text) return ''; + const cheer = cheerStateFor(data); const native = normalizeNativeEmotes(data.emotes, text); - if (!native) return renderTextSegment(text); + if (!native) return renderTextSegment(text, cheer); let html = ''; let cursor = 0; @@ -505,7 +540,7 @@ const before = native.mode === 'codeunit' ? text.slice(cursor, emote.start) : native.chars.slice(cursor, emote.start).join(''); - html += renderTextSegment(before); + html += renderTextSegment(before, cheer); const label = rangeText(text, emote.start, emote.end, native.mode, native.chars); html += emoteImg(twitchEmoteUrl(emote.id), label, 'chat-emote-native'); cursor = emote.end + 1; @@ -513,20 +548,130 @@ const rest = native.mode === 'codeunit' ? text.slice(cursor) : native.chars.slice(cursor).join(''); - return html + renderTextSegment(rest); + return html + renderTextSegment(rest, cheer); + } + + // --- USERNOTICE (subs, gifts, raids, announcements) ---------------------- + const noticeGroups = { + sub: 'sub', resub: 'sub', primepaidupgrade: 'sub', giftpaidupgrade: 'sub', + anongiftpaidupgrade: 'sub', extendsub: 'sub', + subgift: 'gift', anonsubgift: 'gift', submysterygift: 'gift', anonsubmysterygift: 'gift', + standardpayforward: 'gift', communitypayforward: 'gift', onetapgiftredeemed: 'gift', + raid: 'raid', unraid: 'raid', + announcement: 'announcement', + bitsbadgetier: 'bits' + }; + const noticeIcons = { + sub: '', + gift: '', + raid: '', + announcement: '', + bits: bitsIconPath, + other: '' + }; + const announceColors = {PRIMARY: 1, BLUE: 1, GREEN: 1, ORANGE: 1, PURPLE: 1}; + + function classPart(value) { + return String(value || '').toLowerCase().replace(/[^a-z0-9_-]/g, '').slice(0, 40); + } + + function noticeEvent(item) { + const event = item && typeof item === 'object' && item.event && typeof item.event === 'object' ? item.event : null; + return event && event.type === 'notice' ? event : null; + } + + function noticeGroup(kind) { + return noticeGroups[classPart(kind)] || 'other'; + } + + function renderNoticeHtml(item) { + const event = noticeEvent(item); + if (!event) return ''; + const group = noticeGroup(event.kind); + let html = '' + + `` + + `${escapeHtml(String(event.text || ''))}`; + const body = renderBodyHtml(item); + if (body) { + const color = userColor(item.color); + const style = color ? ` style="color:${color}"` : ''; + html += '' + + `${renderBadgesHtml(item)}` + + `${escapeHtml(String(item.user || ''))}` + + `: ${body}`; + } + return html; + } + + // Event part of the client-side duplicate keys. Notices add kind + text so + // several gift subs from one gifter are not collapsed into one line. + function chatEventKey(item) { + const event = item && typeof item === 'object' && item.event && typeof item.event === 'object' ? item.event : null; + if (!event || !event.type) return ''; + let key = 'event|' + String(event.type) + '|'; + if (event.type === 'notice') key += String(event.kind || '') + '|' + String(event.text || '') + '|'; + return key; } function chatLineClassName(item) { const data = item && typeof item === 'object' ? item : null; + const notice = noticeEvent(data); + if (notice) { + const kind = classPart(notice.kind) || 'other'; + const classes = ['chat-line', 'chat-line-notice', `chat-line-notice-${noticeGroup(kind)}`, `chat-line-notice-kind-${kind}`]; + const color = String(notice.color || '').toUpperCase(); + if (kind === 'announcement') { + classes.push(`chat-line-announce-${announceColors[color] ? color.toLowerCase() : 'primary'}`); + } + return classes.join(' '); + } if (data && data.event && data.event.type) { const type = String(data.event.type || '').replace(/[^a-z0-9_-]/gi, '') || 'mod'; return `chat-line chat-line-mod chat-line-mod-${type}`; } - if (data && data.reward) return 'chat-line chat-line-redeem'; - return 'chat-line'; + const classes = ['chat-line']; + if (data && data.reward) classes.push('chat-line-redeem'); + const meta = data && data.meta && typeof data.meta === 'object' ? data.meta : null; + if (meta) { + if (meta.highlight === true) classes.push('chat-line-highlight'); + if (meta.first === true) classes.push('chat-line-first'); + if (Number(meta.bits) > 0) classes.push('chat-line-cheer'); + if (meta.reply && typeof meta.reply === 'object') classes.push('chat-line-reply'); + const power = classPart(meta.power); + if (power) classes.push(`chat-line-power-${power}`); + } + return classes.join(' '); + } + + // Twitch shows "Replying to @x: ..." / "First message" above the line. + // Call after .chat-msg is filled; text goes in via textContent (no HTML). + function decorateLine(line, item) { + if (!line || !item || typeof item !== 'object' || item.event) return; + const meta = item.meta && typeof item.meta === 'object' ? item.meta : null; + if (!meta) return; + const host = line.querySelector('.chat-text') || line; + if (host.querySelector('.chat-context')) return; + const contexts = []; + const reply = meta.reply && typeof meta.reply === 'object' ? meta.reply : null; + if (reply && (reply.user || reply.msg)) { + const label = svT('Replying to @%(user)s: %(msg)s') + .replace('%(user)s', () => String(reply.user || '')) + .replace('%(msg)s', () => String(reply.msg || '')); + contexts.push(['reply', label]); + } + if (meta.first === true) contexts.push(['first', svT('First message')]); + contexts.reverse().forEach(([kind, label]) => { + const ctx = document.createElement('span'); + ctx.className = `chat-context chat-context-${kind}`; + ctx.textContent = label; + ctx.title = label; + host.insertBefore(ctx, host.firstChild); + }); } function renderMessageHtml(item) { + const notice = renderNoticeHtml(item); + if (notice) return notice; const moderation = renderModerationHtml(item); if (moderation) return moderation; const redeem = renderRedeemHtml(item); @@ -547,8 +692,11 @@ renderBadgesHtml, userColor, chatLineClassName, + chatEventKey, + decorateLine, renderRedeemHtml, renderModerationHtml, + renderNoticeHtml, renderMessageHtml }; }()); diff --git a/WEBUI/static/style.css b/WEBUI/static/style.css index cce1314..8720807 100644 --- a/WEBUI/static/style.css +++ b/WEBUI/static/style.css @@ -9901,6 +9901,156 @@ body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, font-weight: 650 !important; } +/* --- Twitch-style chat: USERNOTICE (subs, gifts, raids, announcements) --- */ +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-notice { + padding: 6px 8px !important; + margin: 4px 0 !important; + border-left: 4px solid #9147ff !important; + border-radius: 0 !important; + background: rgba(145, 71, 255, 0.14) !important; + color: var(--tube-text, #efeff1) !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-notice .chat-text { + display: block !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-announce-blue { + border-image: linear-gradient(#00d6d6, #9146ff) 1 !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-announce-green { + border-image: linear-gradient(#00db84, #57bee6) 1 !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-announce-orange { + border-image: linear-gradient(#ffb31a, #e0e000) 1 !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-announce-purple, +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-announce-primary { + border-image: linear-gradient(#9146ff, #ff75e6) 1 !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-notice-head { + display: flex !important; + align-items: flex-start !important; + gap: 6px !important; + font-weight: 700 !important; + line-height: 1.35 !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-notice-icon { + flex: none !important; + width: 16px !important; + height: 16px !important; + margin-top: 1px !important; + fill: #bf94ff !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-notice-icon-bits { + fill: #9c3ee8 !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-notice-body { + display: block !important; + margin-top: 4px !important; + font-weight: 400 !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-notice-user { + font-weight: 700 !important; +} + +/* --- PRIVMSG decorations: highlight, first message, reply, cheer, power-ups --- */ +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-highlight { + padding: 6px 8px !important; + margin: 4px 0 !important; + border-left: 4px solid #755ebc !important; + border-radius: 0 !important; + background: rgba(117, 94, 188, 0.38) !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-first { + padding: 6px 8px !important; + margin: 4px 0 !important; + border-left: 4px solid #bf94ff !important; + border-radius: 0 !important; + background: rgba(191, 148, 255, 0.1) !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-context { + display: block !important; + overflow: hidden !important; + margin-bottom: 2px !important; + color: var(--tube-muted, #adadb8) !important; + font-size: 0.86em !important; + font-weight: 600 !important; + white-space: nowrap !important; + text-overflow: ellipsis !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-context-first { + color: #bf94ff !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-cheer { + display: inline-flex !important; + align-items: center !important; + gap: 2px !important; + font-weight: 800 !important; + white-space: nowrap !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-cheer-icon { + width: 1.15em !important; + height: 1.15em !important; + fill: currentColor !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-cheer-tier-1 { color: #979797 !important; } +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-cheer-tier-100 { color: #9c3ee8 !important; } +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-cheer-tier-1000 { color: #1db2a5 !important; } +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-cheer-tier-5000 { color: #0099fe !important; } +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-cheer-tier-10000 { color: #f43021 !important; } + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-power-gigantified .chat-emote:last-of-type { + height: 4.5em !important; + max-width: 16em !important; +} + +body:is(.page-vod, .page-live, .page-mobile-player, .page-twitch-live, + .page-twitch-watch, .page-twitch-watch-mobile) .chat-line-power-animated { + padding: 6px 8px !important; + margin: 4px 0 !important; + border-radius: 6px !important; + background: linear-gradient(90deg, rgba(145, 71, 255, 0.35), rgba(255, 117, 230, 0.25)) !important; +} + body:is(.page-vod,.page-live,.page-mobile-player) .chat-emote { display: inline-block; width: auto; diff --git a/WEBUI/templates/chat_obs.html b/WEBUI/templates/chat_obs.html index f88fcca..e03c358 100644 --- a/WEBUI/templates/chat_obs.html +++ b/WEBUI/templates/chat_obs.html @@ -92,6 +92,29 @@ color: #94a3b8; font-size: 13px; } + /* Twitch-style USERNOTICE rows (subs, gifts, raids, announcements). */ + .chat-row.chat-line-notice { + border-left: 4px solid #9147ff; + background: rgba(145, 71, 255, 0.28); + } + .chat-row.chat-line-announce-blue { border-image: linear-gradient(#00d6d6, #9146ff) 1; } + .chat-row.chat-line-announce-green { border-image: linear-gradient(#00db84, #57bee6) 1; } + .chat-row.chat-line-announce-orange { border-image: linear-gradient(#ffb31a, #e0e000) 1; } + .chat-row.chat-line-announce-purple, + .chat-row.chat-line-announce-primary { border-image: linear-gradient(#9146ff, #ff75e6) 1; } + .chat-row.chat-line-highlight { border-left: 4px solid #755ebc; background: rgba(117, 94, 188, 0.55); } + .chat-notice-head { display: flex; align-items: center; gap: 6px; font-weight: 700; } + .chat-notice-icon { width: 16px; height: 16px; flex: none; fill: #bf94ff; } + .chat-notice-body { display: block; margin-top: 2px; } + .chat-notice-user { font-weight: 700; } + .chat-cheer { display: inline-flex; align-items: center; gap: 2px; font-weight: 800; } + .chat-cheer-icon { width: 1em; height: 1em; fill: currentColor; } + .chat-cheer-tier-1 { color: #979797; } + .chat-cheer-tier-100 { color: #9c3ee8; } + .chat-cheer-tier-1000 { color: #1db2a5; } + .chat-cheer-tier-5000 { color: #0099fe; } + .chat-cheer-tier-10000 { color: #f43021; } + .chat-context { display: block; font-size: 12px; color: #cbd5e1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } @@ -119,26 +142,32 @@ function renderMessage(item) { const row = document.createElement("div"); - row.className = "chat-row"; + const lineClass = window.StreamVaultChat && window.StreamVaultChat.chatLineClassName + ? window.StreamVaultChat.chatLineClassName(item).replace(/^chat-line\b/, "") + : ""; + row.className = "chat-row" + lineClass; + // System lines (mod actions, subs, raids, ...) render their own header. + const isEvent = !!(item.event && item.event.type); // Badges - if (Array.isArray(item.badges) && item.badges.length > 0 && window.StreamVaultChat && window.StreamVaultChat.renderBadgesHtml) { + if (!isEvent && Array.isArray(item.badges) && item.badges.length > 0 && window.StreamVaultChat && window.StreamVaultChat.renderBadgesHtml) { const badgeSpan = document.createElement("span"); badgeSpan.className = "chat-badges"; - badgeSpan.innerHTML = window.StreamVaultChat.renderBadgesHtml(item.badges); + badgeSpan.innerHTML = window.StreamVaultChat.renderBadgesHtml(item); row.appendChild(badgeSpan); } // Author - const author = document.createElement("span"); - author.className = "chat-author"; - author.textContent = (item.user || {{ _('Anonymous')|tojson }}) + ":"; - if (window.StreamVaultChat && window.StreamVaultChat.userColor) { - author.style.color = window.StreamVaultChat.userColor(item.user || "", item.color); - } else if (item.color) { - author.style.color = item.color; + if (!isEvent) { + const author = document.createElement("span"); + author.className = "chat-author"; + author.textContent = (item.user || {{ _('Anonymous')|tojson }}) + ":"; + const authorColor = window.StreamVaultChat && window.StreamVaultChat.userColor + ? window.StreamVaultChat.userColor(item.color) + : ""; + if (authorColor) author.style.color = authorColor; + row.appendChild(author); } - row.appendChild(author); // Body const body = document.createElement("span"); @@ -149,6 +178,9 @@ body.textContent = item.msg || ""; } row.appendChild(body); + if (window.StreamVaultChat && window.StreamVaultChat.decorateLine) { + window.StreamVaultChat.decorateLine(row, item); + } listEl.appendChild(row); @@ -176,7 +208,10 @@ const data = await res.json(); if (Array.isArray(data) && data.length > 0) { for (const item of data) { - const key = (item.t || "") + "|" + (item.user || "") + "|" + (item.msg || ""); + const eventKey = window.StreamVaultChat && window.StreamVaultChat.chatEventKey + ? window.StreamVaultChat.chatEventKey(item) + : ""; + const key = (item.t || "") + "|" + (item.user || "") + "|" + eventKey + (item.msg || ""); if (seenIds.has(key)) continue; seenIds.add(key); if (seenIds.size > 200) { diff --git a/WEBUI/templates/live.html b/WEBUI/templates/live.html index 54251e2..82109b9 100644 --- a/WEBUI/templates/live.html +++ b/WEBUI/templates/live.html @@ -413,8 +413,7 @@

{{ _('Create clip') }}

function chatContentKey(item) { const rewardId = item && item.reward && item.reward.id ? item.reward.id : ''; const rewardTitle = item && item.reward && item.reward.title ? item.reward.title : ''; - const eventType = item && item.event && item.event.type ? item.event.type : ''; - const eventPart = eventType ? ('event|' + eventType + '|') : ''; + const eventPart = window.StreamVaultChat.chatEventKey(item); const rewardPart = rewardId || rewardTitle ? ('reward|' + rewardId + '|' + rewardTitle + '|') : ''; return String(item.user || '').trim() + '|' + eventPart + rewardPart + String(item.msg || '').trim().replace(/\s+/g, ' '); } @@ -452,6 +451,7 @@

{{ _('Create clip') }}

line.querySelector('.chat-user').textContent = (item.user || '') + (item.reward ? ' ' : ': '); } line.querySelector('.chat-msg').innerHTML = processMsg(item); + window.StreamVaultChat.decorateLine(line, item); chatList.appendChild(line); } diff --git a/WEBUI/templates/mobile_player.html b/WEBUI/templates/mobile_player.html index 91ed6cd..4059f9c 100644 --- a/WEBUI/templates/mobile_player.html +++ b/WEBUI/templates/mobile_player.html @@ -509,8 +509,9 @@

{{ display_name or streamer }}

} data.forEach(msg => { const rewardId = msg.reward && msg.reward.id ? msg.reward.id : ''; - const eventType = msg.event && msg.event.type ? msg.event.type : ''; - const eventPart = eventType ? `event|${eventType}|` : ''; + const eventPart = window.StreamVaultChat + ? window.StreamVaultChat.chatEventKey(msg) + : (msg.event && msg.event.type ? `event|${msg.event.type}|` : ''); const rewardPart = rewardId ? `reward|${rewardId}|` : ''; const key = isLive ? `${msg.t}|${msg.user}|${eventPart}${rewardPart}${msg.msg || ''}` @@ -564,6 +565,7 @@

{{ display_name or streamer }}

const userSuffix = msg.reward ? '' : ':'; div.innerHTML = `${timestamp}${badges}${user}${userSuffix}${message}`; } + if (window.StreamVaultChat) window.StreamVaultChat.decorateLine(div, msg); chatList.appendChild(div); while (chatList.children.length > 100) { diff --git a/WEBUI/templates/twitch_watch_chat.js.html b/WEBUI/templates/twitch_watch_chat.js.html index 8edd319..a5a95d8 100644 --- a/WEBUI/templates/twitch_watch_chat.js.html +++ b/WEBUI/templates/twitch_watch_chat.js.html @@ -98,8 +98,9 @@ function renderMessage(item) { if (!chatList) return; const rewardId = item.reward && item.reward.id ? item.reward.id : ''; - const eventType = item.event && item.event.type ? item.event.type : ''; - const eventPart = eventType ? ('event|' + eventType + '|') : ''; + const eventPart = (window.StreamVaultChat && window.StreamVaultChat.chatEventKey) + ? window.StreamVaultChat.chatEventKey(item) + : (item.event && item.event.type ? ('event|' + item.event.type + '|') : ''); const key = item.t + '|' + item.user + '|' + eventPart + (rewardId ? ('reward|' + rewardId + '|') : '') + (item.msg || ''); if (renderedChatKeys.has(key)) return; renderedChatKeys.add(key); @@ -116,6 +117,7 @@ line.querySelector('.chat-user').textContent = (item.user || '') + (item.reward ? ' ' : ': '); } line.querySelector('.chat-msg').innerHTML = processMsg(item); + if (window.StreamVaultChat && window.StreamVaultChat.decorateLine) window.StreamVaultChat.decorateLine(line, item); chatList.appendChild(line); while (chatList.children.length > 200) { chatList.removeChild(chatList.firstElementChild); diff --git a/WEBUI/templates/vod.html b/WEBUI/templates/vod.html index 59fa0e5..bb9be23 100644 --- a/WEBUI/templates/vod.html +++ b/WEBUI/templates/vod.html @@ -717,10 +717,11 @@

{{ _('Create clip') }}

if (textNeedle) { const rewardTitle = item.reward && item.reward.title ? item.reward.title : ''; const eventType = item.event && item.event.type ? item.event.type : ''; - const haystack = `${item.user || ''} ${item.msg || ''} ${rewardTitle} ${eventType}`.toLowerCase(); + const eventText = item.event && item.event.text ? item.event.text : ''; + const haystack = `${item.user || ''} ${item.msg || ''} ${rewardTitle} ${eventType} ${eventText}`.toLowerCase(); if (!haystack.includes(textNeedle)) return false; } - // Keep moderation / channel-point system lines visible under badge filters. + // Keep moderation / sub / raid / channel-point system lines visible under badge filters. if (item.event || item.reward) { return true; } @@ -791,6 +792,7 @@

{{ _('Create clip') }}

line.querySelector('.chat-user').textContent = (m.user || '') + (m.reward ? ' ' : ': '); } line.querySelector('.chat-msg').innerHTML = processMsg(m); + window.StreamVaultChat.decorateLine(line, m); const _es = document.getElementById("chatEmptyState"); if (_es) _es.remove(); chatList.appendChild(line); @@ -895,8 +897,7 @@

{{ _('Create clip') }}

if (Array.isArray(data)) { data.forEach(item => { const rewardId = item.reward && item.reward.id ? item.reward.id : ''; - const eventType = item.event && item.event.type ? item.event.type : ''; - const eventPart = eventType ? ('event|' + eventType + '|') : ''; + const eventPart = window.StreamVaultChat.chatEventKey(item); const rewardPart = rewardId ? ('reward|' + rewardId + '|') : ''; const key = item.rel + '|' + item.user + '|' + eventPart + rewardPart + (item.msg || ''); if (!seenChatKeys.has(key)) { diff --git a/WEBUI/translations/de/LC_MESSAGES/messages.mo b/WEBUI/translations/de/LC_MESSAGES/messages.mo index a7c7b6ed59c98619069070f973b9210487515ef0..9d93d3c861b61b3add40ba0df24263beb152f74a 100644 GIT binary patch delta 20585 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 F{695Nh*1Cl delta 17657 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 b|E9UcZ10xlRwHQpsvNgzZu2v8-KP8>Idc;? diff --git a/WEBUI/translations/de/LC_MESSAGES/messages.po b/WEBUI/translations/de/LC_MESSAGES/messages.po index cc728e7..a09ac56 100644 --- a/WEBUI/translations/de/LC_MESSAGES/messages.po +++ b/WEBUI/translations/de/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: StreamVault VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:23+0100\n" "PO-Revision-Date: 2026-11-03 19:25+0100\n" "Last-Translator: FULL NAME \n" "Language: de\n" @@ -151,6 +151,66 @@ msgstr "%(num)s Tage" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s unterstützt OAuth nicht." +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s ist von einem Prime-Sub auf ein Tier-%(tier)s-Sub umgestiegen!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s hat %(amount)s an %(charity)s gespendet!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s hat %(recipient)s %(months)s Monate Tier %(tier)s geschenkt!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s hat %(recipient)s ein Tier-%(tier)s-Sub geschenkt!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s verlängert das geschenkte Sub von %(other)s!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s verschenkt %(num)d Tier-%(tier)s-Sub an die Community!" +msgstr[1] "%(user)s verschenkt %(num)d Tier-%(tier)s-Subs an die Community!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s ist neu hier. Sag Hallo!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s gibt das Geschenk von %(other)s an %(recipient)s weiter!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s gibt das Geschenk von %(other)s an die Community weiter!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s raidet mit %(num)d Zuschauer!" +msgstr[1] "%(user)s raidet mit %(num)d Zuschauern!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s hat ein neues %(bits)s-Bits-Abzeichen erhalten!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s hat mit Tier %(tier)s abonniert." + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s hat mit Prime abonniert." + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s hat %(num)s Streams in Folge geschaut und eine Watch-Streak gestartet!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = sofort löschen, sobald die Cloud-Kopie verifiziert ist." @@ -292,9 +352,15 @@ msgstr "Überträgt zusätzlich %(path)s." msgid "Also transfers preview images from %(path)s." msgstr "Überträgt zusätzlich Vorschaubilder aus %(path)s." +msgid "An anonymous user" +msgstr "Ein anonymer Nutzer" + msgid "An upload for this file is already running." msgstr "Es läuft bereits ein Upload für diese Datei." +msgid "Announcement" +msgstr "Ankündigung" + msgid "Anonymous" msgstr "Anonym" @@ -552,6 +618,9 @@ msgstr "Chatverlauf: %(user)s" msgid "Chat messages" msgstr "Chat-Nachrichten" +msgid "Chat notice" +msgstr "Chat-Hinweis" + msgid "Chat replay" msgstr "Chat Replay" @@ -1168,6 +1237,9 @@ msgstr "Chat filtern..." msgid "First" msgstr "Erste" +msgid "First message" +msgstr "Erste Nachricht" + msgid "First page" msgstr "Erste Seite" @@ -2003,6 +2075,10 @@ msgstr "Seiten-Navigation" msgid "Pagination (top)" msgstr "Seiten-Navigation (Oben)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "Für %(months)s Monate im Voraus bezahlt." + msgid "Password" msgstr "Passwort" @@ -2322,6 +2398,10 @@ msgstr "Neues Passwort wiederholen" msgid "Repeat password" msgstr "Passwort wiederholen" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "Antwort an @%(user)s: %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "Antrag '%(username)s' abgelehnt und gelöscht." @@ -2578,6 +2658,9 @@ msgstr "Anmelden" msgid "Size" msgstr "Größe" +msgid "Someone" +msgstr "Jemand" + msgid "Sound" msgstr "Ton" @@ -2878,6 +2961,20 @@ msgstr "Das Passwort des System-Administrators kann nur über Umgebungsvariablen msgid "The video file could not be loaded or is still being transcoded." msgstr "Die Videodatei konnte nicht geladen werden oder wird aktuell noch transkodiert." +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "Insgesamt %(num)d Sub in diesem Kanal verschenkt!" +msgstr[1] "Insgesamt %(num)d Subs in diesem Kanal verschenkt!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "Abonniert seit %(months)s Monaten!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "Abonniert seit %(months)s Monaten, aktuell %(streak)s Monate in Folge!" + msgid "This admin user is protected and cannot be deleted." msgstr "Dieser Admin-User ist geschützt und kann nicht gelöscht werden." @@ -3332,6 +3429,9 @@ msgstr "laut Objekt-Datenbank" msgid "active" msgstr "aktiv" +msgid "an anonymous user" +msgstr "einem anonymen Nutzer" + msgid "available" msgstr "vorhanden" @@ -3359,12 +3459,12 @@ msgstr "z.B. VIP-Archiv" msgid "e.g. alice, bob" msgstr "z.B. alice, bob" -msgid "e.g. john_doe" -msgstr "z.B. max_mustermann" - msgid "e.g. channel_name" msgstr "z. B. channel_name" +msgid "e.g. john_doe" +msgstr "z.B. max_mustermann" + #, python-format msgid "effective from %(date)s" msgstr "wirksam ab %(date)s" @@ -3388,6 +3488,9 @@ msgstr "nie" msgid "not created" msgstr "nicht erstellt" +msgid "someone" +msgstr "jemandem" + #, python-format msgid "today %(time)s" msgstr "heute %(time)s" diff --git a/WEBUI/translations/es/LC_MESSAGES/messages.mo b/WEBUI/translations/es/LC_MESSAGES/messages.mo index 07377a19d177e3ca9810414b536162f87c338165..95dcafbadee2fdba02f0f46e7ecf92978c8e90f8 100644 GIT binary patch delta 20678 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 T;gp~)K_OnV{M9qM1>N>PA%nmq delta 17657 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\n" "Language: es\n" @@ -151,6 +151,66 @@ msgstr "%(num)s días" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s no admite OAuth." +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "¡%(user)s pasó de una suscripción Prime a una de nivel %(tier)s!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "¡%(user)s donó %(amount)s a %(charity)s!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "¡%(user)s regaló %(months)s meses de nivel %(tier)s a %(recipient)s!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "¡%(user)s regaló una suscripción de nivel %(tier)s a %(recipient)s!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "¡%(user)s continúa la suscripción de regalo que recibió de %(other)s!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "¡%(user)s regala %(num)d suscripción de nivel %(tier)s a la comunidad!" +msgstr[1] "¡%(user)s regala %(num)d suscripciones de nivel %(tier)s a la comunidad!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s es nuevo aquí. ¡Salúdalo!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "¡%(user)s pasa el regalo que recibió de %(other)s a %(recipient)s!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "¡%(user)s pasa el regalo que recibió de %(other)s a la comunidad!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "¡%(user)s está haciendo un raid con %(num)d espectador!" +msgstr[1] "¡%(user)s está haciendo un raid con %(num)d espectadores!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "¡%(user)s acaba de conseguir una nueva insignia de %(bits)s Bits!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s se suscribió con nivel %(tier)s." + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s se suscribió con Prime." + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "¡%(user)s vio %(num)s directos seguidos y comenzó una racha de visualización!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = eliminar inmediatamente en cuanto se verifique la copia en la nube." @@ -292,9 +352,15 @@ msgstr "También transfiere %(path)s." msgid "Also transfers preview images from %(path)s." msgstr "También transfiere las imágenes de vista previa de %(path)s." +msgid "An anonymous user" +msgstr "Un usuario anónimo" + msgid "An upload for this file is already running." msgstr "Ya hay una subida en curso para este archivo." +msgid "Announcement" +msgstr "Anuncio" + msgid "Anonymous" msgstr "Anónimo" @@ -552,6 +618,9 @@ msgstr "Historial del chat: %(user)s" msgid "Chat messages" msgstr "Mensajes del chat" +msgid "Chat notice" +msgstr "Aviso del chat" + msgid "Chat replay" msgstr "Repetición del chat" @@ -1168,6 +1237,9 @@ msgstr "Filtrar chat..." msgid "First" msgstr "Primero" +msgid "First message" +msgstr "Primer mensaje" + msgid "First page" msgstr "Primera página" @@ -2003,6 +2075,10 @@ msgstr "Paginación" msgid "Pagination (top)" msgstr "Paginación (arriba)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "Pagado con %(months)s meses de antelación." + msgid "Password" msgstr "Contraseña" @@ -2322,6 +2398,10 @@ msgstr "Repite la nueva contraseña" msgid "Repeat password" msgstr "Repite la contraseña" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "Respondiendo a @%(user)s: %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "Solicitud «%(username)s» rechazada y eliminada." @@ -2578,6 +2658,9 @@ msgstr "Iniciar sesión" msgid "Size" msgstr "Tamaño" +msgid "Someone" +msgstr "Alguien" + msgid "Sound" msgstr "Sonido" @@ -2878,6 +2961,20 @@ msgstr "La contraseña del administrador del sistema solo se puede cambiar media msgid "The video file could not be loaded or is still being transcoded." msgstr "No se pudo cargar el archivo de vídeo o todavía se está transcodificando." +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "¡Ha regalado %(num)d suscripción en el canal!" +msgstr[1] "¡Ha regalado %(num)d suscripciones en el canal!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "¡Lleva %(months)s meses suscrito!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "¡Lleva %(months)s meses suscrito, con una racha actual de %(streak)s meses!" + msgid "This admin user is protected and cannot be deleted." msgstr "Este usuario administrador está protegido y no se puede eliminar." @@ -3332,6 +3429,9 @@ msgstr "según la base de datos de objetos" msgid "active" msgstr "activo" +msgid "an anonymous user" +msgstr "un usuario anónimo" + msgid "available" msgstr "disponible" @@ -3359,12 +3459,12 @@ msgstr "p. ej., Archivo VIP" msgid "e.g. alice, bob" msgstr "p. ej., alice, bob" -msgid "e.g. john_doe" -msgstr "p. ej., juan_perez" - msgid "e.g. channel_name" msgstr "p. ej., channel_name" +msgid "e.g. john_doe" +msgstr "p. ej., juan_perez" + #, python-format msgid "effective from %(date)s" msgstr "en vigor desde el %(date)s" @@ -3388,6 +3488,9 @@ msgstr "nunca" msgid "not created" msgstr "no creado" +msgid "someone" +msgstr "alguien" + #, python-format msgid "today %(time)s" msgstr "hoy %(time)s" diff --git a/WEBUI/translations/fr/LC_MESSAGES/messages.mo b/WEBUI/translations/fr/LC_MESSAGES/messages.mo index 7e02db525e4740ee02308822ff27b69b5b0b127a..4ced64c34599595cc3c09f26f052207053cfa853 100644 GIT binary patch delta 20687 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 diff --git a/WEBUI/translations/fr/LC_MESSAGES/messages.po b/WEBUI/translations/fr/LC_MESSAGES/messages.po index 66e748b..9df1f5e 100644 --- a/WEBUI/translations/fr/LC_MESSAGES/messages.po +++ b/WEBUI/translations/fr/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: StreamVault VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:23+0100\n" "PO-Revision-Date: 2026-11-03 19:31+0100\n" "Last-Translator: FULL NAME \n" "Language: fr\n" @@ -151,6 +151,66 @@ msgstr "%(num)s jours" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s ne prend pas en charge OAuth." +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s est passé d’un abonnement Prime à un abonnement de niveau %(tier)s !" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s a fait un don de %(amount)s à %(charity)s !" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s a offert %(months)s mois de niveau %(tier)s à %(recipient)s !" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s a offert un abonnement de niveau %(tier)s à %(recipient)s !" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s prolonge l’abonnement offert par %(other)s !" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s offre %(num)d abonnement de niveau %(tier)s à la communauté !" +msgstr[1] "%(user)s offre %(num)d abonnements de niveau %(tier)s à la communauté !" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s est nouveau ici. Dites bonjour !" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s transmet le cadeau reçu de %(other)s à %(recipient)s !" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s transmet le cadeau reçu de %(other)s à la communauté !" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s lance un raid avec %(num)d spectateur !" +msgstr[1] "%(user)s lance un raid avec %(num)d spectateurs !" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s vient d’obtenir un nouveau badge de %(bits)s Bits !" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s s’est abonné au niveau %(tier)s." + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s s’est abonné avec Prime." + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s a regardé %(num)s streams d’affilée et lancé une série de visionnage !" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = supprimer immédiatement dès que la copie cloud est vérifiée." @@ -292,9 +352,15 @@ msgstr "Transfère aussi %(path)s." msgid "Also transfers preview images from %(path)s." msgstr "Transfère aussi les images d'aperçu de %(path)s." +msgid "An anonymous user" +msgstr "Un utilisateur anonyme" + msgid "An upload for this file is already running." msgstr "Un envoi est déjà en cours pour ce fichier." +msgid "Announcement" +msgstr "Annonce" + msgid "Anonymous" msgstr "Anonyme" @@ -552,6 +618,9 @@ msgstr "Historique du chat : %(user)s" msgid "Chat messages" msgstr "Messages du chat" +msgid "Chat notice" +msgstr "Notification du chat" + msgid "Chat replay" msgstr "Replay du chat" @@ -1168,6 +1237,9 @@ msgstr "Filtrer le chat..." msgid "First" msgstr "Premier" +msgid "First message" +msgstr "Premier message" + msgid "First page" msgstr "Première page" @@ -2003,6 +2075,10 @@ msgstr "Pagination" msgid "Pagination (top)" msgstr "Pagination (haut)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "Payé %(months)s mois à l’avance." + msgid "Password" msgstr "Mot de passe" @@ -2322,6 +2398,10 @@ msgstr "Répéter le nouveau mot de passe" msgid "Repeat password" msgstr "Répéter le mot de passe" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "En réponse à @%(user)s : %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "Demande « %(username)s » refusée et supprimée." @@ -2578,6 +2658,9 @@ msgstr "Se connecter" msgid "Size" msgstr "Taille" +msgid "Someone" +msgstr "Quelqu’un" + msgid "Sound" msgstr "Son" @@ -2878,6 +2961,20 @@ msgstr "Le mot de passe de l'administrateur système ne peut être modifié que msgid "The video file could not be loaded or is still being transcoded." msgstr "Le fichier vidéo n'a pas pu être chargé ou est encore en cours de transcodage." +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "%(num)d abonnement offert sur la chaîne au total !" +msgstr[1] "%(num)d abonnements offerts sur la chaîne au total !" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "Abonné depuis %(months)s mois !" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "Abonné depuis %(months)s mois, série en cours de %(streak)s mois !" + msgid "This admin user is protected and cannot be deleted." msgstr "Cet utilisateur admin est protégé et ne peut pas être supprimé." @@ -3332,6 +3429,9 @@ msgstr "selon la base de données des objets" msgid "active" msgstr "actif" +msgid "an anonymous user" +msgstr "un utilisateur anonyme" + msgid "available" msgstr "disponible" @@ -3359,12 +3459,12 @@ msgstr "ex. Archives VIP" msgid "e.g. alice, bob" msgstr "ex. alice, bob" -msgid "e.g. john_doe" -msgstr "ex. jean_dupont" - msgid "e.g. channel_name" msgstr "ex. channel_name" +msgid "e.g. john_doe" +msgstr "ex. jean_dupont" + #, python-format msgid "effective from %(date)s" msgstr "en vigueur à partir du %(date)s" @@ -3388,6 +3488,9 @@ msgstr "jamais" msgid "not created" msgstr "non créé" +msgid "someone" +msgstr "quelqu’un" + #, python-format msgid "today %(time)s" msgstr "aujourd'hui %(time)s" diff --git a/WEBUI/translations/it/LC_MESSAGES/messages.mo b/WEBUI/translations/it/LC_MESSAGES/messages.mo index 8cabbb7445a12b534203af5ac143de7147fe5402..5553ab5a7624436e90a953b8a1be2f0054b0f262 100644 GIT binary patch delta 20602 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 delta 17656 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 diff --git a/WEBUI/translations/it/LC_MESSAGES/messages.po b/WEBUI/translations/it/LC_MESSAGES/messages.po index 535abf8..b4f2d8b 100644 --- a/WEBUI/translations/it/LC_MESSAGES/messages.po +++ b/WEBUI/translations/it/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: StreamVault VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:23+0100\n" "PO-Revision-Date: 2026-11-03 19:31+0100\n" "Last-Translator: FULL NAME \n" "Language: it\n" @@ -151,6 +151,66 @@ msgstr "%(num)s giorni" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s non supporta OAuth." +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s è passato da un abbonamento Prime a uno di livello %(tier)s!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s ha donato %(amount)s a %(charity)s!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s ha regalato %(months)s mesi di livello %(tier)s a %(recipient)s!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s ha regalato un abbonamento di livello %(tier)s a %(recipient)s!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s continua l’abbonamento regalato da %(other)s!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s regala %(num)d abbonamento di livello %(tier)s alla community!" +msgstr[1] "%(user)s regala %(num)d abbonamenti di livello %(tier)s alla community!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s è nuovo qui. Saluta!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s passa il regalo ricevuto da %(other)s a %(recipient)s!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s passa il regalo ricevuto da %(other)s alla community!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s sta facendo un raid con %(num)d spettatore!" +msgstr[1] "%(user)s sta facendo un raid con %(num)d spettatori!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s ha appena ottenuto un nuovo badge da %(bits)s Bits!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s si è abbonato al livello %(tier)s." + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s si è abbonato con Prime." + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s ha guardato %(num)s live di fila e ha avviato una serie di visione!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = elimina subito dopo la verifica della copia nel cloud." @@ -292,9 +352,15 @@ msgstr "Trasferisce anche %(path)s." msgid "Also transfers preview images from %(path)s." msgstr "Trasferisce anche le anteprime da %(path)s." +msgid "An anonymous user" +msgstr "Un utente anonimo" + msgid "An upload for this file is already running." msgstr "È già in corso un caricamento per questo file." +msgid "Announcement" +msgstr "Annuncio" + msgid "Anonymous" msgstr "Anonimo" @@ -552,6 +618,9 @@ msgstr "Cronologia chat: %(user)s" msgid "Chat messages" msgstr "Messaggi della chat" +msgid "Chat notice" +msgstr "Avviso della chat" + msgid "Chat replay" msgstr "Replay della chat" @@ -1168,6 +1237,9 @@ msgstr "Filtra chat..." msgid "First" msgstr "Prima" +msgid "First message" +msgstr "Primo messaggio" + msgid "First page" msgstr "Prima pagina" @@ -2003,6 +2075,10 @@ msgstr "Paginazione" msgid "Pagination (top)" msgstr "Paginazione (in alto)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "Pagato %(months)s mesi in anticipo." + msgid "Password" msgstr "Password" @@ -2322,6 +2398,10 @@ msgstr "Ripeti la nuova password" msgid "Repeat password" msgstr "Ripeti la password" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "In risposta a @%(user)s: %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "Richiesta di '%(username)s' rifiutata ed eliminata." @@ -2578,6 +2658,9 @@ msgstr "Accedi" msgid "Size" msgstr "Dimensione" +msgid "Someone" +msgstr "Qualcuno" + msgid "Sound" msgstr "Audio" @@ -2878,6 +2961,20 @@ msgstr "La password dell'amministratore di sistema può essere modificata solo t msgid "The video file could not be loaded or is still being transcoded." msgstr "Impossibile caricare il file video oppure è ancora in fase di transcodifica." +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "Ha regalato %(num)d abbonamento nel canale!" +msgstr[1] "Ha regalato %(num)d abbonamenti nel canale!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "Abbonato da %(months)s mesi!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "Abbonato da %(months)s mesi, con una serie attuale di %(streak)s mesi!" + msgid "This admin user is protected and cannot be deleted." msgstr "Questo utente admin è protetto e non può essere eliminato." @@ -3332,6 +3429,9 @@ msgstr "secondo il database degli oggetti" msgid "active" msgstr "attivo" +msgid "an anonymous user" +msgstr "un utente anonimo" + msgid "available" msgstr "disponibile" @@ -3359,12 +3459,12 @@ msgstr "es. archivio VIP" msgid "e.g. alice, bob" msgstr "es. alice, bob" -msgid "e.g. john_doe" -msgstr "es. mario_rossi" - msgid "e.g. channel_name" msgstr "es. channel_name" +msgid "e.g. john_doe" +msgstr "es. mario_rossi" + #, python-format msgid "effective from %(date)s" msgstr "in vigore dal %(date)s" @@ -3388,6 +3488,9 @@ msgstr "mai" msgid "not created" msgstr "non creato" +msgid "someone" +msgstr "qualcuno" + #, python-format msgid "today %(time)s" msgstr "oggi %(time)s" diff --git a/WEBUI/translations/ja/LC_MESSAGES/messages.mo b/WEBUI/translations/ja/LC_MESSAGES/messages.mo index f8e00107289d48be104386b8469b218bb9c6d44a..3644b484eea69efa36d6fb1d8630c442397d5e14 100644 GIT binary patch delta 20903 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 Led*K$*WUjFSn_eA delta 17662 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 JXsl=7{{a{C@^%0K diff --git a/WEBUI/translations/ja/LC_MESSAGES/messages.po b/WEBUI/translations/ja/LC_MESSAGES/messages.po index 119d76e..7da7eaa 100644 --- a/WEBUI/translations/ja/LC_MESSAGES/messages.po +++ b/WEBUI/translations/ja/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: StreamVault VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:23+0100\n" "PO-Revision-Date: 2026-11-03 19:31+0100\n" "Last-Translator: FULL NAME \n" "Language: ja\n" @@ -145,6 +145,64 @@ msgstr "%(num)s 日" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s は OAuth に対応していません。" +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s さんがPrimeサブからティア%(tier)sサブに切り替えました!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s さんが%(charity)sに%(amount)sを寄付しました!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s さんが%(recipient)s さんにティア%(tier)sサブ%(months)sか月分をギフトしました!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s さんが%(recipient)s さんにティア%(tier)sサブをギフトしました!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s さんは%(other)s さんからもらったギフトサブを継続しています!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s さんがコミュニティにティア%(tier)sサブを%(num)d個ギフトしています!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s さんは初めての参加です。あいさつしましょう!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s さんは%(other)s さんからのギフトを%(recipient)s さんに恩送りしています!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s さんは%(other)s さんからのギフトをコミュニティに恩送りしています!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s さんが%(num)d人の視聴者とレイド中です!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s さんが新しい%(bits)sビッツバッジを獲得しました!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s さんがティア%(tier)sでサブスクライブしました。" + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s さんがPrimeでサブスクライブしました。" + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s さんが%(num)s回連続で配信を視聴し、視聴ストリークを達成しました!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = クラウドのコピーを確認後すぐに削除します。" @@ -286,9 +344,15 @@ msgstr "%(path)s も転送します。" msgid "Also transfers preview images from %(path)s." msgstr "%(path)s のプレビュー画像も転送します。" +msgid "An anonymous user" +msgstr "匿名ユーザー" + msgid "An upload for this file is already running." msgstr "このファイルのアップロードはすでに実行中です。" +msgid "Announcement" +msgstr "お知らせ" + msgid "Anonymous" msgstr "匿名" @@ -546,6 +610,9 @@ msgstr "チャット履歴: %(user)s" msgid "Chat messages" msgstr "チャットメッセージ" +msgid "Chat notice" +msgstr "チャット通知" + msgid "Chat replay" msgstr "チャットリプレイ" @@ -1162,6 +1229,9 @@ msgstr "チャットを絞り込み..." msgid "First" msgstr "最初" +msgid "First message" +msgstr "初めてのメッセージ" + msgid "First page" msgstr "最初のページ" @@ -1997,6 +2067,10 @@ msgstr "ページ送り" msgid "Pagination (top)" msgstr "ページ送り(上部)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "%(months)sか月分を前払いしました。" + msgid "Password" msgstr "パスワード" @@ -2316,6 +2390,10 @@ msgstr "新しいパスワード(確認)" msgid "Repeat password" msgstr "パスワード(確認)" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "@%(user)s さんへの返信: %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "「%(username)s」のリクエストを拒否して削除しました。" @@ -2572,6 +2650,9 @@ msgstr "サインイン" msgid "Size" msgstr "サイズ" +msgid "Someone" +msgstr "誰か" + msgid "Sound" msgstr "サウンド" @@ -2872,6 +2953,19 @@ msgstr "システム管理者のパスワードは環境変数でのみ変更で msgid "The video file could not be loaded or is still being transcoded." msgstr "動画ファイルを読み込めないか、まだトランスコード中です。" +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "このチャンネルで合計%(num)d個のサブをギフトしました!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "%(months)sか月間サブスクライブしています!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "%(months)sか月間サブスクライブ中、現在%(streak)sか月連続です!" + msgid "This admin user is protected and cannot be deleted." msgstr "この管理者ユーザーは保護されているため削除できません。" @@ -3326,6 +3420,9 @@ msgstr "オブジェクトデータベースによる" msgid "active" msgstr "有効" +msgid "an anonymous user" +msgstr "匿名ユーザー" + msgid "available" msgstr "あり" @@ -3353,12 +3450,12 @@ msgstr "例: VIP アーカイブ" msgid "e.g. alice, bob" msgstr "例: alice, bob" -msgid "e.g. john_doe" -msgstr "例: john_doe" - msgid "e.g. channel_name" msgstr "例: channel_name" +msgid "e.g. john_doe" +msgstr "例: john_doe" + #, python-format msgid "effective from %(date)s" msgstr "%(date)s から有効" @@ -3382,6 +3479,9 @@ msgstr "なし" msgid "not created" msgstr "未作成" +msgid "someone" +msgstr "誰か" + #, python-format msgid "today %(time)s" msgstr "今日 %(time)s" diff --git a/WEBUI/translations/ko/LC_MESSAGES/messages.mo b/WEBUI/translations/ko/LC_MESSAGES/messages.mo index 5ac6a53e5b4615477b4407ea4d85de5231fd6ca4..ae3f6ef8fef83fcbb8b29db6093b72e236ddd84f 100644 GIT binary patch delta 20776 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 delta 17653 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 Nj(L{fc)>I0{{T!R_jCXN diff --git a/WEBUI/translations/ko/LC_MESSAGES/messages.po b/WEBUI/translations/ko/LC_MESSAGES/messages.po index c2ab7aa..b43c25d 100644 --- a/WEBUI/translations/ko/LC_MESSAGES/messages.po +++ b/WEBUI/translations/ko/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: StreamVault VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:23+0100\n" "PO-Revision-Date: 2026-11-03 19:31+0100\n" "Last-Translator: FULL NAME \n" "Language: ko\n" @@ -145,6 +145,64 @@ msgstr "%(num)s일" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s은(는) OAuth를 지원하지 않습니다." +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s 님이 Prime 구독에서 티어 %(tier)s 구독으로 전환했습니다!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s 님이 %(charity)s에 %(amount)s을(를) 기부했습니다!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s 님이 %(recipient)s 님에게 티어 %(tier)s 구독 %(months)s개월을 선물했습니다!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s 님이 %(recipient)s 님에게 티어 %(tier)s 구독을 선물했습니다!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s 님이 %(other)s 님에게 받은 선물 구독을 이어가고 있습니다!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s 님이 커뮤니티에 티어 %(tier)s 구독 %(num)d개를 선물합니다!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s 님은 처음 오셨습니다. 인사해 주세요!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s 님이 %(other)s 님에게 받은 선물을 %(recipient)s 님에게 전달합니다!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s 님이 %(other)s 님에게 받은 선물을 커뮤니티에 전달합니다!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s 님이 시청자 %(num)d명과 함께 레이드 중입니다!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s 님이 새로운 %(bits)s 비트 배지를 획득했습니다!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s 님이 티어 %(tier)s(으)로 구독했습니다." + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s 님이 Prime으로 구독했습니다." + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s 님이 %(num)s회 연속으로 방송을 시청하여 시청 연속 기록을 세웠습니다!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = 클라우드 사본이 확인되면 즉시 삭제합니다." @@ -286,9 +344,15 @@ msgstr "%(path)s도 함께 전송합니다." msgid "Also transfers preview images from %(path)s." msgstr "%(path)s의 미리보기 이미지도 함께 전송합니다." +msgid "An anonymous user" +msgstr "익명의 사용자" + msgid "An upload for this file is already running." msgstr "이 파일의 업로드가 이미 실행 중입니다." +msgid "Announcement" +msgstr "공지" + msgid "Anonymous" msgstr "익명" @@ -546,6 +610,9 @@ msgstr "채팅 기록: %(user)s" msgid "Chat messages" msgstr "채팅 메시지" +msgid "Chat notice" +msgstr "채팅 알림" + msgid "Chat replay" msgstr "채팅 다시보기" @@ -1162,6 +1229,9 @@ msgstr "채팅 필터..." msgid "First" msgstr "처음" +msgid "First message" +msgstr "첫 메시지" + msgid "First page" msgstr "첫 페이지" @@ -1997,6 +2067,10 @@ msgstr "페이지 탐색" msgid "Pagination (top)" msgstr "페이지 탐색 (상단)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "%(months)s개월분을 선결제했습니다." + msgid "Password" msgstr "비밀번호" @@ -2316,6 +2390,10 @@ msgstr "새 비밀번호 확인" msgid "Repeat password" msgstr "비밀번호 확인" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "@%(user)s 님에게 답장: %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "'%(username)s' 신청을 거부하고 삭제했습니다." @@ -2572,6 +2650,9 @@ msgstr "로그인" msgid "Size" msgstr "크기" +msgid "Someone" +msgstr "누군가" + msgid "Sound" msgstr "소리" @@ -2872,6 +2953,19 @@ msgstr "시스템 관리자의 비밀번호는 환경 변수로만 변경할 수 msgid "The video file could not be loaded or is still being transcoded." msgstr "동영상 파일을 불러올 수 없거나 아직 트랜스코딩 중입니다." +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "이 채널에서 총 %(num)d개의 구독을 선물했습니다!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "%(months)s개월째 구독 중입니다!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "%(months)s개월째 구독 중이며, 현재 %(streak)s개월 연속입니다!" + msgid "This admin user is protected and cannot be deleted." msgstr "이 관리자 사용자는 보호되어 있어 삭제할 수 없습니다." @@ -3326,6 +3420,9 @@ msgstr "객체 데이터베이스 기준" msgid "active" msgstr "활성" +msgid "an anonymous user" +msgstr "익명의 사용자" + msgid "available" msgstr "있음" @@ -3353,12 +3450,12 @@ msgstr "예: VIP 아카이브" msgid "e.g. alice, bob" msgstr "예: alice, bob" -msgid "e.g. john_doe" -msgstr "예: hong_gildong" - msgid "e.g. channel_name" msgstr "예: channel_name" +msgid "e.g. john_doe" +msgstr "예: hong_gildong" + #, python-format msgid "effective from %(date)s" msgstr "%(date)s부터 적용" @@ -3382,6 +3479,9 @@ msgstr "안 함" msgid "not created" msgstr "생성 안 됨" +msgid "someone" +msgstr "누군가" + #, python-format msgid "today %(time)s" msgstr "오늘 %(time)s" diff --git a/WEBUI/translations/messages.pot b/WEBUI/translations/messages.pot index 1f08211..a063cd8 100644 --- a/WEBUI/translations/messages.pot +++ b/WEBUI/translations/messages.pot @@ -1,15 +1,14 @@ -# Translations template for StreamVault. -# Copyright (C) 2026 StreamVault contributors -# This file is distributed under the same license as the StreamVault -# project. +# Translations template for PROJECT. +# Copyright (C) 2026 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. # FIRST AUTHOR , 2026. # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: StreamVault VERSION\n" +"Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:26+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -152,6 +151,70 @@ msgstr "" msgid "%(provider)s does not support OAuth." msgstr "" +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "" + +#, python-format +msgid "" +"%(user)s is paying forward the gift they got from %(other)s to " +"%(recipient)s!" +msgstr "" + +#, python-format +msgid "" +"%(user)s is paying forward the gift they got from %(other)s to the " +"community!" +msgstr "" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "" + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "" + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "" @@ -301,9 +364,15 @@ msgstr "" msgid "Also transfers preview images from %(path)s." msgstr "" +msgid "An anonymous user" +msgstr "" + msgid "An upload for this file is already running." msgstr "" +msgid "Announcement" +msgstr "" + msgid "Anonymous" msgstr "" @@ -567,6 +636,9 @@ msgstr "" msgid "Chat messages" msgstr "" +msgid "Chat notice" +msgstr "" + msgid "Chat replay" msgstr "" @@ -1193,6 +1265,9 @@ msgstr "" msgid "First" msgstr "" +msgid "First message" +msgstr "" + msgid "First page" msgstr "" @@ -2067,6 +2142,10 @@ msgstr "" msgid "Pagination (top)" msgstr "" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "" + msgid "Password" msgstr "" @@ -2388,6 +2467,10 @@ msgstr "" msgid "Repeat password" msgstr "" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "" @@ -2651,6 +2734,9 @@ msgstr "" msgid "Size" msgstr "" +msgid "Someone" +msgstr "" + msgid "Sound" msgstr "" @@ -2978,6 +3064,22 @@ msgstr "" msgid "The video file could not be loaded or is still being transcoded." msgstr "" +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "" + +#, python-format +msgid "" +"They've subscribed for %(months)s months, currently on a %(streak)s month" +" streak!" +msgstr "" + msgid "This admin user is protected and cannot be deleted." msgstr "" @@ -3450,6 +3552,9 @@ msgstr "" msgid "active" msgstr "" +msgid "an anonymous user" +msgstr "" + msgid "available" msgstr "" @@ -3479,10 +3584,10 @@ msgstr "" msgid "e.g. alice, bob" msgstr "" -msgid "e.g. john_doe" +msgid "e.g. channel_name" msgstr "" -msgid "e.g. channel_name" +msgid "e.g. john_doe" msgstr "" #, python-format @@ -3508,6 +3613,9 @@ msgstr "" msgid "not created" msgstr "" +msgid "someone" +msgstr "" + #, python-format msgid "today %(time)s" msgstr "" diff --git a/WEBUI/translations/nl/LC_MESSAGES/messages.mo b/WEBUI/translations/nl/LC_MESSAGES/messages.mo index 1d8665e59648a52b3b5378b09bc028c758c6917d..48bb46043e0f9b5fa0b675a719398f4811b052b7 100644 GIT binary patch delta 20574 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 Y{u%QfV_F71A5@HuVDT#}v<{m2e?NMNvH$=8 delta 17648 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 Y8@_9vvZvgJ&$_3qPkHeE9x2oQAG!tumH+?% diff --git a/WEBUI/translations/nl/LC_MESSAGES/messages.po b/WEBUI/translations/nl/LC_MESSAGES/messages.po index 3d0d81a..fecff37 100644 --- a/WEBUI/translations/nl/LC_MESSAGES/messages.po +++ b/WEBUI/translations/nl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: StreamVault VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:23+0100\n" "PO-Revision-Date: 2026-11-03 19:31+0100\n" "Last-Translator: FULL NAME \n" "Language: nl\n" @@ -151,6 +151,66 @@ msgstr "%(num)s dagen" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s ondersteunt geen OAuth." +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s is overgestapt van een Prime-sub naar een Tier %(tier)s-sub!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s heeft %(amount)s gedoneerd aan %(charity)s!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s heeft %(recipient)s %(months)s maanden Tier %(tier)s cadeau gedaan!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s heeft %(recipient)s een Tier %(tier)s-sub cadeau gedaan!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s zet de cadeausub van %(other)s voort!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s geeft %(num)d Tier %(tier)s-sub weg aan de community!" +msgstr[1] "%(user)s geeft %(num)d Tier %(tier)s-subs weg aan de community!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s is hier nieuw. Zeg hallo!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s geeft het cadeau van %(other)s door aan %(recipient)s!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s geeft het cadeau van %(other)s door aan de community!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s raidt met %(num)d kijker!" +msgstr[1] "%(user)s raidt met %(num)d kijkers!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s heeft net een nieuwe %(bits)s Bits-badge verdiend!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s heeft zich geabonneerd op Tier %(tier)s." + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s heeft zich geabonneerd met Prime." + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s heeft %(num)s streams op rij gekeken en een kijkreeks gestart!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = direct verwijderen zodra de cloudkopie is geverifieerd." @@ -292,9 +352,15 @@ msgstr "Draagt ook %(path)s over." msgid "Also transfers preview images from %(path)s." msgstr "Draagt ook voorbeeldafbeeldingen uit %(path)s over." +msgid "An anonymous user" +msgstr "Een anonieme gebruiker" + msgid "An upload for this file is already running." msgstr "Er loopt al een upload voor dit bestand." +msgid "Announcement" +msgstr "Aankondiging" + msgid "Anonymous" msgstr "Anoniem" @@ -552,6 +618,9 @@ msgstr "Chatgeschiedenis: %(user)s" msgid "Chat messages" msgstr "Chatberichten" +msgid "Chat notice" +msgstr "Chatmelding" + msgid "Chat replay" msgstr "Chatreplay" @@ -1168,6 +1237,9 @@ msgstr "Chat filteren..." msgid "First" msgstr "Eerste" +msgid "First message" +msgstr "Eerste bericht" + msgid "First page" msgstr "Eerste pagina" @@ -2003,6 +2075,10 @@ msgstr "Paginering" msgid "Pagination (top)" msgstr "Paginering (boven)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "%(months)s maanden vooruitbetaald." + msgid "Password" msgstr "Wachtwoord" @@ -2322,6 +2398,10 @@ msgstr "Nieuw wachtwoord herhalen" msgid "Repeat password" msgstr "Wachtwoord herhalen" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "Antwoord aan @%(user)s: %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "Aanvraag '%(username)s' afgewezen en verwijderd." @@ -2578,6 +2658,9 @@ msgstr "Inloggen" msgid "Size" msgstr "Grootte" +msgid "Someone" +msgstr "Iemand" + msgid "Sound" msgstr "Geluid" @@ -2878,6 +2961,20 @@ msgstr "Het wachtwoord van de systeembeheerder kan alleen via omgevingsvariabele msgid "The video file could not be loaded or is still being transcoded." msgstr "Het videobestand kon niet worden geladen of wordt nog getranscodeerd." +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "In totaal %(num)d sub weggegeven in dit kanaal!" +msgstr[1] "In totaal %(num)d subs weggegeven in dit kanaal!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "Al %(months)s maanden geabonneerd!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "Al %(months)s maanden geabonneerd, momenteel %(streak)s maanden op rij!" + msgid "This admin user is protected and cannot be deleted." msgstr "Deze admingebruiker is beschermd en kan niet worden verwijderd." @@ -3332,6 +3429,9 @@ msgstr "volgens de objectdatabase" msgid "active" msgstr "actief" +msgid "an anonymous user" +msgstr "een anonieme gebruiker" + msgid "available" msgstr "aanwezig" @@ -3359,12 +3459,12 @@ msgstr "bijv. VIP-archief" msgid "e.g. alice, bob" msgstr "bijv. alice, bob" -msgid "e.g. john_doe" -msgstr "bijv. jan_jansen" - msgid "e.g. channel_name" msgstr "bijv. channel_name" +msgid "e.g. john_doe" +msgstr "bijv. jan_jansen" + #, python-format msgid "effective from %(date)s" msgstr "geldig vanaf %(date)s" @@ -3388,6 +3488,9 @@ msgstr "nooit" msgid "not created" msgstr "niet aangemaakt" +msgid "someone" +msgstr "iemand" + #, python-format msgid "today %(time)s" msgstr "vandaag %(time)s" diff --git a/WEBUI/translations/pl/LC_MESSAGES/messages.mo b/WEBUI/translations/pl/LC_MESSAGES/messages.mo index a0460b3d27d0fd074253565c42326f1424240765..d319727e51da2fe276a8736dc854537ba7853bb4 100644 GIT binary patch delta 20803 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 Sy5ZdxUU^=#YPa%w_x}LBknDc| diff --git a/WEBUI/translations/pl/LC_MESSAGES/messages.po b/WEBUI/translations/pl/LC_MESSAGES/messages.po index e13b03a..9ce0161 100644 --- a/WEBUI/translations/pl/LC_MESSAGES/messages.po +++ b/WEBUI/translations/pl/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: StreamVault VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:23+0100\n" "PO-Revision-Date: 2026-11-03 19:31+0100\n" "Last-Translator: FULL NAME \n" "Language: pl\n" @@ -157,6 +157,68 @@ msgstr "Dni: %(num)s" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s nie obsługuje OAuth." +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s zmienia subskrypcję Prime na subskrypcję poziomu %(tier)s!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s wpłaca %(amount)s na rzecz %(charity)s!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s funduje %(months)s mies. subskrypcji poziomu %(tier)s dla %(recipient)s!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s funduje subskrypcję poziomu %(tier)s dla %(recipient)s!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s kontynuuje subskrypcję otrzymaną w prezencie od %(other)s!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s funduje %(num)d subskrypcję poziomu %(tier)s dla społeczności!" +msgstr[1] "%(user)s funduje %(num)d subskrypcje poziomu %(tier)s dla społeczności!" +msgstr[2] "%(user)s funduje %(num)d subskrypcji poziomu %(tier)s dla społeczności!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s pojawia się tu pierwszy raz. Przywitaj się!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s przekazuje dalej prezent od %(other)s dla %(recipient)s!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s przekazuje dalej prezent od %(other)s społeczności!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s robi raid z %(num)d widzem!" +msgstr[1] "%(user)s robi raid z %(num)d widzami!" +msgstr[2] "%(user)s robi raid z %(num)d widzami!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s zdobywa nową odznakę %(bits)s Bits!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s subskrybuje na poziomie %(tier)s." + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s subskrybuje z Prime." + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s ogląda już %(num)s transmisji z rzędu i rozpoczyna serię oglądania!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = usuń natychmiast po zweryfikowaniu kopii w chmurze." @@ -298,9 +360,15 @@ msgstr "Przenosi również %(path)s." msgid "Also transfers preview images from %(path)s." msgstr "Przenosi również miniatury z %(path)s." +msgid "An anonymous user" +msgstr "Anonimowy użytkownik" + msgid "An upload for this file is already running." msgstr "Przesyłanie tego pliku już trwa." +msgid "Announcement" +msgstr "Ogłoszenie" + msgid "Anonymous" msgstr "Anonim" @@ -558,6 +626,9 @@ msgstr "Historia czatu: %(user)s" msgid "Chat messages" msgstr "Wiadomości czatu" +msgid "Chat notice" +msgstr "Powiadomienie czatu" + msgid "Chat replay" msgstr "Powtórka czatu" @@ -1174,6 +1245,9 @@ msgstr "Filtruj czat..." msgid "First" msgstr "Pierwsza" +msgid "First message" +msgstr "Pierwsza wiadomość" + msgid "First page" msgstr "Pierwsza strona" @@ -2009,6 +2083,10 @@ msgstr "Paginacja" msgid "Pagination (top)" msgstr "Paginacja (góra)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "Opłacone z góry na %(months)s mies." + msgid "Password" msgstr "Hasło" @@ -2328,6 +2406,10 @@ msgstr "Powtórz nowe hasło" msgid "Repeat password" msgstr "Powtórz hasło" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "Odpowiedź do @%(user)s: %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "Wniosek '%(username)s' odrzucono i usunięto." @@ -2584,6 +2666,9 @@ msgstr "Zaloguj się" msgid "Size" msgstr "Rozmiar" +msgid "Someone" +msgstr "Ktoś" + msgid "Sound" msgstr "Dźwięk" @@ -2884,6 +2969,21 @@ msgstr "Hasło administratora systemu można zmienić tylko przez zmienne środo msgid "The video file could not be loaded or is still being transcoded." msgstr "Nie udało się wczytać pliku wideo lub jest on jeszcze transkodowany." +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "Łącznie %(num)d podarowana subskrypcja na kanale!" +msgstr[1] "Łącznie %(num)d podarowane subskrypcje na kanale!" +msgstr[2] "Łącznie %(num)d podarowanych subskrypcji na kanale!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "Subskrybuje od %(months)s mies.!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "Subskrybuje od %(months)s mies., obecna seria: %(streak)s mies.!" + msgid "This admin user is protected and cannot be deleted." msgstr "Ten administrator jest chroniony i nie można go usunąć." @@ -3338,6 +3438,9 @@ msgstr "według bazy obiektów" msgid "active" msgstr "aktywne" +msgid "an anonymous user" +msgstr "anonimowego użytkownika" + msgid "available" msgstr "dostępne" @@ -3365,12 +3468,12 @@ msgstr "np. archiwum VIP" msgid "e.g. alice, bob" msgstr "np. alice, bob" -msgid "e.g. john_doe" -msgstr "np. jan_kowalski" - msgid "e.g. channel_name" msgstr "np. channel_name" +msgid "e.g. john_doe" +msgstr "np. jan_kowalski" + #, python-format msgid "effective from %(date)s" msgstr "obowiązuje od %(date)s" @@ -3394,6 +3497,9 @@ msgstr "nigdy" msgid "not created" msgstr "nie utworzono" +msgid "someone" +msgstr "kogoś" + #, python-format msgid "today %(time)s" msgstr "dzisiaj %(time)s" diff --git a/WEBUI/translations/pt_BR/LC_MESSAGES/messages.mo b/WEBUI/translations/pt_BR/LC_MESSAGES/messages.mo index 17dc0463c118482bd7cec6710e2aab7a38602e35..66b042d22a11273f787f160c6b196f9543a47d15 100644 GIT binary patch delta 20702 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 diff --git a/WEBUI/translations/pt_BR/LC_MESSAGES/messages.po b/WEBUI/translations/pt_BR/LC_MESSAGES/messages.po index 4628000..90d356e 100644 --- a/WEBUI/translations/pt_BR/LC_MESSAGES/messages.po +++ b/WEBUI/translations/pt_BR/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: StreamVault VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:23+0100\n" "PO-Revision-Date: 2026-11-03 19:31+0100\n" "Last-Translator: FULL NAME \n" "Language: pt_BR\n" @@ -151,6 +151,66 @@ msgstr "%(num)s dias" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s não oferece suporte a OAuth." +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s mudou de uma inscrição Prime para uma de Nível %(tier)s!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s doou %(amount)s para %(charity)s!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s presenteou %(recipient)s com %(months)s meses de Nível %(tier)s!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s presenteou %(recipient)s com uma inscrição de Nível %(tier)s!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s está mantendo a inscrição de presente que ganhou de %(other)s!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s está presenteando a comunidade com %(num)d inscrição de Nível %(tier)s!" +msgstr[1] "%(user)s está presenteando a comunidade com %(num)d inscrições de Nível %(tier)s!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s é novo por aqui. Diga oi!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s está repassando o presente que ganhou de %(other)s para %(recipient)s!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s está repassando o presente que ganhou de %(other)s para a comunidade!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s está fazendo uma raid com %(num)d espectador!" +msgstr[1] "%(user)s está fazendo uma raid com %(num)d espectadores!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s acabou de ganhar um novo emblema de %(bits)s Bits!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s se inscreveu no Nível %(tier)s." + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s se inscreveu com o Prime." + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s assistiu a %(num)s transmissões seguidas e iniciou uma sequência!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = excluir imediatamente após a cópia na nuvem ser verificada." @@ -292,9 +352,15 @@ msgstr "Também transfere %(path)s." msgid "Also transfers preview images from %(path)s." msgstr "Também transfere as miniaturas de %(path)s." +msgid "An anonymous user" +msgstr "Um usuário anônimo" + msgid "An upload for this file is already running." msgstr "Já há um envio em andamento para este arquivo." +msgid "Announcement" +msgstr "Anúncio" + msgid "Anonymous" msgstr "Anônimo" @@ -552,6 +618,9 @@ msgstr "Histórico do chat: %(user)s" msgid "Chat messages" msgstr "Mensagens do chat" +msgid "Chat notice" +msgstr "Aviso do chat" + msgid "Chat replay" msgstr "Replay do chat" @@ -1168,6 +1237,9 @@ msgstr "Filtrar chat..." msgid "First" msgstr "Primeira" +msgid "First message" +msgstr "Primeira mensagem" + msgid "First page" msgstr "Primeira página" @@ -2003,6 +2075,10 @@ msgstr "Paginação" msgid "Pagination (top)" msgstr "Paginação (topo)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "Pagou %(months)s meses adiantados." + msgid "Password" msgstr "Senha" @@ -2322,6 +2398,10 @@ msgstr "Repita a nova senha" msgid "Repeat password" msgstr "Repita a senha" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "Respondendo a @%(user)s: %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "Solicitação de '%(username)s' recusada e excluída." @@ -2578,6 +2658,9 @@ msgstr "Entrar" msgid "Size" msgstr "Tamanho" +msgid "Someone" +msgstr "Alguém" + msgid "Sound" msgstr "Som" @@ -2878,6 +2961,20 @@ msgstr "A senha do administrador do sistema só pode ser alterada por variáveis msgid "The video file could not be loaded or is still being transcoded." msgstr "Não foi possível carregar o arquivo de vídeo ou ele ainda está sendo transcodificado." +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "Já presenteou %(num)d inscrição no canal!" +msgstr[1] "Já presenteou %(num)d inscrições no canal!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "Inscrito há %(months)s meses!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "Inscrito há %(months)s meses, com uma sequência atual de %(streak)s meses!" + msgid "This admin user is protected and cannot be deleted." msgstr "Este usuário admin é protegido e não pode ser excluído." @@ -3332,6 +3429,9 @@ msgstr "segundo o banco de dados de objetos" msgid "active" msgstr "ativo" +msgid "an anonymous user" +msgstr "um usuário anônimo" + msgid "available" msgstr "disponível" @@ -3359,12 +3459,12 @@ msgstr "ex.: arquivo VIP" msgid "e.g. alice, bob" msgstr "ex.: alice, bob" -msgid "e.g. john_doe" -msgstr "ex.: joao_silva" - msgid "e.g. channel_name" msgstr "ex.: channel_name" +msgid "e.g. john_doe" +msgstr "ex.: joao_silva" + #, python-format msgid "effective from %(date)s" msgstr "em vigor a partir de %(date)s" @@ -3388,6 +3488,9 @@ msgstr "nunca" msgid "not created" msgstr "não criado" +msgid "someone" +msgstr "alguém" + #, python-format msgid "today %(time)s" msgstr "hoje %(time)s" diff --git a/WEBUI/translations/tr/LC_MESSAGES/messages.mo b/WEBUI/translations/tr/LC_MESSAGES/messages.mo index b3606e328dc0c5f7ac2aed45796fd102c0ce1119..f1a37717ac645f6c0c9c285061da57c1257dddd3 100644 GIT binary patch delta 20495 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 Cc7=8T delta 17653 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 AF8}}l diff --git a/WEBUI/translations/tr/LC_MESSAGES/messages.po b/WEBUI/translations/tr/LC_MESSAGES/messages.po index e7746ee..08e2434 100644 --- a/WEBUI/translations/tr/LC_MESSAGES/messages.po +++ b/WEBUI/translations/tr/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: StreamVault VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2026-11-03 19:28+0100\n" +"POT-Creation-Date: 2026-11-11 18:23+0100\n" "PO-Revision-Date: 2026-11-03 19:31+0100\n" "Last-Translator: FULL NAME \n" "Language: tr\n" @@ -145,6 +145,64 @@ msgstr "%(num)s gün" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s OAuth desteklemiyor." +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s, Prime aboneliğinden Seviye %(tier)s aboneliğine geçti!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s, %(charity)s için %(amount)s bağışladı!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s, %(recipient)s adlı kullanıcıya %(months)s aylık Seviye %(tier)s hediye etti!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s, %(recipient)s adlı kullanıcıya Seviye %(tier)s abonelik hediye etti!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s, %(other)s tarafından hediye edilen aboneliği sürdürüyor!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s topluluğa %(num)d adet Seviye %(tier)s abonelik hediye ediyor!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s burada yeni. Merhaba deyin!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s, %(other)s tarafından gelen hediyeyi %(recipient)s adlı kullanıcıya aktarıyor!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s, %(other)s tarafından gelen hediyeyi topluluğa aktarıyor!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s, %(num)d izleyiciyle baskın yapıyor!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s yeni bir %(bits)s Bits rozeti kazandı!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s, Seviye %(tier)s ile abone oldu." + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s, Prime ile abone oldu." + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s art arda %(num)s yayın izledi ve bir izleme serisi başlattı!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = bulut kopyası doğrulanır doğrulanmaz hemen sil." @@ -286,9 +344,15 @@ msgstr "%(path)s de aktarılır." msgid "Also transfers preview images from %(path)s." msgstr "%(path)s içindeki önizleme görselleri de aktarılır." +msgid "An anonymous user" +msgstr "Anonim bir kullanıcı" + msgid "An upload for this file is already running." msgstr "Bu dosya için zaten bir yükleme çalışıyor." +msgid "Announcement" +msgstr "Duyuru" + msgid "Anonymous" msgstr "Anonim" @@ -546,6 +610,9 @@ msgstr "Sohbet geçmişi: %(user)s" msgid "Chat messages" msgstr "Sohbet mesajları" +msgid "Chat notice" +msgstr "Sohbet bildirimi" + msgid "Chat replay" msgstr "Sohbet tekrarı" @@ -1162,6 +1229,9 @@ msgstr "Sohbeti filtrele..." msgid "First" msgstr "İlk" +msgid "First message" +msgstr "İlk mesaj" + msgid "First page" msgstr "İlk sayfa" @@ -1997,6 +2067,10 @@ msgstr "Sayfalama" msgid "Pagination (top)" msgstr "Sayfalama (üst)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "%(months)s ay peşin ödendi." + msgid "Password" msgstr "Şifre" @@ -2316,6 +2390,10 @@ msgstr "Yeni şifreyi tekrarla" msgid "Repeat password" msgstr "Şifreyi tekrarla" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "@%(user)s kullanıcısına yanıt: %(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "'%(username)s' talebi reddedildi ve silindi." @@ -2572,6 +2650,9 @@ msgstr "Oturum aç" msgid "Size" msgstr "Boyut" +msgid "Someone" +msgstr "Birisi" + msgid "Sound" msgstr "Ses" @@ -2872,6 +2953,19 @@ msgstr "Sistem yöneticisinin şifresi yalnızca ortam değişkenleriyle değiş msgid "The video file could not be loaded or is still being transcoded." msgstr "Video dosyası yüklenemedi veya hâlâ dönüştürülüyor." +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "Kanalda toplam %(num)d abonelik hediye etti!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "%(months)s aydır abone!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "%(months)s aydır abone, şu anda %(streak)s aylık seri!" + msgid "This admin user is protected and cannot be deleted." msgstr "Bu yönetici kullanıcı korumalıdır ve silinemez." @@ -3326,6 +3420,9 @@ msgstr "nesne veritabanına göre" msgid "active" msgstr "etkin" +msgid "an anonymous user" +msgstr "anonim bir kullanıcı" + msgid "available" msgstr "mevcut" @@ -3353,12 +3450,12 @@ msgstr "ör. VIP arşivi" msgid "e.g. alice, bob" msgstr "ör. alice, bob" -msgid "e.g. john_doe" -msgstr "ör. john_doe" - msgid "e.g. channel_name" msgstr "ör. channel_name" +msgid "e.g. john_doe" +msgstr "ör. john_doe" + #, python-format msgid "effective from %(date)s" msgstr "%(date)s tarihinden itibaren geçerli" @@ -3382,6 +3479,9 @@ msgstr "hiçbir zaman" msgid "not created" msgstr "oluşturulmadı" +msgid "someone" +msgstr "birisi" + #, python-format msgid "today %(time)s" msgstr "bugün %(time)s" diff --git a/WEBUI/translations/zh_Hans/LC_MESSAGES/messages.mo b/WEBUI/translations/zh_Hans/LC_MESSAGES/messages.mo index 1abce46f1370d1084c51da2918f4cd8b4f835dce..92815bec71a867668d534ad8b2a40d1f1c1dd826 100644 GIT binary patch delta 20382 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\n" "Language: zh_Hans\n" @@ -145,6 +145,64 @@ msgstr "%(num)s 天" msgid "%(provider)s does not support OAuth." msgstr "%(provider)s 不支持 OAuth。" +#, python-format +msgid "%(user)s converted from a Prime sub to a Tier %(tier)s sub!" +msgstr "%(user)s 已从 Prime 订阅转为 %(tier)s 级订阅!" + +#, python-format +msgid "%(user)s donated %(amount)s to %(charity)s!" +msgstr "%(user)s 向 %(charity)s 捐赠了 %(amount)s!" + +#, python-format +msgid "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!" +msgstr "%(user)s 向 %(recipient)s 赠送了 %(months)s 个月的 %(tier)s 级订阅!" + +#, python-format +msgid "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!" +msgstr "%(user)s 向 %(recipient)s 赠送了一个 %(tier)s 级订阅!" + +#, python-format +msgid "%(user)s is continuing the gift sub they got from %(other)s!" +msgstr "%(user)s 正在延续 %(other)s 赠送的订阅!" + +#, python-format +msgid "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!" +msgid_plural "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!" +msgstr[0] "%(user)s 正在向社区赠送 %(num)d 个 %(tier)s 级订阅!" + +#, python-format +msgid "%(user)s is new here. Say hello!" +msgstr "%(user)s 是新来的。打个招呼吧!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!" +msgstr "%(user)s 将从 %(other)s 处收到的礼物传递给 %(recipient)s!" + +#, python-format +msgid "%(user)s is paying forward the gift they got from %(other)s to the community!" +msgstr "%(user)s 将从 %(other)s 处收到的礼物传递给社区!" + +#, python-format +msgid "%(user)s is raiding with %(num)d viewer!" +msgid_plural "%(user)s is raiding with %(num)d viewers!" +msgstr[0] "%(user)s 正带着 %(num)d 名观众突袭!" + +#, python-format +msgid "%(user)s just earned a new %(bits)s Bits badge!" +msgstr "%(user)s 刚刚获得了新的 %(bits)s Bits 徽章!" + +#, python-format +msgid "%(user)s subscribed at Tier %(tier)s." +msgstr "%(user)s 订阅了 %(tier)s 级。" + +#, python-format +msgid "%(user)s subscribed with Prime." +msgstr "%(user)s 使用 Prime 订阅了。" + +#, python-format +msgid "%(user)s watched %(num)s consecutive streams and sparked a watch streak!" +msgstr "%(user)s 连续观看了 %(num)s 场直播,开启了观看连续纪录!" + msgid "0 = delete immediately once the cloud copy is verified." msgstr "0 = 云端副本验证后立即删除。" @@ -286,9 +344,15 @@ msgstr "同时传输 %(path)s。" msgid "Also transfers preview images from %(path)s." msgstr "同时传输 %(path)s 中的预览图。" +msgid "An anonymous user" +msgstr "一位匿名用户" + msgid "An upload for this file is already running." msgstr "该文件已有上传任务正在运行。" +msgid "Announcement" +msgstr "公告" + msgid "Anonymous" msgstr "匿名" @@ -546,6 +610,9 @@ msgstr "聊天记录:%(user)s" msgid "Chat messages" msgstr "聊天消息" +msgid "Chat notice" +msgstr "聊天通知" + msgid "Chat replay" msgstr "聊天回放" @@ -1162,6 +1229,9 @@ msgstr "筛选聊天..." msgid "First" msgstr "第一个" +msgid "First message" +msgstr "首条消息" + msgid "First page" msgstr "第一页" @@ -1997,6 +2067,10 @@ msgstr "分页" msgid "Pagination (top)" msgstr "分页(顶部)" +#, python-format +msgid "Paid for %(months)s months in advance." +msgstr "已预付 %(months)s 个月。" + msgid "Password" msgstr "密码" @@ -2316,6 +2390,10 @@ msgstr "再次输入新密码" msgid "Repeat password" msgstr "再次输入密码" +#, python-format +msgid "Replying to @%(user)s: %(msg)s" +msgstr "回复 @%(user)s:%(msg)s" + #, python-format msgid "Request '%(username)s' denied and deleted." msgstr "已拒绝并删除申请“%(username)s”。" @@ -2572,6 +2650,9 @@ msgstr "登录" msgid "Size" msgstr "大小" +msgid "Someone" +msgstr "某人" + msgid "Sound" msgstr "声音" @@ -2872,6 +2953,19 @@ msgstr "系统管理员的密码只能通过环境变量更改。" msgid "The video file could not be loaded or is still being transcoded." msgstr "视频文件无法加载或仍在转码中。" +#, python-format +msgid "They've gifted %(num)d sub in the channel!" +msgid_plural "They've gifted %(num)d subs in the channel!" +msgstr[0] "已在本频道共赠送 %(num)d 个订阅!" + +#, python-format +msgid "They've subscribed for %(months)s months!" +msgstr "已订阅 %(months)s 个月!" + +#, python-format +msgid "They've subscribed for %(months)s months, currently on a %(streak)s month streak!" +msgstr "已订阅 %(months)s 个月,当前连续 %(streak)s 个月!" + msgid "This admin user is protected and cannot be deleted." msgstr "此管理员用户受保护,无法删除。" @@ -3326,6 +3420,9 @@ msgstr "根据对象数据库" msgid "active" msgstr "活跃" +msgid "an anonymous user" +msgstr "一位匿名用户" + msgid "available" msgstr "可用" @@ -3353,12 +3450,12 @@ msgstr "如:VIP 存档" msgid "e.g. alice, bob" msgstr "如:alice, bob" -msgid "e.g. john_doe" -msgstr "如:zhang_san" - msgid "e.g. channel_name" msgstr "如:channel_name" +msgid "e.g. john_doe" +msgstr "如:zhang_san" + #, python-format msgid "effective from %(date)s" msgstr "自 %(date)s 起生效" @@ -3382,6 +3479,9 @@ msgstr "从不" msgid "not created" msgstr "未创建" +msgid "someone" +msgstr "某人" + #, python-format msgid "today %(time)s" msgstr "今天 %(time)s" diff --git a/WEBUI/webui.py b/WEBUI/webui.py index ed248b1..7f1f886 100644 --- a/WEBUI/webui.py +++ b/WEBUI/webui.py @@ -60,7 +60,7 @@ # `_` is used as a throwaway name throughout this module, so translations use the # full names (both are extracted by pybabel by default). -from flask_babel import gettext, lazy_gettext +from flask_babel import gettext, lazy_gettext, ngettext from recorder import chat_events from recorder import clip_engine from WEBUI import i18n as ui_i18n @@ -6153,6 +6153,151 @@ def chat_event_from_row(data): return chat_events.sanitize_event(data.get("event") if isinstance(data, dict) else None) +def chat_meta_from_row(data): + return chat_events.sanitize_meta(data.get("meta") if isinstance(data, dict) else None) + + +_NOTICE_TIERS = {"1000": "1", "2000": "2", "3000": "3"} + + +def _notice_tier(event): + return _NOTICE_TIERS.get(str(event.get("plan") or ""), "1") + + +def _notice_gift_total(event): + total = event.get("sender_count") + if not total: + return "" + return ngettext( + "They've gifted %(num)d sub in the channel!", + "They've gifted %(num)d subs in the channel!", + total, + ) + + +def format_notice_text(event, user): + """Twitch-style headline for a USERNOTICE chat event in the request's language.""" + if not isinstance(event, dict) or event.get("type") != "notice": + return "" + kind = str(event.get("kind") or "") + name = str(user or "").strip() or gettext("Someone") + anon_subject = gettext("An anonymous user") + anon_object = gettext("an anonymous user") + if event.get("anon"): + name = anon_subject + text = "" + extra = [] + if kind in ("sub", "resub"): + if event.get("plan") == "Prime": + text = gettext("%(user)s subscribed with Prime.", user=name) + else: + text = gettext("%(user)s subscribed at Tier %(tier)s.", user=name, tier=_notice_tier(event)) + months = event.get("months") or 0 + streak = event.get("streak") or 0 + if months > 1 and streak > 0: + extra.append(gettext( + "They've subscribed for %(months)s months, currently on a %(streak)s month streak!", + months=months, + streak=streak, + )) + elif months > 1: + extra.append(gettext("They've subscribed for %(months)s months!", months=months)) + if (event.get("multimonth") or 0) > 1: + extra.append(gettext("Paid for %(months)s months in advance.", months=event.get("multimonth"))) + elif kind in ("subgift", "anonsubgift"): + recipient = event.get("recipient") or gettext("someone") + gift_months = event.get("gift_months") or 0 + if gift_months > 1: + text = gettext( + "%(user)s gifted %(months)s months of Tier %(tier)s to %(recipient)s!", + user=name, + months=gift_months, + tier=_notice_tier(event), + recipient=recipient, + ) + else: + text = gettext( + "%(user)s gifted a Tier %(tier)s sub to %(recipient)s!", + user=name, + tier=_notice_tier(event), + recipient=recipient, + ) + total = _notice_gift_total(event) + if total: + extra.append(total) + elif kind in ("submysterygift", "anonsubmysterygift"): + count = event.get("count") or 1 + text = ngettext( + "%(user)s is gifting %(num)d Tier %(tier)s sub to the community!", + "%(user)s is gifting %(num)d Tier %(tier)s subs to the community!", + count, + user=name, + tier=_notice_tier(event), + ) + total = _notice_gift_total(event) + if total: + extra.append(total) + elif kind in ("giftpaidupgrade", "anongiftpaidupgrade"): + text = gettext( + "%(user)s is continuing the gift sub they got from %(other)s!", + user=name, + other=event.get("other") or anon_object, + ) + elif kind == "primepaidupgrade": + text = gettext( + "%(user)s converted from a Prime sub to a Tier %(tier)s sub!", + user=name, + tier=_notice_tier(event), + ) + elif kind == "standardpayforward": + text = gettext( + "%(user)s is paying forward the gift they got from %(other)s to %(recipient)s!", + user=name, + other=event.get("other") or anon_object, + recipient=event.get("recipient") or gettext("someone"), + ) + elif kind == "communitypayforward": + text = gettext( + "%(user)s is paying forward the gift they got from %(other)s to the community!", + user=name, + other=event.get("other") or anon_object, + ) + elif kind == "raid": + text = ngettext( + "%(user)s is raiding with %(num)d viewer!", + "%(user)s is raiding with %(num)d viewers!", + event.get("count") or 0, + user=name, + ) + elif kind == "bitsbadgetier" and event.get("count"): + text = gettext( + "%(user)s just earned a new %(bits)s Bits badge!", + user=name, + bits=f"{event.get('count'):,}", + ) + elif kind == "announcement": + text = gettext("Announcement") + elif kind == "ritual": + text = gettext("%(user)s is new here. Say hello!", user=name) + elif kind == "viewermilestone" and event.get("other") == "watch-streak" and event.get("count"): + text = gettext( + "%(user)s watched %(num)s consecutive streams and sparked a watch streak!", + user=name, + num=event.get("count"), + ) + elif kind == "charitydonation" and event.get("charity") and event.get("amount"): + text = gettext( + "%(user)s donated %(amount)s to %(charity)s!", + user=name, + amount=event.get("amount"), + charity=event.get("charity"), + ) + if not text: + # Unknown or incomplete kinds: Twitch's own system text is the best fallback. + return str(event.get("system") or "") or gettext("Chat notice") + return " ".join([text, *extra]) + + def chat_item_from_row(data, *, time_key): """Build a sanitized chat API item. time_key is 't' (live) or 'rel' (vod).""" if not isinstance(data, dict): @@ -6169,7 +6314,8 @@ def chat_item_from_row(data, *, time_key): msg_key = " ".join(msg.split()) reward = chat_reward_from_row(data) event = chat_event_from_row(data) - if event and not msg_key: + is_notice = bool(event) and event.get("type") == "notice" + if event and not is_notice and not msg_key: msg = chat_events.format_moderation_message( event.get("type"), user, @@ -6181,8 +6327,17 @@ def chat_item_from_row(data, *, time_key): item = {time_key: time_val, "user": user, "msg": msg} if reward: item["reward"] = reward + notice_text = "" + if is_notice: + notice_text = format_notice_text(event, user) + # Twitch's raw system-msg stays server-side; the client gets the localized text. + event = {k: v for k, v in event.items() if k != "system"} + event["text"] = notice_text if event: item["event"] = event + meta = chat_meta_from_row(data) + if meta: + item["meta"] = meta emotes = chat_emotes_from_row(data) if emotes: item["emotes"] = emotes @@ -6193,7 +6348,11 @@ def chat_item_from_row(data, *, time_key): if color: item["color"] = color dedupe_token = msg_key - if event: + if is_notice: + # kind + text keep e.g. several gift subs from one gifter to different + # recipients apart in the ~1.25 s duplicate window. + dedupe_token = f"notice|{event.get('kind')}|{user}|{notice_text}|{msg_key}" + elif event: dedupe_token = ( f"event|{event.get('type')}|{event.get('seconds') or ''}|" f"{user}|{msg_key}" @@ -10874,6 +11033,36 @@ def public_download(token): return send_mp4_with_range(file_path, accel_path=accel_path, attachment_name=filename) +def chat_items_from_chunk_file(chunk_file): + """Sanitized, de-duplicated VOD chat items for one static chat chunk.""" + try: + with open(chunk_file, "r", encoding="utf-8") as handle: + rows = json.load(handle) + except (OSError, ValueError) as exc: + logging.warning("Chat chunk unreadable %s: %s", chunk_file, exc) + return [] + if not isinstance(rows, list): + return [] + items = [] + seen = set() + recent = {} + for data in rows: + parsed = chat_item_from_row(data, time_key="rel") + if not parsed: + continue + item, dedupe_token, rel_val, user = parsed + key = f"{rel_val}|{user}|{dedupe_token}" + close_key = f"{user}|{dedupe_token}" + if key in seen: + continue + if close_key in recent and abs(rel_val - recent[close_key]) < 1.25: + continue + recent[close_key] = rel_val + seen.add(key) + items.append(item) + return items + + @app.route("/chat/vod//") @login_required def chat_vod(streamer, filename): @@ -10896,8 +11085,15 @@ def chat_vod(streamer, filename): ) if not chunk_file or not os.path.isfile(chunk_file): return Response("[]", 200, mimetype="application/json") - resp = send_file(chunk_file, mimetype="application/json") - resp.headers["Cache-Control"] = "public, max-age=86400, immutable" + # Chunks hold raw log rows: run them through the same allowlist as the + # range API (no raw tags or system-msg to the client, localized notice text). + resp = Response( + json.dumps(chat_items_from_chunk_file(chunk_file), ensure_ascii=False), + 200, + mimetype="application/json", + ) + resp.headers["Cache-Control"] = "private, max-age=600" + resp.headers["Vary"] = "Cookie, Accept-Language" return resp if request.args.get("meta") == "1": diff --git a/core/tts_bot.py b/core/tts_bot.py index b3ce8d3..e44ab14 100644 --- a/core/tts_bot.py +++ b/core/tts_bot.py @@ -62,10 +62,15 @@ def parse_privmsg(line: str) -> tuple[str, str, str, dict] | None: continue key, value = tag.split("=", 1) tags[key] = _unescape_tag(value) - if " PRIVMSG " not in rest: + # Route on the real command token: text such as "x PRIVMSG y" inside a + # USERNOTICE or another command must not be read as a chat message. + prefix, _sep, rest = rest.partition(" ") + if not prefix.startswith(":"): + return None + command, _sep, payload = rest.lstrip(" ").partition(" ") + if command.upper() != "PRIVMSG": return None try: - prefix, payload = rest.split(" PRIVMSG ", 1) target, message = payload.split(" :", 1) except ValueError: return None diff --git a/docs/screenshots/chat_twitch_events.png b/docs/screenshots/chat_twitch_events.png new file mode 100644 index 0000000000000000000000000000000000000000..3bdf6a49f46cd2c7c8bff43716d91f31963bcaf3 GIT binary patch literal 72023 zcma&OWmHyQ^es$xBPk^*NO!k%!voUN4N}r2A&qo*^9Tq?r*wCxba(eXsK5XFj(hKi zJI49)Y|h!e)}Cvwxd~BHkVHiyM1p{TK$VsfSAl?la)N+>UPgcdN|5d`@*p5EAf&}b z)LbDCnvp%#x^AC^LVUj%L&M<0e1XJ<*}%fdb-=8a3JfLeWD18h3Y~eWc>0C!4E>Tj@mEF_rxb7na6BI&yjOZp0kgp ze6GsTG{enw%j?QHkd=&$5N&U>^@_y{0|N5p z`GN7nN+**<#X_E#aVHSwPscxI`fhfISx?Y>oT=mV!op-0LxKGJxdn!=y$#_EX4T)1 zgUNsqVmh%f$0=d>qPhBJ1Fr_v9tM1LPq>0VF&XRT>${q#hlNVxQ2vz1Q^&WIWrrG;A@4X$t zQ$CH>s^oXItrZP}V^$cAC9)0$3PbMee2i1&aeSHDZR&GnO}5j6%gnle=NgV018qHJ zEgURpd6#N}(?eW=7eaDK{B9dis=1+cZ@I@5lp**PG6)}P{VCwuG92$&Xp58wx&+MT}CFyF0( z_d#Ih-regQt~6#`yr#9n+-On$EcH8A$hCLw6`X3loUFq#AO9ypALNAAj`Q#HYV=l~ zq`;Dw!sh=m{!h$Wq0$ml{(_c{ z4wJKLO0yD+5KVtuD_K3dw!h{E7)zpXUAWcbFjVv3&F$;!19hnfy{>iKJND+Ei=Y8q z#AG@17W|*xt8@&Ll4oD)61s!&&%o#b55d6v4fc<@L-+xfYL5!rMO_RX3-za{hyn09 z^D$z4|JLF}45E7qJ*ff5#d;=QWyvYaS(VI}2e3|dMZhu*>W?~N?DAjXPW@+*r$GH; zJ|Vqk&0gZXRQ;3c9`o&MIpYoru;<@-O>sUTRjF4A@9t@;hy2){aO6D07t~H7882I$ zY>=<|yd>v+%?9@&jjjIk;gYt+B)@&%Vz0F)mwa8sVzcInndR(v&W{W3ucK0QBi0eQ zXSF~L%BAsenGuVV5{o^9+uxLD|2W~N_GCeDGGas2g~6kdb8hFaODjI-+MzS~B{wnS zD1VyX>$}|!!!LHhxWM9IN&-HyGcixG{o|Qtyh{J%uvVs=2e^@JKpw*^c*UuL&TECGhy|47YB}xZvEbS>SH+)Zbrob;|=Q> zRcy`LQjM(BS(QwH!k5df=z4{7`!?L>)U)y*#U#|yF*TCSj7dLLdh%B4+ekgNdLTVr*Ra$DI-OrpP zGw%cpk`w`jdc;oz4*Ty}9=#cQWOK1y-8jkabh!+D>5PQLP&_Fxn1HoszgzOUI7Fa6^|xML|CH{U zc=2>0-3qj7dKXG^QoCRS?>R5Ef)na8%YlKH9aW$seQ7Ul$vt0uBlWmr@XC#)R@1~h zwtRry#dJ=?MxUshlmo3)nmG%iT3VcCX+BhXo+JmWSZ3f_#FmL(R??fOooX}vj)8ku zRh(<{PN_<`^X+U0kT-Q=O8MM=7|$_2vmB$5Rd{@=`X-X+U=oVnke}}(PkY_G*``L! z_pSZo5lZZR4bfn;m4?htD1;;sFSn-s5AonZXTJKyx_$fQk$3xyCU&10KT|t)I*h5~ zrX|ubfEjfLxq6bGa>wiXUF9Q>d*?#i>r1lPrXCae;|2A3*?FtJ8O?l|x>MWq_*l@r z=1Ef8+FMiNyoHTqnN7m_Q`8D%z4CfIkZ}eZ@i)|#yi826Yl{q958T^PUYGcvEGqsN zQ$-_Ws_w()HQzy2rVe;A*@QLOQlKfx3vFF84miw(5Tjx5phUhhVJuTL(ZL241%vZY zext!VT^~X!n`}}@@COu9HhBa)vfltY*)vp5BqA7wxSDD)!4d5V$QL6Mmx$gh!~5tP z^xDAvHG!)6sfsq=m?ISYerVjt#?GL3Nb$Sc1B~syXCs1p!L%l@%D@5bz?`Y7!i@?r zCi^1{BkuYEcz}Z|n#&^DlW~uTGJPg;`Sw3i6Ydyl)SD%I&SZ+Z=?fsqyO$iGGSE~jYu0Zq{(|AB~^i6=VXU5)oa z^G&Hxgt+#Oq%aS$=O6+;7J@6_7%w3Vc~Dtpui|4|azXD&Z|JWRHn0vc5JJCb9Y1-_ ztXuk&XDATdGcY-xb7JwG&zF8H!{-Y=0K3`v_Djh#>xlg_{Q&3sc)6adqs>uvn%#fh z_JKPoF#~~X3@KjQRKe0Xh>;5s-^J5*{VFA~+&W`2i(jMmt|1LSeNV}cL~lH9vEePM z?gB)|fTy+uSxgMFv0R;T@(4?#^^XSfysZaa=AbZHI=+UH^Vx*?0!%WY=e4`U>&Hf<@^RvI=(F?U2K+unVR_>{I%%<{R>ya!Wz5_G?4F{o_rwsR z)f>OBQeP20mPIxzdUItmiXZ+AYyxGi?jnefh({t$xVIh; zI~&jPs7SO{Cq4cAZM2n2Ad^Z9oHc15{_^{`DGb{z?jUE8|1% z__BvY%UxMykg6WLSCY`1XjwbiCgp>+`(-yqc8*Ph^cCH0Ad$hr z_+(dx-JB|%CEIsPwD{8$g4<|YZI7lJUpj;H57njxi&nAGbS^^nJb{Ws{F(b2Qz`FR zzx5XK;oS#&5|((Pho?^6&}rtSSzuAxbSu0=5^Nk&V_Mvbd|k$M{EeHyV}_L>y;0?; zPRHaqfGoYhoAzUJHGg@RpNnk$Y7980TIp2=HRRXY%a8d7Q-|v`vh?u8p;=gA_=2XL z(1{D>9bv`#w$%9zS2EnKL%ro&4EYvUnUl7!=zKx-K_9L5W`T)i{3 z(p3EQF;cpabjzXW-Vy&xp>I1>i0+JtHxXn4n1wyxE~H%hTXyOhQLnAShgk7NOE}(% zZ_yL(_sCUtXA@upN7Gyv4Ta3~q&6{6rHHlpnQasn1_GNO{jFljlpvFkc5*vER1v%% zH2@>3`*c<05MV52vy7v^3TbJ-kDf!zh4OQ!1fsO4A7eNO;*^lYQJ3Kt5*r^_-eQ=RUkL6Ea9yfjAUfYclOFqC%;pyE@V3qjP;j>fJ!rhTt;%?V@tM`_Y(2!x&1D&Nf znl~;j+kIYxV==ZUq-l8UPOHA$aFIMa4$}Rnnud8Qf4sa!JUNin zybgAqJSQR?79ryXFypUNq}HELu(kalChD6zE{9(zzP5>whfeOpKMl^fcE2bSifTSS zUs+pN$B9Omf6)X_9h261(~pb@>7eWfjtcp_s^or`_8%88Eto|Fv-cGOz{Q_xW{~-K z=ZX3=K`c;tI>W!T3Ch`!0-60yHIKa|K!TaqeNv5&q;509!I z)1#jsGn{;Q-02(DMND~}uesw#L^^&O2W4IM7H3bZYbm%L`EN`;FJKFL2X?C_5$^P< zw8kwq7HE|lTV~Prl3f0X&|j>|Nbygj@%a)2cdXk^oJ53@u4XP%kSfrB6o9}jB8GGM zUgoW4k67V!USpO5t;MEVxgQ47QcY3Znc8afVhUb-iaV=#d(A6qg~=;DgrkN@6xN;sxrtV-{@NMD>0m>Z zlKY4Z!o7RycW#s?SSjcR4W(AH)&xl_-#0lAHM%9=4}J@|_-Ro3BVm+C9*t7W--!Sv zW0L3|J8!ESePdUD5J&Tjrr+zqG&%w-wA6!>%@{sei~Y=>#+z%TQW6#T;MUi~t5i{K z{YohRbUj*;PkxAYtmE4ph3<|6UP5O`(EIQAKZ+^XG(DWW_69ADg~_l0TaXwBt?EOK zwPHw;6h6=<{R}kP2(_>md>?|H*1%~Wp6W%X87EgQ(s`;TT$l6dsV<#kME|qRQ%dTA zEPBV7W~BVH3dyYie|W%q6`Ewv0cu*FbmLOW8tkQhwy%VRIDw8!(7%`4L()xdv?2pc zQ+}`4+UlJ5HptFNQMA{agTaiS6m~UQ`*SFVummJaRpFow@1kT>Rh%wJ9DNaEnoeIA z36vYl%-b(EwXaL}4o_*!E|nuVf24i{b9-96^6Bw4Xt{Jx=>g z@h6MSqA#lQt(e`cw&j|z2S^&FZU!=C+V#iSmsRO^Upu>oFCRRN0ldt(+IM<(-8MwZ z$l)EmKwvkYL1)70pkW=~ieF;;ixKsRN38DPo2H&aR_OTw%`Kw0L$!Ny*z|3337Jtp z<@wh`wUFan#JTUE<9B$F9+40G21U3reW&+Fz&u8W5bVN1+CvyY;zy#JeF31 zGM-9Z&A6C4EV{vAmS<1#sB9$eDCJtHGtS?Y1diwvk&yscd|KFh!|;I?H^x9#elN?z z>3*^}1&$|2730TCh>4aT6f1qah2plor(R~*Bq7ISpVK;3m(n<6YclkuI`OwYbh_qS z)T(b*KP7I)zREb8;cc3b=w+cR-@kW{?3Z<{#Op=-In`5LKJabOQ+xO=ZM|@JfY-yc zHbR-;`zlaVikIzXJ>jEAv(;41h+%}osW>##AmjGUYu>PCa7ttMrlFwVBoSbN{scFoyU$7${` zHLBC0fM>W5qvRWhUvY1~Wvm_0B5rG|5*{iC0Bx9bi5WSQ2KXC9x|Rw;S&RE5Sz=u7 z_dCpA>+Ua31X^Y1ubKny^FP5{}d`3>%Xibk=r7k;T>WNstYKKq));t-SY&Ej~7SFvC3GMIesAU6@OxQ;P#!Gl0H&ywQZwUwk;1oq?z z6?>3jrlM?i!`(I0(Er!g4|8s;HbNKOe7z$LA;ix==uP#XO@5=R&!2{7F1xh)xAKHEIpvfX=GEU zzg*~O8t{{|5FAneMffd(Fg(C{M*yI}3gD^#W9}k>gZNVu8R`rB^g?vYrvU}nt!+sp zfBC6L08o|sY(IbEV3Qz7*R`43a}F%@9zZPYH` zNPRw9eN*w-LnbXLrN~5pup1>gm)=CHNmaI&i|+a^dC;x6vZsWDjX?;RBH#Wm^Ib&z zLYmnltG>H@ou6Z@T>0R|@^n};nB8~xmGd3ac1flw8($*T1GMG5@R81-&~ZGy4<$#z za}oRM)jNw@Dp7>7^L{r|kN!crq}kYII*m<*{sNabmDdRaE<}F^ZYd9}&Gb(D*e5eL zSg?HB2XW=ah~pUN4OJhe^TK}W9+x;)0h$wul^jHA&#j$7b;q;D%xJn~Ij%&jDcSoL zoWS#*&0;K~zpU<_0#Mr#idd1KkFVB!u_$+tfKG#Z0`Xx;y3q$Yp2~4IlOC5HYZfN` z(i!zKca~qp{2I9I`tdlRw5UT5G2Yfjy(jO0MXIsyj!FD4D+>c8A_$Wdp(lYDM4>=A z^@AA~pMEPXPnNZDKMci2YIVwtdbOl>+DNNM%1fjO8vgF7c|>>>ZxqCD=sjX~CB-@- zt?G~uf%cbluLhziEoAdmD{`0T{?W2C?)SHPtPb@iU+ZLNYz+jfS{!)M1r&n z^ZhA!1rF*-0w!cuWNxK+c0fJAp+ga-2H@dncN1pDKlbA%0USitV|u(OM1Sx+kicor zhVJGdQp?8vQ;?+zn2*hLB5Ca3eUAX|w`Hc&A%e;KkF0MK1&&fEXwCo35%wjpRKrcq6U?GPC2Om+K)8bG2#&%7@-Np^%9YN?fdy79f)O(*fOSg;9cp!juMve3cmZFbolqtEDr0 z)G(9&TwS_^>Vq{_3MDn&b&Z;Z3;H|nsPBPuntvlVN6VRDykX|1NZm$T-*W)=lq;;L zt%jSw!&m)fls`lu$lm}wIH5z{cjmn&`6$I9zxE$^4mQ*55KcT-ri@uXxo=4?x=&v{|fU zrG~{14lL1H|hR8QG-=3bmd9ETeJDo#;R%|i_y$p?v6f*@6KXG3j zue3UD4~Kc^I_>)22>P!zI@yt)m1X})H+FDpYbCY6U(bDTc4jAocAM11hjN?>5>e-5oGw8E{HNfYogoRAgr_UYByq7lma*jp~c zvs68539F@FI|eE;LE^m`!wg#MJN8!BdYWr@Qc17*QD?s1Xc32Ps4n8B{EI)inq+G; zF=5+GQBh*!WV6M~!{=u8>u3}-Az+y)T!2OJ>OWT%M%j6`>7NJvnPZOmw<`x<7U~oPV#d*ZTZ; ztSIyt_n=l;V5|d=g3qk-l%JRPGtOsYQe8viej>=>WrP1alN_y_kK~*|V{9P(Apw`G zIPJi4?3g#wF@@?adjbQMYYnQ(CeBpE#P*2_1ze;S6TKYel;7P8%SUPzm4g;Mb*nQI(JdQy* zJrS=lCD4H^wHx4X#GK@ZGk7Z8^rrCG0uU}%f{JVQ!f1f05J?j-Dqn}x_)Pw*e`q08 zW~X_mi|YeLhgwdo#)l8^5g`6sPU5I)Tx$KoLw0y;kdwy#xSfukn$~bg^VCIJ#3nj= z2pM_2-hW&GP6&3fcz>1fw`e_e(IMJ;jzKMXD!Sy&Dr48=C{zBq#3YjMw-O|K+nGKs zpAYBDTc1+YwQ0EzoOtc(R)biKx*rbAg!WfjeNs7Xa&mLEYi*b69k=((TQkCs+_uxr zI3?j;+^{I%WH~7DHT&w>R($mD1h=7D6ucXIYXHW(D*)``9JdT|Dc zhE+>l`F*;b6T0BteFH$bf#f#(kQ5H;OidlWu<;m}8t~wlDiZ8?+RF#N)f5k`4uiW+ zI|)uwMAB3oK?IvctIHU((gb@R^(OPXfO-(Sc;@$zSvUIjH3d0TgCPvt&m@DYN=i!d z@&eRVfT%JjTkNZzeHYH--DTt59=OjZU+Sb-wQ#s!=uETGX_xiW@3!+1p_LqnIa3*k z2{^yem-GwO2=3wCbWs^7ao;kI1y)V&LmGF=J2X$vq=>BN-XC*C=j|j!(zsKpTm2tS z7b|ns5~sW%QWyL)RW7&_*qHhNt8C~1GBPwYM@&$eDbqF3L3Mq>fCvPDg?-C@rL0`q zprf7JkYL|OshOMfN{Pil*})Y%eT!tiYkJDgI7wX1fp_6kf$??WcudG*r6Sw=?HlBJ zC8q`jTmBXW+ZYFK?E%qav8$3H908iRR1e=~DobU<4^~zaE$KvG_*71}$Im9kG1u8i zl=}zHep(B&Fi@MV zqinIs%~4HlG7yiBy;9%>>QvMCCNKgZfDzYu_X_g}kG5fv>)`|19>wwCQJ8DZMtiz>LP^*fU%a5NW-78e$^7`f=*@ zT1<6k#f5QemdUwrLTV+llA!`wOP|?k_FF&zOeo?Cu$woM%Jf^GrZn`uwvx?o8FlL1 zFZVjWqWfGgx%fP+lRiIe3o&We9Q^*}e>h)_{Fs&nXhyQ!uz$ED+AW7$4-4KspfSu} zW0K2^uGCivsUP#ToOV&buD_cZ%4;$(%*|msAX%ad61SA&r9PnA4sH#CF45a;_`Ojx zG!^HJQm*pspYprB+@_bcDk4OzPF))w6c(%DU#qUxITo|X4R6- zZp>CyE;!~eA0C~EnB5$Mp?W-quCz(-^PCAbwcO2Axi^PNe_Vx8&*$Ui$F(q~mZ!UY zyZX%pz(*-%lm+M07{35MGME?d3ZY!gegBvps#r*}a)IRr{`$;v)`RWQ$#Yqq=4eJ& zLwxtUp<}>DqB=fM@xj%w+!E_IH;*wXJdFfaV&Bc#;ggqjYk-pAd`u` z+{I9&*7;6wO{H9LKZl1atwyF>la0VmT2aeuRd$gLnjKWhCd@v}Jz@K;QM{SpxZN{8 zq5MsBzL{cq#rE})0{m)nMW;4jNTJ(4MXefZO%TX=YcQG9X5MLkIzqJ5*tRb$|NXS> zQUg!Af`gg#Z{XyZL_+-IT%}&{AhTk|S(eMuS1(cx?~L2Wvix=+T{H6dqc*FO`Fx|+ zr+U)ixF5=K_^hA7Lz^+IMWD}SSM9kfIABeFZKDv{jqL~4=w=y*8f(7JJ<>bcalX`W z>dH?MmTv<_mfCfSG=xzH=-?Bh=~~$+T<{z-S}7@Dm`2fv3OPybDd&1}ie+afbLYot zxe_hwC38z_Niq#57ukj~o)%9_EGvuEPS>M^#>w|1iTQvb{RCjZQlpC<01WQ04jVro z=CsGe#GIWuP)WB-y z{KQs}XRwP$OwZaIqmH^tk$!bT~smwx+6~p&=*d3%{0@&r*%eLhI9Id3$@i zQBUOKNeBAa*w`yxG?7FAOaraq0?q^%U&K`ZapwI%%R!b{t4IxKZR6g%u6Svm)LFTZ zdpgEfqe|%UG<`Sf=?F0I`1p8ZecFeGd|AAH0L^8}?e0z#DyFabsLcTk5VJD~=;u6c-gZrhg!}#nQeOd*Xg9Im&F(i33pCpS)Vf_vlT9&HJ z6fG=hVZHkbV$Nld%eK>9mi?gN&7(OuITPsjTfFZ3uSxkeAH5hZauNT;kU-2w2!U2Y z$l^!wHM03eZn!^c8h};l)0%yeG0%H(KDxl{j^)DhR9dN*X+QR9M7YMhA?A$(vLgZC z0EmlVAPO?Zd^@L}l6YU++R_~NrR`^v%+r39(39)fdptnuHdQh;KN31!zC@@=(QW<$ z#a~2s1rAg!=t3}@cC%0F!z*Z{f=$4Z4yAG>#>E{hH{Ty0<9dSXx)hOL`3sjKX1zf$ z2j-X%W;un~PnYj%*zLi`=XwJ?;d8ziE~$6Zu_#pb{IFkT2CNj<>aLL`uqc;+?5_GL zIal&ep7c-IM+rof5qV(0iWhGMXloFmP;GTmVcyF@{fYY^VE*s2 z9k>}k$iH9wmkGc}{u9{=$C3eRJ;C~J19{1o6+aj#`EZB=Xea}!QA#;DYJ)^y-E~V1 z(v6n|1)i+Am$34R6cPdu1Y!BU1fxJW-~a05uOtY<590+Qypbz<`TZgpitJWwE3@}< zm&)gGuFJy1`qQSb7gWTG-bXl*7Y(7m5~A|o!D5)3L!mARgAI^8Xmectee!?LYNdvv4MP9vFxgAuOzaEhi{$I&X#)bosV*oU3nwdAPB=Eusi&3qQDUI|4kIA+Q;PT5Wu*`RlJSv za<$#GEz4O^L@4y$>Lh=qie>o4`2r7_4otg|j--&AMkcYHVmhzU-s{)vwklUqgBwz( zt0;^QC+7WLsuJ3T?B4x9_4u}8A0}&&*ChnGO1U&DE97wa`niv94f(ukXDcQ^%l9pU zlKDXds?C>;o!?#(e14{)5EItIPzEez6mVUMUhF=6ir|yyfiz;!#(T z9h>8x<7qX=eDrIKF-NrNA)=x zQB}?O!D}PGID**!eHRcQ%pLv?br5TYicd@P4W7b!T2qWnH4!}S*VfpuN>7>cnsoP3 zqV~g5I4BO6dk4MdGrQq62Y-mVcZ^F^W{Hz3vf}~ZtsYk^0m@e+G)%ps1 zy+{>t3~wi3zuvEOt?)LN&v4llfyNK*=;!fWuzk**AvJ%k;PZJ*87FQuxw!sjf5N5r z`C7;+qKih|vocI*jE9`zuAu3XPug=w>D%(hoa?a>qU>?Lw9<9_(HRESTP4;~^c~j| zMr#9o(+}8G1eXv*4b=vP1%8NOoBG-LT_oAkmfVBo!ZCiD?EZ2*SL-*zzwsK-U@)!| zUisxhW0=pwFaxqcziv6eo3ZE%gcJX@0`iwU-G<4pETHi}vfixh7oPZ)+r?jMb<`Mm zfpbnaEaWAP{lXke+Pv_}L4@=FO#=krQ6Yb4A^qDffIwxUZdwBVzrRBud;mVs`WWzb zfyRJ2Kk~2vO}2$YoG$xMJSLpQ@U zC4LI&m2Q5#bE?dZYniJ)8m;h>p*7iwLjoanN6Tw}&{5N}l?K@6{PFKom7gx@-6Y@> zH@aOWcK9hR05;YBSfa3cCOM-j+Uyh{4#awzJf{Z(Z#5;7H@(y$HE?hStKtHw!R(DL zC11DwCZ{qB7`_^#qy`dH+gc^3fOSWCVAH1HmL|a>Qt(^(OP@soP&%$$-ylF`QvnAb zRK`Z$vLJc7HBEkGg>GK~UH(d3*}miHM>@3-V>LHaNlqak+$|N60hyIv#i?D9p>#_- zf2gHc`b2Z(q$)yX+~BEY&sEQxE;SLKvXkxKkP*Aaj2x>XX0#v|_?gZ6vJgG2;vI=C z&(jS~d_%^v^|d5_hYzhy6x8J* z+qwGLDo) z$Pn1y1N-Mq9T5|a!hc*q$w-TH>yR;T^^-ftk&?0Z>=nLYl_cTkNIBRZn!bwP_m!Wu zi91Lb8J?{TNV+~=rt{j9zh{cTC^~!J3(gWp%~w&48g%XE%m-_zS#rnS#igjSBIOgV z|K20_$>zu#^v{d_;e8|}#C4G-?5;kNgJpANs9KPSC*2dh#GR6L)+FtFw(-6m?qhf+ z?`Is`ZTgGw1l49L(5qqHpA!xWnvbtkDkDi%fvjw49_!e-%>AnQz+_!9hWk(UY6p!E z+IanaXB?~@>m?EV3H0OL+8MXJbthPIZko;^gR00;s&uQJ%(6>86hA3N`eB$5=% z2*4>%D^#LUnD$aw?n7v*KkB>%eG4bb;Qs{)lL7}|Hw+y~q^oiF5)NfVDl5dz;=F=k zciv4Et4+vV(^IdAMdb8F+v&XE<*;|~>Rlrb*7n7RU#OdMY#(ms>+F)1qG z^QOwE@vHaN5LsQ?c2lV=7Z+}YD`K~MA}QyNgXkB?$}iH!te0>GjX8=te{B`85yqAv zbtVUR7WADG*XxiQJ}ESO*HKy@ILrxqQFvOa#B=POMYM@G(CcPV zFG-eY_0UwpS)Rq=`UZ$|6BniET|swi3G@@-<7B&mZ8n2jgy>~qX>>6c2CC`^JO}5j zCMmavv&w!;BH=7)K*1DIG?1iGkQ3WqZ@dz>*w0&M!h1uTM%%8uI;`-lzkP|wvV`u_@>kDiVys17lGUg0cs*TrLDD?x3@slmk(C?)-_23U z=(@$bd3BlgyF(JiyJ$WjxRb@QR5th`?TeNtv3jzbjiEpj?xD?VU3|!e-|(-+kp;?= z-nbNxf|t`@1;81gXv5h>co~1~pDf$@_$vDQYQiOv&5!g4+m?NBGo|uO9;Y(6hyGUh z$K^+={YkzbPR1FsgNc~t@}$#33CIzJq)Z^4-Q)aR*zPVIi8$B&o@%K4hOvrovvG*$ zYJR<1ho_wd1E+9M5s3h(4bW{2S2J=BV#OE|3@1ofaGU=3^ThEIj4@DV> z;1?O>m9^<)*seLVVk5!r4Tj!l{QeqbdGtP&YEJzKx2!%Sj(ICSj*y?cSQx(}fl!UC z7D$9KTt}O1fRFcfPCVSkE({#9)to`K>&DghDL4CyUoK`Y*8` z+q($bYw4~{=g*|+e-4(fx1B*@?jbh)q#t}+QC<8fn+!;Zy{hFo&XetW1RsL*4#OL-$6 ztyqrAu>}oT{BC##9X_r$mQ`hngn+M7oggJ~?%VGqH?SP4TWGXa?>DSxz7oq(%3ifp zZNE5cVqDF5D500cElADhO3Lx%l|ILLnJLH$H#svPJ*@d!7FjhOjJoO2vsnTU+wYi@ z6&U&9B>A_xcS|5qXFlceoXxuSA*t15)+ZRhUJBsA{$h0o$kb*0aH4(X*ZbXfBD?wQ zrm$#9hwi-#7KEaIAEy5_Hkody<@ipfiJ8c$yHoacK~vwjL8?@XV=_j|-_{nVpecbS zxwcV0R==xQ?LPHFJWc>ZG^$fRq*#CWi)|yn{v~BLIOt46xfpMyaCpPdCN(lL#r@#*D!Zj}B!6yB+%dPUR%A}G9_NcFtBiW8c1^XC zmfm+1nH;qNe?nV8)fsMOjvuShP_pBHE!d|XqCi{R#2ZwQDv=%7N?xp+@BW$z);T^? z*G?dZ;wAh;c+oOL5UI^kWKnp(VvFkw4xYEtk)^#xFmv#&Gi2ZsW_x+92pVwyylrCt z-KaWw2?6nNUbuid%r<~e5dH+5Z~p7B7XM<(qG+He5y5{W&=+aKPzX@q*f5{;?r+H4 z3^<}vyuqO??8mN&tY<2R`F6vn)^NS&d!@w0v(`r=NH$ew#mO3`l|+#zpB~SFk&|0o zuy*m&uTO+c*^-H)P4s~h`G+n%H#sW%b{Fn7QbMYPP%hsY*O6)!Qgl`E8Hv76Zqa{G0euHu2K% z*i@48Shr%a4WT2hchs$Xb6RWoSD(xez;hx3ChZd6GrFT}Q@DW{q4xIMw{gDXM~gpGzP0<@hZk2Fg!lQrHd1sa(?L}TwwI07yODa5A{~_V}@$Z~( zx)${V@nev}IMf^hq8d^|)?Jti#N1Q{Vk(JBv+B2T4Ke~xu_J26ofA$Wt3!3^cS@p2 zo6es=h_cek3Qm#jP$})Yz@D!y3up&1%nfL@Qm;m)!A01}{p*wF1!ny)TLdP0CE-Z7WxwbS8r**IKfbY_py;|4M)Ja3r@KAPRge2VdSSll z^nJ4u5seJP9YCSkW?D26p1IktbH1XrjF~&;TlSh;RAmqE7FgHp@%Z_i(My27xj8n* zcNWNT=@O`@9Nh)hb%uCCPnANoYQB`Rd3R3Q<&K1HD2BT|w40|tKmQmpz!3IYi0^nq z0GIERIQePpB5K(E$w@1yhr6*aa~nM0M6P(F{;u&8aW8X{h6p8^Y;^1Bb_p7tWOti; zS0Bp$J~xy8qcDk8m^?uaiQ!G>J_l1K$16N~rt6Y%*cAV_E2&`FaIQ+dt?kaYRj0O( zM4_D_<9gFFptVjdFIHIRz1(d5B+ddD%>UAg$Qth+jV2AZ4WAI>HUi#j*V8mxtLNvs z?Ok`#w{pm{K8!d=yv@AR{Q*;mR>ZqLA=M@&6H(T{UDb%7b`# zubuF=gUdp>ke-A(`Y6~;ne;&KS^I0`Nv0A@73`I%aYC9{TWh_`&~DCHP*9bwz=)k! z&2My#TNr$NQv*5~cx&O`x1mqQ@H zRT#>{daSaoWC)y|aFnQ;iYrtorL#Yw7qOkgmtNo%sTE10sWKLJ1#(n(T!Di~6k>|j z{b;w}l8IKLyC!@51>bZZ?|m|8OS~hZ-q}4_S7QJbBi`K`yJNFSZZ3^7$yK4U{?8_W zkFYo$*Kl}jGUi$Pu0UBjtLu#Hnr%7d(P*x}lh41KU!=9zhM z+CN^$>^?t!!>dX9^Y(%IdZ_MEXz3#C0_PzE?428TDl|)w0m}#>+3o%-9C`)~Z{zT) za*R1JCmX6;qf6D1ZMsR>Lf>{pI#wXdu*uKR1APYB{lpeIcQtYs9g&bS#HUg_8t*41 z<+U^N!xC0Aql(YztjTx9U0`U|H2&+D_r+(3-QWx&d*Yv2J=~ zJIA*#Neolii;{G@$5UoQL{C`h#E87tT0-OA2J=erz~1CC>a z>ZNYlb2Qg27fVgs@#k@Ln@d+t-IYm9)jDN*cdW^8rk!v=>hZsbtJ685@h!;@#^}-+ zbsALBFXuT5@oAa(9Y1|Q==t&W(vneA9fyZ$Sn*^#CdSHKTreOj5RTyY7`}bINb~r!67g7SE$Q$hZVZ8c*hso?sAbUJtJbTO;KM94*pp~B|$$Vnu zLNp)^kBB}b5N{5!Zmuzpi4M@?hJ`^n~W=)3d93F;bN`Rvj!n3R*PsJ0RzVgk@!=%6s)3yv(u<;lJOQSYVD_1JI@6xBk3grD?r(F?e&YKV?}C%p-Y(t3CqRzqHXtZxI`oCA#2!U00jv@VJTVZn>H_ z-8y$jy`q6Hp{z$pz@I44u>Z+MY8qlrgR^uJh6L+t`qJxDg8LpdupsBz_WqJu1p;{O znzw~N70R*6rjspeZm zpkke_09vsTuHtTLVmG?Q$rAE6rcqAL&5jlC>?YyeGX+%amX$@Fx-Juyrs|n9@_WZL zx?={y&UM`c(I>!`LvjRKy;2;Fxr$lIwHI2|rqPSs-S7GEsu;G@Hcg5uUrllDi_rTL zwlYKi1Qb}4FMxy?GANs8PNTZJThg%#afJ-4F2F0=Z~e@vN9)7#eZZ$@MYM(xEHovm z#drjV$(TC4JzHZ52r59BuwOW~8>E7mt}-qddyn_=XA&VLq8k;CvRuM`LBn`1Qzh4= zY`c;XDo9aMUL;nT;j*=c86}?Xf_INZV20um>}>I=Z=*+uyfrlUn#&@+o1R}GAIhCx zX=dh!w7Xu(Xj;0G{-C_N>NIPDR`I}LmN80ugOzO=`^4DJm~{c7Dh>^vSbpey3}?EA z?tTb*W*mzN8CUk|Zd92N$W;G`R7jvnIBPJ$wsY}y%KECAs%@4exVxZxuq)y$P=xE{ zpCLr7v2vV=6o7pS$)H16)jk}bOKZRNA91jXQY>Vnq(}h?V=AXl*6IY@$BIk2`(Xjp zqXYmBt1)%*3fMYDv!gA0S0}9@GXuN6GN+I6@RWu?}Z7^-uv03@)KMe`L2cuuH2EOGLUZuEqTy zw|CzVRXxEK-p1yft!&LbSHxjN=0$_sPk^>l-~q_CWuML>`v;`{|1Jvsp-JHp#07yD z5Sk=-;ogarlVpFa>ZhN1o>fEw6tl0hwKOQ_8bcUqleR6v>&;ja)0X48vDG^2T4*@% zvh-%Xf8}^d01TFY6&-Dm`}P^WJZiNQCD};53&oAnjCJ6`srxMTbdM+dLp&HNQ(i4z zDy``GnIS#3l}t7P^aQO(w;snm20$di4rCxr)Q8a~-u|MMZ}Rk?%5YA6pvC$1oRIJw zxSUg}jv5cv%WJO(m((%WsFJs8K5b^)MO4kUaOF7$y5CynSO&Zurm;c1OC09yRs{pp zh_sq^wW%p9s5lY}ek6yy_9q~XS>RE4nRAGLSJ2FNVt=~Qp#QmN+lm~`ViI$jswujo z|AxamPE8u&jKf*ZHIj9(L8pa4Ufnu=OG!&fQ{-!m^BLFt#Ykc|_dU{BZLB|?_~17l zBHRo?`k;}trM$2~&8EMN=)gQ|f7E%bvhXD&UT0t$sG7Uoa1l~fUW|F)huH5}JvW{> zyKxg)IeU_te$aaNXm`Kq;h4|ZecOF)09-7#+7X+TzOo}`3US`zgu>3hB*zShCNE3Puhw2LKo@LDQ(r2GD(ers%)i()BN)7hiY7_ zQmh~X!f@4S9yP{l2fRK+-mCrPP8*2tvCd-g{k1z8w4 zqVok|;?Z9lj0Ps@N#j903$(RRVUSCJ#=i6NbiKbN89|dfuT`A1G5^(?7o73Q}l5mOFbikyHIA z!sF%BefN`eDp;5XZC4yZ%}%m?Reb-1f4%r}e^b;iD$Y zAHW{x5+>dCZ{tPM2}8`rvI4LkU+Djb_{=mi=TGv-_WbWUDL@aL_36z2lczz3G6{5k z!2i*&063%xz~k69U&nL(dq5|YS8>++?o0Tos^7fER#yk5MLyC=V9@k5(s$B~C)|%Q zLT-J?MYf1MqFwGk8+i`7HtVAX7al28zRUReC(VGVTo@EZ1zuTx>~k`W3%tg`A|) zSC2Uc<8o=NHy!TUDw@VKOsKU;y#Av-62J$8DUV8wjIqk8E9*8Ra#F)o*yhMXWj43D zvq)qhi~s%TP@-0n<|_Ler^ipHAEkMx3L+PQOLf;NgX(p6p%VsSn!eK@jVLC2(@C5q z>jICQ`Kx&t0|=Oh%f3tRq~D&S#lmydB6}B*xkgj6UThn%T>e?d+N25Icd>M0 zf!)VX+4`x%xOC~?0t92QH(i&x!ledP4permc~*{YUf@l7d=o*J{x@OpUVUk=joLNAs$(qb>qzW8 z`ff4Uh`fYbT%8=bWWs?!*WX_mXBp4As)FwMrj#N3?|DGz9gu@D(T=U9n;GeYultO> zxdu@zTxb8rew(5mv##J$wLk6~#&~9Y_)QRE5IO7%CRCZ^naiErn{{Ck{7+0i3L1;G z(hX{n+rN~mI}xs`GwCJw)BQ!eW5%&sCKH*I6oM$#7+A0=d*+_Bc!9{m#^x+FUX{^X zBp%{)OLm0!GNGwR_Mb-2nHcbzK>_PB@7^DHzVqBYZPr|B%uo^o#P zv>?l6m4Mbx`+QaZT;$q?dT37xAlQ;ub!!4*S^a)B`T09CpvIFJ8_z7t16H{XJfVDEXGfqFa7XFGuTFYtu;DRfzK1ZLR5$ImbRg_i$I%n1;S0@R(P zpa_*hePaAyQimWEDi7%Q`UG7T{=`wUp+{n~0l8(20?y-_mF)4u$O;jG@}q`8_zF8G4|xQuiO0-JjWcoz^P0dE81B!EWASNRf7 z(f<}2&HSIC(LG9TBVwez3cqb(@X2v##)c7=!Hpfwrj=FvrXxhmn*HcClP`L9{jclCuTBbhckCxowL1WNKLQ%p zeJXAvZ`Hz+vPY3)Vb7582}^H!s4&ds}2T{&_%kpR&Mmriww1#cn+> z(J~#?wSGblPKABdq_w1wAq^0gsQ{Rp9WN4KJV}DYHDnYK83TTCt`9FKqkYYZ)SGV4 zkvdS&Nx&~B_ytH(O(2TwO9QcDK*MH6S{zreAxaA5(oCr_wYl;`G5>9E{xP3Ox#Xp{zWu}x1uwcS;u3D3m?fUXY6vXq;07<+VCXp=DcSoem zs_g{^n)lDII26+)uRrfdpe8Yvc&tz_C%?Dz^}+>u-GKr&im+xvRm!0f5V8UBJBw4v zh(u)zCOql=CaI4%{Q)zoLWE4J7ea0qw;4~)!JzNoUp3dq^XbY6;eaajYsP2dXwZ2eW6Nuy;o1|xc=HdO_+l5sS9L%wb87pq~ z(xq>$C-Gg}v3i;2M>CEmZEb1Hpu(_qgHz;!a&{lSH7K#^N0sw=$&CfsSi#wt*(~C- zY*$5fLArGO1cKo0jhy{7b5S=ofwV26vn8ym6>iXyKNC5lTd<6aF_{(dAr<2 zL4oaE10q+kz($Z+rq>5(pj50lcPOM`^r3KuSS-R_!+96QGKN+P@xrLR>xd5&DG z(#r@53{rCT-iryIFKD9D@hUxz?b-S^xV2aFw6YMa>uFLQj?~>l{ z4~#6ZasX+SR0$1*K{@(rVTwS=a<^N)HGyU!4jSg{;SY(86yQ)~%Iufo)~s9gw^ff6 z$xI9eLZlvaNHdAjcZgl);N)RO~@%1rhZ-epT>EBWlw8HKopo5}Sp)ZEkOOag@;M$XlFSD$qYHfXKDa zW;>*?KZA$KTz0IXw-a8cy;BjN_wK2!UF?17l35H`>45b;VCs=T1FJtKGPLPS@>EeF zvgNU|sp6(P=0d<(K^M+^U%)OGc0+KaI=eS1o^?segS{e15MnHgry(GxFEB|Qa=??=vfsp zd6ewSWf5$-pn;n8tZ;dZt^6|SUdASQZRSe#Nxs2n<0gZUqGS7CBzi&Xt2(u3omcw5 zAQ<~0$IrY~_sXD1u>K)P_$QXu*!fvd3I0i+`(k&}+Ovd;IekLYdf~#&CnAd8e1EqR z?bmHiteXw!t}kqMBOHVg6SNl*@!Rb3dPc-Pzp0sLa5o(zn>qa$a+4ynj17;<)z4S6 zY}otsTX>PZ(tGA}({1Ud@j)ut;pg(c$D@ti{1|p6)0v~xiV5NS73^8^l&z1MjBs&2gz-BG>iLMCv(fwekacv z{a}}2jq5jEKz!@Njs#|S(S#?bnVo>PIaQ0c|A3uC8}pz-8W7QdN3_V7{uFR%Sf8A> zYLs7OIpC?RQGuI`>FiX3nks(jVUo1 zEp|FRLwMWcTuO?8-?K&5`%qU_qJ&C6rX>NH^(PZ2-pJ2CEtC)T{bCv~82<6RjPi5v z%I%koy{`4JewL{y35+`X5_Ggp;03~6H})x!&Qk%@q#Bu5RtU#45q?ctSfvPp+=)#U z>3JIh290EWEY~@!twh$Di^o!|APY3)u9fdm`t)P_zT{38x)e-uF!$kS_Mx}oPgn?K z9brcJ$2H)Xr-`)nYQANBJ+QX1E!NDitFKNy<_<1Al?s}=673qq`CJ82;}kOxrs~BM zdsn|pNI2Y~l)#yJ>cCbdqWJQ((nD`qiF(Quf>AQhV$Lni@}l2(n>Dc*Uc_*#u_p3^ z2tQ(#A-DTP(mJO0hf=cU7pn}E!QwT=K&00TuO%_8ytuq?Vxi}CN?xEWgyUU`^>U_o zcs5Ry&7cU9@(5F@p9t|X4@rH@kp9H{Y}Qbc+dOlBf1!jT{f6jx0W#<0z8QUdSI&!q z1|_}msThGf^t1&n$urMeRPg2cZ(G9ZY>{7rg3Br8BoNBG#$#6)$ zI`jz^xBoDf+OLMBC-4r1pU+)%yj#G^ASfbI2b19EZ(!;Q*dl6rdO|hO-2T@PGR}IW zPqOrO2Xo(u-cKDeK76FHBSc%UED}tpA7J|$m!di66b11(9Y&i&wqm0Ciu8=@3)pB6 zo^ne>R4fX6g%PECT@iX4gkGBYJ)PtQz>jOAFuc3B0Ld4yh?xZ#!Nkl5L*)Kud`?hl@M~6Z<~O3`Fr{k;EBjSqcFfe+UGq`oduPtXIXH6 zdCuN1$o_X&0YEKYG|yz+Ttgv;$;14g0L1eTxUh%jRljsHe$-EW0@DmU-gTzWALUIb zdD<9?qa^L;bay=9TT#Kok_Fdy_tX&J) zl9UO(kt^+3>X*wSF*oy}OP7>mF8lE^#|leyAvgv5kI2G6_k0%@QZpf_>AT#ijD5mR zIn3m+i%sl}u|LscPa@~P{O|m1q?Z3bes&Gj{}n%5b)EFEQI4V?p3O~xmWltgCEwk^ z52PBmiU>e!%dgUnkd0HJPPjs{^@NC&XGQT!E%7QfjstEFt`pHv&u#9Rh&b3`G}4q38mW4fVD$ zS$S>D(nnsioiS>^+I$5ZP9}MsD;?t9E6vLxJq1u>oXQRPgE-)arOy@m5~`P%Q9Fzjc^Jveklbix=D`Xi@j91~}szly5)%%aL#)1>PQ2$8jFQo1!M6i?izu#47RnyHFt@B_IkR z2T+O)@ssCPfnUSJV-Iaf>swlOt|n_xCUX(f8ST;0f!W>>Rp!y3tLOT*JrE(bJDj|Hui9@8%<=>nN^vWyTl^>0CIkde*;JZ z50wQ5?5LH3AN}_yrsOR*SOOG736h8c46yR3iZ(c2;QrPs%@xHDMP6k-XY#qUG_l~& z{$SSTBw>EWI!IisT2hY-k1>`6H67wDyvKm|*+g|UVX2`-caQ_YFJG@gB1~{nx+yZT z@3mW3xlV5ll$XtDSBM=^;to*EZ%AG%C;z&6qeg9DtjGnklhM7oDj@}*1Co%k zdzW;3utxa3ln4kx-zkf0fju<~t4bsgY@k~ZAh80_soL7zq9CMA`YOGX^5`?*v3dEr z&`R6yOdLO;Ild6I1LyURR|lIB95H^V{zK;qT2m_@wrh%50mCJi!A;&lgIu@8{h)Ta zgO|`mywp6Jr8dtE>6&lx>QslJIT2TtNkNmv=y*l9)bTZDmt}oVQcQL~D#rdA{0PG$ z?aqfHZCwk%gdi@!dI<#8K0{F!(MgB(485C11FkLy76f1B(t0TO0K!SV6!SpxED()_ z#T~cacg&=qzfAsJV82z-|d+sL)OWRxpSO&62>vl7oU znuO)gl>@)E^-<~MGV9fg(A!uVZgFD1aMr`VU4PXd48Kw5uQTA2t>K5WG#DAF9F=V& zF*<8k3#x|*<+${TbA>Pt8309cKR!n(QoX9LWUukKP(Ew z*{0t0i>MJwIw#2C)|FDaKVh~VCHpd$tq(AHer5yPqW^}CheCZ=)TmIx1<&%_av>r< zMV5pJm15N=+=>Hn>(9O^yG)lBHf|ywOqysCb`2xDHuXm%ci=RVHwxINlndNdDG{)N zsAnY#sev7VrT&E-yP|#g)#%ZZ;w+rv!H%jE&{$kkFE&X3h58$nVZ!DnZUN<=vKs9` z7!IvIbdZ6DbcEEh*Wi#Az&&1zHt2ZSQS03-@-6DPu;H0>PKICYe3wNm17v$Q;`J1A z>n5c%_NTen=C!~DYD1U;SDNdjNlJw=5O7ICLZV6EaKBMuCv5-v`vG01=%Tc)@x3ow zbG_GB44q#->ybX!K&vk68!*Fn(JY6FXOEvcM&)A4kFrO@JzAJlJh(=SG+3vMXX)|c zV}e>C<-vD*Y8Odjl%&4bTa64<1#jm>R86wT?}(bC;pNIjmo)A5hkJDd&?OYvc-X33 zK80EK(HK6D%@GB(X3tya3+I_5!iD;tVfm&?*U2lF2S5~l+5M{hSTK8&?vkNwnMysh zJwUJXX?1eg`EE2E#q`P0yQ#~gflB5k^i73BOYbp2+qp#V#0H}vQnF&I|3fhokJKw} zTteMscSMCXMjLtcE)#SMLM~iNd^`P=#4Nm$EL+;ls^z>B$$wZtZpLigw4)+#?gIsO z-d?D>KsD%|Bu5fR{(hTMU(A`Pp}xjAEHA!=6sYMQQL!3UX%V(BXgG03vbo2ql24vp zcwDkpT!gMQTrJLkKOrQUNHkuN&S^jTQrIKptQ`>nFq@^Ixn~sgbSetsc-XxbXB2Qd zF$3|tmeL0)uQ%l>WM(w1K-a0pwOVzn@Y&qaKC|J0Sd3q3Ycvto)bff+shcI~8Fp;( zt+@Ipnp}y@KCFD@SrfGO#yTHI5yGqE9adgw5L(X#jk@+HRZ7ybU60cAXCsgTn!Cv< zoy_q2>%k#zo*1e(M*0Xjwo38??vW*+txCfg3B;F(9AyLH_$mUn&53;vWCEm!;g&#J zMpCB!*_L((dCzMm?h`SIewXHTfQ#U8zq2z8t51Zf8LRO4DZ7qL{A$k6k0AG-R1p z@B8vt!GNjenNPmqLJgxqiEFCG{hR!&Aiu@dNSW}!N2POS5qv98caf4y>P-ord2b3HR?D#I7aSEm>zwS(y6yw9VT`AK z+2WX0#!UtY>YYGYhfzetj-d!G$R$k zQVHn}CSqmdjtJ{%o#(hx2&Hy$;EeI<<~x&45T{YInqQ^j*B`y**LThFk zBwRP3knux>Sk`1Ys5=G2i&#RY@=0II1aRYpjiUp^cscNldo<1`d$q;o6`ROsW)U~$ z5|FYD0Y;gZO!luv4)@%cS%O1mD3_!UUNG){WSr%-?I`4{4BG9&%)@JQE2Ird_A8Up zr$HT%fHn7vfbT_J&vuhNHYU}i8>!V#SM$UVRHEZ3$fJAn;_{n3b}n%&o$SO0Iwz(! zZfc!!x(Z~s=RvbeixR1f->aXoiE7bPHeMm{TX3q4%4SKQH#6{`??8jT z8e$6Xr_*|~DUMvJ7g$rHv~bitXB0O2%j%;zXts(@vb_%qch1F~hXoy%6Z%LLqyTka z!&GUG{N2f)<&5GJpYm32v0K!Wxag*oZ;FAv-1!5~HKCPqLz|+CT&?m@V)+k}#FPSF zS*>gZ4*eLy&5$qvKVONYsra1_cS0#*dG|c@?xOfL$<&Q~N3Z+%%{OHrjURO7G8XON z<`*{al3ZT-P_4duCy}dZoz(rnH#6i$Nukof zT@P`kue#r2gbgFc2p%fDnG*PmZ*h@SnIWHq%u+#-?m1M_fMAW&{mU1$1695LCfReO z_KA`jpKZ(HEZf{o#ITXb>5gKmUlmc6I~RZaA$Fm(pl-iLXfnhM7%;hKp6pxOvbOSD zxu0Gw<&A@9G#c+j;%}1j3s_8sx?;GcXLzIYH9Rsn5G*slnvT0jcFcwkncZy|Otc&N z@9_VWGZ~8pbwt7W%`fLn#9I}LTw}(QT4E^#j#BP^?4nttGq!z#0qT;pR|{7t=yz1( zrnI*flfDpDSk0zOLv}ImqUz1JOY1qrWm0f^#vTu-?wECv1-(}2mqC!K^don_H)n4#l>zLB>c;A5~QNbgxb$PaJ&-J0X@fS_r+2L{B3gpsIPho_cwS)fczTp z{43GL=-q%oP9zSM8 z$^QlI#{sIzl*^A0=|}565f%9FhFui{7-%Pu*!>3if1$|(SNVYgtq7yO`Yo4u>5%Wy zVE-mVQ0r@OrAxl=&;Cp25Yjwa)g-|*x)iMI=5X*vCW{0|l22`w<< zu%iDGLu3GAh1r=Wyv%Lh&yNm3D!F_U>JwX_Ey9xNJcoN*ML*!CSxV)M{8(5nYZ-v@ zKTz}pIY1evI&`-#-uKqdMrw3e)-ZL@1N`Q z{VnhyVqx51!n>(1PL&WGAb*?rc{(ic=fhLRL~mF-TIV9U&9(BPk2~^>e`yp@IYr>K z8H;rma0a8M%ilsf$Y@Vru^9kur*dych4xp^8OSNHaR&^zuH6J3$&?>iXA06fX4(K-M^?^;e z$cgvk9P?DojrvpJhS?*C?mH#Dn?oUF8Nd?$5EOQT0WAP3ccm+CaMdNYlUr6=W6^L} z4WO^Wa26VB%|@vp9&43-`T4~=4=3jJX3DG*sxFy?NwaRZsI+Sbo%x>4+%pV)%A5BP zQl{M5sCUhrRp;J~WWbIG?JMsOsKD#X8V;mb{7@Y3EyD7bf>9y6%!LoB+PAg0ie$_W zpT4{xRVRyelUK&&HEz@fOrnCUn~p>EyCK8U`TMRNMv<~lcb(^KsY;~$G&9u-m51U( zmVGJ1wAw{`5{uxxVr2S%aEuX@s&nsBWTQ6x0#84Psr1@7flxuodLG3!a%*JKx>h|= zrf~WX@giVep-*9Ff#u-x$3je`$;C(?>;9^N629_s*f7Ew7DpA&no3uZLIo_q>ehvM zOeB8#3K)+gd)2~1MFvyY&6@yRGP=5P7&fZ%5Ij3JBB^gp+2ZUmIi3fGx0cIewKL3a zJ8lnvm+_qmtis$v%Uqg9?r z@>G(F2zvFkI(dC%ysI?ki4SrA_!|;uQ2xfJqHL0uM*wBTs+o?U=n6-V{KJH->VIQ! z;Jtyd{mg#vKo=>6@$oFVe3C@6S55PkR!S7bqqqbh7XZazCsyjBPE=0_0MZV~BL~Xl z*`U)}49kXx)S-9zlPT5w;c_sna(xUpL5#JTOrLYXd31)xe{)YoATf@^ zXZ%|#+r$WFb8XhY9Ur~FDPvXp^jNbCpzsj_%>{83Z+yp!YK!51_3IC@kFOOUI1F)9 zT3tezy5t6Xx@Y|3PbI=Wo$ESNS7e6$a)pWR$1-JjG}B75>;0r2n1RNL&-ZY^D4kuP z2n30QT)1Zy{}voss7yz%MQE(08S^358=+xp|Wk67H1*W| z4XFbrV)_14$j7wk+20)rI{-S|7L?W-bq6Q9Ca`1O%mAyN^|^Z>G?G@-4+uq%ax`8M zf1ppp7gTx{!^=nU(mN53kEjy*ZjO~oC@X!9b!P!0%JtKm|^sHnD{)i++`~#aMYovPRMM1^~A7 zK)X@S*qlgqG`*SCTNAd|0ffC#26ai)TTPpg(w^VNFu2s`VK^`IiAbT6O)(ZTz0?op z8P#X1!$7KkcEsE^zyZ};UP@-WmMN*QI3$W**p^r%K(;e+}Bq(z{Qx%ezZ(zIPXM+LlqlMzXa09 z-OT>RMq}^=D0-9EQ;HiTmB2Id84+;!DVYW)=~(2t2w#%8|*!$>teGr=s=+ z=OV2dy(*OupYSEDnzWXm%5^v3DDnr&*sMuz@Haw-D8UMJEn6!QPFuzAlIspg5@|;a zxRom}h@n7}RGM@pXn%3Evg=A+Q4ssOq{d4m5CxS-nMiP>K1F>O7mIF4<}(>NO;lB; zUZaD6iqd7ixEi~#st9P^4Io~35Lt&vtttZiUK^j0z7YWUUC5C<8|q|!EgoELvveY# z(>vuC99%#HxZdli3Yvoyg43i^iDnh-4wBAF0eaVCvTBz`@(H=zpi;|ETgduhvlmuRr z%U$yt&zb;)&tp^j{4$haoh14pNoFZ2lMxNN)Mdi1A3>t%f3R&n66h?`&rirYomlBS)#c(!JjJF zQXIC&xT=qv6dz2=p7k^$1JKYQV0^TiCfL-6dkv;+BRLWRa3_Gsow4~^b>ZvvJ5pTK z^HOPS6Z22Ur9}lKu8?_5bfz`BGXr!carGF=)ACZi)(@I3%#yBB*hXcW5oMyxaju)| zKYv$BU?(yDnD&NL&026z$Elhnoa^GY%U9SP6~pXml4}I~+4ckM9!(>;-|FrfgFxk+ zkDOMobD)KfU|JT5idfzFSkKOP#|mPjYP@m;yT6>(7uehzV)P;B&#mO-1g4lTlAyng zy)lvKpGYOfC1s^uIXwn)Dh)Hef|!<+vPMyUjRwAtAHoF__)hEFt!pkF6QN_h$?sJ) z2~of_1~NvXgA~19E)E)*5gaxR)cY|A}&yTazk} zWeQj>TJG;94^?a4HWBtH%Y*D^57B1p6#ahSG0BH6$P}&*bq+08ii?v&lS}T&`r>Ft zT~jEu1o~1LW!2nCo$^Db42;5=&$$am`#@cp#hhhFqN{caMQKl9YAU1&zv)Mpbap^@ z=@7ok!6U)Qxx(f(s&G~{7PjwJ4%U}(Arx4OyYszU%{7d3SwE@LPxMu@Yj&FZdT?}| z&lmuVmtYqn=`7IdVmcVj6Rtq`dVT!kkAy-tqR8|Qr(DrMnE1BUx-mYH%aR?zwuNTX znyRO{Z=^g#B4d&OAsT`wFv`5CRHdpZA3)G{pY2dKu=(v%jeJ17B+ZN>i+o?>1)QtH4jMpK_kKm;-jOv&uIuc6=ZdwD|x zmr*s??qTke#;R_eWh=%mPXEf9;6rx@>&Z+1U6mis_=U2Mq-Wrgt-u#k#wbEOW-%Y- zQpxBpg|Q1 zT{u#ARi?liN!Tw2UjDU*`9%Pmx~je;25I3*I^4f9m3#zI(8Y4Yhx&nPs7^HTQ+w!o z_w?A;gP97~#aNA*B(ns~Ik(HW8&R2dDH!g@Q0A9Z;1=SGrZKWhw(ELZFGpXo;NiIb z?)VjCyO~yUH=WgSWEPHx>zICy{qrr?0dTKf85nU|AC3u=yFv2``UDgwlb-eb0PY!-yqcz@d8$`71PIt(Je0)d154Ukz_b($gIi>=b= zcPJxmc{|5A>CgVxph<)QegkSKImSm&Xr`2G(%ksD?n7s#b*8k5z!?oGiF-5hN5+lW z118k-1z?45S07t0bME~zx$W?Y|KTjRxe)hxcre8iz90KJO90e-;#>XW^#tcr*r=`h zP_N@WbhPt4W6Ym&tiK1C9=#p@O-uk`7TROTVo;OBpL@#on3uUXYf$ODBQYIKWs-VM z>uLkNj)7J$@z?1G(nqhu3mDLVMJdi9gU_z#g6IRF#t$X1>LuFg@5QIP-Uj{V(i@>H(lT(&Wa)C+t53pm^B zJ5SmyH5W1Kr_M$F=kyJG?N9ODYEDmQ#?;p~?Kc+W8v3l_OcV|3LHRd?8Xh;zj&rKi zrbBrbbKMpT=tB)k=b6_ls~OHLX7H-InjR+3k&(w0K9);%*pKAaVT^i>vDOL+HD&Y6 zEJ@t0oK15Y`q@iM)nE76G61rAoayt~O&tdbCWQIV{xGV8F1PumPjEvYTVGLMioWi5 z)J3WL#i0OC?TGVg>-1BZ^DBHC&8C+E8Nd3NAQd%33AgKtL2zRQH6dwHtlc6iAzO`? zs2*!R^pIkglsGYh-Ha?QJ;6Nu6)mpc+;$L=t3W@e(0({m(`a`fs z@TNon?~k1Qt4!Y;{uX3FYu(fZZfJZUJyF%KBJZ^w8Bn*zh!%lNri&)O+eh0@0ONTg zbP}_u?xXUM$7$S&a3vvQH7F1wokeCZ%};OpcT@)+Y9*z)3Q4C`#|b+V5-HT@xeVi) z9o{Zf8(p|R;HJ#(r5gybh^6BFTz%ctYiILerfnw{{W#n5Yjlwa9^_#@bG^_fIOVWl z+yebVnXMDA1gOJ^tWZa_#0*!rD(}loiwB=HXCjl=C^={`8&Cg=SrcZ2^{e!oq7Ms` z6|6Wc2;UWqWbQm}Y}4?rLk#CO8YjV3_$zIFy=D+ZzW^N~6Wp{=ay znbd{38J6Tydi2#3Ms@O`DCTH!|9o-&^X zL1~W4i8cvCUxim<`2=?k*>Mc10xD26h=XMKT4lcND_I+<&ztct`uaBZQtLcX9FEu| z>xiVqKjOpo`bSa3>Zx@@Y$iR37qeC1o?}Hg9=_lep4nu*Mn6X&5Z5`dR3j&sZsixOS zPL|mJ9qrN{l!7@qS2a+i7`RhStsV<;DUUqwA%tsBvsB|wN35#}QMh zvad+R3i=dZ-S2Yfd`5vIABb6i@b0M#7uLpg1RlQ_WGn?w?tJ|kV|EwJX6+2r6#XK^ zB_y=0j@|xqMp4mLOTcrR1BLM!D%TFh!2o|6pJ+t_U<@|f;D$%nJG@TXGon>WU}gl5 z4kd&xFuiDcH>G%*EUU@fWa}-~&fh!gk4KEgVB{fY-dEXb_8qGLjwJWlxSRK7ub#Bl ziE0dztMWO2F5Lt`PCuBvT1oV3x$20UrZhqQZQqN!^<#vQQ;%~#?g4@DEx9xXy{Ola z8@8`bDs50lF|`Ih3By`sdi%YSMh}#34xn!;pN5JO_VO*27)7LU6TYuMa9y?&?iLTH zay3+$n$6ZXq%GXvWaWiV_LY}6PwrmcXVc7xg~0_QOzm&Lui78enJ`jUJ4R<{7%_m8 z@mRgMhn$~<*$95Gzmp8RRuyPATG3OMR;-E%_9O?ND3Kkza6}?e?cU<5wlt+&m{EFi zHg#JcthD;=9Rk!qNxWXHi`>TXixq60qgM;NgG}I4c5WlP(V@=KHaUxfTAwH&5mEGF z;Vme&sactQb#R}<-|akR{doqvR_K?xpfFQNoT7@tx_8PBv+aD0I>eUu`Vh$Ioile| z=p3vNFo-JbNoDL!@~6yU>|z%ZzE2DS90-spHzUZTXzSCb*9ogr&9OAPTqJ^v*#^w? zY}gp$N`w9(@l8%32-xli)i!aOJvc}iVkUU0BCw*}$r`;1l(EW#q**#%lF9D$2>sV)5pR_<`rPJ&Oym@7!n7c$f;gT-!ShO3Y+i zOQ{-o*4pH6C&Ry4D_~?=k$=^`=nvS)k>?v_{Pg1RBio7le?D>=#rPoAar*RDNOg;_d>$6>deM+zd{+uWO*!3 z%M$HFg>T;36_Wzo8fsLhX<=Nkl%6iF3}JBK8c)}7PaQKv4xRUv?{V2-3e@(P*)XYF zq+Bu^vDtnE96Mif66LqN4zi7+pN=HT&uNZ(VKx=#5t5E~tF)&2karMv>W7cT4NKoA5BQDk8|%&e%ZxCTc61wA++h&e1pwQ&5mfh! z>e7j>@Ttgq6O9_4vNMId4atTz@LFTk*XzD8uxI^_Vb%TYbt8hNRBGDvc~pIPT~*NQ z?(&?*&naKA6mr4Im}4^g6s(yYdnMH$32N@i&J>nnCNy)gBhGm`w{?gY*!T)e2`kU` z-S|DiWreasISCnAtH?K5s!!k;_x+9b3K3%}jPR=QichinQ{s|E%`$~!=w*4&cd|*- ztL7qkFt~Qd-*F2^tYZiqj7G}4win0+-F0I7?U4NX{yBAVa9a&mtNTf$zGiEx3Wa~p z^_?`6hA#0qz3XpYmbrJj0LwzId5XJjIB7xx1Cgz5s+=0Ah%^9o2l8$8mHaeqx!-Mk zVxc-K$yC!Aq2o{$d~iDGzFKO&-O63E%%65TyuJbBsf$%RfX@!N$uIo1`KcHOfkDi&?L94VUcd$Lep0_%!t0}hUo>#p?cjJ*@I$+0+ruOcIV z{_-s({w8utN{_}>W)!0|_C~hYan1SaXG-NP6ub!1yXOqiET)fo1a{)<_SDzwaEn;C5~K1@ib_TjeEnI8<4$7-A; z-eWr?uZ#QHWSGMXwwt8Gq&gAY+g{J+mh@9eQ_fH-Gxu`WqdUe*bB)zcv95WCid zN+IliZrpd)dvX214#0HcHbk#CQQdXdW#?E?oND7G-GI_KK{09d`-5%%_m_pqv8Q+r zrK=HHzyj`GB}r2Int&-Vy%>jL$w^a`o<=yXVP~l(8g(92$jMO z7oI#R?t@A4y3p85^Axo>Pa?v-+jS|IjBinKT_zaOod{R4RdX}J;NCOED$`VMgI}2` z8`I+5@6`tyY8+y@6efb4wgtZ{hsG8chrjyJIjp6w_eut}&ZEq*6+x~%e@h%L&rVvr zjvk4{mO_YZJc2CP;1$B$)oZ@oQmFrW$5d)F{9%1})*{*%|I9ZR?AEweT~#1snV?gZ zl{3-6$a-(s9f->^JRw7p-dT%&tA*>oL-0)%wMjWGYOGfxyYw(G3I(F(R~KmOCt#^H zs?kuW#Lif4XTZSrv?QTlWwUeWp|+aL;8ujn?NFDohV!s+!h21Y?bPq4=l9lg-zwf)1V=v z?3r20cO$|2`DO{lRl<3r6tmmGig2Gaen&Wc(6<@r6(^N%wdwirwa?ueRb$(_Py)8U z!UnHUeVm!9`0(SCcig7Bk=Y5@O|>0PrWjZ?3R7qSuURs(4uU(K9A2321jwxau4GMx zMS}EKVG5a1vz6F{Pg42OEqkvDHY#8y#pf$bp_9vHEv-G@6^fe{G5q#zXGF+rwl<3L zgPVL;jCbE+gK6Y5@1LkYH!_4f*Gg0sLXQVOrAtK$+~&unQOkf+ZzEf-bW<)1D)M@Q zt70#E9xx{y>|OEK5f$~z=BjUHQ2VXoymfEX685(J6&0YftQG_2R#MjA&#}~KX)64A z(5LhxC@?oTp#(Aci28a}bgpHtZr^hjf!8B1B`nJ$p#HOlc|(rJdGNH{NGl_nr-Q8z zjuZP9k35|I8{7jkUKH9cg*BBtmp~^GDuR%rUT73CYhAv`LDSD+D)D{jFETq#q5fK4 z`=(3p`*(R$jAuQy#jE%Y(W$>UEuBnoW16Rl@8^F%3ywh1#$<)7)opt}J|Sn2WI^}> z2IY^R+M@%Y1a)DoN&gi&_=9m>CkJ52xqWX=UW1 z)ugE>FM01nP0z4rnY~od!!y(Gx8#DQj6+x8{wk-(xRD?>6ionf&4MaT1aFY}ByI$|ZZ?KK`;X{*0)_PxEzQslvBFI8KAR6l=~iDa z<(F39U&3{JBWxVW-K$f0sw`ga)6&tzcas)o>^`Kbajqd-J4X&v1*4TeqC1hI(8%Zm zx!d`B+^jW*w|Q?f8DMk#X?C9*Evw(-7xu#KMv?cVWihajNK0xCgRYl~64ztIlG#-n zTOY#g=^k+G%Cry?;&|QTm6^u&J&WY2N&bQapMWce@{nhSmb8s*Vt0cy{WV~WgiK?$QjUu zVh`io`ss~>O@M&GgQk|1mVz=!>T?gdy)PQ>L#R)Y;Js2EK>ID^RW>$sXi$*0;&#{k1qU4n zAHj8?_?ET4s|dTrEeIgj<6<4k1ai+ZOzb(E{;7C#Wgvr9Yn%t<;C?HpG75+#Ab|S? zq-OB9R$D{fP~VhoX7)H+M0^+4&(qhs!eM~}gb-Jc8NVLOg+)J*Mw7<&>yrE`>LV3f zUV45)PRk@OX4Lj`X8g-IfOJPb#^Q+5yew8-l=7`=M^RGE*0jJOf9g{~AvYf=4oQ_Z z@$tn16867QSV0J#5GlmNp!jaX_Lr!ze`p6!ywl+>Ka}#=3#OrtG^!~Jo~#tfp!^rk z_`%zlXWHqA696rt{;Kg)l)ph~<6I~n<)ECEJr}gl=D48b!flnDLFAhhmXMcsHj#p4y+p%iF_?P*O8q`V>gSEYm-@Ia;v3_&^^ zb5PA^Ebm3fmh1Y-w=`x{*YRPveb@Ol-GPtve6g2|*uNSoKhgjtVd zNpIZuhddNDkhT|3Usm5Op&F{PDg`(!(BVusXtgNgG+hihA3T&a*AyX&1w4*9W-6Fv zhSIFm`rXl}n!KFB_}C@}%gS<3{d3`_*MR>G!4dG`11aYgPA zA{Y5jn;VwoR2cOVYZ|q=?j*ivjcfGYHY&==8`2hiy99 zFx<-z1aG|peKcgY^TKxCXhq%QKqyd0yyKZJA85t^#m;Qqev z=y+?Oxl#R)#0(Z(x;YWkT9dyIw5V%I_B=udz}LLESIe~<2Nn+(t!mF`^&r^yDIRw% zTBOSZp$Xs+T;nxQ$Gaxl9Q}R=CVVC76Fn_`%_{`D)1UN$dH0^qbOJ6D;qDBfsY)Fz zyjL?jVEi#sqzimPme5PF!uOz!E^^OUnP(oy@G3Od8qU7&TT$mUrCfLG5kQ1t(DCpD zrWz`n@y5C4_XqcVUUI>`jbfEF zl&rqctMDP!(^;iqO8Y~c3Y+_fJ7>N1D|agw57ls5tF^|{!{d_%&AVW=xmPGDSHIm` zwp?{PgXtGjs;U{S6%AcvmJ4`Y4#v|oJeC(pWgZS=@*bK*)cJ7LM-NWpoSi>Cn)9QGr@EoD#c2admSVGPOuk_dC(`&}p%lNa#<< z=n0HB98^98x5}>G0ROA#jlG2xC91ylwp~Ah%9vp>phOa;G;Az&rBi5|gA$&N^s)GM zmgVqPMs)}t3=&+U!z+u^SiqHKsdg7CE8*>&iKQKSmkDa9PLWP_+8(?$!I3GM2i^H1 zXV%+nm+G0xC=Ai=U!CIHR^!Dhe9Mv-1eemsSKn`$dCt^|2y$^&p=Le=G?&zVUPUsi z@u+r)W9MbqewTVp&z?3v6KnC_V#rPH*kI>2H2ZGYQ;or5-y8B$rm-?=yqdiw^s>|5 zoh#^$T1)+GmTvUn2#ikBDHa=768~@(6{M%~(LeZFqksMHb~;T2O_D0j%ds+0f&{Vz zH`JJ!ZTMXt{DkYrx+>VfIy9-bQCv8hPtkw*vy3|7cX0P+ zxd-KY+8#xO+ef2pnz)rs!!_!Yn9551!dz7e=Q(c8!4@;?(Rp)z7JH)%U7rnX)2u^d zd>CWosw=-Rlom9{N_(sh;t-$up>BJ&>{XxL0n|Ml!ePJaEcV2=d3~$0F&LYuU4esy zhqm%FkK_NL>ny{X?Bl*~f{27tN+SZ&B_ORJ9iuyx?rzu+=~hx2LAoSH!xZW69!QKD z9V5oJXIx&_{XEZ$`#5&+V#hglp8qrUtMBKViazHTvAl+>IHPcdimb#^Mc~1lMJ=(7 z&gXcNcY)1DGZW|GIzre5d4FP+#2jmR#}hIE;% zMNIq`3?;WEG%lF_s|AQ5RuM!oDnksKdnFKi)r}D==In!F2@}@e<9TJlZBr9PY=-qM z-WJ@$_(vNlZITfe>O`hT(b1wK0T)H76MmJumqP-gY=$O$g8Z%YOdmi(5sFpUXGycB{S@=$8>zA|eR*2)RG7 zys|>igB!lq;}+?VaGrDxic4^c=?Rv64LUx_^d%Z;%U7DZ3ba5aZv61v4kV1K{B4Ea zUuptwPl8Ib(W|Dqv=075#^(}}{{7PV=Ac=YkRo)V1x?`5`fq3P^Amf6J%c0JUpWnx zCe24**ZPk}M%qt~&5_BQY!X0BLEr%yFi^zZYaRe_p4a#g^Iie>tSWL4buKGDN>u9h55Lm)KgMpX! z>GMU2I&WPMu{WLWW?<*UluTL{nhj?Q-afE52@u|ZxX(%hg%P5XC*2@UK!En4=etLb zg0WLrSf;i17p&A+;J8ZtshpncX?UEjoxroyR=Jt*YN6tPriC}K?vmgp zBio#lMeU@kS$tWa%d;HJ$t>1`?B&hWY!I^?eJjZ)R|0NRo4-Utn=q`jz&>z{8-0%d zO%Y6Y&*1N9+B@2y4KpLgcrn?3p<(}@4+}QBC&k8DVb7PJBD=o+4U`ik9cQ%H!Qf0hs_b*zR7QJ2!jIE?1+j6r zaIo$D(MLDxsg>tB;@){K@F3kKaqz+C*ZwJSxF*1JpA{Wfa>8$&s;BHO9nh{o5w%dAnEc&{?Pyw9U2Ubzukcn4wa0sW7|gPqZ9TmCtIxIrZ${Us?D zox+VjVo=kn7-@ty&86638BA${>(Zl}DM!`*++FjBe@mcRq~f&OlLu-tU@R}98=bUU zCUTYd1s2RKahcHr9lv0=2o>|7IkT@tEU7~+p55HW|DePpDiKZYMeU-k=ia{B_JTQB zI#`hgTaf|QZFP30u5z~)fqRQT}Z%guX8Ditc7>Km1vCh8EFZeABb+`$0gk9HGXU$}Lpr4L#K6PxhjQ-=DzL z>%+Yz%JPjS_ZQL$FX+kbY$+c#@iZt-s9P8uM|Q zHtRf_rfa`mYrworCfi#D34Z0fU0OU1p!9+YkP=kB)@jSDL&*~L0eeK2xDG(r zMkalq`M@qlYA62wT#u4*iQkH)*>T&H(J^u&QJVkSZ%WGQtQm2xk(xt`%J-!v2Qg`m)M23B)&(&GG#v zJ&OLA1Hw`uKjPIit{DsE%+$vY$-bE5-Ln$y7>~$Su49~+x9C+U`1pg8!?%ndd$AbA zLrOJk8ZFGUm)r*ZkPGl^w)0og#s*z_7HGG_B$4RtS;c$B8d9`!ZW^rgs zLBJdl8ZRjL=3|@H&}0&M^byO@Pv@f7mM6)lOTWq3CMu<^lks-saeM|0V~;Lbi}j_R z-op;cKAjmgnob$^a;$0^EaXafahV?Kj0XAj>ywv>1v>dH+)LXa7u;9!I=Y{F60;5u zKDO4H_pFg8f8b`PT__PR&J`!rg6tV5W7}IQ2n1Hi5dm@%Lt8v-dYm`#@ynPWT3}b< z>zlQ9&67tvXD~=@adG{O2|4hCJ?2Ssn1#H?JDF{FjI)05diTqka)@J^eFUuC_t*ET zSQ0V)ZjWD@E+vJtvfEt%8;x377cSC--X|-chmy z)>L?OFm<>Nd9Wpo{aM5`v#nfh8?o#gH_G6rUb#9p2@8Bb?KA3kzGm-Pu{8X(V#$`; zXHaS9ihaUjixyZf+4mMq6h`9}o{)RP_XEB>QotcqPnI;9OXN>p&a^hrk!WbAmQ;oq zQ@&^OxaQe2+1_|qlRG7Cgn6*C``Na?{ffP)J877(35A=l{$AmWkN+Oy6!u=k{P}ZG zEUDPwbwwvZX_$75KuMMsJQ20Uu$~L(K?`?ASs&*rDm6j0smrc=#sf=ga$-@emLMw! zOM?r9sFo5FdLqoxjz2l&wU1s^&5k?DYq$4y*2$S{isvW2Mb!8`#o8GWmVj!Pn%-9Q zcu3cBR6p3gL~TI}DhN*;WPmB@H6jb5h2T0byt0JS!t>=0k&;qm z!ZAbIk18&a-k>*IH;?fcOReaWRWv+o3;+5`ZIWav;gNzydzi23T8- z-I`}sV=w6JK6*Mgb8IdDdD^tkS{q)TLkpZZwJ9m>uG>6)%p|>XvCmnhAZD6HBkW_a zdt_P=(i)GQ+oM#5)u9z7$_%WH&$a`V<5NnnzrRhTB+?>-Awy=p<+0@!ixvXq(Xlo2 z@bfEM?p^{KphDj&Z<-?g`96#(4lUF~t)ji_TF!ydNwz@GK(j|o5|=5n^qMw^WG@-b z$x~nIGl-RTo_>jjc%IS)SsLFZUV2M!aqrGzqx7_#yE-Y^RH=Q@*OlPwuz>u$;uMSP zhk6P?8e=X%mT|Hq8$gUOnNxCu*wth1gKn1vXQ0&`T>p5$=Y8%u<3O0~z?MLuBmicg zK*~hd)G=AA@I&t5{X~HR9XofDw5en{bi8V?JPW#7b&psA6XhRM^)qE3Voy_Y^Q#1U z68fnxU87)r@tu|DR8gz@SH)J%hOzU0pfbewx{qp#!nw1WAg9v$7q{e6?x1}OJIkVH z!Mw0h{VIT}arhkmq)7UODo;nNfBl#IZ5NYOL!A_>O3XCxi-`lPHHj?h)%R&deaW0{ zW$nUx+glb#4h2tde&js=;t6%`t3S7TckCO7UtwvL-Cv?J**aTl@GhA>ux=#&tuT3H z)_2}YkG&ubbTPzjD(%e1bbOv|_ByOI5X;c3(4hrtT7D8nTV7_v%a=!3p@GnaD@j$H z;)j#J3u6s?3)%22ZM56F83Py2VDWX%&FA^MMMI%_b_VsUwkR?^k)u>a@`0~B;dYkY z;)J_%J70M5pxjw4g%kG-gpvoUv+pG1s#ps|umRLFZwlYp*k8%Lxl5a8WS*eb+6kzT z_tgQf#5hz)v*Jf}vVvV4`hv>W)8>P=6HP+sbM{)l4?m6jm~cJI@Px|9C)bf24A;r_ z3-}k{Ss&4AxQ*<<{-y+w%;{7{kOCYI^Zfe;l4-7 zDF!O+aHg*N{;3dK2b-(AmNluGZ@v!1&Vb zT`j3{q^hL~mN2~J7zCc&0e`)j{e0?dTTgg$m82WmZm3euXG0rcjmDYJ5+l;V~wDfMw;( zxO^c9UD{HBIA$E0;0tN{WldEKqSjl#Z2LtgvQ=?7FbNG@u^(PlM3z@HUU;!r~3?nzbPCtuXn*@PsG={R+Z!=o*!bJ0Eyjh^r&)_cA=Qoj}$5s zutFn|e(~le=lT_?v?6qC{jOq}at9wlz(i|*dq2cU_;c5MBM_)_kw9wU;ro;kqX67l zp8|9B7!us`fqKLQY<+n9Y%RI0qHcG`z=esQ72lYNV{mz#fmd}YCHZ~`52Y8x<4+*o zL;Td#CLJ*6&R@Qc(>GLj9< z>Ld{|`8llPJ@ru3O^LI4@hiu_B~ENuRzcLC4gB+0IFhS?WsW(Hr&1*TOYV7q{aS*z zG{CSM?$J$I^?yYK{{!*BR*V04MDV}(@_)p0&cF_=3oRQ&`mgfj2jC|h5&fx98QVv3 z?0>}buTU(Ed9?E?+||*Hf^_2F>bTF%4h0hM-1%DuW|qwj!rI2>N8G@fZeAa;h^Vsr zIRCbMZg%PhbvpY-WR&yoAzNVSj&%&qrV{~h5URffRA>i=p1ST1Om+=G$krK9NO_E#Hjl9Yz$R330~R12~s_NUo^ zhZz@u%5#FO;SO2_|<8Eg@5FS?KE(i%Nk-2B?FtEpguNV|2kc6|2~mF zqViNyjJd9O7_c?vuci@C2x@N7UcBsP8Q*WpZ{yV0EVe}cI*$qb(}aZW?qh~Bj~bRn z+Y9u|_{F=$<=p84vkq2-S8-2wW*~_vT^YbTG=8xez6Td82&&0Miy5kJkzSaoVdMr&FwC;X>L@==Z87!zW5Jdu=~vXe8Sz-Cz2P)^lJk!;fdE zOQMILT5k$&;uie;@)|TulNz0OZrzSXhSvmQM&aBL4WHxwNmI#nD>lPrp5mD_X@a5^&>1jxFV>g}=CRJSjHZaR&rbJE&YtniNkJy#j#Lan6Dm~Q-`>{>4}?^ZPr zJui&ie##jzL6RpEuWtT=cOaCQZ}e&uJkxhu>`HmZGbEG@zenI9_ZciPhV;p5$BH@V zWV}t1PW7>~aF2iG=!{<+?Y9w-e_;U%(S+5D$F-lU$-f^Y;|mnNFG;(%Y_M_p`Evq# zlFn%q34W7)uXx01v*(a5vuj5D0@yq0c%jJPCS3L>FB z&J@KPcsVcKQ=jVavVyz_fcj~NbuQ~xpx2P4p;>%`gZ|#|(x_ca(BNvgIjR%AZWO1o zf4L`#Y5al@0qy08nj;Gyk*-%LN}hEmwVOfx@f%e+^x6?VBLhVbtN&aIm%a;V^HZ{P z2=^(aMb5L2vtita?_$1dDpFzE+VUK!p^HE-#XBDWoCd-ob+$92uBR966xr7saPZ`Z zc*C5ho(iz}P(UlXD89^p@ynH_uRqE2!gGO&b|0pLidJV;79;2Gy3PQYT0V;l&Stc;{`hi|>5NZ~e2;J2RJ=Mvv4 z94x5R-5wV%L*S{O!NxO%FLP45jm~X$eq>MCn= zCTn-ka0$t_;A|2t$M|d-p=;0K1OflNmY8P20+i?TZf zu!Px7Ds?-Bdu?&!FApO(8uLeD8~AB+Q2UFm2g(D((90{Y{i&8N{V^~uQK9>ckE_c- zT%sZcjS|G@Vq=4i0l_&ikf!+~P4Oku3l@jud@`D!SdM0K!O8_v6sjVRfi#VAF1eaG>ErX+~nGQI%?b_o81Hktw9js-^6PL?1N& z_`!Ii$>J|poAa6GviNq<7pu+7KKkce$+*#;X)h&=7&!AJ08!CUOjccs*5O$;D$hKA z;H5RQ#)adT`a-L3!)gl&L)cOTR+G&6WJyR4V`yEd;_G5@z#kfze%Yt9vzsmv$yp`{ zY4Ba{<42}CLRsdG#B#;S5@Q#V8tmZNJ9kYh**M535bd*vnoY;+^Q)-mh5ishkMRa) zU3G)jU!FY$e2UtJOAD>Y-mwZg3f(BdYFDjs^zkp6{Bu&YW7juxIl_t$GieViwg)2_ zmvbJkE=KN{%asOhEj5^0S7Uw$R?MkZBK8BX+t!r_LX+Yi;rp(oyU9hW4wvbj z26cjthx;9^P~13bgEL`q;n!xO_@<}jE^$snNI>7VP8-g%H4f;H>w)~9dgs|X%?EOi zs#_gg%mx@UBn@1*!V~56EApub6al{i?5DO1>)7XMFORdRQ-#Y7Fm$WFf0VN2;e>nn zp*bMP_Yu!QET}b-&^VLR>tJpoPiX{^>1+(PRszoj6I-*f1G4fP58Hj5`_8(gB|JU>uHxUKA{{L?vcmxk%t3#+s zYGDOknAzeS&SGLbY?ZD4US6=Byw@a~sn_A_tZwf-!#izdo#d%*m`wKxk}BW}97Jvg zRn|@&T)tqqPsqT8W?2RaR-(I@!elsobu4ZBvO3~wzs%4AuhmQ-mI}G_Ss#!TKfN-Y zrgcnnnY;CDa(BK$vo50P`WrS*c^8>qv+-b5zzniJ+52^V>qFU{^r|Yvv-?GNS{v-`E3q^Q}`a@RVQC}nfK;v zb@1|TQk3sgsW9=#k&pq=h%IuE#0Sm=B2_BU%e1L)e; z&~+7zO7(S5%t&srX!sC{KmoB4n&(czKuA5$#NOB6@&>Dbnr|pyYy)@ShS%SS-5x0a z9H|%qFnWn|YWJ73k=T4w?DjiUH(-mT!9dHGX>&TJ)s8xV>QK?UjI>$0rAt<2I z$~9C=EFqfgcINuJ7Rf#Ekf;uFz4W1Oy}9bTm^l1lPG3q((8X7j5Zj9DQ+mU!n zDv)oZ z3_^n$s5*{H^w~Y<#tH0u#clNE3x=d~EJIfK#Jdf76z;XVgaTj?KzQk;SEDdy~ zXgi>EZ_>Sn<_(!brkEDW@>;yxxT+0(`}To`=h?f9mhvNU*7XO>n{(rfs`cGt*;iNb z(WU{rBT7Qov!0Uxr`>&Lc?qOQKT!kCd>L`54KV1enf78~b$R4E{%o$J=;6&|&n)Bn z*?a!u9Iz;O4UKr~CL^1Nhay&9MLHl3!s44#n2fpj1j%ZN*zUGk=m)ZHw6v6Jq!3!@ zx5ZXgsVdZiG^R?=g>qa@G21kIUCnzf0Poi8%A|JaLLGe6byQsUsfn>NWC3};HCotH zoMW@9d69Pu}KZ7~6N zkP~^1BeYqfbrDOoo&&eXV1+q^+t4tWvqFr7)P9X&bZw3!SL8Dv)FDY320avNzK_~d zGB?)&8gN`KUTVxwO_iaUbDnTfWsa`)?sJkFN=SVh*fC#-_NIGmjPqq=uTU{3i9A(p zPern2`yr)813XZo*xvT2LC)Z`894c#QZ^hB* z-4VYZvV=XaC_Cu4TBzp!)2V9Xa0GCoQpLg7171YiTau-^>@W{3bU)_wCN37N`vihJ zwt0juES#I7wkM!@Jpfw8ZwxI{jjGp(7H4>6Vw_1EHb|)yWvbsrR$6xCvd{0b&+XZj zx+P0q)4ww^i}#8nFa3#p>QiUzOeJs?_4UN?+9faHmAXAdI#1-F&Kwz38#mz8TtNl& z3s+WQkep7k6=FLZOVtSX;K9F{%PPhXqK}1-drwCujhS1Q(l6>xK(_}K*6ZGi!*sE0)wL*zsZ4xe~Z^1pQKNRpE~ch%C4 z&c}d!yAb@)s-h2rt>(MAC-Jlhn>^Kc^ya~`R`)5Lko$P!+bN{ou~FaAX|A`=94=je z7Z0NFNYhI7LVtOOzM~bok0~;Z`Rj?yI{h*jd^u)wkh0wamCKvR3DOQ1Tkyp7(}n_lelRi(TL4u z$+}(kw3+aJ=k_ZNYh!Q@ClVzcI33hK-mx2AQ(Hj7+W8G&+K>H-3Uug$5Q1$OhXblk z?e1UKZ#pZPtgBK`j5^l19fWhk`X**JAzF>lQ~`-yrXRXf9ytPsye~ zqpnGmBq#k{;y^aVd4d7=1u*($+Yl8)?CR)MFD3@ zZF``29P{3CV0N}~N@YQlW~`yenKq&61a^JQ5;fRaRG$mV`R}fg`Ax@jq6ea+kKYb$ zeqR3ye3`0li5^@>Sq9s1b`r59<8s7R^ai58iGYsMH-fM|^4tgS${Ogg%~MHNp}>MO zU2m%8v~S%?bZX0n0*q~b(j?kn#LHWaRWb61{^!ilS zN$-VwD!KR>qa4J^I|E4W;l)-B5~8Z~(Ohh8(z5FCS^sy`DlBj*<4Y`u7WD0h~btGX zSP56kh`DHU3X29tUc3~ouctrfjgry)cyy+ltq(5Q2vwj{On;-kw24R`PsNC{ZD}nYiP9b@EJEo`A`^D{cCbMF?96J-bl$_e-1B~HOX~`X-;(QgzFnj)SM@a-6Av}rg_ZHg<>jEv&zmi_|3TySDcxsGJ}{2G}=CH(id)kr4Fpt zkYKvX0+P(vVq}Dg20eGi)#@iN-o63G2GeCY^*Wz;(-2o1bHU0tqj7)U-AKht!^cZi zNItIg0^wfr8MEj}bEiv0`{r8F6sjh;sbpH8cMSxTC;jr0iHv{2+=Msd$pS0K!{WsL zVv&_oq<*!A`2kvOnf8ZIx~xFk9pe<2~%%P;WXW27ayy(FxYnb zI_+B!^9ZoKJl9wo*tTpLdk@O%+~R@UTvs15HPL#UAy!(b$F!a44+YUI1(?A=*&lO} zp6QQ|GtsuGuOQJaQms-;8>h)+W(zql>+NT?O5T0uy|7G82Bw>lCHwXx{TdM~we!ei zEQ!p6-J)uwr!o83ejsPDG241WpL{|LIAfIqPaDZNEWjs^Cae zzNUxI=oe?+v(6cb~^KUc8`b6Z$rG)||9@;NH?Y(wy@rQg5zV z1()TfOM!(G+GVVUdJn2e*hC9eeu11fozTn0*TuLgU3IGt7*Z$~XDyWBvLXsX>+zTZ|K5qs3A$rFwSZrw+)I(TP4%OjGr{@H4xhkQ{DXGB26Ni! z;%unwZm%yUg-p{|@R5dSE^#CG>M#pbiSK3h zL8Ga9gLMAUt%XKbzUuOf)1C!eZ#U0#bd1u?!g$$q&|?+Jys%62R40-Sn~VP0bLgCb zhz+Iw;GKJvH(kp=_PLJV>vJnA6`1hn$LHcGvkZ`tS8u=YpI0Q4*BK9(Xq8VyR<(a_ z;$}1!ex6`L7utQ&MuzXNr) zGnM*Kvq;@jpCalw!J2U`+(W)a%SP$F{H(t<9K^cqiXSv@S4zvQmlR+_dAp!)DZsA% zQJFcpkM)BuJii)sNfg}HQV{TAJ(7q@89vr!9(Lk=(D2p0ik&_D8xd{(SiwJu@QnkizuriIPCyh> z-zP8Uxkz_G)BYz5qzKZ5dPoPBmBJOx=QEKaAz_BmfDK34<|kHox$b*b=gAgLoU2SX zN2Z#Ghha8_3qNkoBX%Kit)gIRDm5eR=3Q}a;&k4T*1b}ZM)O-#9BZ>;0w_K)&)Q&9 zqG^Fsa+fPed;hPX=>_y~Jg-B-(8rUUQ~vmp3G41<`puI{lYEx|wXR~4A zRCk$=-*-M(s_6_;G0qN7t$BGo)vy#%C(p*C5%}oQW>rCK| zz!J4BZGhy^CpPAVwXf)sbg5W^BCIc0ctBsjPI>0Oj7D1SIOrcJ|l_=~$zjMf80 zuO(JmHtwoby*`! zwUX?xEnrMP>55Nz(VA?UCvMXx{$BpQ63|-R!D6C9wGxE~kMo@yL7~goC#k9$y5f8S zSdm6r$7KadrUf!a1|hYiQMO7m&+fcfW4ZjHT?P6etEm#bSp;Td*7e+vxa;dDYq6&C z8?!?}+N3RIB4?Wu103V7%BQa<|Kbi&IiPyN9k}vv{5UV)Ug>egFEk2YTDhTO+i`xJ z&z*%wW+QcJx+Tv>`0}$w{SeI1J|1*-Nw+>=`ZdGHIR1WlPw3TKgBEar`?ju9pc4Dm zKD>PK*3Dx-j5#;PUOGO{^%MZFGCxz?Ss6H0WfC|hsf@)!g)=WQSY38!-2*ksYMY0L z7pkiK%$Shn8&DlVKVRdtsTZx8ZY8tB$Pmi{SD(WZ$JOz&J`2kGv9}R;J3@}% zs04YRA@M(`!Is(tr_-iP=5x2o2e8lTG-&D& zi?we37!&yi{oPG^;I!BmX6L-C&&*2=>G${&xdzrXeyi(06B6WiFrX&%thEw$>XqPW zOA5`EYPO#!QLPasGa$jYp-7DClloCUml+lE*?hyy@3O93=XQc?qfpV0A|sFW^k0y| zx0FzQ=I6-ApOo}stj_3(1_j=W^OUyk%q(WvPus~Pvc0~f&eqvS#&-WEI2+(|+m}f; zIkVppHxW-gERH!!lseaZqRF|H=i)9PpEA~^r5dX>-eDE5!&^Ig@`U}Jliul1J=UQv zK0&S01w`{zkC$#2nZ`hxd_h zC0g(0{$m4_{=fP5-2MyM#o`OG!!+|hDQ-dkYQA2HWA8kSq`&nYI&Duh>UZG-{Rj4) zKf*#(i0yBwQ{MajF)HGY-Tixu2J}%f9Go5S9QlIho*!(DZ{05^Q+ubCOZ>T*>`pIp zO-L`f!0wCNZ!LXuHZ%PX7Sk5{IGXs=U^63WqMO+;;gL&P5s2`JI0>V(3NPc|qj6)t z<;uBv|L5V~!}%ij)6f+q4Pn}t%v1M%LF_{O6N0sgxDB}X93aV)ukpZ#y|Uoz8?t|T z>^E)rv|F81%6EN^@=M*nE~m3^ZwdA*-&!@W3gP)DXTW}H7`wr+mIbPH= zP42St{5I{11Ix6D3Tn9M@FEEFUo8M0n9Txv^>l75^SrGp@!JE)N+2FxY|Np8nIHXo zx}Z0a_G{>Te&*P_)=Z)fdmVu5=G5D#EVrZwGiKXVAp1m|oGsg%`@1vWRJz^KRL`NtJoXV7 z)Ib#ryc%IyaGm+H7rRgl^7K5b=@R9DiGx&?Og`XhO`CwoOID^i_zSl}_YbP-3lew7 zhh8-kJPlAm2iQqk&LJ*THMptHowZ&l6$0vPOyTQ%wsvzSUlxrM?a0^mSCMyWS3Yh~ zMbtf|{qrVn>#$w9tP_vx<=)w_Pz_A+NY%C?ua0oypCR^MdSYT%6?^rn_o%$P$~K$* zXL6+ij#GMdPD@(5#w}q3o$0X)BP{h>%svfl=Ox>*Pfi-D24VeoqZ=qXjV8oosP)8j zlOI%D1-3_&DP=&X#dBy`w0(#AyF{D7vrU^VCw$VW0$9ymTH9=Xv--ftg6F)4RMu+* z76D&Bb^ArkvT{(f)D-W~^0KRPBt47b(acsZHYBqsG?e3p<`(gAc(RF)fz*i}Yf8t( zarMo;wY}m`^2WQbiKoli=gL|XC*|^UREsOW)52O|SdNkPfI5AnBAZ%qO+5#nFo zmwL5NFHg!j$t5c`_SOay{rER*O>b}dlCvV5$L71|Dhqgl>F2EdYwnQ7OUmYmyURFM z5GA@oZzhLy#W7>WmW8F{&fsTNvw{Glh8Ah6QUf4;{gBJdW}~d=@aMWkeg7Wz#YWR` zN6vkRj?nJ1BjdZBkX}`YuG_F+yVAq;kQhQo9Xeub*cM;?;BZ8IQfP^&9kf7+Ftx>d z{Hb)rETQy*)0(UXQK+1D?Ud(A24IspBNw4 z;M;NZhksiY%;hbCf>qX5b2|Hc^nb|E$v?wHb}+B}?Xf`|ivg&JQ;sUzGsX6jBPE!F z$C@3j6^bn!{SgRy6T!Y+Yr+Tsqw*Ce-eXT6_x8MObM)~s*f3MX|S_?og&krXbyq;Y(D;#FgUHdD3i(G>4gOe=8@ zAX^AJCNb5x)>EwF1xQ0TN3l@BNMC{UCESgfu3`sxveMk@9;jBzW6w@SSqO7=opxK_ ztHWnUOo6q;k~UL?Y@55;(gB!Zh9Onplga1Ra*A#zVXHx5&r@~+Nv~~{o>ghO#?`N> zBWauDIOc>)yvko61tSwxx{5NHYQEoZd%?t@lX(?%?&24D;%}R8!#VftnGNhSE08m{ z&DkOA1w-Rv^u9yE#n*w%E$TA ztB|OY<2K?cyJ^j5ziwNQY3~cZ*T_eafGbK(;K%Lmu!PneyVuVLxu)JWCqF@cd9)r? z7TR9@68?v=-4efgCZe5>xwQ{w%cVPiCgN`tKbtz0SIc~9t%75~I$g@*xNM}uVhpic z{C@C*vrP=NPBU;kj^75i+>0cY*LnSnWT{ec`IS*Mt(ES#V?nliDr6gV9`AHO9D(?* z5BPPFU}~oe{4!@wu?IJ2p9#z9G`b|#T#dbJaj(X6glcM~P=Kl-da@Gw9T(ejO%Bh{ zz!7^9=<_@LYr;GtX?&qE5F357?u`+e3E;+BQh1ILy(%D5i!FIoVeckjomJRDUx3r` z+GYLeQOu!N&gRw{vp1HiIAkAVqs;pONU~dKs~>d|53km=4E0uG+k__z$*P?FdEvQX zOxbps(ECii47B{jxY(#G985`saVH@TuZ(4-mDbsG5X`$YA?FL@PDE{s)A zh4;gkS_2u@*+Sc@zRE^_m094&073j(xZ8ub{`y32N|~IO_`D3iQ|O$U-05JC73kAh z$R4KJ87MA}y)! zZTxXrtuT7t5;NdqPy#k8r;|x=P}aUap>^UO2nIzu4$GyvZP~)b=ZQ?BAq^*kW2wvb znr>ggdv!mo^dF#=uiLkkWV=6&!;9^bC2+daaIh9vj$RS!*98?lBgIm(2YuNjs@bJy z`AqqB+6}?Y zslrOV!z7+wCu`CS{X6Tekx<@zie(F{1#u;{n zqw4ZaQc&6}A&->MrBARX9=EyiW?3pt2%qW?;j~v}LHFqS?-JQhxL+zg9zg*Fk#sX6 z+I`{RN$(J`^A|==p+1GTy&p?Hthf!ONhw@94`_^(&{OI>vLbXa4`@w4;V_>6R+PaU zb%iHI6qNAYlSe$`6;z}-<6)oVlVDK4)_M3l)V!3Wz?uyp_M)-sH;K8&-e(@F$!u-} zJXhQWrW)twW-Apo$6L8U5$}`^KH>D_9Zb0I#C?yV)HRE0f_9(T@i|R7oqIoeF)RJq z_<-!>Y1@_z4YFzQlg?1VyJ|OZ-x^y(0abUwEXSZxKhBvxkw-wzp_TA=f04j2=QrlR zZ={$>ve<-yGRv(zV=D3P@QyRPQ;nz4?gtI(J5zC`em2`B24SHmG`Q|!U^(F21D8o% zR4drQYZRNT{KUCKtV=~dZ$}zWSW?_g z&wytl_*tnSu8i^BY^_+*r*|m5UfRDu>|lFvA$@Cghe+TQ&+*P7;XSMds~?+4fio#? z{r;O1zN5VzVZUC%YIW~#+H@<3kN9I_%5B=_f1L+DlHHCdBO^L=QIn*)2fWPMm?@4^U31hI? z)gSR7HJv*bR-(6^yQUC9&}Z+2|IPD4M6tWmSVe#RS9JP7_$G-nd?HHyiQwwNz{FEK`CM|oo#lM1Kq)mZmU81COGzd?tz!C8 zt;%=(idP1V*-Z5oR7vmfZs&BJHQ_a&)|`QxgCmy~UBfRwgxF#a{z8S`PBfuEp|iW& zNWa7^v^bP_h~!+wNI^ebeDs6m^gh!-y&S*5UkBe-2DP?%thUE^MMbGDlIM;@1pFsx zPhQ^^?N08H%l_9?;-lQ1?^U|m6|2?yB?M~EK=%TOXNqVK6i*g@9Q|o;T}%4c74$Id z4cPAW@;X6Lgxy+2<9Pj9dfA%o4rbv;PUXKG1(PSan^n46CF_>vukcBO{>-2082Njs zXvaA&Uk3O8p=`f*b?PK8P&?8SP1~oBT;JH`{iXcsd8|@?BGC#yadz;>s(Y1Jkl-I-?sgW4MZU`VUn3Zh;)opY674!GNT zNsd{lc{{9$50l@(`j15-_3ccZ ztrk~)B2L}r+=|4}j-;kfW(w>r%k>Ys{g!_A9-D5*u)yr#fVY@)m$suTmuVqU_p#^G ze5At1R}O!mGsrn%9_SVwi2{eOO#6MSdwTbS)ELx)&=uiP+=q-$@3oTY9sq3-$V-w! z&`(zL;;}OKFpjjVUx^Ta&_l3tv~{-DUXd!ioQ!~`Fj)_*>u6E+0Xi8=v8VmprcLAY zY^kM+`v|k&A+(=1UtFQ-7myXH-nZKf(DEl5QuOlBl)6&H-0KrM9#tVBy}8TYTs+PN z2pVSX3+|z<{Fi9_y*Fl4AqtI}3aovOx<~5F6d;eQtFh+irLN(G{>7I;bCc+O?}o`e zk)t##saHr~#zf5vcRs^Z(*J4!4tOd=>ho?o>0lvms)<^bV}V>b!bI$W|EOtc11EVaQw-S4{_wbpOr{%l8}C zZT4GR$-q47Lth^5MXc3Fp{r)$1nXWP;>UtJT95y)MCbA~zF{yH>QqbOWe zD3*(~X7Vq=(b`|wRrJpNt^`UgZi<;x-rq(CA{0?iHblHA(|uD}QTyFEvKg~f7z-^= zH?*X`26z5Uj=>bKAC{H_d-K!Eb#Jj*0ZlQow-#x^eQ6e`TzhKuyiJAwXsEQIQMvW( zGNo3bBK+Z!cR$dsK~N#QCS`Y{ABY+5k9S-u44pkc;4OU@(cnfDNg4SRIm?aKQWBVL zf~Z+?R2n-;HUc>cbX)Yac4X=pK!GKoHJGTcJjicuwnRUFKO=eeb#mCK$}{6M)4?M}rI24Wx)^8A7 z`AtMDuiw%j&l5A>*nwRvcoB#@C8u{&6@)B5RMttAGrx^^Wy6&iEqfqYTN@i zG=)|64;-Inr2Ewl5;RXV&8;qMD56 zM9yo69j7GpoGgr$`9p8WN@P8=5NSAjZj2N^kO${!d?D0aaztwTpm=BB3bV z(kYF!ba$r+NOwqgr*wCBcPZW7-QC^X_jvGI>%aH=?^8>uOGvtQHuU%zgM?!L@E75gx z?2Gn!RnB-blVeY2!&Y&c51>ekWYJcd^&`k1d-dv}I?9C&mkOsMx9*~@ES+N0yFeJw z_ri(AyVU;vV(J#T?#4-qlf_pQ3#@D>lbx0b!N~eg4o6EH)V67+Qsz+PTjrI6}H{KJoTex0{PD`hsKMH&klyGtrn$H%uW}bly4D%G8THWQ*lOe$?KB^ z!G$p{c!8G9vuL?`lX%KCY`m7?S&yEO}tT-u4z(_N8q_sXhg%KT`MnZ!LwL1wH4|I&{31=IH}my_QLtiSiHVD&pETLmh_$nHO=)LBk8;=WR*QP#LXX;qPORYj%>|oiV<^> z&EXI%y$KAXj?!=vS?3tq-7t)V8&dIn_EGWklTH4;BT?yNHR#c6bBMBt)(hyUgvOG+ zRAe?EgE3h5kDE$Lt}oFk-3ikZusLDNNGbMGf8<|IoNtJmpyaJfO(JvIZE%Yb zm!CkRM8-i)KR^7U){VRL^)yBCy0eX-T8wq&b>uyaa!rWKVXE?Xbqn&PN}~6)Rq-;+ zaq*LW926P7nS~~nUHL`%g(K9wu8z(Zv3r7N((8E{CBYwso03A2k6cV=qAO0(izd^s zmgEYrlLlJK5zC@Bm`w-kn*#!u(v(hk^<0HYu!d|}Oyj=3(33c7a<;hOeOZ8Lp2uPy zKrnRF^l-K{`pwBu{;_mlE~){GrG=lVY>mfIWL2>?^d}5Y=D3M~0Oq(%0tc0v7*TW9 zwV+1yDP=}`FpIVE$Wp{T+s`z_y?xsFQ)xfD&%P+Zl25BtM~lCbvmQnCA|?;oYZG)C zqA0O$hq1)6A-@vDWHYpxlz1vLXSOtiefmYfl$CY!HnI*5eeP+e5;NOO9`}$STX^fm zVQ`@B&z;`g@xa3Ac)FjxG}=7&#jcJkM+A$kzYnwYOd>RT*iD#ooO2lxwz@H;4isQt z>quwo=L{YGf?{EgR%omn&u^QP${@-sEG`j1r+Y-=PQiO$s;E{G<5b3#N1t;2k)TOa z&!%>#XsE`|$nkAd1c6PYZ-NT@S?2u;JnnbHY4xNdlgqoqU31y3w|l>jN=?lMHa>MZ zRmMtwLJb5eI<=f1?GLsnej0_9yhD~k-hIj}OXZo~Ube%|$eIlLxoW}B(ebiZH<|Cr zC?>j?jlL@4TmCFel{#KQX4}B_4b<(N6FrnZP?ht%R5rd(ZXTz}@zLwJ zRniKPN)quCYPWGj{Jpqmd1c3ZV$l(q(S(EWqqs3SDkb^%Kd5(%4{HP~b*Lu76&Jx~ zV&YltTJ9^BTt0E+DQ>C{8$8{lUUNZE0h z`Rc4hP7w2C&iTn@4LJ6^VH+W5Rcc$VXmwgt*B7dBhr~s@v2-k!1FElNAWA-Gbpw5K zhgDQJq3W(rEtuJ<)3WX|l`lye{cyj??VLi+*EWY-l#=-)Wue<~hFtu}Zza~;;$+Lr zF}A;W;U%Fu4#pS7pAYI3%I2$eb2&`)>KrmfHkwy<%G)RDMitBYXKQ=gaeHz%drAjA zMtj7Qw%wAU*;O!=suS{rm$!3;F3stT3@sm1*bSTE{qN%<41KXb>$zMLC^|J7akDH?7UM*!K&m&jY1W9q!ueZ7TSy7vyKCdEaUS zY17@@Vq_~-)x592*Uu`SCd>TfaV0k7bGU#KpZ_+1=AtH|Ix4(N8J$(NIAacjyN!#mBAt@NWbXPIO5gWu4`CluzICkyc7#VWogr{UfN-Aqh60goJ^>EoN zxQ6F;YhZOJbCwJ@j7 zYT{$BChbbwN6d4!Mo(^t*V8n`FRYo$#f|j*zYrHnz@jEE|2hprZaHn7Fj#r@g`#}O zRS=gXal&IL(dJ2|+DY$E7(v19wcsMIQ2-1Z^T_wQL3knSFTW{5$>Po&)(X>3k<}QS z<(WRMmDth>XvsQ2ZIyZ9A@)d4jgB4$bHpK?=CJq#z#^=Ntc-D-ju&UBapp~AM8+Ek z7Fp3~`PJ+b73Hl-s|cDc&SU(kFOQmx4o%q(Z?@*-O+fudV4<~kr| zqeGXpCAxWm+&+m|r77Gqb273@>lClTbh-K7=$8JSfedk|(;4kk1lQ$B4V{SEQD=XH z4`)0EZ>Pk;0%eEgmEl3mmm1j#>{GwCpG(C#IT+(Guc3S00RTg8dqYvV_9pgrVjt0! ztH?#%=yYS%ANjQS`o3n7L(|1%@F~}`o|HbX=o3B^n3*RLt$oAlUeCk$^AKSxpMW=ZhqXGo3j`OQD>4IdD1sUwmCDA z0@S5tWFT1ST%jQ!cQp{97Pqqb-Q#CWam^j^hwAM0V;%W|2;}_lGKL+8_4&`~*~F68 zR{AjCk9ENEa3vzQn^C)u5n z3Xi=Bb+gj^$-@~castt18xm3%4*;d08cPpE!kKJa=|-y&)HTyd^!@{(X!Rk6fPetE zR{#!(=q3dZR5kbl{TUev76pL2N`4=}<2k}2FK>a3NJ}Sfb+C$y3MT2Et+6@a_mjDeJ0OlM{l6M#O z5emj5+~uR>K*N7>xOJCpN*R7#nS5)q!Z5aZ?-`VEEtkE#z&mm^t-v1 z*V^NjeRmQ3^FZ!p%%D($nov#R+XVLQDL4{YYloDTBI6*qzZAM10i!k3M{o%Bz>MEm zzVUV%GQjS-H#{R3k<)DxQ(aqjy;{J#q7B4 znL6KW;WLwKx}2%u@0l_}H1#E!Kqe@bu#!)ZAt~OT#_4Uj#yp{p%VN-Ns-@-S{Db{d z)Ue{`8Q(i}G5Nt?<(H^|(=|piB(BOiE%>84r<=*Ey1U6t+l+L+&qyURAOOv6AFBO0 zwMv)U-(T{tYE@A-@)B*SRGv(QmE~>t_cU?nVk)d)oWn_W8PPiJ4;YPCvLDIp16A{3 zRMMOhB3$_hbHq3AwQDNh+uPSqN(hTm&z_)TI_1|q>im?L3`wu8AG93ecxjU1DtKwr zlfq`MtD#nK*!iV!KI)fz$7>Majzo$HBIG`PDi~Q1p(0cHCs*{5?b()^t}%CyM8dl@ zGtTO1-64?;y5PA?vXj!oqV^E}rx|IvoE39?eN@$Rlj!V|%z+OX*$j`HEHioS-qm#k zbzHB!uk&h=oKXWN-c`#%bNUHm>H!0)q@fAljLrW;&H zBQgv~;GuDI3_&TYMt81VemkXe*Dnsl2H7nNAGI9Pt+Y23F=?cvIp zH#+=X*^%jrO!b(HOi_;%AOGfSgI@hy`h$JI35Wd@#REFk<6RaR<^6d21^?-n0`@re z!)UTS?|WSYE_-Z6J=vZ%*?kz${^H^5R2XRX_inWgeCx$8b_y6=x!! z2qSiU8Rq-NqcS!Uzf#G%uCX{K8a|Llif3Vj3JLop#7T0MF&<7AZv3)<8XHG6%j7jq ze7j3@TV$G3UEl>z#7RgN#%QFUb*A3n~^B zF+y^MLL^khD7t45c@c0Z4nyR0Dh?FIbGA+;#PhXZJ$jeH#krS>+%;*`&dZ77`C$N5 z-)3UA$*|Q#bxILErC9&(ZHyyg%Q2dG#UoXZivfGBM5--MWxuB9$ID);Ki5xhBs|_L zK_#=FK^q|ObgNkvsc=4-sIoqoZkDcCpN;(bhV{i;ptL_yG_(t=ptKezGDh@bn?Vcg zHC}P0ebSu-LNJ|^lwdspxDJaQq4{Nw=3vs(gf=~c9|&Tn7`Tt?mlW1?v^5(kkyNec zhjc&w1QGfb&ktHine3$n_uG%;&`!vTr}5_(lCJ8kPUgOIj@9X^&o%kOp||mkv`%hT z>ABVfS%_Bnc>RY~MWhz*zKPzcYOwx%oN_!go@1{v1vVMb@Yz62(-MI&ZTMuq(n@q| zOi9V=ntwcBXXOXeu=e3*<8g1b1=X43Y=CCUIqd2o)cd7i;4>paQrJa-O@{z@qxC(# zJo9Vioi>j z!_ZoU#w?Y=pn@IEp;swSl_XD7csKzSdV{5ZuibRVlS=c*mC1v2W(sfa>?&=C`Tk-0 zEgU3gpwVWjmqF-6V#R4c3Fe@8$J-S`khh0Ufykp2Htv_7ZiPv477E%EH zN*JWMSKfvSO+9ZfpLCMhaLZrpG~SB0w%8*XEOZv@MPW{EA)#ASKnk zseHbO$ECrPoq%TtPxQj!(ScvrSfeTPBmO|+$0=1;tEl*s%Oe+QbTv>MPBn&3&;1!i zjxmwH^t$6U*Ib*j3Zu2Mu~B7Hd$Yf5h!b%Z%XIj zY}oM*j(upfTwcjaKuqqn$%J=3%g4kpfX2BUdXZhDy~C^Go@Dld@vw75QE~eTO+n0N ztUcyCqxZlQy6$1-o4C0@veiM~nL^lMp*`FdR%f+0AMzR&u@{U+w_99g&v1yc2y4_k z?jmZBAI6yP?d=fH_;Ao4mHMDcr0+D2OpB)&>FN3XBL5sn^o0v&h*obk-=vs3GF^{i z@)SON^KfCSpPKbt?ceN3u_{<@!k8>_(v0Qvj4BRYG<@Nk&5c}^`x#Yy;TIb|$Do== zBMGFdYTFWjtHOJMfw`}bxUpBI8|-ap?5Lc-NY|j$QJ5{X0QzM%>HQ$JhR)xYY7WF>phT00h zQgkT|q_Em5=?^uT$qu{|$5ec6;`K2e@*2kK)E|R=eip^t_*8Dkgrdlcqg$@oiMfsO|^%uss zj#=23)yaNs4bo>0S*PmKmyrUm$>^wh*B~3`k?k&+2UqFunmdDv#g}Fd@4Tc2+Bj5V zE_KPPiVFu+yPt3zf~h>$u-=u8?QB#Yl)=7dgf<6OSTU&zqP18JkInwK{V|Y zC-K^E%LLKjpz}G614*M%)5w>f#?m^XIN>v@L&b5{OG`gJ<-HT&Y`EMW;*b-vzaR2t z9BTS)56F4S&0prA38OQbZ;J95b6E0Yp5nj}0) zPqRg9nmgjh$)4%96xpK+K1{5MLEXu-_0mORAtt^G&71PG@!dc**1#X+SE(a16tw6u z@|D2~FNAZD3ff-yzI8AlIHX>c<^Wx%)_-X;2x7$+(erE@G5@-_N1{#s|~1 zls?@&-L~s%3l#lc27$5iiU@v0-rDL!R11l27Wo`8QtFdYcri zA3f!59!!j1#CMJBiTYGh37W^Cx4!1#PvBT5VSj8u=O>M=Gt!7ckEg4$5x0kna*FTG zv5nM}xO5rl<UAamd?osK8CUswl zG4(zl#%)7F8MWS{_~X!#Ph@rpN^Cxd=arY!!WS*L(vq2YXV{z&jfBO2Q@3@T1V2S0_72|P-2wzBf zh?23h`-w~)b#O%!BkTK;qqlhNy!5Kk;27U|Xm#zm#Vg63lnx0`Ld5=k!Wud`j43i% zm-=9leBPe|>7fRbXlojTh)fH4kCFr$>{hK;(PyYG(Y8FH|fpow@JQjgsO!u~Q60 zZnCEcUGfb-u{r<8oK6X%ru?c4hP} zuup{bW(Z~}{m}Y8NAz^ls=p$v`sr5yqqa~2w6f6D&FLq)3ueQF+%Kg+-|@%NSA1C( zBpPjvELn#kq8{0?npPw7B9kCp-4#hoVpS4pV3;QTT8}}a8@}I5NR?^rsJ5sd(_*^V zSH~KR^PZrt`0}?ThMb23;gfj2Ya{BHyl_j#!+L5&xQC1-zlZ{7_No~Fm%QT2_Iqj+ z3Av&pipa2G*0FEiwDdA4`Ln_cZFVfV(6peelQoWJTXR!PL0(|k(yhefXw1r{M-IQ2 z8UMg%D0v|2Z)A1gVl3E{W!*y*DP9$vNy3woq?jQj8;pUdl|Rd(>nIDuDCxyhCRLo5 z8$R%Shnr@6~nu8!6!WvyO2lJ};(b zz4bFWnMvEa495X7XUzQe1e4*wl>KN}JX!nCqcdkQee7acMtf|=mBpGPwKFlUVd0HU zEcW|kUA$ws)VT{qhVzud0mZekKY6Mz_Erb@9%q9&ucAy((5L|!FmVlL@hq+NVp2H? zrU`Ww%PHiFF2W#Cw%ALV;(3>UEBpGct#h{a9~M9@uaYQrz!pU$zRO2$@<>XaYbzu} zEbqLc_~fFtkyz~bMrlg9TXSP8!`|@*6T;x2E!eKFXdc-?F5-vQ>{mmV(M|u}hZ$IM z!SPL{b?hijvViI$?UfnF$ORerah&*e*Utl@OY>b*CdE;x2Wmtq%Y$g;JpKW@y7f$w z>)7_vmjqReP8CNY$(fH??c=3l%4PyRcio)IQG={&qf)tyQJ~GFIwW%^zd2fV-0vbH zTgWYy@J(#$*rpC^X9KIV8ssi_-DYOLd=t*0#GU-|q=y=^&a>Yh<{>aYT=qD&lVCA0 z)n(%98^(QcGFOzBkW|t}FwL5#TdLllRN9|Sy9(Di115~cPLOApB(ZM-@% z+>2v#-DGAwitF~yjDNU@_-!a))_=3^$C}#Sva*6_uJ{IlWI+PuJTh-wr3#hN^tytf zD!ssN2^K?EjAb)(%ty%xJF+Hm!To{eC8JP-%-BfG`cCF6$rCe!U4=SD?8ncY zfT(HKoNlxbP&83kH-DZP{l4ud?W$S{fB ze(HSQ-opt3WSZb_Q;UzQXEBwUNsrpi7QIszZ-je_h7lQPf60F$Ig$M4C>{?abLx5g z_#-!nQcLr5+(_Af2BOJw>x$Vc+SD_VbH<#y^wVUM<%C?o zkNEkGg57=)RY(DygzW?D=pSsRM#Dtk6Bon8hv!eqJU0be!Xl-)47>Aw>K?ePm0%$vc zFpLRvKwe;~#eF@LS)|0FPA%B3Ys!CNcAwO9#^VK_*-V(+8t&R& zaybya{>(faO0&~Ov_B=9iQYW?L7yPe>TZ;)Hy8%X&4x8IqDIPOIhTJ$F;0!~t{HX1 z3|Zb^TC~PpsM6n>bzJs*!pS9d&my-BGm;#xipa9=<7&ym+o3CJI$!T3%CSh%38Q!M&^AN~1J?ImW$UOf-hX&-3pWVn^T%yt zUle7-B6PH`kE9F8DK_0pGEw2NokRV&h|DeO_<9?+>ry3{(};$ee6}nl#o1?PyvIJ? zLvU*+BN6A~OZelC@vhKmHqILiI_*T1?Ds|0s4o?j%XCB!;&Nr9@Td&bg)sZG=#S;tD5%~G{=Go_4R@-pq(h_2rz3TAzr&>2AY!@N^*v~1c%Ym+?Vp+hXNzLNuBZ>{ZsEV`b3Io2Fj%U{VBq!YZ(+mI!E79;~}v_0_aPJ zs1sf_kN2BDR#fu>7D?7aR?IfX#`x#R!`elZ+Ij> zBuG?|yMo1cbb?}SV!$au^@l23ylNBKgA&-dB0jyvg+fH^rsE;qj!NwP(;Sb=cU(T- z2)epCEW_1onBgJ;pnY0sc}nx9Cq5WPi@g0caFQ@^^5MMg_2aIM>>dTLlZZJY2>aj( z_+5fZ^JMvA6+_18y}2Hc7HGNN!GB*f!&+TSw-I0dl;ltj;J`e<#VYRIB<6?r8-Y%S zM5lTI=s;#ElHzP*^M&Rk`>?|UUfM_ znvU7>2UB$z3m|mL3;G4iyL@ORWmlhapWRdFQJSUpD0X~j?6cXP6%K9FBfF1(p95f% zNJ8!*<-kD=Rx5-TE8)h#Wx;wDMC5Q>cX@5OxMaf?S7rr_lKC=a1drv=(x7}$STji7 ztH)E_ukj)&!Gs0gdPwlpY$KnmmqTmwcbXeE_qn*p2Nx|KyO2>s66^i`f*{fo%iBAF zB!Sdn<>Ae%&=E2LxlOk;#nORqk-=%W=DZLc7y$kZ18D{Z5%IpE0$Axvz$}8l0so2tkSQ@*H#jR8lsJr6Y%4_>0dEaDx%UFej{!*R6;hS%2X~M<4?tRd z&aan28OBhc4te|mWY>XlS54x2t|W9T(N(YOrsFZ|U<;MwZV$IRY22H1k-*(DS7Ri$bbL*+wQ!v;RqsA} ztRljIYFoR*5+gmz7HrRbn6;Js_@ytVN1_kKgxuJc%3n9dR{T_pdLZQw># zJEnUX^(ymkEc@bVYI1KxL<9LY(YFz6R0#%3N#I}KGq5A9pk((aagY3ou%T?P$LeEey~_yTl=X}WfmDps;ZC5 zm}`p+)G>A5>wG9n%iZVyU1RyuP`SvgDfQa>D_FgGBHheZdsQXJ_#z8g3)E{0j1p9g zxvX2QN%Rr(O@&2v@(w&Xn(JJmf?x_{@C#>gGargIB##WGdZ9m!WK2dHR{f|dR;mby zX_M|#sZfy@&hvRFh-n{w3*s3;D5&$ZpY1lvf|BbcX|1)aWY$sstH1Rmup*TY!tJVD za$}jBLvra9OJXbST%87B5*alV4vJtHS)r+A(;TueB4mYVoTYl-c+ASu>{58#a0LNA z9oXi3M?9?rPG#u z_jGhz?iW8Tq*B05Jy{sc|Kqzm4z=}T-R}q~qUDU*07k2&{=A74+?c_An&=T(ndE6B zn$sc6T64ZWGd*!ST&eeLPhXs64<1hyiyk^wU7T|5?(hd%=L%|@et5x;^rbglq>eK! z@5r2ZBZnTbwp?b`u2(f{)H|6T^hAUnr8jF_Pn}NcIXaHK75Csvo%ijzzCQltu-Dnu z(ZRS)-!$J;HsT)Vj4_;e2s@bg!`P`gup4IyPpECi?{zkTFE@WmPPy~F=K9)b7~-Ra z_XyzEdws)o(ri=x&x|%X2f5s_Z@z`1PMF!X8_^h|IG`Q8R34VA)^T(|F=8aeL_FRr zul;p3Hu9)CRKmG3ad}bBQghp0_NbZ{qj=z*J7RGU3&3B{cGRD7si8x#-iAPX!y)26 zWZHH9;v+2x9Uq>zg=`KiIH2}w{L`mL)B8{`HbW^|GE~Cx)ltFFOj))3*jl;_sVoV{ z3N?r^y$g%_(KU1zrhXuC5PyS4fSsKFg8-9AJ-Rx}a^XwIJlZPhrmAS;Uu(Yw>hk5M z1fSaE`(`}I&8@N|X%Ws1wE77K6I2GLyZ?w^%(C#7q$Z(zAN_E0iX~@B7aeI#52n8s zdCAY8kc*!X#mtYXx3l2&Ss=|KI@mf=b;E8uxZ;}p;CP$8xG{_uEeT6IOwj>tGJp8E zwEMVsJSh8HEJH)R0ZiS%*tns%dOxjLQS=te7Y>a~1boR0jZVtkAd>XiQ)>hot8a2y zAq9Cc+IX^QJz5oH7`!1ymF&i;3IlXlSXhIw=$={4iFPleaEbWk-Oi$C8gl|1nGMwJ+v5qWfbRYj7|o(q|w; zA^uzKkjAv@;q@=cV=j3Ytzd!#aip?NnJS06hd0s0aG=RGP%>qn*4HD} z!UFEHJ%_8v8RblG5~++kx~n62NCNBoEd%O_`fUJeuEZ0xF=u8QOnvZOUp>!cRF8k( zwW*V>*4fwdv_hx25$XP|Z*RH&VF7D0)x`BdXZP&oH>n|`+t)VU1Hy&GB-9&+maq?F zah#+iHFKT#O8N0WGy8PN-tLY8<){bdhy`o#Y8WeC6d!^tc!-bz5bg37$JR}h)Hrt=IxrlrRRM^aD2;jp)BGm$`6U;yV~=J%)cJWMCtuHc zh{<;xYd#F7(`f8FFDx%kQ4MC$1>mzW_az9*dkTuLvEHyYX<cJh31WsJHV)P6uo zw{^ZTzq+`~br+#AO?9rw9XUmq;uTX#xQiA^z@c{Bs=~!j2#T#K{>&-;=>H47t-c*| zgGa1o?WIg@NQlXHa+U;Q+hxCOiVyuAWE;d7J{g6aZ z*;JC(R&`e{kl!>mirCCD@KSh+1!ow=^}?N3p-$$*QLlzX98{MwBmYP>&CO4lC7iKG z%U2Up7#X;7Ob14J(@Q!|BIHn~o{SmN9KM`Ar#r7gV}Uc-x7{e69VSF(YdY=6H`FHr zMl|#a0`wTfZ)O98Bb>A<3O6z=_2DEMn6<|!+xwqPqvkZx=@{XAPIwPh7=%z$C;d-& zVzgv=d+RYn^5+SkKL5BstiOIgcA?Wd#9 zJr>E@_uDkcgS$5g?*?rvkIc(Et;y7wUH&9*diG;V6-@>^Zbq%TrmGmaSZT^zj?{5z z;4O;)$M-}s&+p)Thf?fxwr(h$pF~EM3z6k`HnM(FX4&rK+BepT;f!+4=uhNJB!<<{ zjybkFlAAUfSsd++4^9Z|{g53@@!7<1J-z>ZbYrWsAI8)0I9Qb`J(7hJc zeg&b&G*(X6?cM5Iir6hqE2nkxU6LW^pD_06wkr{Jy(Z;YO^k4s825^kY(_KM4e5L3 zU78|)$kxX4HU}GZ-Rib$lPp3rFn64LEhovMbI#i{SL?aUafW(2F1TF@NYF~=Bm?@2 zmx6aWkxXES(u{AK+A2!Akni%J)9P)N?{a)x2`6v;J3-&a7G4tUw_UEwk zES(!gj#&`2`SXFt9}&P{;_43k=8=@m6O-c=-> zc`Dboj7Gej zkA9||0-q@RU#wqK7dFoakeGUv7WuCIIMjI5vfg1_(@qW%#b+a)ylEsjQBR(H(&-8k z=Z!y7@5OXJyYg4YRBvrnkgXuthtyjy&l&5euZs>fDiULj2^PU@k+6;{Jg;K7!Ya^& z^wW(>;Qxt({S#E!^jB^E>z8{DH~Sr}TP+y{;!xBn7x51H`E#oDblUlKUeyUx4@-Lv zMJY#P<2Pi7Nz62ES}VZH>RwlU74HJASpU>UwJYX8k|0PVp@zi9kKw9Pse16dG&E=R zDA1$HN4b2V#*J$r2RCy_w?3oYUB6C!QTbcHE-b&t*fy`LLkig*w4i^UdKY|1>E{`& zmf~c~s%?XlR`xaSh}8V>wy50(SF|KYc;U#FcpK_-EB-fAR39bByvR=c^*8a>S3U)_ z%P31r`@(16)F;G$)bd$dR?zwNQ?HHpONj(NhZKo((#)2(@z2A9xR^2NTXlvnP2ZBo zxTO2YnT)EoaT>qcSOW<>DkXPyZ@5$yuaz8T92D6Oo*XopYilZ$!sB~+x^^@(fRge< zt7F2Jc180hJ=J<_5hs7H^4p~P^cMQGb=mv$lDur+U$bI#%=afw&6#g2g=`)27{2Rj zK^xgkGTRwT#QBq_b32`$tDd-{aJ=G?niEieovHPKMsrGKDo0FNy;vN2b$0qms+qp7*CzTA)# znlHAjyoE)*1)Z))e;1lZFLs7`=#Cr#GBdrnNOTD zOZhrgCR$UyuLv2YIt=0!=Gv9ZY2j`0Y>vQ^2()^qbkh6i##=T)>iva zAB8h*MXw|EMs2V@B>Mf;j(l#JP-ok~U9w;D7h<5|(>K6y8OO}mL;Yok6mAsf@}Xws z4vsW;r7qlC6yhXou>`^bogm4p^9X#gE*K!|Ryb`CihD_oY9;y3QZkye?Mf8LmqhYF zM`hfY0Tf|TiU;#=O6LotV<265;+2v+>XDBT7+;Qtix{{W7xaz@3p~y( zg>>Iq>Cw0ltj?bFoQSkEW2<$-o7b@Xe1-QQlln1*owpXo<<|06jG)W@|L5W?u` ztO3*q^l={rpdQgJPnCcCiR13jq*mVvHwVvGiW=JK5mwMwipVX=D7X0SJ@`T|SXE$L z2rBG;Frvgq15kBd%<%)jXFycrfm+?YmH*Akiv(!5E5>XD!%eVSKs%BKRxQlGQ|`;4 z?AVkq0-(!|0XWJWXouDOCI$e5puF1`kj=od|F#pZ2$TT?e13ldG*OUG|8LqXFmZSN z@)s7t*%O_AQ-mO(J$N8iF+TL8L4#qBcvxr&wG4lP&41_*F`$^pZ*~6lh5&qJ1Mb6u zp?p>Xe1KduY7Dh!a!mkohBa{Q^gtX2F%1tyE;@@3_!c!kC!oDsQ@bAtdLIu06W{f_D07pU8a^tZA#nm#jlW0Z39pC|8 z73Lk2&wp%W8{mh}BgP+IaQo*^Kxu@Em!1tEWdId`gDnK+^X;aU^{>%ze*k_ju#&Fb z3vPEOLZVv5PzopoYYznEe-)2FAbdYESo#zIJ4-&Nz5Cl61gxDTpwb)^mCyj^Kvu;4 z0bswt9|G+FaQ}Zml^Uqcf`DuHz&3&eta#y1UV1zyTCWHK+Tvma6ABU+NZ;OZ1N??) z^)>)cXB%Kg@SsgsAy}OIc*~tI?Gx~5e@~Nx^2l2NlYb27<@)>h3nT!aUEPHVvY{3E zCx4LR)DzGL*S-VP1EkGfaKZohkF*1H5Z2rpiwow@Fkq9OAy`lz&-g1|B=84bdz)oU zaJv$~Kc9{AKOp-4P8k|_(_)m;(Lx35`~Rp30Wx|eU_ce=ujtPV1FA=~SG_$R{`mKC z2M6cJoJ|4j%FnDC1~Z!*B+jQ~CgW1t|k4zyVS zQn*xTKw)1Kl7e~%4NwlyA03SA05;F*uXwG-00G8dX|bOP00c_)#OU@4+}}Ha)Wmki zR?_dR|G)Ws|1$Ht6#PJ%FhD^39%RWgy|DnjL8yqub0A_sO5p-%++AEN0hs@hfVvCZ za6yRS{xkUhr&=LE4?PdsU-|(F2@t-6jM>eFfPm!|=KCrK{Cd>z`*Q{`K5+B|<9#0l z33%*%JS1`^yyCR-_s4&c_y1B_5ovK1gZ#tFt7mD(0>=4&6+%2nMO$QA=J@-7+W^38 zCMa*PtX=@7vAXokX3)&|AXW`M+`;!n{{8c+;VXWSm-`!VxZ6Rd)Gza$;F(b%$4XA| zg6l6=K&J8@=pDc8tvMuEGr~c2APpF4QU3}C(9XyinD(lESS?_zzn?@vb&~9t|G64a z*++6OQhI(cuYh0uS6`;Z3;O~VOad!lOA?Sr|0D}~TpUje=AR_OKB2A_W}{f_(i3 zOgGqE8c!vPfJ`|p>}^WO)?s|qEeoOxC)JV+47zP+P; z38rTlFg^I93pZx4uL6!5=mGRtYCybwUJ=-Xd__%mEa3gX*3`=l5C~(p{V%vF01qh0 zJsUF+8*{6G*f^Wj)eiPXko*9HNXtu~*E3bn#viA0v;6$Qw&msq+UbFYQhuI2z_a!V zgn;T%zVqs%*ArL(_#oeDDGKTP9Qp91l7ZnjgmJaO{qcd;Q+(7E#4n#i z{R>w>0Un5aU7iKF41~gez7#Z{Ppm+DhSdVC5qLZZP^>|s7WZ_J#lkcoR$<&4 zK_h}62dteB6KM*swNnbrj}egiV($ehgBMoNVcgJxMo47eNuT8b#y|1E!uwlWwRZL^ zt%u1sL-6mL0e0LDzUBC*t-um|O6DZ>{Xg><0jefpm{5e=Joldnc)DdjT2K`GJL6VB z{EUeTaLwR$ua|)M{<9DPd9qSKT|N0R*1+b)2b_p98mD9=1}h&BUd;gUG^Kel{Sz+~ zV4sMk!{BUqU}*tl$6xThzWCP+TF8a|9tK}e3jxgzNW+1^%K;q7f#onz?#M`vikbLX zTi*iH`6ktg_RlzAftA%%sWLgs^U8=C5Z_8UP*n^Z$X`Hy1r?%w^W*K`Gjg84@e=v87#1MA2AKCx9jSjSQ5V4b+`dLw0C@4&!6C%~^o7+G$AVw)xW54H(Vv{&0!Ik{ z8e{M(jrgy4tC6msARr)~p7QPmLV^FlfYuUF5O3-ONsNu4Nr1mV2=hzu J74v-a_&-KG6|(>U literal 0 HcmV?d00001 diff --git a/recorder/Streamrecorder.py b/recorder/Streamrecorder.py index 8e90997..9008efa 100644 --- a/recorder/Streamrecorder.py +++ b/recorder/Streamrecorder.py @@ -2090,7 +2090,7 @@ def refresh_recording_info(): # Persistente File-Handles um Open/Close Overhead zu minimieren handles = {'live': None, 'session': None, 'session_path': None} - def append_chat_log(username, message, emotes=None, badges=None, color=None, reward=None, event=None): + def append_chat_log(username, message, emotes=None, badges=None, color=None, reward=None, event=None, meta=None): now = time.time() entry_base = {"user": username or "", "msg": message or ""} if emotes: @@ -2113,6 +2113,9 @@ def append_chat_log(username, message, emotes=None, badges=None, color=None, rew clean_event = chat_events.sanitize_event(event) if clean_event: entry_base["event"] = clean_event + clean_meta = chat_events.sanitize_meta(meta) + if clean_meta: + entry_base["meta"] = clean_meta try: # 1. Live Log (WebUI) @@ -2215,9 +2218,10 @@ def append_chat_log(username, message, emotes=None, badges=None, color=None, rew last_ping = time.time() while '\r\n' in buffer: line, buffer = buffer.split('\r\n', 1) - if line.startswith('PING'): + irc_cmd = chat_events.irc_command(line) + if irc_cmd == 'PING': sock.sendall(b"PONG :tmi.twitch.tv\r\n") - elif 'CLEARCHAT #' in line: + elif irc_cmd == 'CLEARCHAT': irc_tags, command_line = parse_irc_tags(line) parsed_event = chat_events.parse_clearchat(irc_tags, command_line) if parsed_event: @@ -2235,7 +2239,7 @@ def append_chat_log(username, message, emotes=None, badges=None, color=None, rew source_channel, chat_exc, ) - elif 'CLEARMSG #' in line: + elif irc_cmd == 'CLEARMSG': irc_tags, command_line = parse_irc_tags(line) parsed_event = chat_events.parse_clearmsg(irc_tags, command_line) if parsed_event: @@ -2253,7 +2257,30 @@ def append_chat_log(username, message, emotes=None, badges=None, color=None, rew source_channel, chat_exc, ) - elif 'PRIVMSG' in line: + elif irc_cmd == 'USERNOTICE': + parsed = process_twitch_message(line) + notice_text, emotes, badges, color = parsed[1:5] + irc_tags = parsed[5] if len(parsed) > 5 else {} + notice = chat_events.parse_usernotice(irc_tags, notice_text) + if notice: + refresh_recording_info() + try: + append_chat_log( + notice.get("user") or "", + notice.get("msg") or "", + emotes if notice.get("msg") else None, + badges, + color, + event=notice.get("event"), + ) + msg_count += 1 + except Exception as chat_exc: + logger.error( + "[%s] USERNOTICE-Log fehlgeschlagen: %s", + source_channel, + chat_exc, + ) + elif irc_cmd == 'PRIVMSG': parsed = process_twitch_message(line) username, message, emotes, badges, color = parsed[:5] irc_tags = parsed[5] if len(parsed) > 5 else {} @@ -2335,6 +2362,7 @@ def append_chat_log(username, message, emotes=None, badges=None, color=None, rew badges, color, reward=reward_meta, + meta=chat_events.parse_privmsg_meta(irc_tags), ) except Exception as chat_exc: logger.error( diff --git a/recorder/chat_events.py b/recorder/chat_events.py index 6c2aa8c..d912061 100644 --- a/recorder/chat_events.py +++ b/recorder/chat_events.py @@ -12,7 +12,238 @@ r"(?:^|\s)CLEARMSG\s+#\S+(?:\s+:([\s\S]*))?$", re.IGNORECASE, ) -_ALLOWED_EVENT_TYPES = frozenset({"ban", "timeout", "delete", "clear"}) +_ALLOWED_EVENT_TYPES = frozenset({"ban", "timeout", "delete", "clear", "notice"}) + +# --- USERNOTICE (subs, gifts, raids, announcements, ...) ------------------- +_NOTICE_KIND_RE = re.compile(r"^[a-z0-9_-]{1,40}$") +_NOTICE_PLANS = frozenset({"Prime", "1000", "2000", "3000"}) +_NOTICE_COLORS = frozenset({"PRIMARY", "BLUE", "GREEN", "ORANGE", "PURPLE"}) +# Upper bounds keep a forged or corrupt log line from carrying absurd numbers. +_NOTICE_INT_CAPS = { + "months": 1200, + "streak": 1200, + "multimonth": 120, + "gift_months": 120, + "sender_count": 1_000_000, + "count": 100_000_000, +} +_NOTICE_TEXT_FIELDS = ("recipient", "other", "charity", "amount") +_NOTICE_TEXT_MAX = 80 +_NOTICE_SYSTEM_MAX = 300 +_ANON_GIFTER_LOGIN = "ananonymousgifter" +_ANON_KINDS = frozenset({"anonsubgift", "anonsubmysterygift"}) + +# --- PRIVMSG meta (bits, highlight, first message, reply, power-ups) ------- +_META_POWER_BY_MSG_ID = { + "gigantified-emote-message": "gigantified", + "animated-message": "animated", +} +_META_POWERS = frozenset(_META_POWER_BY_MSG_ID.values()) +_META_BITS_CAP = 10_000_000 +_META_REPLY_USER_MAX = 80 +_META_REPLY_MSG_MAX = 140 + + +def irc_command(line: str) -> str: + """Return the IRC command of a raw line (``PRIVMSG``, ``USERNOTICE``, ``PING`` ...). + + Skips the IRCv3 tag block (``@...``) and the source prefix (``:...``), so + text inside a chat message can never be mistaken for a command. + """ + rest = str(line or "").strip("\r\n").lstrip(" ") + if rest.startswith("@"): + _tags, _sep, rest = rest.partition(" ") + rest = rest.lstrip(" ") + if rest.startswith(":"): + _prefix, _sep, rest = rest.partition(" ") + rest = rest.lstrip(" ") + command, _sep, _params = rest.partition(" ") + return command.upper() + + +def _clean_text(value, limit: int) -> str: + text = " ".join(str(value or "").split()) + return text[:limit] + + +def _positive_int(value, cap: int) -> int | None: + try: + number = int(str(value).strip()) + except (TypeError, ValueError): + return None + if number <= 0: + return None + return min(number, cap) + + +def _charity_amount(tags: dict) -> str: + raw_amount = _positive_int(tags.get("msg-param-donation-amount"), 10**12) + if raw_amount is None: + return "" + try: + exponent = int(str(tags.get("msg-param-exponent") or "0").strip()) + except (TypeError, ValueError): + exponent = 0 + exponent = max(0, min(exponent, 6)) + value = raw_amount / (10**exponent) + amount = f"{value:.{exponent}f}" + currency = _clean_text(tags.get("msg-param-donation-currency"), 8).upper() + if currency and re.fullmatch(r"[A-Z]{3}", currency): + return f"{amount} {currency}" + return amount + + +def parse_usernotice(tags: dict | None, message: str = "") -> dict | None: + """Turn a Twitch USERNOTICE into a chat-log payload. + + Returns ``{"user", "msg", "event"}`` where ``msg`` is the user's optional + text and ``event`` is a sanitized ``{"type": "notice", "kind": ...}`` dict, + or None when the notice has no usable msg-id. + """ + tags = tags if isinstance(tags, dict) else {} + kind = str(tags.get("msg-id") or "").strip().lower() + if kind == "sharedchatnotice": + kind = str(tags.get("source-msg-id") or "").strip().lower() + if not _NOTICE_KIND_RE.match(kind): + return None + login = str(tags.get("login") or "").strip() + user = str(tags.get("display-name") or "").strip() or login + event: dict = {"type": "notice", "kind": kind} + + plan = str(tags.get("msg-param-sub-plan") or "").strip() + if plan: + event["plan"] = plan + + if kind in ("sub", "resub"): + event["months"] = tags.get("msg-param-cumulative-months") + if str(tags.get("msg-param-should-share-streak") or "").strip() == "1": + event["streak"] = tags.get("msg-param-streak-months") + event["multimonth"] = tags.get("msg-param-multimonth-duration") + elif kind in ("subgift", "anonsubgift"): + event["recipient"] = tags.get("msg-param-recipient-display-name") or tags.get( + "msg-param-recipient-user-name" + ) + event["gift_months"] = tags.get("msg-param-gift-months") + event["months"] = tags.get("msg-param-months") + event["sender_count"] = tags.get("msg-param-sender-count") + elif kind in ("submysterygift", "anonsubmysterygift"): + event["count"] = tags.get("msg-param-mass-gift-count") + event["sender_count"] = tags.get("msg-param-sender-count") + elif kind == "giftpaidupgrade": + event["other"] = tags.get("msg-param-sender-name") or tags.get("msg-param-sender-login") + elif kind in ("standardpayforward", "communitypayforward"): + prior_anonymous = str(tags.get("msg-param-prior-gifter-anonymous") or "").strip().lower() + if prior_anonymous != "true": + event["other"] = tags.get("msg-param-prior-gifter-display-name") + event["recipient"] = tags.get("msg-param-recipient-display-name") + elif kind == "raid": + user = str(tags.get("msg-param-displayName") or "").strip() or str( + tags.get("msg-param-login") or "" + ).strip() or user + event["count"] = tags.get("msg-param-viewerCount") + elif kind == "bitsbadgetier": + event["count"] = tags.get("msg-param-threshold") + elif kind == "announcement": + event["color"] = str(tags.get("msg-param-color") or "").strip().upper() + elif kind == "viewermilestone": + event["count"] = tags.get("msg-param-value") + event["other"] = tags.get("msg-param-category") + elif kind == "charitydonation": + event["charity"] = tags.get("msg-param-charity-name") + event["amount"] = _charity_amount(tags) + + if login.lower() == _ANON_GIFTER_LOGIN or kind in _ANON_KINDS: + event["anon"] = True + system = str(tags.get("system-msg") or "") + if system: + event["system"] = system + + clean = sanitize_event(event) + if not clean: + return None + msg = str(message or "") + if msg.startswith("\x01ACTION "): + msg = msg[len("\x01ACTION "):].removesuffix("\x01") + return {"user": user, "msg": msg.strip(), "event": clean} + + +def _sanitize_notice(raw: dict) -> dict | None: + kind = str(raw.get("kind") or "").strip().lower() + if not _NOTICE_KIND_RE.match(kind): + return None + out: dict = {"type": "notice", "kind": kind} + plan = str(raw.get("plan") or "").strip() + if plan in _NOTICE_PLANS: + out["plan"] = plan + color = str(raw.get("color") or "").strip().upper() + if color in _NOTICE_COLORS: + out["color"] = color + for field, cap in _NOTICE_INT_CAPS.items(): + number = _positive_int(raw.get(field), cap) + if number is not None: + out[field] = number + for field in _NOTICE_TEXT_FIELDS: + text = _clean_text(raw.get(field), _NOTICE_TEXT_MAX) + if text: + out[field] = text + if raw.get("anon") is True: + out["anon"] = True + system = _clean_text(raw.get("system"), _NOTICE_SYSTEM_MAX) + if system: + out["system"] = system + return out + + +def parse_privmsg_meta(tags: dict | None) -> dict | None: + """Extract Twitch-only PRIVMSG decorations (bits, highlight, first, reply, power-ups).""" + tags = tags if isinstance(tags, dict) else {} + meta: dict = {} + bits = _positive_int(tags.get("bits"), _META_BITS_CAP) + if bits is not None: + meta["bits"] = bits + msg_id = str(tags.get("msg-id") or "").strip().lower() + if msg_id == "highlighted-message": + meta["highlight"] = True + if msg_id in _META_POWER_BY_MSG_ID: + meta["power"] = _META_POWER_BY_MSG_ID[msg_id] + if str(tags.get("first-msg") or "").strip() == "1": + meta["first"] = True + parent_user = str( + tags.get("reply-parent-display-name") or tags.get("reply-parent-user-login") or "" + ).strip() + parent_msg = str(tags.get("reply-parent-msg-body") or "") + if parent_user or parent_msg.strip(): + meta["reply"] = {"user": parent_user, "msg": parent_msg} + return sanitize_meta(meta) + + +def sanitize_meta(raw) -> dict | None: + """Allowlist filter for the optional ``meta`` block of a chat-log entry.""" + if not isinstance(raw, dict): + return None + out: dict = {} + bits = _positive_int(raw.get("bits"), _META_BITS_CAP) + if bits is not None: + out["bits"] = bits + if raw.get("highlight") is True: + out["highlight"] = True + if raw.get("first") is True: + out["first"] = True + power = str(raw.get("power") or "").strip().lower() + if power in _META_POWERS: + out["power"] = power + reply = raw.get("reply") + if isinstance(reply, dict): + reply_user = _clean_text(reply.get("user"), _META_REPLY_USER_MAX) + reply_msg = _clean_text(reply.get("msg"), _META_REPLY_MSG_MAX) + if reply_user or reply_msg: + clean_reply = {} + if reply_user: + clean_reply["user"] = reply_user + if reply_msg: + clean_reply["msg"] = reply_msg + out["reply"] = clean_reply + return out or None def format_timeout_duration(seconds: int) -> str: @@ -53,7 +284,9 @@ def sanitize_event(raw) -> dict | None: etype = str(raw.get("type") or "").strip().lower() if etype not in _ALLOWED_EVENT_TYPES: return None - out = {"type": etype} + if etype == "notice": + return _sanitize_notice(raw) + out: dict = {"type": etype} if etype == "timeout": try: seconds = int(raw.get("seconds") or 0) diff --git a/tests/test_chat_events.py b/tests/test_chat_events.py new file mode 100644 index 0000000..6a04a94 --- /dev/null +++ b/tests/test_chat_events.py @@ -0,0 +1,414 @@ +"""Twitch chat fidelity: IRC command routing, USERNOTICE, PRIVMSG meta, chat API. + +Runs with the standard library runner: + + python -m unittest tests.test_chat_events -v +""" + +from __future__ import annotations + +import json +import os +import sys +import tempfile +import time +import types +import unittest +from unittest import mock + +# Same test environment as tests/test_recorder_reliability.py. setdefault keeps +# whatever that module already set when both run in one discovery pass; heavy +# modules (config, webui, recorder) are only imported inside the tests. +_BASE = tempfile.mkdtemp(prefix="streamvault-chat-events-tests-") +for _key, _value in { + "VOD_USER": "vaultadmin", + "VOD_PASS": "VaultTestPass123!", + "VOD_SECRET_KEY": "test-session-secret-key-0123456789", + "STORAGE_ENCRYPTION_KEY": "test-storage-encryption-key-0123456789", + "VOD_BASE_DIR": _BASE, + "STREAMRECORDER_LOG_DIR": _BASE, + "VOD_ALLOW_ENV_LOGIN": "1", + "REDIS_HOST": "127.0.0.1", + "REDIS_PORT": "1", + "TWITCH_BADGE_AUTO_SYNC": "0", +}.items(): + os.environ.setdefault(_key, _value) + +if os.name == "nt" and "fcntl" not in sys.modules: + _fcntl = types.ModuleType("fcntl") + _fcntl.LOCK_EX = 2 + _fcntl.LOCK_NB = 4 + _fcntl.LOCK_UN = 8 + _fcntl.flock = lambda *args, **kwargs: None + sys.modules["fcntl"] = _fcntl + +from recorder import chat_events # noqa: E402 + + +class IrcCommandTests(unittest.TestCase): + def test_usernotice_with_tags_and_prefix(self): + line = "@badge-info=;msg-id=resub;login=alice :tmi.twitch.tv USERNOTICE #chan :hello" + self.assertEqual(chat_events.irc_command(line), "USERNOTICE") + + def test_privmsg_text_mentioning_clearchat_stays_privmsg(self): + line = "@display-name=Bob :bob!bob@bob.tmi.twitch.tv PRIVMSG #chan :CLEARCHAT #x lol" + self.assertEqual(chat_events.irc_command(line), "PRIVMSG") + + def test_ping_without_prefix(self): + self.assertEqual(chat_events.irc_command("PING :tmi.twitch.tv"), "PING") + + def test_clearmsg_and_empty_line(self): + self.assertEqual( + chat_events.irc_command("@login=x;target-msg-id=1 :tmi.twitch.tv CLEARMSG #chan :bad"), + "CLEARMSG", + ) + self.assertEqual(chat_events.irc_command(""), "") + + +class ParseUsernoticeTests(unittest.TestCase): + def test_resub_with_message_and_streak(self): + tags = { + "msg-id": "resub", + "display-name": "Alice", + "login": "alice", + "msg-param-sub-plan": "1000", + "msg-param-cumulative-months": "14", + "msg-param-should-share-streak": "1", + "msg-param-streak-months": "6", + "system-msg": "Alice subscribed at Tier 1. They've subscribed for 14 months!", + } + parsed = chat_events.parse_usernotice(tags, "still here Kappa") + self.assertEqual(parsed["user"], "Alice") + self.assertEqual(parsed["msg"], "still here Kappa") + event = parsed["event"] + self.assertEqual(event["type"], "notice") + self.assertEqual(event["kind"], "resub") + self.assertEqual(event["plan"], "1000") + self.assertEqual(event["months"], 14) + self.assertEqual(event["streak"], 6) + + def test_resub_streak_hidden_unless_shared(self): + tags = { + "msg-id": "resub", + "login": "alice", + "msg-param-cumulative-months": "3", + "msg-param-should-share-streak": "0", + "msg-param-streak-months": "3", + } + event = chat_events.parse_usernotice(tags, "")["event"] + self.assertNotIn("streak", event) + # display-name missing -> login + self.assertEqual(chat_events.parse_usernotice(tags, "")["user"], "alice") + + def test_subgift_with_sender_count(self): + tags = { + "msg-id": "subgift", + "display-name": "Gifter", + "login": "gifter", + "msg-param-sub-plan": "2000", + "msg-param-recipient-display-name": "Lucky", + "msg-param-gift-months": "1", + "msg-param-months": "5", + "msg-param-sender-count": "42", + } + parsed = chat_events.parse_usernotice(tags, "") + event = parsed["event"] + self.assertEqual(parsed["user"], "Gifter") + self.assertEqual(parsed["msg"], "") + self.assertEqual(event["kind"], "subgift") + self.assertEqual(event["recipient"], "Lucky") + self.assertEqual(event["sender_count"], 42) + self.assertEqual(event["gift_months"], 1) + self.assertEqual(event["months"], 5) + self.assertNotIn("anon", event) + + def test_anonymous_submysterygift(self): + tags = { + "msg-id": "submysterygift", + "display-name": "AnAnonymousGifter", + "login": "ananonymousgifter", + "msg-param-sub-plan": "1000", + "msg-param-mass-gift-count": "10", + } + event = chat_events.parse_usernotice(tags, "")["event"] + self.assertEqual(event["count"], 10) + self.assertIs(event["anon"], True) + anon_kind = chat_events.parse_usernotice( + {"msg-id": "anonsubmysterygift", "msg-param-mass-gift-count": "5"}, "" + )["event"] + self.assertIs(anon_kind["anon"], True) + + def test_anongiftpaidupgrade_is_not_marked_anon(self): + event = chat_events.parse_usernotice( + {"msg-id": "anongiftpaidupgrade", "display-name": "Kept", "login": "kept"}, "" + )["event"] + self.assertNotIn("anon", event) + + def test_raid_uses_raider_display_name_and_viewer_count(self): + tags = { + "msg-id": "raid", + "display-name": "RaiderLogin", + "login": "raider", + "msg-param-displayName": "Raider", + "msg-param-viewerCount": "1234", + } + parsed = chat_events.parse_usernotice(tags, "") + self.assertEqual(parsed["user"], "Raider") + self.assertEqual(parsed["event"]["kind"], "raid") + self.assertEqual(parsed["event"]["count"], 1234) + + def test_announcement_with_color(self): + parsed = chat_events.parse_usernotice( + {"msg-id": "announcement", "display-name": "Mod", "msg-param-color": "blue"}, + "Stream starts soon!", + ) + self.assertEqual(parsed["event"]["color"], "BLUE") + self.assertEqual(parsed["msg"], "Stream starts soon!") + + def test_shared_chat_notice_uses_source_msg_id(self): + parsed = chat_events.parse_usernotice( + {"msg-id": "sharedchatnotice", "source-msg-id": "sub", "display-name": "X"}, "" + ) + self.assertEqual(parsed["event"]["kind"], "sub") + + def test_unknown_kind_keeps_system_msg_capped(self): + system = "Something new happened " * 30 + parsed = chat_events.parse_usernotice( + {"msg-id": "brandnewthing", "display-name": "X", "system-msg": system}, "" + ) + event = parsed["event"] + self.assertEqual(event["kind"], "brandnewthing") + self.assertTrue(event["system"].startswith("Something new happened")) + self.assertLessEqual(len(event["system"]), 300) + + def test_invalid_kind_returns_none(self): + self.assertIsNone(chat_events.parse_usernotice({"msg-id": "