From 0374b77d160d85667a1b7d82297e97504b8f548a Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 05:06:48 +0800 Subject: [PATCH 01/10] feat: Introduce Netease Music CLI with CDP enabler --- src/clis/neteasemusic/README.md | 31 ++++++++++++++ src/clis/neteasemusic/README.zh-CN.md | 31 ++++++++++++++ src/clis/neteasemusic/like.ts | 28 ++++++++++++ src/clis/neteasemusic/lyrics.ts | 53 +++++++++++++++++++++++ src/clis/neteasemusic/next.ts | 30 +++++++++++++ src/clis/neteasemusic/play.ts | 30 +++++++++++++ src/clis/neteasemusic/playing.ts | 62 +++++++++++++++++++++++++++ src/clis/neteasemusic/playlist.ts | 51 ++++++++++++++++++++++ src/clis/neteasemusic/prev.ts | 29 +++++++++++++ src/clis/neteasemusic/search.ts | 58 +++++++++++++++++++++++++ src/clis/neteasemusic/status.ts | 18 ++++++++ src/clis/neteasemusic/volume.ts | 61 ++++++++++++++++++++++++++ 12 files changed, 482 insertions(+) create mode 100644 src/clis/neteasemusic/README.md create mode 100644 src/clis/neteasemusic/README.zh-CN.md create mode 100644 src/clis/neteasemusic/like.ts create mode 100644 src/clis/neteasemusic/lyrics.ts create mode 100644 src/clis/neteasemusic/next.ts create mode 100644 src/clis/neteasemusic/play.ts create mode 100644 src/clis/neteasemusic/playing.ts create mode 100644 src/clis/neteasemusic/playlist.ts create mode 100644 src/clis/neteasemusic/prev.ts create mode 100644 src/clis/neteasemusic/search.ts create mode 100644 src/clis/neteasemusic/status.ts create mode 100644 src/clis/neteasemusic/volume.ts diff --git a/src/clis/neteasemusic/README.md b/src/clis/neteasemusic/README.md new file mode 100644 index 0000000..88d027e --- /dev/null +++ b/src/clis/neteasemusic/README.md @@ -0,0 +1,31 @@ +# NeteaseMusic Desktop Adapter (网易云音乐) + +Control **NeteaseMusic** (网易云音乐) from the terminal via Chrome DevTools Protocol (CDP). The app uses Chromium Embedded Framework (CEF). + +## Prerequisites + +Launch with remote debugging port: +```bash +/Applications/NeteaseMusic.app/Contents/MacOS/NeteaseMusic --remote-debugging-port=9234 +``` + +## Setup + +```bash +export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9234" +``` + +## Commands + +| Command | Description | +|---------|-------------| +| `neteasemusic status` | Check CDP connection | +| `neteasemusic playing` | Current song info (title, artist, album) | +| `neteasemusic play` | Play / Pause toggle | +| `neteasemusic next` | Skip to next song | +| `neteasemusic prev` | Go to previous song | +| `neteasemusic search "query"` | Search songs, artists | +| `neteasemusic playlist` | Show current playback queue | +| `neteasemusic like` | Like / unlike current song | +| `neteasemusic lyrics` | Get lyrics of current song | +| `neteasemusic volume [0-100]` | Get or set volume | diff --git a/src/clis/neteasemusic/README.zh-CN.md b/src/clis/neteasemusic/README.zh-CN.md new file mode 100644 index 0000000..9b3e5ae --- /dev/null +++ b/src/clis/neteasemusic/README.zh-CN.md @@ -0,0 +1,31 @@ +# 网易云音乐桌面端适配器 + +通过 Chrome DevTools Protocol (CDP) 在终端中控制 **网易云音乐**。该应用基于 Chromium Embedded Framework (CEF)。 + +## 前置条件 + +通过远程调试端口启动: +```bash +/Applications/NeteaseMusic.app/Contents/MacOS/NeteaseMusic --remote-debugging-port=9234 +``` + +## 配置 + +```bash +export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9234" +``` + +## 命令 + +| 命令 | 说明 | +|------|------| +| `neteasemusic status` | 检查 CDP 连接 | +| `neteasemusic playing` | 当前播放歌曲信息 | +| `neteasemusic play` | 播放 / 暂停切换 | +| `neteasemusic next` | 下一首 | +| `neteasemusic prev` | 上一首 | +| `neteasemusic search "关键词"` | 搜索歌曲 | +| `neteasemusic playlist` | 显示当前播放列表 | +| `neteasemusic like` | 喜欢 / 取消喜欢 | +| `neteasemusic lyrics` | 获取当前歌词 | +| `neteasemusic volume [0-100]` | 获取或设置音量 | diff --git a/src/clis/neteasemusic/like.ts b/src/clis/neteasemusic/like.ts new file mode 100644 index 0000000..1d162cc --- /dev/null +++ b/src/clis/neteasemusic/like.ts @@ -0,0 +1,28 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const likeCommand = cli({ + site: 'neteasemusic', + name: 'like', + description: 'Like/unlike the currently playing song', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [], + columns: ['Status'], + func: async (page: IPage) => { + const result = await page.evaluate(` + (function() { + // The like/heart button in the player bar + const btn = document.querySelector('.m-playbar .icn-love, .m-playbar [class*="like"], .m-player [class*="love"], [data-action="like"]'); + if (!btn) return 'Like button not found'; + + const wasLiked = btn.classList.contains('loved') || btn.classList.contains('active') || btn.getAttribute('data-liked') === 'true'; + btn.click(); + return wasLiked ? 'Unliked' : 'Liked'; + })() + `); + + return [{ Status: result }]; + }, +}); diff --git a/src/clis/neteasemusic/lyrics.ts b/src/clis/neteasemusic/lyrics.ts new file mode 100644 index 0000000..d7b3017 --- /dev/null +++ b/src/clis/neteasemusic/lyrics.ts @@ -0,0 +1,53 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const lyricsCommand = cli({ + site: 'neteasemusic', + name: 'lyrics', + description: 'Get the lyrics of the currently playing song', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [], + columns: ['Line'], + func: async (page: IPage) => { + // Try to open lyrics panel if not visible + await page.evaluate(` + (function() { + const btn = document.querySelector('.m-playbar .icn-lyric, [class*="lyric-btn"], [data-action="lyric"]'); + if (btn) btn.click(); + })() + `); + + await page.wait(1); + + const lyrics = await page.evaluate(` + (function() { + // Look for lyrics container + const selectors = [ + '.m-lyric p, .m-lyric [class*="line"]', + '[class*="lyric-content"] p', + '.listlyric li', + '[class*="lyric"] [class*="line"]', + '.j-lyric p', + ]; + + for (const sel of selectors) { + const nodes = document.querySelectorAll(sel); + if (nodes.length > 0) { + return Array.from(nodes).map(n => (n.textContent || '').trim()).filter(l => l.length > 0); + } + } + + // Fallback: try the body text for any lyrics-like content + return []; + })() + `); + + if (lyrics.length === 0) { + return [{ Line: 'No lyrics found. Try opening the lyrics panel first.' }]; + } + + return lyrics.map((line: string) => ({ Line: line })); + }, +}); diff --git a/src/clis/neteasemusic/next.ts b/src/clis/neteasemusic/next.ts new file mode 100644 index 0000000..73fe244 --- /dev/null +++ b/src/clis/neteasemusic/next.ts @@ -0,0 +1,30 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const nextCommand = cli({ + site: 'neteasemusic', + name: 'next', + description: 'Skip to the next song', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [], + columns: ['Status'], + func: async (page: IPage) => { + const clicked = await page.evaluate(` + (function() { + const btn = document.querySelector('.m-playbar .btnfwd, .m-playbar [class*="next"], .m-player .btn-next, [data-action="next"]'); + if (btn) { btn.click(); return true; } + return false; + })() + `); + + if (!clicked) { + // Fallback: Ctrl+Right is common next-track shortcut + await page.pressKey('Control+ArrowRight'); + } + + await page.wait(1); + return [{ Status: 'Skipped to next song' }]; + }, +}); diff --git a/src/clis/neteasemusic/play.ts b/src/clis/neteasemusic/play.ts new file mode 100644 index 0000000..ee98a0b --- /dev/null +++ b/src/clis/neteasemusic/play.ts @@ -0,0 +1,30 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const playCommand = cli({ + site: 'neteasemusic', + name: 'play', + description: 'Toggle play/pause for the current song', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [], + columns: ['Status'], + func: async (page: IPage) => { + // Click the play/pause button or use Space key + const clicked = await page.evaluate(` + (function() { + const btn = document.querySelector('.m-playbar .btnp, .m-playbar [class*="play"], .m-player .btn-play, [data-action="play"]'); + if (btn) { btn.click(); return true; } + return false; + })() + `); + + if (!clicked) { + // Fallback: use Space key which is the universal play/pause shortcut + await page.pressKey('Space'); + } + + return [{ Status: 'Play/Pause toggled' }]; + }, +}); diff --git a/src/clis/neteasemusic/playing.ts b/src/clis/neteasemusic/playing.ts new file mode 100644 index 0000000..78144bb --- /dev/null +++ b/src/clis/neteasemusic/playing.ts @@ -0,0 +1,62 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const playingCommand = cli({ + site: 'neteasemusic', + name: 'playing', + description: 'Get the currently playing song info', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [], + columns: ['Title', 'Artist', 'Album', 'Duration', 'Progress'], + func: async (page: IPage) => { + const info = await page.evaluate(` + (function() { + // NeteaseMusic player bar is at the bottom + const selectors = { + title: '.m-playbar .j-song .name, .m-playbar .song .name, [class*="playing"] .name, .m-player .name', + artist: '.m-playbar .j-song .by, .m-playbar .song .by, [class*="playing"] .artist, .m-player .by', + album: '.m-playbar .j-song .album, [class*="playing"] .album', + time: '.m-playbar .j-dur, .m-playbar .time, .m-player .time', + progress: '.m-playbar .barbg .rng, .m-playbar [role="progressbar"], .m-player [class*="progress"]', + }; + + function getText(sel) { + for (const s of sel.split(',')) { + const el = document.querySelector(s.trim()); + if (el) return (el.textContent || el.innerText || '').trim(); + } + return ''; + } + + const title = getText(selectors.title); + const artist = getText(selectors.artist); + const album = getText(selectors.album); + const time = getText(selectors.time); + + // Try to get playback progress from the progress bar width + let progress = ''; + const bar = document.querySelector('.m-playbar .barbg .rng, [class*="progress"] [class*="played"]'); + if (bar) { + const style = bar.getAttribute('style') || ''; + const match = style.match(/width:\\s*(\\d+\\.?\\d*)%/); + if (match) progress = match[1] + '%'; + } + + if (!title) { + // Fallback: try document title which often contains "songName - NeteaseMusic" + const docTitle = document.title; + if (docTitle && !docTitle.includes('NeteaseMusic')) { + return { Title: docTitle, Artist: '', Album: '', Duration: '', Progress: '' }; + } + return { Title: 'No song playing', Artist: '—', Album: '—', Duration: '—', Progress: '—' }; + } + + return { Title: title, Artist: artist, Album: album, Duration: time, Progress: progress }; + })() + `); + + return [info]; + }, +}); diff --git a/src/clis/neteasemusic/playlist.ts b/src/clis/neteasemusic/playlist.ts new file mode 100644 index 0000000..323948e --- /dev/null +++ b/src/clis/neteasemusic/playlist.ts @@ -0,0 +1,51 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const playlistCommand = cli({ + site: 'neteasemusic', + name: 'playlist', + description: 'Show the current playback queue / playlist', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [], + columns: ['Index', 'Title', 'Artist'], + func: async (page: IPage) => { + // Open the playlist panel (usually a button at the bottom bar) + await page.evaluate(` + (function() { + const btn = document.querySelector('.m-playbar .icn-list, .m-playbar [class*="playlist"], [data-action="playlist"], .m-playbar .btnlist'); + if (btn) btn.click(); + })() + `); + + await page.wait(1); + + const items = await page.evaluate(` + (function() { + const results = []; + // Playlist panel items + const rows = document.querySelectorAll('.m-playlist li, [class*="playlist-panel"] li, .listlyric li, .j-playlist li'); + + rows.forEach((row, i) => { + const nameEl = row.querySelector('.name, [class*="name"], a, span:first-child'); + const artistEl = row.querySelector('.by, [class*="artist"], .ar'); + + const title = nameEl ? (nameEl.getAttribute('title') || nameEl.textContent || '').trim() : (row.textContent || '').trim(); + const artist = artistEl ? (artistEl.textContent || '').trim() : ''; + + if (title && title.length > 0) { + results.push({ Index: i + 1, Title: title.substring(0, 80), Artist: artist }); + } + }); + + return results; + })() + `); + + if (items.length === 0) { + return [{ Index: 0, Title: 'Playlist is empty or panel not open', Artist: '—' }]; + } + return items; + }, +}); diff --git a/src/clis/neteasemusic/prev.ts b/src/clis/neteasemusic/prev.ts new file mode 100644 index 0000000..f08aad2 --- /dev/null +++ b/src/clis/neteasemusic/prev.ts @@ -0,0 +1,29 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const prevCommand = cli({ + site: 'neteasemusic', + name: 'prev', + description: 'Go back to the previous song', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [], + columns: ['Status'], + func: async (page: IPage) => { + const clicked = await page.evaluate(` + (function() { + const btn = document.querySelector('.m-playbar .btnbak, .m-playbar [class*="prev"], .m-player .btn-prev, [data-action="prev"]'); + if (btn) { btn.click(); return true; } + return false; + })() + `); + + if (!clicked) { + await page.pressKey('Control+ArrowLeft'); + } + + await page.wait(1); + return [{ Status: 'Went to previous song' }]; + }, +}); diff --git a/src/clis/neteasemusic/search.ts b/src/clis/neteasemusic/search.ts new file mode 100644 index 0000000..ae992b7 --- /dev/null +++ b/src/clis/neteasemusic/search.ts @@ -0,0 +1,58 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const searchCommand = cli({ + site: 'neteasemusic', + name: 'search', + description: 'Search for songs, artists, albums, or playlists', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [{ name: 'query', required: true, positional: true, help: 'Search query' }], + columns: ['Index', 'Title', 'Artist'], + func: async (page: IPage, kwargs: any) => { + const query = kwargs.query as string; + + // Focus and fill the search box + await page.evaluate(` + (function(q) { + const input = document.querySelector('.m-search input, #srch, [class*="search"] input, input[type="search"]'); + if (!input) throw new Error('Search input not found'); + input.focus(); + const setter = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, 'value').set; + setter.call(input, q); + input.dispatchEvent(new Event('input', { bubbles: true })); + })(${JSON.stringify(query)}) + `); + + await page.pressKey('Enter'); + await page.wait(2); + + // Scrape results + const results = await page.evaluate(` + (function() { + const items = []; + // Song list items in search results + const rows = document.querySelectorAll('.srchsongst li, .m-table tbody tr, [class*="songlist"] [class*="item"], table tbody tr'); + + rows.forEach((row, i) => { + if (i >= 20) return; + const nameEl = row.querySelector('.sn, .name a, [class*="songName"], td:nth-child(2) a, b[title]'); + const artistEl = row.querySelector('.ar, .artist, [class*="artist"], td:nth-child(4) a, td:nth-child(3) a'); + + const title = nameEl ? (nameEl.getAttribute('title') || nameEl.textContent || '').trim() : ''; + const artist = artistEl ? (artistEl.getAttribute('title') || artistEl.textContent || '').trim() : ''; + + if (title) items.push({ Index: i + 1, Title: title, Artist: artist }); + }); + + return items; + })() + `); + + if (results.length === 0) { + return [{ Index: 0, Title: `No results for "${query}"`, Artist: '—' }]; + } + return results; + }, +}); diff --git a/src/clis/neteasemusic/status.ts b/src/clis/neteasemusic/status.ts new file mode 100644 index 0000000..78d8f33 --- /dev/null +++ b/src/clis/neteasemusic/status.ts @@ -0,0 +1,18 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const statusCommand = cli({ + site: 'neteasemusic', + name: 'status', + description: 'Check CDP connection to NeteaseMusic Desktop', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [], + columns: ['Status', 'Url', 'Title'], + func: async (page: IPage) => { + const url = await page.evaluate('window.location.href'); + const title = await page.evaluate('document.title'); + return [{ Status: 'Connected', Url: url, Title: title }]; + }, +}); diff --git a/src/clis/neteasemusic/volume.ts b/src/clis/neteasemusic/volume.ts new file mode 100644 index 0000000..bef900a --- /dev/null +++ b/src/clis/neteasemusic/volume.ts @@ -0,0 +1,61 @@ +import { cli, Strategy } from '../../registry.js'; +import type { IPage } from '../../types.js'; + +export const volumeCommand = cli({ + site: 'neteasemusic', + name: 'volume', + description: 'Get or set the volume level (0-100)', + domain: 'localhost', + strategy: Strategy.UI, + browser: true, + args: [ + { name: 'level', required: false, positional: true, help: 'Volume level 0-100 (omit to read current)' }, + ], + columns: ['Status', 'Volume'], + func: async (page: IPage, kwargs: any) => { + const level = kwargs.level as string | undefined; + + if (!level) { + // Read current volume + const vol = await page.evaluate(` + (function() { + const bar = document.querySelector('.m-playbar .vol .barbg .rng, [class*="volume"] [class*="progress"], [class*="volume"] [class*="played"]'); + if (bar) { + const style = bar.getAttribute('style') || ''; + const match = style.match(/width:\\s*(\\d+\\.?\\d*)%/); + if (match) return match[1]; + } + + const vol = document.querySelector('.m-playbar .j-vol, [class*="volume-value"]'); + if (vol) return vol.textContent.trim(); + + return 'Unknown'; + })() + `); + + return [{ Status: 'Current', Volume: vol + '%' }]; + } + + // Set volume by clicking on the volume bar at the right position + const targetVol = Math.max(0, Math.min(100, parseInt(level, 10))); + + await page.evaluate(` + (function(target) { + const bar = document.querySelector('.m-playbar .vol .barbg, [class*="volume-bar"], [class*="volume"] [class*="track"]'); + if (!bar) return; + + const rect = bar.getBoundingClientRect(); + const x = rect.left + (rect.width * target / 100); + const y = rect.top + rect.height / 2; + + bar.dispatchEvent(new MouseEvent('click', { + clientX: x, + clientY: y, + bubbles: true, + })); + })(${targetVol}) + `); + + return [{ Status: 'Set', Volume: targetVol + '%' }]; + }, +}); From b2fa7daf57e98f6d4c9b14b1ed2dbe929da3d3c6 Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 06:08:55 +0800 Subject: [PATCH 02/10] feat: replace @playwright/mcp with lightweight daemon + Chrome Extension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Architecture: - Micro-daemon (HTTP + WebSocket bridge, ~190 lines, auto-start/idle-exit) - Chrome MV3 Extension using chrome.debugger CDP (10KB build) - 5 protocol actions: exec, navigate, tabs, cookies, screenshot - All DOM ops via JS evaluate — no extension update needed for new features Key features: - CDP Runtime.evaluate for JS execution in page context - Tab management, cookie access via Chrome APIs - Auto-start daemon on cold boot, idle auto-exit (5min) - Minimal permissions: debugger, tabs, cookies, activeTab, alarms Tested: zhihu hot (14.3s), twitter timeline (9.3s) --- extension/.gitignore | 2 + extension/content/noop.js | 2 + extension/icons/icon-128.png | Bin 0 -> 15333 bytes extension/icons/icon-16.png | Bin 0 -> 628 bytes extension/icons/icon-32.png | Bin 0 -> 1828 bytes extension/icons/icon-48.png | Bin 0 -> 3490 bytes extension/manifest.json | 42 + extension/package.json | 16 + extension/src/background.ts | 246 ++++++ extension/src/cdp.ts | 68 ++ extension/src/protocol.ts | 48 ++ .../store-assets/screenshot-1280x800.png | Bin 0 -> 578421 bytes extension/tsconfig.json | 15 + extension/vite.config.ts | 18 + package-lock.json | 103 +-- package.json | 7 +- src/browser.test.ts | 227 +----- src/browser/daemon-client.ts | 89 +++ src/browser/discover.ts | 250 +----- src/browser/errors.ts | 130 +-- src/browser/index.ts | 17 +- src/browser/mcp.ts | 356 ++------- src/browser/page.ts | 277 +++++-- src/daemon.ts | 164 ++++ src/doctor.test.ts | 225 +----- src/doctor.ts | 742 ++---------------- src/main.ts | 29 +- src/pipeline/steps/browser.ts | 2 +- src/setup.ts | 230 ++---- 29 files changed, 1240 insertions(+), 2065 deletions(-) create mode 100644 extension/.gitignore create mode 100644 extension/content/noop.js create mode 100644 extension/icons/icon-128.png create mode 100644 extension/icons/icon-16.png create mode 100644 extension/icons/icon-32.png create mode 100644 extension/icons/icon-48.png create mode 100644 extension/manifest.json create mode 100644 extension/package.json create mode 100644 extension/src/background.ts create mode 100644 extension/src/cdp.ts create mode 100644 extension/src/protocol.ts create mode 100644 extension/store-assets/screenshot-1280x800.png create mode 100644 extension/tsconfig.json create mode 100644 extension/vite.config.ts create mode 100644 src/browser/daemon-client.ts create mode 100644 src/daemon.ts diff --git a/extension/.gitignore b/extension/.gitignore new file mode 100644 index 0000000..b947077 --- /dev/null +++ b/extension/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +dist/ diff --git a/extension/content/noop.js b/extension/content/noop.js new file mode 100644 index 0000000..2698aae --- /dev/null +++ b/extension/content/noop.js @@ -0,0 +1,2 @@ +// Minimal content script — required by manifest to auto-grant host permissions. +// No actual logic needed; chrome.scripting.executeScript handles all injection. diff --git a/extension/icons/icon-128.png b/extension/icons/icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6c5a1894b8dada3bf56ecd56cab2852f8c2810 GIT binary patch literal 15333 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 DKRsIT literal 0 HcmV?d00001 diff --git a/extension/icons/icon-16.png b/extension/icons/icon-16.png new file mode 100644 index 0000000000000000000000000000000000000000..b9d9e40a559b020fad06f7c5d430af181b8bf2a7 GIT binary patch literal 628 zcmV-)0*n2LP)_j1*0ZAbQO9SadJ3F!RJJ=|K z_<|u~LK5O7=jFL)cUESf^I~EKc6N7m_P;a#nKkspp1d65LbZvC|74$8mfo7UwarWM zvWeS3_}8(3-Icc-iGE&2q3;`c6^#>Z6a;2c+3C+A&P(G5-=A3*A< zzCs8dQC}UtH;czAe$1!c#kIS<|FFX8x##3(PT(G1rBP0h$geW6ci0d}i~O{f0VE(I zMV`H~nnY)mtbPqN{J$kigM`9bEtAw!&YwHVrw2C~`n*J#f5oOE)JynE8ZR2>v0V>N zd4N=nHnC7in4E61_V^A1UzahnFZj~R89P#=)*J+DF<#i-?69%YLVoRl(-a7ZfkEf+ zcdtdY;1NS4`~d`J37wNnth4c$yoc* z!secBms5N8n#$pUn6q+`t#0wV-R-r!k~usb>9A>vHeJxJ)b8{GiI-HbYcIWJNW+|Ab$Ypxi>zfnPCV3 O0000t9S#UNNm9dt4Ui6DGIekYh#;EGBeFw&YXQ)OTKm4=bTBZFS>?3Ywf)* z-|heZzI7D0X!^(*C%y9jr8%5ZX$Wf4%Ni^F^jsYJGxnTq-#S0@Nlm|GM;>TJhEswB z=Nu|2ut(4>$1V+{hBJ%s=h-XI`46hK`tYe);s1jsN{g`fYodf#K;Lmn%#$_jUeEU)EK6-#*-=G!;nE5VrGsuLR9?O%x9%S(m zfnKPLlaXS%n+bys5tPHi#sDfszP!kef>%GdpUrPQ#_}kQj|~Y&*9~R2!}d?kbMLv|u;emc{?Ib(-*}YchX?E% z7+4x$yb_rQY*4~_BfP7HRq}YC3d2N(4GPMiBqAs87OlLOL>G&*4YqEeEV+{Rxc>7C zoP7FsEIQ4LA3n(SuRp>)hvyj%JFqy9>F21f4wOw4^g_g*C@iugxjp(hgv*Hsq9)=2 zp_{8Lc3k7O$Gp~bxc;-}`SdTJXP;BN_>tRL|Joy*Sn0Dc?82~*?ivr}V0{dOwJlZs zSP7Rb>I6V~)F%r)KvPTa3AEu|Ct9eqNi-A%#wB)pjN2UXYSm%)*B3bb>_vJ` z@u!a-Ve9cPaOYA7V>Bu^p;%1;EG6m*;1b!xx0F3~%40!~nENFZ!u6uY?H0J5f>-o_ z!EgV-=b!x}rmT4BuA@|sJ;<=Ba9I}FGn@6=47;ZU$hS;{JBQITlOfLsD#eTybH8`6 zvg9$dwe0uVE12Rfjdg;XO8CSJZOXu5JOF3ZlR~6%xkl$1baPz4!^fK~iZl1~tJ5bb zmEz=I-hd~cVLR`jN28#Sq~4@_D|||DWXQC^CRyi0DF1vR%FuHLJ?Nl@eeN=2hMzsf z`O}|Zq%5C$;~kcM_%xTcYU&jGJc~(nx^4$xTgeAj(60gm+GQ$~qpPls#DuKb%G2*Fea8lUnCX`_* zW~~PZ=~60}cZ0aTo1+%yII732oIS-0pL>7}39Q4LBe>8^r8WHvrSrZQn-m5gz4-UAZ%m2#WgA3n{cFFnMXvK;@{8i&63 zV_y2_4x5EVZI6BOInZ_N?`3p5l9u%>@XDI;sAP51vVoya-k6eSLJ^A8(Hb&MwRDE`w_hNf2VJh=@Qc8*up&XTCp}sIPEHvZmoV!Vpi4^-8rs3d7fptfLvYY^5rXRWnHwq zS8^|No~CO%C3iga9G^TmB-ak5g$a>%Qt_;#vKhN?uJUdzSvCSQ){MZu#d~5tkpl#T z1|=ZucgX7!o98r{2|$v}C`Co^Dpc*|3^L0?KPT_yXk*&=`kEl6eW&8RQN_qAnw=6i zuAsK9A|@rGa4mEwDaRhH4P|bimJOvZ(_Xl6TBzSxPwCBG&W%EQ>y)-LQILy}5~?;D zw_Dwa#IjlIu)%+iv`VfMPssto=c-0!WxSY#WR|j?UoVP^#kF8d zjEI#t(qDNA!@F<(#SrNf()!+N5`_3)KB7#_A=3<;zJZ9v=>oF%EOV3K_JHXN_sw(O zhWLYJR_63Cf&boAJ6gDf7yjRE>vFoyg%{sPSGD8mKDD%FdhPVwe`;wy%KJCXIt(#n S7OPzV0000Q!l;(7uo(Y$R&wkip&i!NTim?~f+!q~$(OrZ^ z2LnS-@FRj|5d6G{8LTw|Mrd~*L(dpmNB3za!u|OT?x_%mL2>TYAz&L&%H8)fc)RTe z(rAkf9H^d@JQKnZXlD+b2SyXxUzZU54nj!4=#oq!1dLl(zE1$fxz|Ma#sEBVzM_BQ zVK)y4FR-GhK$g1%w@R3#Q=Y#xLV(qK3H-Q0drQ_3JH#;OKc>M5Zv2RqvAOA1!xA1I z`uuB7i+9~;oa$8zJqLmv{529jp9S(_qjkU-+Q-2TaRc;jL}S+pXLt-)fK-!of#)Pb zM(sg57h|+FNYa0InV90eRJnHm$cXXta?Lnb;yL5&L*TYARQlvNOh#yl5RlUO!qQqQ z?;&y`f(}ar(^1-i-DBMF&xjHPAs@aT?onP3eV99m{E2_LWNs4|B&0MD3J^+>11c#e zE@-V`=-Gk@aU1gs0nMI7z-Xsxqi-MOCM@;kvqON1S%Cycws9&Hyoeu?5K;q?BoZO$ zP!SMIYoA&}78)kk(3u8A!9-|npqZm%40Q-Z<=sW#^Kb4E?0JYaV(_J2S@1lF`;kBt zONb;!l0=B}6efz$kL$>@95O2aRlsB%VjwcoG^bLYrDL#>if$lEcr~n43Z{T0rU>P- z04G^`i?f$Va9|n=2dp|!q(TxRjxkY_xFsr3d+NI|ZyZDa_2XEcn#7oLawtGZPW6{PYpb+&hm&MMN|pn{~)$0!c)~ z)>hbgu@~M5+jmOSKmPW z-^VaBIfG8OgOkk&SATK{+xPFrqD)cW(g0dDCPLLn5|#*(phaj(u9m<_LW1U$=vg}? zB$OjrK3moCIaz6^&ghN9EhzwnIiyoP1}_SYR7kX!SF!z>=df_{Jfcq_t% zryjv=`*vfmNYR|OM5smr>4}KQn~{oQqdE~F6Q~w>FQ%!=ysUT9rNr#7JG5OZg{}e* z`E9zvfrH#6o#z>@s00^QQq26~IUG295tFSgOvI__8qPfaJ?y%B77HpvgNaBW8!==p zf=DC;6H%!|sV*Kcf&k`%q30nPskcWTo%vaRXk$%HXy=((2OV%CrYKMAv=_KQS`QC^*EJ6lvU~&VU77%HUyf?s7Ca|>J!>(VyfV<9J z#pJ{ky4`i0*w(<(V~=3>!VLB#1(NAHl(PpUHW<1DiaAz>B3&lfRie&nRcQgw={cWo zk?QD*U};R@iY#kT#Ccvoi*pK61@s_?>7~fpDc(yXoW0n_{NcZ1-=!5aTT|$Ex;Qb@ z!uyXtfcg2YSV%OYNpi1=b*~YnB4i8J_$(0mEi6Ee7X=6lS8$wLIkH$9blu*oEY%X~ zoNQn?PJD)JfDT819%L~66ltfAGkJui4?39t-HW(qxs6t90-a79?`)sOg&#kNxm}Z( zR|cw;0EuFQ7K*akFeMn$b_7m#%(cz$jSw(mD3s@9WCuh*4&BeJBsx8uDq@_!xQ=~) zd=dMucF<_H(CMz>=+0@Jf9xU5-P*)Xk=xin;7I}$*@wW48$KS5tBHnj(*2SrV)Src ziM>&#VbTJopTi6?h<<^zGr(!oae29oPaSy~`&W9XHz&~UbZ}z#43?jG7~5`Xp+)|m zRLHs0s#w4A;m5dp#C0F+Sppll;yVR!MC4>R8oDT;^BhH%L1YDbsmAH3iQ?)SzWV2v zaQD@9s9GIsopqf3#2oUke;$p&0HAc73!>q)%lPzVqN31|4K4I z$>*%gND~`LImlpQ356=UoL?pf}|87k%*fK_KH4s%rtQ9!EfW} zwg!6L4kjCu*#F<_n0@vLR<8BXBf`C_rdUZSv7#hcj6Xc%JTYO-Ji=^Np=wg~a5!R8 zk4XwhstYI`s42*Xf~d!cChFL$Qrxj)67L>5h@-PDbldA_Hm7mdl~v3i{tM15w{bB_ zpo^YUM~cP*h!u>aKo$1tjFXJ-LptDP0JGP|)!0#JKURva8e(-35L}T(khKJoz)#k& zCoZsOb^=R3cmVJ0oJOa!jz)6=2Ugm+-&D~!Rqpsf=4S3x3{%zeu5Ij5<`P^}tnj|=SG-o&LJK7?btZoz72 z70pHq_pA*tfB1Qv|IZ4?h(Wi@afAR65JmMgHwKiI_E5jY*tD91GNmxuma3eK5lkmB zFPUH+6Tpo3B4YIsfHJK6l8!_{wPM_!7%Xf}@WGEB!m;`7SnaH%-e_X6lVahw&*Q?$ zD>$iZ=y!SmMed@oSzJuTYYfS$gs;1uTZIKr5+P}^%ccODE0{EgK<=<=*tV>dC>3FZ zJ1YA)E=+JyPBWz->4+7p&TWy#{Di{l~ zXp;A!7exx&OosV}!rBwx$J=+$<9cTWNxhE6fyUymj^KlTy^nWA1O4?bWWRt;a|TcK z^rT6#RRWXsh|(fv3U@q$9AD6%LPJLda#`S7p5waGSgR|fh2|!Mrq&HH*t<}%X=~BD zG3#U#0MnBRR-QbBbDz8u*VMo;L4k)a6;74?{r}(N!+1v|VDoIM&^QOma_D9q=B2-*vA6?s z_k9Mfeh)i;{v59T^KG1tn{2RVKq+^|uFtn84fPC+I4-^NCN8z6&|4vI zL#ehcJ=tedjuR_#B3K;&vrEf3ASHA$fZ~ia2w=u{1Fe_gopd=oKZ^hFuB2CkYlBj<7zL%N;gN^$*hD^@@!5;gOWKiK^|cR zK;){jq_izUgLY;+3??HM4{Um!+XipReP=gPOBkcjhrnfHu#y6@ry*husi-k!8-gat zbh*SVG>Wu9G02e(a^zHh5Qe;P!2QQWuP_|QoMDuWRg$KwH8a<3HWD(o;%D9U5wmcd z=i52NkJKKhsG0y)J5iYHtb+sdr$-@@6RFXD+I)HJ3_kdCxqMiRsPN0l&kMgFT` zsYJ{T+vDe!BiGa#+65oq7U4w89hDt9N&2=;VIYWba)X?K5_lVdT@Mg0VXlA?5w3Ml z@8z}r9pSsY3JomQDf}d4Rc%9d<$A?7VWSt4H$hII34D;i+plx*HemZx z_6xZ0OEK471TMjsX>(OO15*cvQG{u0kY<;KPT8DwH-qn1_Qz?e&#V0RH3zy>H8b>9 zYYRb_u*^qrOn=Stiodt+n_)wg5rwU3oI$3I0x+-Q>zGyM9o`veK&N7;`?0G{Um1Cb3A$89rD Q6aWAK07*qoM6N<$f(5FIG5`Po literal 0 HcmV?d00001 diff --git a/extension/manifest.json b/extension/manifest.json new file mode 100644 index 0000000..d0c84c9 --- /dev/null +++ b/extension/manifest.json @@ -0,0 +1,42 @@ +{ + "manifest_version": 3, + "name": "opencli Browser Bridge", + "version": "0.1.0", + "description": "Bridge between opencli CLI and your browser — execute commands, read cookies, manage tabs.", + "permissions": [ + "debugger", + "scripting", + "tabs", + "cookies", + "activeTab", + "alarms" + ], + "host_permissions": [ + "" + ], + "content_scripts": [ + { + "matches": ["http://*/*", "https://*/*"], + "js": ["content/noop.js"], + "run_at": "document_idle" + } + ], + "background": { + "service_worker": "dist/background.js", + "type": "module" + }, + "icons": { + "16": "icons/icon-16.png", + "32": "icons/icon-32.png", + "48": "icons/icon-48.png", + "128": "icons/icon-128.png" + }, + "action": { + "default_title": "opencli Browser Bridge", + "default_icon": { + "16": "icons/icon-16.png", + "32": "icons/icon-32.png" + } + }, + "homepage_url": "https://github.com/jackwener/opencli" +} diff --git a/extension/package.json b/extension/package.json new file mode 100644 index 0000000..253aec6 --- /dev/null +++ b/extension/package.json @@ -0,0 +1,16 @@ +{ + "name": "opencli-extension", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite build --watch", + "build": "vite build", + "typecheck": "tsc --noEmit" + }, + "devDependencies": { + "@types/chrome": "^0.0.287", + "typescript": "^5.7.0", + "vite": "^6.0.0" + } +} diff --git a/extension/src/background.ts b/extension/src/background.ts new file mode 100644 index 0000000..2dcebde --- /dev/null +++ b/extension/src/background.ts @@ -0,0 +1,246 @@ +/** + * opencli Browser Bridge — Service Worker (background script). + * + * Connects to the opencli daemon via WebSocket, receives commands, + * dispatches them to Chrome APIs (scripting/tabs/cookies), returns results. + * + * IMPORTANT: In IIFE mode (non-module), all chrome.* API registrations + * must happen inside lifecycle events (onInstalled/onStartup), NOT at + * the top level, or the service worker registration will fail. + */ + +import type { Command, Result } from './protocol'; +import { DAEMON_WS_URL, WS_RECONNECT_DELAY } from './protocol'; +import * as cdp from './cdp'; + +let ws: WebSocket | null = null; +let reconnectTimer: ReturnType | null = null; + +// ─── WebSocket connection ──────────────────────────────────────────── + +function connect(): void { + if (ws?.readyState === WebSocket.OPEN || ws?.readyState === WebSocket.CONNECTING) return; + + try { + ws = new WebSocket(DAEMON_WS_URL); + } catch { + scheduleReconnect(); + return; + } + + ws.onopen = () => { + console.log('[opencli] Connected to daemon'); + if (reconnectTimer) { + clearTimeout(reconnectTimer); + reconnectTimer = null; + } + }; + + ws.onmessage = async (event) => { + try { + const command = JSON.parse(event.data as string) as Command; + const result = await handleCommand(command); + ws?.send(JSON.stringify(result)); + } catch (err) { + console.error('[opencli] Message handling error:', err); + } + }; + + ws.onclose = () => { + console.log('[opencli] Disconnected from daemon'); + ws = null; + scheduleReconnect(); + }; + + ws.onerror = () => { + ws?.close(); + }; +} + +function scheduleReconnect(): void { + if (reconnectTimer) return; + reconnectTimer = setTimeout(() => { + reconnectTimer = null; + connect(); + }, WS_RECONNECT_DELAY); +} + +// ─── Lifecycle events ──────────────────────────────────────────────── +// All chrome.* API registrations must be in these listeners, not top-level. + +function initialize(): void { + chrome.alarms.create('keepalive', { periodInMinutes: 0.4 }); // ~24 seconds + cdp.registerListeners(); + connect(); + console.log('[opencli] Browser Bridge extension initialized'); +} + +chrome.runtime.onInstalled.addListener(() => { + initialize(); +}); + +chrome.runtime.onStartup.addListener(() => { + initialize(); +}); + +chrome.alarms.onAlarm.addListener((alarm) => { + if (alarm.name === 'keepalive') connect(); +}); + +// ─── Command dispatcher ───────────────────────────────────────────── + +async function handleCommand(cmd: Command): Promise { + try { + switch (cmd.action) { + case 'exec': + return await handleExec(cmd); + case 'navigate': + return await handleNavigate(cmd); + case 'tabs': + return await handleTabs(cmd); + case 'cookies': + return await handleCookies(cmd); + default: + return { id: cmd.id, ok: false, error: `Unknown action: ${cmd.action}` }; + } + } catch (err) { + return { + id: cmd.id, + ok: false, + error: err instanceof Error ? err.message : String(err), + }; + } +} + +// ─── Action handlers ───────────────────────────────────────────────── + +/** Resolve target tab: use specified tabId or fall back to active web page tab */ +async function resolveTabId(tabId?: number): Promise { + if (tabId !== undefined) return tabId; + + // Try the active tab first + const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true }); + if (activeTab?.id && activeTab.url && !activeTab.url.startsWith('chrome://') && !activeTab.url.startsWith('chrome-extension://')) { + return activeTab.id; + } + + // Active tab is not debuggable (chrome:// or chrome-extension://), + // try to find any open web page tab + const allTabs = await chrome.tabs.query({ currentWindow: true }); + const webTab = allTabs.find(t => t.id && t.url && !t.url.startsWith('chrome://') && !t.url.startsWith('chrome-extension://')); + if (webTab?.id) { + await chrome.tabs.update(webTab.id, { active: true }); + return webTab.id; + } + + // No web tabs at all — create one + const newTab = await chrome.tabs.create({ url: 'about:blank', active: true }); + if (!newTab.id) throw new Error('Failed to create new tab'); + return newTab.id; +} + +async function handleExec(cmd: Command): Promise { + if (!cmd.code) return { id: cmd.id, ok: false, error: 'Missing code' }; + const tabId = await resolveTabId(cmd.tabId); + try { + const data = await cdp.evaluateAsync(tabId, cmd.code); + return { id: cmd.id, ok: true, data }; + } catch (err) { + return { id: cmd.id, ok: false, error: err instanceof Error ? err.message : String(err) }; + } +} + +async function handleNavigate(cmd: Command): Promise { + if (!cmd.url) return { id: cmd.id, ok: false, error: 'Missing url' }; + const tabId = await resolveTabId(cmd.tabId); + await chrome.tabs.update(tabId, { url: cmd.url }); + + // Wait for page to finish loading + await new Promise((resolve) => { + const listener = (id: number, info: chrome.tabs.TabChangeInfo) => { + if (id === tabId && info.status === 'complete') { + chrome.tabs.onUpdated.removeListener(listener); + resolve(); + } + }; + chrome.tabs.onUpdated.addListener(listener); + // Timeout fallback + setTimeout(() => { + chrome.tabs.onUpdated.removeListener(listener); + resolve(); + }, 30000); + }); + + const tab = await chrome.tabs.get(tabId); + return { id: cmd.id, ok: true, data: { title: tab.title, url: tab.url, tabId } }; +} + +async function handleTabs(cmd: Command): Promise { + switch (cmd.op) { + case 'list': { + const tabs = await chrome.tabs.query({}); + const data = tabs + .filter((t) => t.url && !t.url.startsWith('chrome://') && !t.url.startsWith('chrome-extension://')) + .map((t, i) => ({ + index: i, + tabId: t.id, + url: t.url, + title: t.title, + active: t.active, + })); + return { id: cmd.id, ok: true, data }; + } + case 'new': { + const tab = await chrome.tabs.create({ url: cmd.url, active: true }); + return { id: cmd.id, ok: true, data: { tabId: tab.id, url: tab.url } }; + } + case 'close': { + if (cmd.index !== undefined) { + // Close by index + const tabs = await chrome.tabs.query({}); + const target = tabs[cmd.index]; + if (!target?.id) return { id: cmd.id, ok: false, error: `Tab index ${cmd.index} not found` }; + await chrome.tabs.remove(target.id); + cdp.detach(target.id); + return { id: cmd.id, ok: true, data: { closed: target.id } }; + } + // Close by tabId or active tab + const tabId = await resolveTabId(cmd.tabId); + await chrome.tabs.remove(tabId); + cdp.detach(tabId); + return { id: cmd.id, ok: true, data: { closed: tabId } }; + } + case 'select': { + if (cmd.index === undefined && cmd.tabId === undefined) + return { id: cmd.id, ok: false, error: 'Missing index or tabId' }; + if (cmd.tabId !== undefined) { + await chrome.tabs.update(cmd.tabId, { active: true }); + return { id: cmd.id, ok: true, data: { selected: cmd.tabId } }; + } + const tabs = await chrome.tabs.query({}); + const target = tabs[cmd.index!]; + if (!target?.id) return { id: cmd.id, ok: false, error: `Tab index ${cmd.index} not found` }; + await chrome.tabs.update(target.id, { active: true }); + return { id: cmd.id, ok: true, data: { selected: target.id } }; + } + default: + return { id: cmd.id, ok: false, error: `Unknown tabs op: ${cmd.op}` }; + } +} + +async function handleCookies(cmd: Command): Promise { + const details: chrome.cookies.GetAllDetails = {}; + if (cmd.domain) details.domain = cmd.domain; + if (cmd.url) details.url = cmd.url; + const cookies = await chrome.cookies.getAll(details); + const data = cookies.map((c) => ({ + name: c.name, + value: c.value, + domain: c.domain, + path: c.path, + secure: c.secure, + httpOnly: c.httpOnly, + expirationDate: c.expirationDate, + })); + return { id: cmd.id, ok: true, data }; +} diff --git a/extension/src/cdp.ts b/extension/src/cdp.ts new file mode 100644 index 0000000..8d4409a --- /dev/null +++ b/extension/src/cdp.ts @@ -0,0 +1,68 @@ +/** + * CDP execution via chrome.debugger API. + * + * chrome.debugger only needs the "debugger" permission — no host_permissions. + * It can attach to any http/https tab. Avoid chrome:// and chrome-extension:// + * tabs (resolveTabId in background.ts filters them). + */ + +const attached = new Set(); + +async function ensureAttached(tabId: number): Promise { + if (attached.has(tabId)) return; + + try { + await chrome.debugger.attach({ tabId }, '1.3'); + } catch (e: unknown) { + const msg = e instanceof Error ? e.message : String(e); + if (!msg.includes('Another debugger is already attached')) { + throw new Error(`attach failed: ${msg}`); + } + } + attached.add(tabId); + + try { + await chrome.debugger.sendCommand({ tabId }, 'Runtime.enable'); + } catch { + // Some pages may not need explicit enable + } +} + +export async function evaluate(tabId: number, expression: string): Promise { + await ensureAttached(tabId); + + const result = await chrome.debugger.sendCommand({ tabId }, 'Runtime.evaluate', { + expression, + returnByValue: true, + awaitPromise: true, + }) as { + result?: { type: string; value?: unknown; description?: string; subtype?: string }; + exceptionDetails?: { exception?: { description?: string }; text?: string }; + }; + + if (result.exceptionDetails) { + const errMsg = result.exceptionDetails.exception?.description + || result.exceptionDetails.text + || 'Eval error'; + throw new Error(errMsg); + } + + return result.result?.value; +} + +export const evaluateAsync = evaluate; + +export function detach(tabId: number): void { + if (!attached.has(tabId)) return; + attached.delete(tabId); + try { chrome.debugger.detach({ tabId }); } catch { /* ignore */ } +} + +export function registerListeners(): void { + chrome.tabs.onRemoved.addListener((tabId) => { + attached.delete(tabId); + }); + chrome.debugger.onDetach.addListener((source) => { + if (source.tabId) attached.delete(source.tabId); + }); +} diff --git a/extension/src/protocol.ts b/extension/src/protocol.ts new file mode 100644 index 0000000..83f7391 --- /dev/null +++ b/extension/src/protocol.ts @@ -0,0 +1,48 @@ +/** + * opencli browser protocol — shared types between daemon, extension, and CLI. + * + * Only 4 actions. Everything else is just JS code sent via 'exec'. + */ + +export type Action = 'exec' | 'navigate' | 'tabs' | 'cookies'; + +export interface Command { + /** Unique request ID */ + id: string; + /** Action type */ + action: Action; + /** Target tab ID (omit for active tab) */ + tabId?: number; + /** JS code to evaluate in page context (exec action) */ + code?: string; + /** URL to navigate to (navigate action) */ + url?: string; + /** Sub-operation for tabs: list, new, close, select */ + op?: 'list' | 'new' | 'close' | 'select'; + /** Tab index for tabs select/close */ + index?: number; + /** Cookie domain filter */ + domain?: string; +} + +export interface Result { + /** Matching request ID */ + id: string; + /** Whether the command succeeded */ + ok: boolean; + /** Result data on success */ + data?: unknown; + /** Error message on failure */ + error?: string; +} + +/** Default daemon port */ +export const DAEMON_PORT = 19825; +export const DAEMON_HOST = 'localhost'; +export const DAEMON_WS_URL = `ws://${DAEMON_HOST}:${DAEMON_PORT}/ext`; +export const DAEMON_HTTP_URL = `http://${DAEMON_HOST}:${DAEMON_PORT}`; + +/** Reconnect delay for extension WebSocket (ms) */ +export const WS_RECONNECT_DELAY = 3000; +/** Idle timeout before daemon auto-exits (ms) */ +export const DAEMON_IDLE_TIMEOUT = 5 * 60 * 1000; diff --git a/extension/store-assets/screenshot-1280x800.png b/extension/store-assets/screenshot-1280x800.png new file mode 100644 index 0000000000000000000000000000000000000000..5bbc49fe81663b0e9b234a35d7644516c14470d3 GIT binary patch literal 578421 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

    ^*ni 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

    Q9ZMsmWlwy@rfBQAx zOAbV?Ycv&(xPehsSs#)H|}m zH&XZN?LLkQNsy5cgn4c}LFRw*{valUQWP*yjluZYp_Q3M(iS zPCh3(ZJg?%voqS*rJ6dp6Tg!C-x@fM@0r#`YQw2IdE9^t#$`{8CM)f0JRF>dy z@-()TiW80|9Q5q;&X-Z%y%T)bpA_O`{;m({N3(Ui%i4PoM36?X1WPLXc??I{v7Y9HjpuvK2?*v<8bZ;w?hRof5<$f?af-Vuf>z zBkzP*tUK3Q8V*k9n&^6Bi;zzh8Pu60sy;js%9If9Qn8}cW6hM)Drg{H@s+TA#2UW! z;vbO%IX;B(w*1We!be|SBz8M$B#&~b0v6_o6>gJ8OO;=^aqw&?yF`RB7^6ZnPy%Aa7L1&^i93AB|aqEL0Y)*z0hQG&$F_4IDN> znh^3Z5ZsPo3lH}*J);{dJZ+CYtRWAdupJBCqA7@ouC`p`&Wi%qaY+if)+H8M9&?Ti z7&;8QfRl%a*^rsax|?pWT6p~kQbvH_nNA2gaVr7W5ZubCM5-l2!mLHbT%1m*E0Llb zh8KJO+4>;MPVcCJN(3WWhg5Or7ckMlG(d)0=cyy2kssAbxaxJ&#j4KM;T|TzdoU=D z3~V<=2^Wm<1}*}MhQ#RX@vTvM`Z{^(wzH-->CQY=t2J<`aQW+T3SR^FVb7=2q zVa>-iX?|On)PpEjq#6r%<%D6p@b!gTmLnkQ8+Dx;|Nr~M;e zkpY>4A(xbo>=C^}m+%mmFUQp&R0ehXU&Ihmg=0wQyr~@Rw%10F1kUge zHETafY=zA-y)^`%ebT?@$^&ZUNeyu$v)fXz;R#@_+&BE40af}<4`Wlb(wfStgppZHnyU>VGl^3PZ_|I zCkjNq*%N2}Xk-r`zrmA#^c4%Vj6uVEs>$??g^I^}(%^MT?R%xgU<(9UtwfavYGhQE zL27-0E3b(eSNo{yDLKH22hwh;qSUIYYI@L>r{~9XM~xAC3e3ToaXE}JC~11^E25O4 zkd(ngZXUxYx_?YZI8h$f8J@)fDJvW$!lYJn<`x=J-ze$@0-8Zd*sRi&_R>!0)k_^z zg`^E>wkk9*V77h4b#q8eNpd@>TyFJ3D-f5vSD-+wBKi6jO)97-lcvPV4l7LbLd@V< z&y9WfE=R%@i~CBIh^`;NL=n#NazPaB^$}hmkC6Itm24qJk|!)PR$=@*#UlW-ZEIF zoEo7zPPzm>q)=i2Yj6-B)yG0xN)^ef5lN9{K-`3I4W1&q-9*DMpOr0qsR?wE=GXxF zQ(?;h7lqLg*a-&Vb&mK+`L&@-2IL=ZTp>eMD9QmhL+}O{IZz_PVLaxToe5j?0)ZKz z+#`750#KRQ_>{MbJaUy{D7g2@`$Q^HzGxqyWXUdB6suGLl@0}JKKjF`a)kGy)|X;B z8adQI{n?O6piVwai^yHjz*~hTo|6F~AfkSHA7M9!2(!pc2?k(KS}s}FC}?sDPEv*0 zi+0nOG8hFG`Pmyh86~Uymo}(u=M#}TJW@rET-YlQ=L9#Av%_a#*dZ`^cR46ve{`wZ z>LW%9CM02GIy8`OUI>nZ$C$6?;goCy$MCR*JhXF_$I)VK+JFy&3NgqmB6U+YP;d!l zv7+84d*E4<1-jH+H8k!U)!FHYHxg~G>e`_~2Q!!wNu1-?MsJ+{30Hw^ujtNX#JGx_ zUAUB9l)Ggh2B9W(HsvMx$cz`|$|IV#3DZzx1|Qd?1;LsDmhmjJO;SSTZK(-q>Oqw$ zi6@yLN>OGl5^7YjA~fzFQD)&}ZuLQ!#KHNIQLhzsNoh7XXbX6#aw-yZuJ~|6`NA`@ ziZ5IMJ<-kMBztg^Kj+a!q)&nRNB-G^TOYDPg3nG!<(tMJ2@g6+m(<}2NVx44e{SF= zZ4Skk3^fPj;GBG^JjBvgWY*nKQo8S04L#E3%^yBII83)cKIE76vky7V_cu9JO74+k z+0HKSFSnUfvEmL%>JF8r(QMH7OdL9d1WCu2 zYaKs1P;tcdHr{VQJP>dNk%UOK#QXzzM2iKFyH=_xaR5@P$$tg7$XJ{0>_2pK>+;xUVac=jJA)@lPrw3S?jhVYA_+5c^BGcuW z#RN#5Wy*SrlF#A(iODic&Ozkti+hx1mS`}I{xP-HCSEB7P9 zGT;!|(I_&%_xRh*Z{)ETOEAIzpLllXWG)G?@o(cgh2vB(i)^Qm7r)=E86-F|nm2u)f~qv8o?Ou51vOFkw-B}w3m1_9P;Sg199!Wf zSrs0ov4+G7_=uwDqRPn&Opha2nk9VN5CVeqNWw^^0Faeilvks{8q4P7IO}z z)g-6gl^cp2)`xQhFQk^magV`Ep_8(R(yr`4hqNgwg%|XOU$?{*9QieE9%?Z)3ecab zgYX)Ya~a>^_?bQ zTyLo38c`3nyhvTu$jys%;@G;d&nSQQp++jxslXf@kb<*)rLXwP6*=aP_8efN^rw4 zK8=R<9#^?1oZb|Z*y}E_c2~JAoat)aa?I4YHZEX1^GLF}AcE*S0J`!%U@^b@Vt@ zKj~2jv`)*zw(e~DimO@}7L+j7j!PY{>O`s;`c|YgJBsE+fOfG`_qeT2&6Ncks!$OZ zou)^HUiRkEH8(I~p@)GJ?MJoI6!c0~=J zpw(~4Vut~5>jSQSM1gb*4dY1ALZPhn>F!`V?4$hh2-4=gwG{U$3Ra*;y#%wzClR_w zXt78^L6svS(I(V+J zq4Q>Mr*6lMWpBqBshoY|M~z0k?UNdW%o;xEJ#Sz`%1kg_1aBreC=t9N;w8`CCn%3P z1{p#m)>2lfoT*(b9jsO>lT!!i-E=!EUOltot3 zR<@+mZak{jp>_vw%6m#usb|HgI59t?c7=az!Encnho};W7TM`1{e=RrG{Y5y3XnYd zhvUBds~2amcHOa<+!7DQ1wJd#ktgRpSQt^lJ6Pq!5?neq(m=it$dvIJxv+oaI`AmO z|8S^K^eMlDPHuhi89^Iysg3x;2p3@vFq~Wbtx>qxmFwWDY*3}EDESoaL7;1HR1s6O zHLc|1P&D0?wtqyk{awkdj^`60+iu4BD0_8>lrdqD$}&FX!iCXe9Yn?w(#X@+6!Q7b zhu#KWytly+@kK_IQ_3T0iveAXa=Aix;qeG}zyxSMH2m{Ew}anEE{nSnL()J0Fs#Os zT{O~Woi?nn%y^3y?V3TBB!^a+@>^S9VBWReE^`AdEy2=8GLx2NDOAvX#af=>B#G8v zDr?=7AQ+}%`waaBdaTk>V$OYmE5vX#ndV_YwnU2y%bH*Tb@PsxSczG{^jV|o{h zDlK5Jj0;G$4N)8Yvh;AUIA=c8R%8HAE#)U^v)(@+{&9OYIR%CV-gvIIe7d`9DH+F~ zjPrz{8#~gY*NB?WY&oG+M)1d~91e*lvkXDvv&!l!G&cBxJU0)un;qV|l|_D`+;Nqb zusKECfC)3R?)(IU-Es-)K7`PtY76y+VJ~~(`&dkm=o2?s{FR!&$+cYY6 zN+FcNL!lzfhpNaR#U-MpJv8}n@{=p-3(B>Lsd<2L%+6vydsZMh0O%LMNP`6dRmP(OSr_~b>Lb3U~7=Z zCbF!EmVG^&Do;0V-hYd|8HMePXA$!7d7fwC`}zgJMj0z6_*ZLbKi|=|CVxj6CA&;`VkzCa%=-m;t67)Vfg08MFeEHP2#BpNvYG%;2oT zbV*XRf(F;5ErHRJ!}JyMc=#R6(5X_Elq8GOgrm&fQ3UH+wO0G7FMbh8b>`Jq>r2aX zm#^s7lcZw`-kN7Z=pWY^y~I0hAjt$t9%!>$$>V2I&E=(=%gal*+Skan>`jt_ z#c1-<EbO<|A&yxymQ(Kv&Y`qD+?bX5R$1kvHP0cg80iai@{^Gt{mRkHkslH}<4 z(Fa-0L{b?7+SQ0!2e zap*}!C46R{SfnSiD*97R5LMBJ@gWzyd|t7$7;%8zAUH}q0#fo$AV8uzg?~z`w}P4S zp8RKN?DR{5iDPgXcIcgZ@}Ht!_FC|AgXSD~ud}!25MhhyOD5#)Xd9IDV%f`AlroGI zDsYPIkVw|(QYmf0WCFMN_7q4@=w9FhCNmdBPp)|3;AXz{@G~OkBjkPZ$p=h6G$_sc zPWw zW^{<6!{IRJd~B!p`W9jjZJH5HWu(kRhP=NGJ5=qlR3deBbpmBrwM46|7_(p`W< z2l5fg!$!d+VjH#Iq51364_-{BJ6P$bK_8b?K5oL`C{a4$6K``>G$y3tXHqf9EfR#m~cxqx)9U*TwzwV&0yn`z)G4|%ggMS!@s<6??Dfz50 z33mNwRzV056O5X88HNY+NlIfX(c?3&R9GLZF$=*G2igV%ppZdrbPw(V1qrw=wWg(N z^d%AE6nm`KE)B|6MvtPos=5D?chX5ByFhM!0zabx1Y{N7Fi{Y0v;^?P$eF_=Es|r8 zKRXxewg`OS%C;dpc=oCY8$dgxi{iQgvy&?qHzepzfP3*z>E%joFR|Wdm|Tu_$Gq?S z=J~%<9(VHJos^F@bSIkKY`o!!(R38-cBip|DnWCmmmRK^*g{cgHu@SXEzVa*G5}BO zqLD>QrI(~E=*T&PAZv9T)Tc_~h85RsM%I%A@P{z;K2fhy55J{SThjGL@Rv@PMY5^) z$M&_CZ97rPv(`k_sY+4}FqpWGm|AT~9BC-bQ4j{3WDc>+tJG8GmU?bTOQ)k(o~zDY zB0NWb>YTe#h?EP3_FTw@GeD%+q@1K6ja0y0D>tYqNZ)>r9%MWo<%R{{i%YF``{L{k z%;4p@xl*kme(pXKG<>NXck+spQp- z&}-<04o~DzL^M;OE=aJh5lTV^aIHE%HZpzk?!)Yz3BJ*3d2Yd3@?a~mGAg9Mh&1I` z{Q`@O^P<`qy0u6NdEO?OC_XzSHp-|q!(a)88>K0R(OVVzJAua>t3@ zqw6Z=Rs`)WA~cb2M!47$?*y0q(JrJnuGP>PSsP_G5!D?bnY2l+zLo%^_x2sT@r*t+ z`b;Ib-D3^3!LonxC$UD^Q*qj=a`}K<;gBAzH8zSr_{WzyX7$`(CwQ49sJw%pjsXUjFZJ7~p)fMom9A0_Y=*aQLaj*I6HGJZnb)4-1<1c-r780~ zDThu^bedy?1py{hh3q_Zp`Em#?W1g~Jqndl*fYE{6XSe=%ow-4z^r>4Raj!T=qD?x zQ95LRz$i*4Y3lX*_3PJ|0K9ec=G@$zGhA4uBcO9o4Uqv%>*OCktOfxEW4`*<>Q`o$ zREv}lGEFus2u!0$3hSF{rBEvl08(n&IwYdpDm`;6fb1cZtie>hoNlLBDvDtliVRW- z2+Eu$5q_bD$OBx6LMl;Zz3RHZBp;|JZjRbi$6}^;)7+^t&tX?i44lHN$Vv`7P-zVk zL&KLU##Lr{`-f^ngvLqfY_tKKC9C-G;EuP9ZOvfotziZgj(E!_j|^s=O-+qW zkJt!H_{E76 z#||Dmbo|6L+0j}6I@M}*W@dJDWO!~?86-ZnpqpaQb0@sjgWORMT&C!@AxTV(Dz*^_ z9IcIalbMFnpw3$>^exTKtt>55gJ5`69W5J>N}*yv9p$Y*o^|!x+F46iFC9UTOG$6c zU3^pp?THUAy$z_L=ZN4~yy7dmf9fe<6)*qLc_p-tL1_V8K_qZUUe~^4OlEclwz(>h zF#c3;Y2Gq=*R6&IQJe&Vk2piHnb4au-sy?95FeH*bic--s6I;BImI2h2*@DaI!ug; zL5osIRW^c+PA6}gQod+xVAaY^aJltci@S|G4hz{keDGDgBQ0n9Hg5B38yK@DO!qvV zm`TWFh*Ei<-R4_b-)Gd}4n=UQJNEQ$_1_6T>VxRs+Y_}YigYhAJRQOqjaa`E4S9dh z_-zBf6CU;Q`{8*gVS6v5{ldppSb6+bNUcn5M`v^=YPxhDEV$z6A?6i1kd_6i>ua(O z>CkB`T#Dw46Eq~}YOKcPO|yxci*R~D2%U|gcP%OxPJ*zy8I7hVPT15v zUjD!=;Wy-@R1QR(&b4-1qi8_KF<6XMLk-9H@ke4xPk$mf>z)I1)UM!p_@tScoaoNi z*pNaghyDq>A>u|UBs{sF1aF_PjBY&Zh47M-q`*K_!v^}uM07a{Q$g|$)yfBJW%+by{uT8zT20X_ zM7pN9@Q7Nd6t+~|a*@M7a&Ev>+XGtw=J9XjTbwfKIc!^<&S&y=ZnuK;_-uvWiT*4{ zik`u2pz0QPH#EWmf7nc^)#s8711!T99LvYs!2kZbvb>0tt?roH%$GvA_e8^fb@TTG zA2iFX;_=MqI%hx>I2T9rdl-J)ZdI$+hKGhHCnxD9Vo5N48>}vB0Sb+rJn4Z2HrP05 zR;T521S}(ETJNjoqIYI`x#haO*gJ|881Yc1Z-DcymgP_q^YBpgQ(@-<%(L#@#Uq5}}BAQuR5Zvs1|S9FwDzt4H*1PxG%5~%W-(!#GL(7I3!tUv~x z{!;olWV%DB1|@vl7e84pU_ueInSP1|)hZ*FSd$OM63Hw}cJ5S0V3xkY_8D0@$O?QU zzS-uJZM0Ebrx*^E5vO?;%j8b<5KDuW+*GUu;r$$sl=+t{RfHj9A`r%M=+V)JHtBHa zxAMf0D63aFMGIqjkUm{|yQNmB!GrY9dG_0A?i|XY#Oi`OcTVGEk^&=B%w@ot615hY z2CLmg;in?CJ1c|CgK866iv+ok#O(SK(NoHAz^aI51teR!N0i9z20Rf&I zCN!x~8L)m0WD$^jJpd<;5#siQTU1+LzKvVaGMsyIo1Z~vP_nx_1bQMg$~rzAEqDD<9h zk7r21M}rFrC3%HGuRKqpL^6Mc?(R;(2K*piTj|ME-W^hN1UfMb1!Yg&p6(b>qoy@w z&0Xy@A@5=mPaGcdhxP+FUI+zX663bS>PEK%NOTFs+KfH83BMh$yKkdYFL4Q5WX3ml+vIf3~#1Y5DFqE8par*FsEi` zBR9B@m+OF1?Rf;( zngh>h%6Wwu>??&5+afUhqb&zR!`9PX>8NyO3XuGzTn259U_s)==@bku1&=8hnWrOfsmm$MgpRSRObWmTHJp|3rBfMLrq( zYl-q>U?| zNHx}c2!<#VY0wiF{$Nzr zNf0@OxaZ*8GBg(-dgx)Yv%1=1!BM^0SX*12o0)@V9He4yvFVB-+v0%(lVFM*A+(^R z)oMb)_{2CHddEgav9#Yhe{OYcU4!*VZ=1m^J~us(Bsy`&^7SywIrsxe9VZs$A}t@o zTtxDQJRYoF0K^MvJiu|Qg|f@S0bTqq`RQ2_Vg;MPcxOBxV*}WYM7*US*zC@uQ9$^M z8O(XBEnGUNRP|HsE_w?6it~QOkLzK+$IR-oVbFr2$oP^-Ag;$+WbyH-M1+sWhfu0< zQVUod;wnP*Wb}kuAyEQM?CB*8I;|TMNX?Mu%O6p|Crv;tL88fRExh^I+*K%5h|LJl zN8TNus+C!-6M~+H~_vkkMX!pt3h_o~wmpJdSxo#;0->eUY8t1`< zn8`ts6RYc1p-2Mm^&w?=lF#eyV@9ppmF7JC31Q?q3LtSHmoNLctx84{B>_6}?rwyx zpiIwR$|XRZh#04+DK9&?19iX%q?^{}bc0TgKm>$K?)apYuC#9aa-f8;QZ0 z9XNzdaQY3my!1FKAqopK*rJ30;m4C7Q()-a3s0ePsKA0O`-FcaCt@-T5;(+i1>~2H zxC z*ZqJA@4%P&=@-yg(_uYgBSij|W(INO2t*;^u4d9;XBXq>zMwAfCSoZg@$6x9oQmPp}Py_K>s8^QMF?1LNr8TP3yi!aJ zsiU38$(dC;h|hQK#Gp~k{mzn@8VCmyPWPt>`>Pe(dAe|6ldGAWZWOZA4w%- zPAjWx`pEqKs~7*1Kdx92p$nx%p(qK7#%K30;%HS>H+64FqG0T!NFh%`#&*-hK`bSv zVIrUb?>_FxeN%&z%JQCCoFn;_vS->-zmRY!I8bIKn8z=me0>ggo`ig%^|~YBz!vV5 zWbQ})y|HqEc5WBCfiq7@#N0}4j+2{_Z~L9ckOAcLBEPJR!mZF=O195$o_qOx2}{O@ zD4p$S2&fO@y+Q4E`4YGD)aKnE1U36FFUx@}6Ob1?^r#?XfIMrMzD*Xt@~_#Xzmte^ zx9z-PL|Ha6K+0yBauvDC&>{fKD?ZrOlTxuVW-Shi^_nA@QR0l!!+uhtF*!uSG(=Yj zTZA3v5D8^inXGADCl7PH(yY~B@x{O^SGk_4_TU2#>QtSxXEC~lhK6}-eiF&BrYm7a zhDSz5M?U}Lla)$!d1VpPY;j?^zOwSt%P+CayS}1+A?9WWWy^JRay7RBa!)VG(<7*N zC&6|6)sw&}2<2GMkJE+iH^#9g6Hjq=>_6Q2dcWxMjri zq%}M4!Z|c*U|@7?Y-D8k3t#v`xm3C}a}#rYd1-}$c=PO=kc@>doEidPi!t}_R_?m% zZb)2Y2!MWz^DyBtSO*3s#>U{!^z=0L?fJLQ)3+6?x|qr{(mw53TS}7RWRtFvonOk*T6<6*el(zL>jr;NeK6Jj zJz~964Pe-`GpAHnBEPOZu$4wYX>8n}1(OXTvy)M1k2`w_fz9I-Il-jr%NIBu#DWDm zJ@$jn5#T~;wN~R=QfNs#&vdGXO1@mwJ-uu~CQSMYEyl$kODnl^SaI<8N?n}PQPp>J zEEYxU-mMI;wF{X#c%%s>MU_y<5)Q>Ns+7DX6iky@CkY|^#t`m!=NL;QJrOH8H*%$B zEfJ$1R{!x6BMjt9UheZbFx#z6n1Umw@O^VfE+VJ-rOP|HBS%T4P8^V59zOCLsScI$)xlIMki6)Tct;&n7p1v5 z`*5WJUovLWRR`=`5*aOOtQ3(BW*|F)Sj@yN=2|1hM5Ns%$k?pTh`!jT8hK1Pa;_zByH8Yl`y}|B5A+0RH$tQUG2> zy|Z{{f9)dU418u4kY{bq=VsS42It^9$3y#$IwelgsUSSqK}Szq318&1S}AiSVvb9( zOX(&@lyT%Yg2KEMt5r54IeHxTCK?Jc*-93A(5IvgYL-P$z(-w0L$u%Km$gl((~}qy z6k6E|JSmQY^W+CprFm||4IoJ~XyzkAGkGiDl*fc9;C+&Xol%ET*#zpxBS`6djfmv> zr!YQs`h~cg-b4%S*i45HQL7`=v5nZB6_AR@n}C$K@kA;(@r?GUoz&SAkdb2eg-?tk zNQ)q%Tc3&s{AN>>MZCNC36;{Qgc1(idwTW`9+d0}>Ft3s`jvxl=i@{!sPU?AS5S2XY-!d*09;;NT%t#x1eq5YLoX=G^Ru2ZLIjW56aGR7ehK^_JtbH(7l`}Ext z)Z2s8c<|KR^6ga7W||2y(EJ~@t^{H={;34(U;ls--%S;rn53WN= zh3REx!aJRXg#`}>=$ga+Q62Jpgj^2{Kr}qLc==uOjwf_-*ADQy$wG5>l7!3;bL6n{ z(Q2%&Lba|{L_7}kVPMPLhlYMEWNlsEyHIm={7_!o_nIF{(%UCuLFqy8j9=n7ax?xM zNuLtXdZDGzBT^-qap&f3RLx3tm|=(}_my?}DphSdZ+opghqy?yj2<&AO?KO|D_C>% z>Y`jeXfR9wFrkAf%R&XZFUGr34b`Pe3DmLy?K&0(5arP?DSlFmyc>%p1Udt)tXSU2 zF3LU1MT}@#+>gSaF0qiZr9UPkI7}cEVrmmngkO^p`a!o+dOCZ?i|L&>d8d8zmN^YL zy9;=u&J7IIMn=$>Sg?W&V>N~Kp{_U@m~ke74z0crw=jT87}i^y z?1{mJu7i}*u)SU#B%x%Zm!)a0K)C=tQplzUqvkv;o$6p; ztrAFIj$mUk8yp}9kk(vh*%fD05jU-!L4P9G5h@8uUVQE-?BpRAgbuO)%14YScYJF# zH!_tQ3uW$dAqP-(U$((=F<^8egQy|d0$Le3lRPh1*#q2QP=oVJpjqOPKeRf4*BMHn ze~P7X2yf?|K|+nT@1rS-A5K_0r0jn1gh~O~^6=s`1@U-zca|IE}YsItK!Z zFS+uMhHDi^@96C5vUp-ZBu1a&gjI?V|A6<%ZNeC_G(@Y%yLp+lRlaeHzk1sYBLf17 zPAgD^JKm9)Q;%MT(iXfQb!8cy;Ty;*8|;0jIPjZbv&kKPLO^52Q|f?l>Iq``jZfY&1gwHqQAFwr3<(xd6Zid-v+f1P6LG`6 z`#VR-?tr%mMNbEUYR@}rR8YPZ|K4fKLk8x&PY@K74IA9d$PCD!B=gg6p2EEU?(VJW z27KN>rMQ)pEvWOcwgleBBk11>v=h#q{I_BVpRF9*3G%)9M}0tfCOT=69jq_j(WbDP zaG)V$2pIqvrNf(l$Z&pGSBx@w?C6oP(XlUmeHzA7v8zRROj&U z@XAX4>tBBcQS-0=^)C$%4KaHQmG?hzKStmWe((b@b4(XmV6QT%pEz*>|5sjl1sXsO zo|WYlrYkYzXb2}xo*)kg4;&yb=iWMxrT6o{@bk5yp;LF=P3r&nz3RTJi}`?pE!kw+iJ7KJ2|IC}Ib{S&=7_L zmN2nSo;Znm^R0jQ7MP!Y`e`~f@&lgp@4Q1>Iyrq3|7%yTVR?S-7k+_p3(R1)ao=;# zeZ;zO@g4e*PkiDNr1xQ zRAnIN`n79R2(AW3-Dt|@EsWGkz?6z3NC2v!)JC=O{?c%jScByXX|=fPj9`x4!blz- zp}J2^PU3Op-ODVxu=$FzB*vy4N|qTA;4DH5yCYid;u`f24bP&6>0hapS`U$RSE#Av zhIWo{8K0UUYmz~QzA7`!Y_e~0m+;!P>(^-#Ls+83Vu0#*F`FTAk4v^0D3CjJZp zp(M5oY-h(h)^ZL>xc>f;sR;&trVboLr=;;_74QK1K=M4~ikK?Lx;B<9jc zIim&cR#xvY5GboUwBd-wPSKmQ z`WS9?Yu3pe!{t$u=R`jeW6YLTEcKnXUL_SDmrM6l$DedeFfoxYz7@?T1)la-3u6Pa z+F6h*Z_lHtjR%yX+Un`Xkz_-rad{FGtTJf5%mwH&a&>jNj_gAAf?)2}Eu_lu_;^rG zzUCI^p%w#7KC*vV7^X`j7<~u65sT<_!Y3o{;#*DkE%%p6MT3&+at8-Xq$Fv}Q5PM%{xWmK+h4 zM`a4;ew8^#pvuc-jS_=X=QbvfH18UuhSgcrswgNl5jvV&Sr#}QWX2Ys_ADIoQK$-( zZ@a@Ew|$~F?DiZ2(&I1+gScK}#m}0DgS85s)1)=f02O)%9#25`cNos-(`GYjg3k2j zS5z?8VMP9N=BY$vTb@9=I9a6uICNt$-B44+Ui4d-s-uF&wlamf{LK` z7u)V>-I<|VIUreNtyKK6!yXJrYW)eLp*$WBrLFls*cA>y8hz@irFH2XR}Ms@YR*0tH$IX1Fl z&_WXT$71xp_@fsw1i$ya@8SO|zw}GBq1uotvLWza=@WXdY6$@1FYrTUuU5xn+$HrUP@H7@Xh#{`b+J z&!0b!Df{`)e;$MIH-GatF<+m2@=5Z@5@L)=COk>u@h2XS8B|hv3`In_~={NrKZ;XtL zXjpu`JvlLnA^qQe|M#KclTSRsv@rXhN5{rL^{G!`qjx2A&g6JTaKt87`Hkhjz1mbuEdO2 zaKz$^zMjMfhDJweipP%~r;(40jRB4Xq5jb%XqK}Ji!{8|6?EIaiyQKl!M;^`ItTyVzQ}d7W0ht0?BWjK4Dctv9|i~VW%PdWzgxsz2RU&< z(V(dnIGmbAg96c@Szg9qx*Lw$idvJmIrKGIs>G_0S_Mn^^!*PI_toVeA$*F1B@R-& z_u)rqfUmy#DhrFWz5|iqX)MkzrZM(2lc`kH{?;`ji($Z)iar`ARB1Oal(BjR!+4xo zV$QeZjC_vdRju^u8S(k)>D=ARixvvaU5%7_{(#oIxd>#X zL{OEwss$>#~8q#edE_@w0%yDO9~I6K{=mb3oTq0lPnnZ^tsA&0tt2G@4!w zj7~{W@KH};c!M~Vuy^8}&TeVX^V1P8rmn6(x>bdHS=w(eH5Cfc?>^7yi zA|x($NYm9+^bOP|gv@|6Ojv_6)}c9Xj>S>ro<|WPdeB4t!Y9#|k**kGn|}Q6b!8a3 zLGQaGQjJ;bpfF2wgC3V}TBx}-ba#?mTY5muh8~{`XYgTD&}~0ebN2J>FO}QTzdvkS z>CAY(HRS#A*-HQI@a`{1lqM0p)b;{q7moWu+q$0YG5iQ-X6VlyR+3d|8nq;=!w4YnC`Bo%Jt43DN# zk=`7-wFY(#=^}GU023T%bETohP>2PzXH7w3iF<#Dr%a)hEY)g5n9XDjoi-XSsxk1` z;dBizzVxCRK672A;$3&$CDI25IT{L!8l#a#+QqgGb|RvYGgU+yDDoHr?YX&G(tG6L zhk3vA&IPbfAD>8bLnFjP z2}pp15Bv$?`Z`uL51v@7*zlAK%0HON9e-Hb{J}}ej#36}Wo3zSKlj#KV7q?f#=_zv zENC+yPA8DcAE`$%f=LfNc09RUp9oPsm)Ia3Po+iNy zS1w~D_g}uMlk1f@d+OEN2Q}6XHOzl>)^vD`hW-eJqf~5(A7Fp-d~_V>@;@A@ikY7G z%l*-1?qia2V!il{_@_0g{qm+GNb7~&R;->Ql4NwX+x3NIBus5$WN38w9){1_opZ0f z!JP{I*uSGA4?O%3DBe8tdJ`K16@LH=PV<>-2n&<|byO^2_53j3mVXNM*%T67fK@9D zejPk=1j({EKhNOT9BPgF!c~kCVyYKIcJL#S$>SdhtEf0x^`WIpF6AEO4|*Nh@D7*R zIan@D9y~lgIr*ihpGGKMWn}u+t=8N!>8@z?N}=pahQbhKmn}Zr=>vDXuos#{gYI)= zpO_6=rGnjxn**zu2X1$o%S&)i7scs*TlclTD7mB|fc`#Cb+#%4o>r?4q>1Np0OeC# zJisO+3Mh%)Qn3OR+SBJ4f5M~ z%)f|=vkPGkCU$QCZ|fqOk!%}yJ5SOfO})uIz_xSs>xkmH?^?$IM)q@>n;5dN(xN9o z^Q9_r|1b=c!m3&lOQe+#n}TFZOOE4oWocwGFZI@(EOkO)6&XZQ1iv#C--wJ;O`4!YTL2n5l1)+V6Oke?4;Vi0^E(m{ZBai{ zP0OWAVph`1(0=)|UwQ&Q-WXjtm=vXwpcv!kVP+B&RCX4&ECwnyCo2Luk&6sk zuCHMhVsH%&)u>{cDb-He^?IYu%nDj7Hk;=dk1>BUH8sJS-j(Gg?iik9l~j9uVa`WV ztt?@&F%1L!p~HtDhMrD_Gqx8EUln+5krhL1z|jHp>nDyM$KX78=rCzv`}q_-wQMXu zm{zTp*|!5_%m5RJ_=24nX&9U&arUeZ%9@@&!MyIlLrM!U2B66)7Nhd%h2P+ro<5El zJ~27Pwqs2`t*_6_%#fE;r|*FcfBgUaG0o~{p8grAJa_IK_Aea4=iPTN(P7b{1Np=! zpMX!#KKm@Ii09|#%u;Rry>#&s>D;FpEEF>sJURnQCNAZ*PDWq@d!(@iW@hFnqa%lPNz$Q%2WhX0Z2aQA6`(2DsS)uF(XkA*uwB zNeb~u!th@|@|NJXBYyT?-#=`~JIw&@wk?nPn;URj4A0yfU64KDIdz_3LBM*9UM|35 z*2Vp-bRb4nS}Zjj93CCv`m9&aoM|>z{_&Z=req2~KTsPUdFb&^HkOuWuij+!;k^%i ziaD7=t%$04<@!}-h8N$tOqVyzcKk|t^3Wlc1WZhfGfMO78)sNvzp^-oUNGndjf;#+ zwbt%FbsD2~hAsXqm0ntqY-njbMi*i6xck)71@uoI)G(GI7a3gQ-a&FAqWDMM(LfTj z({GMum5~u9 zjPJSko{{nK$3Oik@Q+U(U}?vhiC1X+H!dk(ul(pmPQ{x(eHsa~OipM;$Ox_j9~nkm zjg5~nCNzC=8m?Zsc$o$;ck?Dqt-08M+oeG(&{_{Cj+^hw+)tj5fCH-cSqXd)?vEf# zAEzW~%8;uDt?5IzaZNn2%+y0rl#BxOrycd!Xqb338Q@u~Q64T=M@A+lSoz$hy?czQ zv{oIgvH%#FhKWI^SSVMA9{TiW8G^q4?v-Y}asASzb;ht-YwRg{=(CSiYeN%LQ>YPV z-g*Ot#aGJe-owon-^FLf!M9j^$ncb^v?<)gk>c?bR_dKEU z%Di#&-UyS)6E%zs>(l_$3Q(XZA!gSX<_D|QsY8dx4<68N%uaj!$YEyI7A{<3(7!e| zfsEps3dY69#wHMoXWw|EQLit}%pe+z!^4Cgo1QL}SWi#8lAXeqT0pwVX-CqL()!{1E zug(QsTRVH^4J0Lc3EVqz@;LjQI6#!~#DD(b4;%Fc$39!6Ih(x5F^>!`WHT19e4;nP zQ{gh_wDOlA`DgtUVEkE1#>uCNi|UQCzvT6S|JZ<3ve>7QK1o6!Ze@sfKyXIuYP)k| zp}yQ`z4GSy<(2xi8#Bz1eDTT8jSkn=21}d)Ug;|nlimu(3=Xn33WHVqv8@k*T?lm+ z2D3n}=dotmts+>Gj9zg~Nr$HlT~;vjwuufa6*Qog(EZEBQNE?Ul9+iXYDvB}>@3M& z`a4V-RdV^i5~Q0@f4k&CuRd^t-<>3NOC#m z0%+NZmm8iS-1ykDYolrOM%f=W?dspq40|!%_DjW|6(6OT<)X*?wn#o)fS`Bh^4d&I z$m}d1HRdKqzWmge zFp05sS=sx;f0i7+eEBjXWf*n%VARpoT)B3IO8(q)&tVpS_2<4eIWhHXzxMAL*tve~ zCdW;``pU~J=w($StYSem^6B!s+Sb?L?Bz~pY-G&yv9pNkQ+MBuMQiH7_Ur6F@Fm)e)z%< z$m#TnY5I{fZ@x*6n)N2r*DU-7hK$hTus<397yju5xCI&HlmP;2BJzl-ERMqB(qIg7 z@tm_lI(<55s-He{9j;<%pf<2|nU&DL`fvUXB?3=4GUJ(No?*E)3%P;0di^TvrJ1B9 zU69b&FF;$nJw6JjNB*b(@V{UfuVGF!TkI2FT3meXwbvknUB~GEr%#=Nx8+(D4dKl< z&r;MBD-@nObqdT7Pg?I@yu`o(f)QcvkwZxpT2Dw7x_(N*%L5419}L$tJyo%{9!dh_ z1XQ=yeYB1{%>dRq2XiEAU|p8&z&?)&YXyh@^iqGwpJoZ@2RLX7KOY~(VKc=Nr+^k4 z)&7whsW4x`JjrW6VyRwza(bGPrek;C#rYZYt$KBE@WIb~ibV~7`-gu@p+5c9uQ3aY zc__87T%>v(IC-3A{M>Ud^c4qJy*gs};1qk+pZKZIAff;Hd(TtVur^Ver1sKfYXF@} z4<#Lz@UMC021+e@6o2&eslu=gP1*(bEBa6?dV4;oIsJni;;!4iDz!ltoUp%FM`x8v zwc63U?q=Qp@gql3C|MM}I5*#zpIa}|_OV#ojI;H(i!1A^b!_p0B8R4Ho`h#%nWN3M z*o8Bz5p(>4u&*#OHOU!Tk3aTFGJ5XZo7n14ef8%F`u5-b9U^9KZH8ej=8_;vU6E7~ zy@hc5XP2PuBm8>8)L~9_fNzbWzW$6mg8fptqye)%hm6Tk4{50OZpf9fj?)c@^2 ze1oGPF+te{J3KkTCMYbK7K>ZhtjVC8|8%7UgKyBR`mxbMy?Ga}4Ii5t)G+_i(y>Gk zAeb6nW~>b%JVnjBa%5Nk@bKu-!-Lhz-+lX8LJm!zU^e*5OD~s-<)^;(^TX`ss8x|N zHyOO^bbj^|50Hz$dFJcLpD%s+i)0nM3niUyb)eNca^F34+mAl}D3H(p(+dcvM<0C% zwdRd8Z!x4lF*QNe9vmBGko>Vn9z#L7a`h^ZUp#%90fO)R&0nKfunJ~qZ1i9Ki+_o_ zbN1{T^x2%Ji4t?}?F$SF{L5eb7udjz$Ez=gIjgJpKKLLvVO+d$kzq%)4oxc-%lwHM z>OssEBz3eXtcFK=; zjzqG+4r&b762Z)oHrCp&U1TVD_ILiJm^Qg~<7TmM^~n<}N2W%9?bm*-G|mW%NOX3R0jX4>*`=Q5ej_jV>VX6v5$??K zE1!=_W`^!W#;J$#reeER>J=ujc5n7%0eZ8CJP?%SB=g<;8>xVBbAZ1y{cUsLe*HJc zk8fAPG;Xs!#BRPDG)wfkaTt8Vf4A5lMHqDQZ+lK}PtSYH%kHsI1$me$;ZL&B11r1{ z(KHY(E5i5Yt=U`b^8K$YsU002ra$7yDD+*9yqYXda4`?p^Zv!3{l(n;+!Ae*#m4m| zD%$eUFzcT${mum}X#_Q7EX*$;ZFTZCf1cHybi24;e)(mOc+oo*bxQGS^Nly&AQudDg00Fb&b|U25Y0q0 zuI=`@bLR-fYQ?12Da~lS-}w&6j-5DxDahVNn$itYX}6gfVm|q|{`cR4p5+EhjthVO z=YNjdM>!&a*pXEDz2E&kv8<@8;#QVcq$Ft2yPuu3^w;B~y4*Gk~KQBHE4FMzjp`(#` za?O~vc(2L`aT17Hlf`-g*~}Z=BB_78o;%F|?n>XTV;g=__T6Agi(Z1 zp_Rt0`BV4Ka(cS5{X*3Ga1Vcbmk3K%l$(mBlkb? zI7_H&QwMktADF~~{nmG$)j8t>9k$PY?#VBdYC}5BRhNLb*mCfdpZh8e?d@~tS@v=H z#tmu)6RlJosyt|Q~p@Rsu>JSZJjVWoi??3R!!?n>-Mx0Q=Z_Ukf@kV91 zhN5}=srf&7ZpQ)5Oh|jw z5>r|`|LF+T7y8K=kmxf$Q{4-1Il^|8?vmw4<;vu-BXoyVu3jiH0X*DcImUzziz-iX zOvu0jTOQWioMl|AlplQjk(I^8w_kg0?%MU={lh<`)vtD1NPy3L>8DY}%Oj&~GiuGv zF!FWg>|3<%x6hoZFD~7@ah0yVy{r`++7W@t!AdfA(n>gXA5oq?c{iQ3PAf(rMeZb| zG)`w2i8$}(rGKrI*ZT`+UVE7l?MEw_t<*XC!S{Kap46M6El{=@%V z9vSH$9io@Te&P5pa>&-Mv)_NAxxBJgUoKaxqlXW$KdE+bl5xL@6URtpbZJS)mS|^6 z>ETBnU};-(zCO3G^!i(8;o>ho_9z@X^VV5L+!1AH3B!})Shp`d`<;cE*%-rKt5k-^ zM$45Nn@doASWWZdbI)NIcPdq6b!&koc5RvW9Y(uVg4#|h16Y4>!A0vPkz-FP<&1IL z{-#!GZ5HNzSgi_kM+%mWH0a0VjFhA77!c7BVyLuKf|X9+Y;*O6mo8qpF@JrjTo@Rc zIR44;gJbi>GB)ijx@fzv=EIdc4e_C5+qcH;Sp9t?!(z=6#_C$<=B*{>idH#moOxGv zfOF(qiQ#5qh@GUS+;jX}p;Id|dR#bipjI9%jFx0c4`PaApf1g`3GJVrd+yd^>)V$P zuB;7mMmpG5SYfr^UR-KwTRlTLI&_>4RI|I7$V_Xfm*rf^c6()sn=sdz4WZNqQ2^*= zSrX5*N?S*)vA>7PfG$|66ptT2aP$C2&2WM^=c~DV&99gU4l_QMd559vz)i0WGk8B;Rbm(Ef96x-6Xm` z;mE^muof3+QtY0OP0_di%%!_Mz$V`;`^vN8n%GD^-tYr|N)n*n&c~ z^C+{Pjb}ZR>ZQ32JWj3kpx5T4O{%TBG-RwcgD{uIJIY0a0MKmY*Kghguxk9A;S8yq zn8g|>Mj64t)+(l{f9t>e7Y2VZUZ9zUtH3WgMe;(@m<(WJ87bnCm9(OUT#_Oe0rDu- zNY<{8+v`pWbv)H*&)xr&LACW-#{4!fSM}?4zdWZHZ(al zSzlRx^`(~==H^&U&!89)O^r-+BnocEaHKf0bdW<<@Wjg(Y>2)L+8tCzxwcnSk!Q;lONqcsQ(Ofu6G9nKJ4Iu^z}Ad zjMnw96^X(cHd(*yP(o-R7ZE|yLZ$YJw#X!Y`V^7QX877E@bJf&Wro`eR_Fs+wjysS zLBkVc9Pd1F=pc&6`ewSLwf(Zq2}};SnywH$B|zZ{1j2Y`pUNxn>It zRmMeHOd-%o7Nwqgegoqaqm+|fmgvL|jnzg+Dqnu`(b1tYH)ll-W!V-=TwX9xuJx@H zZrqq%MCsM>Z)9QsboHiog=?Q2gGuEf^h*Y4$pzIM4HEs9+C5y=qWAIP3a2)frMh*B zn7&*UHqd6+XSmEgg#Fdp;7FzabN7|UhtXFxr`>(Jyv{uJ8-<*;7Q-e^+MR*wqZ=Q0 z-rs=l?+eC)kc>;xSYc&4PBOqv~LvgvLMe0SI?|W~HZdWMs(6H)exf4^`D;xlu9Xh%qdBU4hwz3AN9FQqEIKLp4$l+76zw=u6VPunz#&j0V1?` z(Ku~n;$}t)vptMMX}Ef9uz7rlE|O5T9s()Dl6h>dFXg<05uFsJmB58QZX3o&(`Iyc zK6gXukc6y178vQ6E>@Rdb1;C7)gBka#{dL&K5;QJfh0QF;+!c+BntoGGWmi40z?j6 zLgrb(2?mxZjvKb(JC@qGly8!=9}sBm@J$_gJOqT3%;BR_fVaK}XK;uSN@nVGau9Nu z^)D2QK`5x#2aempel;xE*`3s3_CXHyS4D9oG3zy&J9L3CpM#3Ys@XoVVnN&h3`|+ zKlin-RR%dNh6-F9J$$S-GJNvxyIEFTZ?~A10e~9Bm@_qAXX4Qqw4Rx2N1fpWIS+<& z&IX4?Rm%Kn#EE_y1((hDv~80o5=B=0@k`aDa#QuSaZF*|9}QsVt4)fn{8|5yq`*B=t1(>0G7PpcU%7IHIc>F8Tk_^R)cRMM-2QPMw-4H* zuVldo`|J;Y)VjS>q1p}Bn6`1gvow>zTiI*>3LX#*BkJf6{`#$jrc4^MsybfB#2f8ns1tusP zbg*(Ycn5!x5Kw{y)1Sx*mSk-+7}!JPrfl})fgDLv1>=MNGAbqxAHtX%8=tTNd=!Dn znOF=MbEOkQ$aU7EHk)j$Vw(nwS=fBB*sM!+Vh>1P-=zz0GkrI8>v6;I6BIUKYE!y_|&Pp5own%UttXU#>_1Y;1d&vxODx}Qmuh_B3(OKf{!^c05#9Pf z{nO(70)Nosd)L{@3VBlQ#6Le4la}W4kg%4Sp+YuKd)O2)^fuf^EeNQDaRX{s*AAF> zjnfU>Fo1QD6WLJ?>3Q@D#0>Fse>0~#E-dxkoNdj_uNTUPIC<>N3-g`6g_R#@hM`vB z$i;$gtGJ5F1*b|REhyjXfrb!J!uqJ}j(F;=tk9CSG!z0%@d=duJ zQrOF_64aD@hZ_s%HpfP$nEL1+EYVHBbKx?5ADi%~Ehmmmj||oBIX=afg5heB2EpZl zlqFYXV-k;4OLT_AwQ{A{_uyeoWgDjec$8MR)Z}52BYzc|LF~KpD-W~3g5DYDP9boY zAZX*kfI$(`CVw7zqh!#ZbG(RR;|Rzgk6hA}vznzCSv5~NRh-*Biq-q%rDYHymPH#e zNoFBw1r`44Cfti^`>)LjZV%P<&1Estl7Z0;%{#W{B_I0na0gQ}*500GIH5|AvL5pw z)FvWkZ83i3qY4rs^dfT53{i)*HI%AkK}jD)Kq^{Bpa7#;qb+mPlQ1y!>V2d_3S@!R zImA$%1p{NCR8h`67M%WwDs-CF;=jhm%TaZFat`tk*g<~E^+6AQRA zWm(IQMWrTpR5$4+h=ss`63klQ(T{%GaQ(1fn_~@x)1W-->nTKOdR_EPleqojDREl>vy2 zX8g_(@*x)dlJ$zEH`P%MsgF}eg^FbZy4gtB>HgUe@a9nc0(^v}iW@K`l@#Lk2MXbO%)`aylwv7&^!^-Dw z&Hd5WzfSx6g|B`Uedurg@|i_;(z9TTy6)qzVz(GIRGlrJzAaRyEEP_>Y2}iBs?EYu zQ#2aKLw1PbqtZuNm(SF$mVTK_G*MBo z;To!6gUM}lJ&6D?sN!PnGfy%;IgXC7zz9%Zf!mPQS@%3Jzy_+b&wiI7uD(Nu;Ad-T zMbp>b!yM(9wFi;e^O(Ap%*KS`mLE8FaE$+DQaym`|BvHmQwt zLIgc<&;8Z$v8$J_G+NEK&c8+I)R9AokpqVgbD}5*)&q=Bb7|??OD`7MEpAI<)pF*9z#A)pSl}DIE(~cglp}v zV>lvZZKeLoH~$W1_DvlmU6$Aa*=W?63?G}ASg%%bD4*KB!ij~P4Z(8R5-ESraS?M@&G9BYJf}Na#0N z*ydj%1I`mI3e8Gi{)kG1+JQ$_qXJ6siWV{bwZB(%BN4}L4|b+(z$Q^YirkL zR%hqe7FXKE;nC7SX`sddR9L-qV{LZ9VL7wZiRskiV^c7a8JzM!XK1Wh8!1jrXe&%> zb+ENo89OvhRX%mkgB;H`dGL^!&rTjrPo0|~zlRP_wwjIae&-(=^`$iyKXNNat&b(r zP{Ko=VP&OKEte|~J^UzE@zKv#8f%4Xw@`5VCa`vk+!3voQP=%eeJr9zQ@g&{cWbWk zd%wTPa=+P`da+u0ZYpgGLsqKd}y%WjZrv!aSjMM!Tg9q}l80Ez-am3mgu<=ViKbA>LS zc?2H5BAZ>D#>R{5u0@?fv#=;eyix+np_KV3YY_6}%RS}23!Q~VuBCH+fDd$w`n{&0 zZ1*xQJ|kD#V4(`27}HfHlME0^GxA20U|BDBh|)j#Pi7~RJ?uDTjK#}tbxIvaOK^6u zV|CH9qDgKT4E!MTt1NF`;FIxDsvq#6S1jdB+*c1%(0xn)AA4{5TA{_vV{<^5n_PlbPq_a*{}~ ziMn2ua?93e5#nq6(ku>;y&gL;iB;l+EgcKzAxOZLDV3HxQBqvKdE2}FiPpQhTO|6t#&SyKR%0M*~i)NP3MW^!R z6>{FhQp-|#YNIulx`2<3-=R)xkQE9cN66>x75E&RS#fi@lk=j@-i2Wl_R^`@Q{Zt7 zS)azi3^io1Rt8MWXPEPW63(C+2an?M=X}5{o)A!^2+h9nvaf$5RyOzva6euJn0&+H zDl3X#Q*SCH_lUG>HIgVbzeBGxG_VY7(TV`l_F(lgE_WfIz4GHuE7z>BH9`x#+r=EF z&_GpVPN-Dc;ubG3G&k|7Fn!I2ex2{?46SV-bh1647WnIbdTC^0{OiwLfz4if^QW}) zKl`(P&7tsH=TAZNcypZ%#p6Q^l)bI>drEQTE{so8sG(S|t-$K7+c#mR3A98u=Dm9j zA?%kHPhWWE3VV@%^xf~V?cM?;vpXQ5se8aFvn4CP&AZrZu^*w(?pD<*-Ic0Qo4x#2 zEX3JLw^CT-vZ8!$V_}{%#t0|HVr6P-3e%=v{L+iGy)$Reg8tw9`JXW<_2%oZZ>+D~ zL88fbZe05nwxIvjm;L}Y{pi_exD(}-AO1jUt&YkU@7(!lgiFak`y8!^-Dt7}_sh2^ ztFM3gD<>z$|HJ?Gzf$P;msgN7zxTcG(dv42X3MD>ovq?rJhfHf@Gymyd7?3g-|i3r zWr01pmWjEaQ$yu(p5Uk>#sGIac7z=P53v-yvP4f+Tv@JcY>XEsMw-|RS!2Fz>leRZ zr0tzQS05Sq`oH=UX2~YTN4S#V^*4Ub-sU&nd<6ygPyYC8)w9^$oTPP+4cAy-%`LC= zRyV3c<8%-=e*O-J8^8L(ReH8ta~Ckn_p?`C!Q#7>aGAxTu4*U}RI<5&>{&o1T)+^xRN;7r*wSW+QvO_UdBx}D~JA4xVw$zdnmw_?KX3WpZ)yj*^oRjA_0O^8pt9T`r@+0?#K9HF5szf1p$eqL2E{fBOz&c_H6K z*)42ubkX_q{IUI;3~21H4^_YT#V>I{cy?|M+8dO}R^#nozC)kcVu_O*ak_0pzXnEx zv9%4YCwOVVtqsxNQrKp z%wd447Vob&R%%O&mHQv8|GHi&|MyovcY3D&hnFiul_IOJOqsNLv&d+iep|TT`|$m# z#ii=T>T)MnLkbtu@MFr82tF>V5y(;^NBY z4_|(h;eUK=nmyS6`(J&2dIWh_1sbNp+@K*t0%eqb?57Gr5b6Z#fUII7n{s-H1)$!N zP;}zoxp&ynUs2K7>NY#5SU@uHhtZgC;*;5K-j2wzyqP&P1iD{nZ)B-*goy6Aq7-URg`Ext+dKe&pv2}JZ%9n1&+bn5gqM@aeqAcG>E&#$b5tzvg;JS=Mwq0b%J8~VZLn{hI zaA{L7frrf2YqFfryjToybZEog!pe3(#yrk9g2$&T;|6K0t!Zw+(rK?Hb%nEy_kb~Ebx6vgKC!rC|L_TV43ozmloE30hDS#6#1J$9V^-!_PNJ~z z2MJ;`>E^qrxY$I%atFJ!Z3IiLqlcJnjuOoqTT<-VQ9~>*dZi5D38~2T(4z%cjXG|N z-bx+0aHRaOjCgtBj2w9rcr2Ky3X~l^E^O9;)pE55M&<@}cA7bOh5dLcWewErxHF(wb}t?_x}2NViha*pU#JJYk0p9eTU0wSCf) z7?DVHq2eck!wp&jV>%HL=+gA)b}W`zv|I`Qh^5$M$U4J~8#n0vZ{EB~yJhD-vqQgm_gw^{kKX?P#H=vz zUbw?;x{_Fk$2JDm05(`j&h=jUfB%6u`Yq_#oVZaa{O}*Yi_iAj2K@D({;$6wq4hN# zd4KEmH<=_mF?9m&MOsxZu^L5AId2eEEt;uwF0mH#(;$=>{Ek2r%1Q77U_@5WOh3|X ztgXNL&p!df7Ke~I$xa^g`Q_dcM)Q8KzD~ZFG6x*HTTD>d&K?)5G`TM2tyh0mtW@56 z`yC2rZEJ%g0o(wggU9(I;>DXUzsf`r_RxvT=5U2JI7^)W(RW`$K4$?(?8xci&UTY? zU&!uWkWr>ou6p#-uST_BzWwQ%_D3I5&}wj&nDlX^=O{|@ZbXT&-Jbh@0ZJUct0PHK}o!hvI zJ>sL5rc59CG3Wq(;5ab;pkqA{V&8xa(`GS5_OdaM5=;bx2zHYQ=V79cX5;2e8^;y^ z8=SUT3?`l=M1E+55-9k6$XCJ0;`AF{^5W7E<)DE#wPT<`qK9SoSHhp zkc=@(rodNk++a$ZdF)PcIq@!DH&p$WfTwy?g{pnqFiUzdTv z)m3dZV-sDu%W7enl2FOG%Np=OhUrqdx!w_%H6xG-^>8G+EH2MXfWNaZ<3Y+g3?>VI zL^tS|+b4Ng4|fsOf;oQH5L6ZnEgb3D=IV`W@2xE?u72>&&lxBG{a<}!a%${L&rJ>u zS85}npXflK=of07*naR2-nq_r|Klv3hB!RzyLNFqO-(8!EC#9dToQ zwbo%z5!<4eRM^_AESbPhNTZ?!A?tzjdutu72|`uAZ45hk0m*5)YNGeo?4-d%q!6MUChk zwWD@&)CX)4{iqR+1t*@dh^!ib$M{f-)jysna;0w}H!#Eg>=8#27#)|{%QxTnIT0>h zzKqPnr8R_daSGG=AKmzfH@%I-SHzuS0SSTDq?IiC0&lHcSXkgocZ}29a9?zxz}=*@ zscKoZjnYYRVU&!xTvS1OymR|D(iG|<)NvpmVs$$!=d{NrSTsX6gQ};W`3yRCTPkX2 z>DEo)0VY2XqhD`!#a6sahvW10Px(<#}{OpZ4=q2Xn=I}=( zgY290H=rMD@aQT-lUS0^Ey=c9Zxm&QyT`raM-Y^tVj&BCaQ!-@(9IHk_T(w3g>%UZ zcgf;;Vrr6{G8Y*`aFp;Peh0I~`zWX>6z1ZxOvg|pnJep+MMMDbyAtq+L{TJDEW^<= zb8Qbxo&OH?x7}icA@S)q08{;l>r^>Hf;yz+^s6+KCViUfE|^kb`#pO@_xfbx?SwL} z`i!nZ!EMr=UnTj_Cuq-tMH}DghT#O?6UgX=CzcmUMN&PJH8qrHuYPNCL{mSs6VhY? zh3DFDe#0mR<1wPKO$mP(2`{;NkaZL+i+K5E^V}x@M4O#T#Ed^Mmnaz&s z3F znDAuX(PuHVwTsyS`U>P9^NCCc`J`tyD+4^gE5|3J06)&$dEb&I>!b#2E`u2?$!#iT zRT)1zXpX?Nh1!dNrTIL~=rDh|#f@Qw*mBTjCY9N~rjEihJpvvq&WRP>m>U?r6hCTc z#0Dv&BUgOMt;Wz>)6ERM0tT~a0Bf6Eade;U$0X9~$ZCfqWFbs{>O&dR^PGMo9c?mU z;AH|AA=9kkNi;JZ3HZPkMglM!vVu`~no6@{g&E3v?acS2Rv1MM}7p#SvOUWo*@4bx<$Lr zt{mf$alYd`%rPp0)6mfLFt_F>`!JfVeV7{#bUhpLQNKvvP4PH*gXSa0@O1Ezp;eGO z)fJ;lc8m!|9>BmbQRcBKsP;=?@ki6<3@H-7IE$vHw}b;}y^1ZI=vl4pZlSZTxPc@cx-8tKFTEydY0JC_Tq=sq9f z;rEwW+haFNT)U!vLmRP}ja$;@H~rBewWNNFp$fUy{dL7>Rv5dT7-7oiSDFYJ94Fz7 zD3`XO;&PQ8`;fbv_tfv{K!>IvC46XFj+t-f5Ii~jL_^^CJ5}Ny@ zm)=q@jVg;f&kC@p?XnSk^WJ@RnCcFDGKi`Em2uiuxt&L9u*yl;!Tto*hZ23@$?}FP zes_2(MU%TbX}$W50THy|>xyyz=4v z!u|DMzjJ$SV{2@9a%^n)nTzAIQzJU}1FtI4RKxu`m47^B6^E(nd+h}FebO%h`~|-7 zIuP`Mm>=&`^K4X`7`e}F!85_GyP1cqVPzLSUs_y3Oy_bGm||x2B=O&U_gxz6%&C*K zg%93)pZAFw-S0{#g8q2n;zjmJb};SP=`63TGR=fEg-pM+v`A}Z<_Fam6Cs*gp+jfY zw}Nfp(y5tK9L+#-Kxeph`xf|5otmYGTD_0j%p70~ouPXga=P=kZ$ruCI%1@^*Rzy2Xb ziW0)!SBPQP?mO4sC9QL3PP2E0Hc#&0LG52rr1|0W^{NI&Kax&DAnS&MM5n6On}gQb4W0M;h1U6gM@LSlh=(#p6b$Vlj5*4*dv{3mW{N zsOQtK08_MTs{YAM=ziIB#Vi)hj-EJ;vD2mP~y8DCNI`6VO(Zj!vm)ZX8=26QWVq${es1ekT zj+Fs1GI=om6n9sa6tDwBLj+zMLGAA@L9HDH*gcXJU<#N}TCxT$gRA_($|NZ!@nOWWow18(&IvNgZ}nb-QBnlgBq;9~pl zmL~O}ng66>>Xj7YUwU-rOKmrrPS7U$^e1>F+J_Avz4gdD#Gsb;)q1W^z9Lb4FBP?+ z94U|kA4bCsILrY0%BYg4}*AN+_8C{$l-1pfSFU)^#KGc8Do^m8bfY@Fj@x$=lTWZvYH70|O& zh4#eIndvV;?C{VKDnN+^-+Yc~QSEtU9=J*W&txtKao9&n32P%fgCF^l0-Tqg3AZws zbXw@Zn)&H;_H+M*D9fg@x<~X?eify;5NP=L}5~$%`Mn|e(H>11x`|+3|XOE|Eg(kP3;5FEwLRmKNb2NSZMAu`}a8KYwF$bBl{-0AE zDXJU>jd(DwQ|(bf1(t2OO9J&t=Ol|oE`>!YzQ3}J0*t~-vs+qTR=T%t4G#~WtDXY} z1seF}`zxe{po2s`f%J^(evhg7+{E|_ z(K_vkDfA5_a;zNP{OCh4pncS9HNY^EFvB&FDDCQW5e}nfRgSD7qoA*1vVL=uUYgya z>`b9dSpubYrNUGzV-sWiU`B}02g>$K94?S7~ z(W8aF7)|_X7If3`rvZc^juM2%8NAsK-}zMsK!ewtM>HH0UJIh4D4}$^@uk*a^t=or zd0u;U@b9;p6bpZ__@6>GC=yqrHvN}$Ig~x#Fclsu5IqV6HJ`8?#lZ3jkw!w%+ZWK7E-c#$f@?*81spLiz}IxKtJV^GRSPCYeIwMrLSb zizd|el~Tbn?(>dfR%;e*@{dKefD~>$&LddB9v<|3dZb{xd;~Cf1Sib;r7_x{Xj=D1 z(dAk}AvY@R{Qv{nIpt+{Ai*ihQd$GVzhlSmfdZ@&q@k+IrzZJ_=m$%A{Zq$*9L!72 zfJUn|TQx8unJwJyiJ5e|K__{L?6_(QI#I03W)_k+R$1{2RoMzKmr(ocgio!M%i4m7 zfi2QUOy|+gd%D%&O5`_`aMOT@ilPl@x5WG@jH-hKBHb(^MnO2U0LT6lag2B8%Sc>o z&!PcqR|VRxwrHWdi*njRs1s@v@-HD~YWvyF1rOd*q)e&6lr6TvN%Vk)`A|!Th$s)U zsnUybgVE(w>BNtm-agD$I!HhK@zP5IQAYdEj;rsp_t%B7*ZUBkqhL+ZRS+ulV?0^< z9~uo(n04VDBV=?ikJcUXn-w6}7Mx?UB2y2z2RV&0I?_AU*O90Op;-zFjsy>!IF5Hv zW`YiJ1En&Q3Zy4=;Ul??Il&+5R$F=i{~q`Oj7T-*VAdqGTM(@umO{(uF!pJtOZ%0g zX%ixSmq;jbYH%uCHcsQ_Ry}nV8qxGnEE+p|xhiHUkPS55M*pF>X~6SVYSw}6&kF)f zsOFc)crXsKYB=4Nds@NW=;}T2kag*knIR!YH`CwGt@F zs+K?)s0pP<1q5&XFmyu*vH@>THIo$u@+U7d3fnUAl6D1tiCmVoL}C@%xll^EEuyED zkgqwWB?$h5nMx65P7e&uFM&dI=;K&GsCDmUf^ zfIy65MqzxU&MX3Jp=1Vqm>OWojgn(W!CE_if1`YVqtfb)6?)Z1XQ%}q$Da{-%C2^c<0{B**xtuL7A!hElR^bK|)sP#WU^bfK z6prQ5GFGwLmdl+zlN+6=e&s8Fcza>(r?32MVP*ZLe}4JY^yrmm|8in#gd=!OjLmVR zr@;}P2Ip?ewK|t$HA_qiwSV?5Hyf}1<4@k)*lM4cnVp;%`#0bCf0 z2%H;d7Jh(-Y;?KNfvdu>_OZTx@9sTN(9a;nawQlWeJ`9lkF>Ii!Jb_1nWsO)`>kKT ziFhzJGKSr_E!)~flVt68R7#O*jBK-w86g-vJSR_KTqk$;?tFt=wwZ*Gb$UrdXa#&P zFD*gX^766-Dzz#)Czgg#Q%^wE^$$K^WenXJHJG(%6!p7z?-C1x?Wnu#!bL6Rco%0Q zIP5@P&Ye9=TCEoB(v_qnCXz&cV*13;))0y@^rMHc=7vEQdY^OW&qFQi%#_=&-+2d| zCr{0wgsgG{Emvn@C7!e5-1X@BIMkJq;StP{V~HP}W8;$)Q(0@><&&8Alk%a{)H2i* zy&{o6g^zYkB0`$OgRiJEH43&Ci`m8QDiGG#hwJp0%-M?XG&$?>MQ(Mn(J51~J7o|J zNax{6K`rPZPrwJzk>O1s=y&1gBbFM)5Sdivuf`0xyxmfE!f_?|3?)nk0;xP|*&n$& z!AE*ZoiZ_R-@AL4rolE~rhdNshkwMeSj{nO;fXc#( zqr{fHeA^aQVGsh8E)HOJbfzRwS=mjZ+t1h~UF44)(3UL`85t^q4qrbl(U8>4 z-E9kwp7Ax8Nv;tMx@3aK9Tt*~s6uAuaa5m>r#M8eDF|fnq*$DG$h+y2SFkK@pS(j7 zmOHjUvss7_uS9`Uu^0*P0R=dvyW{02F!aB6eg^>Z%6=%3hdevj9|HJsf}sUdImddA zPmeNbl_J&tL)szt?%qS4|iLe8$@_G zyjqmnte!-};cn}5htr(RODJ_wNYSYu?oN|LnKH3fm_*v-HWTz|P^Yh{E(r~)2%T&w zv6Zu+i@C8>iI7LTE|=PF-T96LH7T6*3~pr{X;Af{D@aGf)#H?#rcI=>V$)cy+$|kU zloJCU8*_1h0y;ddxWwYswqg?sZAfOGfni`%ucR%aI%8lV-7(YHZ#3m+t-O}Y>`!4%qmox-6|H8FaWvTDC8Pm zCt~p9iXt&VRqSOtbHlbw#aeWAr2KFH-Ievt?&aq$z~fiX>t=(~XVFe_tZ~ByT<6Eq zZ?nyb&`xclSDVP`4yIE1^s`sSF6RE{3!kSHre_Kx)!YlG%k>f_!O&^lJ@j%uGM~e? zk+|FS%W`J=6>{;R8wW1+BGJRZ+=kIBrkN63TWEH%55hmbBRi_90g`(Eje~KVCtB7+ z(}2yH*r^ptmoHuBnz79dEZG*n`n9hj!GG&-za?96jfUsk@h-5Dn51x__ibSsq>F8l zHJzYuZ_|~`%$Aqq7YZbtm>RF$|`TH)}aRE@5`b) z3N7o#p*UZ%I3sV5|1%*eFT`Dm3Vz5pAS3q=~PE`FVts zg?o#nG<9NHyjH>}Cra`fxuaOnSSF_?NaCHl^Z28LpyZE_je!a^Z&0uh%!6qno*(_- z2c&pndK!TTDUB|)xvW*+`r5%WGmsHsWBSV@5H$kjsRu=E?!CXtn4ue7++)z@K9p8&zA zlYZD^Ef#`y2ncc`o_#YYl>=zbBHjhA00BhW0m?fmz(y2Ou@a=00GmpL#I$*UodU}% zvd!`QbI&nfGsG5s-9p@eeX|86N_kl&gxl^?}$&(>(j3Qn^CZOCBs)#g6$RNTQMbm#GHE{>Y__-5Z2NF+F_`lvv50_g?XsDC10QH8e$yjWrIkVwbDh^;0e zf~=fqnHe+^UNsU#lM%xqz+neeXL+HCB$+sY>qtP{o)$Pla0~_28Yo;On!2IUT82cb z#wSsl25#jjAhlVI0n+Rrs&6O*lnt?>)yWmf@?%8E?gOtl0S5xnpd?uB z2mylXKT+E8mBfX9(BM}M@nO%t&GC>(W`{$<9}L>rmM~0xend)aQF7(Y{4Qg&ByFt8V~rw52zpJmIp!({PYaWfuVZ?vgIG87cd98qeTZy zmQxROr-`(kl!KF_79#a*+}LOoQ&DQjYH?ch)h;5W1jaU62|@rJhK3hy+MtPBDfO-m zwJl)iA>arstGmmP4Mhl$$gSNd{Q?C6ktGKTy;_edr=N3&k{aJJ2;l${f&_uZcKlf! z)7x=~PXaODMps2Jyr&2X1%xkjbhHEsvtZN`p^dl_8gPM0*Z|C^yDXR(4{4=dt3UM0 z2gz78s6dsdQuAP3(5@H(@EyCivV91469DDJu)0i@XD*KhqYju!LR~KrF?lPu31z<^ zoF#R~7UK5*2}NIGk7BI|E+HA~+@72m{*UATV|jRNyU3+O zvdT;|*=7~l`x8jIP!?}9Dk3+s*2^Dt#%3t4BVyd9t{HD3hCjxmMyvPwuh-VLwr|~A zM|!G`i48H}jHwx}ith9ZSf!=L)>;)7k#D}biehsEjc2RDRY{wT+{lTOtla@IoH6}Uot*aL(JwNFQr%-A0Hdu#zPi> zYZXi)wO2Q^;S=nL6HG;54+p)F1CCs>!p7sVF)ZJ5SEFo;pzgB9%SmGtfCX;qE)>q3 zKF#K8wo>E2aPJ-(*XKU>{7|iix(kubMOkAW(b_MDwaRRRKQ%i?7C7Zgx>(#HMfwXm zTTqcVb&EQMh)RGWP3=mwq29N#(ADeRyLS(@b`@*JSnN{(VmUkcI&Z)Ac715*!uboV z18c#$*`(917K>LdT|&j>5;cm7lg7m0CRoh>{`iMKLgi+8gLFs7#!!Ht(z)IvQfL|_60O(Ii2;kJnEuD=gze~tA_xG_6#0Fk0WxbU#-nbLArB_S(iJ$)Gc2BSN7A)_*%Ae`D4NDPz6 z*0YF$Pdo`v2nY5`{c9g!@N4=8U;8`MijVV{w4+8K8`{ToRB*u^3!0+fP#f6cl)&=$GAM$&w@;OSKW~tPnzvDb=YR7q)v_1~_ey~wt z5%K`CG}V>rNK>ogb(CF(M^s%Vt0bif0WDUw6Ip$ApO|iQE)pIqz=#Y4I)ZZV4-$8&$Xi7deI13W zj#1VPKxxXEWK^<_;FJhaEgEje2?)d{E7Z!#L9reic<2U5u{0f2SQ;w2G5W!cm2&C+ z(#mbtDttFKVBBBY)bF> zwbNY5LX1T?C_LV~IKm#O;16SoOx^sJ&ON*_U__B;z7&y=8LbHizS~&(Zex<_jxSTC zPPjR26Sck|sXrVzB2PFZ1NPKU*04GJDy3{PGZRu+XU>Zo z87p}%5JF|;qDhwb*#twY^`=QEz*HU<@s{ti^%^Mxt{WN|;UZIPO|x+n1r>diz10}2 z0y&YmYKVk6dyH9KbXZhnwnjTYWI{S9Jgr4u-O{XKb2s0+~(D7KZXO z(=#03B_=zV>sTs>J=s0Jy^Z3{R@KvIPLo9v)nth}mM)gkxc+B#UB(D?-D81^XNFMJ zVMvmoKy(z7uqa>^@~8EQZckmN{=373uW11iDrw~U@jrZMaOsIv#1v${lT1v!#QN%| z?WCvW#Q$S2CMpQZqNj`*csJNSx&GZDA~M8xWPSh@QoS%aOD>Q8-XZ}xN70y=fL4-m zNQYAeMBy?dS{A(}+&O(>8is0Vj#0P9fR9b|@apE~x)1$Ip{6~d{j!C?bM!GBs)vz{ z!5vzaZok|kkBSScqJN4Bwd;X!HEqT9TQ#Z7CHR3G2T#C+JKkBJY^*Fy_=gW}m5m5t z3V>9UkRSMmU;h_7h%Al5khVKV3H%B8`8`m8Rf>}1*Z}9^-j-;Ge`k#g})qJFovB^Qz)wMTiJ;6UATx zO^@-A0?IM%0-=~b2KfN|S~XUzw4+)*68qJJQ=JQM8FHpIIOP!GtXxGX3(Caz5Djro zOvq@octeKiu#aJsVM1deJIW%FYX6uE6dFaO4CxE~B_JIxR9yE5>=QDp%O{?G^8Igq zgPx2>_#`^B{(Ic+L-zO{?2&EE2ScS0NRPZE3SCHtyH%WfvvWX70IPhWTQCCw7_kpZ zD(WI&9{L7}Hyj+0{BQ5g)doeJhOdg^v_J;1~bIkdQ;}aj5?N<+9I0t^z zjzR|CIIZR(I*C|yCkP5CXfnBkMCqZ)%^Hznn{FqXxcUw7c#anHLh_b1Z}SQMMb<3v zid57d=^vCViQzF@L_UE57s&>rO9wJ4d&=K^PV`e5KE>&D z-S*vws!R2P7>yqfq3)oA0O(U*Tt24+b?%ppiyq_vC4~?rRn`;=n&F&lUI|qv(%<1C zk~E{NU_nX-;6vSO>LlFZvhpBEY0rJ7Sqi+OX+U~J5XG6swC=AhJT`3GQ4+pAbT zO{s+X7?dUcNJGh_#{m70onM8kDD*h3aK=00^n0W}SQg^(y9@A%N=zxiCXpXV!NI$V z=2tMl-BZ@6BXohh}k8&=%N7d9{(Es;%JA;p&>_SiwwVWcW(;G=Lk8_?n4aIciF z!VNSYF+Wqu+uS44VTJJa!u@OS{(2KL>7x@ma#I~<3S_g50<1>BD4SnjgHfv7^;#-5 zM@Bn^(nf9w&AXRp6E%U$to1Lg--kI1U7zdTmi1#yLYMO06BF#(@0FTsD8RLi5341X zv)dSjLZ9nwSH;L_4rfsPQIkuxC z%S($~nOm#Xk)y@77~!jwv3tC-LW#)`8t_{ioU>&cJ0dz7u@1ea#zfP=8uR^SR8vZn zP7RFctX_$thBb=@eiFpgGb>(PxJ}Y*xaMztgQfZ{j4;DXtX?7h4~>r2e9BjAXw(p! z0=WJxpMy5!`^m{E)Z-PlOc#neu)uiAs#mwG3(rYeHd%6L(GV8~cgP8kWUyY2Ey}3P zXbR-r(0tE7&vB+6s=%%?-LK*omHr zm2DJba!NK?xMStcrdvqp31Nbd$A8|5L!m?_+}9>w^0dLo|7%R}Jy=W?rT-bwH%DfK~+5V2L zP_UWB1u}VJf_qYzmzL>Cp1Saq$9SR&8@$BE3Do18w{L3#2(xMhx>H&~jV1tl1>$}x zN+fNO!ofdq7!g$gs0x({D^`GYfPktPZ03(_2|x&3Ma1Jt`LR0~HZtVBr6TfZ&n}!6 zI>Z&kjnO<|HZBj{;sO552d~Z5Px83)6r^ z|pZeHUe`SoiuedMc%e?!>@dhpOuQn z9KMWSYten-*t_{G(K%&-2+jhie)#idNZ^%dV_@Cy9>j0j=!IT*Kl6Tv0g40)K_lY~^nVKDt- zGR$_I6U+7u2gHpDg;#@@QyH8r91w0*4+}!k6JRH_h`haB;7lox zj^y*FC0_M8peDbOfZnn68!bHyL8(aiGcu$u0s9?skpC2{y(htkK47bX(PX*&*}v#s z(LV0Y)F0{*yQIf7sGo@--ik|V){{6ZN(vnJ%X{N7x0JKGh z2uN-O3cDREXQtrypb?I}o{zu>g+a@B(b;IDk$J1f0gi<{Tpdw03n94=O;Mhk!am(wRFtCz;5IkOsw^l&owEJe?iR`=GM zt<77T>nq$zRmzp>749R#EMyKtSk>~VYhJU$@bWh;c<*4vmmUEjV^sxx#}kV?6>E&4`1wod88h}SAkNzCtCuh*F2^k#;s5Q z<}2VMJFpoGp4dQs;R|0tSpU_peuZrQ*=L_;=P+_PXKr78^;HzmiAgLjqyBAzb!uV~ zL&vDBAmc7>lxG$~*@V2t4dl7pj9DzmxNmFK zq|PGqXFvB@uzmY)zr`(;&piF~*y!lzu3jZy@BHdlWPs?Yuin4U8EEUam6@3tVvUcFds(;y_W!BO4n5?UAlOQHuUmOenN}9bmDLmFXlHMp5{lG~Hck-Jbt6R0Ph19LX-5!&~mdLz5x ztvbaOvHEy+0VFur{=gmZ@s3Gtu+XO1Ga-{7lpZSr41vP#vKz$wT{|AH0<5xBBjLXa z(M+_fG${~Z)Lly_B`E2ns+2xY2u9)V)CIo#k+OWF+XdrAt`eXy^q;6O_pVf-V(sb_3>g$V1{viSKokcs>zE@4 z!pU0J1ezgty&^?zGFK_6al$g-=@+(u?WUiTlaZTHF8AgmHh!qQ#2cREgsQ-!Sc0L z!8`bshW&8Sp&db~f|^kC7U?U5CQ6&M9nG7lWOJ zTmMyrkmBH^GRe(F++-GGp}f@tU`(aipxkRSla+ey;+0DjOSe|R1nT6_2()mSS&WE8 z?zj;mZ@?}-CP`h0-MPAl7Rl{1^g(&AUqydKay;NO5vd^LV`rdcofdjIhNmj9?d6Co z|NcXeFfa|5%MEvBo68lCCqSruYCBXpd12WG3Gd=(o~BU`j|^cYY4zSRYc;xxfl`W6 zPvjVTl#Ji1U#`;85>v2`Cc*&{VMG=m`k(6vf53%8E5Jb@tsz|0qKA62}w~+Z}W~LE;F|(^dM3jgP9{LDl zWMnsJthD1tN>Huz#PZa%=y{Bfx6r5y^PC9@r6J$!;MoJoCzN1if+D8Aq$hI;9=Ff@ z=Iync^Q+6(Z*DePXGX`SE4{hl+zD+-7QI%0*+;s>SG6=%&*vuVoz41owaWqGQl;B2 z>qNUU+}%=Qg{s(sd6fb^+(v`HVzW`I7HYj5aj~j}<_T>mxmQ0k0S&F*35v#d3F~S% z;?gQfi!GHDUx|5a%$Swb$u1Z2_tsjg3;Ej%oyP6?a<1~?*%wYtm%sjn@@OqLo*(wq zlj^V38{=K+O^6cylZq?AH9@bgc8|a6NDM)8f=c$E1wMFO1OnOT3I0q0`-AKg>*!vv zCBR}%ns7_gNn$yUWALAU9uDdG@sE*-l~%L2NCA@8g_M*>o~9QX8W~~@?bV;Y+GuQ{lh=ob(4WI{6;WP$?KL{zZ+zn$ z$W%8!`UoF3SJUB;J65lIXV0P7fB4adWO-t83K^YyjG-AwZXSO6nJdgQzW3hyY?Gdy znksJ(wBkP}a?V;bW#}&`#8B4oE9t;tk9o$^qa5 zZvgp|n1y+aHutVFU#N2<7$4WDpyVX-=kpcsm=B+XKa+?=AADW^p==~VJ=%xOsYr9z z@RooSVuer}1tSSUF!8YyZkZa^CIxmO(Vuc56R6PCTb=g3)m1uH4$n&}a`HB<%J~xs zfmrWERH6l_@Jvq#kAXZgA$Mp@NVfKh&BNP8H5;X>aFvMlV!m+lp?FCdc3A~OE6VOC z8b*W;+(ZrmC18z!a}gnL&>Tomq)6T)j_;VlVmwGV|HGT{j81{d0)`=3$aO7>4aciW zDGLwdWZL|IEDFuS8rz)I1*@A-$?FNX)I4V7hzq11xk*(y^UxKWve*DY%qTrBfsiCb zD<{7!mhia7RcuN|QKL|z?w|q>{a3ikuN)T7lAi+(dnmO)nAPiI!|n6<$$| zX~08ffu62fS>D@U=~zIlvgg5*mlaVcAp@P(mVJ~LRxlxpEQm~*{Oq!jQt589r;B56 z>_uckmy2d-KJ4o!f|4Mb5tAk1=W$%#`~w6Mgigh#7HtQuMMQ|flxO`avJ&@kQOyV` zLiA&fYT;fu^e7Y2@>O6IRTMx3Dpj5&3dG!)5W5}0{%MB8RI3~4g)L|h@`sF0_E`-> z7vhdk6MUeYM=DV31hOBI&v*SX7=(kth-o2|Fryf(kMIX8IA}Gh zlPt+cqU;m!P|!4Y4rS3)Xa&kpY8h65qqT>(CN%j*|D;jB{>m%NZEZA~D2FgFyOZDe z*>^a#TN~yU=;B{~^PA+EmO|(Cv)5lkrF{BnO@ZB8T4c~RNM+tkI>+o|1_#wr4ZFb#iW&4s-s_ zUDl0Ht)9Zoy~Kn*fAX`m{r9h5XC0c+Q=*K#~f%SXx}HRWaFxnyvYW zC*le2jQ4<`2R;Y>ICjCqLJ=1HjyoKK&xpV$aEBlbB)_NclyAljIy_2&Z@4cN5qs#T zrnvog;`H1ZhTWC>O9)--TN+`Rj$w*ta$*9`nV+9$h^AcTmFEeGO;0;~-WgTYv!X?!!Ga;sU2wxF*Y2NRJcj24t$2-I*W z{E-%}!AH2`oy~lJ?hYk3D;vBct%NP?0b1rt0jUT?0u7s1x-m4wTLvT{2Z0FDEVdGP zCuMhA0-0Jk0bY&_@|6evNrg~8afa${L0KzS0(ZVNqo#2S3}}9mPh%8Iwa*9XqFQk0 zBnG*?u%Mh-F^KYvu0$J9DSEU{3d|cX>BUqR%pwSbIw^bt7^;|f#z*_O@X~20e9Tg4 z*^I@z7#6I_%w=;V}KXdiJ4ZGbpTyAVN2j<(8Z zB0vz3;<@VB(t`(&QX(W%vspJ00f47L&n4P%c z+vn}@&qD6t3}OQ^e52g@InF|cTi6n2qfAB8Pf|d3YtS1!W=|c%r<^Tgt10Lz9s2s> z&~~FbR3E9;nAce3G7s9grqiWyfP!)ss0kHkP+h^HuoV@hO68=l>aobpswy5lph0i* zQ=bSEy3=2QT3jYYj&~59)=r5jN;Q?_icMJ2)P>7~E_MiTCa%Lo5uAzwT&>=n(pu=P zTenf;w-y$p$@h(?i?@^?{!AAHf?rt@3+h8Tb@3}*_h~M-;4U&vY?`Svr<7GZi9TWn zY7wYb-+zq9FOpNMA@=SE9H~%TZdz710+qY+7;RDUm;#W-heI?o{e&OW8Ek1=U^hv% zI)3tmLj8!YAW3wIaH0rBJY>Rt>GM(i^i%x!xL_dnq0%p1f;wI;x?S)tc}iA6h-nlA zR|m22cz!8&cd`5ahf7P#c-J_UVroE&`@=J{M^js@a&ahp<+c8 zB)wr&onmU6MF#XyW{D>Ulyaf$DB zj)PO@l?oyjml82G_L=9N)y`p$gY_Y<8mgdb0?Gbl`VCc}Eq>E)peI8hu#jD2vw5jF zIywdT}n_>4o#6?LHjzlY%%p z@j;Or&jZA{^P!=6+=3Hu;RpL!siaYR6)t>30_JF;=HzQU+9|EaEBVlU$*Hew?FdS}u_A{dn&vuY}ml9@?Zk zg8|B*D$$0x#UV*4eqQ3Cd@ST}mK!gt{TZtIC->YDgg%>2N~gpm)S>9=3tE(23G~c# zowpD0zs%igHSkYK}hQ$k@IAxP^&F10`@;)PUi)dh?77LJz>4Ct{<->>yTzI;~W0!6%>v zYn;GDq*OUr)$tZ_CC3xBmvyUf`cH&fgmR(v{SW%hVmkqBg;U%GLlwYg>SpBgcw z>KMpqCdBf-4@HG6n(K}VkY_GPfPO2q|2XR&dKD~RU^M8tEyOfj@J5PZIz=KjinefN9VQ|9XTtFoY(GP$4_wLH zpO5F|mc9qI=4P!UvYO4DYzW<=Ct4RA%ZKzgalTlPSx{;_KQ}w4ra-NW1ytsjE?tz5 zwx4NlGd|jZEXiR8px6e?j!lYjY;+8cMyq6LcVmM)m~-dOokQ-&coj;cc4!tWob|;Y zo61Z(l(gNtr=uUe9viAjJy8XOHc6^($0sKFf+_;p(?JmzE3EL#WS58rRRx^qfJebr zd$RSOGiT3{hv}&kU`BBzF2-MoH97gL(jaWRcXIX=p=>umCtv-Al%t%0tU49_Yv9*Fhl9CFQaiM9qN`=p6R}w zN;-EJm_2Zcr@>6uS*uNsjWJf-LF~X&sw@YaL?P4Qyi&(n)QJK`MP>6xY~vj|}c;>6*nK5J&=v96AW%S@2i7 zkutFaK&Fc-)u@ZeV{Fn6iHN=O6hR=06tnI`gK_l_&*_5>DEtn2Gph|P<$Bc=DP#QS zkC8dtWF~GjRkoC0tzoy>Kr6R~Wc7c7<%wgAp;JSy@*V+*EDG+!;m*<)>)|O>yreTE z5pnR&#tqN3iXJ>1InCf7M10T@^%d&(gJB1LmyCHY4SOR*T_Cy;w5wkBg4!pG^XTwd z$gDfCMcHP{hcm!Xqb*82p2EQ974{jq;-gkaVjN~WLjhwz>;{!OhnZwJ$08|GoTfR@ zKeQFOhTP7~hR-Kp6G%J>V*GV$c&hCzJ)!myl=#3|77?~lDQdyIv)&th2nfVEt|B-} z2He|atvz$_lBn$05*p58Dl#rL(PF(mF+PDpxW071!PeGtSruSSQNJV~%5!i?@Bn1t zAhBLCtW3$X}-=*_%Js`@;%PIbNl;P6?03&;E{DM#1Yx*6m_XP*6f+G*iTmO z?B~E=$*KfC&O=;9|F{pyZgb*Qql+HX09y&6dsIr8-VfVURkUJYD2k0vZh5ow{h!>v zyRb>u$rgt5vtuV`hCX*0&8PC*`OhvcZZ6)wx469Z<}25(kJc`qc>d&x`qR&j!8#b6 z=(X7lQAOL>Xct#ng_~O)Of#1_Fw)7bFJqY@x3-;IU2kr**t%S(42_mCI9$b|v{ryK zM2gy|A{Ds4c=#1ta3vD?YI9LDt9klVTnrYkZ*6ZjIy$3*fnUzHwz(QV@f+8zBT{Q}dt`V=oj8!T4U7iqtb#06!nSO-SCpf%oj z6wssv9D;EyP@65!o;|C^iq@))U3iBiP{^}%Dh0Tz6lJF@hja#39a0l+rCE+%Q?c@_ z(DI|^#~vv5yCLqkuz^4tf|Laoz^oFpg$x8fnZ%wx^;b3a&_j-Li`?bXwrInCX?)5d zJo$_hJH7D%7B=8fD!S?kJL0m5;R8z2F@RxN8-Ezdg+tmzQTZTSf}l7`itrO|nZ9$5 z@OTm)Xcx6dCMAG*|NqbNOQ2uOQe(w6JV|TNnhvrzvKAcdG7i0fb_9dbLlKO*J@J(* zDw9d*1;_K#%P?JVmGq!X8`t zzb)cVxdIH=g^0r~9R8y`7|F$r8mJ`Nsk?V6*&}o%bQ!hztk{$>g+&(#)A7KGJ@ha5 z(beqX0(Z>u7^fiPi9UpHPFOK)M0+qR6D~55%NUPRcS%68q$}L>z7Ub|7U7t28Jckm zR}z{SyBI>0fk+^>b48*_kW~~t@-(;gNeVx(fy8T%K{*015NRbOVO4w-WxiBigaV?r zY%h5T2eBjr3YKrd0Hqa71}&ibLamVNOQ5V}DKh7;XwqHew|T(@d-+TXbqgoorh$?Tn>8o3kJXRcqrX&ZV{$I+fy?jVPB<^5SR5> z{3rY3iYR$<$F?h_sF`e~h1=q*=E?c6T{U&04u*~n7ka>w0+b(6I#+5~f2#Dn!xSpy zZ);q;sSV1Fk^seWx7$HPq-HIaMuJ9o;49eiz~FrY;2FypYNro-)PA52rP03+1K$GX~_aQa`@V{9Z|GGCg<>C_MchklxtG?Y zxa$9TLPU0XMk{verXCoyDr%imi*&kd2d!()2w2KP2t1m^?j9M(fu1Nz5~h{<5&RSL zD1$kzt=SYQ#Im2cTX9iZ@Iuqq_|}q%&OCkMW;^%#H8wxDe)0CTm6i44_Pw!@>c9T- z>AC5V^TVY&>w*)x*=qIQ{>7K>EUbO&+do*i-T3ZHH%`rrp1trF`7*b9uxqs4*uZG? z_CI~^Wxii}i6g<7XI8Nvn}8j=(ddPsA9IR`Bi zxcb0+ZWKn5I--HSLOnDa6g!hZ|HtJxa-6|f;2;FL$wI& z8$McVxM{ke(DVjvLtT$orRn~{Ko>EoR>vy4=wrO&Ffr+*RV;_n;{eGeaKeLAf2Ko| zGxRO`lRsIz|$Y6 zSNRuGLC4DGr(6LhugLp_e6>)n7c2bX!P$`xx5k+xF=?XiN?gR=SdD>U&spp!Ip6-# z`T8B*K?u8{Hb|i$uKPNM6tQEV6GmJLkoYA`@d&dxUjFilQ%ZghLft0?#vJ@K6vrS60Rj>fA+%Qo$7W!SM~JHO2p|pB zBYulZG_UJcg%7p`ZFa@7{rbs`5;ae7$`XsOAYbmId4s0NK)WCR_wS` z1CNbu*|UmL@5T%|-Bb9$4b%cp&_ivhzM+;0chRpe{j=LqB3D5xnTDPkh7FLuly|3s zAJ`N^Y|Rm}DX*jngs}b%D=Bq%aFmiT1{R=P?p7MK;d%#yjISA&r z_ZI{7pJ3j|mwF61fC&p&sV_zf5OBqyNtdpSeLhCWna{l!F_8W6ot65bS5 zDjyRK=v-Q`QCrXi1SRbbh<*bP7?n`_Dx61rNNVQ5@X?#vCv|8v=Y)U1PfK;D9}9&v zK~PKF#6uk?yARafD{h-jQN;pbmj!B_*h5|3?iJ8B6v-=Snu_u;ERUF|B8KRXZD5h^ zc4!`k3BHoQKY`R)V&zn;bDkzjL}HjqE`_O~D5p{Jk*~hLirZ`EDr7LI<$C%+Q*xOn zk~6Dw`Dm06er%Ub_^E}IGCwY6(qwj$&Wf~Xsq_Or(yw5o5=G8%xD|~YEZpDvKmXJB z7nas<-Cky~>nqQnL-qZWFP=CtUY)71Ia&+k^?L3be{^zTdHDJ}C$N;;TD!ARTIUkM zdbxP@^2rM)C#tzWT-#{exx3tGtX})oyYzAw=B8`a%9sD(#ag92ePV>GYU)+4jm6B^ z#89ntVS1=m$zh$DDuWH_pet5y3%MrL!i8ddv0aZn%?OtB%WEs^?SK05?e(qhR(>3= zT-|Or+U?u778_U`%e^4t{_#lpR;xOeZ z@~ZH#^$??~2zQ&K%ylx0)?r%`tfo>Mno5(BDU@z^vO@-!a$=V(D>a2X?@pC3e!~DH zHv@J8lREU(u7bU!U-lL_A;<$c8MUHo9uK@ijfqsj^wdB z@DNw=?5*Ga6AdjXOMYux!faX};bwF}ip{+*1E*`x zdlTsH;NN^rmmYEIUbbdpYFJVFPh#!<=ioQ|gTjI5BX=C03aLMC0)ERJ{T?X5>KQSl z#6=^#HDq>B(^$SzH=J5FJQcH^@Rs?DVSo-+Js87)`g%{-3OfFq2h|TFzR4~2R*3OP z@4=aYbV!VrN>d?<7D81Ta_nhjM#mr}A~fnVlNghUQcnprCI_9+#^iU21JS6 zJ7p{GCLhKw6oZGgXxpU*9HG`Cpm>5WXB)vzA=awZ(-7ch&jxK_v^(`ekkem@u1M#T zDxpSBpF>`R9(Io?M&qr;W;(Y={6sSO7S$0OIY8jMpQP@Jk&|94&eg3) zyd7&-M3bK|i2M7_)K{y~5=qFSJdJDzD!G&!WzQY4i1QcNRO0$Fh6qT(3RFP+D8eIp zRL?sZ`8Y_`|9gz%9sPj2RVoH$hC7M!^lkSR*Y9sOfB4JmckgfBxN~Ex)t#N2o*1ov z?T;>=nyjB1uMD#*MMp()TwjMeFjnWtY3)ldUfx*WtTskRhbmKLtUu?TJ5}78tezN} zTia~Cb*;R%u{B=aglDc?ni(CgfA*=9wJIko!D?(`oV9$Ac4Emk$l+faJr2F`EQxxe(2c?8~n4ATFI0Nw)#9J?U; zkVpMJoB@K9>G)|%j8+U>+ZDG$>NNzM9sUtX9uVjma7IHMkfG4*f2qfm6rlFyab)X^($gwCKA)@z_7Y_bBjt7u?K_Q5kCR|v9Lz1V{jpzw3 zef-}4sN_2 zA>u|0Yeo@;oBZgB6F;MzfujsNF4fzlQ!GxLW5?;;o>Fv%` z(anzn3RXF%9!J_Xp532n!UNmdD4IYZjSJAZ(6e{nML)3s(PG^C9`zY#f5S zNYuPCWgjAU+C&|vK!E`OI~X%h7yl%_pe>*vBE5Scj($i5rTjPrmio zu8Eh*27Hz|J$nOgB@o4Ez13x)-0ZZ+zL$P&#YQZGQ!NKCFUZ31!s53ILINQCL(d~g zFy+PN>f<5MCl(}ias%feTSK{Wq3q)6DtC@(YNA>6NaiKT<2XM`#?ySFf+wm?8PcP^ zA_^{gY2Y2AUoiTgek1RRlMO){gI{+!)B@T}zl$eO1i5hh(tW5d-KuAHcri=Bozrw)^$ z+*pgEzk?NAvNoRFH+RcOyDJr)Yx73FKKH^|Cu|bm{ zcl;?6PiPx?+zN1%M!YGOfg|h2lhVlsIdo8B0|(xF9_^~nOYy+48oT5{h3P(&0y;Ii zY9umZ&^J>4QUYK-3r1nzFShrnhIriV_Pf1IlBzso0mK+$qB3|fm`u_27{6;eRI)U{ zNHmN<{{RI_CLNI_VRW`|ZFjL8!f>zQOHE)0+!y>Ibs}bS%c7+QNu@f=3S@=jgCu7k znY7WOvhxyy4f*Djl=Wkcg=&ysM(`1SUzsBkh!NCAy2?@i`kXWrS!k9~v0l$M64^$s zxhOSRP6sZu;txOi2)&Wg005I1L>M2_ zB?=Rhlf*(@BvY0FWWEBu1!IyBwzav*^$8zdzmERQCQrb)yNy`f)yAH#4{v-3%=F|m zK0~9!SO$9c+O?LiFD7-d0yR}AVsh>3=dMx?Z@u+av%zIG-D z+GsS$?;WfPw_2O7j%O}j1kVQ_d?1!^eX5SA7HX~AZ7^v97?xqGRjgc6JCSP-@~R?n zocEK3d`KkX#-m{8mA8eVUH8rB%$Un=+1E3U5KM8-djt2l9_}n4NJO|kz zkG4uWI3g_?Le^h3<(S8T*WlBCf0F-`?qZ^4x9DUl~qe z?gAzR$cr!9INgt|JN=}!8QyBDDh*Lgt2fxzB^~rxC#+`fUQBT#Q~FF3E3SoZTqXA3MCHCe;S0j(bAYQit;SVRVbdTsy86c{5J%Gg10`7rh`*dQZ z;0>swS4YiKL8WAQX z`gLd0@RoX}Cj~oS!miAuOeh;dU|oRy#WZ!tPEqBq?Y21v%^ z*iI9j_UUMlp=jVo7T`2iGF!-T4ovtC508BD3s>8P;?(75>qC`iF64$vIV|>abiKQw zGb9uBQI!_ZICAM-De6{BH$Adj2cBj7F*}^U^z0mEU;p}3#1aSikG3#g zZ@ERNPMK!JTlW^x+e-s-@5)1$Ir&cM@XsxkS5PS56Cb0!_t==nwXmBKyZE;IXaYo*Qpsc&^104VKeo`JP66WQ7#D|JfL(J65;Sm9} zs&+WkPN?uxK1asC6Z42Jao#a1z}a6L~ENg zV`atCnx^qIG?5?1HHIg|OAD-UdpgG-ts|4xLukvU_z=+FBKW~Jt9BIqr;tLt#(sJX z#8+|UaVqP#pz7#RRr;UAlbWPD7xSM=X5Vzx0jbXgQlqv05GQGMv?7K>y(w3BQhl6w zaj|Z>U5*B}wW1}Nqdhtd0_HWOZ$Qe*P|6 z$EI{B##rnYBGzeO4#i0u7k4Oyu=GTuj*xIiKtO~T2UFWqZwrYU)AeZOq*ucVQ?ax? zRB7e58;z1QSj0^kZ8D6D3B3h1Y<3QsNB=+e?)%BIE<0wgFp zQ53}?Meb^2W`CK8{SRh$c4L0oA9iLGu{#oDHg=^YC2EGEL#e)Yl&0Hnwmo7R5^gOOJ`9cS6Wc-S#KIT9)%k#v|rZG+OQlb4qf-ZQ7C zMn*<-!RfKF+S=L&ANn}txpUVp8h=N}1$(`oc>Hm3ZomD``ue(+D_1HAnsq|`(@+1* zr}NEf>uNvzp%2&8#sR;0Jv=&WoAZSW()K<6=nuUwZ~4H@Z7bRyeDEQzP`Y|9_V@Q! zSJpH&H~sM+e=3yq@0axV_4f}BfOcISU7Y4kO^w&oRDJ3b4^u-Qf8q&~#QXQ`#hT6w z7r?}(#s+m?y=o=0pZeL)M#sh+kkHsz^T|(r60hjnxbf1_rR;0Hf|&*M~@vF z7#Mi%wbzD+hr7GF9O-uNefKprH95&mL3?h!$pO@7PMtDlefl$>aU9~!Z@tCg(j664OQs0Xm9l{3(2LbyX+qb*<%fI}~p5fu@1ko`E8o%d` zJL>D}wF%-?5YPAS+C`6lUkERrnjrF1<;e^8c-F_6remD>iOqKhKC6xDZTMlQe8{DrS0wO(U-Sv-Rc~L$qBxz zOPZP+9pm}L6HgKVLkdZ-C_x_?n;1(|Md8eE#+WcOGdeyQhCgt6YSM<_nUa~w*uNJX zia66ObH#PdjpTpV)@>wk&)(f+`_V@p>F?|7?ds8gH*ei;PU^u2K578dHH=+7UEQ8O z{`e0GVP##N5?Nq0V0l@1wH+J@nFR0k4x+0H4}a`qbv3nI+zs^i|I%0CS2H6(UpRZ_jHfl#)k4OB-s$O)@d;dg><2$k&&-Q~>f=eaK_HWlY-LKC zub7>*G*|`G&TU4-gdhycRuG3ek_kaJNOQ3ypEM!pC0`Qru5_66)=Dp~kfQh_t!Z*n z4PDv$BE1|!hO#hqk7uq--V#tJpGiaofh%z^YP|aLy)^n~{))FLRW0lq^<@u6Dd`TQaqP0Fg?REN=XYOWf>c{xiMJIfGnq)u#JMnYB)qNgQogRJ2x6C9|7WN7(G9 z`RwBqVQt|Bn9nG?iM{Hs`TPYZ;)>$Th@kt@>k@jee4KkbUz%qASN3>8VRO{X$0_VC z$ALu><-{=wr7n}jQf5VR5HeF9bxaCXd_%btV@c5oCiw$#L!#XU-D#>K;>DF^MVd7y z;R>OQ6ZB$0OQWFg`73^eiV=AP%R*>{<=8MkYR*v@Nh7OV`(|k)aN*^7E>7f_y!**D zN(nD!WGg)_&vmEBEp0=NWRXn-#A=#!1r7P>tPs$=3#%loS(KDdK2BEs?7_nOEF}M# zpOVY}{%wCp6*TAK1YbsAOd03cc-fOherA!Ep1*7)StPUT5u6&ifQ&LZUwVQC@)5$i zq=eC-qRvb>^L3v~8{!#)8}71vhCUvr*hm!ft@$;NVfIyElJJawS?A8C;Bz4vHEG)G zl8_W0)9*@+Q*kW8_f4mA$S4#>*m8vo34#sB}7V`yjC6J%5Y^M$hnS6vaD;`}Wi~)ZhP+`{i)_?PKcu!F%shU#c*Dm$I(s+;GDU zXkNQ!EztP2zy7Pif${Zg*RNW&^4@#zH488{F^=+EZo3tdceV^PI6gLtb^C9;iD^rr zUESR;z4+^~vC+PsUM;z1^(sC{ckbND#;XeYU2Tm6S$JNd|C<`2+|I0Cv0|{gI!b4i zg(#+`&Ylm;>V{1l@l7D0`2FvHADFr4?z=Jh<(FTU)uxnyYtRFHNoM- zhoMa;-}nQMS#FVsV-ji}1dI+3cXV`gb#)zo`|ZZ2rmuYIOQ`te(@#_7+b>*T1OLM3 zKd;s5>g#c)N|m9Q6zYwZEGOeLlj54((!?MC_{a65*Y%XCX)Q?F|NJXo85$b=hi`sU z>r~WK7$!K3ksBN>UlL^!=OZ8aFj-o&Y7L3~o4@@VQvEOg)xRqWZNnA3g7M%@q+wa;3aNJJfkz+INE za__68*a#X?(!8QI9dTb-<6wr8$hNL-+m0Oo`Ocj?^c1IhmY0?d^!Alkl<(TLtFECz zCmla`?%C&`MS}8cLr*X@@YSz=)nN7f^Usb9k4%i2 z|CuysXtrPe@|Q8r|DedIwQt`(6GrRTuh*R)`ObHS%;{vl1JpuxRn@p}I0Emp+GS01 zr99_anVerC>X!*X6z$4BLZOi}i&SQmx+HFt6cjN?!ITPy1!T zOZ*wBvz*h6Q-<3vO`AkB3(Cs6c8QCSe`%iY;a4^!yoU_lA!(=)At0C6G7HIgHTTSW zwze)o;&;e(!Q%oMl+ly*i!7HbXf8~ zfI!EOflL*d9cglsxntY*EunWd)VEHx-uJ-|2JV8J$H$KzKg!bUn0N<~ZrQl0+*-jn zxqjmK@e?B>!xq7+_Dwh6v|`1IEnBwGbnm$HuCC6mqsNX2->`8rEAE*yr&&ACo;pR5 z?d$IL76Bw#T0-?KEtcu6 ztXsdnrl!uxlB#v==n;LAs#;Z5+1j>}=J)ceuPCLbvs;Z;tXOG1UPDuJsNLliR@OcJ z?9=E6Yqizz;1G88^e~hT_xAQ!@g*xcbaY%q4^$tRGcAel>h94eSFc=&Z^uuZ5DC)o zR6*i1fP$>>tqFzI>sugChl^9<%{X`pwW1Tcj)qWPOq_=dFcAaEeZ9SGO6S_!A>pph zPI+2}P3>k7)_#2h1G4Gw?G+Ol_q>XSDJz>Y5nPEDEMFz^s+_$#1I&rr1LOTedA!y89Jzd%h8TeVd zq82DJ#e)y(D{$4SRa(%R?SSYQRvIfMT~sCo#b|2RSu_l>pQ5b}t(g9tGx77ZB;udAzX zXlSahbE;%4Vkbp_sP4RG{hG9VKPKh)O@-jHWqUG}QlN4mSo1!f0ua3%^S5jD- zz%{jo+Ne&{A^Tn+1nQ=Sgx2#n-Z)_W1?;VgWD7J^O>qgc4lR)Q!m&mnmhSkO_>*l# z5k*}4Ih7tfoVBMQ*1sT|{KM!$ZFjF#8-oM=!By*m!a6+yV7Iokn6}%oYe!{OMRQx5 z6M2H;0Xr=WpYG`DQLX`m{O4EYM0+a3XCiQ}4I})WuSge-8vmn}sQnrx{;o_Ljh>5r z<-;KIT9=dySS@DcmJi9k7yioM&u6(nkmm!hahHGVT_eh+kLIYkH28Y`%39}o<@TG; zXPMbU;G)g1R?56ATq*@Kj#d1i(QMPxeS$`vcUr5Ig7n(>Ko=r0BMwqi_7P8XL>({hJ~P(4WLgk{YHWs81KoH{L^np)7Q|?!Z?d_wpwqIzM^FUv}`_68L z>*J7NL0$%F~uxx2et6STLt%V*W<)vRq$HEkHw#MK6n zxU|%oPa&+VJ{k8EgNEv=D$C2o$#w-xNY*xP*f2gZv1Nvdeptm3z_hDe(fs!aJ#I9m zav=!2fwkkV-LWY8#L=T-f)kTY1Q`ixL0l3Qhiw&2;ut>57PYD`A1y1y*c4mfVsr{U z%F|fD8Fvbgz$CH@xzqy!mHzK>AdlWap zwP0F=M`y-2O`TSAU|`(lQfKVUUa0QLRUM(Mtu@bO)33=CR$szz_qaSrjtI0j?)?l5 zy09Ybn2jm2n5ZeSDP7ki45(>tZqbedeSIczOl%-><*HStb?T~X$$x);Z(nbZ6%z^_ z9vHB)pt-39$xr<7N0v-m7eK)D(bW73NrNA%bph3}I7Nq_0>a}_aLb>MxJh?7AhIR; zx1_jJ&oLv8gOY@ zRTaNY*2MB&1CW(fR<2&Ph9-95>=}-*=)2S(TW4v6PyXb`G{`Ui`Io)no_XdOs_omy zk3+&g`^nGQUbb%C%tZO&58uy1ob6?O>ZxDY<*U+E$wwc3thc+{-dYN|qADuO8HcS- zT(NQ`df-E5<>!C(D{za>${c-*#gk*P1e)yy*%0#Z(CEl8+!b~$`+;r1YiVI)R~1&u zSY1rBzvu4zFqxqS^rC_**M3Fu@44qb41e;+Kf=KNfg$Yb?CgNAhlVYUE^dJl8yk1; z+T|0tWsTafej~MhWm}7`)!E(6YTDh?4IhSWr=(;>OG`szBQu)(J370Nw0`{t_B2of zJ(bnfbmfBwW4B~EHv{knj!aCzrM4R)S1L=0sq+1UgMI>vP%*11YwGSjdmz#`-+GIM z?O*-Nf62%uvIw54*KN1mM%{n&zyWPxNhi?G@fBdOapOii4|}@1K~aT5!d6g2;iW@E z_;B*{X*t-xZ6=1bA9xU72qr+P&=d9jz<~oef9nT6;Is4MMVx2NmjC&~hf%nFW`}Y& zY~6|&tZ=XTxLRIWL8wlhJc<5YyZ1pntO^{Tch+@$qQFqt4bdh{qV9{lJ>$>;dwM3|K88hOaKBfYk!_N#yK7iL>5 zw~i^NvuCX6Pp*cz;y|>ikm$c)EBez4_%uGH-2s+62UV3-2FhSdYBgf7M%g|mlZY{G zH$BaayKdb&eT3{qdMhbPN`{7qh3wq14W`|{e;=tfG+D~=*kg|YtLCjlv`PZojK63w zvKdA=%xi6J+p}j6IK6K5T5PRvXf(n1wg3FJ?k;mcLq-Gc-D>LVZoA`l+=wnS5o+6jYC{^OZww{-SeB%n4yP}p+^OzzB*f}@tw@e8HkeTb;f6M4);q ziP8JQ1^akM>4l6l?PtzF(P4i!FW}IVqB7`P9#k9X}3W%!ofW z_Ujj4G%vuN6(}w_%^R54hL$e7hxWmkM!8i~?B2T<&A(`GXS3Cq;KvF}G%G5e`QkRog!KqaR7jATNT+3m`f3N^Kjn7PP-nYu>bfzc_5aCPZ$y@kWKp3jOvB+aP_R z{et$jdzr-y*+xuzp7Az3cE*zR)2eyy+&Q&a(YDftPW!;w4@XC0_a_t~XTAz>iGRW* zk^*vLaVYzt?O#4_r70FCrkHH0G)V;2@i2EFz9KmzlN1Qn%o1LtCTg9UYx^=l<*$KQ|Ti@TdN$sV_(-FMy9(A2PI z?OMI^*e?mqC*`$^Y@i|6&Vefw_|-{4@$^h+Q~cu{4pi5Qg88Bkkg z)FLMXwu+D>R$QZyb_8-PPV6E3RFjZ+SQpn;acwlCA+{t17z^*8RW#>OYI~ zna_Pj-9Pfd52OG4-}&z7;BZmNbV*IM?E|KexPk+!dpkN1CNr~O=#+&XKBxCbD}dQq z9kUim_W^ICVyR_QoS-L#q$JZ8Q|s(Vl#In>X3>1o zfW7F`_x_;J1}?C~Odb|W#g!bUX3XX4jWc(@q?`N#v?WC@JW>XIy|^XK=*-dY$2`?h zf#d`WW?5!}3arBK830ZveT1%Msa$y(kYEAb(2&J@nG~AqqTOc>D8a*%2 zSLvy9L6#u$j2=>wDatgskx^dK$A*U|?BwJn)sDf2#)+w!fx+SEEfl)avPs};X41}2 zyJUGlra%Kc@`PPc@+Y7B9AJ6k_(^s@c%LG8`|Y>$ltsC;>3P-46^yag6|?S!-Zwh~ zok6OjZV2^VBI&fhsIqmGx~)sbdbp z(&&;B(t>jF)&1AM`W2vA`jL-_eCpIG_3G~J6~SZy$jV5r-1d$RxxM+u8{+eWB?nNp zsWDvgGS#x{g4vA2O8?-8KdeM{FfsY^^~n@0{!e>*sr&bT=tBUAoy-!Vb7E%Z>8GD& zi#~GbkUHM~(1X@8a1MlTt5>Z8dseNEUA|^C)QF)>-76yRiY=SB${`NdDJp7gYE0m{ z)4h2Om#P`EGGLSK`x4@5b}hV@c|JG~7}D>B;d2q*=QoAYypRv+9>ap6Y>JpAB;MaX z!V(-;+-D(i6TMqQLoogJ)jOWb2G^q5XPtx^w}rBdGi)F)nEVmh5o+YgKr)n(reeOA+)>q?B;s;=Rf|5M57~j znYr4!b*sWjrW~Go?m4T7^(_)>je%*OkACza?f=>vuaniup%_~%k&jl>%Kj=V`C^`A zub!T@$e0%{o01*xP{LxYGD*A7&}Oc(Ch5k;d;2-Qs;H^1nXH{CnKorKe(uyMSz4eU z9H^^fnl>|K{e@zz1uw65mQfK`&+#_3?|5peySvM&wP~(t%!HR6`@_S7rW1IHH;wF2 z1x9ouPi0;8_8r@C%p8CkWv<;!)yd5k47-qdO@g#ejEWLW^p!uaoe-|+??_cjC zi)$pI%Er?r7gDeVKFv#CgMjz^=<@Mlu1Ba-(joG7OTXW9ao0J6-!A~nF0pRSDo(Ig zuUcW5E;vzFH_+13Oue#qPEQR0pxI)X2hHp{^ZLr{LL@>H4C@e`IU8F-fFKgCk7j0$ z96#RH-+$wcH&r!P?%BH+G-8Z3MmR)-_FT=}=j4^TT68-})}Br^N;YHYiMyjXtf=#1 z7ppIu6ZN{LM$GWGPG*^HsfNj5SjBfM+}PFIOJFUb1iChE+`y7KGQ@3C>57#rtYkiM z;)LY|vnTNY06+jqL_t*I>(*7F&LGYxZOfvZD{5o;uR0{VdmA5^c3@-m8iFKbs{pUlfDEONHkv$3(ciR-V!u7;u+;@xle+mYvJif@*$r%@=4>+CPR{8Gt|R zz-YEt9Cd1;DQp5)FKsQvP%Do8z(O`}-puf;`CMVeV$aH!HigYIHWTL>GlAkuRAP-s zdeXplxjYAij?RKS={2{!>1 zVcH<|L|)~1K4)MZ9U0S_`W;w%^2A9Fj&7qMYa~XDk z6WD=)K2qA)+z1$3BM|HDW5;-v85up?G63-jo-u~apG?M{-lF1`);L~h$L?K-e(TUd zautUF8HSSiG-uUBs^jCL9u6c{NkoHP$$}c~oa&zTK`WXJZ(O^UzjSLE$l;c)Tl6w} zjLGe$IDV;oh7)P4`nhfAPtNxAsVTIN3=bN+bg{edxkul**nU9|V4p+um7*c5d3)3#` zzA*k23}BW<#BVH?7e_&5WuxTMlN8Dy1O3u7e>X7;t8T$1T&l2KSy=Sn>=hJmk$7>3)W5~+_X_~CimY3|nu_KO zOv~#u5Uc5`Rn1icWfwYoftXCm3H>SBDz)2tZk$XY7SAjS3jE8+l4gUVRJgOEf-V}% zZhLznDJH?4J9hyvOo%=Y9egYFIo6WcA{g4-BttHrs3Ux$hIK|BTqs*n2oh32L0t+c zN}wyalmVP$SU=fV*p7DY*$YS783=hEK6DW5+_!JP#fO>Oq}J9p`t-#M?O>k$uJXyQ z(A~m*V%eloD>&x#Ou|1g&VkJ&x3Xz6A@qEmBu;5cI}Dp!TB-7Ezck?JEBa5E!b&%7 z+RR|foPg}4zL(r`+wJ`L4EA%lHE{5)w`9=N+E!CnZ@-`A&~Lo)2E^Ie)Eq9hsspk* z7L_%%s>bm@<@N^SPue~`b?$sSRe1Ma*t>G)-rYQP{p9CAz1VTl+G+Cy&O_4b&PoC! z?arl?gQjXDt*x0X*Z9d$29a7Wt}W=<_*s{{?6NhHqAgpu;>_7IXTVg7IOcFa<_X8*c&)OfWWio z&V|K3PP(d=5LjaWM>7_Q5G!triZY+iNRsV+_uU6ncuHm@bUD))h3nR?qxZ|um9+Du z*Grt~`DqA?S5YQO!so6SztR{6OKm_;Gyu^!Ajit;s(bFe+x*2F zZypfMViA4e{Q2|z!{2n{P2`+KSDrQ1wOaG^>C*r(sn*S*U&enWl2~Gm4R9uDG^>Ok zn>IUtxM}s8RThXKg_y;Nr!os_r+a%4HA#=~F}A^~vIG$`JxMyL{t|s*+jbK=*#iCz z8#mgH-hSbt3@zGMv<()hRW)z%%$GZWJTy4O7F||Xw`ce6SawldYNLUUsV-;Fo*Nz+ zGdo}r%noOgTjQ`MHY4=D)C1)M_9T4s=FKGeh39{zqlKfdBA)PSv8cSEqN%Y7d(jB~ z`a{NLVj#p*9bYxlZK_WGBc3i~#e9^gwkPus-KD`Ul4d-~XOh0NpsPyYTG$}@a&sr&I?Ko6`5Ii=*4aCFVcCTO4BfoIYmo$r z%osP`+f|_czo56gw{ovnYMRpZ%Ide1&%C%Tsr>mta!Jt(ep4@^g)FVGCB!PQx=YCM z(kNbMa{<|#XrX*$FQ80^p(~47=x&?k=1)d{=mff2lI@(vl?)}JC4}Y>e`)@FVdduP z{oB0xeE`6io{4eB{bDx2mtJ}$+$lR{WNM1%C&q%FzTrTT91n#`6wOv>*Ug$S6WPqF z5N??kzdR!=V3I#-bQo6XpajLCBOq|v2~7Xx?)d-uPk#jn-F)MXz|8rxgW%ASLx&-p z_V%##b#`{DMMc{4`Q7h*PY639HTuZm!}gBebMJjHT>JSWzzP0*hev++ z=p!ZrZoTaTQ&Vf+K6adz+}RZ;*8crBzQLY)=bd*b(K({j$0G+1k@c45R(8v?=gxv# zPTDN5u4W-s*-$k3m@OJ&;$cnl)1pIGN*L7}*OEv#b|%Yh|Na}G%o8Wy=9Q=O`~|)G zuKVueFX|)r-!F$J9)H3nK1ct6%+EgajE>WBkyW$&fscI*2e|)H)35#Y*VMwj>q}qy z7r^bIgNIpojvPNK{Kr4~v3$DwdaA3c?a>Xs-F%bqV?1L|PJZwE-vexKz4Zei!Q)ep ztI?iayEW1GzW;q}dEkKutRsaAJY~+(3X&-C%$YOlXpbcf`TBtaRC9}*!Pk54x{Id% z#+z@Ncfjq);h~3GTU&3~yH}h3^S8fE%f~KYH9O17*}qBv&OkB01Z#!ddB+{{JaqW* z#rF2U|GU3Kl{1;Q@7SSq^A4}P@`_q$Xq52WgBZsqnJie@)<$f$ZP~)E#Z8w5R8GC}dy!Gq9#=}4MW423=!qVyJW zs~Evpkcn{IxJ$$7{7v+d5O78;5z^&5#ZBQ?>N}}NWH=T2LaBW&Q7xAyj<^K_TeBsvjfL0+pKOYH=YuvjG4lxrf28g z8z#J_!>@Q%Omxkf@tN)EvCum08>rAFy=Z7^Xi(PIzw!4*fT4l# za8{G`dI&07K(+ds^`Utdp;5v;zsS?zSpOxUv4iJC5G<#?3+j0bTE ziNI@KvJJk)Jm0)FGnYc8l3=Bdk%cDN$Zqq63-T8Qr8)kbXqkS1twS;+m-w8Ta6Uk; zl#V&$GA$eQ^1&cDQDg+wce9vQ!5V=XK^SeNN; z3q!BpeY8%R9=d*6UX~NRAtyFbmsI(A4iF;ab4av@xvMaK#=K~5D9dN?4&MvQnva^N zWIp8G-4V3~@0xec<9d~Qt&-B)^I8!WJS&v`1xeo*x9^6ZR~ZtoV_o8`+2y>v*q1Z= zT;I&b_E5NtN8Tp+BK4+xzjhZr-5#j?!*~8pBXdC==AHArBu0#G2;}V3C}H@SiqS5y zY<9YImg~>7V+yB$rQq^B zZwkYCMP=N6SMJ`i!_zbEVS(2Q^5>KbZ^KA9G11Z0i7Kroj^>jV3|3-*mQr4mDuq~y zsw{s1OYyiT&FcW2PuNlR9v|mZ?Od$AA~|ZWbWR zTq~!gwzJTP{OvqeW_e|K8i<3s(b%h8MEJ#=Omy6vbjz1gzb$ro*vaUyQ6hn9!r6EGAaAfBhG89Wz~ z?7Btilwgki;?-ysvln(99M@W(Om;F||IUd|j=Ma9e3)N9VgMeDpHPq{_CFOxU4WT}r?5+>4->{D1 z+Y!qccfYl*=tKmLh< zqO`IW56dRQRhjpPxYoJo08?BH>bb4WMyiI!W-|z<4j zEkZKQBq%r-;z}fBVyllO;fS7KSM`vNe8+9KSxEA4|Ly;>a>a@iJ?%c1Q~H6&kwdyy zXf90X)iC+o)9Y{(%~-&-khTJnEjenT`DgFhC1+oF#JQybOG{cf{RJq*NGLS_1zlum z6AY>reE89KALd{JQ?Pb2#GqXPt7K8(x_j=H7i7Q|9N|FJV$abY7D3(jQ6DxHRZ@>{k*Xn!RfwQw-cOc4zkv37aVPPzb5wbdX&G0!`3Uq|`NaTuwo^ne)3mb(d&NCy26HiD|Q9)LM~1MSY#pr;F)|Qx3hAjl)2p>pG|PmJ|)f8Mei3 zt5=ITJTg2p6b&IQFFd&%v`*|Vp0;b(Be*4f;#I^`R<@P*;*(ECd{2=cu&2o4ZyIA- zGV185kOu`(qb)KPk$WCl=(kb5q?F?@x#ERO5%@1yg?;oVWtz+AXdYO~a?{vjIeYBH z3Hb={iQh=cUXR4iQ`Tf{26mz+(5$Da?KmG3e?t9pzaOt?9Jbn1Ha7Hp(@DFg-QYKj7ZXflq4;eAdNY@uERnra|JaE}4gEsiedz zS>Y3j12u6-Ot=;o-&%6vBcow4gW`l_%nc~)BCDmPb=BZ8&)$g=AXC@jao1!AAezY` zZlp0XJD-*>HSt4k^Y&^y$v7;n9jcfs0@;9J0wAO-u_3z+?PcZ6Nd0FWqR>WKX9Bt+ z3uTo>$FN1boTAl6kKj5WQ4>VxE|4QW zCs%6OWK(j^7l18tOrHVNiFR2G9rg^kH+rZe~&-VT@NoBvHo z%ik``_i_W^+{1=PXN=Vw_?SZhdlSY{IDO~5iN zz^SpaSL0k(%hLdQK>Vf4%PGB|;y2AZlq?!hsKk`Zh(^CzR)UXmifw-`~CSePj zL(1Yi2Ic8+2U8r7(Vsw2$8u#G>OygkU8d4z!&#Qbvmd3&b*PHqq*ufOdR1 zD^PrKsM?-dX{p=<1At_HV#9PRSwKwIr>Y7XFc(wOVmJce+eB5Y!M4a*eWpgn)WS~M z&{AV!qG-}CKCxM5i;En@B>#ytRgu||vJR9%*?QbQe&Zkw`8Fo3;I9QGxjfxMKFB8w6vCq9fPfW*hNd>D(w z!8Q4Z;*J}XcyYyyG!evR?lS`nH1}M%#j%;$D}4sfOf4jsL}iyxUEb;#^|Fo~EC(_J zYy?H737`cCJBqN=y#zXqaL_yg5(osP+*>j06Rjaj6O*`-yyY?K>K; zE|x~jud1om==_iix9&h$eYS3m6kB&vFgi*z{rO;qm09H2+%$|Tju=Rm{SZ&(B!E#K<m|4jGCy3%Wq@Y=8xOS>+!)>N!s1 zU`*6--Q)nWn1HCLt|TiXJSwHOj;BQx0r-qCvKAwEC0gS?3-g(Kn7@mv$V4g?37(rc zRpF>+hAico>KjEw9ABC4oAMSNcji5(~lgP(QA_3GeUz(@xXkyB`F_y20bx`fcMGX9-I7A z%tWnh5f|}IZKTV6)<;t1)Fo;b%$%b^`d~xU-iQ%tRmucMxCb+_61HcESIef}8PDZl zgS2#+ZQNvEz|*N%{(wt9vl2xu{0cG?Q_@Gqtb8sRxBQyB$v;`jw+yrFk{G2F89%Sg zF1ll0<<7>yM2$2Nn!lefG<%87|Gw^bbJSe-oPRSJUdgiSTkbM9z@=jN&ZNI9`F!VW z=VDwk3eJW8w|tZDjlZLHoYRe$Mt=-~gZ#gfz)pBNkwITJombcvfrNHKTmvzf@ zfb8{nX^lt=RUys6zstOrH`#w90N6BZ*c*}tnLaZmE))W-5?4~5=sy*JmcU|GFZyKi z{*uy$Ej7y^FEZHy53ziB*{)Cula(ovltz|}3<_Ps=BvoWPYESy}5VtFQ_>gnph zd|OC$MH>@@wzajOoC|aDFI>E!MA1+cK$=@JZqRtN9=S*|8P>7PNjkt{>K4?$FYTpDJ1K$-_1`rJ)l+y8LA*V@5nNTIoU|aMf_sMEXQ2bOw z5zA8tFjB{95mNoqIlv;I+GohQIWAqoI8zgANlHe7Z>CrzhC-3f3BR_eGB$vw7RJBk{alH2H;YDJSV$&Q*=MxFZ{y0b{kKu{ zbt&_mIsV>?$;ruk%jBA=e>?5I7)i@t-^EJ)ZH2$T_+K~|mY4qJ9v`x|PvNy*YKq_W z@nLyeH@FxjT++&+D$HH(lU}hfZ0_Ov;O2K90Ml*gg*2vw7=opt$q7phvp_GP3szND z+^}m07f>5Ftf!nEJ$#5O;B)QmJflnu$9XWxB1fyTCpKq$1izM5wSWy`RU`#bMG`&> z`3ZH6Wh@L!^-WD*_`(-q&aldwS9k;D>boABN4#@f5yYJ*>dc(%e=;`l|J*b0&!&YwJdB<&< z?pMEl36U#Wo25PQ#+$a19zA*lBBJbiDme`m+`%DwuUaEapc~<42k;F%@;Q~fI`axm z2mmAvD-P314m{7jrRm^lSuzFPrr!r1c);1nYuBxl`NfV7H9B|tw8FP++XlO?b3{{h_4;+|Kv|CvW0x;wogk`9``NSdbe1pvuU@$l zVRznnr&>E#3CRGkQb1hyXU~R%vCK#AYy5IMopo}uv8w992OqT2*IseR{I%C!L&LrI z-KXhoQ-pb(OKe?td;3K=u&0-U+|n(ZH$%T4`p}2u>>wzzy|OKi#j38YCeVt2U5^|- zihx&N`Za!T-?rUJQ8(XmllAa_`}MCwq#t|eAvvsCvj*q0J;}(^UaX^X084zBYQeFO zJ^Tst0+0Rhhq1bwi|qRPuYUEbfbq|N`ZF7qtI8Z$9S8)kEH+l_TGELFj-;9x|KTH# zp<%GEhl{gYAAHbGev<-mJ^L&oIcZm@vwLKqFF<`f47| zc0{KJQVOqc<`*2R!_<7&U3bah>8G9|&!^9vCPP~`ZPs1^=8KB>my*NFFTboT6FqYN z>}Nl#Za?|ak1=S~npFtkGfeF=7*^ldD1TU5ZvXhLZw(HFDLC9d4~v%zSHsZ;ZHowm7Vd?7}ML;ZCAqN6g#;+ zz+u_e#G_-;D}4q*YLdOHl$wyX@9ZY(;Gr}@MEqg1pPBK`ehI-W{4udrQ)@KXvtzrc z$4|UXdb@l3(9DrKI`6*gZtd%^ZrpzQx#!~GqU0|?fp8>Kcg)t#6_6uTk_>9~Iud zmyT9f&GbD4#+2}KUUO5v%T!3A{4BJ63*}G2`KR|wyuoQ-X5cRwF=DPhP1i>wMb7?~ zxxET)rr&)4Tu6;sv3Bp;X-nZUp=omZzT!13C-g+x|CK?F+RY8v!$t#Qrp~A2N+|aLv~M}d|TgkHg8Q$RbLNWG}BO5twu05SbpG*SE=I_ zyu?&h?b@|RU4HVDA1e`sn1AN<+c3rjaBgCP{hi(qN$Nb=U=apQoMPDYCB~*>`UElgv#pT6k!SZjHQ>GcW7#D{m=(L zNM*+~fTyFQL;Ra>xh3d-?X~`a0n-8K=XKVnW0|_Uy52r^3@xiTslxez0j%7$V}}q> z&8K+)r~`muk*Z6(e0w;uO5VA}S11bY_ysa~%9WPSXIvEr%?A%1;@JxVG}f$YYhyu` z#J$-8a{>GI?gg-Crd}C@oO*k(sI{$)F_Xz}dVHdvuics1RtHeclmuo=N6|z+YgPkD zZ@l^n;Pm42&#S3*r%#7duHoKI6krpZtjd zMCYx>?%1GRTv^U|-th1zJ`NVX{lEUZ0Kn;r&J^G_TW%4rtW;?3S+298J3QjWQ)6ltbXdb0sgLrP2%L~CSM{yX>cnxU7*c`v_mvmoy!i|d+pVQVfWkfS>3v2%h1rsiBsp;7Rva%4O>q%YUUX= zm&3BPNTzuQsmyD!NKetRVsK`Byt1YmTn9@!J3B(ftg0?A<21Jtj&r;RiWoGlUjFHi ze`4Dk6CY5-2+W!t6)7uQvwF3&OUf%cX{%1uq!C(T3TW@xyARK{Zres#eD;}VsH*4A zpToS~zFul^EP{6AAD# zSn~$^2jsJ6ZIoJHSHr5@*9*WDZQHgPpzY}Hu(9*pnbWL6TefZmHCL}*a}I$~X>66(8*{7_s{aODri z!!1Ak=}#T>!bpf_6_E|*h%2>=18D0=L1l)%ef#%&^y;gxf<_PAe?M!s{mJm^xwB_Y zD{#0aM9a|2FI>FnWM0-_9AjN)Q#$_k+Z6h>cwSKfS6Etn{P=Ng=}*OgE0(dUni@@P zK7uP|2u(;^ON+83A#}V$lT-Nv33lXa#JAphOIFY|3!!6>*iJjUy5Krb1wtBe7F2DW z=6Ln>*I3%utX&KD_VxGU_K_n;SXno1*a#l5{i>-d3qPH#*4wvlCl9z0ev@MEpknj3 zZRF?Bkt5kO0g{|nMc#Jp-i@T&Z@)v!g3z8GJaiDiIC|s=UhUqy7bQRX(UankU}fEW z^UXN?+8eKlbLR9}akg*YL84(!bZ%I;UL5U`@j0w{$*SDi)(WaQ-Znh zxG#=l&j7mF*|wHeZou_=Vq*(|+}`4|cWSDosaahd@rAYPnsgA6VRKeVnwg4usf*`!t9;$$x;etj(&XOnk;)`{cC&6f@IbT!o1Z`r(= z*>nG%eI{#OcflT6EsO^g@44^3k+HG=_y74D!$nt57kB77 zb)pn$N(*YkLY-Y^0FYuOxc%g@vmnN&co^FOqS^ueO^8fRcK7yv;~U>FNzvc`c|0V? zq{vyloU=dn=%aYp+uLVQH7Db&;9Wa*5?)=P(qNM7#j&Zu7HowBw+g7JFx@lt>~qiC zXJMd51$avIHK@KEKI4ary8FAdzR0ZiqyovE9UX*CvtpO-A%r0LG^K@RuI3Pog+elZ zx|zFjA=!8`7rOj6bIhJADq6vH<%1L>dpIv=i$>Iq^6fa6^>w|ul84vMK3A`6NBRvu zU4H%)R+&QiQ!xDnibKKq7gpVZV;h?aO0)d*7s$|psE@I>u=*C5eZlz`%FpGczR=nh z9>37~7G6SODVAFv3Zo_;d*NGPA;*#`k&pDg{Qlhsz=^Gx9(>PuZ$wHr(f8tg;=kLt z@xh+S8kY3E3R)u_>_SK9z|as(7|L$a@8a+(`Q?<_Vvg_1f>uL z92y>^cCT0g6vethf}MPEW8H)hcC1Jawt6vL851w(!yT$S`2jIXlaexpGC@%=BajZ|I!FQAlTI z$42Z)o^b>eguib627YuPRK&zR>tB66zz|%@tWt7}nI-4*gd&SAKDl5*=lKg4z+88f z`=_6M7EjKcJBNWVYN}1jB{4ixfe}Z2Z@+Ls{4*9gmzExj1>rL{+;D@mY?btQh9sEN zo>E+u4@$sStlPbNHvsIyb9z71oP(D{gw1d@L(5{yN1#j?3^kC2$@HZ(R_&<>25OF44%2(VG#P%m4%ixCxclvh}! zooW_KXEmtSsi~`x``I_o61go~x2UEy2r_nH6vvs6ZWqBG0k3}G;@o3PD$^dFRE_4hJ4)fWrj@>=oNXqZ3Wvu8{n*v(9C)KIERa#IdSpAL~KN{2sjpB58i4!$Zbe*4rZ>n|A3 ziQkB|8%6w1>lt8Y?44e-W;KDVbk6qFgv}I6Ve!`QT#C4gHBZrj)s2p%K7ry?i;Sdv zbz_{c62a#v7hGmE(&0)(!lhg-VyU_6YgIJZ0syRzO^y>*4&>PUbNQs#g7osMui~>C#JEtH z@iXpIR@u+_&joSj1Eb}$U)fjIDDLAX_hiA%f`spQD~Gu}b2+Kt<*hzf_*`KrB$x8) zvF8bUM+|u-L|(LglkS7R4)bIj=(LFPN5P7wAIyQ&{{0oA*7lXYMtW zZnRD`Q2Gl>3ZuPXV%|l9|5gBS=$0AmO{!*6O0Xlx@bs0n1RdIKSl!_9k((t z!R9byR#e7mlhl17V!8rFu%rQ9C8a!EQD58IR!Z*#T^cEH7SN@}9=TX5%qlxr($DO+ zZR_^NCToE!X{3QD!hdoULO1s3Ms7->M=}co(zHy40KIJK!-L_pi4KY$U=l<>fBp=r zcJ17QW`2XYbnfr%w#bh3KT}Hu2BuG^*5PeOz0iq7Mc|m^aQlG&t|>Tw_$NR8sc@NKD9nO32sZeenpL2C zA;Q_ydTVOzm6aPCsn2cOwkc~cEs?crak{$NKE@zDmF^r}rE^0CPK2sjQbMhVZMJL) z5D2*`&h!duaNW0eAH+)%06qeRM!SCl z)5Xa>u~Z&0LO2Ve_2 zi;4r9g0J=UU>=6!iW4Y0HD&aL>fC8n zsq|EV3=+w7{_-RDJL}{zM_kKmT!ePmk#^{Edzm zQa_(wfS;4;Xe&gjr!a^rIi=)C|#)&#UtGDn1J{&`e;F*JM6t_MFS>l z7Yi3O*}fZYAemebsCxj~@o|w;{xJb)`bNfDEchdRWMZ*>8P+>eA*TPvvMuPzF}}LZ z=-_25SFNykL=tItY~P_!%#`gq`}s#lJ9~N{@DnFakaGs)RMDt#7C+VF(vPgF3&Z9@ za?KcOT`Dd28zJ#K{uU-%;{9Bj;6U~xpYP>4L^=7eg)y_bTqV_2g7WFF$9H1F^~mTt z<*{g+E|&kY^JlKP7Ng)jg%@1k0!!1K3rw-h3@wnF1>L3KluJvnyzRR*8WzSXjGn^f zr?C7NQnnoT%P(!qTi?R@UlgaoKo7@To3xLTD_8?Z~ev%K&%CXFc054)WlnEzJ-y?>T78Qa+w5rA*rLIQ=V(r zuAZJ=xoXwwmX@ad`){Nqvl&`;`1%`fKppqpd#{$X`A>s1H#Um@!i#VA_c=Fb5P3K4 zztO(a>grl=*5008%P6;O*$CdiOQWN(VH~b=`0x>$@l-;bVbNg@r00DA?3cwZWv!5Xt7@98k1S9qr=0n)T!JE}<*TVK&HgA@ek6%x1ZB-&G zD{g2A^e`f^W=A&C&e(rA@bzzeLqT`meK(snP)h#n1dfJFM@+@!1mK-~WtXm66~sX7 z<>eR$zp)r&>_Bg?+`GEFP+mJQz}9UUvvkbA^4Iz*`{O5{gtzVTg_$jimjC9>o4J6> z-26Ck2nVbtRW)>)B&n~fR|_0sZSEKjU*8}o7WMb^v+=H9w_XTDU=L+1IhZXX7`zU@ z`r?b)&NfaoSTQaKP?Nm<@)u75OK`YWgEXXl`{di2iMu1>ra^E3%#i=aO&js;?D=!( z+_-Ur9QN+pr!Fd<&`}XQW}&Z|azJIN_AWcL!`^<(-swYc9*~1s6+((*MB$ZRzu;4b zjxye{YmbA4Z@T3sR%mPyD4KRe9(-g<2nS3F0qTd29M)22PMwjPhfwrwH{D{op(h>1 zqyr!ZS2g8*EW zH+y1ath6RPy~{Y{R<_}LIR-jxM?V^vyZ`i0KBv{5dG=Y`*L5`Q&X#U)GnIgf4D*|u zGLmdqw?TdXYq;+kP{WFvS_~nj0d#}Rpff7r)8$50%mx6x+FHNkm&-9!+Os%(dS_Rz zvLaiVJTeMmM(^ZrKV3}TC}zht`O?zT%=)cm5&w)nG@hko)=30C5e~t zqYw%syR2SI$oO4HSvtqwO%a9Gx6m@OgV(cEOOXL1Qb9$`zX}UVw&cjPza__gHxUc# zUGJiV0>!6Ld0778HsrzU@2XYzN-wo?&)PJaL%cG*mKS?dT{VMc4_saVthJJk?P%RV zcYuhHP`Z65$x6eekNA;xdm5jUUXv>Bfy-Gu=cJFT4^VL?ogpH1~;KG)B#$zEP6Rt+~z|Iw*BYMf$mU85?=(sh_j(eD3pq z!sK@1+)03>v$qq(EvqWA_;z3?oFWibLH5h9|}*kaz6(QP!bNn>SLr-g@&*u<*Y7K4{hHFMshCvE9CPE9L9Z zTW?UW8Efh6^_Jbv%s%?~6V%PahYq9a%$d_*Lt}Fr+BR;EU8YqHjW%r_JaWvw#Ig$e zb8D;XnyPAQODoEx>h2%3UU+iW>R^j+*8&(ly@x=ohNjliit1IX*I7n;{9uG+&^O2A ztWPiajEN1GI=Ir3QFc`Pb*im^>{uXi{DqQ@(^)elc+8Bcrkn;zzy?am-n4lWfb`PK zFTs<&$pU}d2R=aaj{)N7Sw|71G?oHJ7OxE~9#SdpHkkX>Iw7|M7ni z^Vh$6p`;|vsWO#g0!BzB@690`F}{rr5994eKlTt|Gc9GF==q<=R7EMHyhY}d(^g^h z_Qjt3`i3Shz<9$}h1UNtV@tL%bz^V!rH(DCOBo-I|E_$2^JsWt(hKHsm#(VlYxD^1u0p{_+@#^O0&;Rjf z!QG$#;-_rXM-IHsEL_3sUUXX-m=G|`#D&8})8i^y>o~ON#n#(T_6+n?O;)3=qNZvh zyx_+!aXo@Fu$X%)Dq_t(bl^?$KdpVbj0&!m+YoLaQ zVz$xrH@S>$FC;L{jFnr2GFz1GJ22cw-;~ento2IbcozyuxzUdnqt59QvA7&q`i4u&)FZ9b6$hnyMTB9jI5Bzietvy{4VmyLyT_pD0)Kjz2a3bevVhMIc0WqJe+q#p~V*K zSwocF#vHAf#!8X17p~Ggqo@eM1W&V^v!_|Rc=d=Q+*2!k+-Gv)r+W$gnca>!Nm_&} zeQYB3!c>+8&oddz@}#r~&n|CDHyQJ@-11MB`n}xa=K^t95=ns!3c6BDb5EC&RTd}9#J!u?z!?JWVyn=NvvNZJ31FG!9^FnyEG=dA{py#$MDIUx^blxa zi)CFMZGy3PW_Z*`95IqqoM^?ebYgJU&6iHxVli{$#r$IdaanE&fMp`W8Ik8~GO5eQ z(^1PuS$c0+&7&_Epr3EvyxH19<~TZf9qVp+xy7++y)hiXun1L@j24d#jY77g{r#9y zSyN}};hA%1K#R(%3RXBifxXWxw8gQ|R|ASqGifQvSU)&0gjXCp;b?b92j$ypOy#m_ z%7N1(8tv&50m7g7(T@PFn?G<1>r=pW&Y%1HDfSX#zJdwIhx*QLqw<{>JH>hFm6vP>ef#*^ac(9|002M$NklR}7?G^*$X*61lz=lJa080-(@PJYEz`=v4z0lqczmt5WyJb9d`QEDcsw)Zy!p+>~HV4D%i_<;sj_xW*7jsZQ06h9OvlH z%)-+0@OnnifddE7ymj*yrJOnw2Wy=;a@4B&rj}N=#4Ve{?U@duf`GIo*WK+G>=1Ui z4Y2y`bI;(;NM{XF~ZbKa?Y_Uys;m^!f{AO@F&)@7X`E0P(i zQ(VTD7|w+U%oBq;5_6#x1TTl7VII!Ls8cf9yLS&GGx2R`bTD=+COduF#(|Zqt+QzP z;uro*Zr}OdcLBU?Kdt@e!aw}s4-04cBrhAbgsVB;t+fRKusxgQ(^J*)xp~WG;XnAn zBUS@romPO89bxtPKlu|>{lhL*r$l25b!Zb0Lb-F+rYLhuVPx(83<3<)If!=6St(nz*zW!nmA;*5lbayC# zSGfdc335;U@aISFL5Pewgm2i_G23{_t71bBF8*k_yyNTS1=1Fsg< z#Li@(jJ-8NV~SVn>{Pg;E3$4yeEt-CmRCqtQd>UMan-v3@$StO`=mSh^ltT;3s0qBu8{IHPR3%Z0B;dLi{oaQF8OCIB7ZZ~ zej1eAr#6VzPxte+F81b2q-aws1hK^%N)9P({v+Bh0nVz50Q1$H#pY+{ED{ns^eUn> z8QjQZAR0Ox$E4Dwac^H+9!LupA)AgNZ&ED;+kOVmhvs?i6)iB@g7=ewFgAo%>BX8T z6)r^E`OK~i`er~nyAKlna9wu}T*=jW;Yn>nbZAqtLrN=!`f#~yU3ZcS$#7m`3Q6^T ziko!+yp6xCH3)hPtkDqBGeTMSMCS`7GzNqcK*c$k_6M?so;h=lZR+%ejtS0CotO~` z<&c}kPeaEtHkolF4INRc3ul8!k`l^)X;Zz0vTlr0%gY@5!6ghdWH@MS zZZZ(iAl=8X!GqT{hWm9@|X3kfI)Xvu-cR~Rt3f{wRs-6jqzt}$i( zhV>p@Jl{@fUb!N6O8ZHbw6BgYBb;Mw_ewCLK}|Gi`lWXOf4ts&0HMkl1dTq9=#*RA ziZ%-}yE{A7Xvg;LKoMOw2C}|BIahA4ES)O7c;O<*v=+6o3_FffVi1$91`DK`I1}c! z*vA_KS! (`eodc%<3ZXkfN;&z%KonQqK5C%hqz%gY`?Nelus$G{yrvqD|mGO=?y z@0V&G3xKDmS}VdkvFgCO8#ixKBd|x#Uito%>!-S?7g%C)!G)iU-Y^u)vnhiuTQ`GB zZytEl_zqRd`Rtjqk{J3;1ZYQ@ph106F6Vd+xFY}ouf4KM@e#yFgU|pWlT#PZpC`j& z%BP{B9%NN6001umD|I~oq^qi?+BAgBt#Zfb$Ul^xcz@%qPZ6!=&GrCq-@XIi)ym3Y zsmYOc9B*v8?T*_`xHu6?4v;YbvuE!fMR6>QW()yBEQ9yfbY!kd9X)nbJ0i(0-?i&v zVL6SJt%lw2Z*SpFjPPpA#vl^&|aDrEspqG_7=~vY%YQhh8cL(3&ye^l5M(a0i zRNujo*ePu#tvnlAn!Ojvsygo8y9aRU?Fy=_bRd4L_u6#j>Xm8UA(n+?mhkrWb`6ol zK6V|GR8tHDD)x+4RG8Z~#Q=sWrMD{%pklpOcN})#(#A_U8e=KApV27U6(X62itK0l zF*kV}?HPY@S)Q*Mz;5)Lo3|w6l~-Re7H!|YU7iRNQ3xIyn&ghLT6}ym2oCRGew$3? zR2=V;euEgj2JF-UP1y_#*|$Dq?et{TIE4nW+7W+HD#D$2-Dy$-1}1eT&g^l}dGT45 z>At1Bkw+KdhcD?f(!|gyuK&u9D>@$1qwb~%qEc==G#j9GENkbnnWW2PjZ>7XD%)1_ zD(}qRIF>A?Co0N!?%b)cjM^hdjw(9kM-7e19aTV&nCivrncla3%XT7^@z2hDHSO$* z)39|n?VFts%yWCJ{f=$(C2Q7gQr3!9tLp0No0?n5(xeKGj_OL$@vqmF<)rfYOE(P- z`nq1h@astPb*1eOnf(rO!0BP(IFpqR@&7-2_Z{TtapnhpGQuF|oD(w%Mv$UNN+Ojv zNm|L?U|(7GZTYThtIocEuUx(=*HxYWaFy-7^FOy`c~{yyY1gZq86=97NDw3fiJUVA zIS(+HxzD%zH-jNSPyof@iV|K9U%bD5`|W=E>F%eW)KBM7HH4{!%ILzDEmpltBRa*h z?3giqCe5mxluhf`uQ$eTSt^#tupEPz*-v*TtX)FWnOr6>;vi4FL$X5IkutpM4bv@4-0YX?5U9Sx+p-XO8|?O78*t+gz~@!#*9c@FrN%V zb5)R3sd!5TI01m`*u5``Q7Zyq7&`QYoj&^V?3q)R6hzlpa9RYug1*?dG{gBe%vR~# z2&;6rmmI4J4_>*lzO-N+BW7F8GL#A@#uQb%TuNX-!V*pr-jWUvE~^0NKp4NOS{%n< zEvpMC@J)ID3&58Lb{*#fGYF;|$Tny) zY|8dI?C+UT35|=;+o6i_J9GAe;IYFU*b|>15mutAaMgi!L;aOc>HsxO-==fr=^w`^ zLO-zxC6ykvY~Ir_wsWb);^#G^}RY8U`U5I}wUcdegu+y%2yZ-3wNEJ&XN`&JC z0}sYDF(jSO4D#Bd@Q&dzEuwu`TUbp9<_mEZmS=S5X!#@1GDF4Ns$FTEHZ3G13N}XF zu)JxxJWPUMTefT&X^q6iR($BtK@RFRDi%ko%%YIAtenA4MH<2?Ems!b;55ssf7It# zCh?Zr+RllybH2Nn`UP-mm*B{UQnZ_mCx03aoX(OOj>5sw}_ zdUTVccC(9{9OB!^Vizw$5yZZ9T`rF0eHfc zNt8ZZ_HiFGX3f$&lcrA5Bfip&f=KboTeo@*RP5ci|8#5Xp~Hv9bdMQ7X@b@P)t$_! z3HI6Q2*XUr!Kx_}#-&K4@|-&zH1627!zTuwl69IkvQnCc_PrDHyfQwGihcs44>L9! zm&a%sG8`j64su!2I5Ps3<1lb7v18H~^o9893Q{VT>$|?>u(m6wh|@BqoP`U5^W0hLYTU&)pe0 zd-f`gFbR8#@N)!Q{Y(ubA4et6o&$PDf;%I2JP)m4u*fV8v5os z|2mNl5ShaVyR?+fND0m~Hd^Qcjjow9XXuE%dv_l_d_+h$^KRaPg$B%`#S0BEAc??- zPZv+L9WY1Vbz8VCs8xqLxN#mnWS_uW&v_~!K+iUECVUDPfcI+6@C{YXq46WF)W4jd)!S~iYb3b<` zZn2guLX^|iOn;WuA{EA>h~`;DmM*>pC8t2Qh*Uw#7Qy!n*(g;gyvXw<3?v9Se1Xh) za>Up1<6=lC(pdt0P;>Hyq7`L|2&J=F6Wb0SlM{9KpFJ!je;VXa)cyMqOa-E!6z-;w z#okg)Y*vDpfCxi%MFxXRL)c_ML~xDVo^Y;eYIT%D&z8-bbm-XeQ5jp<-N$6r=yg(q zCFa1P1G=qmiNFoR*u6nW$iyY$f8Ye?ppDEG$o1LN=is6HVmA!XOQOk?*VsW3Ei|jO zB?mgv@kU2bEa#5?&}7;CywGIz?mKS-%Z2Xk+jhX#;w4LILM3{uBVZ5v1pbzWnxKWr zVEy_H8iA>?KC(M_9@ROTwnb=6y*YIvKf!ieuY46D+$r}R2`oy+Pnm^2d*!S8{2M@` zwdMVJ>4l*j`R@oR?|%Wf5FJCjj`Fuc0;*?HL4KbQx?lUdzs)3zJk)pkBufRIB{nbd zWR%b+RBcEYO%-|<>JfwC4P9ljg-z_gGO?8tWouZ+l3Y>>%s9m?DI(1bsz^3Or}skd zp1pg$-L`FO{jda#>ERYDzOk=|cMew?Q4Aqovv!RV2pHNmypw}UvzWKtJ=v_--ratv z>o6L&gUjow(|FCOBnzQI=0YrJH=CMj0H^IccY+c#tz_<$c^)-No_%}wBBMU^jFXlw zA`J@9wka_SKu-?=8&riA9<~U3-P-cXE31IFb?atAQJ-4c+BR<7s07FPSbbee_}j1L zWah3zT?p&y)vJ9TaTC*=BZzwA${07!U<{rRwH$xkpqFuofzcv_27Uf?Ti&*`5mdkX z?Qi=k>HJ!YUK4N`2xTXa`Y8~dJ3KMu2PRzS^Y=ed^TbE>=<5_*Fha0W# zI4vx2Zvre4w5Ls-PJYn)GLULC$@GD50w>;u1PK1`eE)m!VnFJ!Q>W4*SY^4>eK5Iy z|2{CVsB8P7t}cnSX9;7@&|3A%D)|i(@IweZ95{4P+Y`jAt(AbRrTe=Muqq!b=Sw@$ z7bKV`W&Vsawh@v;k8BZ*C4Bk4cVns!A3GX6!+6idt=qOK^QDz9D^t^arSD+Kv%BTo zTjMZ&MbX{fzG?Gj1A`()y~+ftb=p_5xgS1wfZ}PzBaiT^ShIRHE=oDNAkO(=hh!;I zFh(b%kdBCfpy;wP9P_6fG!$#0j^cXp# zxezxs{q*_g;qY_`19s-*3Ba)x<6F9qTtFQiww4z0pKxfB!RF*M3>0Mn0MfQ7p5p!o zdqod$;$$~&_#0pUhSp!|i{*Bt>`?JIS+}VIl&Ed-e!42O^4-Wq7ofb5>j9>l?-ggZ0FE9OOj^8p27{wII8jS&> zFMWCC%hZL(j~u7aeD0^uk@~v2jtGbOJD>iYF*Lu!+m9YShK7U=@82&r!K@jxEC;vW zal6$@gbUj-Hg4PyG8lT$LW_q!JpbbJD7H-~MCe&XO^J$T5cl?B8=iRL2{PxSV;?02 zTf>6>A)ZKxhDy+0wB;h}z{QJVPuOhr@++?Z;B%k-oK;n5N$I!Va*Mq`V<$|o@(L*E zL*x-b<~;}ety{L7JauYqq5QTp0UO~$7^h5{WLZ~<oLHSTQYs1jQ{|wjlX;+<7~a z`^buil`Man8-8S{E=AM(E1j7Ht-VlU;t;$kL*H1x-ljkLZtZn!9>|@n0p^{1b_zba zZ}$Q1wK)r|A2o8cMfTo%ms|8Z+J{?JFEw4H3i;aC{@$|s_~Qw2`t&nDu`mhcsh8)@ znNPJ5AwO=+(T~rbJ5$Ptj!q+I!{#^WI9nV5(MP#|7OrqOR4s38T2Gb#_#>zAv^|1L z*nW5+o=wxHO=h^6Ib$x4V)fcrIhsB9+)u$~iy$*!=i5wS#KLMd^6@{3zqxU?{N){J+20jZRbA_hO3j48M<#=r=N zU4CS`f}}8N9uNgiqw-bRIUy@>epIY2@jI2lQKU$oLwXQsVQe&1Y+mUX9DUT(9Aekp zym>lWpYU`wLc zJQpo5fk%@d5rKPYDu3tLu@;^; z)<(!2$>wa=vB0pJ?KjqW*a)MuyI88xI4S81omcdlA!%0C{^iY!_+j(h6Z-t2t}6M#zl(*)_Z_+mH?9f-(hW%9NyOGsbu zIU%mJFe5O6u0Ot@gu{ae<&iTlvGX)G9qq)hum9~=Oa83!BOD+!c8oSE^Vq2q`jO`r zWNzKM70iVH+~t#V%vjjlx^bg&#!j3lk!jJ}X_Kc&VFT5)U3(laWbKO^Rfip4O>x2X z?5tjQ>LiK?yTsGFB2t#Vpt;GI=SZxP`}QAD3vn`Twd|HuOU7+W%kDjU1Nw(fv!qj!~(kXAxoXw6Pyq6luJf3;*dTS(GEPwHf?6|hu%AMXp z8w-+bYZV5?fGdNlXoLfw!5gJ>GvlhBBJe4{8&ukb0w^J4sZU6-8c}bDl0o8ek=vC+s{Nz<^hwQ)-1A6dN#zp`xj^Zh;2+mX% zV6$sodW{ZXJgXpMtjNIbTsYJT{~jY!f`_krxuoORe0#C9j>9wncJ0{}D0|YUWJO=u zP3dXI)fYH`!^=W_L{`)zI*>pg={gdZ@LU8^4Klpu)9)I%3 zf8yxn#R^`+0}1rkAu0LMnRJ6kZfo@Hg~mV5SO8cf_; z)PxB%k`o8hUOPdCjQ*f&crdkiK$O+0FV?JEbL!M-s|LRqhesFy<0npZ=T@VayAB^7 z)j8(lPkl;$09b^fuBeNvf>1lqNz9C5dM*G@Qm^2v`{IL@6p0kJW?aN(XJ z_6Pq$;aMZM%TrdLvLr)DSrLW~`M|q*z3(va{uh8zlOpyQ-*t$G^{KpCqc_5x6@D`e zE31r`XU|}u`)K7*3T7#6QVcUDhvPlMA4zV`*)3S`m<(_Ds?)4~*??-Gm^_3zQ%RwO zMHmjfD!XM;qn$SFDj3J?mr&I3L}J7bhJYrTA3=!gQ3SQjDWEOk|SK+>+?jT@z6#!g&O?DzwnbdhQ87-!!5KIaW|@v$I$0I!fe8!eMKl zxKI(|s>qt$CA3M!p?gUXVq`dp*Xr(P>d>SjG>UcRnd~iRZ?TFyg@{0Am6wy976$nG zYN^FCMfsLMsEtJQww!Ro`mMdjm3j$7nu$MvAG}3!7Nvt%o_(FAu`@~#1^Nm3X%WFp z2?A;G`VN|#*)3C=DX6|8LQ_+FVYH{`i}QPScAFiEX4y2nEovH?WVKYc0A260g2F$Q zHZ6%&R!W7Z3ai#jH74e1A`U6WP*Qpm)rGI9jna1#GMppG)fV|#`q#fETgqod*S29r zl!`EyR!Ru;`O5!ke!9XZhI6CPUt{WUp&BLN7p{^qAUG}C{KEGf&iQGzx98dKS zrC1!%O9`m~mzD+;^Q+Gba7DKgAmr7;+;p#+i@gD zF+vMPO)<>bdKHBXZOFxk(qCV@-jojP(oPD6;sg#68apgoiTff32Lr(db_6Ive2@}M z6=W!>(BvSng|S6}$B!nM9GW00rA4W6Q94mvyXu(FoRTR8H@BS4IMFb7)WauwS?MlW z@J99SCv}PZOwAdWH+nUidHJ&nzXlHJ1#B=6X%#mM|Lwtm8GHJ4aUx~r8#DS(|MX8e zh>57Yi3Gl;Yw<^VP5Y zzXuN;+`47ESvF&4wotJvdKQe+)O)dnvU}nA7g&}5mw)xIXU&|&Pp5TQwspX{0_7j- z!HtNRqf8p;ltvLvqa^L^oib$#Qt+*BeG|0dnA+O56d##YeXkI=#*H0^_;1^`9kF5* z5$NQRM<3w_E@}(`xcbK}S-iv+q|KW*Vax0vR*r}pO5$>Y$w9HvG&GQhbm(N<&MEJ* zK)eT6NPh(W4h(?ss2VI|URy@4IlJw1Qebbu%)JH$cHEHrB z=V*wm(%wA0dBq1F(TrKsri1zW-~WMDOqw(`l%KImAh(1X8E!Kao@mjcMZTFeeP&oq zTW894Ef~m(Z!GEK!oB#aUV<6+>eSTFQ#JCQ#P}-7b^Q7??gG1;ndW5qZ zF`Sj6b=1@ul57t{=C}&8`V_Nkm@}78UE%g})$+^ZuY5~c1LfrbhpQ(4VjLs!CdqTv zS%x%6^zxIoa^{j8-6Wc^40qmjm#OY}S}7!EA7T@=<=Bbiczq&FVYaj7Cs}d}DY9V9BjX}y6ELcEQy!zGEAdH0*9xT;H zZ?S^vP(y<`Q(Ys6M_A>`3^kTsi(Hs~NwC9}==^!h1CwV(vRe28(B_UGJ5Iaotu%gU zSRwN4saU+@j+@e0;CiYB-ookPz$Sgqo;@Jvy{0XSlK;ZkSntP-4~wvU+jeZkg>%^n zYzH-+g41+C2q$1OXtkoUJ2)peQCjrn_GB8PiQ7#o3*d1Zu0m9#&0IA-A{~Qe5%?qM zCZ~nfa1S1`)2y~R`l6H}DyfuVMz5T8*(*pk^-HOxh|D$NIMhzEj-td(yV{t2%gonI zSIzH^Gsy2m1Bu8i4=%^I{eQ_=z6+rl_^Ljn4+3ufYT>y@E%a6{U}gkWA84$Gno+Y;&oMFjlO;ttH`*@^{y8AOA5Qu z>aH5{zoh(|um3?Y5WgV+)B})sBXfZfaezhC3F;_oIlsMa*|MdaeI`wuVj^F>bg}!? z`8PJKx4KQAHVx%rUgL;?7KLs&Ip5ZT0V*`gHeQDqE?BV8il4&{&z|FtX896i1>`el&m^7^ zg()p<`OrFH^g%mq+Enemkl-pO_wU`SMXaV4+SO~;XtjvMXbz`hZA7f(_fM#Cp}O`i z!3KHQAJ?WplEq*Mud+%t%11eXGk)9zlBo+BKRbF9UO^kNU=04=iYx&;2M!+cVWOP0 zwwye1+FEM$*RCBqcO5=*WZSlFxP!SlA!7J~_82_IjvtLBu#?=PaPUwUV~H^#T^KE8 z(saNWRU|(ier~ju4tfNWIQ_U(s&h-~@jeb^mrfizX;s1#dP`BRK#ZMbwDPDECzfat z=R~_WmrY7#4Yi!joihhMndo`fpF5qS{>DuhN561!%B8dp;m1~IVGsRu2blZK>mL>a z>58Ep`|qTE?|%Wf;M52&B(7lCXcq(-zU%1k=dw(D&ZG|Bw8vo1>={UveFbE*-hB>w zxp?7RNL7RTF2xWlg3-Rhy1f(JzSTGVP}O%ptYe}!!W{tUZ>o(wjZ0yKC_YGZs7sbD z!-9&ws2NW6WY9Qr?zkUL8DZ*-r}{?&*D5e(Yw zng;B}-eK(>4?J)`dF=JqU$+}jNDSrAm`>5q>;ziu?8xB`XB{?w!F=$u{em2ov=rI> zE2rwTS{3A60JvCv(vd|SP_e{~C?qYMv&atWja00B7}GBCkfn1i4*Ode?kq-aEp(rh zoz6E_7T`~vI(c}1d^HzGYuL`!R+GEW=I|cCXbZqVxNzZu;!QJ}oAK`5yH#@AZMV7a z-@hLS1bff&YgZNTu?3cdJ8rwfx7&AYmyWD^rbLk6&Qi;XoGynLS&h<$qGZ9`3nM|t z{OF^P%CmdN?&HnJd$@<$Wz-Qtmvzs;uu>@p}wUJt3>e9mSszqNk6pzphzhg z8d6q!cF1SQRv0vA&#v7Ggyp>DCgIkmb3d9|&M~&;!B66umEAkw!gJVfCIY1C znc3-|BEVG9uG&;}y!>2$je=eHqFe^H~*C9-)&XpxJ01~bu_7(Dy+68!%8s&?mf!s0` zIP+aDrKq=1q={411v z^V6Fc7%B`@x?y%#rDUZ!;%@BQzmGGpb-`+4CW`ZKmK8G7%zS6jf8m7}(R_9`TMX`9 zelPfBP!21u$xG=e_WP4hKBd54{NhEzlF0m7apujZkNfWTzGH5V9Y5Bd(om|fH<>c# zF?f)Tp=#~ma@B+mL=GReaN$Dp6j?(|_8r(CLt+WZSoSU38^i;y$@XTgV_mf92@Hnd z)7x5bH*MbR)zM-vWhdwU7DXh#xlzJO#cqj4jc7{LOzKN03J7Jj3bLp#fe}E4@T%ok zLKIdhks~?~Ni@?U>yUW3uO3@PSufs7bl*o0hffg9l6Xlca=}hwTfmx|wr<;jNj`Zx z$6VndM~@n_c+ry3VF%8)wj%Fr>U;O@Cty={SZka=f#eGO3D4F_>(TCAdkr?itv2st zyooU&red4>U}M{k?P}y@4u?*POpFw~Tw7b`u&B|oWJK$OU0qlV!_S&&m3MB_v}pn# zUfQx{iyk@F#URu?eb#gw%h)kvsBCcfGFzm<4D0Fz@DO7By)F7i$4|w;dj{jc;2wBL z)rA=fB>vv?;yr`wniah#)F+LuT*BM5esG=!OK}aT2MQ?<1-XWW%bd)Y4MgXy|MOQw zHD(Xqu#bN5gQ6Us?>>uTd+>pWOi?>JjvYU7ez$4d(~SuZoos|!sU=(kjCYa@NS`%u zksr+$dkK$)P)2K2d}m7@?jy1ysZ5JYmnAIZQT*ovQfpC!Vm-ZrHHFd{{VtzMM}#`|Po!M>oCx zx{{G93e*V`Ch9Z3SXqWi4cVm`opFv#fU;scDsIeq@&%V9B|r7lQxN;ZAN(K!EeTTv zIY4*#Q%^lfFtfiGe&)`d%f8y$78|GK9OTw%upK&h&{wNgtpcq+uw`)my!mi$!9(J2 zyY)6Xr%j(`C=r99LOF`pMqh1Mznbb^`y9-R z01Q8TjnrlJ^_-(zo116Np6!{{+RtZy{3CDgzwbW%uUP4T*QZn=9xNf+UXif;-g~hE z#t#Ga;UphjR~7^tb*! zS~dcZ8qHV@r2Q2pTOI(*<{>kvsDjG`W6Mlkp%3M4iYh`iBugVF1`4| ze7htU$8USf>t=+w^+p_5&Y%@mWA&`m{y$F`k+48&gdD;XVcqMC=PrmtaL4U;a3?c8 z^QwH@KB8UU{g?mrpX_NBE?k3c>-M#V`(Fo8-0)7EG;!h|{qY|e$uF;53Ae;h4d1$D z3(m!E;IW+}Kl0?0#>uvATQ$&hHloyG3{ZjTl#hSn6X5y5cfM;N?b*F6Q)a}-5Fv+- zX=#h&zWB&%sV~@T(VqO_r2L7T?puup60m7tMt6>I%KB$N`#Cf5`~}J{;Bu!t@!!7m z6}lC?q5Ov2z`gdesf{%K-XHva^f;twhhR;d1ls9Sr?E=C_~Or@ZO*LOT7ePQ9S^No zp~iJ<*P2I%4km0Kl8O3_8#f+~d}8$GJom6`G1-GGZK2|+Jzly14A*&u*p#a{>NMCX z0Hhl?u4gv2R6dd7Xt1&Xyu?UNobH+JlYKm1_;BbXMfsZ*y68{RSfzzl@tp%o93359s9p)p8nhq?|Hf}m-(Lmxvt z#*LkTh0C`c!)i!HL~KYWd&O#9Ypf;~P1KUSdT{>%;v@`McSItA|3e24A!97tXm$Ir zP)l3hv^qWl%}txOY-LQvmROrGoLUqXv^_kYu7CFFXHaPwppIvmk~w?JW0llcY=d&J z7F-3_zP^?=yz*_97NYN#&0CC?%Hizaw;z5SS+Djjsj+R|+_|GhbuL+Y3v~VWzxz9o zTUMwc#!rYELikMBQ>>=x5{CDl3voC}JX{GqYr#_J*f_qDygXpR%Kzs9g zmoaelk~#?IsY{39vJ&3NL<}4A%laYnwOqeEYk$sn{_oHVz-dZY$rxfh7A`RshJnjO z^{euV{dA$cmj4Po4tx`tCpbidk~YX1;8&_C-+D;NDIc?q{MjcL6W?F`)t9B>X&LB# z|Mx#;vMpP>)NwmockD)>ot>M~W2sO_3iDYh$>T4-)EKi)qn{fMt?jCbo+_XIolm2ij_2WiBYrNCcl(YV^sdo|74c7rh!-Z< zUJmOF3+<^B$DeunS%iD)~Ymm0kiKFE(01MUbJ$pn5#9faZKEjEe z2poxyh`43_dW3A%Ew>Q2MvoguN@FdwFr1_GbD~U9YIbuKzUUxRZilRZadPI;tbx!d zrw2sP{!%#KyMMow+onxJL*H1pP6^KK1PLZsEkyds6DMjKvdAe5ITNxUk)1kidMhrL zV`op#{=K^q%KIOBh@68W%en6L*D=9@aA@OaKJ%H$lc(Hy_nijKw5d}$?R@XM-<9X~ zJMN$quKvPIK(I&g@=4f}4bUGeZk#-Ub& z>==8ktzKXM=GXQ0q)8LYVk78p57%xWJ^tjAkI_KJt+%Q>Qu_N~e7P z`#%usX8&FXbzJ1CVI1Ce$6Y4H(?9-^;r;dh{`bCR(&`CoJrMh-}8qVy}TLaPVAO}~^*?C;)m zWx4EU7Co`*Lyt`+-UhXR{Hfo@a8;Mcew>qFMF&+@O zv!@*S*1cobZacpyZAbNvvJRrUAN%M>u@(*oLWTb7OJ71;sK{9eG}FXnRHUlA|GxVP z%nlJ$&dgb}(W1j$T^jBy)OGE;b-u!JSgQCBQU^N=1HVB&WCca8H6$eBMy~5`do2}% z;UOGkSvL{HnRDi7ATd&(MmZ>il^~ab7SfrvwoY9*OBMRjT5#y_0rZj;guDAJZp=bg z4<8P45ohox>_(d4bO7yT5kYAAe5q#T%9m;X=P#J2-q&7RO)3@wjq{hUsaAgX)4wZS zv>h<4TlabmKEhrA;UGN263{Ws);Vj(g1K{|g(=uRecI0C_CNXKKgJRt>^cOtc#ZY; zMs1o6R`DLP%<0gv<6=F=BzvV0oR71nb(zcPRrQcwSC6+F?XMvPPvO6g@T6PbrfV)M znui)W${$(*xW54dtsQvie{=cYfma@WDUBG&-1y!=bYZnGmsg)c2mFt*@IH4u66Mpa z%a#$0oH&XcY}mMo08D?0^rMt`%u+qEIscXe)vhe{I)B%}r(*fbt)IEM{C%0EY?`(? zlF|#KjRbgqi3?4H2Y$2X_U_xq7n-bv|HB1hH>1()>zgu#;B-DG=yqQ?c<2Db%!2s~ z@aT3>pu!*cz$1vu+I4F=MY9(nAIDA{LzpLx&raa;!{T8`APhCU)Qj|d`jekl@*C^l zpi8R`jW|&>tekw?&9XPLbJWC%S+Ybe(IaB#ZRm_K$#FiT9(ni?`E`L95<9nU?PzU#@*__Yz_=45 zoeLH&z_=4=S)LEoIV*1M9Iz#l_q4HU8Mz!2C)T|3ijJVs z)F~EtP1x#SgOewAZr_P?KKj_BIOeevCKA=|xa&?0hZ*wQ?mfHR#lS>u=g*4^vA)nE zhd?M3XP`{_QBwC~k3BArV|6SQcmniy?(8{ISnsu+@Tqm2sc4-A9nqC6z*bw+7s#OBOHI#==#w0Jp=^#tj=h z(7uC86&%so$pw>uD+`jdd5r;%N!D_5tP)sg!8UWoOt^)4e9V-|Q(*X?eesJjz$6TN zr7g}<)?Jnvt)N`+?d;jJ=g*(NeEGfb;|L`aa>0THRv=wt{9!mOz1A%&G3B>kI3d0B z@sE8>{_lP7doeGBTgs`vWx6T&2Cl{@{jzSptP|`8%D5`);L--aY!I74H0SD^B?U17 zM zHDwo6c2ZG{;Nix%kAL#RPnu0)lXA@4v}rTeZNmn~OK`l;NuCCeQQ=%iJ7T-(xtg1o z-FhqK&IccROb>qbYhN{g&z?>k0el0x7q$Z11o*%n4WRJuEy83)8zOW~cl0ua^5m_H zQQzl@OjE#5Q zT3!<1PbDgAZ5=UwJU!84k7t&t$^`$=6CX0J&@M$4pSshI9II2(SA(zQQSa5gRx(vc z4D$X@g7JY1v;o-njc)XBo+^u3vqe2YPY`8HLCe6$*Zlwn1!|5j%nA250h^co)n9j+ zH#6SEz||PYvTN{`F^2uK>XnVJEl!cJ=x^D+)mmbnKZ>m}-tf@pt;I_J92qgt=7dey|g_ul)hGQ5O{I$!w0KQg4pj~lCew7?2gC_w*w z9O8kU#)eQO>_}kF#;Qx~h2Q$d*R4Lk`@6rxV}<4xXZ4GhegSe)8){?Q7m0o0!iCmB zVB5mMkB*1h_U+p(t6g1(k*2@=%fGbr-*?~rlc!9bF=M)Q?MFZQF$y_l(w!F8yO!UB z{ScEv?d;w?t#Og7tkKn-@-C+6U!_$sI4Dkh<`Fi}Y}vGhHI++|q^bl@SN1g>J?aQX zdwmmc*>b>}X7S=qyobHJcFKg<77Hz-F$b&jJr`E~VkNvyoHT)aJ9=~{ZV-X@)r9er zaDF%(SbFK@mvA+YKJrKrfk(jV#`SpYlP|4Wsp}tpXoZ}3Hqbr(p(iXgue{qIR*yKnVg@;2iN>`j?IMOS8fU4n5QGZ5((EJ@q8Z&Tw_Pd=ptEG`Vx zF;)>_qrSlMmWJs^~MgShl zCWKd0K4h7;VRVXRCJ&9PK83>wK|sAx{DlkWW7etkFl?t7)J~oxP=-oI1oannej{c< zW2xvb?MD7hZGq=9ELVMWJMvq)qG&!AfcKAi zL|pQW8k0ju$X}3o^5khG49Bb)-RCc;i&f1Z-zQk7-?d0o=U7ef6+)j@C$89~^B2w& z>OADS7>O6TlXxR_yxqZve** zNhVq1D46lQSbA%o1ri>Bp;)bkB7calx?n(=BzEP%BoSKZEd4im+BCQ&BxCxI96I8w zqbH8)DgRLouxwje_UzfC7C)gq2;ol~%l0L9b=ZRt@F-I`3iOuXs=bs2($!0Ex{Y(Y z5^x~x9o~X-%G4|dWFDXR5XJ~9z5=-tfT2&NOCi&OdB?6DH~@T!ii~_E*KlP%w9XM| zRpg_l3r&ug2bEDroY=l)i=5ME#`#%8JX1g@2Up~)`Sa)7FCng@?HB<)WAzc4LsL}!Edj4m7iB;e~T<{lT<6dT>aHqi+5~I z){n`lMo{_@ORB&8S5r$iKlDagpTn}UEW}=*@2H1zbXiMFS67!|V~(5DGWf5CjPjWh z!bOQ=f9@=$IQ5np#2-Z8IiE8lZSNjqZ1egJUE{{hn>R20(#`OjAakx;Z@rCdymQA+ z?Aoy-$8;iQp)N{6W8icf)LcfNGP;16CRMtW?kJED*bs@w@@ zP8>U?bMz>qUF-N?fLwEo$%&IDnGxeBP8iAEfV(C_7(mklX-jDllm_Ae@D^9i86mb_ ze3&09DLvkw;a&WM1*D|g+qQiN$|EcmA=$PI?Mf)A zrlwV|uA=y(p4MKzNN3KSqrpe0ckbM30T)rF=mDK**dB^ksKpR9xRR`_8D*tFT~+Of z_od60>BlWwH(R4M6A!Rp!9wsm!Pi3L+yrJ4{E4s--{;7qs;<%~^PiU0sW z07*naRH!FM@}jPAD9=(-a_2~Ex^ATq-hmYW5Jjft2wt6>j-U9#2 zmMk^8rcRrJo5FJ%UE{}&$I&cYIM2%U+UnOZCkqxWpjO}r?YK{zA3jt0pbG*M)gp18 zK@+W~rS0N{T|2h3$XNcsCf*}$1uJ)O+fvnt8D+-2d;Y(94KW4=rt`o-=*3Guk6`l|#=bPD=Pr23793h8JD?P&mn*c4% z;h_{;Ou@LqN=>e(-v;KGhc}IYYkyoOvP!VQ)ohmL)Q^>b>jaR=-QL$mZ&!+mA_b3# z)S^MCH3F^WZNu7lKCgZ4H9E*n`v!ZPoiQuVuARG32UG*;VgK}?M(JpZ^z+Vi7u}(_ zJki?`{2qAVL3&<@eub+#)8b zHZb(N!4R3h;wQv8Km9UET|U%mF{^1(3|wFMT;YH>X=TIKOqw`Jf#!?Swrt*P6v<#J zv1w~5O%_FwS}5m?IZX)n4q4SCTX4u&9Q4)Xyb40yYDVL8;JNgsuj^kjzWKTFyQB}k z4bDF}{a1b-vVwnQ$Zi(!KEps^C^GE(FE%vu#;QG>`AyJDl;4HS6Ff`}aVSQNIBil( zA<_^CtuFNCRv~o8Qb@Zh7zBFq!iz7M%b)rE&+tAonZ#0h@r4&CI-QRWF**CJY-8P?)wfE$T+OF#0@jMpO)oWKHI7EHcMw}2zLOqTBAVnbpLKCA;mO=+N zP*39o$bo#L&=fT5%&DAMyZDx+G|2Pk%|jJgP1#Rgd1V#)bMJlkp;YlWJ9CPaA93CQ6A6D}ZAAJWK5Uz3^iZX&W&d&q@7p)ONg6)a0k|ByFt@Y44af zH}2L*w0iMxA~kQ=xZd#S>NIa}^fp;B!%>68 zO5*0OW{U1m~DEF5NHq)NPi8@ehG1*+?r3}MzPV;CkY z&mlSl#he4$F>B5o1cEk>cCB+%Cth;@?!AiTYC_<&YgdB~b#2nB*%N0o?#hf@Pn*osd3A2uR z)2@$y@>5#7eEEH7*^hqwL)<(7q$>)wuI8o*#R25v{^fA+JVMW%P` z*lvya&Ue0z1bb!0MLod`f#4L$p>>WE{Tr`a z7|?XkmZ4$CZ#P1J& z*m3h0EuiJ~2|N%TvGUnglq;6)MT-}!&WdZjd1d7)9e(#ccUw^+?eK6m@Y)GN9F;Fc zV0K)@1uk2CmSH~C$T{T87FX4>R6EhJF*N(QnjhD94?VC#)7PzC!$N-cq@~*7jU3PN zA1Cw2AAd~k8b#`uHg&o}?!N0zkWQLB8RqpbOd9tp-M)Rhh2KFDR{jScNhq&bvy84B zpbHNleC&gk(w{y5Ge4o5`snnrSh-(cx7PA@>+QE2GsGKxV(HQ$in1?AUsz~&@7b*u zRhv>|6_YdP`YPoeUDujlgVWz((bo-623(koTp4|y-7*jduJTSgHj_5ZNG-CTR45_| znn&%~U3M?*9XMcSojQB+#D%kGvbUKaR|Ul)Y9?F>cV8jCn#D8k)|JIf>QwO4h8g98 zsW)@xEQ~DN;ujO|9g3eS`t{v+|PQJV2%U}$x3 zIT|Eb3+kG|uxRljRsH+_^WU2qWAMroCj99?`KJm-k*I!73GFs!%!-E|!j`RByVf+^ zv|$6*$H-HcYxLN$#+a$03RVIn4*XGrrWHlwTn)3?6_$P7d0SePHuk$5(`yYpdvJMM zGt{3q?>8~<8-M{zl2(vjYFh{nqehQBd8&Quwk;+F0m&pam%}JgSqnGVnNTA*0qRcT zu|Er%Y5Sw6e{5gR*S`8ypE&!#a{tf2_|KiPcGul^RS|{G?y<)nJ8|OpH@@)=0WV&8 zd8Jiw%A|kg0AAZWQIbjpxz>gd4B4f<=DWxg+>j7VgyQZy@3u-Vzjrw`?w9`Zzgmw* zk3)6FeBpDS4}{aEAt0~6k&`Ueu3c+ow~kAH;zJ)M^?mV+UxX!_pTLXw;B9{X;)_Bg zESNjb0{8f1k6~R_zWkENqhI^mui*ip#kFk75*4(^_brU&khL`hSCUm0rN;4rHHDUv zNcq464`5Bi`_Q{q5U$1R)~sR7@Bk+Qqw*0%Q5_vW03;geLw_1>*nIfIPcRjkZ zsgY_&3^xSC!TKkE;#BJHty?!^zv%$HKtsPE{2|zM>(Ns*HHmK1*VT8Zt4niOq^V@b zjhkQz5EF-+y=4fKA4N_Mw2QOe_OKciEBB z)9l1cF@Y0t2lVJ>xuX@mTefT=`Z9qcpv&)BE}}j0MO!)BARk@D#>=f)^N=L#mItJ2 z?6~nrHsYd<1U5F@=bm|nBJ-h#AGSDA`=L#CsLKDsspst;WKC5wac;z@PNW>Enm*k! zKz}FbRW~*ixtua>st<*T(S~X+DuieGArUcEpv7R^gz=8&wSp29 zMeQPJ?b@{miZ^YEOAHM2x)FFoQ@Jtw%Bf3nJS;*R;UCMpVf`C~sp&IkGXx(y!m0V_ zfBX;sfdTek{MrB5JFoYdAO4UuU?1|t@e}6Gnhi4(Crs48XHT3YEC^y7?;WT6km^pK z^LE0RvB2x>7;c~QPk#7gz3f0$vHS7R;hsl~AURB)mXP`e6J77og9nMDb3gbPD!*aV z2HEeNIa6uR2*H2$tT4Pn5mHPVFyHz6zt^rw)2B1k|K9KYp4L6{%rhigvNwD_{-Gz> zzobAZ;TD#RGUR*P)@|PE6#1Qz2M=~7d#>V5Q3PZ}LWvHwRuC${xp~t@KCKzk9i*{phj7f?KZq#V_~_IgEbf=rN->)s7wmA;*p!`SO>(WU=oYH%?JcKJ}DZ zzWdE@NnuALDgC1_d;!lRrdi9S-aBr;gFJl8vZXq4)8;J($lrYFOR)FEM?VVGy?bIw zrbV`%+4HHKR%;k>E-n-Tt&aqc>Vl0aQz9~DBrx4azp!t21mL#pE^~lZLMfS^{qmrU z*Kzr#|EkM;{S_?rUxU;8(|(nI-;O`)uQs)VA^eS7kyP_DS0=ST6iObPK_*BMy`p$& zYH@Zhk?;09@1i34-uJ$P*A&{=3BQJ}iVY4M`2XNDpP?T4&bPmdp_D-xcH@)T3LhC} zfxj_D3q0@Jw}-D9r+qcTvyyOtn1ea9XY1d;{_DTin;a*wIVX=F$F%*yAAVk*A3yU< zRcQspgsG0#NkDJ!uop1k7miq8<4XKsD@jKGM{AQk3q|L1ant6_#!1_zwuuubJ^F!1 z?YaU(qf5h|DDU;CXaeRw5;AB)q@yGf3PyUC0>Uq4N!R7c_Ihh|?TRN6G za&%fVX*+0zTc`yaTM;?ghr_t9fVSy5=Ku}wNY z3swAYn(n#xF8%qzzQjqfYfZ{|(PBrA{P0sBl4a7Qsd!6ADKol~W_^WARX$5Po6X0b z%m`_9{8A2>OiTv{QW{Hh=FRlX1si__d!B9XbDutKvO8TxJd1i6McN*D_(3TmQN%Pg zK%ZIliz){^5FU`3F2vwl@z8@TgoGGxcJA7tB_ld;ek~Y2 zf)HO3EE{#BuSSg>LpCNS6S}_l?QeQ}_|W5+&T4*HzI-_m4yQ=;dikZ7tW^jvuYNiXAP98tTSxt`v zX6DRU(n;ESP-b*r$S&~M#pI;E&wb$w`pz~dwQStDkv_YM=q!q~vKG1+gh!49=X^(J zUA#EQ!CLgRot+r>Cd`EJzDeHs~}vkcnL8~OiLQ^SEcmzef|$WuU@-_ zwW#~_8RK)_oH_F70)vE~xkhQV>Nc+5s1}@-n*Z<%U(oO0`~LR@1FLM-+fS{l=T4nd z8ar@ZooC?Hd+<E(zHVf)@>SWiU!(!NQ z;By`Y5t^E8$+Dc>XpgtML*UE{gU9paNt29xvqO)t5(_2=o`A@9YQkneD;c`AsTDzz zJp43E@?l^X z28&-?&+)DC#uQ|^MR5n(`pCX2b+3UdMIF%gN*WAG`R?&=bA@;ip9>7)9Fcy z({}k0F+wE&wfa@+?T^eXWvH(@9tO{X`drgP$HCK?2+X}b7j;4NxUnE~4m}#~rEC@x zKnnV=(FqwA8$nL-CDOVJcbFE9&Q7|Kqk<(&2xQvsY-NFK8_nH6z zCMUuzG0a~f&4o^0{`z{J)K~y$R9(vXCEuYzAw%`UK+GnTJ9!CzxpVg(yZ<{YV+TBh zr28VlV^KN77Gp=C-LPS!4{(I;iSy?eq*JF+YNr9o$zTK-cvze?J`zYXX3ivfA=7Y# zcx5#z{I9*4g6?eJzC$@|x!wwJAm{jr6Jf=YNi4*b!WEuAbd;g`lA~_21B9cp{6Ym< zIglZgRQc+{0b{R=YNE}iAgk%xH3DPwoV8E2=hB(87~)=soglkPR`0XVKC2>Ndlo>8 z703ZX_;pso$a`Fa>4YmV<(6Q_AmwMS;_h$ub(?BuoE$x`LxIGrcsu?z8Yu;Z;#>LxG6CVVN$2; z-o2Xzl}xL32eus`PG~!57cYt>O3dogBOA1uGy=PXSbyx~T57LR#2djO=t9q(g|`eC zO9~@f!WzYZ4|Tp`nuA6T!^+|K4app+{E-{UI&>VMvf~$=JkUU548wzC?z4uqSZOZh zK&*JO;c0rdZ{H3l9By?)7Ky&59XoeuS_TFaTmoIPDsK*E&I|N-L69U%xMj(=iH$)_ znm$dot=qP7b*4ekxw_JNzje#jXjtNM&Xm__0IXTPCOi=3cY6n89reVf4eNOg3>%T7 z6zvD|4pZXKbTjM+rVJcjan)Du16Q3~15?bX82ol1+k5;l&;;F)2IW@Z%B?>o5AdB= zZt42iC8K4(*xhrk`P_yL8z9Y|d>Bg+$&}%tf2kN=c>a0w>!2gGY|J>H@FB*h3AJ+N zO1)!{`AYaJqlML!y1|}3T<06>*BeX5hEcJ4wF4^J%pK~Fj=tC>Iz|u|TefZ6W(<>` zfgIf*_zJ5R-Y>B8Q$Q6W4lBf^Y7Nne?r1<7>NBj;B@yz@6W}>|5bL>Il%2XcPbK-e z<2Uu$4-cNhU5AW+G3Atqq6r?m>g8AHUz{}!HgzdyKm8UL!>xPCp~0mn^J zbJE0ROir09E{e0b(T6Uox6|3mp@G3#uD}_V%vCVy-^QCk59MXenT-A8DXl8aPhzf` z(EmC=Yc+Xjyl>$dw(y;1Ql@7a#F)X5#LToIyuv(| ziCn50q!48;Be86*v426#d_8KErU;N@pBuv|vrtcW0{U&I!LWdS+@ zTU*M;+H?ZUu#q$c?dpoK zM7hV2Y40AgTueko7fPr)9INkH2E<6bJ!0x$tfLV`+DLl4ckLoFsm{tLc)dTdXQ3Bc zZM&W&ll(~lmH}rhod68uPI8mNtwl3N6%DI>w%)Rm!2{DQJUIMG6|@C}DH>>RH*83p zxscmzjmZV{;<)hX^2;=B?YeVY`WZh&f#* zo}VaNY;Pm1_p4T}%9%%}Ps52GAziR+`-**)@ZgYDxTW?r#8$q%GAV}+c?)?lFs`4!b2ai_U zu0Vd^pd+tx{6Jc9G6D|)KnoWyT2#?UBoO>edOD)7*O|Zyq~b|GW|!}U%^NrQmMl#k z)-VtfZox+5Kw=?y>ji_t=fj*fPY2sE3_e-5!9%cD^`70keYIul79&ve8S4y>(-%*( z%oBhYE?lS=cJAE4hP-jZ26@^kHptLIUKfzm4kUR7H1wVo=sx(mf?E1{Wsc0yE3Y?| z)1U)a<{66L{ot1syi_2iKQW-^xxfPnG}y+T)b8F4JYxyi1jD?qd}#WriTTuwBLJto z!mbfGJ?`7L7i++sUccLw=NrV$jIJR`xb*Y-TeD`3BB++sMlVL5q*w{&iNU#qg}StT z+ja^dqY;%T7L3Xhs-YlT@U7wt4Yu-0_zY!|i5o4685l1_w=W*v*`NLFd2Kw`-8fn) zdF>Z&YEEdGOP7S@lR}pt*2slxF&Z!StbP4;5c1+yrV)rH*7yR`rcd|PrVSej%sb4` z?rxSA2QJZL3R?$2Bb;&y{9T8-jA~)SlpKZ#cFV9Z#8Oio10|joSS5sk>t~o`4ls>z zQ~Vtw*xLo3ovx$BLUB^*`}b=vp>mqQJp7^!iu z)VK=U_1>WT)h>FOJ`Pc*)G1jf>EP*ErtX`P>yLmj7^p@o%Ji?0_oFEJ>6DYdysg52 zeXcF70vM#H&|)J^-uLR#UxVts+|-(m!_3?48VvmSP)u-u572nvLg6o?B)wm9x=GE8 zN;u0hl@g?+m>>`NEIhXeTbC{HM>$&VnRa2WL$OHkgImwlHqM+8>s7B7D8;sq>L zWRITi?yfz%v3JZG8PvAThJA|kE(AMvW(2?0&d!HctWfyRUU;#v@?pYq{FFdesgYkZ znFPaiE-CTFN$v6@{NA^=k2Dd*z4B~(1OOWZt1s|heTB4_OELMTJZpu%PFo~ZO2Prq-S>nN#FyIeUL3f1lKTdhlQ9|5garegf3lRVC^GM`kd3GdkRN5Vr;qOWL>n_ zmJ@VgjL6A^`9p^+P9r+YA?(B2FoLJcAw8s6wTG<)QXydl(gGIIkw9XViao0LoKtNR z+F?XU5!XjD7|}>d+3`Y9mI4f-@5oVO_Bmi2D&0rHF+b7jcl#mG?9z0TysdDkrLtCSf*D2kqsMA%P~OMA(+n6D!$R zZEsF&ZB6Du3$|*D3rcD61!2y?w;&x<$yf^52h<6m#e?J{-3F^0YOdj zZDvBveAU~=XQh`1o&j_D`5is=SNPT+!(GNgHh(p7YEXFwXj|*V$(-0nE?v5WZ}AJy z2(WjSjt4M>78R$sz9#*f_Vonki9wKU(&cn0G*GRDeXRBe*i7{W8G}(`@JNnzrSyoe zSlZoFVn6202zf3$?@2Fzd;<)C(PPKSFZQ?YZbnfJO>SxS^p+V1AnKlveEbtsX|KMr zN)Xf|2M(B_cGLyJXnC?#%e}RPoAR}a%kHdzkY=?SS9R<)nD02(l{l+jhfP#Y>7#rb z5)!SA*eKo#rke3wBDYPLJOx51YYbPr`XPZ{2K?ENXVw%Ci3P z_hBY)xfh(um8-$L7R+2cf1V;~@h!Iu7wmP;G}8F1KmPIgGiO^nM6YeOUqv}_w1^@g z`qQ2cv9!&&3H&L>j2kcb+s^gtBg403-qESbAA^V5b&Xk8Vpa4OX0EVx^>pa8wPYzn zDgsH7(aodtr|6jOzyE=`bLafKfA_!Ja#>f;Mzc!E6jrIATos@FzXn#S{)D&vw;<+i zb6ojyFczCDxSsd_8$G(KD4ZQwFzXaNBD+ zSKkNczxr)W89agqL)FigzV&wn9{m>))NT}+xb1107^LO||2ygRjDTvrk4|527M`I# zTeCE*P%SGOI@63;qhK{9jD{ZwWLcr)WM=8Fs~naYRVi-V{@xKVM8BDwiQN$0isy>4 z>Rjz-Qi?tXSEiiG&vdjUKzDsB(Zj$`&vi6b9M(P^{I-7e_V+qpu9fHN@pg5}wZ5(C z*VDg)OSsYegTEb;=i(S&`4B>sD(IozTRYlVW&Z8I{Xcf@+WnKCJ%9G>`40QQY03>5 z-BpZ>MqHT?dQGz$oml=U98pc^yUZUBhJPUc;KX0Sz1GN7doPK%n zE=UO*Q2ww)vJL)&71qT%3 zh5Y4}30xc1?0~u+$Jw$(Ub=*H_CfE3?5raarIAHlmf#Y$h!(bqrCRdD$@bRv3JK+X zijOol0^K4#mr9Y`J_o=dZvy1`c=UuEFGSpuyOJ~HLppENFoT6ijT|!?-Jx-iGxl&h zg*qc>H5l1Wna~B!^XC{aa}KTAakzoaMc6J*(b#c$ z@Q6ybcag}6Q$$sJE{qDZ+|eN@bJQH_EzDwfPlR(_q!famM8aE`^>E7^n9nxwi*?R{ zOwiw8Db-koUd1Xc`?^(J?}@_!a$CNI%Q_{Ui)LVs9gH?6sOH9<{N++nfGL`C7FC@` zoPapq!d@jQsQ+4rahiZeD; zjVvKXLi&+&uJ3dc`aN=b`q3ua+G-RBkFJ(X1p+|P>-TYQ&fJK*s)6BKR{TJi+EJ%O zGqQ9k*a^(FY3?%QUfQa4DYMb=Ou}&Q5jKpdvZAFYGpt)nOiQeMMnYq6RVk;IYerhw ziYt39zaXGVd~ok$Do|@D;rBd}ebxPQl*)WC0g%^y#SX0FUBS*%(HsuGjd4h3ba z#Z2)5jAW)5=W5}KSrlP>D7-5NcqpfFrO@ncGpxgy`FqQ&3KC`BfzB@kJAV%O>ciJ% zuTWd&nt4?4aw&;=EWa`T)(tVkL#!Co+;ni3UE5;gmlCl3v*QvOCT++0?|J{)M8$x_zS6X`gmnL6-=92Tq z^26{Al|LA_gFn1>IX8-*!KME4=f<#VWUPEt#$M>Mfnc9fu8Nb~4JLOXo!onyBDh-B zGtiRmFKcDvZTYCJ?vg7=LXy0#W3|>>W=GSo(S`9XFPfw9>UShAV{fpSN39-UdN`@| z6%&NvO&JY&rGk|HORj6-|5~5bJ)&>%_8Q}=AsAPLH9mXOkCJwyDamgR=i944EhS#- zb|VUoE6XTk=E}r@-$ic9Bhc|>6^S5PV*^bw2q}=k5 ztxx{+d)1qim!$_vo@-3{vf{~_A$6mT&1W}sl`(xoU;Mgdjs)0einv_OIoW=FBmh+=71nD=+FJTFH~$MB zL-xb?l(9fKF@J<(^pYPem|1{{J^~qIY;)wgV~fk^a^R|*jc-CtgpR zHf~~^5s!fUJbUIWb#Z}JHahEvYgoWouBx<-(?TkzHK|t;VoOX_|_~a zD_xr2-F;HYixw>=#SwrRHh1sb8ABqed*n!#eEVr-^Jc@QjZ}jG!26y)dfZocEx(&j zE}@YOPvBH9$4;UpZKchSj3jW?b-3%ysnf5nTuGt3^p@K|LJl!Twr$&nBfMqlGP3mC z`SU@$dgUt|bd?s!1^sDjTaZK8+Z}%d06)_s4%hAOwu@4Y&hiDDJ=h@eDo*u|m9p!S zOZtcr_uhLioH%Go{)tlr-x_iI-FLe4G*-(`fBI9{IAK?|6=!(tytXa(9 z#)*h!&S0dKxLCyOBCZq3ihx;2PaSW-xbiB4vyo^>sK$?S%fFSGu0PAY4wWkl$?tq; zDwW4l=-bzueDD7&R0EzfkRqq$%0EFvWE=z2D7BlQ_w7!|BfaFT z&-pSvmOm*;gewb1nwTc!ZSc@2-wz29Qq#QpY4X$p>eHaR9I0K|{fYIVROD4D4YnIO z3Sj*?jg& z4IWExesg2LZWJD)|8fNls4^P+v0Q|N=1`1!T`CN5wQKbj(buZ1LA?%M>>rmkXD!T5 zmByEOo8GSXsNwUR$xnnH7zT2CQw8zLdKb+Yf2dMS6kAXwdoMC6Z%;(@nz4b^t8rVt z%x4}<|N8T~?*pJ+_ZPoT8HXDBtIMx=z8VMDO20bin^P{2pEsw!OTVg6{Vo-DbumMZ zpQ^>Yy5ei4TuFGYm9LQ=x>!G zL|vaZZ!QLJ<;$;%KSY2|gt<^}fAx#HwA9YHE^OXtru1;?EW@V|caOC`DiaLX=uUfJ zhdW1($VbAG{rnkH&$;z)tS20D045IIw{W4m5YX06!HW68I>kq*}Civ7M_} zRip55*Fgf?u3ft^wLT{}jThhwe+gyg%nJoI7UR*x9q4A}jV*tB71qsU`k(Ux49o zjY^n2WhS2Wo_lh5kBzCs#kH@#2KYlq4ojIoe?9?KW4j;C^ua8(?zIowi<=p79-oa%@QD~yLI zW37n7Z!ucyNF2P>^^eWB$UKlVIR8N6;0FNIDF}c(Tu-5czkh!{4`BRiutj*H%xY>f z5+K6Xj*Nu%HskHiyY6+;gJUE}p?kXapFMweCza3z+S8(#(~X$cVmU63YMDfO{Px># zcQ?(<$2|!PcmB|U{nboLXq-NMx)AaPq^@7KY#9{~<%j`r%C6v+7DuTW9@}>AKr#02 z+biN(?MH*E0XXK`e723=taoOHg5)Xms_>%4^;&OUj0#LZ6qM@D+o^koj~bb{oyQh0 z0?)=xTWw>e+0*s4d;(k^Li=1XVlQ2~nA*!pW|aEGb31*?l@yEtax~Z?Jd}4 zW1eQsH`#^&mQs#st3?p#0lLgGlSsRG)Rgioq^V4zd*Hv3OYZVPqf-YyMrtyY>)fiT zMAjm;HoizL1KF=tWkpGyps-jT8W8qB_XAuZxLk?SOY!}6^#6NBt^J>03xfAJ{YJql zEAo2`<1epn=m^*imwdU~fn9$@M8pxfm1$<2Mj`Im5DGP*sfn|JpUG(pnR^*+jk}*N zW%;A5a&NpX?1yN#bK%YXadH`-c4#M>8m)!Q4)UsY}WwG4b* zAKWecwF*L6RK&k#*ZW-nhTurK{KGi)bdX!45$zRUhV?zF@_62bD98F0r!{-kL{aZp zFn11K@Sz9qkIilUhV!^m}C^Ly^O$J=-s z_gp-%?|_K12a0e=s_Ym(Y{ty#s=Xc$4m-~VR3qYkVyrcNN zB-OBe$>uMfdWuf017#i00%H!8v)%{KdLO2PyQkf=>~3evvLs8gvM7rbGeI$c0EtB8915xG{r>yhDij2g zsw)zbX!EjIxOMJ{`|NY>{-3?iJ`kMxbE-R10^k;S-`UlLjvB*kW)nH)iO1VoTCl#x zB^4DX5L{iedUZ*0acx~4_@S<&1IS8D@WT|xCd>Upb}$yiZ!Oe7Jxe{IBzPtaXf7-) zEz{9coboa{Hj42o79&&BlK^mZceMJ#*>kABVO~N|frazJHB~jR3a8+NrbCgUVrbIX z&_E6sFI=Eo(St!Qc2iRjez2wJOXXyPpyDxD&LkVE$GwxpE%=IGE@tXumuh)d=wjR-~p({fl8oiaHrT_roB87BAMb8lg!0Co3~*3KRq!?9agVeMV*^%hb?hv%Y=^X ziZfNh`RJb+?AlFD@tVqYS>M>bhlMZCbXVkmMh71hRW+o7PQAuGjUv?bg_l;34YMSq2v?l@UM!s0spCCaDKD2#{ZFF4=~cvE?DXd3DcJI4B#@b%>ynbH5u60vLQBCMBi;!HXnIe)ju-U z?`nkfsk1V@bFFlDYbw{8%azlwG<|p}Ub*n=@B~zG9dfyH7H%vrq0*AKkC)QDyZE7@ zza;jRv;IV$-0%Pxt(Z;8828Q#0E@g#*H{a3?gnNy7Q{ARq(mMk_@8y8-qyhLIb1Y*AE{) zgn;|%OE2Sn_dopQe~c6r+;i7G09sC2C+el19#kUFKKpaDqkr{Re^tABb!AlrjYc|Pdz{?bF0^7;d-k-b~WfS zuVNnRa??IHa033Bp;s@a`=HIN3^cS4J@_EUcVkU}8}=7o_$A|ut|Kb`0$gi%FH&$ zjpk}E!z{9tixL}WC)ihk+>rpTrc`~&K|C*j#p3YkN^F)i-ol0Wdm9--DC*4dG8`G>@q@9GV-T#bHfAR zEUhQvFD4qB3(U?++m;!R;>1)NX?gjZ)^`EVQW}y4sxocxVLH^J{&*az;>Nrk; zjV)kj$XqWhgfXGL3S^_>1P`r~+GM^$-J=RqWh5O3Rw&CHR4m|9HggVe3p~RZ5iw-3rc@zhf?K;5we%`-=15q`0~ovu0C(h{AT8o>`XS~9uR;*=*_5^_9kQIt`Y>=d8VPB`uMUEp9aPL}TO=)edcO)qOt>(@0!Yil`W8ngcm8#loYy$nK* z#b#wBBcp27D#rCAk37P>@h{*1KI}?y)C|U>&Nwqu*W1T&1yv;`rWOETqFKxIT*R>WN#t2r!+McDc)cjY;IZoL%_FD))69Lpanj|Txp zN6WbumhId-*4qSW+9wK9)eWqASd*W=F44q#lcgog+L?ViIyj0kJ#zWVH4!;UY+g3T zH~N-qEi-@@GwEYvmW7BM7HjQt`>(toLMuxz*Iz5VfV;>OOAEhVzY?vxUin>XK6K27 zvhaA|L!qD8Pa}{MJ>8`4SkToRL7~R;r*C$=8u~MY6U`uTJ;t!R@JwD%Zaqei!)s)?lUS zv(g%1hPK}(`-*Q{Ev}G4PzG6BZoHWgm=!e8&5Gm-2|k738yx_{KbqLF!h^a@rOe@G z%O~SHnF_j%TEQHCMS|GZ{z4zUV)h;gt&?a7%gm{Byje~&7Yk;!^RDj6%}{hxeuZC`~UJUK&Ja+ z_kyEtzvB*|CW#~!XJ!IHIf4blhqiMq7!xA!p;7tPx4wnN;IChP1(6p7Tv=Il&wcli z>SxdXoTlx)Z7&*KRLW!1Hwpj%KmbWZK~zwJV>>}g4Gj(Grm&49x8~+%AYWZ=9Y71M zCMWl{oYm>CMG{2_#Q7&B(-L&bQC+kLF0Lb*7*k>g^7TJmL6-}v|##|H;tV*RQ7zAWvW( zhX#S|&z?O4?A*0;cV1p@MR^7F$;%BP=z?$2sdjdC<0o26))Kc{2skUTQKq&xx&ZkOud6@7qT>s2k~=vvY|6)5J;pG*TP;bqe2HFTE0r}_7o`W*0R#XFubc{sH9RcnrNdU;yqN&lm?MZ``yA4mou2Aaz46Mv1rGb{mmj zd;Rs1(NUla#EjrRja{0ypLxo5G80IJy~_z7sUe9ci+@v}x_g&uF@|@yB{ zS3Yv&Fso`DS%kI4WF!LL?z!a_^vdt--%lL4jtt|>jLe^!K6Oz^7zy?hRFx>4qYno- zn$2Va1;)&Kb4C^iCdr{4V}0ggyEeU(PkDLypZ&#OkSQAq`uqEP+S{2TvT}22yDKFi zXM0dffI3T#37O@l@&ozXcVU%Nwr%S+=C`9qj}2gCfh{+YFyqh84l`y$p@F_WMiaXd zm@~&FCKv@Jr6oK964RpYOWpJ1?8dAKNJ*}1^f z+_+!->0+i)jwNwbvUirUw(L!7?PWk=da;QZcKcEJ`fTGzWp_QF(+FSL**xeg#U~xv zb-Kr7pLF3GNOsvDan6!UJVQVtoO|4^PtVMqK6hboaP-AjULPBq7#^JjqvYn5XlJmF zYLhn=i^=E<^6!f$;2!II)UHYVd3i+P5psWeZ28kA4Ziu~I#D2%=GT&?-+XSA z{`K3gYoXz_q+RLx77?B5xwj$Mfk{CIq=ew38#7$_wB%*&O&Q6F=vrEIebe6P0N6}! zBpx7KVP&J{2vF((3sF60i{yNvVL+c&TvRBNRJM{9M8KK_MTLMRc3>g^PR#Z17qOPZni-)M-&epw1Wfk4;%KV4w1l64!?laEK2cmWEr;w<1h1!bVTFsnx1+Oz(l4~NQVLj+BEVYY0IowY z#W@rC;OLeYA{zn$V_-R;dv$d+$P?I%b`(HMZOz(xx~HdyilGN4w}HL^o`NB>an~mH^$>dCn9c(Su@r1q?WU zz7@ni1C+T;aIbmIe@SlruLR3O5n(28pN$I&f6nMvr z@S7%p>Ote^mRatdo|=B+^*4yKx~7IXwxOvB0NjPEy!m;H4HC0tC$ziNPKJ36}t}t;ur>3qJ3gGUG5YF$# z2ehm#k=b?rE~Haa^ae(*w@!f|gwQfQNatFNsBA4i)tuYKCzcPP_B5SLFCRzTl6c~3 z$bx1fK)F-u>??7Oh@(oPoX$)}7p^?FGB(l)3W)0_aPDVKn4b$j+ z0I-fk;t$7<5#I^2c1}AJ0lBfGjOP)o#F;M2KhDSYnkQ^#p4&6z&P-_PYYzMs5TKCZvf;=evu zqE0H!Q*%x2snqZ*-D9zIrALAcT zpNqM&^WHlEU?Op%C`^K#5?UiX+GwkwH(O8@o2xFL)29=9!vkQ~!MJ?kgGi)F*)C}? zm{{#KfJnsoBNdfZ+ND;=ie|i`suI}()hGa%O|Zyw1EW*8DV{aOhXH}4e6zBBCSGAq zhp*iy$p)_edaI%Tke}G5bxokVH-7yZd;F#+rvOMOgh5=e7dZ3OsZ+F@V|Wyw1A%hz zmXwbWeAm8x7#8BK3ar)H(GCFHvVDj4{g#vw6SqvvI1OtW5RO^PLBYsASVYXpiK*#8 z6iJ$#1u=P<+3`qh;++^92V4>d_y-N07)`BNVp!X_7MR!3)qxToj16e#SSDm*#8aRw za2kkCJ|sc2Mcr1fuBB;Qgy2#O5tbzQtpekr!leirf|?iW%CU(_#tz1uQ`3c{Vy#2R z2q8+_84I1Aoq)r}wT%eM#Kc~dnxj1fYVZ;t86TZpn45~uaz1o>X9ulbRa*xFKXepx z=!}N-O@P?dwY4CJV|IKI1Oa$pU`%cp5<}I7dMy^v1$0IzI~#YueZMT^)YP39Pib9z&EM+er^(zoa2)YPy~IFnXT zR$FTuSQj-r0N~c!Zlxc2#06sEX*FvMRaNZmq(^|+ES` z35=fsz))#EsvVw8MzAt;Q+D1=v^YD$ZpP^Pl6#^gA71l~roW|^3sEh83$A62khr-R zNZY;UtGRrnp2P@PPR?1kIW8~^2VU;$kl>pwAloeq2%3Sk_<4gru zoiHsw@W2C%nnQ;U5DqV6j04YOcF{jDz#b6B7lV$X+4;;$b6zB$W5&=z6UfpR`xgY) zu|}r8iH11lPX1Z|p+H{0e&e{2YAt=Fw}1ulYF{J^ai}-Hou@6eK_8pLUHU|_rMX@4 z*A>UYVxGoRP>s%?nG^8P+f9Ik$(DRMN}g|1=Ti|^RedMG$rX#f#s?{^o>orFDEtwr zwD7Z%SAtgQmT~p^`^{~6saMZ`dHgI}wDQ7DX3^Q~@PoNpW;NZQF9A3UwGB`_jb#=W z6tcHs@19*O5YOqHYK%S5`m!6BJp+MYB+LMcOF8b3%w^9EA|XDOYTID#}~j7#8Be$r?z?&Vmxu zupy{Y2=^zT>uq);Uw+4z-?lCvUkRFDJ}18%?iT?2%^wcGd_}KQ=!(Tm`Z?ieV1@698D+7otdZps!r)bgJ@+#JTYSuy(LO zc{zhN`3(oqS=!dZ5!jLqWTc~wVe$CHG_ny|zHWTWRIgf%t!;5>Il?54baSF43XlWr zA_aokQp-mT*L7clv&q~zf(pjbRdVqY858tKf$$9BI+K(7$8Zvx|M0^P0*Cs02iVp5 z{(<)}yJeS7I6oI}!kD?DvjvwPK70g(cGteUI3@>8AQ0~MJ8lPbRj;bSht0o!?|Ude zp#?ij*?Nkeu;qLUpm)obEz%2x!^D5{%{STpN}>31#iKH5Z@uj{>NAR#G7zX=vxe%S zfixjpieHW@LAUeTtFIzV(+boqXi$kcI6Mdx9Oxeayx}wpqv_tB9@@wzJ;sC6K{3qG zU)^`#ee3~tr2|=sQ&x&Ues%8AdU`dVw8h~hp`0C2?w+AD-_BBH@@`p%cR9X zn*D@Y70=AXYc2X=NRRL3!|%UOxqwb`KFl8Av9W1w*3IGYBJ5N9e&|UM^gHy8> zK)%`&&JbW3BEO`N$w#iRY(5fiFTa*ON{tK=7E`#G3CSfHo*F+H_*;DAwKqu_={~?~ z-riFvCZa(r?f;cSG6o1>1;=S5oab2b+-V#?!;I|3n48T93bI@!bd!PcN>(sC7%9wW zMCav2c!NxikJGc@T(Sb_MQ7)J{*xawDhtZXv7P?rH@?A$z+Qu01{`D#GK6)RP%wYs z+Ozu>)?$D7;~xV@CpkeERLrSDk;p@jJi@$l;NU@cEMr28EOV%QlWYK(WV&RZULY`m z8OHRqL|#r^GVKt-v}Iy+3#%=@=UJiSpd%`YNL^4+C_n5u zAx0O*CbWW+>tHF?fGBYqO)_JU{qdaIjobwAW$u`qBzb;8;o7xp;s5>n_cKw@F5DRa z&N0?ly?QnC7rUIXsvtx6eiafWUq^TZb7_rap9vq@?CbHPMe^>wr`A)c>`Fe1Os{EL zSzCzZWRJo05QY6CEC*UzOQT4ONmKJ&e(y?8t&fW%64{FY`gm1ye+-y2OVJ=jkRo6A z8tkedAzo&XdU9JQQ_)QmOS;Hzrp(@SzOm2j`HbexjcSqi&CGahF?qm zS5M1Ck%)k;A-zu()cbbKE?gq5?}GVT&WO(tzL15^EVH7t5C*BMD~2@8_cIZngfpm<;~6ZClZM@C{Bg!2vH2QRHHN)dJdi_znb_PU zdyXwvuS69i#?^N!C0%_Ksw-Iq_wysa{l@>u3_sBbD_wh+e=4<8o3}h%?=L@>-%+r< z#H*K4Gl)t=z zwJyh(4RC*@tXS+72f#42nrwXJ+U~JrN+S8FD0zzNmTdXs>h_0BLq4{mLVV*q>+ zKXm}74*ta^>W()R?biDWH6zdqL<(vFMl$iU<&GGLoIENkEkon?jjw+r9M1jqtFO$? zXFu_UrxEqueeXA9-qGHHN2T4nc2Q_!VhBGrMvfQVmw z`U|L8a0Ep@t>@2ETaX($lNEw%5dCi;n;pMMtLxXTN8nZq0~zbrZ2-mLY70-)^;jlP zPdA@B1%Sj250Di5`AsAIN0C3DS!=;rKK*R^{e~`4NPM?~c zn9MIMplJ5-GQd!ak{g?G5#?9a*G2Hu1$pCf@}ZY8eJ9W3%_kY#U;W0{$@$EgGweN{ zWkEVOyk*-q(sGiFz~|&7i`7p)@dPNnt*s3uFixS-x})oco~Xi*&~Mqd53!zecacrs zc;gMI0j}WDd;9kj5iKq!+&uj7!<7E&tFKN>PBb*G1!nBK`%Y$}x88gU@qKiB4B=ke zx^uD{8yd)MN9D`I;M0*?8u7yhb zfAcP;r;QEuP#&Z~=^XUT7RtQhVtN(_NYEC&y+%i3+|j>e!nd39r~q+vwko{GeCDRK z#8VfO2x4BdVWrjF!n%BGoQazgX%w`0r3RBj@}7cHp@)Myvx1|L=dtb|3(V3}@BXm(tf;;gd*&u@5jl`2GQweg=B`SVJi+DPie{ z?c(n6EoPFEigGqVu-yP=1~H;lCR@h-t$X*PWPSUccL1)YleJFJjOz6Zyu^wMjDq*6 zc}6AkA*+gJ7)g`RwB{BUu}$}lx8Gr|`R3QZk(ZmxDeH_5<{m)xkAC!1cs?3iC@3v? z@beE-Vo7o7_}J(_{_Wr3I6a3Wph`>s=#T%H8HPQ>WLR5U$0TLdrB ziF`y)A-|7QpOL8aJuW=Oh1LuPspB8MQ#517m%PjaXmm4VVh{T5<&R>+O&W#m=18&6Jg4rd0Aseoi0 z7mBcm$0C;x##o#Knmha5nm06(G4>}-@&P97!Z@R;P?>dGn-HlO)`zK%|4Kk(Ka z+leW^xEz9_4S@mhDg$ogmQ6rG?x`Ul8CBRXp8F+5W1x(`Wp2<>9Xj+rHDu!@y6)Ol zs~`fv74R?j(18G;m+Rek-a+wPhRY75?}7qq_`t&tLk%=q)au0-UnD*z*|bqw-$>+{ zFMpYcc&0_@|GU5aTOcdha_ziD+TG#75qe?o?R%jBeM;%Wqa*lp1xN#9(3L^gbEi&G zJ)CTT9N3S|{V$&T1&D@!v?Y`q!sjOKLMhh%+;jB!ExT^X$GOqe1pg-SK8-u-=q#%# z>@eoAD~Ki!x`TuCGB5+EOy@##fm^dO;M-kPj2nt0CJQmTH{NsL6VuEfmlh@nBv!l%iGA8tOZ1%+8H@g4{}=FY}5a95U}o4a@G z&fHL#C|DC5Khw-0mcM8W;IZl-8~gVE_%=f8_~-~?C_bm+(HK6y@%da=&$80&h4yxq zmRefQ!LbaXkd1}e`MGoF&e6G-dM@!cVtm1kcieFYmB2EBHxda2ecyTuj)K7$d2BXN za}vF*dh*i@QWDLiuT8maGnIW=lNVwG{e2T-qd)l9f5jU)CleE&QOv-kbSey4sNoCG zzsT@ru!uJ?oGvJUEg5Uy|K9f)Uo5>rq66=}NBpj?4yu$D=A7&Z9{Z^CPk;K8v60cS zA-T|FfB>Yw_{=k;I(zOc%a^@&xq^OVM_=3I~)`9=6Q(K~987tG-|Q_{%*h!=#_gpq-EC-b*pv6f50c>`K$EipBF=ACn2SMowz(nMUT#sM}V8 zd2}BXzeCg>j7`Fl@=aV zC66%^#p6{^?*Q|&?h#`>76G9N7LJW`kBXMG zC>}{G0a_Op-|`Ixfa|%`!*6y#3++l?)Q(^1=bb(}&xuS6Cr>tm4%u6X5wBvQMwdL# zkxSY)2!ule13H5=xGYArcJe4E9%1sxz@VNpvr!@g|G-zH25Uj8)Q1WqxVK$sqqcbD zpmeY<{l}675-q!hsayZx087h#J(nnvJ$}f|qZ70)E0hz2R+F>1p^A64cS0r1Mx_Ry z7$@z8mKM^EW80aLk!NQ_Ils8$(dpUv0?i@LiIXRgm{C$uXJlBq{q(6*q=Ev}&6#Z< zIeHX$0CpuDs7y?boFM}AB!nc;2lH=;KoZ)5wYhR*tjA*KThG%wGzL;v*VIrV2$?R3 z&9iB57I;8owW$-eojIw(3Z1maPaJ1MCcA|pX*ds!PY9o6PzHXWEkuUAt=(QK6ofhw{-yV~OTqvkP&l-2HF&_mY-E20jEW3AHf|ojGeBvG#aP zV(9VIu>ch!H>_7s6t`cz$Vd-nt6?*$%mS*o%?}Lp!=elv zp5onrbZ)HS5{zsQ9Xvq(ydb_) zf{31Y#MP1oC_ypM5^9+e>C;vx2(k>kjeOd*vf>xw4woA|+~_4>7lJ9ZnVu5tnV%I* z$I6*+VU5g;P&kKeJ%Bet#OQ%cwg$s+GFh}GRRq_GsH|tfNaW`N0j}hR))}!lG_R9s zDTSx5bhgHFkBG_Bf&%G*fpTnCY(CjcDdS_(Lg(a$k!bD3hPG>gb4S==OMQgV^sZAu zs9Qn3xTOI$3K*LSE>GFqiu6o<&c@#8#Y4S;V> zYC@GwAi(0x2d9Y-R7S*KwR$!6XQcq(L5YAC99dCm#CKp1new!wvjfd`Z%;1~FomU~ zIU|Q~U;}UhN5RmC7P4x``Zbi*PtqvrPOF>Xpppk68vig!!q8czSK&P1KKiB zRCV!yC$eam5I|G7?1vjjpk_-&T6^Sa3KY+h^GyUjlA_JKk~fKf-;KY}A<=UF+9xF_ zNgHj0(`uZ~8;ANvHX>uwaiQ&kU?w;-kQpq<&twNMhYU$~W0tQ`+ytlq((;FI{5Hc6 zXHK8y7d9Pq0mlfFp7kbp05vcx7oE6pORQP+_w>N7>?9`>R!QJ<^&P#=aRpkHRpzh} zIlCmr+O{x9iOiEOiel+M4hQLc8*ea|>aC6E^YequMa(vnH!)u<$R7;o*|PzM4dcw(oeT+t|72B-pi=?S4| z%S>N(X$91(Dr%_=BDp7tzx+}Qd|pZ*0(fbYouUx?=$Wp?UzB3SD4E^z%d)U|>3@;t z<0MPJ0E_9DCX0NZZb3$jbR!e*6KJ%L+I-fcI_fN;k+GYbkrVtWmNUa+x|g_K7bItG z<4A8X=&{WPmM5byY&U#qx=?@Ux5N*9C$7YBGevJA(Bd$;xZi@o27394*y(ccYLZOx zkvD$%GuhaW%=xn!VUffuQ$MfQS0;1I)pr;BtIG;Ez(2qFtG<%~e5Uag-5>q^lGCk> zJ6H?iQq9N$s_D!7B&thI{8c8Aa0UO~=m6LzRmdv%>!xP)fPJhpWR@c));Wm(bQcED#1G&RiyRCEm|l1V>2Ite9HGlK!10dLu(7e0Kmj~hEWQA= zLx)36XQm|(1AvJfG~?AQj+VDem6d8GW}22bF0O!HATGq;%CZWgjEn)8Ga?b)<55;x z8q*D8BuP>LD`~;5&}w{iOjV*>MCxq$kiVt9(nt3Xa5 z7}8E=06B3m^Ck{37+UGA9gDH45aAoEZ&(MdnrdjOU4R5}_z)tX9*Yf)j*<_%bD_5L zw9N5H3Nb(uwj-LHiWvIPxdmk<)N^Eb4Em!NhYtC95$FI^#*=MdZyzm=dzho|zw4y~sTE zIX^6e)UX@u-de<$QO4@7A4{9*n&iSc)0U_#P(W*3it{MI(uWG7ig*bHu z#KruA?xI8aNiyQ2_7t_rg?$kvB^nFrxp;_$9(8Gu-ZLYOge+EqaPs7&j!X*~XlGDxk41)R zURX#R7U^iCVQMLpxhR_a92jtm9Qzt_F+vTB+Q<3+IPESGv5;wFut* zm7*%#E5)L4f8~6aWTN(1;$)~o(kLz&|Fe0MHUSdVPnTec_`gek#iq7)#R{kQ4}R8A z^Z1uQZjJx-JaKO^i0ODytLaLn$3|^#jQ0o)WX!WE#<88&Q5DhK_sgw|r(C^Dl9gAS zJybS&M=}e|OQLWL%-mpE>Z#dHd+A;2sZ73{TNv`BO8;{2uJq%tbj;M&rBjx-G?`A+ zj}^z`fwa^5tv?K!cHWA}^zJMEat^tAa=-Ccnm$*r?X^GkJ6`@-pDY zKS7LYmht)6TE7PSXYji50k9Djp$UxSlnUmPlT9%;@DMbGjL|Jfx}vM*=d~eC&ax2T z%(>CRf`p$T)rq>fmmtSRkpm8#;CuF_8hD#S4ZCCKZqoJ- z;DBd#U~rHT!6rR+|K74oo|*AeP3f3ulFC6xsdVTI%MH-THsI|$b|Bf~T<@tgs=oaXKiR|0xhFY#wfIZaF7z~>(_9$N@;N^A%~6~j*g9~UlXD*nQ$Ms-NpF* z26goH^ij%=UAutFoX|THjSh5QB7Y2|iOK27fYYjq3gQ3*2*&{x>M1vAvOoaNEUTyh zFr2f4j?lGHn(H-a##UzhLX%I+nKPJW3N{0P0q|&j*VbRXO_#Iu8yGkpq1KWjHGv z9d;yA2q!QcXrL-1y`L0+*j=+?a_;O|v~X%8UFlw0CP-09Rp91zISN3==-eCxf>q!O z2uKKyQyJY^voc|b<%jjk2r_+PRLo2j59e@f6-R4Bcx)S(sp4!HVDJDgH7A(cyf{g0 zD?U$I_Ch9xb;T|8aX8f2*vRkWhmQy`8pmqc2x|rN?p{=0Mori*K@yEeH;W34n&lF$ z;KtO&Wab7GK`i0$1cre%Shb=o7M=jM+FM|z4TNi{h*_wxglbbXb)(_TBlwgfKI4Tr z=5d+@H5@L)CP&99HjslaFzpj2|LJM9m!%)ZV@*{x_p+Wazvw)rKJprtrDYw?R-qye z60^mCm}E#{ybFkF%Xyp&tdZ*GRc>xxm!$xdyKMLs1APv6zxn&j9&YuU;)*T1As!$o zFjv?Ll4nunDB#{pEcY|!v@pa!E#~uE?{xRl(ty-sxA3JOj(8eA8mdZ?6US(pSCrWe z5iCfpe7uol`7uFhy-wjoG?6l9d0PIqmYfl{;DEjHwFg*SCV^`^7}0n|0EP`SBw8<+tT+yn4Cnua&$Kv`@DTzwI?vNjG!i`KFK0`3j-YM{SU+ zO;wYA62JL-5_b9p_>AdRx6)7Kw|^xAGx!Z`Y05yIXn2=kKJ=zK)P2&g#3vZ@#s|PA zwBZVxiB$S5KwwrTfN^#Xx=Tic`o{9wPlw0U#~*u!17CV-vl@ zh*o-AFvn}JEnNv@Cd0+KcLlmd@CFOw1!>h#v$&mg6baWzN5ma6WFQpAn{Uxqo_U5h z*$dCVAYZ|Qg9wGYZ{3aKrR`g{0%NA4&Wss_;n#tU#P08-m-ZMva-%7>g(<5>_)W3To%>JQ%^jFvz&pU0c?_~1!*1FMsrL1 z5hbY)N15PY_N_PG0*j7Mjw5B?bMHOiqW9i=4+SzO8xd_y-I{{J0#3dK&b73jM{EVG zB4o3hmwWOgXJ9&VD$Za5fwde=m5VxAyMJq{YuJ#??q$5-g3{>{Ox96tZP~bq`jZeD z_l?(H0~OED%x352-Fx@ls9`VQw>fhhhq}DR!P~Ur-h1z*ML5?X2{lDNzIfpx_1w2_ zAJjX0?i`K6a~)vyy#ohm3vieGzy9^FlM1aVPXXc3=tOff)xh;mq@ZBmop;iT7hie_ z*F?Da0XpLJi~QHr*H=_l{<}Z<6LNm`*=Lc|(I-PdrZq$TIau3mP zh4t8@k3yE_Q_a+*wY8Pf*%XSav#!oA*E<}Db?cs6!N33yO3cg84FZF&FwgM4R~u`rTTU0nlizisbrRuFd7Q*XZcI-9h6dVBNobo>&_2c4argtxVw zClv#M{BOJURu(U)fF>_H63o3c7#{R~Ar7}EC-L14YJy6P4+Asa=uncS7gb#v@LToE zwO5T!w3`qY_@QSct;4j4_2bX$YpKtwRjZg}h(MQMr$CRt`)CQN0T}904x_F)agW zsV<9^qagKs^xysg?(n+1FTtO0z5XgZzhnCjd`5rnbDv}72=@UrpEJOy597|6iop47 z#3v@hjfK3^r%yAd#d_tM4j*99nFy-6?0W3%Wm;!#u~z7byW!j2dmWb&CmCV!#&xzw z36baOFA0^eIF69q@^PsYdZo+N#1-P=5aI%_l;l$hPo-fx6;O}(xnMd!(SNt%GAy-z zDj`AhL^kW43|M3FR6@8uav(V%m4J8I*oGAs8Pa1gd!R_H!7>9O1tbQ(0+Ek2OCUOu z)`4e*vPhfwzA}S*@I$T^m4@}-EZLFSMd6DzaY6R2HYsOathKsw?bkU)Gy$e{xrxtxrUNt<*0wDOwb z-sk|B?t-jL$C%R46B-MI=ws;DRP*Xmx&fQeU?{t^uqZbiYH2x(&XBlhEXT)3fx$5l zGe$sCc`->F68202SBg75wqS`SxyYpYC)mXvTiY@VB6-C{1*>Xn*&Vue?OIf?!$Wum zo@Ga<&L)Y)IA?Qp?P~OLM~@ukpd*|g6&IK8y<;zDj(}sqSMu8&ow@fu0m7`z?2(}n z4(UNmT-(%CTUS?I-34MicjoN)@aVDQM^Vz|h4C9K1O?r|qI`3FJsb=+gGwYs+ytE> z)UH{x2Ej04h=8j*fPog2t&Hx@c-Ey%wg+BO~a6K?tawX(phW^M0uw zP=Ou*<b|e8GYDLFi81HC*ObX{jlQc zbEi3Km@|Ay%N~1rjY$AV$!Ibp%w~I5F;qL)(rW@yt%CejJM6;r0G3lYj3Ntc{wg}( z6bIi-PfuMk3yYzlK5P^2yyH$*YO)U<0>MyaX5slc?bVlq9yJ|S5--7rt5(-AIRK$y zX6i768B2D~%-kHDADxY!YCc6YR`h5KOIJiV-`dK2<(diqp$}(DVT?Feb_@#YLwk~! ztEWolN_~)w;qS(4dy-b%xYrOp1wHKBaiv*p^q3wC>XGs1f|I|HW=K9@Sv<7xqxIO-FRbUk?ZEolFn`96_fMPl#O&H zAZ^o}%ZG=AlcnYAln$1)E5*yvD{}Fz;THWZqAgdsJ*iDe)YdM_5zAW zx2ret8lHL`l6DT>T$*-#Tf9g+w*QEd{ry~i>FFzv2oOx2urilz)Gh<=h!%xy z#V-&!$6XeelmNH2q_S(&*42gckBYl z;gJ}8g{dS^`TqOw2biHJ0oNTldIW+z^`!K@C8Z_6=9bfE1nS;Dh!~1~7~sSsD1tx< zXHx_<;&f63O;8yZ`b@&BDk@9MN-@Ue9*D;K3^^5{7S~PqJsukwLl^~|)1<1(D)cir zog!vQQ3*BKxM3sl%gf7Y*P4bk4w7NN2_B%_&098eD(=zukIr;sb_{A3H|FxraX8-QCorp|KGx4MZofy`zH;YOJrvKkdopW(bSB zEaI=OsUh?JfdS}4Gl3SUi$%St9CxAUBOFptA~)oW>J<$hpciTofm$&=&?3lA|I4Tw zI?qf)Lx3jOL(a6bwU-;jO6KH4DPUdN4wKWNxRD0Fk_sMz8is_k!?pt)JvL_Q7^za0 z8ODczKon|eC3cVlRl{}_Jj{l1SZj6`1tB#NYx2P$oL0+#&G>;Ntdd|HJ|U>=Ni#Oq zi2WIx;e3t8j~zLs)!gdizLsPtT6($^<|@WE1_IeR@IM~onm;&*<`d7}tT)Zda#02QYE;#)D`*bvGA1ue9`6uL+ zU%$c-U{<837zpserp=of&O9P}7Ia{zdCZ?}3ocdiCcDI6>MRZo0KZ`nCP_V~IKFYD zhsh(e1N-2|IP{3oJ$szT97YU-?YrylFw1juoJc(nK_sDPam=<>oyZdpbL0wh2ZPzg zjGV$EDUu5pwj%kzuT0Y)b_vcZt?ozVW7N zY1g?@dc^(o_%bEjwbgiBQ9kPO2x9<%xXGVhI=zA1txDq7>cbzSq${2KL^3ax{Yi!; zZ&IIn_u`(*1YhT%w5j2hd$k&0zG|O9BQ9U?Z(k^#=dZ%T9GDqsw6DukBkkm$a>S){yZ)82j=TQZrsU{}2Pq-f^VUBA_D4~~Z(r3-<=(Us zro4~Ritjtp%JRRP4dh0Kk!~|jV){v;o2h5qJ5leylqbGhbG;MX@Br8mlWtH?m^TNl zPI9WQqvHh|@*vvtF?>EP%+KP_seluEbHl^hr#gT1=uzmld*@EFz#^MdkALvJ?{QiZ&8PB@Jo*S_ zadMO{uO}Ha`r6bZd%ub9&E$LO{hSR9X&FK5-AqTk3@d| zTi=47Fb@dxlFPolvzf5`m-GSxxgWqDFS#v~eS_@W6os zXsEQAQ!;-Ro$H(c2{p(^l^WjM+ziJZIdYVOrlu$J^76?LI+K=Vh{4`o`iS#;-MgPS z9UUF4EMUVAmEcj@hzg93hN9#)JUoOoJA4gt#fWqc@ZT~`CvMxijTX`AWKLGpzq7Lg zfMGueIaQd_DO#eI&0(B_1x9OXYC;8f z;`lL?Z>YH?=4<%aPRkXa(<$h)a#;td<+^MXXQACRU5pD$e$!=|Ws(Sp8x4yEjP}Vtr(OVs093Yn1)}IFt%u^B(}9igSYaA&*T=h@Xp!i?9c1Z@&l|w4Q4LN%r;j zV2#YFxu9aS!K|>fwYITJ#ZbkA)TK+^z*iywHXGNhVI}Z?|MNdHSM&`HGNve(dNMik z?e1j@V?Q{-4?K-yb~gGjw&2(NQJ^dTEiG*4rYVE@bJjg zjFxGfi6-Dyh*dK!-sWeS5Z-+CRTzxLBgWn44I44jzR;Hh^NRC@vOXccNvWrHm<9SzE*DH>f zy&+*i-n~V#8T)E&BgMQ;?j8#&E@8?D?^t}Zu4Uiui@afG<`BM#L!HFiifg=V_ez`0 zjmNkh)oieQ&{@3HFW265Vy32I!c6`7so(qMPv)Z)t+O{ZrCo;K`mZ?sQ!EHU)RQ7#!taI+eH;Ef<8+B^bi@*PuCzRt z(y}DObK@qEl!w>*_67&QtVxDIkC}5EnHi2nL!w z5<&^~#8z(CNFxCR0A%tODtn@0MO}j9S}=AipdIuiX*w$G8Ust z%=pDGe~zH_m1n+`Taa5+QGz3{8C>D8w~fS^@o-@T@vE@B1W&~B+L{;IwtE-G$wm43 z9Jl-OE3Y6szV!0Tq4>%n)0VX4|_vP-;a=@^kWX*w-3GgS#N-QiWv&fagOe-iMM?6H^S( zl49w8%gQULdHW^6-rV5m0Hv4L)X#@>5zA3uR-Ry!-asz$7Jw#k9I{<2vFXxB~-n(B1`u4ULT~ zF+Bg`i@XrpP(1oD0Or=j9E2l*RER!Vi_44BAjMI&ts4 zqy54KQ1p{eJq4J-WE%U{%2OwcqS1!6jWBOlS0{b_?*9E5tfXYKkh0J}(hpx16st$d zsw*SWC>y^4!Ee9$8hOG_IN{0(XXnLpSpvw;4GxYB&dkpg78SD*eJVNv7*qEP|H>&5 zV-6qTl@-O2{NSaMV)kQm{xJ3yXs4-LAWI<1U1%yJs6O(KQxa0o27(uKHu_O0~Km9R$0w9D}XXDHUqzgcIG_d5D9S+RJXMXkS z%Z%2qeeEmNbv1w9_?I9sj6~Q9d+7Kfb^@Qha5g_bvUS@wNF2ZyR$+di2e;?phaP`2 zFOomN(3+UM(0PHGAsEih3FTzX<06W+AssCynU=26yhkM|aXuE9qbKoh6W1Oe>cbIg z>OjsrqcgL>v$z%HegTV&QO4;558MZ5;`ohHMh5$tW3xlHrGkA2&U?IhM~ARx*-ew= zxUa0V1OOb$3$Zkbxi`6oWqzN5e|h+}W>tAnQE_e_@HwZUp_cKBrk4!D;e6JZ@R!cA z(U1Q1``Gocv7Wj)&H<9zJ;MUVQ+EV7?@WI@&Qy@WN|sC)4vO{w06+jqL_t(VE1d{H z$7$g-Ft-qxozI%bJtF%i!1ydy&~~k&l8P#l)O}-F4rwszz%QM2S}GfV6!Dyxj&sY= zo@XMfDE98FKt+(P7`L``OPGZV?1`9sV;rEE@CQtl$(~7u6(M*OqDe53)<;itkm#S**m>b{Pk~oc`n9soWJBp<~4Gw^5G%sKglZibsw+r_s zKHQ;Qkxx@(hD;3S{^=k8i7uKPodte;<@X*(6}ff$b^!3v!_BBtJ*h)FWU?be$xR=+ z62&Mu^{Jc4HRW?zDmU||hA2GoAwC~gaFL4%ngRloH`A>L4zt= z%2*6_?&eLK*qc`nDP)wolRP^VqMF!z*t!>Z*%^q*oqJlz3T~lKt_d~FdJhmz$W47%z=Xk$qkcWD6nC}1^_Cq$%wOY!v<1yU+Q6V=80p+f$U^2vN{m7w1=$}TB6$6{XEzHeM+!CbsgE}L? z5n>^ocUL zQ229QQxmG@_uo6f@=$bco-HMu77p~63vyCrqD)3_41Cq%keWn}u^6gqezMn>r7IfB zw8>fkbfN&-TeG^BMJVdbE{qqSe;&BYJeixHch{ZwVm$%#PfbiR6(}oX8uu+AK>s(!Ds}LUJCUPJjKGv}=v3>KDjuuh$-{nCp z_rg+U`e%<^&WU)cmC~xlv`Ds1tUI}yxWty7YboiCfNHg6;Y1O$2xhmwq*vd`RoyeX=3R+-~07q`*xI++Y+)d1HDt z*PF;)dNDCiA><%K;Hs;Q|EnWWk9Nbml5Kdh`Jpf}MC zL~#9v@S+>{!;(pyF+8qd!rdeN&#*gnEaWwj?i{OAc-4 zTY-y_T%GZYoIO1`h2|48#mb7xP(f(tjvY{Pd}JKRip-5z4<05aTU+tcwD-2XAi9CR zf#Iy->Z(f6lshV^Afnx~x9-`4mh#Ba!<5?F-;0}TUe#ExpFMY$I$*ww3JCEU)ZN|F zGd?wiY71Bx&dmdavjrACPG?t_HZq5EiI1^2iyiAXY+?sBD+mb82M-(oMdwBeknack zhX|}FD+l32hxyqBFdp?8ADckqB>UvdKbpq5-&S| z&!0a}OfrO1m_f)Bn{$>zHskj@EBpM}vzVvTUT6gfhp?ErlJ(HQ000>D1=t3J<69WE zqR#obdGsKeu+V^XjoyrXyo3W|2xq@EAJ@e=+`^`vJc04(dzrz+feZ1zo?iCRqjL`7 z?vF*4`Pc$>rSLH8Mv~>NqQ>(YO`dE|sP{-u?5V|5_+kS0Yw0(wHVm*d^ppK%bxzC$ z%ZjFktYPWf9@((qjzs7$-SQTl!%w0ZMc@{x&@BcDQR(V9G3{}kUzmd(I@>$gWw2%I z7B>2F_>orOh|ZLzQ?CPbx?-}QKP#)Lv55}q@9l@Bw5J`z;PP^O;Z#&q<>Z70div-V zmVPih4rYfU`SIG?I<|p#UAh#Vj$%YTGdqvZa8k*0TRe_ozYQ+>h9u5V6P}?}d66*W z5X#k?aX}?=(K>BU(S89>^41PvvnE)OPJMNayu`Cdnx#6{E19*Ze0DZ&;AgRvVV?yf zn&qXOg^<;TIm7h{-$sAxYvow}9vfPK3U@bryPnohTM|(7T&pdLaWzrgb2Zw#ppul^ zE^mdoXSOygKcyDUh~zzV&-vC1;j$Ou$wzb$yu!CG(JT3c9F&QDT%J_d-6V7U(9dM} zCwG&q?k88|&62K20riHPtsSelk&*~eva9!(O=wrl{pt@=(~6g=!KcrjORAh&!zB-H z{xAysuF>art-aUC=Eeflj1a-Ur@H zZXK<(d=mFAA>Rtn14(0iz`n?KAYOY3$@w&;f}Z$8lYkj@tLyP5#TLG)`N@t8+G|?F z8LikJ7Zf28<>rKuO+ociN~p$xa9#xEA6i5JCnzo>H>13?3|KofFbF8h59eZIssZ#=1 zXeK#|2>?7b)!Pl!3?XfExXaefn*qtkjvPhzj(UoMus23-EkX@lRJ3i|HnMu*m%pT} z^0G4W92*{?RujOyyu91*xC2af?tBZPZAWJ(uDOP-K4;IKp~MnkIg)P>h3f3ZcI}VF zr5Q+d{kru4%$#7Dor&z428&i!meX$o1A~BnWbvF(7m7s zb&*H`I&4BlN2EK&0S}nEth}7g!ju}{LO^;b^v>J+2L}hxI3e}3ToTF&v)h(BQ+e8A zuXX?nrlRvb7)Ii?C?^OVpemm@Cpj-jN&urkT)zi-qGgS6D05yOh`IHAE9Fj%jbdsJ z4u>c3c17FCkQ`^DQJ4ahIunVow-|jNJFW>?)7U`UIeP{LGps^=z}S#l`-$Z(N%$XZ zLrjVzCvg^LsO$@s4{cqJA=yUBha}{K`8pNAr#F!&Mu%8H!T%c2x@Tkr1u#7g-o?EZ zN@LbtsGIa$#?<<2JWml^(&F(z1$vi8lNZB_XMa*+Bx3Scp$rr6E|Jc~b*Vq0dsj?K z%~EdF7u3-;gLOC6nV$l{fH^H?F_;Y*F>k0jHqa6@uw;UTnUQclOBg^_XsRVVQps${ z_TOh^705?aKp1s?erjYqoE@xPRm=LtnKP$HMn_xDwV-jm_n!M;1HdPl2SadO&eZfw zPWD1B$3q9hYa5$j%Yz5s!_q+t-7JpRW#uY&-G)tsbNrRI3ftjKX8gQOf@98_Xabk+GKr%aukGs6O5JQ)X?(T{0UVv7P z3nR#jnfU#w{QWG{;Zte&XRlCWDvtvlZ!plg9Cy0QY--ruCaO$yxD6iCh-$(zr1dv0(53~_Cl9qEHlwplQn&H_oEDP8Ik1GQl! zpq$J&+Os?E*o{cm)zu9~+p=*R*y7}|XNN~dr47l=oWq?N(?1YTQVk}o$f9V#q|9-b zUKS~@b0_I|&zAkM!?C=ViOawxb@$Q{#XPtUBH}fI1j!ph9&|8#otj3>-MoH1PKmnP zI}!U1A3R9aI68>Ea2yMqm07xJ>sIt|Teoas_vy~9+tFn9-QR1sjFE9)Z}zo@LOZ!8V=GyA1=o;(b;%T2!%8H+nnqyM9O#H zdJDX|bJs46bvZ@_o97SCoB?=aicAh8IH{VRnr9nfUf%lk8!%Js?dc^?T+~9#zV04c z_skcc2Kc@G=9{RaQC0)bs@XhRT>Qu*kMa_J-#B zYVFvzowWc?KVqjYKEMFC8`iCd#;AGtE-ftq=;=sjP65TqZD!_lbh4zR6lYpc37h~F zp8?oo?mjt5CeJ+c3_X7M&> z`#=Bpi1p7t_Z;~hSu{ftQ1U+j|19Ei;4iKFTC&~H2=fj|9$E(gX8Og zftGXUW+taO$OveS^(n-8ntw&dnhAD}}6pTZ%M+@-`0&SvL~MNthx&mm;_ zjcc3e_q>oi_ky5EySAYbYS7Uv9L!8iM#m>~{szMgD`^?dimzqP;I71w5#r;y`nPGt8cYf}3jD?LGHnLXr_y6$s ztisS(W}EV|aty!MHLc^jvPws(ZQr>I9zJ*aG~@J+yY4P1DvauwrD>)?)~8rIqi)gB z@ti=$hV>i3$~`^3OixTrP!~ecGvIAVO}#{ay99|9WIbXbPH@K-$igj%FJn>r%k#zL zdh94;J?Qqdt5XSPC6T2im5ITTB8qqUctgR;wNO_!UC%GNj6cjI7AS6FGl60`R&$)g zPaYFr{G!YKR(n{irCcV<;&EJ zby7kdC%8EnURC@A-zJ~Bm|mX7h%RPortWEKh`V<&KQzLYN4ptvlL9v>@Y$t+4Pft$ zW3^0u=YDppov7K34}jGY^A&f%P(n~M5x3&Mn z-~BzMqt6sx#PT-CX+b!WfdYXb0xXKhvC+T%pML}GShoPoH#FAcT6T0|OsO!}ot-`S z{`&y(zQF;2-{+rrtfaJb^OmhNr?vI`@X+w!=n!D?kG}Z_fXwo$amV$2D8Zj(MO&rEGooR6e0ML=8&7g zzJ5giHFaxHv7(s=xc-0N{vT3aMWaCU0y{)%RHs&ryno;T(CG2UpF|Ia-=CaFVR30O z=Hl!+2Dm=|+;c2;a3*S5d0E4nMhwOKy1K#nKl{l~SsS_Q&b#2}v5`?{HOWH2;e&?& zYK$5YQAmT4jA;!x8I>TTi36{$9GO% zka~XiyZ?)FAARIe4y5_k@Bdr&VgAeaf4~UJi|E8)Cn_0_JKne3#6U>!x&5_C(}lRG z?%R!##d}zjAKDI}xK5z|l<%$5DfM(4pfP|Yj1!_*IfG_uIO<=0IRO~Fu>N-%Ez@uvxaliM2OkdM}qlm zX$G}&9@6QP&1}}Cm7F_0!_;Gd8V>L}A_Dbwwq`D6yGm zy1IK2b51Q&5XadJ5$qm~$+bKd$g?ag=yPFV+6$b>mRLhOk#%Hx?Y9I4)(;j%Oa+HP&$kUrZo`dz`$iu`UOf z3Nav=g9~xdQ%iBMIrZtXEN=$fq`*xI+@!#YQy??HTw1kjzr5G&(u{aZ$51~pb@JaX zUYE$_dhsXR-{?&qkY2}Lr8r7KvXDC$_Ajnk-vk!rkQlbT^>=nK7o(D58pe?iIY_^f zkujqsbbwPfJK`RE=uyI7d-)YvvC1`z)O37jW@=In>Lw!~i4+Z?DiX-X055|n8(G91 z9+?pc5k-Ef*{jhR6%qS*%%-e!wj}MFHr^RLYMluAP3Wp(OB3 zgYJ-q_}EJVv1af|h4v;4uFT5Iiy))L=H%}h_sT>MqwS<1v^};9ln^}SkTKir_-4;A z@Dkuneeiol#ZeQ{Aa)Fs^Uxr>sbj>)EY|HW9T^)#dRtRpPqo@ETto=QfEKZ_t`0NZ zAO|&J^my*f8Q`lUA(>DLNs#GlR<8zH^9YEAo=3pggwR=hVh1ww!`iJH&O?)*i89tm z$l+Czt%0fa4fOzQ)W~#YYild;56K=aHU}M%3jb9g=8>U6*eYoIVA+kV))hp;q1<(i z>)HQ|L{1uX(d;P({Xz#Lvb3EnK-AXP@w2RaX5iPjIsi_!lD#BkTEXKwX~4PWN=)I$#3V}0=}BFSFc`8 zqQ2f<=&)(?X7cASC-nBcT{_>mX~TMQfPgFzw46T=2bLC>z;+NpLvUu6qmpmkvx~GW z!~l>mE}&Zi=;bkb&to|TH$^(8R5## zY(vnj+8hNsWfWw~Wg4qN^si<^f^2@{P-f!i7q~t4T7)8VRY>EPz7E1mIa$nY9Huov z4jeDd_w)=nIcMGabwq4E*9vd2wS%!-UA>xd0Z$Siwxl;%m!bE;mh@&pNg?xIbasYq z6>LFQ&t+$`7ySMQ9)JgqpFF`#HQ291)KIh1Xgo)Y9=4FDttOhUbaJ@-%W=Hi6eb2( zW2>#qurR0g(sQw(7GpM>q@{pK>d&kWb5JGC)nrc2dAaZ*c~fVW(sWFJylUx&mhIz9RFVJ%`L3!u`_}m z$0}Pnn_d?e)S?D@VsVsdfHQ3=#B7%ok;fL(yEt->i=(Q|V8@KhNs5=wCbE%?zPk>wOy%sriNcj z{{KIFZyIdbaol&_eS3SqUeV|Vx&aUyu?Up7K%_)d)KF50(nQz_kEDqhg*_V1M}3)) z9pMRSJdPNJEqxk~95FJ-qQ?$9MqC`EDAFP+2oysj2^uE0PzIXR!e*erm z_n!NvQYW$;!&gs#BF&S(O#Xd85KM45DmVPnG7FMvl0Vyvnf-3yX{Y z;(z}?IA8OLC%=mHSSU^*A_SiwVf>}Xpg{C^+(SQLl9a@s5N{`n-zaLg;&}^LfW@ou z=l!wG*2@^cr4F4~F;{{PYGGZ+|H=tgk}g;xhz_Vy6C+3;E>zwrOKB#tRfy`ScL`az zLWa?!|2k|hMf|ZBDM)3-AJUZMQ7$%U5|)f)3M$0ntcEz&b342QFKcQTNdyEsnV{78 z&>^|AYZMIVU0_>ZFQaVZpGi#&dAHTUJ2E+G2j()gZ+&6eME0NzVVo@$xD$xZ4K)%-M4UQIFY+Td%YGx^?l=MaFMd zDhdRo7*U*Y$ikq&a@I|-T@Xs765^;B*FXSJfz(lf#kZ(@9C8ck0>)O%fh4XNkiGC12EX(yrsY3YAQ&k-HbpUH}7jW`szYhBPk#hSa3_xUNb~Zl6ALhGo1g;DjWp z7U>kKFkx#w33O>F@17T#E6Yo$noZ^aTHV*ry-pUC1#%JgdCMJ@1R7wCI|Bn2svwCf zTU|w^?_@YJ2B%U`*6QGKnlhqFQs21m0`k21@~zbx5GxkR^Yc2q%@q;3Qwf{qaGqn- z10ItXgM%MT+-EWgR@|`Sfcqz4Qt+FD+4GW(VwU%~xTXwzYq5YH4C>x7O6o zb1Fp_%Z$ZZqGes=&N0`#W$*yAcTdcKz&fU-xTjKjiz5JaU-n6%gYl(ZxpoyaE%~zR z(yBSfY+-qUuZ%B(Z;IT=pW%wmgj1Rz8A8;-@GbDUs9Yjj^~)lVv>F4K*OwO>2mz5P zEgDx?&{3+Cf%t zGZC3U8;2Zvn^d{Hy0peysoHH0>#9MUkQ;vRSk}r*mr=-%KPeL{zCD6l@jl#Ia=Hqg zLEuoWor|F6UE9V<0hTb{ccED<5^7 zuwE$MN+33fNSrt-V6W^&41;1x@54f?*u%q)A#XefXzqqo z_Yl&U!E~6uKK9%9+OYvLyy?r0blc5s!3nc+7hH3wueMxdaO&K5|AY@9T&v9Tw;8XTd!2WKm{N{nr%5z-XKPrIsj7VD3l6>NU0kYM&UQA z65@T9LTN=|haBm(LeuwStkSIRjXA5A5b+OW8^4EzM@ zCAJ$5C1RMDDJ;phYGt)17hemDOA-K@4HVtE{Rh&lQ6*#C^BT{QK4ImhE0@V#1xhCK z*pL%lpA^Uxf>jo54RbWb_FBrazOf1hPRAv_#i6FEJFNRD&Nu}FiV7LB$^dmAwHqVY zl=;wR?K3ZIjRPrE4-|pB)MiN%Y9O=_FtFK@JI=1irP^$Od0u{ZwMrEXlF<`r!7M&) zudJ@YN@n9o&G|8~kWJmFBxx{6(XCS0DvR4m#T*Fj1TjeMO;rm3o2XxX?F`s3Cqfeh z=tka@%eEWnoK_kzWE~5 zhIdptIp|}g#sX#f$rU9~dK-`(o^>4Mby`_Em&K*Ls;Qf(Yg0p)weDcc7i6u~j4Vx% z$tlg4hz1%wZ)M}Z`rW%1a!hU)J|ays**lXeNgVoet+42}7R#FU_}1xLj5*2MF+(f{EcGG z>>J{4&!&EpIiHUuQLEs|HVp?CV|u|`ly1uv2s%9bLcnjiSXx7gTxGW> zQ^!GKal_ucT*E>u-yR`DB^r&Ip-_&2M&Lkb8zF_hbf&H}j&RC@){hkFSU4Em+9{f16>Gr^F@+d}&)~$|`9DiD3AUqnCgbfsRXy z6r&4Kq<5M4rYGJrm?&Vvhlf3_OCU1Y#x5R+2cX_=Hrn{!;+g4wH56q<=}j!dO)8R( ztLwhBl<|Z2oQMLTE%0N5UJDc7$_ip)mnD&CHw-ffWcitCIIvo+fO(=+#FT)UgiP9I z!4r!#Js@=kMU$aTr+_lx$$Jy{WvyK*%dX3y$XY8_PC_$hsG#Vu&>9-rCbBa&f}e%! zkW)1A6#FN_D?VH?%1)JLz*ec%QCczVf~^jIa26%Da_ka!mI-s$J6NaE%Iw4)_f6!u zQI+_cHYZFg6yYd8ZQck_cOklfR-iFR)FSlL*ISA{7- zVud4YB-m^NGx3vBr&(IBQkWf}G&2Raun9m_mIVnEn7n~B*@v|Q&>$~!QlC^uOdpWe zRVDz5+2#`e!*>M29so_g|Imw#0)rn-6#FLrLL2R4CkiQ(rj(#34r59qOctN*bTe6H zS@$crE-EMtWfI5=Vf}=ZKpKSj*0ws)gdCv2gWS{@8WAy)7wt#jeB*R)tla?8=AP)& zNXBtxyq!9*pLo_C(VFB1jTSgrqSo2S&D+Vj8Dcbn0!~h};%!F5o9$8XcNy zi=&?FX};4mb2#~2rj?_+(b59eEJL5ctD}NSk*2LC#F8U%P{n(CC-TC%o!F=dU2;iz~~7S+oyE7F&Qur;_p|%4L`L8+J~c z5PKg*H2LTvN_S;W8Xh}~d=aiTtHw#^(;q<_C1)MCrtqC-17(K@jP<-(c2jrA)LYDl~-QHV9Wk878&i^H%mMY+xghF4`WMJv(e*;C!Rq3 zxc~n9**S%G60M)I%T(Vs-sah=aP_Kf$+_=7HsGkwQ*WSF#B6=D?T(n>b+O z#Xy{oXo|7{N1`@%C7mU~_+<0I1K?X8=n5?1mhNQ>?Pt^C zWa1mL$)rv3lTw?{u#Z`SO+J@KCPoBgEa}o|QQj(Z(C`x^*89nJj7O@SB5DCgPU%Dyz%oRlz7XpbI%v}nOwhW%?At^0^no3zrS`sJUslE%@?Fn1^@vjM~R`4Vu344IK zGx3x!vbX|kHd8a2b;+rhbgrn?wNy0*X>z}poMblF9eb891st_>qC$GKJ^kOzEz*mgb z*e5h?@Zk|_Gvs-B{BFevAH2V?0?-}71@p?E<@;6N4~uM2R3&*wDfWa`Vw1k1wo=!;*{|n?|8?-g9m=|H-CF#Vv5tpXa?R7dvA%B>o{3}_Q!wx$IQF^ z-tYb1(WAFEBJr+cYk-^zIprtFrS6zMLZ@v z@W2B&?IUbogHSr<{^)s)+W+@Z^-6tX1Eb=P*Ts#cl{UA+BKYbXP~N^olWG?_*qL?X+fBp@QG$Sxs`ggtmNu^?ATdcoYQFs~48 zFsfpAn`5-;>m@)!Til}kuzG?=Vq3?sc3oQKQvQgI?YdO_Z( z$izuPQv#(FOjI~WE%CZ*{>!}7WNa_I)EaaCdUfp@W(_JJuF84>slmDwFXcp+IJOP1tRSwCd7*rTf+aD9 zR%}x`M;QpQpY6jmXQSEQx(eYWgsL#q@vtvR^&EF%tfm+Ogjs|KcpPCAiIJzC0L>3y z9c6cN`msBPG;7dr-8+K4;TL?BOk`}Oe3PzZc~4#%W!ZTxJ;uAF`g8U z<-kfaqixqJbQLL07cv8+JrW6~6uV6}K4|X)Hh+qy{?nB}n5A;4N9bLqtoEJ=xPI*o zG-^Lat=*iSFliz>3>Rg0l=cyNoSY*%&&bi5yJ?e}Tj*WUXQ_yYBLs~XfdYQKy&2O@ z8R+J1@ehYvW5FgGjBFFgW=d02IKk3dArNSF3`>Y;=S*vgPy}(ZV60Hpvsy$(=?on> z?9<5sun6ld@XUAE5d=w_dec#Tl#UbmA`0cl52W@5*&c2o75!E&x=Dp;JS_QPK7gaV zy`!+V4rB9Ie9EFt(+AxBBPS!J7Jk)}#syuwhc*2Hj13vU^W=5pdHIB(AR_uhK`a%K z`~ssV=ehtxT{uX5Eb@kLAmiJc!~reEGRK)L2Kn6QKZl3N7hZS)rS$vXe+~up-~5|D zMgRQ#gAbyPvQY@d_3!@fYb?Ha<&{@30-rv8nzISmM8k1qzy9mLJ~J~zB-*dOg>DBQ z?Td?xD9&70u3Vv_(QjEnjdywufH-sJG)s!)Dl(BcZf-Ka^rbJM2G7qQKmi8f{{8zO zdgvi?Cn1*(3AeQ#+`Zp$HJev&5~s%5j5#poz;!tg>*oV({|oie3$>>u(~*o@46ZH) z?Shwq!oP7JF?NBx0k3X01^5jV$y7~z>ejOyv&tkrd+PG-c9l5?WH{rY%$yQhBp@*W zNaAFg-lQmEG+guF6bWsT6uDv_P`Q ziz26uUp)Y$vWF`~*>ea-uXg^07`-%kvx|Q0S%Y{`0tKX(kKp5Z={Z~)#(NfV5FWQx`HV4Sptg%sUl0#?zq`wVg5Sb$e1w&Gg>Bg8VcTug|I+K3l6RC_$f z9-3LcDkdYx(gqdmj~X(7(IDjVMxGREXN95b6T^ zU#~f}MV*6@6(_ZpnHWlg6A5WzEI$~FY zhYNevicS|>jJ|*v5)`jn^wE0@@w-8h9w-PlSOeYRc3prS(v71>TbN@NM;ycV-5^*Al^a--;AGr0vzalqP>8KP#-lApS0ypn)fUR21lvJImO)XM^_ z*?mSN8jAm8d#YqbVu|Q8B`M0O57- zIpX1#_GS=jTaXc#Om_*ZMHta`3%Tza4myfcV~~L!4+kn^4}oQU@}rPo!uJ(Ly@6j} z;Qa;?4x7YO(_w)rk*QCiUw0)(U$}ksEZ1+cr=CeQecssn)tE!`vK#{2ti~0u?!sVt zyt2n$3$U*~JjI(%tjWm0v-8C%Ltg(q5GiINPQ8;Rq*%+L8q`t>GtbNQvCUI4fVtG{ zR?q0GQTr2-%9a0KIw3GJ>0Y!l#poL>iW?%O%L&x)QVxZOC+DiZH6H9@DK!tSQ7MU@ z_>&)l-etX6>^UU1TzWuK^+V4ib<|4AOH^D6!Q`X#R<^LPR|9iy3SnK#py3cL&)4rd zMao>TP6gYAVZ4}!(H7pgzN-2{0oEcDXR6JDYZk(a2?{1nfZ>T^1j9Bg^c+O7CM=kS zQ0_oN1|(>@K>y8H4QA(nK5f}}mDbyaGs1g#;qpqd&~RZ#=3S#B^RUM|BJvLy6|2nq z&juH$uy`+*-+QS-Af9aVyYcgl#TQ;=KIr(d<8yO! z@3{9~x`dZr`Vk+84iYaGAAIn^+1c5{hmUa5_{%T9f~LB-xWqZ+sHuol=gytGa^*4> zT`avQy;yp`_r3422Y7yd?$Dt_ANj~HW6u4?H@=S2d-CK7+-+RBvVb2u#4{Sm?Ci|^ z{C*T;@Pm!v8x5J#`aNE3mmI>E8-Fnlk2x^rz%9T5x}NR({+}T2x4r_5q=FQZ%C>X) ztJkg;i=}(+x(nY$FTeU~y}>qE8G^B+(r->q6yU!dxnYag7?M+N@RbC?{wqWX*;f(p zn9MhkMIs?PhfxCJVxQ^$KrdENHwV6%0=2S-AJu~=tY=)Ffig86= z5Yy?I*_nJH4|)JlgVhv71Ck`Pv7}CR2|Kb#0;pxG{9J<5V4y}N!OndFDjhyxg13nVE}hLpY6k;?zVrqITn7Wu{sT89$=gXx8U`X!9=Z8h)9Zl zd+%>RVB3ni0eBq+sw)4sEAO^h&~S42=vD$%Uc)5?VgSD1`p|?z@ke?|%QgoPMkmmU3CnZ3ZQ_U=bo3jAoIf zum&3z&?k$^j!_A1SO>kN*v`-UuuES%z~x6viNqcI6=kOS)03msvecYttA6XJHN0V> z#|n+dK>;c^OXxQ}YY^bpV}r#g-d-xJA;W5;LL_+4#lwzgOS~7snzAxc;fx6QrQE#@ zYckia@MGlg+M`2DaES4JFF8O3HO=uS$IfHt{rR8&AT6BccJAEyzxu1s*DH0}{IO%l zKKzRxrs_Eo>FU+1mo8q!E!J=R#&57hnXUjs?i1$bDvN7*o7+W~zVpsI4jno;Jv{^b zpZ(eYjk^1*zxt~O4<3B{@t?)z)yF^nZ;3y1<~4nR>;&j`Pn}}9b^Fkv!)UqR`ObHV z`N9{zfU5i_fAS}X4am)xneG80pTZquc5MRIoyA?kPz7m7oa!2-TAT0 zxxp%c)t7+{P!)?0IO4f)eY+(ine_Tqw&nGf2<_$Eh9_I#JOVZ`?GiC71{CpdfN{L1 z-P&C@F+S`KC$#+~wz@fN`}bR8wPQ1*Y7 z3m=+wDr9fpHM4i>{-jt+IK~#5**7-_PW&#T`rdKuPSNW9kM#q-Pt_*W0%m{f{ew1i zY`Q$Hf7z}^(xvjP+E+=25F)?##DHIoPrXfis>QADo=dxJhi@s1J`cTA!ed$YdPS1B zD?!#^@*!I{uSLuB!`QiatAoBP+J>zM@?t}%oK=WQ z{@{aHVSl!C9F18@tA9o0r+hSYX^K-wHE7Uxaf|xVox{A*xML%t;3Kk>ICcr6T~WX~ z+9)z`J=UrAf)P9*y`ZX%q^jrfwZ|NQ$*8_mF>9Mymi+Y7PcJMipwMzZd-g0#l>gPA z{3|T6&prPfv-8hC_dH;)pE<+V@kf93M~4p|`p5tHcTsNZbsSqJ4;(mr@Ze!&68Z;p zW_pHFsW?47$#fDMfIsnxPoOYk-Q_LF`I~>2>=J%U zZ0GQ}wa01WG!mp5_p>UeTnLx0guBL>_M_tSbPG=Kkqwn4M$^VkMrxI)Gf zn&YC_^NkK}RoHgPf%3^=u*`$pr2MKu5u?Sb#9+-MbsGtfCp$dMdIS5wNoMQ`Eikaw zqT=0(E&bhvgw3zazj_qeudgV^e&b(|f6Ewk(K_8nz4?C*{g`o^g^3hP4*a0i`zSC3 zvD7*uifn|dNWAiivz=O+;z>n+C?x7bxN|wNno5WweP6Dr*?pMaTkCx^p{Kl^l~%g& z&03?3W44@-=E(`w)KXiP=4MQ#;Xi(%QG=x!M?0v-{lKiImpwz4k%K# z_PG*^q42M!tGs-1kHQYSwwT&YV=Zx7stSOubi<9Udw|7fh!eW#UDx@-= z`aGd{z~w*Qg;QoC1C>Uu(_@@b%M!fTm!%!wZa4>EvOAZWoR~!2{l?e7!J;{|Q%>od z-#^c6*L&alzPY*CyYIe-hX4B6Gq~|Pcwj$C&YY3=W)?Oxk%!7kH9i0Qb6A7R<&$Ww z`}fbUtStY_fBDB3E}Um+G&PA2EnuE}@=0a@Kk$JM5Wal*(#A&R^5rWmpZ?g#{%7W) zE?hXr`Ac(V2Eg?+%Pybb5VSoE@$pt?ao_>hi^D%#t6q87<1rl$bq+n0_+1d zwI|^W$5E)P7#_+*+u=i6UM!hHlZo`Bnr@U5$VhF&vASAG4>q{F7@@n?F>~P=M)H7< z=N2JgC5?m-Mf$L=5bKp0#uE)4JYxv~lTe5OMXTo6k;}z|KGC9+u*3!qpC>4cWMp|c zMvll7h~W4kU;dc_sYggKk;A1jzZ;+@AX`CssVzP%Hg**{C|Z`EBou>I0t4NABeU4M zke5Zp!tq2le#Ij~n8OAwWZA`OaL&hbaZ21lP8^fR$74Jk;J3W+_-#@tYG85umZW{Q z5DE-+A#fYe?W3scT`p%+oVLJ|UDEI>sx0Vtg=BZ|*xTLrh{gadsAjHKr`qSw12G_P z7Bs^hE-QPyblbq~n0Oo5c*(bY{o_Y^I~)=Z%8`AbEFFPAEh!uN*p)hMW%p?;`*>J7 zOf>r|bQgrW0bSOvqHI;OzQ`oh@z(ZliFUq)bOxY&w)qm{HDc|@`a)DI5o9L}`;;OI zyzIB?Mb&9|?_`Z2R9YXAy;E-ee}>t%fe>$3ytN1A7I<%9!6M2rWCE2IsBY2jo{MG4 zEg&Hw4-nJ)Bbk-mZlZ)M5XcYkyfB=?uN6AspMTc|ZFW>tPFbqW{||h682u8>2Oi?uv~Sz8LdVksU{p@Wgtf+u$xylTkFu3SYH|F>{6c& zJSw_!piD$)dO|L>*d!Syd*L@(+nC`6 z{LG<)hwi@nZsNc4l`pTZtmHBroYrMyFt*-jp7|ys1ez*De(h^t!&dzM_rD)!S9ra` z2^RYB+S;o5vdXY$7)M#hjvWQ(>#v{1EPVFt8J1nJ78-9`FTeaUcU(rZ5Za`*B-?|b z0j=9jzC9+mx(gCw!uZ>JHx7(BFy_Fm!+|hf-DCvc@(Qp?Pe=;ZMVdgVb!g1B>)cv4 zvRDD7R0J`{Z8E9_rIgsp<|+-#t^k9FL0Oa4wg8V*c8Eo&HQ^AbWyjbZJ%!iSN!y~G zXtbAXL#)IXTsvsAS1Pu05f^Nsj6afXM5iwgRtl*#%7|lUffTeZq4K3c_9(21wYw=H z1Vy1iL#yDGOLPg^sL@aKppd0fB$r|H;J|$#zMrpC>g95jmI~;IS8*(mBdIkS%LZtO z()Hjy$GBqOd$n!A;cbK7*7we(t??$`4n#-94Mgf8w4g2VyGFRMxGM-RC|}QxNd%j{3y{Ljel?j} z@PMrru0_Ne1E5_%0#C^WVH#ikJT!3;VJou3Vq-cyo5j@E0WutknO+RPFc&MCd{vQF z4CHWn!v`F=V3Qx|WaqD;&XO;kqEQ&&M5r=wdhrHfi=Ro%T5ewSx)iGqD~;6+@HXZd z7NzC#9r>ZX`Pb`hZ>O+-t(KNi0Vp3$M7Gcw)_7V`8C_0TNHF*!0ttBhF-jVhqX%RG zYem-X2II$1KMn`j*-LV23LEUZ-}7#au3Riy&Sd{TYV7{|9^m|5HsW5pwy?akbnV); z!-tNr_4nk-6EwTir%$tQ;P~-7*eJmAY20WXIdT{mR+xxUaq%pT;kQuWR(kZ&NAc}^ zoLXF5ch(sa(_~}X4}bVWmO9fnP{kQ3*a?mrHci;}d0ETx+V{T5 zM`VxramqeU`_|*YsI6j0>F%w^nx908qAuM>pNIm!XpLL+IzE6z@i)P*dc!@we0cLr z;^7;Uty@t{X5m|a{}^L5Y;(je_f}JbH7j}O^IPW7pH9~@MpU3O6h>?X(y58WeG^B_ z9+H;L7P3XTWDi1i4+$)pixdhX-`Ju-FDL#LiPNN}#4f3_O&x2*-apxUC8|nfkWgbz zVlffP5sS4FRAOLQzwDUE4LOLi*jo~NbWB#qiB}YB^eF=YMf#)BYd3#w@|6e{vM7b% zO$_w~kj@`L1i%Uy%gsT^@#Cj3{mpisLC@)0F-RdG>cCsACgN8X@|1Mlh)*f9VNy|O125X@*U5wgz_>Pp;5O6bW@%CU7F%Srh6Bz+T6q6b^ zggkXP=*U2T(5_%kYqxdJO}Xr*ygK_AcZI?OQGjN(?k3%}Gra9HV6!i;^fIM@Bt`l}N`fe>GY`$#U5Q0Z2tl29MB3TJ;kix8x6-jpk zv`S(=xd$SWfHOcs{%fgp3s*ljiW&d*Ind)yFVKH?-4G|8;a@=Qhb7Ppi;GvUT>0}q z|8tHnI(_=p+1a`E_42iAS2^hD>eVZ+ojHSw`}@EDzZ^SuoL#=4K7aoFT6yi+XTE*u z(xs=r^$f>Oa*8h&;8Ul5fGziZkN+%A@1Ohr^E6BpTAX9O_r34o7^H_EegsAO;~)Px zce4QJf9~f$fKt7r#nN4lR^l+>4}IuED9o6Yi9rI1S0+2Qc-V`V zYDfUcnF@+mA~0lGaxC2HR_iQHL~t(L``)08&M{QMR*s8_{FBAPG+2tbJn3|6Rr#PUPC^%lWaR17E42;MP8LeQNXzCR z;Hq40mB<(~j4zTzAmfcMlQzXtCrqM%;RsagtR-0EmWC*Y595QcasaGAQ@=JxJ4^vc zs5A;qJkuIXYQu?@6ek9lcxoc1u>+HpO5}qLAY56gpezWKDV$kec+wHhu5uTzI0ym7 z9%rx6E}RTt46%|Y0o7%610(0!nB)-(9fn%7G6G0hOazpYFY!%67x;w{)xxm6q1!M? zhk=P@ZnYD8zE02zcO94?=k-uJ=0FCcmDk+X4y51aA%@a)pKU;Pj2e|eqwLZ32C4gS z7v%srR+{T3qbrgVCMBUy(7YBOBo3eXL=|KbPFJ0y*TSW>5?pbbEIgprI|X+4FEL6z z#BUt)PDP28P+uCJ1S{*HRuAL70D8L7k2a_GrWSf{(A!f14$sPTF1~2ckXUi9e!&Ae z)uK8}6epFtofAPV_5c%AV2VVi z4}deDli%q^RTG`q;-I0M$P-qtn@kiCb7r(+euSniZ-R0|K14Y>0)JjO|)x^)^Ut6f@*(8Q`UpMrPo&c?Kd_ch8+v zTpe44uTYfx?%}qNZw@rXJrFtsHXru!Z*M5EN-suBeqmR z*QVx=-*F;eoT$|s%PXs=Ui=Z?W3$yk0cI^8&HnW1)9AeqKJ?B^E(&iz+EBf`##J`(O$p^muP48~_F!k^|L5tt;(bXQjviOx>t(l|e1%AS9c4RwkL7+oLl*6KtRCa1_7U!o@TY0kbh zSp>sIWkb3r-n-Vll-)CynT)9LV?vkC@y>!KpNqH-jq zy5^4QOuitQ)9Z+Flon#@O%A2#=cSv0l&&``&A8rZq5!AZZJSIL&Bs33)63D7d2kmT}KBv&?dv^$<{ zvHK_T1tv`sg`(E#a{!*yQ|W@5>O)J6w&c*6CTxvTqN@`MSS?L?Q%tG?M)wT)Izq`U z)pDz)?ZlH4iBhqVN@@_UfNA>(6+Snh`iU1IpK1!xN4luwe z-V|d_d?McSvaARz72}a$Y#O4Z`jvi0>9lkoI4YZqkx>`?QB{D%?7*fG3rNh8EE&bWQ{W!|)zxe0>oFghe_gA04dgbcV-*^f;?H~NXAHe+o=imLi@_PBPM<1Kt zzn>!l3QX#hba+@kr^$U10<*TdRxA{G#Lj%`)Twjl&wb}R-$9W0!~g9M@OSmoKlRgi zhdz7$?8OTg!O17dluDL0Z#h!4Z9wfuzVrt#(X6KOV-$N3;rMCHfiVYuTn=pMjp^_Q zaMC+tv|w(U9$$*Wrq=_o_RvdCV9!7Hy;gv?7Vk#Jh*gq>B%8o0#(N_CC?gHK$P$vc zs1c2&!37lH5*8GnG1~&}m=&kNTOtH6Iwr0#WE0oLRKP4N${^-jmQo{ZwYA*Qj^98B z#J0>NR7ON_RHLKV8SID$d0== z0NFGgmI#+0l^@MXvJ$J02xEO#`!bQv1OnobBD)#GA4!9X(VUsY5@84#7&Z?}Oa-Z# z4@4Aj0HQBjhL)oN>Xk9k&`=_VF7^(wkm+G&h4Xm?Q&Ot@h@ROT`+rWIdLBm?tb)R< ztyv3u#htuVcq=1umYbD3P$(+L*O&ui4%|c>ps$HhV|{=<$7AUsQ2ex$L;Z&m=vW}> zcU;!tX(o|)rXTgzb^<#pL$CF|inpG@X3|in)yKB9h=gP$r@JZ;W^$05c3&Ghbz5fk z<-j?x+cI6&=16VB;;nv#KQODS)^F?@e4-~O_hiz{*aFu@AB8pB`cT`ftE|9;DFpq#b+kSVuvvgoXe|MwjVB-nrBH`WsTtome5R5})KZDM zqzE4oL~TkIGe9+{7*{P-NX%Lqamp%obG-_rBHCSK5vxC8Q=DSBj57-G=u52i zu*+r1#M8IqB`%IwZe)X2rBeCY*S~i5?77QVE}@Rze*5i5ZaXqjoUB#qKl;&&@bZ;c zSrk2s6Rcb|f8pWwn=TLhG7=^$8|2x>S)p?jyJmzDG*Md;BhQ1W9W2$6&;m^?o}fAHYJ$KUt(#Kc6ku9G(PDwQe~ zit8I2c!^X|FiLb-!)K{@4S*2=F8-X3K$X9>`}j8Iz?cI!4+r>+{ZrMaAAPluXCJur z3*I--=a{~Wp;2GH0r=Ogo=Y&o)7J81IySxcenHkk!=Ps=T2eacaN1fsg95DH&a|#n zHpAj%3EzNoM3B*-9?GUTSw2kmbhA#QDX_S$GJIlYpvV#lq0wad>a8wTDys)>n)m)L zJApMONH1^Ov}O`-4(bSTVwJAZy;BIxwe+y`nVEDOdoNi~76{UA6)4vzz(x@M>n$0u z%Nh)H(=7S6H9lQd($jTX$tf8ynjgq!Yw1)qmE1@sSu&&?qsv2)0;wX|q^dYbwx)6u zCn)EFE6>b35<{-sjd@`s4+SJj-mLYS|6HKq;z0&wi_~0&UIHssA1;WXg56oAOPD(V zuGWYzf)x!KU5Gc7Zf6cluSIOQTGnQGCYgCzk6y%neawoF6tS0YqagLIDj(&dxuKV? zZ>&H2%(E9SUM!X-W@lzko;=C?b-htvuaujO7J=7JzqbFt{<(d#R09hTRHdxB&!iuD z_)+!%fAd?~#P$*_u zGgq&F|G6LF6Z>%DpQkR%$Ti z%4!!m^qUfr8e?H9F{vE!sf-Snw@FzjXtO=1Ta>S}B<6ND98(qS0%qfo@E9em zfa5_YCx=Xw77TGETmu;-+fsRrKpNAfCo>9i_f{u_UKY|?g{fRz7FJ+eHPcOTXJ$m@)Kl!J>-)c5bp1hl#y6CsnBemc9hrh|& zyH1|u0AW8v_+{nL_jmnvqPA5{W{B&VzdgkQuW1M~W!RkHXCat(y@~bI(>gFhZB%jS9`;{bp##GPr(+!F5H^AzcN3iEtF)P zx*}nz3GsN4GWS}E0(0?{LaXr_b?~He60KOLEY3*wkkDv65!WcG1X1m>OC=gAYeZT!L)KflU)rlln&dgYXw)Fz6c>&pEv1oLYyR`G9T zLa7KrNWvJ7708N4hN$}pFfuQb-t}Z7%x)4$O+6>QMCI`{=D?T(Hwy=(W`&CnSWomM ziVF`sDjb0jRv)FV0+mT0G?!Fev?M)9tD+z9yLu-k$9RwjD_$q1cB0~vfJMkkO@D}l zoWbideRV2WTMQ`&AL;j)nb6SFq=;Y`gXpF_9 zedu8xr)?$ zTAn8-w2ECEM1P*N$!Cb8*c45;^`8-djNN~i)*=z-*6^maB7+r8B=J>UVhevZ1dvc@ z;-zq!mBP?lV0;^f1F(?|x`llHeeZi8HER`~D&(}4ATymQO_qM;mw(0LRm*C<$>ja_ z-mkYgP0$=XaFFUac<>M~Yz?D{=u9KlWi%S#{Kzl;5|xG@b>Ow$jjzVqHrsoljdOqJ z=Jug-la^Q9*#HbA^Xyv05vyNUebxRX$Y@49{&tvRj$y_e7;|9Ef!#T9iz~pXWPWZ6 zCnv1AWr$o_S)xm(bEmK5qI<1ZEA+w#_8+8=o|&5gW^rM$!2tkQu3(BxRGPU${=uJn z7k4a~%vR$4AB}N&ae=~Pd1I+H*0_W!C#cSHcn@?8TwNo$ukWQPU z@R$d^>%qJ08?_6szFMuUJ^S5fCa0$-W=jnFwb~jBi_+MN84>c+=$5lb4nWoUrAv)! zz16PbG$m7<$mVnShma2m`ui9a~?100P`O-;zhXsLvHdG*R=ay)X|Z43yD z3s;dUaybs{V5FGj?Z)~#m=7H~MDdrFms<5!cL8xC$*J^Uz;iW&(b{U65v3{p70X6m zj51y|5pg6(z`F3T`Sz(`J#VO-;uS|GV(a(VvzkpjBZt9N!eaP(xqF%f4Ve*7@zz?cI!69@R} z!^g^ZPAK~3E!H~$DKH(WwWu_%Fr#W3G;#P)AgE|MZO4$~7u5(2R^I37;HD?(bvv14 zwva#m@B^jk>67=}U6`2MciY{mOtvkD2imeD{|S*I25TbUX_%`heRJSYTKLd7#kNHVu$kQ|ZXba}iLU)Et#X}ZyLIm;Cg z%ZfKlyb^D&?zIybI^EVPOi^RHhqU$s2CUYQo6#Hs&W%w2Q@LybEA-UV6qY@_C2^lDPGnN48V4i(?zXk=+bb2ssg6xmYd!?!2Wr`*Z`7*x#$f0u%qY z2@^TKhUWk^TPm@A04|H4R#8l~s6o$6&v5tl#>Yt*#g#i>8Fz^&QhKG(Iy|2n;k2o^ z_=2XI*kDY|L~ep`d2N+&W_pGu>NUuoVUTNTK9MMviptt*IJ9tLBYG@2zKuCB=D?T( zd%}TRTLES)%$8VmmcQ$+yYYHbetMA}`M}|W^uonbfqwb)ORq3^AHVBPPOaczcPzEi z?{K$L$g(MSVs;vf!Q}ibYk1by*Vs>X^p4}G$K{Pxlwl0KEX%p)p8K#TY*f}+!&Ygq ztSvn~KLgIv>?9p}D}$%xPQBe=)oyXBl+I>SlLc15RcmGJ0SqD=`B|cjjKZ?$ ze0pkjDhJgwrP@Yy{nC{NRu5<@WZ!ZBeZ=D?ij@2I&okZ}Sv$hgVq^;_MCnCoU%GsS zq3O1xhw+(MoGM}{URz#eXU>U}CmCH{eBnjX-hSdZ_vP|xr_P~I-C{2P=%YV{6N_v< z%VO+rKJ^UaQ@2$ID~I@TM|~x)`o;zXmu58=yHQ@xrZQ`5thGxVI0!#;&p!L?+S*!W zqYQ^JTvKW^YL$?G_7nYTc@-DdXa3nVFEb0srMA`0U;#&l@o_gK6`-UWmvjP@i915R zrAx`bnNxek-JMQDBN7worU8yS9|g?z{a+zEryH&f~b8J#_qbrVF#B63~k;zD8$* z#g*Qk)s@_C&yIrSjWbyXkm5=4G>6pVw|-+#8qX}^@IJA zXqUumR}Wc^}xK9n40KQZnyiQ8oSz%neuG^YlL$P5t_!@Pdk zYUl)ho{dD^e91RuFlAiJo`YpOxL*`S+t9uxF4E<*D1LG6<;e@6ctlC+xr-$53(e*k%)n>SB%V z_?~<2M1*?v)t8uHFH9C$#(eMn_c0~^z30ADuh%v<)|s6y&0wv~7A8ySOe#B>L)p7_ z^$O0P<;b70eyWh{G&<`Igs-$F!L@!){-#lqnfzw`Gqa)jbaAq9X!dYzz4FSpzuTxw z{y?xee)2fGVpi6c!O0RnJgFQxdRw#6*r?VJIF8?OtXXe7|Fv&1gzP_ffIT$1i2@}m zudX7g+;z`Mq{xNk1=b+Xqde=Vp-zjvbnRrikh}ZtyQZbAxB**`SArY9<=J*5v{o{04)?=tb|9fkZ>%UVks1Yshl^Gv>hC zjRSA=10Wrru~b$r?)EVU<|%Ai8=^Bkrse?!Bb5vjpHwn5D&6UY38pY2N)k5J*A&GD ziIBNVd3xz$zK|;xZol{5shOE~KJt)G5XGBRt99k##mai+weOv&Rcht+byt8H1=?&> zp@YIbap+R$q_ovV3x*-Z%PUddyPRH>m!n@ESH+}IsTZ^2$|@;J0aaYT&}NUdjWfys z7~3<<-V!~Aq^1TKB>;G4;+we0KYJ@(oS>@{%2>&PX8$um9YM#D#3kKz%7BU!!3fGx z3A5tqphc}BxjbKC6T%2WZ*);eAYnLn{*+6KCrgw0 zQeoqvdy5mL%Hc!!yht5Qp%T}M9O0CnWra7JgOXYxG{F>ya@Ls)EF1z2IVnQq89_D! zpsdV!8NdpQTD|2@aM9({1e+qGmjjT!$hUL=-o)86R9Suh5+;41y(MqKp+#Q8rJCc@ zG)QyK;qZu6dTSFp?n8u6l2^^9?7FNtmrYnmbZsqy z=zXZYfQYkUMg0bU122B^l<&0y?8WuFk6GTY?NoAy;qC5V zAvsDGN-54&=$~~e19F0nFv38IKG&cx?xJ?Gz>dl1TxMc=0%7dp*|V)$y}7WCMfC2w zPZTF7aFm5zbh*6D;C=kWaq8(i-=14vUq?ja0O4zki`ZSi_w}bX%4J+UBZ}Ssp`XT$ z^YZF43NQ`~nfQGDl~)jpj@^Eo{#{yeF5Ad7QF`mX0~zU$jvk9Js5e+bTzT%f=g^-Y zc;J3c=8!U}om!lmTVGvW0p{CJKaE;@`1Yd+7I&Vw3*N21{#r-N;8?Y63&^_NYQ4%) zLQ6}F)%A_FOIKL5eBs>r>ABgD{@O=TW&irG|LfYyN_BMwmsZ(yv0mT!+-E<>5LC4# zg5{MJO8U-s{mjhl>?4mp0<}v^t5|3;TubCgCb18Hoh8lf_6t9HY5v;6v7^V>@bka^ zvwy~+1%LW~{VC3z*UM`dJ)-$wgf?}1)@zCqTN?UD7dGXDAJ?N0fKlA_ho zc2U`W(T2L(8H)nOvS&FaL_nu$f~iI%y@w5k*A53K1?VUhu?nD?bTx(o5n%>D##4E|=vd(r6}BHImM$(p>=I>6rCxaUdrYt%zUyRh zYVyQG_m(CnkKTEV{{QHa+prAJPIU1nf{L&0nbivOk$Q+JO%JlPc zeKnptv-ZHd6_<8Pm>GQTo(qBi;T}B5H`dF<;B=ZALqbEL&dCL7fcM-9z*(z9=+;-2Rsi$9tiE&$B(?jfj<>gH3p1o#3W7 zdffUp-eGM?V3YnNvKPL$2Y3x%$~I)}-DMvHX#EXb!eJ5dEWm>AK=!Fts}*Dvdyh)I z!9jw!7S!OrR$s4HKlQ0kqUb*Q*rP{pzwM{r^)7(F@}(~eAAYIihM~?{xq}A|pfZ2v zGoQxFdF|}$tlT(LAv&bnC4IfAscQxy8ay$1!7`IGQ}vp7NLJ|BjMUAw zN@IOP13DXsnPFubwN}+%9&sU=VA&qqr{p*>hvq8@gJC9*bR>A$7Q`t@0mux@wG)<{ zVvK6Ax`>r*(>biED{E_+YPR02;Y2hsGl>Lo?(+G$dga~kc{kLqTw7dTSnO6bz_1Dl z4^#_F3t(*APZ@zbZzyvBIOiF}4UiHF7y{lYKs_Q}8f+j67W~L{nW|)%u z)Tckay0EzN{L6TgZ>^N+SG#FM?G%e~l%xL4&S@={2a!rFlzENvYylU?U zLW`kyW_`5zW2V@S20&*1tgI?y#}s4j+$ArIl`Rt=i+1L)(!c?G>jx4=VZrlC0IV2> z7t)KvWgWi4Ass1w0ke^%ncfJ}e`5-8FOfjRQ&2DfDWm>Z5TUhv+{$N&6psfkZ4BfUvw}&*!~(!s?!6XT5dldoN(Pe*NViWlDvE_r7C#-|PoI{6QQDUt7=P zD(kk%SvDTc5MpmIhY8|9g9Xu=dN60-Zt`YIgw;b0c6^KDeLUOF$3tCSx0UAVAFrS`Q~@)tL9Nxc2XOCOJ6>2mLt ztDV>wdNCf@I(R#bQ@%Sq^CKVu0~d0ThkN)PgFgm7c!TRfj2?)WZuHdGPvNz*JKWZC z?G7J*J8}ib6W;{kc-e;`XBd7CgXbp&bIa2|;uq)j+pA?YR~u?9!02f!LD918(o3%x zgYnLLOHH}X=&+&B-vV>PBGd=%<>dwNJ7rhzy=!(31IX@R0S7kGjisezw>dj8&48Ra zG?#3(@8-z$sVN+FRMyusg-oiGnx2}XAAII7pTN)ldp`2PbS``1#0iwi^2!>!a4`iV zV!Zb4AK>0;^2mO2?qXHIC$g-$sYa#ItkpHxGV0{BtyJpL#Y_2#;+^?Bz`V9xW?RcI z{>n#b0W5s3Y*cWii4-?EGdnps#nd)4)KiC#CMTxXYwNTD^kSw%WGl$!5AQ#O88tsK z)9R$yfy?4;TVcde6Ghx_0>~=m3EV|=I%wwL&!^dN%-Ky%T$4O_{{y)~;l&qzND-22 z6-LUFx1TIbl)n1pSCLFV{E?5axcV!f`pb>gb=DiP9_bf<=_6Cq)BK^Ge&*AkSzq7K z;Yh4GTr=?~lU`d}`HN5dITeIYEreS%e4T~o>TGmv`4&2bvU-ccD z0W22N`TV{U$EWA!{@zFa8+x2dtF^eY_L)!o$Muz!jjPLD_FpV5vx}EAkwBVvT?dcQ zkYF8#E2284S8A|&68#^%c2bILGBN_~bw5h4@tBAnst_aEgmyqCo$(5cZ$g z87pdIG5vRhK*K9A%K4D^r)Mvvy$FP<=iCVeYmSW=>sZa|3vVnF&At-i9!u-NfjBP< ztCW<=bzjSz2VNE0xXI=aLKYBpIt%N~Y~_6WN6CEd%(*iYGt)o&b01*XDbKGLbGf6l z`|+dIEpRrJJcGl(bhCwK&LBu5umf;dFr8PK%(=D?6&iUpNuaw3(9|*kaalhW)eG3u zTmI(lQLK0qirN!xZ%AHSDOSHQzQ!DgI528^D3ommd()-oQe02`|ss6z3J&`d_&!R*WFlLFP=Szi)1XQ zYDyS-o2`wt3hr8J8!V#htS_w~&s8fml+1hXyAR84HkHNV4gOlSF}rV`l}Nn8{CfJ- zkAQsS-9L@jtf~F`u#Z%()X+b16|B@&lSMx@IZvRbP7frIn>+jLJzJ(;->KCZXj>20qxTbIcX&FhU+ew2^;Q z?7+~*UnHjb_oCI@NU8qys6DvEYAvJp1=!Qx-lC6nZ*v)AA9LWX#Q}Y}K0t*pNDt9} zY=%u0&EeOk*E~ik;TxSS5ip8Q zTG@tIYy`Gw`tBG!!N39wX^peNdyW?8i=Pz?n8FVcrhWE`8`x@z+}Ic~f)q}RS#mi| zK+BdBIun`YM%d>wsdBwqD=wZ&u}EsV^X_+Xd@Qw8$mKeTsXXT?a25hDUz(%^=wvFt+zGXvR@KMMgHO1a?Zd7VU zDXCybrQScb5poHwb%YcnfyTeVkrECKJSvBVM(lti@@G_qaP;;wVv140_qx0z;vW45ZK2-{@cCD3rW0*jrrzW}IxbEA@p7*R=cS@NE)}8myA5U%qe= zXM?E>Cdtf!efzQf?w>Y6vIm$+cDkmrm$=sBnm1sZNcx(Cw)L9xjvRrDeP{`{elI)g^4j?P`rZ$h8Vb z@^)9QE}?TCJ#-uUaxb30Q0vxMus2bfxa;@{c1fWwvY7eE!P}-w8_U-g`1046%bE|z z&{1!eSIUiAb9Hf%nDW9ZZ&w$VISJ|Lu@fl3<>ggyE-x&hmQKt`;jgY&Ff3m@{Ti+8 z=xxXFN1dOZ<{07T>N0DQmzU*O3%?|61J=@H)?G_3MHU6IwO1@NMGi2aq3YyFmSbbJ zohY(ZnYsHcP*-rGy|nc5OE2I?3x`&y&^oO{o*}iwkxWr~QT+Kcm(NV|2pPol1!i%% zt$83s7t?$7LjO%PR=Wj}{~;xV%VX?U@gC!kH~hY*$m0dM;gpXNjydoX;ecc^`-=%@ zbRzuIpSlzJ3n)X^rHhfZ4?R^oUD@(0om46ve<-KKVf)P_r-~WQ?>%wH?EJoWKK3rA z%f9`sZ>}sXKKJC;>-b(OS5d1H4c3ofFUFw`9dQf9OtR65$dYX2I4j6Xol)pBl>a6c ziLmH$h1s9LwcXXF<0qG`uT+lhu0cH8B(y{x4;#?1U1#2mE8?v|2BM|vM~bYX%q~hm zHt=}*C@pbh!K-b^P!GJ_WpYY*F$ke2@1C6@s$0dV7Fjg}VeEF+yyphz9iR>4m3#fg zmE|JqulDbonww>S;PBa0y2FT)OQ#6s%rCSK6^0lL`x-J-5XKD4TKH{+fcVrSHc-`% z=)KuBFj$yfL2s>>qZMqYdf%zcYCd~=jYj|Iw2W4OQTd}byO-DAV%PV(m(=T%-s2Jk zfpOSUj7-mnz3|N7_n(zQnyo8qnq32i;T(rkUwz{5u%}K$a@rR#Yk2~nMKTCw=lws>@l5I z=jzpKS1(_A`T6g&`}f!X{yzZQ=l=4u<+U|9Lw2MfMj|Y``>==G{%2@oF*ye^Pud@9 zG!hSxT$qH}nT#)M{`e$-7xDZ@J%%Xjg8@`Yi0@tAH^*aouf~Bf2gV%uNpK)Oi234Y zK4A4(bOxv?gryiM2F(-=rmc;i^eXf-Jfi?(Q_aw$)p;UvYKn7arw$*Po}c^huYELM zEWZ5e>9wWhr#}7J>gpQjv`a6l>b%&T+(sv}w(ME%_gFxiW$;43M!}9cjcED|#t;V) zet8e$VP6m|d*x79vMmL;hpCswC)T&YBFe6R^|j}euh`xp37bq}Z`51u7|iBEnSHTb>1^kEjav*-s`5WFceEy@9g8XuB02xdqbesCK}F7lm0 zQq2tbI(o(o5#sq;fdXBc6wxHgKw(7v+vd_YH&XF$GFFX7{N7h01d00L8NK`nt@h6 z4Dm;4JFMK*M_tv$I8Wk6mql2tHr8pAs%2)kW%KNG)10-@efg>Hvb6a1tO>=X61-MLTGXb$ytrH&(%y4U2d8nQ-7cbbz`go z;XmiP(QQ<;!h|in`2-s`_Dylt++&Zwk0XvU$@Kcd@>l=Ee=aXBH(m8zZD1hH+flhW zc_B{VWse?1T9LGA>w!2-)_M_95*uEjYL~vnC;tXmZiB->jNzpOj(_tjVK)Lcz1Ti- zGf?k2ZgK5J_5$9WM~{>=TsC}>e<&h9>bs-2ymzYJt6m3Q}nW|fr@!C&ic zA(>|t>~n&!Vib|=X0@QbjSmaP)3$0mheAsAX49DHH>xe^>g?26EdSkq`qb3Exyk?G zw`cavVISrYzV^&)A)Pr`$TK*#%oX?~o;MiEOry=V*&)oxr@Hd8MZ_v!Rd%3(V83)m z6>rAZ_8joK+y32lv3<^N_x8t+8&w1tmHtsF92I}~T1L(0Z3BO^eUG<#{f^4dQNQ2O zzehFY9jKD~XEUzZKyp*I`CDB9#)(LlI@267m0)sBtBp5i6g(3b%vK<^6OjpN0(q<} z-;$hfq-v{6MRae68IELd$4;szHJfw?n}dwP0ODH=*kLMzgy|nz;GC`=5w#!L+K=`V7C&t>aa+HV!w=HuVzS6*@*mLq!_x!mFi;GMD@4x@|IFl?_H!uM=SaF@i z%rk=#_`=1D9Ph+NYkd}0LRoL5-76bIPpk^=IZBisUt+hi|)k@AO@?B*12NYD}g79tf>G4sDZ&ko8GG5 z7WC`{#e{AN<ogbcad3{r9_b$`SF$+T_kSV{b;SEN|yA1UEQnUFi+R8Am7ib(Cw= z>Wb#;hRtJC{*PL}d(F>L>EC^VbsMgYSONIspf~1>R#0VfbpHtT3j2IA0={H?zA5Oo zdo-SGlk-m`>Q+~P&7maR#hwY(nj!{th8IEKMxLxJ-ry7)obHBe6|hOyw8?ZLSF!amHj0Vfp` zkXtYOS7&qNv0mP2b7oSQn;;=_j*;tmsxYEOgz`>d|MA!3`gMV?o|lP6&P`&1lM7Et8q0+~{Dr<$FP#MMSB+N1Dbl;rh-SsO zrW_^F8yBGrTn{}M)32EZjZ*WXe_1CONa@GMLV+ZUiHBn#3exLYuj`ovA{?flY6}IP zJ75N**IIkbE3ZOGiiLhmhOLlq87KVQg5b?uGC z@5AH)dcK}viwqpy!?4i92lZgVc!UZanq~pjU>Nr8u4B-{!^0V3&*0On(2nJ`XLk3{;O=(X)l=hpy%m>t+4fjZE)SI;vom{EiM;hQW zNLc8+jOd`oU<|aLIJHm$L|baMS1R&=;IT~rl+q?DRtrmw)dFR2e!|L$mr-|Pwh_69 z0fi<^bS#L4xglIAtSxiA^(Acnkr*mrlK!c;9o|YP&{{w;HS}7X%q%{XF)?m^j~buW zBMO_|^2AMTHKNX2t*;ArKA^h-Z=S2P7fTd|FO{VD_;lI`hVr5D0#&J2fMUHHFYp^i zjH~o+$HqezRA#d}X35C$@54$Z+C&ctmBIKLb70JYH-!WG-V$8KZg^N+su9D32lYiAqf3Y$YQd*)j@ zOPGU>=xB6eEIUhW4pTi5nb3i022R}@kJe>~%+Pf>xgpl532zj(-7QK>7-UN3VgK=- z(_?IDP!`Th)j{fpvC00S*mxLoV?Q zP&9)yi>FfTrp94nYrR%aB+tC`^7Q_FGl%Ef`OIop>!&%_fVq-_EqZ3`kQUw28X)!n ziN+Y6(U9sT65&pwh2DNQe|!x@P_y^8bjf~4LVj2`q+9EVgV=+zv;8B+unW594+S? z1HIP@u(vk9!w~|54BEXE!1llgAi?7}`IV@_3S91--Aj9In^~5vz$QF6%cW{&lAL3N z(kRuB8D=C723_J?w!k=Jv)UZnBRr;jG7KXu;JpeW@_8+^#x|jR$xDhHX*r5W@T5fo zNy#ZoqGP*=p@+smovVEdo=tFC)Q8GSjCqHGS}kcd!G{&q!Xt@GE0+~!Qxx=bnvpVW zYc*IJYBBM)TVTuMI*Y4QSBtX-h;fww&aQ#4w5!Tj3U?wyzARBN{+N!emE15(Tc<(b zuCRha8?lrUF`3U>`}(m1g9|@a#AI_)wwY)kMy^hnZph@2gM7ic-ys7;TFDKya$N%r z@QQ`c!SxI=PP1_bdhN1Oco5_S1mnW3$Byq~4vaZ)Lpad?(D}@MJdE^T_MJ)r(kII| zYtvg6Niavhn@qJZ@X-(9e4hTJ-OOc*55DWCCim^brysW8A3X85>(`bNOey9k@^y6+ zg$~|=u?K2`PtK0DIR)4A=+ma3(RY!Z>4x4{M8&YesQc;lDi($qUDlmh*)_cV*%I=w5m!h;q0}6pf1P5CaA; z19nR*y1Hzo6lQDiX3=GTlD+j$Krjs-pG|fP@_?z+URSckLRdk&h1*zjqsx1+WK$UO zK0J7~mZ95b+bGLiBm5_W*G4?^oRdbWtPTlPCEJZv{G)d zgxiB|u1$y9FxA%=n%j0`Do)~{CIx`7oy@-QTOyPa2PTR?#sR7NM913aPMt+Oe$@8N z8cXFq{AI)r4<7MqloUh5Li(uW$9XkWKGsTyg0!NB`IzAnz)M=~$Q&IG`I`h4n(bcY z#yPY-)TV^=pL(HqK;3F|?cB2airN3q-kZQ%c2#x$cOKrm_f7R`o>Qp|l~e{oLJ~+Y zLHL78qOGWZ)CBk=X$9^6(~bWB!XFzIX>IK$`e72ZZ4G}##Q_;Y2#63e&mommC8<=qZD2HkoBvo3@y-KI7SCq^F1JcBe7h(D_`DsQ4Slf{!J*?_$>yLl@=M15vp-``{*Fk9GMrtL`*8{ER<} zXtCuLQ?b0$q32y7QoR^?m+)uJpr%lcxcLOJ0^By0oa=3jBu8#}tg&=>^VL`6i@j5c z#w?4Ga``OqIa^`3v_e%5)aHVYSCvX<0++K*qtd5TBCy-qUWpW^pRjePLsa`VaYFLq zBhvpPi3{(wPC}sBPQ+0{5+gjU*M%3y@#_`!v%meVJ@JE3d(|5H*0Qf0O6v23i8woR znr_59T5z=X;n+jkk$%*^A$2=XJ3xA;hc2jZgv2-;?G&L2n?huEiv{%2_~<;6C+qe+ z_Mtv?V#m?jcQKE!+#~s$#ukuAV|>zoLGp84bZVy&ojP?#+l#YeED?>FD13Yym>En< zo@zdcjFkKdE&fpnoo4{KKt{hbrqf{-mVPYVhMEzls65U&n(8spvuiUdXEfErQOTp+ zJl<)Jr6qq@MR|HHqI{yM@|vXU+bwe}ny4OpOzVpQosVlWs>2X>C_NhQ^v`~dw#&0q zdg_Vt*UK?Hj#XAP{zUnEUe}L4f~UudmB@(=ajSLycx=;YgHqZLt5B+!_E%5UlX-am z_p`SIcYE~m*oC(nt{n(yJv$c!j!YBD;<#u`H0%tcF(=$S(agp!8W9aIF3V#U$3J_n z#i>W(u$U+k6A4B|c&>0Xn}wqh$I5&>`dmzNJe-eJVmJO-H4uH+Ju9ISk8y)NXTC1M zDXal+RDXzaqaCA-pZ!G`rs_u3(3Y2;&bsV8etFW%2Sfyhp4b(?p3bD#u3O(fv;@>y znl0^q>glPGv05$g2~f9}mqjGJDo2 z17zjWtD;N_`4~hh)6P<;&w!$m__J3&5?dCN+%;uW10EzzMTkMbQF_;f;US;7m1aZ~ zM8nRg6~+I6g+iWDXC;{5Q>;>9c60aByJlu)&bnYLUo*masg+Jua`YEX!yvOJJc7;@ zOw!m?F7EWC2cW^bh*!c3vRbJi52*N8*kR48I-Niz+gfSsf*AhPAPZC#fxf|w)Xs67 zftRh`gWi6e)qEky7K6GdF{^3?YfH6M`JwRDLXmC&|*D1y=%i$UBYNgG(P0i`HiMV_0yqHUsrEG7SF{T z!nWvi=x{Qd#>pP4LV)RrGPP0r06(&#oL@ z4Rkfo)xgV61D)5eL|=Gyw8|WtB24jLJL?pkA`XT}&R2>2XFTLXr(ou?{elk=W_!Hk z^p=B6WK~f4gFl&(@rg>WS-ZM8Fj%kF%Cn`3gZpPjC-|(KATp*by)G#hTw{Y37erii z**=V;xN>AW$@eCp_Ev#Hbf?qV7i?)+m9Ps#$`qq(p{#wKs$mX=Z-U84#K$4)!DAefbe7 z+6IIKsG-r?6o#V3!*hGt7UL0KmyYdJY%C>84?EG}-%}kqbhuitPfm_EQ>|S8AlSFT zQX74Jn9VyR&yftg0O#gm7tSRK&Yi-79%}L7+)5|a$rsdR0iRdiMZ4|rb)Jj$*`Ww|dfp&Dl3}4# zVF?R=!+zM|8qMXg3v>8Yl}V6O@2$+(JA z!s)PVp(ZTGqdm0~@mwL}`CLRtPY;TUa0n`6Vxe_X1b1y)L`iIp$_DmH(H|W6lUp-? za*9Sl5yxRyjTPh7^}1Wc(L@SV(@BbmW|3`mgMjOe@sW{Qy*fTN&emuHEAo_I$6C7w0XJGraeqiFa3$=8Y*?Lhsfk4n`k*FyDNc6uccrtkYn*{1)Mma9s zku78W0lH|sg@YTy<2!l1Ejo-lp$G??I_spgLks$e+4b8=3Uo?Y5Pb?=MCy3LQaxMk z{Qh0Y(&-n*g;!Df#eF-Z(r=VflS@1q7Pwxkl*Jqt#&l}!4H%{>Z}4QWA3R=(i5}6I zg?XK4hjW;#qov^48zi`#QT~hbhCIUGD2GtyXf7`+qz-=rO8bd&2-7>iu3JApJ7p)& zD=cJMLZ|%s`=g^@h0rhq4LhG=74HJzQ>;O{;&e68)j(GRFRliHm$wxfyv`jUfeLwn z*$BboeUxOo5*Rq-&F3Qp1vJbuGV*|Y$t<%kv9h~@fd>XMOO~u$w>Fo{-}k-yCRzP^ zc!brzu}mN1u@t)}F*LIc|Jt=zc1a+p>hDh>Tm27;mF+kT2Vyd!2IjI_Rd3utJ_#54 z);i`Fu?^I?6f*YZu(r54W4q=1>P=P0s-`zMSvbtN>;oOEEQ3EQ*;7yQIa+SCD3`=z z0;!~iSlV{k(!LYAvOl#6HMXWD=&{t2VX;yS4oh<=R+AB0fh@QqQnv#K;KwU%{?NuI zn1FB@+Gi!9K(oDTmIFQ%F5b=9#8|yn*}rGcT)muIH^@in=W8XlKWiX$EMAi_+E@HC zs8V6dseqT(4z%@e@u57raKg4I1S~b^m121`8jF58pS)tns=*?q1XE)UDk9KgfqtSq zqhY%l78Dgt^>8%CNCQx1Ik=0BO>`COk$l7Js55p{66fRk>q}F9x74l%x*F(epsRsnXaLLPF;b$@!P|u&AWG*|6V2O+jb>!%DgHi0 z^;f=~%^)g5Wiz-NT=?$CxU?DWv~+QxP&;cODF+(?E7l;CfL0=d?KeBHY}w$_VZI8^ zRx11VJTq}7wiv@ zsQ%UM!y|&@!l)Pj7kN4&SydOy5Pc3DWwOTmpm*ydGcRn%PHL!!XkS)pR06wiJR%wm zP5Y95KsfZUF!o`8b8c-)YT2o$5kAjT&`%<{qcPFaBP1_a@OWwwg@P`dYb*-td_Af| zG8fKMoqxD~RViMhC@gfq=3sSkSy7%&=^R{=AZ#rdt&77{=N8px=u#s|q8t{ND~j;& z`bO@N94mCf_HY|;99d{le&y0%vJ!)wa23ofJJHVTQITbM(?(HO6hOXA_E_M*AE z;ZsusT>yM)wo6y4t_Dty297cSIynV(xxN${;Po6CCq{zD5+*{jAgj>_&=;0K9H%t) zqEvuEGXWn!8DPE^*d$Q`Kw_yXSpyLpg;_EqeBwkXXh*pi`6RF4xZ(^Hn?S9Uwy5SS zvyj;~OU?}Fo3UZIHsWIEXPB|AH4FvHy?86sF1#cYOM<{pX+8k5h?n4`&(Cw1BmyPq zK+qILXea)bZOqMw@)VcOaBiR;r7M>;5<%%d-auE_!O=ILv?s4@<1jd4hia>^6=)i9 zD5!}89Y=y9i2-}lKXV_t;&afP>-9#tGIID}HBqn8Et;)zl|8Ey%^V;6i)%t6WafR( z?7(~&Sfwz4HWn&Rtd4dp0I1%LtiHz}KN^cyY@D~0SI@$o?)<##>@1#JyS}ZRJw1+6 zmfuHyPeqd*#zbTOE#bv?>#@p>ma;f&dw)VFPGD~Ij|3Q74|Kdjdh)G zh_iv8S(sg8&L>)T=O2~d!>%i@@8bQO7i-(=642Z3>x(%@%k{8xj+TBboxD=x1DzaY zgh}6i0iG`>LvLLGd@{7!<=NH1si*-SLJUt%=uvb+#HV7Nf8b<#?g402CGOg4F^ns` zg9HN%`byCH!Dv~WMPw+#f}TJeN&3U?Ynd$^z+*+z=}5`-_U3x>wI%?#QlFcz&y^hX zvg;8gY3LBVJ5?-s{2;fB#o6RRN<|pLl~u8w>d;%8S1GgpJ8-fWvoNs$c|xC6!mbNS z^Uot0S74rKlYFq4fq4=b?0&K&3eK4cjbc@Mi!k;kg@ioHD__ws($UeB>8D+HYn*0F z7T_jdpov@ah5=_$~y#vwB}d9kq3 z0@I*ldV`B6M5%hOj4e zVity6s|({gSETYsLq&^2ZL}L_Pwh}I47qlr85gF%kXN0S4Ewma+hgQ~ECybFpLj2| zJ0sw4j}^9nlO)zZ^(-X}^wmAdHi5+Ri7*M((TPhKZKIIhteRPW8mowEO&{`1r=tUY z@o`=uA1gh=-@AKQqSJP0fQZOe=ZoKP=6lp(Mt?+xu$IIyLBSx5Yq9d0RD4T~ygq|x zPA62-}}-5b#$RrT?KrM$RSw>UsXDjt(@JlIgIbLzBjpj&5ehX;(1*t z+c6G@_fe3448k9f=+519gx0)+p#=g*B)zn%iQW${tt8#jyBg?fpsRtd298q$(N}*v zi$j+%Dg5P?L-6P?o{$C>?IpWR*a%38^hS?2XBrRi&HFmSp&=`~`#_7bH4~ zon1T)DjCbfTWPcXV)2c~^tmGr6%I4m7qcx3s!7oFBiW9W z*N9$>6Vj_}wFL)PCRY&FkB)}iyyI-Mj7hha;+xETz@E0_!@$a5O%}^Es1V;k22=9g zU97%|c%v%TQkqQ+5YRk;Vm!hwRJK%zS`E^;E)-)29Gt%oi^%CRN@{Uu94aeIwNkB= zE9G)ITPbHUy$Gg>34GP@nP!B|M~cDk*4C60RuN8O;cSRBb~^c>)-OA;y0)t@gA;J} z2)|rN-zGUWO*BK4Q77w*5IR=DQQ;Pg5lKB31J7hFyf}XtBR(Mm{Vr&WcKd|X;jfqO z`67~p$@~U==IDtLx)&noWrdu=+UWX)FMdJ)jOez}5G1VCYr5l_`XYKtZYZ%@jqhhS zOXU(V1&oym_DZmY8-Z++&;cjz6y(({CHi?1s290-!os>Q&|y5R2ti zEp`A%Ndr}$Jgp@ALB!+PER%P^jH5dVk;U@r>@svjmA2G&$p~x??97^1&|I2i<8`Ai zp6h9^wqSPzD~sB}3Uo{~x*`ch5|h-&33R}D@qzZBbRBYrER&(xe(()Ts|_Y?u?{M0#4HURdzwrkuDoH`olO48LpR|8!QyzDg)3@3d=u(&qIc=U$3I>|wd zaR?l1wNEg7HJ&m%s;)R31Nuu(lteOuIAW|IC}}RQsbm@hL@Hg!oKdf~YK>T(QHUU9 zybiF{icc7L>Avz1=o5++Z`fi%kHCye>0a&;rJ2-r!hXoF$oHM zt%EfOZ7&hfD@m%1l)zjyF~{b@*#~nP9dX!e-V6gl=@C7IF;@7=JRu2ksd7QmGbznPWN{)UNv`0^){56?g=Q;NscM3u0RU}6C)2lqUTbBq zsHs%NE2GXZRh*rIg1rGHh7R8cIEa&QLbX9GxoLB}pR2WMrBO`Vm zwc<@i<+0(ZGqrQ)q(K!!YO6N$ClbgKVMV}aRDxQVBrc9I7G3+2@;syE?wpPq*-3tp zLv3l=ffEzJx`=1-njcU0sQMPrN4N#?QL&;0SZj&~g0{*v$3avZl@S)G;K!g&B9(#~ za72V3zJ}9VoaadxeO$ku%Sof*#hEQtU`e-!dKcdlv)d`SwUom-_}PJ(%Ndn6Ow}Zx z-iciQI7n{&BrHY>oGlB7pMz%eu)%NV(Q>|9Z zl@bln0DYrvuxEH5c)f7$B}+P$ChwZHYfyWGB^0d|Q&$xI@WT(oYU?>$bGck9!%SOq za&j6UpMwVvka5e|=VY@vFsACS=R}L*V9R0$BpewTp|EAkR;1FYY&y--n8&t1Mh93n zyo|C2mkfeVvl$HE@w&E$XUdda0_xL~({zIhQ>bjA)`q*LS12>tOe&Qc8XDs4Z2>Vn zXJ%)}vTyG`YE3nvga8Q(g+eBiUb=KSSHy$rr=}-_?Hf%9)~s3!4Ou7)vB~8JNvcJ; zEX^N02!F`X%=-1~IYR@h?qOY&X%{9m?8A2St5ZxfCmR6shNRN=f}-m7C{YLUdpGPL z+!bNa9xG1ncZ_#8au7)$43nS_*mSbCd2|CWk_M#vXpSpH!8yM&@W&Y z=}`;fUk(>9g8omc8uXSpkp`o_8Z4YtnNB6<(oe#_P%E*HU2zTa^^DXDW`Ta-phqyN zf}uJ*Mo~%W|&Wo%f?yvdGPWQQ1xhiJXg(UfJk;lm83sgXR9mWPY1SK zrEO}|fQ*bK>?*)p+993Ju33>_1McBrcI0lT zTVdV6KpgLDrWnfYx$l8`sg_O4LplK_X5egtj9g^h z`C6u}E5FMkk0KS`KCC}*rC;wWo}>p-D39;%#KbJNq)z^yB zMb;V3%37lVG2T@d?V>wR@LiJhGp^^?Yz?p;%}e701TM z>h;>(TnT(NF)@Z}mo8lj*H4Ca$;iqcYf!i5Zv&KzqoAK@`1rYZo$2~_Z>KR;M1S_G{E;0pZr8$u^%R?py`&P znK#&*1b@bK_QfA^y+mM>2w zGswAT_cMnNk9_XWK8Gytde^&_FJFGnmUHGxbAS4$pQHJ{^PTSkVz0mcI^xeg_gq>E z{gCUy`yZT|ntFW4<5QE9cieGTI+K3;&;D#b9|*`~CMPF9``OQy=1b>Ya2^Qu%GX`V zdF%OG^SOL3n?r`jw>=Kp{LE)QgYpdkYi11HQB58c8XIT=vq?e!<-`Ala(fCr+~#DT zoSMApf8BK8z=8W8x}OO**rIb#E49Xgt$Ka*qXUBjyLRq^|BZiiBaHt24gY@S%9R8C zgZQW1bkj}aS6p!gCH}~d{7A7_gp9*G zCjsw}?at{f*uFfe0cqs9j(>|hGMdvHeY(n@sKL8PkEJxT-l-%l!jZDk!gI;;VyB;M z0BjG@&I8&nU+hYD%j;^OtAVZtUXB`gme&_ajD^|+KJ>JgS@4*3(C8Pko$^o6Qfg@D z(rQ*y-IJ+ORGdhg3tab{5jG7;z&2Jd**| z#wh?u{b|T7j3g)oV@H&ThYXm3iDm$+ipn8Y1d?9Y{^J25DWwRUsC*^57!HXU$stK2 zk!mp&J=B-)@4N7aU*9`8P}s1VS9C>k#Iit(dZRizK0h&e8w2pEsp`}`rfE#Yl29-{ zfWg6t!V5uYGV}Lh9d1DKMwAx#^U`HwK@osV9h^Pf%&OM0f&NTi@xnK#)8cZo)mRP@2ot8h`Li}{ed*q;lRc!R^VUy?$qAI za@o8stltC_8k!1987fuK1cn8ugiByHuA1Vf?!X`0kMToaA>Ded?9(b&_4M(-^%mA2 zS{xH8q}GkCC0i$=jI^R#Mwwv3{(=7Y{_^{PZ5O}hVxZBN zzx?IVv9a>}{E{V0F1ze<%#vb7yElSOk{E3R`H1N)^a`xn)C@q81_JO9k3|ufV)=jj{ogATi?`i&+kyQD?z{h9>Nq|&wqnJK_x|#G!Gz!Zmu~{G z_8-`f{2%++$9j5uxCyA*)mOh^aA5HC&6}`p-g)~ShYuf`uatr4vokZ5YW3-zPgBa; z^=ntJUJV&Q_o0U$L@odHr7tZVUi#Lz{#dcE$g>!bJTfwR=-}b0sR{C4dBvO2hD^bY z26&GW`}+le2Zsg$kYD}sSJ4=)hK2s&hwnRl=+K}4#a{rPpW5*xz#DLgegJ{M{=4tK zn`h-a-}w$?xb+*~0A;@VqE}O+>#o19&{N=P%tGaTd-lOiX4XdHnP+zA4j(ShmuF^X zCMG9{V^;{wyr25?r)ifDe(*PzEnn7e$bZ9W8&<7e^`Q^{e>B`p|LZTIFZLIQ28Vv( zx?jK~`!C=6HYVloe)l`X1BvN5MCx9bgG-YM5&pQ(=@rByMjbDtR=lsjkC)m_fBAVF zQEtBZYngQBhF`it{q0p3GwDD}!Si4L^w_JO9qUBZDT>AYR^TGdeB58gg{ z<#6%=sQn1Iiq=StP7wwyf>@x3z@82HNrQvVqBo~vapPrfDU2nQ*$cE7U8o5A<9()wl|iWH72xFB0JQd85(F7^UYMEYI|@|VJPaoxq3B+iI|mPG1+wyS>RePcnShu z^7=OP=Oy~f-plo~*Df0Nm<8wONM1m@@WP8Fj%EtD*kpt&Inc8~UsYb3r*$A?;WIAJ z{e{?Iu~Eok?W(gK4(&&c>WyT%lBiWsh1TEFVsLimXb<=)v;wJt7RQ%xZp9pNH{2av z_?S4P3gor^qxREbX|R+mssVYRH%-#O6kz|o;Z=+`yvg8R@~|OJ@LLCYjg19~vVLQI zQLHVS32QZXutg77US~kZM2c`#p*Z^C+{3HjSMrk4&JZx1Ym+%oO9=$Bk!`zWJmsZ2 zx5Zo_fDgW-a!U7TDncIKJ*sptaJLNBfKq{Rv<#h-G}ES!Fbj2OdC;ThXcK^xKoPgy z_Pzc4_uqNv9qfhn+RHD;hPH0QhDN=9-+lLDiT(1I{}~(I`VAWZTA&wNn6;y`vva%m zJTpB#g#`~-0%8F!;@?0y1n_wUPXbM!d1eU z+;_*uN5?0}U^~#?|K=ZgGq7j(uH6Xp{qH~e^v+!uoPQzUXY0A=Y(9Mxf$5p)r=EC{ zqMzLPG{($puYD_ZM7sb^OrW60TW-hqq2a#u&2LdOI$=U@ ze0-AgJ$K(dFwnnp#w{La9%EHeewktT!47fQ_~ez^5cY@M8ZK>(^AxEV6cC1Xn?t(!O>kzh zw}8l{N)j722!HL`HS_^yL$LP(eQCAXnYqb{sbrcSlkDkHub|4zk|ekDS-a-Y&=U9` ztQ_PyLKx%xij~U|@2zkB(QGbv(S;Y$I#aV#iMd2iu9uEYk3z6>&N+u%_uO+2eR6bk zlt`?>2(xL^Cio*Zl%RU1Z+7k4MVrzYkOTr!$;kN?dqf`}?RP-Cwmcd1ex<3~QKw3v z3xH3RmgvgS)j(GRKbRWey};mc@!P>hn!$K8q8Wda__-6UH;m&&;TK~DP=Rgmax!`W z2a#E_SnX?h9c3fkChxrcrM=(=OQ|HwJ+Run&lBe#IElEY<{wFG{L!m{b`R z=1ONn>vmSU5)~8bR5^9UkCH^;c@-TTMiO2`e#Kpfr-xS__tKn?E`!ysEs#rVXS0-A zE22kYf{NHQf!yKA<82&-7qd4ty2f0S?P3)0ZV^NUnGptKBfhn_-uew}zXuK+#4Gsi zKlgKM)~wmEVFR|cTW;C7XV0Ebe&Q3@Cvma`+ki~4aANSpU;43aj}Z^{!$JD|3oj&T z{o1wQ5Wc8YnxB90p$9Q1ZhPeW6tQv*zN`S%LFmCz(c8ZF-F0i%-SD3GP@}8faP{Qm#NYh&-vaXY?%UVb zUwr2~-UVW3D< z15-V4{{uj*?b{!pnwq@wiq})Sx%rv-(kz%0=zH_mZ)V>tkSBofuDj%5+^}7mlNlls zcn-6l){{>>fuVTI*;@eB%ns1UnO`7z_wL;^JBCnVdJ9E>>)7aFSTXN_-Y&W1VlX5D zG`wutQYH?t_oBmX+qTiFmt1@ae#-aVd*96LY@tvDi()&)E=tqTCHkQ5>!U2dCmX*r zwLukt?yUcBWz(pL+EFxhVRnFH^XAh*jKyLBK15P4oKc9$7K^OK?oXu3r83Va)&;XR zoAtvWXiAwc&&^lndU8FPROZQ@PmE2B_7(eBHNAH2dY)K_0KB&j7zdogjaABk{NA2C z_#AEY^%VLG=MRQ&9-&!&_opL`NSVDCximPAXx}LEpE>N;`a_fra<)iRM08^qq%6`#tE-kCRp43&yt#fL}0G zb{U-v4e;zZ8Em^eyBavPG;oZ5&bX0RNid)UJ+w!rCVg~Nsj&VuObrJ8c5NFYg}0HV z3cs}PD&vWl8vG30lA<(!Vf$Om$n_2vcSksG+BKjhlnv_8Zo?tqR4IYOvm!Y#sPZTL zNmUpr8-C#vJwDhr68T1nxuvRL{!1#D`UTfsFN9D5Ca7X`p}ZzZpaIndZj`8vpr|oL zCzz#=_4dXXZ1oqL#on=4m90@@dEB2_3!7nM7j{h%HX9y{f%kHS7+a@~Ot1lqwu};7 zm+Z0zJJ_Nqlkdemd5PXGLAh2(kB?)!R!voF24!-7?(dgDyRVSI<$KNY>_GoaTHeKF z%UtKP$jw%!(8I8|1sM+Cv?E^u)>hekj0nxMI9t%SrL~~8kv5Rk;1F%o7Q@>~8n;Lz z)k%8dSGXDFsU6kg>L!ZD(-HPsplo~BqFJvI^9()}15NaxWQqtE{CbU*Zd}X_9-bC0 znN_3-ghD!^TG$d8j1z4qG2u`+IJ~2gN)%cAY-z^LsVo&uTajT-emy>nI5IVie`$VQ zT7W0TgNRHB=|S%2y1mo{ZWCryZ&e{CxcB8?E_HNj6oyROb`j{r`O;k03gT%oUS7~! zR3LX)4JeD-Gtln(>#xUU_cfQi22e3yng@9N)KC5t@!&3Qy5%d_-ie*;l3GXlz=ME1 z>XOZ54jej!bL%HQ`ANt=e&dY*t?%7-8#wdRpZp{%WZ!!2wN&$_zxYc^d+@;r@vOe| z^2@-zU|MXDK*emi0y+i2fTVE4-t){J9(~te{|n6n9^IY_mBwms-oS=Z$ZA6Q~aX4jw#o>#euovx|)pH|cAxc`Fzdgg?#l z+39H@Rw}9G{Fpqktp3^uejT6%@&u0l*N=S+l8Z0C7!&cE-~47QkfqW*wOhY#0~SjH zD3E0k=r)tfOqrp$x2N}wZ+at8@QZ)@MW7vzxt@G}(`lR0_Wk$Wiwv7j-wdP#0m3bx z&w&qbz4e=*$FF?lYZ#4p@7jg+_)A~;5~f=Gw`nO{sB5j}_aAwbj)ZvFd;jJOU%=41 zZrujf*$xcID|qFqRXshufcBo=-c>7CA=kb4-8(iq#vB37`j@NGJorutZVnV2ZemQeEO*yu0+(k~6J$wdKdxz$Bq93e16T3T|;j?f9nNM z(yIaUD3+!{RAiuIz-RmR?G%0AefNQNDUJqu%Uj+8TE_n_M^*yG_`{W)J`*!tQDq35+E;q!f(~Y#42V5@iQiOqGH? zVw)&(YYqXA<17&%h2S4&w+@=dkO6QkDdMqgE|%jj)6AyJ4ffz-0ISVHk&he^Cz>Y)awyhX(ryr)vqyww_osJ?tD zMVB}*BfM<|6zk2$ioJnGTKy&CM~2L%N68COKKslwMJ4>o!0V_J;K|9c5+ySgC%)WnhT*U7{Ewp=_)*YFiIbTZ&qR$nd;l7p=+yf&tb)e znHT*!N8$C0bO#yNv6^dZW_>@tztqFa_HdMEKc)Hvkgg5P$?8xpWs$896xs5jr884A7~J0R&g&<}$M<1*TeIeMuX`P+&s(o~>!CvjAA5W|i0r3+@@=*X_dDYgV{DrQuwB1?9orp~9h2#o zzVs!^1sfy$lHnyd++xBc39+#-1G?b<$oC(?IK6NGJ`A?E+;S^m>7DNqgkCZ<*jFgf zlhPG-8rBw5*sG!ESp$TlvM7oQ0-Q)<+3oLr?DtZsBtF=9LabT6hW(RS#|zf_yTAE6 zfc>@q?phu=X>E)QcFv*@;n;KrV>M8}v3DP!Y;t;Hd~#xVb{HG!@BRMo!GEAn*3NpX z212|1QaO9S@l8LBX*8M8ZqfpQl`@w+=-`7eG%04-z5$7J>7|!36LI*^Va(<<3Nai2 z=}nt9fy}SE>S{3I=RWs2R8j0HVphH8T|W-NKmYST0YgELgvZAxSTBA5{rA!FmM$H} zcY5ub)oh*h5C8a&_-Pjkcpvw$pqKtpDOH%B`0FqHHD~^4Xr>zuj~xDoFaE8r!7p-?yLj(;DUd(E}i&e z=c%K#WE(!CF+9oPphe@c7_QFL@uG_^LeDG+=gcGvF%YQl+Ci2u82mzTL`?VcrP4qb z0KZh4@0Q!uKvx4@4Fnok{8IE7e^=TF-9QPWRKX1mS;-mLY>mhw7?E0haAI_CmNzba zAnP!|X{=;`4b1%&ZKVkM*};!C*z^lZ)Cx@a*mkT6Z~!wX8XAp$NyU3saM8dgXXC3> zOt1DQ8i8Axn6Rqa=Vt*aU@q~~Alp%qF2r6Cg&+QN7JtcPR~BKJ$mU~jm1C0Fz9+Ud z7glIdYZqu`=bMh{o+U#)OP6GN3#<&o84p~mU7)qI3wtTWb3Isd;%hc+EEmQP?mg6M zRxP8I&dDv_(pM`kziC9*w}O0EYL_{b?qvN^4;`irJBI~na)J8N9MZr3W3;9TlG$W7 zzjVdw{O}MEx6YbpeeR^yFdJ#P(WKTanoO|6?XqPkXl`UuKo#8PY87;q1z5H7hKuX- zRU9}2TL`IlT!&qDV;<3*qrVNCFCXSa?t)ezMp_yQqkKL1P?|mu3lwjq9m+YT^d3 z21d?cX2ABCV_!3yKG0q7RbYOiBqiBedg}&Mhg8xb(9LXTBeqEg>vNVQ4%RO`(L0Cb zwFu>7nt{!TKy><-N?~El<@1>GNWqRrAs{iDPrD+uT6{PMFa{9CO1WbB3M`__mM#O1 zvhEbFD_5+7KAB0^nvGpg?*g)Z@gKi9H#>*lFklsXEH1ZrDPxBOzj1fqcg-qd5DxHD zlCWu3FW9#i)2?p~g(ORcmQW&|#_US<^sZgNyhk2>c*&BX^Dn#rFbQ&oKh{6i$AY*3 zX1MlZ8~o{?ej6b3t=Ih6;NSo|OING)489eu7{CeS2HwM0mg>^u5g5xPR#OTEg)(=8 zFD{)2IE|U{ir2jk@b<%Rcq4WBh3kGENC`#-D$mT#Fh>9b{y^H;!@+Xk-zRqLc;=aB z4(tbD&!x9yFhc&{@Bfd?>;e06-oE{Nx0CmhODMiFMmlRH=p zyz|MOV6Ab+u zaHVnJkw^4pX#-6ofLKG;;QbPyVdLNfeM=&1hlT+mIr*-mZ6y z=)i}$f|STh4hK8>Oa!99ae2S zX(9k25n6K#SoBlrp(RW6O9mMz^XXkYo5{n31Pu7-l=g&yX(Ey9?QLPs(#MlDk3b>f zLnE>I6h$S?WtdIOv|?LR5oQy1Wxxs5BbeZml`A1F?7xw-PimOTBqW8XXSm?ukBSF& z3SKcx)JV~4$*+}S7b=cADvoPEDbn>-Fk5U zfj7PBP28dI20Q>)Kuur!+Rfku?7+5NQxDFdafkMjiuXvxTS?x(s3P4?qqq1oUEED{%M9E3W7- z_Fej#OM#$hfR)2{-Ejw>bdbxm#hv0$_OZIN>oz zJbxywCR1<`M*iYlAKtsn0qIF%eGZ@M*IoWvIN+I#p^~c6bMec?_{lb1SRnC*246ud z7Azocuqz+A^%*DT1-|t!-^N~g!TA@UH{dieY+p?B{(T2k4wfkv$H~1CUxw+6o?bxUa2Xf4z+-SRZJ;OJbY`1OQcDS8?|ItU7 zM8J?s)8fXAO`ax!1Z)flCp-0GJ1p7-l>*dJ6z(;LawBz?q)pkDpG#!IZf;0JLmtBf7Sa*$% zKmY%Ko*uDt=Tqr)=IX1jW-Dga{bG417tg>ot5@T-yi1#+X?+I=b*HAoD~H)CZ29tK z7JWa;ZZqBeJ zm4h$@?Jkd!+u>+@JMuXLQ4Y^Z48ij&<#;$Rpo!GW@An0%r|?A=0H4B*^8+uMzdSq7 zkLOZI=Y9KJl-=~M23`gl(7RIuy+Bk$JHac>e>_Ped%fxuXVx3Tqyk9F*|u9+vRGMk zz|;Vh^9L$Hf@#6?G0Lek1moT2Z(Yy8S$`U`x$#KEVrYM|Gh3R#iLkCm3#Vx$z<&c* z(Ap7ZvkNQ9nr2fuS-VP3p-raEq0y8oI+0h8n7}aVl$0HR_i;v{z6RMq|H=1%3fzRB^+N_G^q0 zT7m_CPGH&=#*4E|FrCBs5PKHu|Fmurn6LfIDxc1_R@>}{;>CdnfRcPQvXnz~8v`1JQR(C?DW5Qv zZXX`+m#zcr{OxoFg2EQWoeCF{%fMSGjH^m|rKeZ0CSvL&Et$|)QjMDJfM)1!?1f8* zPXe4!EC$(Tb8Z@h()|Tcm3hdO%}LxWJVE-u`|Qx{6hp>Ba+u)xW?P{eAtX zZ{7^ zX)&}Se;wag>hiz?4`3xG3tyML?9$5sjqGlP(G_!LW>(8?$<^1_KQ}+`KpHn)9Erh8 zwA_Xb>+qOmjWL@@vj!MYw{hcXV4EkO+KHDoi&5F@7`)AbVJ3^J^~%O|8`+Kdo$q=V z@RD`K)QU~BfZWzqHBG>QRDex&saBjFys!j=52<55KV+TWo{RAWY)?O9GmgG%AAA5j zh*1|n2)bjA;M!}hp>`WjI}J|2vr4s=&uIfKIx{;>vHLVDSMR**4nXNo{^Z*LUEjF% z>yuOCcinXlr9b}oHd+UVUL1f6g}ziegLuTVdozCs%!I;)uey-H_~aG-@K(%W}gI}0W>aXJ&{d=D6?$1Oec8kvF%Jx&?A6|7hZ57?&YvTPTGQlT9Jc2 zxp`W!Vi`yXTm;^;^ct|6&E)7g;}a7=%YYYyKMPVW+j-0;LHRB zy&667N?Wsbbvm2wxj)ya)zewI3E^vxGx^$eYw&DewsbibYqV*w0+P0*=lT zPfvL}+IKlu)SZV23H(LlPl1}BYyj-q@H17X`4=m|wc<3Wq#ZbxdfFV?fn!m2<6r(7 zum{HpRKo^lCqUmN?P}n~(LnfM;Y5>$$;gnSY> z#8kuthl&dR-1aN(Rx$wxCtjr7WvMvMmeg+Jru@>OR3=-CB^aG*E98`lWIzqppJhnY zj4$JBAL&fr#*JmB{O7h~YJmZVxO0{ckzV!MOX{d7z&&4gy3i6YobLeYaXnuuQJBB#m348x>7DHLclfNV!v9VaG@77@8-7Q zRzs5$h>!1VvjSRTwgZ}YJl(?PMnACC&9~D#p}z zZ(Bes4h(#q#<(ixxDN3Tk7(H9yhKlSrG})(`%CpjYOcW;V2F=H_n0OKo>l|fHCaWi-qvp-~RTtZQIx}3Jy;^@r3yp z*WnCs#n!s%^i9<9@BjYq0X84_zz5c>S@XdUesIa~;QQbIpMg?;_y_-Oa%$=uw|)b9 zP#N}E9CX1p@4WtN^CfTKlN;g=f+^Q2n&C|Ior30IR zkW9x^>eVSga3^Bp_3^V!=C>o%abJ^S_?I(P`Y3Tk`94_{4|haY~3OSaCUQnS;ue1w?~OU=%V zfBoxUqYA(A8^1v-tXsF9yxgcj@y8!~ob9IA7mKpZ~EakQS0+AI3FbZ$Rm%kjTT8mgG=81o_FKfe&(5HqI1meXajDv z4)Y`Y5lOi;4F{{T0od>UzurxW><7+zVEm#nII}esy%$)I@%GVe+YXH!Ub%cZ6Du?s zFnjxs?QF6IGknnD22_6PDZXHwn4Vmd%jCEVkmRra>aTEZqn$f<5~gEf%?2~8qv$~u93&C) zGinc`U&g=DTG;C+QWt8@6uhR!s5Q5I_+W^TEDTCHc04y}NcsGKPc{HnGxI94#@7qM z0E<9$zuugP>%Ad3Ti#06m*MrL+h`bkQ6drky1J%gJ$7gj`1ZOsIvL_$e#X=eROBzoe--Jc##IaZvNQ;we zK1)nZC_!QfVeo~_L?VsH9d4kd1_j`#MY;8Swh7$rD<%uQ{TIKwZ)lKRO!-{ngWvon z9~+t3bEsO2r81H^t{tOTFr_*sHPR3^qF`3k=_w|s$6yU=C7l5S1DoOBVyc}dM6w>| zk8p|s;#@s8*UHsf`T8stB=)6Zh|r3qu{7ZF$HHJk^zf`|mo4EI>QJbtB7CdYsw3=G zOY>Qy*lYo4CVh~r$a|s{&ua%KR%E4_fp28;jbvgr6Khh1RZCk#gY`2vl>7U~LDaQo zI+Yg+)P5zjL5^}N`B=HtJdiBcdRpac&a012&L4cLH9n_3kYz?-_o!GtlhQ+SUap~P zF@PECXlXv+TD~)hA7yU}otMxcZIac7+hD!qK=0sBT^b)6e0)hGm72{a`%rC9 zECaVz9q0!Qh$XhCQRV}{`Aw^kWe}uB>^d#AsK4_uDzzdOGNPzaqFGDV>Zw{i z+pJ|;H9kem9$m>QL-=|ki#D2QMcUA7CRgQ5x#+D`#*(K#p!>!;2-w+LU$`R?Pi2_2 z7%QeKvDThS31j6`b2D_`bRtJ*TbC`+X^XK|z8TwEuCfodx*l*EH*Z=*T?ujJC{8y= zhD@CamR6ch*J`CPnM-sCXid!$2x`-&YC^kzRlb=|`EA9Dl_qCDtmUAB!tQP(pfGg7 z*-fqr(wptZtuyAa-a|{#r;&}D9?e&Ymgj;xeV)673{sC2VP_5Me9p#8_NS7y3r)nA zSJ@rBMh~dYj3RiZK;u^$2Oo&f&#tWPf$fs1xy*bDyv0{smc>SJiWtf)%_ej4S$*{N z!Tathm*!*j`Fyk97oWqn*Bh(lV}s-aYQBB=ySUP;;$8SVctlq>5cfon*gFP<2v8k-Tn3d=htzO-Lhp1+-R?CHV$kC zE~f1JLfK5dT&}X>7n!k;QX?i4RY&Xfvoo{wk{^A`j{*y?{-HNOgS+_TD%&Zny!v^jT+|MJ>qt&;t*B=F^`6rT@Y2{{evQ zt2cj@k0G6Q+9u#`y;5Ul0ShPm@uS8b&VlCt!>|4-knirh@5bW#$xnU~MEdh@|9LdL z{fX@?qCV^FGgGN8S6%f6%+#O%i_g!@@IhugPSVUKXv?ommbS0p>RhcI_?y2&+K+tX zBlT+I+u!^G5D^f|N?H&mb@`3|_d}RZaUPbOpZznMo|y|$xkQF{|Khs=_W5kje)OZ< zKzH1BC$(S+H_|@#=wo!K>wf-v7A$YyzU|_RE9vMM z|5?~h?^j>ozwXfBOn}4R4jw+9vvW8e$`^^o9^_sN>ZU(~^r~lgkm>|PNPg2nn7H^? zFN%P2apDUd6Ym|~{DSao*D%VBS3@&i@kG%va^J2-UCrLQUU_pRT28cXAbvboCK+;{)+pQa8TeCAu+r|QnZq^JcFtz>Mr z2mxAPv0c1?vRd&RxByMD_AC*f<};Fs7_c@`=oxz5W!d4OwU=JZ)+KW(lpN>Nl9XcV zq+Nv4*pLVHS8FBKLzb%L`uNn;pZ%R+@Wd1!ipdxZj#uiy>r@Tw28=e_G@jA|u87uR zDJ8NB-*My1;mrsnza>k2rX{Rxsh!$d@jkh$Zx30YA;vTu^c3$=I!lpy12$EFUZMKS zWYKmN14)AYoHNwEX`lD)VGo|6ffd*NyUfr4MkG8~V^~1Js>0CmdIGpjFF-DOjX)Y7 z;$(N1J-6Rq866+}&TY-v`JO6vt7cD$eWTgTMmyH>brX!MGki-~eO4MM%vMkWS5yPT z4wB=YtTX+=!8|=NKx0;tc07v%GNmB?_{?xIU06E!mS4TTfBBN36-)84Tq}T@Dkhmn zi4B$-091z3NZ4CbUoa@xDq)EMtft_JT69V}0LJx_`-t`1>_D4Kr6^mhg+tg&0 zDTxfdIJGQM0I3Y}eVSJ5yjqogmf(q2TYL=K4)r^0u1u53ieO?Q4dSLW&Am`1C38?P z)iDi94l|rHRib$LjkaPv$Q;lr(hgX9`|64~Yj+q)iQXIinZm3BhsvW)X;o6IP65C; zE~qDD0KoleSq9L6adN;Z{zn7A(9ryR0ISKwhIPZaT4jFcwtLI-GgF72uGdPHnQ>ZX z)$&2~fd#NyZ|o~I*>(7=GtR+II8f||^VG})26bQ{`zHZ}kZ9S;)jfs&GtPf~CI{{v z2K^ly0GlqjZxPpmK56LB6O3}ymtKUC4VVE9rc2-=7z_fZ0bLO92k``;Cl@G)Ft80W zup7}6uTP?pN`k2uo_A zz0q=mJT#2tfPAI{?z;VMgjv2q ze!pj&ex|-K1kh)Ou*%zG?t8c0hJ*BJr*8zJ<5sUJ43dbKr?+iLPG4d}Xu$cSk3K>dzVN~efy5Mn zOTym0`*1~o51h|AXA7I1fubpwxd39QI2`=UCE@T;SA6*%)C}R9_T<+J6ZIDL|70dL zGCKC#zx6TZXukd3@1n6xhS3PKl&%P`HD~F@&Vf#JvvRE{#WMina`CZHhl|sXH|FTv zk2iOhuB(Br2D%#fLDhgivpMUTZHGOx7hGD52pPQd!{Asye%M>Uhs7G>GD_otAO2y; z4Cxs3lZg|FjOY}v*8~6c#~w9Gmc5AAf=pJRKLZ zx8n3vvDp9G*JS$#mTua>Aftxmw^^B~w<`4#7Of^G)sDMnTxlU-Zh=rD+<1dEsaIYJk%w zh>Hs2&)Mp24xDycwSVHNhreHIXge$pJPc_H{AT>3R+_DHi$2~= zHA?AN0x+46#|C26Tq53+&M=oF`yC)k6>CAJVr_l`IV2_&h>VEpsGMj)m8wYESL!5e zQG)k`6yr93V_>92nXKVieAMhvaPY$lRl1CIZdC_PVnbdl-FPU`>S>+Bq6|`c0g`Xw z5k|OB^kO=`yxg5 zw9l?dKl7L(Uci%Lq!P9`P%dx?XKO%y74R6mSI{7pBRhKtOESx)AB4^_$HL5^hQaWW z=B*uB3POxlg6Q@o3Jz#YO#y*=C%uIos)dBnC(m2$p5WE;U+XN?%jC2UgXGZXbApcg z>>Pd&_R%TI#Sxe9(83>ikfBx=^a5Mz%-!8;_7C*46!z7xx`?uHFh)6UXHF&M7(6&Q z1SNeB$cK%Z@T!$7fnG4CEcVdiT<9rK9D6~*tyn0~jzcXRvlD#wi4wDOb9}7$RTo_d zcrNx9;l6Ceaw_G(hOb8Pci#EuVSFCw8$ey;a`E7d^voY&G^SAo2Ks@E^kEL%2gI2L z!^tEDXLRNoAPX|Xgm^G3@dS{WGf9A6u&%cqI3F^f1c3~xHf`DjCGl|J3_2Yi)_V2T zt5-1_0yZWdO3tig=4mxGrKtfcT`Q1@H$YowEi|o#fgS!x#RLWVq-DKCFfdFw$O{3I zE?L5~4iX|cF=?#FTeh472Ue0RIZ0EdF&+2y6>~Xi6vt#O3plNbYOG&SG#orkfFq3Y zt5@imTY^9C0=?L+kDg)`?E>IatUr>`g7+q3fg^YcT4%P+ZzVTh1LvpF(5sWD)o$Tp&YF)`<>K#cI1 z(*@wk&WWEcHD;8d(tXemK#{my+mFWI_9qf)M{rScNh-|Q;CJ4I44+g7Vx3rZv0MOY z)rKWzslBvmVc_J1Upjn1~ve;pPpFt+K!`R_Mv$XxV$lnU%5eeNR2j@Cf?>h429r zgfg(k=ol1%bxu~JN>yX$hTf=Z4hgQ2v%w@ecnixgng&3nG+W?JigJxo^@-OEiyN>s zFl>_oRxN0xIJhxF=ORaga@eR_y@jYi0kk+@KFVebg|(Yb%MB0Jay<>R6sh}x@)&Jm zpJ!@7P?>6|=Q93QYtU556dzVCr_xUk_M6&gTe4m;zC#o_-3tLjug1f9n_5_VAiFB0 zlYZ3>`h$itm7tTZ=mRu8nNdEM^i%FcQlDwh4D2Q zmGrO{7mm&kA(8}u>Andq0Inr)QD-s*MBJbia8W4LYG9FU4zv;PM=RKbV+nl}%I68F ztzfODDbN+t^93o+8Wf{p*?|#B9aUBj0#*}?ut^B@04yP-+Z2uGQ?C%QPC-ynPN&wD zZaE{Ox-;KsR+KfbvRF+?*B@bI5S4FMZhD)&3aBFCIpp=jA z-6gfJSjk2{*`ekA^;&i0z%%h$VsQ1kY`!qKe6_~&X+9g1h{?qlHggGGs^_D&xHN~` zzN^GV3dIP1Rh3Y}K(Hfz=p4j2FaTGy!yfOT*RzD+LG%t(JU*K0G=2u3QZx`40_Wyu z&>Ar~8!Fz^h%uJ1Lo%1v%jL!)-g+Vcm@uEiRbRk*%XxteRtsPq@wR7jP$LYLqC|n# z0Q6~qqGAB3I(yHu<~LQb+Y+g2CYAxSEfw2kYw95Y$(E$m4;-LY&PWBzb?X#`N4Hmy zFpbTbLwEPmr37$K<{aF#N(mq(p5a8MG@Yosl$Pb$X_S0DJ-cE32KXn_qyS}EFv8P7 zoWaSQU52H@%LsFbxpiLYTMriT@iqm=8i`J>w@}+sJ1`ae3Fsx2;wXiOS(_e^N!ZH; zCnF)4lNguN`M2AG?D813a^b@zVQ?t{%(H|kD2#96$xIB7RRnfETw07IH}UPdQwwqS zX$T`|ArFE9iQ!2t5TjkMAZPdk0YR51jCjVBd*bu3!}FHIpMJprL=hT=wc{;9m<>8XX}O~6 z1+4vsU}%p_VPOUe27QGabs^TimQqGq;@IHI-B?v1L(&*-TQFt6V{%}iL4fky9JB6e z+{yZjXI}A|;?Th6bI)Pht3#D4yTa_)@ud0Ywb;>Q<%Jh$SJg(XQZKhECD33jqm`o6 zNirdUgs?hMZB<{Re;l1D+=UiQ;JYWjKz;);#Njp9UMLNZ*}r{~#8_VBK!5S_hlSedu#j7^R5nthW~Gn12tpLnLu z2Rp|m0LdB9C&NLl2L`WzXj@5^tb(9%tk&VcR#lRXNOe|OX`;a`NJ<-tj3z~zVC^Vy z9XV<;Q=uO}2i*uttxsjxE#FplbCR2PlYx7JHQy+Z?V$8gl-S^sR8MZj*{8EX>iUb$ zXE^!vY-zq)-L+>orL5R+S~>@+&)BzD;1(Pds8L=+YkC=HV}x3}b<6zZze3)zya zKgdY~t-gRrmx16kp%KlNcICybp*&hQ#FYW@desV2oO;XO&pf~6D-doZx(Z)hl% zW2v=TbF~^^uhIY%w}%VLyLU6e6bUm&1$Mxa)3tVB z>Kn!YoEu(&$F=Y+91)AVbiUN8v}WhAsMU3svnzl)5fb^IL|Ax)PYhTDP6Covng|bv z1W{n%VW){wI>?EpIuDO=fD|}LBWf_uLs=+A)>?=iu(iQbD1tB;;WkWd$2-LGc#m|b z%rmu3LyWX;%~r8BEPRqGue`1q0%Ub~pW)L_@gz%yiD6%BPeNSR zq)XzOjMmr7Wl=En*k(D?S2zb6wzrtaIAs(bd%dinAg|~0crV3D#G$aJ zUpx(T?!c2*Cbynua>4?58HPdYf~1Cj?f6q9AVKY=e)8n$=;Gv+aZ)*JWO7oEcE>rX zrJNMz-Tre@)Osp0rFZftL>4~8WT6XQrDi$Om5%5OIPx^qvyn6({o0V$s5N{R6)t-G z7!AXJ2fB>D&CUrS!!`IClGHFAS7)s_!ueCyfH_%^Y=EB4^lma&jClto};oGkj?TwzB4cH{q$Zh5#N`9>S8HHgW6XN~3l`ZA35t z0HUB8oMqSx#z^2PAW4!xgM)}_pqJq?f09|ITGZyS1@5Xdt9VUUuol{4ysZdmVX6Qp z8#|e^EVK9+K+&F9VL?SR2>>KesM?!oVZk2gOAqvIyl`uNa3H&48GvQ?%oL-WIKxEX zxK{iM$Wa%zI>s=VMq}mb)UJID{R*@7a&OOpb2g@Osg0MvdVYFlyfjyvoQ^eXn8d5o z+WaXaD5S9}9UzU@EEth}oJ3)w25&YBp#U`nYiLO^?8YEiL}XVT4bv}#zDkseq%{qQ zF`jd+<=Bc;Pr&INh-e#M@$uHIOmoWzQUm>)E`K#U_D=U?8_oLE-h=aV^Ao$CVdI@O ztJX5LA%iL+@)anAvY|E((!7)_b7i9B{+P*}y>;u{#N>CLc$`nR2o5H-4i+PDg3pK0 zs9LR!ce0ST*VAe!c{$whV~u9F1SeY7ZV*zb0>REeR@ayf1NV42bE|VxQx?zy=uJCh z@{TMqRfG!Cqyb}Uoq%6D0|@Dp0-s=0f^l}p0`aDri8Oz7LNunk0nJG|WTJ!3Yk@$E z>7G=hKFUJ1cyeV=A(u$5VqYSrSL6i|9RA^9&m+Xn%u$9ch7bNwyyV<0GR-Ms+FZYe=W^+P;O_;k!brEM^gh3#yqn1LecDm#2o>FC? zlmrV8k5JFk0jDObJ-M-R*%&*j@L}81{PZ(Ve!o^N#Tt_|aAoH-Pn5zg`bcAB>~N!* zI{d`0Y`#B{>|+<`VsVg}3pRkVMxJZMa;-#fGf|~i@`vu#Q3R4T_n`8ucz+(!u0(_) zTEJ+$CpZ|OXOqiglpkt~iH18pCrpjP6?$4bmxn_bBTYuFvJT#yv)gGGLtp0*rF2a? z>~SE((+DQcA%HZIT0~{=Ty03^No{ErkVUZr=RzQAeZX4K>Ta`bs*7^KL?VfVd(q~J zeAYw}0c;MW>TuBgs8oacZ83-m;sv%l(3es|NsOm#q0-B-f8~_OsIjWtq$#_7)HGs`5_hy(QXbqJ6_liSm#3HwUy)K8rQud87QDXDErT zqB47`pPk#{yiuBN_{G=2ivfUN{91KO>}sH^fvyH#3=J@r;LnD7L2*6+@*zKA8@+c3 zEY;TW+Ay31vq%`Kfmj1z8^mb@0mGDy^BdT0SThD70PM+ym4IUKEfbxFEO66#rVRLE zbJZMHq*k#fna`~}`^?_K!Si1K+B{3YdJEM?{ox%u`3&X3@k8tZ!$^mLPfrRD(0Gk6 zoFvPo*%G_{=F|9w_9O~@jYO$BR|0{sLR1wLcI8LI4xs?mT>~LoZpI}vRtpg^NCE>> z0|{nT5g4WhHfjg5dOSmaAdvaI!pTO>QKcFNRB8IJlMn-CxUw>WNr^gNwgL3!*j_kZ z&ZPvYFga(_%g#PMKR8$z8erKLAg5HS?t1KTfY8RR=VA+$F%=PU0LD~Z$HzCWjb~Do z_~d+LdghrYc4vC>vA%4+uehYxhiBev-}08y^vpfq{MYjIY%4q8;-i$)vmoa}PB1uL z!-Co*L?vh;Mm#hfVe@y^@KnkI>rg}6FUw)D4ET0XWv`ZvW~sD>n8_A~wYdJP(n5(E zcE{rt!(k=UR;!n`PR5oL^8@{tzV*%d{$jk?!&vz6%yemH?(y&3UYVW4BOupT?1^JT z!h|gIDv(hslE1k2SE`lEPdxf4dMIq(T%^xzSW{U#xaypzWt3#r8Y4gt2fgC ze$5n68(P|0iMFE#Zc)K&89kV1ysb<2LAjbur2OYFgh!9nmBB^CAQG< zV0IZ}*|FTUvG$t<7@NN-M+JHyNx9%Q1CL}EKJ}>qu>zaW8~J*SK9IwTaAs%tlNi=- zK?;ymwDT1$sS3>FO5bYC&CdXXr&|qR@GyJi#N&L|m2pxY6FVzZX$3YYvTj-jQv+HA zzva#f2fVB~XY8KUnrRiKhBs`B8X%{9&K&Kk*rW)Nx}8X}PHC<0A>@T;^l)yj{s3hf zOS^Rpc0+wc9?K7vt!_o^D$7BaEn88V@7=d|2TuXk%<>7Fv(MZBQr-R3;~4sem#>Q_ zbIJbG)7fGsKfu?dgU}ry3tFOoFnMLcE3$*js?oD!$?F@RIQ^^ic_L*Vp;ubsXBRG zq8f14;@d4Yu9x!ZN1 zo{M5!T5qFhUY~k!{`Mui1$m=2jZ(I!9#k)zCW!KML8AKcRL|v>YUk#Z&LPS(%E80Y zvvZEdbi=2D20C~9$&iM7cfmvXIm$TlQTQC>-Q=zYx*F(e;HA|-XM7TjNIN4I#&|B9 z#yP=Z!wybL(JsaszK|MVIuMd#3=}bl)bmq$WoF z8qLV5SOEI2IBRpBy`3*OKik_I>+hS5#SZP;S7ztTLx`Z=C{>p3xmcNfQDK5Wfu>kCnooK%i=` zu!<5Mu&~wI3RnI7KWFN%D|>Oc_LNDH`Z4sxFHn%8ByCU-7?zz#(+Oq@TI_?({x5?) znPTtqjq7{*``G6MR+FP+SiGz3w#uwQr7kaMHvOVvCa8c3zy|b&B8bMOGgo3i=z}|+ z$Pf1SowJptXnc2t<+bb2-BO;J8{f6J4!cUZS*urNz>VjWxs{S*a8p)AM!aT$uLGCF zU6yRjrfOcQ;lnFt0@UCF1k_J-1lSZwBGC!VRoSe6))#1W6t9oivMLqDHha_YbSlSZ zjeBxSPG1jDFDzS{&gTG%ICAfMd`D?=x^!p^_=<6u_M^8UmZD=YKl$&*=C`OS0kB;KdE zt1<-ORj>5F)zosTn)<14=r&Q+&i>CD}F~D?#bsOPK zZh$~19v*=aG@CY|0Y>g>W-Z#*$d~-`53Xh=DEkDpm1booa?PurL+&0$T~99=uiEd<}**N!zjiL_M~20?S{Fn&Fk!3Rj3{2!JPz` zsb%D$*(xs|Jr%{3LIEW(eFq~?`WEigcrr9~CIF0^x-q+D(bQC$A5FyB73BDF)rR-9 z{;t06o*Hm^jSr_;1suS*SNm#^4A4jsJW-N|16{0DCoBhblx;K#a5%t5a}l18XEi%9 zDPS{bYQ_*iV!>dW@u0se>|l@b@20nM?a`g;e%*abWGA&FmI4W`sQ;I&c_!&N&0Wh_tPLwe}NdSZuk35Lo8u<)ZxIRWzcjCywPy#cUKM!{NrY z8|(!#+T04*E2Tg1q9InnlA#(*JaJGKG#Os=8{*4!)VuT1#ay*~{Me~XsT>sIY%%}L zi_f#UWsnVejpk^3XM~vA*gfN;IOOcJ!>Yk5h-xB$MjI!TFw%Ao4A@Ofk{1POkSWvF zDZ+8R#ZVqO)&7_s!;jz}D2;ua-HLAM@6dRAezg=7a@8}Z(C(i3>WguqzHfjxdu;fH2k=E^1(bj1*2Rsnj50z?AfB)!(a8%=VfkL3bwFk#zZ$pdiE@c^{! z9z8I{vI?X>3HqwLl9DyUFsG>+=)kdnw*U`C(=>x|LW6Y&3D6e{-#oUz**vSGndwl2 z;kH`U0rA5OrteJ22%BR=4ks8$iyw9Jv@8|D?b(Af?bQ@_*8w$qGsvpd5Iz)y+f7!Y z0A1@rtlyFTnv00gw@On;Q`e8MjQIdeUF8jKwIVm}PG*4=p;?M_?%oHUUqI6_@ir_~gj6Uxi^w)P!zGz4MXb}QhQ_TVG2@)DyK4frD^A9=m{&hm-*REsM$>RA zQM;SUfv`KMC;?|)?qXc7Xaf1s8UFy6}8@7c(F4QqJd{-W5MiOFWI)<<`aA zFV}9Gd0EYeU0!#d*YwV(ap80_#WeQwwU|#iPtAqh-Dz9gd;ckkv7Yk)UehN(omY47 zfL*~qAk!Bc{RIGERmgRVX_N1*BJt^KZ||MO^+Ey*2`nV=s~}UT1i!mpp?c zeh*;TKE}Ws&Dq;)k@2;A32TVyV4*0AjzF&vod_zihSeyVqzy1-APF!qV*n2^=;m^0 zee18hR9vdR{=M(!%jN8Htv?$5`hyQ!?aqyxH^;+KE{hFpt`HPKv8?$-hcX;%AlPcR z;A5$TS^=xui0ZJ5Vv~_teFhP2apTS%jdk)kUJ^5Kh{39AX&*L20zev7%TSx+ z5Gz}Ts%FoNXJ&AMpn^6i5(N=~LMkef+O;%)Mn%-9JC}C2)Vk8(SJ40%zmLk7b-#FM z3UGX-^`zb?iTv>F%P$o$er6|3HW9_~hKGx;RhP;B&pv+iL&(KmHd?i{Jj&f5qC`!g3v7F_q=zq}#i=cBs3xbMu$K zMH{@`!y7kCaSaAzA}VYNGNMUk7L7wLVg&LCyMd;m1XYzGstv_m|Iu)PLvjNL3fnU; zK?lI$8St$|9|LSvOJOdqJa-Ze|4ZL^GhZqcN@WtFk#6s_e)13hy~D(WT%0b0L>IwYCyui`jgx5M`hH%B!8t z?e{NT?W68SUNC^y>p;3Sz+`|K00AUP?QCVNk4rF!x=%W4HRM3~lx2cec12lg*R-U? zl@~Jy?0{;^!+QwJb!xP)wn>nD1|dlEfK4MqPJAm39Ymm%xQN*diZCVOD3qml6AR~z z*YW%wHr{Zm`>wSmVeBs;gj+J@)>Fn!z$R-fQ6>VM)VZk~8)=P_4)|%O-@_>SWT^@y z&g0fCGs(-WdctNnN(o1LW(De*_ubfwzTBQW z|7IAmY3T~n8HWzPfd0Q;t!ATw9~RkE%e*^js~adFG@x?6bjT0Or=NKd1Bfb~h;q2S zUc9TxV9;$d1V#imWU*|WN z-DuhD_r3StV^7gms|EZ!ckUeScG>?HN?Y68+`V@7Dk|ALx>o$0vjYLyECccN+@D(psH*Z`A-`=`&YlKxilK@e4?(8`@ zsgzYpquJ>7dlxTUd@M#P7cQF3Dbbtt)qxvhE`G)&3EUH*XNf+U8eO}5_dh?J zn#<#8s_S!@cHPB07@5Xf)I2B7tlGuQr*tv*f>;N7r!Pxs{@vl?=OOF#&hB4Fa~|-| z=W-mnH1qK;zl(Qgi(#fie|bmI*H7YGv+g&;fyg_tIdSc?fCD8qdG5C6K8x6YvM)lO`{(BAPpQT| zPzSQ7b^rDLQ|Ldsr*Z#$|H&z(v(li{X@UqL0s9)J6zyfBPXI3l8oQyYU`hP?7+%KA&`F)~>Ony6-3BZ=#yh&^~Rm14G3JoV;l zg<9>zS6;&6x8Zy1!_M`8zS!?4J6jEgO<4c|Dm#tRy*|`5_GeHvRu~OQwF2(yGmSr) z-0t_7QOAhd$0BhfKS`2~%nK)(L)vZ9&@VKs3VM~o95s@asqX6C%rZ<1YmCk2Ghmt^ zQ!S0FrAEIy=z1j&GhwHEA%R}*d>+Y1Is^p*C-ZP3yK1eZ6%A3-R}}G}qUNkokMutv zjecJ1UEAZHJO;5qvzR;d^7EzT+6!O#N}SKL)VbH_Uc2}~XQz>T_zC*!%-WhC=E@%1 zQ$~F@y7V$Vj3LE_*hkgP5AO8UA)bnNaPUKMgKlg4$AABya+T88{^|$C8rurjbAJ8B zl^Uq>S$rn%G=BTzpY@xq_GS~<>9uXkDBoP#AYnAaDAF0oatn=X7iY(rVvcQSGfB5g z*>O>t+cup8NyMxw^@ALcHPaoUk75g7t?Qm(n2g%9lnYCRv)_2DP_G_-@hmVn8*1St zaK6)Q{rn$(2q&Y>rk@PQ+cK0kogBb>q^&BMngCR*#gQEV8>$-fGKW9|d%aGk)6SsK z?)TsM)vt@y@*CfLqf#lYuD;rBcXl>6nj2di?|wYSX?U}X-Fp#@H**>2T|syb($jSM zVpA=6H?(I`wax($R68;!0AfQOu7>APLA0(NGwe=1N^rX72Tidm4^=dIR0Oc8Y3!tc zx`Y7d?!oiGU7HqSwn6bj7T{(wXvz@WPA+2mYjm?3%c8rJ{!$Mk2L3Q2?%~>=L5v@` z>wK^af=X*H9&eB3FM53vO!b2R06+jqL_t(67~BlTz~EK%ZJvL~*ZdRfsO2o0NgXOA zBi>2RM&n$=Rnf$N1dLrhFlKq7iW7E#M55rf`kb`Kv`RV&VtFJtravgcB_S0d4myKG zYVR8tMdD+30*8Is& zeu4$d_rCKzKqPI)@_lE`!1Ig_b!&4I2zvYWP4*Ca_St7O5eDKaA|Hy$b zF~5KB_h@n7jNgPADhrdiX28yQyRi*aURheAA)2ig&AwD)=U#7h?a&|@d~)$)imKJ> zIA^ZcYua@-ifL9oUXr^>UfqqxcKw0iG=8p4=v%t6@8e#O?E3IL0Y@|K1oqUsyY~(~ z=3}VNjL3ZagTm8#S$*vRa@k${e6AVUJ%N-%i@i6OqcG2v%RZmWV%QLCcRjYddrz7@ zCF|0qnPdDuX}lLIMj3 zJZ=d9@!Tknv(vX|pgJ8?xB;j;3+CyDMkUw{5-=k=t~9tbQ)hI2z%9<2r(@_s7&o*E zv!4&~Y)1rSVr3db_G*cRo$=AbxoYL*fAw87f#K>BcA>!6q}gk=+nCz5b~2NLb$))ohmI>B2zWD~XROh~ zMUk82Q)N_nP47a)d_8FZsx*Kg62pC_)Rep6ZFbg;g4I(e{cO$TUv_pM^J zg3hGZ>E8I{GO+NEzyAO~US{?g$Rc(y4u>Pgo=gi^gFws;-2oZWC(FMR9AblsdoYYD zL9c!JR2mGr06zR+X;4{25y*-@ya#0tKX(QxojQA_-|l|&FTbP2YoA;hvVYK>JA&Mu zF4$pYJ8F)YtuVPT`j_D&Xrff4eY=6-Vrh(7e%%wW5w>DIb1ZMs)g?cUs)rBfN~QB( zdnLzypsPTz>^QI9g34<&80_4*iJrFi$BTnz+Z#%7m243?c19fv)F2UY!ZG60PmQkj z!&F%nmaVdo6z5)oVAkJ%e>)#T1&#MJXPyP@eEnPB?lf9IYV$&XgaG`!HlMgGJ{B{j?O3EG`?j+BW$WC7g`OVZ!^b6pV@ItC-AzXAq=4Vqe|Iq z3;~BgAq>@coN$)CwtLp#9nNT8s!3@k6F24WG{A07Ox&o}VvZ+62~A=G*%FuD7QAid zz(p#_G#`Hiamj4eQ)m`;Lq3y|d=T*TXvH^jwM4*Ups!NfB|V4qbOfR(Sc1^(Mamn- zD5@9+7M6j#T)Lm-wo^)IH-eB+v)Xad>-K)}i+@BN_cwp@H`QvjTq+YjdGaJk^Pm3d zpRmP0w6cou);BlN+`jzsD*(mXQmxzRe)!>sfXth>ZnACc$y29LelD-BKoGR4Nt}1y z;e6=O3R+f_w6J;e=1nxKo12>e%Wr+>+u+PAm#?50X2YQ%0qF!hSYLnh>pYhyPMm<+ z;iE^e8Tt9o{;|<)?d&wrvYvnbJiT#cc?IB&J{%tI++Jsr@!GX(!0e^v6=0|yhslIh z2sHCw|Mg$vD1h4WqF|?4)A3dSz1-#TfAPf^;T9%I4{`32m$zIlALD8PV-)J%Rcc>qH-_;Z~CJ);Q7*cCL4?n@ixa+49V zZfMxaAlI23i=tr)G=!laVSRWqDwmGD{Cr$46^|VSASF>2>~d#&D`9-smto<^quPB*T&zty^h%+$eGslfWD*+1=oRDRFjo~2A1t}#%P?o zP-Dz5hff3v+!_gH1^&6A zTnw54)Eb-P>RBC+%oqbB4K4azs)ohF$*;bEZnjXVvFLX=81&kmYaf2Z_C?)0TbK+= zsSH{0`%uQOLLi!)HbRiICJ{l@m|}>kYM_qBnVWzorN*K-K}Dw@o^8M_>+5%@Zl+R0 z56j3MMef4!mdKBXUztv7WfT}7#rWV-! zGJd5{`T*`>m&({*R#uj&OL=)YjN|1)YjG~Oa`Y%_rY?v)>2-Ft=rd)sMznT+IA*~% za|%-SLRQ**^(!6jtciG&tAG=csr2FBTF#~t`lS+E;1ri@wL+xy=WW>`G&~dZR z7WN3B0}v;WlD1ZVPsWln0XW0ZoihsoxOOJcWab8g7$oWJZskInD|2r)kd3x%z{zIT z=wcIr1AXa;dg{ommc>3-&8+Dh2e5H6WTqXqqL{u-CZ0Yzx76GCAle)aBPforIq;W! zJQ4Xz*_a8Fydg#N+AU=$g2A*KuBE@_8PxNlr9-(N z45Y~m-YW=pE|p8{-IgN_dRM458%_KjG+GT_f#*(~DHaN-Sm}xc*a-LVku`c5Qx(`3 zU%qq+9WPoUaUbzb8VyOslr*Q5XXy?9m{c1K_P(vr5&4x#h93@SqTtyUgM;^y}HI^pv#c3gd zFG2#d=X@4WsXPvRBJ6Ep6K`JxC;Kd80f0YEQ1kEePfN>vd-d%j-6F}CLjrfb2p&O| z57<2)0S8}hk{X*&M~k~{ZG(K`8A}Ok7!q;n8c>Lh6qQRVDNCbtavbH$hqH#-iq%-1 zkA}IP)c~JCKZ+!_Vy%_KVsY)OFSD=jnXkPPE9C)e` zJP;E&+|mG+A-w6MO!Gt#^^$mC49lHXp2pdK2+h!D{-&8{@SqKUO0R^b91}Bvvc#K zkGstld-EzAd4RLnYEvlt;^GwvZCI3>6}0YB9Wh z^(v#zq`1ZIGQo)xaV}mvd6G;^r;cKieErTzwq5nE-(>M(|JLm>zQ;CpJRo#CVLBnx zN`$^d)(=WC8tkB))3!tf7M^Ck!)y3+UORRab=GRN9*5ydc?phaYJA~r-niKxB-`CC z`myr4=VW_1vL&WWrtlNygI`q;*5xit9SRYvI&?tQ%hjF2B^s-|bn-Nbu29-zb>Fyg ztGC_Qs4o?IP#G2HeD zBkN3$b(k5i8|5*I9y3KjU$uS73f6zA0{k-JL2qIYVaG09JEqmatzW5NCm)4U9<1r6 z7Z!h?lY~w+jpF=mtL}Wn-C^B!a!(Ul-K`O338{2?&=m;TTWiXXORx7BA$w5G+}*(Z zp0Y`hQlATm-i#JK4r$fu70}(S+qW@Yp*a9}m#uu(mQyY zACIX!6pkD|LiqBPE0l{eoDx@8mzh1=Sl{5x;sjcoNdeM?VF2_!cJvs)yIj%we-iLc zGP9CBtzflUoE8#z%o1=<{p^MCn7MJqF97fp(F_YF77|!U;AxbA8(mKUg=*kl@NQV@ zUis-+H>Bw0tPwIP(Cz{sr5t6#hUA%c69mTcvTYw@4d<=|O6P#n5<6SYvKO}u=lJ$080xqL1X`~{%!Lu1K^5n)I_hC%~YWt1$e1cXMB2@|-s(rp1? z%va56wEzQy;$i_EQ1;|nzE*kt+uto#%JtPMJT$kr+l|K0{@Z`=;%aqc2T+&I=7|@U zrzj9Cx;rE#QShTJ#5xREEmaxxO<->!Nz=`f%ecgVcHoTw(?VJ0Ai`L9>%u4P?VTHU zw#ohO+F@MWJbV6Z9<9{rW7%B9HbUr=kH7Lfh4mV&@EuK>7*S7_##ya1ZuQ{}pIa0e zmWyoN)GLMTW86i0Y)MtfF=&@NA2d$u%~5}F>B5D6r+4|n$Nf%c`neT2mm7=nhE(jNz1>Rq%D8EAI+ z6~`Rb-zb6`sRr2aAPbyzc=G*aS-FtGfTM%%7mR}AD_DtT-V7enjEJ&u2#6}1U07Iq zj`7gi(@Ie(@XkwwXfrD9|uURKxvsTE;xjGX`lpv#M z0eh;)nO;CKS=oiNiImvTG60i{@#Hvh3|TMLL_vDMwK1NinMU9J*Hul0eCjcuMiQGI zbcpHU%1$|Ox?(O;J|wwRbZL5PB31dGgE)H_Gd_CJD2`uy?e(3Vop;{(E!(rz>UC~z zZ*2o3!FcowmeCS^@7?#9I{Ul7`#X>-idWuy|NpOlef!SsYQ0vgR$qAG1?ccxqfotm z{TlWcXo&%?^`$ymR8T8k%3Pl*m5WTXT-n-00juXcYb%F^TUAqVGL(P(lOJ;z$O`g( zTKNRGGwrqg%Ibk^b4U&jO4ueEcy)SZe@+#UB`@m}xYgv=B*ub9;;Q%PT8! zlskF6LbqwM1G(>SZg1ili!OtKbg5L}Ig)yLaV#XTkih;VumHgOlhY#ALIMj3EF^G` z1Q^roiPK7D z1!fI)I@duq{%4V-28W)Hc`mDUlv03pJjn}?!lNnxjv;ezz#>i4%}t@NDWL!us<+0% z>}Lz;0SUn+_OMu;vhb7DyEtEtSvMC3c<%y}Q6$)#T`@@-8v+I=ksX$SyErkDCRr%K zj9noLFhx6>GxUpLcvwAsDp#*P|F8c76Tm_~hl+=dPzL?}l}`jphntN|yCb7zpx{U# zGspshC=-<;M$EEw2CnmiKMmp?_o^v~MF2*z>~V@BPiq_*bB;0Yh14ivf8bn!5itsO z7N~XxnOk>IT6P<~ZV>$Ly$|s&mOXaZ&&T2Ml?aDbufD_vMdf-8%Dr5N*@t{Kk68V_ z6sJsqP@X>qyR%hqqtD{bDaP1Bb$ws{{TG2_T#e_&y zID9)b{MNXKR(((pQ&2$k`wQ;$pN6%*M49YjIu8S+$Gp z#^3(!-*WfYzy3A!LF068wmuSs4td7e_Nm9i^wLW&kp+gSFB>L-$j>}`hMsrj+BIx> zaBzj1Iv?c+-T;Ts(63gi#N4=Xor;V`N020t9smqktzW;Vl^s8e^Fjg(3EV4z1pvNR zCX1Mb1QrrlNZ`N{(7jc{k^{^)Rs;?{~Z2)$At(ab{hjcw&J+>$zV7_>4Ace6>1d0uv{<=d*rU;cH>r#Mn7{jVEsX#C~{+pzA1tXA%1#N;p zY`lc_vRslosB$4J4%VFp`^e~=eWINpYBNg;6<)do3x3o5?l!qay*3KYwpoc)> zFe;6+ai`g4f2^HuJIfpZmDiL_)~^>{|3Ck7+)u7vxPa@g%kO`XbUMlArj`Nkw6J7N zx_$bKdXc;(3-D)c8ig`7ub?^`wt@-G!MHA_2^Zxs&agNph5jqOc(y&Y)HEbuSq#waI*@OP?(Z2T{X3{vXoB&*wI5kPt_C3 zh19pqB#EmL_0+z>7)OuUatT*nJf5`4O;o=0nyW%8_`yHyqv?o}x_e-=l&K2*@ zTG)pS?R9ERAPv zEqQU5#j}RfDPSrv7&zK)w@@s%nr$v2%NdMK;=lh7|AF*h`Px@8Y`*x(CqPz^HTv7H ze&tnK>dMt?m_6UQeM`GS=d_{G2S)kjmtKYkxvI*BSYN{x#c`K%Nl&G4jz!}mvtCzQ z84V-eOFUr6V7$Juf%bW0YYVQ{4jqCMwBMjvrqQS=MFXW@d*k&^r+w-2WvFf9cOc^( zI=qHD8l5vH&=hL#6ZM3J1{fhMj)esFDS-t5-lw1z$sQyD_a%JL-OnC>|L^K&r@NrA zkich`z}>ymt~7|XF*Czz0*afanvVVC_Lu=TE|(ZV0tFeO3tTZ$26|*OOI3zfC!TpW zu2w6ry#x#%RI6atMytsnZ)balp;ZnOTOR~1LO2c5NStC+oXV1JOMh(W%;=Y)Hu#3K z6m)irGYN%`1V^3bj&VJiMlwWYpeld?3{Wbe0YFGPHrL>eblj&D-O-iC?u0cUrd)vv zr@tD=?J~;EV5luWhGXf#pvVsZg6*fa1(K1jn1!CBC2K{&He`Zu3bCJytEWzcg+lGb zktm<9pFF|3ORrW!%XnvdgN36kti^V44Xw^-jL9JKnMmh{))^AiPi4*@D5ojXz+qZP zRl}-4ogji0t|~Xq;4hkLv$T%eL)w!7+Fq1-LZT?SbvBt}eTXEzSO(@3Ey@=13;pb< zK8|ven0W?NR>_rHEImZ~r~1d3#Ilc&ib3@xhN?xcQYpR+a0n+cQw(XF4>&6#-yFV+>ugeo!gl(kVJ|BwwkV`^Fnlwc0#;e3T70 zI{i^H*lsjNEC_3K87kFsB}y6e06!zlF98u6{lJ0afiN7vo7rdbM_!jGR(i7;$3hqe zcNv6g)Gv2E21JQBl)(U9V|*=GCEgINEuSABG?R9tt)4W&|#r0KQ?D&VVs<3QI-Jt%=(vU0IRQ*z*K=MyMHDa17m6; zYOKYflSmfCXtT}y8x@O*h#{;Dh50ei6%8Y!ls>w9?&6GwGT8wK1@W>U7lIhe;*c$q zwpy9(Mh0(K%qrxIaK++YYpJ0CFlMm>uQK!t<1o)kLqL6NkZC3ukE1P;hiDiU1JKri z20O`&&>m~+T7;>edQ>%{{5Az#NobPHd+>~aha z=O;UBqo-2klL+3BFx*k7re^drTq;bfl-A3LrKWmb_+!dWT8AKap#T*U(@7!YFgrbx z44ScVx6{;G_)acsW6Bi}f*48YAmYUOwyu?ipY>0h!y$+fzDl!BDm}T-I2AsD?S|>Cxx0$xWb{45h(en5s{6GT|UvBB}?;Rh


    i*w{%gvrDtL#!)t{`Oq1 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%0DC8Oq?QSXOqy=ZhQ^$*H!0F@OlNgmEX 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%0AxZtm6W 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" - } - }, "node_modules/@rolldown/binding-android-arm64": { "version": "1.0.0-rc.9", "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.9.tgz", @@ -899,6 +883,16 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@vitest/expect": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.0.tgz", @@ -1563,6 +1557,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -1570,53 +1565,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/playwright": { - "version": "1.59.0-alpha-1771104257000", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.0-alpha-1771104257000.tgz", - "integrity": "sha512-6SCMMMJaDRsSqiKVLmb2nhtLES7iTYawTWWrQK6UdIGNzXi8lka4sLKRec3L4DnTWwddAvCuRn8035dhNiHzbg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.0-alpha-1771104257000" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.0-alpha-1771104257000", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.0-alpha-1771104257000.tgz", - "integrity": "sha512-YiXup3pnpQUCBMSIW5zx8CErwRx4K6O5Kojkw2BzJui8MazoMUDU6E3xGsb1kzFviEAE09LFQ+y1a0RhIJQ5SA==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/postcss": { "version": "8.5.8", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", @@ -1805,6 +1753,7 @@ "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" @@ -1846,6 +1795,7 @@ "integrity": "sha512-fPGaRNj9Zytaf8LEiBhY7Z6ijnFKdzU/+mL8EFBaKr7Vw1/FWcTBAMW0wLPJAGMPX38ZPVCVgLceWiEqeoqL2Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@oxc-project/runtime": "0.115.0", "lightningcss": "^1.32.0", @@ -2017,6 +1967,27 @@ "engines": { "node": ">=8" } + }, + "node_modules/ws": { + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 1dcfdb1..e423014 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "browser", "web", "ai", - "playwright" + "browser" ], "author": "jackwener", "license": "Apache-2.0", @@ -45,11 +45,12 @@ "chalk": "^5.3.0", "cli-table3": "^0.6.5", "commander": "^14.0.3", - "js-yaml": "^4.1.0" + "js-yaml": "^4.1.0", + "ws": "^8.18.0" }, "devDependencies": { - "@playwright/mcp": "^0.0.68", "@types/js-yaml": "^4.0.9", + "@types/ws": "^8.5.13", "@types/node": "^22.13.10", "tsx": "^4.19.3", "typescript": "^5.8.2", diff --git a/src/browser.test.ts b/src/browser.test.ts index 31fba4e..ca679a5 100644 --- a/src/browser.test.ts +++ b/src/browser.test.ts @@ -1,14 +1,6 @@ import { afterEach, describe, it, expect, vi } from 'vitest'; -import * as os from 'node:os'; -import * as path from 'node:path'; import { PlaywrightMCP, __test__ } from './browser/index.js'; -afterEach(() => { - __test__.resetMcpServerPathCache(); - __test__.setMcpDiscoveryTestHooks(); - delete process.env.OPENCLI_MCP_SERVER_PATH; -}); - describe('browser helpers', () => { it('creates JSON-RPC requests with unique ids', () => { const first = __test__.createJsonRpcRequest('tools/call', { name: 'browser_tabs' }); @@ -57,220 +49,9 @@ describe('browser helpers', () => { expect(__test__.appendLimited('12345', '67890', 8)).toBe('34567890'); }); - it('builds extension MCP args in local mode (no CI)', () => { - const savedCI = process.env.CI; - delete process.env.CI; - try { - expect(__test__.buildMcpArgs({ - mcpPath: '/tmp/cli.js', - executablePath: '/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', - })).toEqual([ - '/tmp/cli.js', - '--extension', - '--executable-path', - '/mnt/c/Program Files/Google/Chrome/Application/chrome.exe', - ]); - - expect(__test__.buildMcpArgs({ - mcpPath: '/tmp/cli.js', - })).toEqual([ - '/tmp/cli.js', - '--extension', - ]); - } finally { - if (savedCI !== undefined) { - process.env.CI = savedCI; - } else { - delete process.env.CI; - } - } - }); - - it('builds standalone MCP args in CI mode', () => { - const savedCI = process.env.CI; - process.env.CI = 'true'; - try { - // CI mode: no --extension — browser launches in standalone headed mode - expect(__test__.buildMcpArgs({ - mcpPath: '/tmp/cli.js', - })).toEqual([ - '/tmp/cli.js', - ]); - - expect(__test__.buildMcpArgs({ - mcpPath: '/tmp/cli.js', - executablePath: '/usr/bin/chromium', - })).toEqual([ - '/tmp/cli.js', - '--executable-path', - '/usr/bin/chromium', - ]); - } finally { - if (savedCI !== undefined) { - process.env.CI = savedCI; - } else { - delete process.env.CI; - } - } - }); - - it('builds a direct node launch spec when a local MCP path is available', () => { - const savedCI = process.env.CI; - delete process.env.CI; - try { - expect(__test__.buildMcpLaunchSpec({ - mcpPath: '/tmp/cli.js', - executablePath: '/usr/bin/google-chrome', - })).toEqual({ - command: 'node', - args: ['/tmp/cli.js', '--extension', '--executable-path', '/usr/bin/google-chrome'], - usedNpxFallback: false, - }); - } finally { - if (savedCI !== undefined) { - process.env.CI = savedCI; - } else { - delete process.env.CI; - } - } - }); - - it('falls back to npx bootstrap when no MCP path is available', () => { - const savedCI = process.env.CI; - delete process.env.CI; - try { - expect(__test__.buildMcpLaunchSpec({ - mcpPath: null, - })).toEqual({ - command: 'npx', - args: ['-y', '@playwright/mcp@latest', '--extension'], - usedNpxFallback: true, - }); - } finally { - if (savedCI !== undefined) { - process.env.CI = savedCI; - } else { - delete process.env.CI; - } - } - }); - it('times out slow promises', async () => { await expect(__test__.withTimeoutMs(new Promise(() => {}), 10, 'timeout')).rejects.toThrow('timeout'); }); - - it('prefers OPENCLI_MCP_SERVER_PATH over discovered locations', () => { - process.env.OPENCLI_MCP_SERVER_PATH = '/env/mcp/cli.js'; - const existsSync = vi.fn((candidate: any) => candidate === '/env/mcp/cli.js'); - const execSync = vi.fn(); - __test__.setMcpDiscoveryTestHooks({ existsSync, execSync: execSync as any }); - - expect(__test__.findMcpServerPath()).toBe('/env/mcp/cli.js'); - expect(execSync).not.toHaveBeenCalled(); - expect(existsSync).toHaveBeenCalledWith('/env/mcp/cli.js'); - }); - - it('discovers global @playwright/mcp from the current Node runtime prefix', () => { - const originalExecPath = process.execPath; - const runtimeExecPath = '/opt/homebrew/Cellar/node/25.2.1/bin/node'; - const runtimeGlobalMcp = '/opt/homebrew/Cellar/node/25.2.1/lib/node_modules/@playwright/mcp/cli.js'; - Object.defineProperty(process, 'execPath', { - value: runtimeExecPath, - configurable: true, - }); - - const existsSync = vi.fn((candidate: any) => candidate === runtimeGlobalMcp); - const execSync = vi.fn(); - __test__.setMcpDiscoveryTestHooks({ existsSync, execSync: execSync as any }); - - try { - expect(__test__.findMcpServerPath()).toBe(runtimeGlobalMcp); - expect(execSync).not.toHaveBeenCalled(); - expect(existsSync).toHaveBeenCalledWith(runtimeGlobalMcp); - } finally { - Object.defineProperty(process, 'execPath', { - value: originalExecPath, - configurable: true, - }); - } - }); - - it('falls back to npm root -g when runtime prefix lookup misses', () => { - const originalExecPath = process.execPath; - const runtimeExecPath = '/opt/homebrew/Cellar/node/25.2.1/bin/node'; - const runtimeGlobalMcp = '/opt/homebrew/Cellar/node/25.2.1/lib/node_modules/@playwright/mcp/cli.js'; - const npmRootGlobal = '/Users/jakevin/.nvm/versions/node/v22.14.0/lib/node_modules'; - const npmGlobalMcp = '/Users/jakevin/.nvm/versions/node/v22.14.0/lib/node_modules/@playwright/mcp/cli.js'; - Object.defineProperty(process, 'execPath', { - value: runtimeExecPath, - configurable: true, - }); - - const existsSync = vi.fn((candidate: any) => candidate === npmGlobalMcp); - const execSync = vi.fn((command: string) => { - if (String(command).includes('npm root -g')) return `${npmRootGlobal}\n` as any; - throw new Error(`unexpected command: ${String(command)}`); - }); - __test__.setMcpDiscoveryTestHooks({ existsSync, execSync: execSync as any }); - - try { - expect(__test__.findMcpServerPath()).toBe(npmGlobalMcp); - expect(execSync).toHaveBeenCalledOnce(); - expect(existsSync).toHaveBeenCalledWith(runtimeGlobalMcp); - expect(existsSync).toHaveBeenCalledWith(npmGlobalMcp); - } finally { - Object.defineProperty(process, 'execPath', { - value: originalExecPath, - configurable: true, - }); - } - }); - - it('returns null when new global discovery paths are unavailable', () => { - const originalExecPath = process.execPath; - const runtimeExecPath = '/opt/homebrew/Cellar/node/25.2.1/bin/node'; - Object.defineProperty(process, 'execPath', { - value: runtimeExecPath, - configurable: true, - }); - - const existsSync = vi.fn(() => false); - const execSync = vi.fn((command: string) => { - if (String(command).includes('npm root -g')) return '/missing/global/node_modules\n' as any; - throw new Error(`missing command: ${String(command)}`); - }); - __test__.setMcpDiscoveryTestHooks({ existsSync, execSync: execSync as any }); - - try { - expect(__test__.findMcpServerPath()).toBeNull(); - } finally { - Object.defineProperty(process, 'execPath', { - value: originalExecPath, - configurable: true, - }); - } - }); - - it('ignores non-server playwright cli paths discovered from fallback scans', () => { - const wrongCli = '/root/.npm/_npx/e41f203b7505f1fb/node_modules/playwright/lib/mcp/terminal/cli.js'; - const npxCacheBase = path.join(os.homedir(), '.npm', '_npx'); - - const existsSync = vi.fn((candidate: any) => { - const value = String(candidate); - return value === npxCacheBase || value === wrongCli; - }); - - const execSync = vi.fn((command: string) => { - if (String(command).includes('npm root -g')) return '/missing/global/node_modules\n' as any; - if (String(command).includes('--package=@playwright/mcp which mcp-server-playwright')) return `${wrongCli}\n` as any; - if (String(command).includes('which mcp-server-playwright')) return '' as any; - if (String(command).includes(`find "${npxCacheBase}"`)) return `${wrongCli}\n` as any; - throw new Error(`unexpected command: ${String(command)}`); - }); - __test__.setMcpDiscoveryTestHooks({ existsSync, execSync: execSync as any }); - - expect(__test__.findMcpServerPath()).toBeNull(); - }); }); describe('PlaywrightMCP state', () => { @@ -288,22 +69,20 @@ describe('PlaywrightMCP state', () => { const mcp = new PlaywrightMCP(); await mcp.close(); - await expect(mcp.connect()).rejects.toThrow('Playwright MCP session is closed'); + await expect(mcp.connect()).rejects.toThrow('Session is closed'); }); it('rejects connect() while already connecting', async () => { const mcp = new PlaywrightMCP(); (mcp as any)._state = 'connecting'; - await expect(mcp.connect()).rejects.toThrow('Playwright MCP is already connecting'); + await expect(mcp.connect()).rejects.toThrow('Already connecting'); }); it('rejects connect() while closing', async () => { const mcp = new PlaywrightMCP(); (mcp as any)._state = 'closing'; - await expect(mcp.connect()).rejects.toThrow('Playwright MCP is closing'); + await expect(mcp.connect()).rejects.toThrow('Session is closing'); }); - - }); diff --git a/src/browser/daemon-client.ts b/src/browser/daemon-client.ts new file mode 100644 index 0000000..d7810cf --- /dev/null +++ b/src/browser/daemon-client.ts @@ -0,0 +1,89 @@ +/** + * HTTP client for communicating with the opencli daemon. + * + * Provides a typed send() function that posts a Command and returns a Result. + */ + +const DAEMON_PORT = parseInt(process.env.OPENCLI_DAEMON_PORT ?? '19825', 10); +const DAEMON_URL = `http://127.0.0.1:${DAEMON_PORT}`; + +let _idCounter = 0; + +function generateId(): string { + return `cmd_${Date.now()}_${++_idCounter}`; +} + +export interface DaemonCommand { + id: string; + action: 'exec' | 'navigate' | 'tabs' | 'cookies'; + tabId?: number; + code?: string; + url?: string; + op?: string; + index?: number; + domain?: string; +} + +export interface DaemonResult { + id: string; + ok: boolean; + data?: unknown; + error?: string; +} + +/** + * Check if daemon is running. + */ +export async function isDaemonRunning(): Promise { + try { + const controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), 2000); + const res = await fetch(`${DAEMON_URL}/status`, { signal: controller.signal }); + clearTimeout(timer); + return res.ok; + } catch { + return false; + } +} + +/** + * Check if daemon is running AND the extension is connected. + */ +export async function isExtensionConnected(): Promise { + try { + const controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), 2000); + const res = await fetch(`${DAEMON_URL}/status`, { signal: controller.signal }); + clearTimeout(timer); + if (!res.ok) return false; + const data = await res.json() as { extensionConnected?: boolean }; + return !!data.extensionConnected; + } catch { + return false; + } +} + +/** + * Send a command to the daemon and wait for a result. + */ +export async function sendCommand( + action: DaemonCommand['action'], + params: Omit = {}, +): Promise { + const id = generateId(); + const command: DaemonCommand = { id, action, ...params }; + + const res = await fetch(`${DAEMON_URL}/command`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(command), + }); + + const result = (await res.json()) as DaemonResult; + + if (!result.ok) { + throw new Error(result.error ?? 'Daemon command failed'); + } + + return result.data; +} diff --git a/src/browser/discover.ts b/src/browser/discover.ts index 1a51fb0..ea269c7 100644 --- a/src/browser/discover.ts +++ b/src/browser/discover.ts @@ -1,241 +1,27 @@ /** - * MCP server path discovery and argument building. + * Daemon discovery — simplified from MCP server path discovery. + * + * Only needs to check if the daemon is running. No more file system + * scanning for @playwright/mcp locations. */ -import { execSync } from 'node:child_process'; -import { fileURLToPath } from 'node:url'; -import * as fs from 'node:fs'; -import * as os from 'node:os'; -import * as path from 'node:path'; - -let _cachedMcpServerPath: string | null | undefined; -let _existsSync = fs.existsSync; -let _execSync = execSync; - -function isSupportedMcpEntrypoint(candidate: string): boolean { - const normalized = candidate.replace(/\\/g, '/').toLowerCase(); - return normalized.endsWith('/@playwright/mcp/cli.js') || - normalized.endsWith('/mcp-server-playwright') || - normalized.endsWith('/mcp-server-playwright.js'); -} - -function resolveSupportedMcpPath(candidate: string | null | undefined): string | null { - const trimmed = candidate?.trim(); - if (!trimmed || !_existsSync(trimmed)) return null; - return isSupportedMcpEntrypoint(trimmed) ? trimmed : null; -} - -export function resetMcpServerPathCache(): void { - _cachedMcpServerPath = undefined; -} - -export function setMcpDiscoveryTestHooks(input?: { - existsSync?: typeof fs.existsSync; - execSync?: typeof execSync; -}): void { - _existsSync = input?.existsSync ?? fs.existsSync; - _execSync = input?.execSync ?? execSync; -} - -export function findMcpServerPath(): string | null { - if (_cachedMcpServerPath !== undefined) return _cachedMcpServerPath; - - const envMcp = process.env.OPENCLI_MCP_SERVER_PATH; - if (envMcp && _existsSync(envMcp)) { - _cachedMcpServerPath = envMcp; - return _cachedMcpServerPath; - } - - // Check local node_modules first (@playwright/mcp is the modern package) - const localMcp = path.resolve('node_modules', '@playwright', 'mcp', 'cli.js'); - if (_existsSync(localMcp)) { - _cachedMcpServerPath = localMcp; - return _cachedMcpServerPath; - } +import { isDaemonRunning } from './daemon-client.js'; - // Check project-relative path - const __dirname2 = path.dirname(fileURLToPath(import.meta.url)); - const projectMcp = path.resolve(__dirname2, '..', '..', 'node_modules', '@playwright', 'mcp', 'cli.js'); - if (_existsSync(projectMcp)) { - _cachedMcpServerPath = projectMcp; - return _cachedMcpServerPath; - } - - // Check global npm/yarn locations derived from current Node runtime. - const nodePrefix = path.resolve(path.dirname(process.execPath), '..'); - const globalNodeModules = path.join(nodePrefix, 'lib', 'node_modules'); - const globalMcp = path.join(globalNodeModules, '@playwright', 'mcp', 'cli.js'); - if (_existsSync(globalMcp)) { - _cachedMcpServerPath = globalMcp; - return _cachedMcpServerPath; - } - - // Check npm global root directly. - try { - const npmRootGlobal = _execSync('npm root -g 2>/dev/null', { - encoding: 'utf-8', - timeout: 5000, - }).trim(); - const npmGlobalMcp = path.join(npmRootGlobal, '@playwright', 'mcp', 'cli.js'); - if (npmRootGlobal && _existsSync(npmGlobalMcp)) { - _cachedMcpServerPath = npmGlobalMcp; - return _cachedMcpServerPath; - } - } catch {} - - // Check common locations - const candidates = [ - path.join(os.homedir(), '.npm', '_npx'), - path.join(os.homedir(), 'node_modules', '.bin'), - '/usr/local/lib/node_modules', - ]; - - // Try npx resolution (legacy package name) - try { - const result = _execSync('npx -y --package=@playwright/mcp which mcp-server-playwright 2>/dev/null', { encoding: 'utf-8', timeout: 10000 }).trim(); - const resolved = resolveSupportedMcpPath(result); - if (resolved) { - _cachedMcpServerPath = resolved; - return _cachedMcpServerPath; - } - } catch {} - - // Try which - try { - const result = _execSync('which mcp-server-playwright 2>/dev/null', { encoding: 'utf-8', timeout: 5000 }).trim(); - const resolved = resolveSupportedMcpPath(result); - if (resolved) { - _cachedMcpServerPath = resolved; - return _cachedMcpServerPath; - } - } catch {} - - // Search in common npx cache - for (const base of candidates) { - if (!_existsSync(base)) continue; - try { - const found = _execSync(`find "${base}" -type f -path "*/@playwright/mcp/cli.js" 2>/dev/null | head -1`, { encoding: 'utf-8', timeout: 5000 }).trim(); - const resolved = resolveSupportedMcpPath(found); - if (resolved) { - _cachedMcpServerPath = resolved; - return _cachedMcpServerPath; - } - } catch {} - } - - _cachedMcpServerPath = null; - return _cachedMcpServerPath; -} +export { isDaemonRunning }; /** - * Chrome 144+ auto-discovery: read DevToolsActivePort file to get CDP endpoint. - * - * Starting with Chrome 144, users can enable remote debugging from - * chrome://inspect#remote-debugging without any command-line flags. - * Chrome writes the active port and browser GUID to a DevToolsActivePort file - * in the user data directory, which we read to construct the WebSocket endpoint. + * Check daemon status and return connection info. */ -export function discoverChromeEndpoint(): string | null { - const candidates: string[] = []; - - // User-specified Chrome data dir takes highest priority - if (process.env.CHROME_USER_DATA_DIR) { - candidates.push(path.join(process.env.CHROME_USER_DATA_DIR, 'DevToolsActivePort')); - } - - // Standard Chrome/Edge user data dirs per platform - if (process.platform === 'win32') { - const localAppData = process.env.LOCALAPPDATA ?? path.join(os.homedir(), 'AppData', 'Local'); - candidates.push(path.join(localAppData, 'Google', 'Chrome', 'User Data', 'DevToolsActivePort')); - candidates.push(path.join(localAppData, 'Microsoft', 'Edge', 'User Data', 'DevToolsActivePort')); - } else if (process.platform === 'darwin') { - candidates.push(path.join(os.homedir(), 'Library', 'Application Support', 'Google', 'Chrome', 'DevToolsActivePort')); - candidates.push(path.join(os.homedir(), 'Library', 'Application Support', 'Microsoft Edge', 'DevToolsActivePort')); - } else { - candidates.push(path.join(os.homedir(), '.config', 'google-chrome', 'DevToolsActivePort')); - candidates.push(path.join(os.homedir(), '.config', 'chromium', 'DevToolsActivePort')); - candidates.push(path.join(os.homedir(), '.config', 'microsoft-edge', 'DevToolsActivePort')); - } - - for (const filePath of candidates) { - try { - const content = fs.readFileSync(filePath, 'utf-8').trim(); - const lines = content.split('\n'); - if (lines.length >= 2) { - const port = parseInt(lines[0], 10); - const browserPath = lines[1]; // e.g. /devtools/browser/ - if (port > 0 && browserPath.startsWith('/devtools/browser/')) { - return `ws://127.0.0.1:${port}${browserPath}`; - } - } - } catch {} - } - return null; -} - -export function resolveCdpEndpoint(): { endpoint?: string; requestedCdp: boolean } { - const envVal = process.env.OPENCLI_CDP_ENDPOINT; - if (envVal === '1' || envVal?.toLowerCase() === 'true') { - const autoDiscovered = discoverChromeEndpoint(); - return { endpoint: autoDiscovered ?? envVal, requestedCdp: true }; - } - - if (envVal) { - return { endpoint: envVal, requestedCdp: true }; - } - - // Fallback to auto-discovery if not explicitly set - const autoDiscovered = discoverChromeEndpoint(); - if (autoDiscovered) { - return { endpoint: autoDiscovered, requestedCdp: true }; - } - - return { requestedCdp: false }; -} - -function buildRuntimeArgs(input?: { executablePath?: string | null; cdpEndpoint?: string }): string[] { - const args: string[] = []; - - // Priority 1: CDP endpoint (remote Chrome debugging or local Auto-Discovery) - if (input?.cdpEndpoint) { - args.push('--cdp-endpoint', input.cdpEndpoint); - return args; - } - - // Priority 2: Extension mode (local Chrome with MCP Bridge extension) - if (!process.env.CI) { - args.push('--extension'); - } - - // CI/standalone mode: @playwright/mcp launches its own browser (headed by default). - // xvfb provides a virtual display for headed mode in GitHub Actions. - if (input?.executablePath) { - args.push('--executable-path', input.executablePath); - } - return args; -} - -export function buildMcpArgs(input: { mcpPath: string; executablePath?: string | null; cdpEndpoint?: string }): string[] { - return [input.mcpPath, ...buildRuntimeArgs(input)]; -} - -export function buildMcpLaunchSpec(input: { mcpPath?: string | null; executablePath?: string | null; cdpEndpoint?: string }): { - command: string; - args: string[]; - usedNpxFallback: boolean; -} { - const runtimeArgs = buildRuntimeArgs(input); - if (input.mcpPath) { - return { - command: 'node', - args: [input.mcpPath, ...runtimeArgs], - usedNpxFallback: false, - }; +export async function checkDaemonStatus(): Promise<{ + running: boolean; + extensionConnected: boolean; +}> { + try { + const port = parseInt(process.env.OPENCLI_DAEMON_PORT ?? '19825', 10); + const res = await fetch(`http://127.0.0.1:${port}/status`); + const data = await res.json() as { ok: boolean; extensionConnected: boolean }; + return { running: true, extensionConnected: data.extensionConnected }; + } catch { + return { running: false, extensionConnected: false }; } - - return { - command: 'npx', - args: ['-y', '@playwright/mcp@latest', ...runtimeArgs], - usedNpxFallback: true, - }; } diff --git a/src/browser/errors.ts b/src/browser/errors.ts index db41fbb..3df5e44 100644 --- a/src/browser/errors.ts +++ b/src/browser/errors.ts @@ -1,105 +1,35 @@ /** - * Browser connection error classification and formatting. + * Browser connection error helpers. + * + * Simplified — no more token/extension/CDP classification. + * The daemon architecture has a single failure mode: daemon not reachable or extension not connected. */ -import { createHash } from 'node:crypto'; - -export type ConnectFailureKind = 'missing-token' | 'extension-timeout' | 'extension-not-installed' | 'mcp-init' | 'process-exit' | 'cdp-connection-failed' | 'unknown'; - -export type ConnectFailureInput = { - kind: ConnectFailureKind; - timeout: number; - hasExtensionToken: boolean; - tokenFingerprint?: string | null; - stderr?: string; - exitCode?: number | null; - rawMessage?: string; -}; - -export function getTokenFingerprint(token: string | undefined): string | null { - if (!token) return null; - return createHash('sha256').update(token).digest('hex').slice(0, 8); -} - -export function formatBrowserConnectError(input: ConnectFailureInput): Error { - const stderr = input.stderr?.trim(); - const suffix = stderr ? `\n\nMCP stderr:\n${stderr}` : ''; - const tokenHint = input.tokenFingerprint ? ` Token fingerprint: ${input.tokenFingerprint}.` : ''; - - if (input.kind === 'cdp-connection-failed') { - return new Error( - `Failed to connect to remote Chrome via CDP endpoint.\n\n` + - `Check if Chrome is running with remote debugging enabled (--remote-debugging-port=9222) or DevToolsActivePort is available under chrome://inspect#remote-debugging.\n` + - `If you specified OPENCLI_CDP_ENDPOINT=1, auto-discovery might have failed.` + - suffix, - ); - } - - if (input.kind === 'missing-token') { - return new Error( - 'Failed to connect to Playwright MCP Bridge: PLAYWRIGHT_MCP_EXTENSION_TOKEN is not set.\n\n' + - 'Without this token, Chrome will show a manual approval dialog for every new MCP connection. ' + - 'Copy the token from the Playwright MCP Bridge extension and set it in BOTH your shell environment and MCP client config.' + - suffix, - ); - } - - if (input.kind === 'extension-not-installed') { - return new Error( - 'Failed to connect to Playwright MCP Bridge: the browser extension did not attach.\n\n' + - 'Make sure Chrome is running and the "Playwright MCP Bridge" extension is installed and enabled. ' + - 'If Chrome shows an approval dialog, click Allow.' + - suffix, - ); - } - - if (input.kind === 'extension-timeout') { - const likelyCause = input.hasExtensionToken - ? `The most likely cause is that PLAYWRIGHT_MCP_EXTENSION_TOKEN does not match the token currently shown by the browser extension.${tokenHint} Re-copy the token from the extension and update BOTH your shell environment and MCP client config.` - : 'PLAYWRIGHT_MCP_EXTENSION_TOKEN is not configured, so the extension may be waiting for manual approval.'; - return new Error( - `Timed out connecting to Playwright MCP Bridge (${input.timeout}s).\n\n` + - `${likelyCause} If a browser prompt is visible, click Allow.` + - suffix, - ); - } - - if (input.kind === 'mcp-init') { - return new Error(`Failed to initialize Playwright MCP: ${input.rawMessage ?? 'unknown error'}${suffix}`); +export type ConnectFailureKind = 'daemon-not-running' | 'extension-not-connected' | 'command-failed' | 'unknown'; + +export function formatBrowserConnectError(kind: ConnectFailureKind, detail?: string): Error { + switch (kind) { + case 'daemon-not-running': + return new Error( + 'Cannot connect to opencli daemon.\n\n' + + 'The daemon should start automatically. If it doesn\'t, try:\n' + + ' node dist/daemon.js\n' + + 'Make sure port 19825 is available.' + + (detail ? `\n\n${detail}` : ''), + ); + case 'extension-not-connected': + return new Error( + 'opencli Browser Bridge extension is not connected.\n\n' + + 'Please install the extension:\n' + + ' 1. Download from GitHub Releases\n' + + ' 2. Open chrome://extensions/ → Enable Developer Mode\n' + + ' 3. Click "Load unpacked" → select the extension folder\n' + + ' 4. Make sure Chrome is running' + + (detail ? `\n\n${detail}` : ''), + ); + case 'command-failed': + return new Error(`Browser command failed: ${detail ?? 'unknown error'}`); + default: + return new Error(detail ?? 'Failed to connect to browser'); } - - if (input.kind === 'process-exit') { - return new Error( - `Playwright MCP process exited before the browser connection was established${input.exitCode == null ? '' : ` (code ${input.exitCode})`}.` + - suffix, - ); - } - - return new Error(input.rawMessage ?? 'Failed to connect to browser'); -} - -export function inferConnectFailureKind(args: { - hasExtensionToken: boolean; - stderr: string; - rawMessage?: string; - exited?: boolean; - isCdpMode?: boolean; -}): ConnectFailureKind { - const haystack = `${args.rawMessage ?? ''}\n${args.stderr}`.toLowerCase(); - - if (args.isCdpMode) { - if (args.rawMessage?.startsWith('MCP init failed:')) return 'mcp-init'; - if (args.exited) return 'cdp-connection-failed'; - return 'cdp-connection-failed'; - } - - if (!args.hasExtensionToken) - return 'missing-token'; - if (haystack.includes('extension connection timeout') || haystack.includes('playwright mcp bridge')) - return 'extension-not-installed'; - if (args.rawMessage?.startsWith('MCP init failed:')) - return 'mcp-init'; - if (args.exited) - return 'process-exit'; - return 'extension-timeout'; } diff --git a/src/browser/index.ts b/src/browser/index.ts index 1ad2f8b..adec262 100644 --- a/src/browser/index.ts +++ b/src/browser/index.ts @@ -7,14 +7,16 @@ export { Page } from './page.js'; export { PlaywrightMCP } from './mcp.js'; -export { getTokenFingerprint, formatBrowserConnectError } from './errors.js'; -export type { ConnectFailureKind, ConnectFailureInput } from './errors.js'; -export { resolveCdpEndpoint } from './discover.js'; +export { isDaemonRunning } from './daemon-client.js'; -// Test-only helpers — exposed for unit tests +// Backward compatibility: getTokenFingerprint is no longer needed but kept as no-op export +export function getTokenFingerprint(_token: string | undefined): string | null { + return null; +} + +// Test-only helpers import { createJsonRpcRequest } from './mcp.js'; import { extractTabEntries, diffTabIndexes, appendLimited } from './tabs.js'; -import { buildMcpArgs, buildMcpLaunchSpec, findMcpServerPath, resetMcpServerPathCache, setMcpDiscoveryTestHooks } from './discover.js'; import { withTimeoutMs } from '../runtime.js'; export const __test__ = { @@ -22,10 +24,5 @@ export const __test__ = { extractTabEntries, diffTabIndexes, appendLimited, - buildMcpArgs, - buildMcpLaunchSpec, - findMcpServerPath, - resetMcpServerPathCache, - setMcpDiscoveryTestHooks, withTimeoutMs, }; diff --git a/src/browser/mcp.ts b/src/browser/mcp.ts index b0967fd..d40a9a8 100644 --- a/src/browser/mcp.ts +++ b/src/browser/mcp.ts @@ -1,312 +1,118 @@ /** - * Playwright MCP process manager. - * Handles lifecycle management, JSON-RPC communication, and browser session orchestration. + * Browser session manager — auto-spawns daemon and provides IPage. + * + * Replaces the old PlaywrightMCP class. Still exports as PlaywrightMCP + * for backward compatibility with main.ts and other consumers. */ import { spawn, type ChildProcess } from 'node:child_process'; +import { fileURLToPath } from 'node:url'; +import * as path from 'node:path'; +import * as fs from 'node:fs'; import type { IPage } from '../types.js'; -import { withTimeoutMs, DEFAULT_BROWSER_CONNECT_TIMEOUT } from '../runtime.js'; -import { PKG_VERSION } from '../version.js'; import { Page } from './page.js'; -import { getTokenFingerprint, formatBrowserConnectError, inferConnectFailureKind } from './errors.js'; -import { findMcpServerPath, buildMcpLaunchSpec, resolveCdpEndpoint } from './discover.js'; -import { extractTabIdentities, extractTabEntries, diffTabIndexes, appendLimited } from './tabs.js'; +import { isDaemonRunning, isExtensionConnected } from './daemon-client.js'; -const STDERR_BUFFER_LIMIT = 16 * 1024; -const INITIAL_TABS_TIMEOUT_MS = 1500; -const TAB_CLEANUP_TIMEOUT_MS = 2000; +const DAEMON_SPAWN_TIMEOUT = 10000; // 10s to wait for daemon + extension export type PlaywrightMCPState = 'idle' | 'connecting' | 'connected' | 'closing' | 'closed'; -// JSON-RPC helpers -let _nextId = 1; +// Re-export for __test__ compatibility +let _jsonRpcId = 0; export function createJsonRpcRequest(method: string, params: Record = {}): { id: number; message: string } { - const id = _nextId++; - return { - id, - message: JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\n', - }; + const id = ++_jsonRpcId; + return { id, message: JSON.stringify({ id, method, params }) }; } /** - * Playwright MCP process manager. + * Browser factory: manages daemon lifecycle and provides IPage instances. + * + * Kept as `PlaywrightMCP` class name for backward compatibility. */ export class PlaywrightMCP { - private static _activeInsts: Set = new Set(); - private static _cleanupRegistered = false; - - private static _registerGlobalCleanup() { - if (this._cleanupRegistered) return; - this._cleanupRegistered = true; - const cleanup = () => { - for (const inst of this._activeInsts) { - if (inst._proc && !inst._proc.killed) { - try { inst._proc.kill('SIGKILL'); } catch {} - } - } - }; - process.on('exit', cleanup); - process.on('SIGINT', () => { cleanup(); process.exit(130); }); - process.on('SIGTERM', () => { cleanup(); process.exit(143); }); - } - - private _proc: ChildProcess | null = null; - private _buffer = ''; - private _pending = new Map void; reject: (error: Error) => void }>(); - private _initialTabIdentities: string[] = []; - private _closingPromise: Promise | null = null; private _state: PlaywrightMCPState = 'idle'; - private _page: Page | null = null; + private _daemonProc: ChildProcess | null = null; get state(): PlaywrightMCPState { return this._state; } - private _sendRequest(method: string, params: Record = {}): Promise { - return new Promise((resolve, reject) => { - if (!this._proc?.stdin?.writable) { - reject(new Error('Playwright MCP process is not writable')); - return; - } - const { id, message } = createJsonRpcRequest(method, params); - this._pending.set(id, { resolve, reject }); - this._proc.stdin.write(message, (err) => { - if (!err) return; - this._pending.delete(id); - reject(err); - }); - }); - } - - private _rejectPendingRequests(error: Error): void { - const pending = [...this._pending.values()]; - this._pending.clear(); - for (const waiter of pending) waiter.reject(error); - } - - private _resetAfterFailedConnect(): void { - const proc = this._proc; - this._page = null; - this._proc = null; - this._buffer = ''; - this._initialTabIdentities = []; - this._rejectPendingRequests(new Error('Playwright MCP connect failed')); - PlaywrightMCP._activeInsts.delete(this); - if (proc && !proc.killed) { - try { proc.kill('SIGKILL'); } catch {} - } - } - async connect(opts: { timeout?: number } = {}): Promise { if (this._state === 'connected' && this._page) return this._page; - if (this._state === 'connecting') throw new Error('Playwright MCP is already connecting'); - if (this._state === 'closing') throw new Error('Playwright MCP is closing'); - if (this._state === 'closed') throw new Error('Playwright MCP session is closed'); - - const mcpPath = findMcpServerPath(); + if (this._state === 'connecting') throw new Error('Already connecting'); + if (this._state === 'closing') throw new Error('Session is closing'); + if (this._state === 'closed') throw new Error('Session is closed'); - PlaywrightMCP._registerGlobalCleanup(); - PlaywrightMCP._activeInsts.add(this); this._state = 'connecting'; - const timeout = opts.timeout ?? DEFAULT_BROWSER_CONNECT_TIMEOUT; - - return new Promise((resolve, reject) => { - const isDebug = process.env.DEBUG?.includes('opencli:mcp'); - const debugLog = (msg: string) => isDebug && console.error(`[opencli:mcp] ${msg}`); - const { endpoint: cdpEndpoint, requestedCdp } = resolveCdpEndpoint(); - const useExtension = !requestedCdp; - const extensionToken = process.env.PLAYWRIGHT_MCP_EXTENSION_TOKEN; - const tokenFingerprint = getTokenFingerprint(extensionToken); - let stderrBuffer = ''; - let settled = false; - - const settleError = (kind: Parameters[0]['kind'], extra: { rawMessage?: string; exitCode?: number | null } = {}) => { - if (settled) return; - settled = true; - this._state = 'idle'; - clearTimeout(timer); - this._resetAfterFailedConnect(); - reject(formatBrowserConnectError({ - kind, - timeout, - hasExtensionToken: !!extensionToken, - tokenFingerprint, - stderr: stderrBuffer, - exitCode: extra.exitCode, - rawMessage: extra.rawMessage, - })); - }; - - const settleSuccess = (pageToResolve: Page) => { - if (settled) return; - settled = true; - this._state = 'connected'; - clearTimeout(timer); - resolve(pageToResolve); - }; - - const timer = setTimeout(() => { - debugLog('Connection timed out'); - settleError(inferConnectFailureKind({ - hasExtensionToken: !!extensionToken, - stderr: stderrBuffer, - isCdpMode: requestedCdp, - })); - }, timeout * 1000); - const launchSpec = buildMcpLaunchSpec({ - mcpPath, - executablePath: process.env.OPENCLI_BROWSER_EXECUTABLE_PATH, - cdpEndpoint, - }); - if (process.env.OPENCLI_VERBOSE) { - console.error(`[opencli] Mode: ${requestedCdp ? 'CDP' : useExtension ? 'extension' : 'standalone'}`); - if (useExtension) console.error(`[opencli] Extension token: fingerprint ${tokenFingerprint}`); - if (launchSpec.usedNpxFallback) { - console.error('[opencli] Playwright MCP not found locally; bootstrapping via npx @playwright/mcp@latest'); - } - } - debugLog(`Spawning ${launchSpec.command} ${launchSpec.args.join(' ')}`); - - this._proc = spawn(launchSpec.command, launchSpec.args, { - stdio: ['pipe', 'pipe', 'pipe'], - env: { ...process.env }, - }); - - // Increase max listeners to avoid warnings - this._proc.setMaxListeners(20); - if (this._proc.stdout) this._proc.stdout.setMaxListeners(20); - - const page = new Page((method, params = {}) => this._sendRequest(method, params)); - this._page = page; + try { + await this._ensureDaemon(); + this._page = new Page(); + this._state = 'connected'; + return this._page; + } catch (err) { + this._state = 'idle'; + throw err; + } + } - this._proc.stdout?.on('data', (chunk: Buffer) => { - this._buffer += chunk.toString(); - const lines = this._buffer.split('\n'); - this._buffer = lines.pop() ?? ''; - for (const line of lines) { - if (!line.trim()) continue; - debugLog(`RECV: ${line}`); - try { - const parsed = JSON.parse(line); - if (typeof parsed?.id === 'number') { - const waiter = this._pending.get(parsed.id); - if (waiter) { - this._pending.delete(parsed.id); - waiter.resolve(parsed); - } - } - } catch (e) { - debugLog(`Parse error: ${e}`); - } - } - }); + async close(): Promise { + if (this._state === 'closed') return; + this._state = 'closing'; + // We don't kill the daemon — it auto-exits on idle. + // Just clean up our reference. + this._page = null; + this._state = 'closed'; + } - this._proc.stderr?.on('data', (chunk: Buffer) => { - const text = chunk.toString(); - stderrBuffer = appendLimited(stderrBuffer, text, STDERR_BUFFER_LIMIT); - debugLog(`STDERR: ${text}`); - }); - this._proc.on('error', (err) => { - debugLog(`Subprocess error: ${err.message}`); - this._rejectPendingRequests(new Error(`Playwright MCP process error: ${err.message}`)); - settleError('process-exit', { rawMessage: err.message }); - }); - this._proc.on('close', (code) => { - debugLog(`Subprocess closed with code ${code}`); - this._rejectPendingRequests(new Error(`Playwright MCP process exited before response${code == null ? '' : ` (code ${code})`}`)); - if (!settled) { - settleError(inferConnectFailureKind({ - hasExtensionToken: !!extensionToken, - stderr: stderrBuffer, - exited: true, - isCdpMode: requestedCdp, - }), { exitCode: code }); - } - }); + private async _ensureDaemon(): Promise { + if (await isDaemonRunning()) return; + + // Find daemon relative to this file — works for both: + // npx tsx src/main.ts → src/browser/mcp.ts → src/daemon.ts + // node dist/main.js → dist/browser/mcp.js → dist/daemon.js + const __dirname = path.dirname(fileURLToPath(import.meta.url)); + const parentDir = path.resolve(__dirname, '..'); + const daemonTs = path.join(parentDir, 'daemon.ts'); + const daemonJs = path.join(parentDir, 'daemon.js'); + const isTs = fs.existsSync(daemonTs); + const daemonPath = isTs ? daemonTs : daemonJs; + + if (process.env.OPENCLI_VERBOSE) { + console.error(`[opencli] Starting daemon (${isTs ? 'ts' : 'js'})...`); + } - // Initialize: send initialize request - debugLog('Waiting for initialize response...'); - this._sendRequest('initialize', { - protocolVersion: '2024-11-05', - capabilities: {}, - clientInfo: { name: 'opencli', version: PKG_VERSION }, - }).then((resp: any) => { - debugLog('Got initialize response'); - if (resp.error) { - settleError(inferConnectFailureKind({ - hasExtensionToken: !!extensionToken, - stderr: stderrBuffer, - rawMessage: `MCP init failed: ${resp.error.message}`, - isCdpMode: requestedCdp, - }), { rawMessage: resp.error.message }); - return; - } - - const initializedMsg = JSON.stringify({ jsonrpc: '2.0', method: 'notifications/initialized' }) + '\n'; - debugLog(`SEND: ${initializedMsg.trim()}`); - this._proc?.stdin?.write(initializedMsg); + // Use tsx for .ts files, node for .js files + const runtime = isTs ? 'npx' : process.execPath; + const args = isTs ? ['tsx', daemonPath] : [daemonPath]; - // Use tabs as a readiness probe and for tab cleanup bookkeeping. - debugLog('Fetching initial tabs count...'); - withTimeoutMs(page.tabs(), INITIAL_TABS_TIMEOUT_MS, 'Timed out fetching initial tabs').then((tabs: any) => { - debugLog(`Tabs response: ${typeof tabs === 'string' ? tabs : JSON.stringify(tabs)}`); - this._initialTabIdentities = extractTabIdentities(tabs); - settleSuccess(page); - }).catch((err: Error) => { - debugLog(`Tabs fetch error: ${err.message}`); - settleSuccess(page); - }); - }).catch((err: Error) => { - debugLog(`Init promise rejected: ${err.message}`); - settleError('mcp-init', { rawMessage: err.message }); - }); + this._daemonProc = spawn(runtime, args, { + detached: true, + stdio: 'ignore', + env: { ...process.env }, }); - } + this._daemonProc.unref(); + // Wait for daemon to be ready AND extension to connect + const deadline = Date.now() + DAEMON_SPAWN_TIMEOUT; + while (Date.now() < deadline) { + await new Promise(resolve => setTimeout(resolve, 300)); + if (await isExtensionConnected()) return; + } - async close(): Promise { - if (this._closingPromise) return this._closingPromise; - if (this._state === 'closed') return; - this._state = 'closing'; - this._closingPromise = (async () => { - try { - // Extension mode opens bridge/session tabs that we can clean up best-effort. - if (this._page && this._proc && !this._proc.killed) { - try { - const tabs = await withTimeoutMs(this._page.tabs(), TAB_CLEANUP_TIMEOUT_MS, 'Timed out fetching tabs during cleanup'); - const tabEntries = extractTabEntries(tabs); - const tabsToClose = diffTabIndexes(this._initialTabIdentities, tabEntries); - for (const index of tabsToClose) { - try { await this._page.closeTab(index); } catch {} - } - } catch {} - } - if (this._proc && !this._proc.killed) { - this._proc.kill('SIGTERM'); - const exited = await new Promise((res) => { - let done = false; - const finish = (value: boolean) => { - if (done) return; - done = true; - res(value); - }; - this._proc?.once('exit', () => finish(true)); - setTimeout(() => finish(false), 3000); - }); - if (!exited && this._proc && !this._proc.killed) { - try { this._proc.kill('SIGKILL'); } catch {} - } - } - } finally { - this._rejectPendingRequests(new Error('Playwright MCP session closed')); - this._page = null; - this._proc = null; - this._state = 'closed'; - PlaywrightMCP._activeInsts.delete(this); - } - })(); - return this._closingPromise; + // Daemon might be up but extension not connected — give a useful error + if (await isDaemonRunning()) { + throw new Error( + 'Daemon is running but the Browser Extension is not connected.\n' + + 'Please install and enable the opencli Browser Bridge extension in Chrome.', + ); + } + + throw new Error( + 'Failed to start opencli daemon. Try running manually:\n' + + ` node ${daemonPath}\n` + + 'Make sure port 19825 is available.', + ); } } diff --git a/src/browser/page.ts b/src/browser/page.ts index 23abeb6..2ef766b 100644 --- a/src/browser/page.ts +++ b/src/browser/page.ts @@ -1,139 +1,236 @@ /** - * Page abstraction wrapping JSON-RPC calls to Playwright MCP. + * Page abstraction — implements IPage by sending commands to the daemon. + * + * All browser operations are ultimately 'exec' (JS evaluation via CDP) + * plus a few native Chrome Extension APIs (tabs, cookies, navigate). + * + * IMPORTANT: After goto(), we remember the tabId returned by the navigate + * action and pass it to all subsequent commands. This avoids the issue + * where resolveTabId() in the extension picks a chrome:// or + * chrome-extension:// tab that can't be debugged. */ import { formatSnapshot } from '../snapshotFormatter.js'; import { normalizeEvaluateSource } from '../pipeline/template.js'; import { generateInterceptorJs, generateReadInterceptedJs } from '../interceptor.js'; import type { IPage } from '../types.js'; -import { BrowserConnectError } from '../errors.js'; +import { sendCommand } from './daemon-client.js'; /** - * Page abstraction wrapping JSON-RPC calls to Playwright MCP. + * Page — implements IPage by talking to the daemon via HTTP. */ export class Page implements IPage { - constructor(private _request: (method: string, params?: Record) => Promise>) {} - - async call(method: string, params: Record = {}): Promise { - const resp = await this._request(method, params); - if (resp.error) throw new Error(`page.${method}: ${(resp.error as any).message ?? JSON.stringify(resp.error)}`); - // Extract text content from MCP result - const result = resp.result as any; - - if (result?.isError) { - const errorText = result.content?.find((c: any) => c.type === 'text')?.text || 'Unknown MCP Error'; - throw new BrowserConnectError( - errorText, - 'Please check if the browser is running or if the Playwright MCP / CDP connection is configured correctly.' - ); - } - - if (result?.content) { - const textParts = result.content.filter((c: any) => c.type === 'text'); - if (textParts.length >= 1) { - let text = textParts[textParts.length - 1].text; // Usually the main output is in the last text block - - // Some versions of the MCP return error text without the `isError` boolean flag - if (typeof text === 'string' && text.trim().startsWith('### Error')) { - throw new BrowserConnectError( - text.trim(), - 'Please check if the browser is running or if the Playwright MCP / CDP connection is configured correctly.' - ); - } - - // MCP browser_evaluate returns: "[JSON]\n### Ran Playwright code\n```js\n...\n```" - // Strip the "### Ran Playwright code" suffix to get clean JSON - const codeMarker = text.indexOf('### Ran Playwright code'); - if (codeMarker !== -1) { - text = text.slice(0, codeMarker).trim(); - } - // Also handle "### Result\n[JSON]" format (some MCP versions) - const resultMarker = text.indexOf('### Result\n'); - if (resultMarker !== -1) { - text = text.slice(resultMarker + '### Result\n'.length).trim(); - } - try { return JSON.parse(text); } catch { return text; } - } - } - return result; - } - - // --- High-level methods --- + /** Active tab ID, set after navigate and used in all subsequent commands */ + private _tabId: number | undefined; async goto(url: string): Promise { - await this.call('tools/call', { name: 'browser_navigate', arguments: { url } }); + const result = await sendCommand('navigate', { + url, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }) as { tabId?: number }; + // Remember the tabId for subsequent exec calls + if (result?.tabId) { + this._tabId = result.tabId; + } } async evaluate(js: string): Promise { - // Normalize IIFE format to function format expected by MCP browser_evaluate const normalized = normalizeEvaluateSource(js); - return this.call('tools/call', { name: 'browser_evaluate', arguments: { function: normalized } }); + // Wrap function-style code: `() => { ... }` or `async () => { ... }` → IIFE + const trimmed = normalized.trim(); + const code = trimmed.startsWith('async') + ? `(${trimmed})()` + : trimmed.startsWith('function') || trimmed.startsWith('(') + ? `(${trimmed})()` + : trimmed; + return sendCommand('exec', { + code, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); } async snapshot(opts: { interactive?: boolean; compact?: boolean; maxDepth?: number; raw?: boolean } = {}): Promise { - const raw = await this.call('tools/call', { name: 'browser_snapshot', arguments: {} }); + // Use CDP Accessibility.getFullAXTree via exec + const code = ` + (async () => { + // Build a simplified accessibility tree from the DOM + function buildTree(node, depth = 0) { + if (depth > ${opts.maxDepth ?? 50}) return ''; + const role = node.getAttribute?.('role') || node.tagName?.toLowerCase() || 'generic'; + const name = node.getAttribute?.('aria-label') || node.getAttribute?.('alt') || node.textContent?.trim().slice(0, 80) || ''; + const isInteractive = ['a', 'button', 'input', 'select', 'textarea'].includes(node.tagName?.toLowerCase()) || node.getAttribute?.('tabindex') != null; + + ${opts.interactive ? 'if (!isInteractive && !node.children?.length) return "";' : ''} + + let indent = ' '.repeat(depth); + let line = indent + role; + if (name) line += ' "' + name.replace(/"/g, '\\"') + '"'; + if (node.tagName?.toLowerCase() === 'a' && node.href) line += ' [' + node.href + ']'; + if (node.tagName?.toLowerCase() === 'input') line += ' [' + (node.type || 'text') + ']'; + + let result = line + '\\n'; + if (node.children) { + for (const child of node.children) { + result += buildTree(child, depth + 1); + } + } + return result; + } + return buildTree(document.body); + })() + `; + const raw = await sendCommand('exec', { + code, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); if (opts.raw) return raw; if (typeof raw === 'string') return formatSnapshot(raw, opts); return raw; } async click(ref: string): Promise { - await this.call('tools/call', { name: 'browser_click', arguments: { element: 'click target', ref } }); + const safeRef = JSON.stringify(ref); + const code = ` + (() => { + const ref = ${safeRef}; + const el = document.querySelector('[data-ref="' + ref + '"]') + || document.querySelectorAll('a, button, input, [role="button"], [tabindex]')[parseInt(ref, 10) || 0]; + if (!el) throw new Error('Element not found: ' + ref); + el.scrollIntoView({ behavior: 'instant', block: 'center' }); + el.click(); + return 'clicked'; + })() + `; + await sendCommand('exec', { + code, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); } async typeText(ref: string, text: string): Promise { - await this.call('tools/call', { name: 'browser_type', arguments: { element: 'type target', ref, text } }); + const safeRef = JSON.stringify(ref); + const safeText = JSON.stringify(text); + const code = ` + (() => { + const ref = ${safeRef}; + const el = document.querySelector('[data-ref="' + ref + '"]') + || document.querySelectorAll('input, textarea, [contenteditable]')[parseInt(ref, 10) || 0]; + if (!el) throw new Error('Element not found: ' + ref); + el.focus(); + el.value = ${safeText}; + el.dispatchEvent(new Event('input', { bubbles: true })); + el.dispatchEvent(new Event('change', { bubbles: true })); + return 'typed'; + })() + `; + await sendCommand('exec', { + code, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); } async pressKey(key: string): Promise { - await this.call('tools/call', { name: 'browser_press_key', arguments: { key } }); + const code = ` + (() => { + const el = document.activeElement || document.body; + el.dispatchEvent(new KeyboardEvent('keydown', { key: ${JSON.stringify(key)}, bubbles: true })); + el.dispatchEvent(new KeyboardEvent('keyup', { key: ${JSON.stringify(key)}, bubbles: true })); + return 'pressed'; + })() + `; + await sendCommand('exec', { + code, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); } async wait(options: number | { text?: string; time?: number; timeout?: number }): Promise { if (typeof options === 'number') { - await this.call('tools/call', { name: 'browser_wait_for', arguments: { time: options } }); - } else { - // Pass directly to native wait_for, which supports natively awaiting text strings without heavy DOM polling - await this.call('tools/call', { name: 'browser_wait_for', arguments: options }); + await new Promise(resolve => setTimeout(resolve, options * 1000)); + return; + } + if (options.time) { + await new Promise(resolve => setTimeout(resolve, options.time! * 1000)); + return; + } + if (options.text) { + const timeout = (options.timeout ?? 30) * 1000; + const code = ` + new Promise((resolve, reject) => { + const deadline = Date.now() + ${timeout}; + const check = () => { + if (document.body.innerText.includes(${JSON.stringify(options.text)})) return resolve('found'); + if (Date.now() > deadline) return reject(new Error('Text not found: ' + ${JSON.stringify(options.text)})); + setTimeout(check, 200); + }; + check(); + }) + `; + await sendCommand('exec', { + code, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); } } async tabs(): Promise { - return this.call('tools/call', { name: 'browser_tabs', arguments: { action: 'list' } }); + return sendCommand('tabs', { op: 'list' }); } async closeTab(index?: number): Promise { - await this.call('tools/call', { name: 'browser_tabs', arguments: { action: 'close', ...(index !== undefined ? { index } : {}) } }); + await sendCommand('tabs', { op: 'close', ...(index !== undefined ? { index } : {}) }); } async newTab(): Promise { - await this.call('tools/call', { name: 'browser_tabs', arguments: { action: 'new' } }); + await sendCommand('tabs', { op: 'new' }); } async selectTab(index: number): Promise { - await this.call('tools/call', { name: 'browser_tabs', arguments: { action: 'select', index } }); + await sendCommand('tabs', { op: 'select', index }); } async networkRequests(includeStatic: boolean = false): Promise { - return this.call('tools/call', { name: 'browser_network_requests', arguments: { includeStatic } }); + // Use performance API to get network entries + const code = ` + (() => { + const entries = performance.getEntriesByType('resource'); + return entries + ${includeStatic ? '' : '.filter(e => !["img", "font", "css", "script"].some(t => e.initiatorType === t))'} + .map(e => ({ + url: e.name, + type: e.initiatorType, + duration: Math.round(e.duration), + size: e.transferSize || 0, + })); + })() + `; + return sendCommand('exec', { + code, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); } async consoleMessages(level: string = 'info'): Promise { - return this.call('tools/call', { name: 'browser_console_messages', arguments: { level } }); + // Console messages can't be retrospectively read via exec. + // Return empty for now — users should use networkRequests or evaluate. + return []; } - async scroll(direction: string = 'down', _amount: number = 500): Promise { - await this.call('tools/call', { name: 'browser_press_key', arguments: { key: direction === 'down' ? 'PageDown' : 'PageUp' } }); + async scroll(direction: string = 'down', amount: number = 500): Promise { + const dx = direction === 'left' ? -amount : direction === 'right' ? amount : 0; + const dy = direction === 'up' ? -amount : direction === 'down' ? amount : 0; + await sendCommand('exec', { + code: `window.scrollBy(${dx}, ${dy})`, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); } async autoScroll(options: { times?: number; delayMs?: number } = {}): Promise { const times = options.times ?? 3; const delayMs = options.delayMs ?? 2000; - const js = ` - async () => { - const maxTimes = ${times}; - const maxWaitMs = ${delayMs}; - for (let i = 0; i < maxTimes; i++) { + const code = ` + (async () => { + for (let i = 0; i < ${times}; i++) { const lastHeight = document.body.scrollHeight; window.scrollTo(0, lastHeight); await new Promise(resolve => { @@ -142,30 +239,36 @@ export class Page implements IPage { if (document.body.scrollHeight > lastHeight) { clearTimeout(timeoutId); observer.disconnect(); - setTimeout(resolve, 100); // Small debounce for rendering + setTimeout(resolve, 100); } }); observer.observe(document.body, { childList: true, subtree: true }); - timeoutId = setTimeout(() => { - observer.disconnect(); - resolve(null); - }, maxWaitMs); + timeoutId = setTimeout(() => { observer.disconnect(); resolve(null); }, ${delayMs}); }); } - } + })() `; - await this.evaluate(js); + await sendCommand('exec', { + code, + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); } async installInterceptor(pattern: string): Promise { - await this.evaluate(generateInterceptorJs(JSON.stringify(pattern), { - arrayName: '__opencli_xhr', - patchGuard: '__opencli_interceptor_patched', - })); + await sendCommand('exec', { + code: generateInterceptorJs(JSON.stringify(pattern), { + arrayName: '__opencli_xhr', + patchGuard: '__opencli_interceptor_patched', + }), + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); } async getInterceptedRequests(): Promise { - const result = await this.evaluate(generateReadInterceptedJs('__opencli_xhr')); - return result || []; + const result = await sendCommand('exec', { + code: generateReadInterceptedJs('__opencli_xhr'), + ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + }); + return (result as any[]) || []; } } diff --git a/src/daemon.ts b/src/daemon.ts new file mode 100644 index 0000000..568eda7 --- /dev/null +++ b/src/daemon.ts @@ -0,0 +1,164 @@ +/** + * opencli micro-daemon — HTTP + WebSocket bridge between CLI and Chrome Extension. + * + * Architecture: + * CLI → HTTP POST /command → daemon → WebSocket → Extension + * Extension → WebSocket result → daemon → HTTP response → CLI + * + * Lifecycle: + * - Auto-spawned by opencli on first browser command + * - Auto-exits after 5 minutes of idle + * - Listens on localhost:19825 + */ + +import { createServer, type IncomingMessage, type ServerResponse } from 'node:http'; +import { WebSocketServer, WebSocket } from 'ws'; + +const PORT = parseInt(process.env.OPENCLI_DAEMON_PORT ?? '19825', 10); +const IDLE_TIMEOUT = 5 * 60 * 1000; // 5 minutes + +// ─── State ─────────────────────────────────────────────────────────── + +let extensionWs: WebSocket | null = null; +const pending = new Map void; + reject: (error: Error) => void; + timer: ReturnType; +}>(); +let idleTimer: ReturnType | null = null; + +// ─── Idle auto-exit ────────────────────────────────────────────────── + +function resetIdleTimer(): void { + if (idleTimer) clearTimeout(idleTimer); + idleTimer = setTimeout(() => { + console.error('[daemon] Idle timeout, shutting down'); + process.exit(0); + }, IDLE_TIMEOUT); +} + +// ─── HTTP Server ───────────────────────────────────────────────────── + +function readBody(req: IncomingMessage): Promise { + return new Promise((resolve, reject) => { + const chunks: Buffer[] = []; + req.on('data', (c: Buffer) => chunks.push(c)); + req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8'))); + req.on('error', reject); + }); +} + +function jsonResponse(res: ServerResponse, status: number, data: unknown): void { + res.writeHead(status, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }); + res.end(JSON.stringify(data)); +} + +async function handleRequest(req: IncomingMessage, res: ServerResponse): Promise { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); + res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); + if (req.method === 'OPTIONS') { res.writeHead(204); res.end(); return; } + + const url = req.url ?? '/'; + + if (req.method === 'GET' && url === '/status') { + jsonResponse(res, 200, { + ok: true, + extensionConnected: extensionWs?.readyState === WebSocket.OPEN, + pending: pending.size, + }); + return; + } + + if (req.method === 'POST' && url === '/command') { + resetIdleTimer(); + try { + const body = JSON.parse(await readBody(req)); + + if (!extensionWs || extensionWs.readyState !== WebSocket.OPEN) { + jsonResponse(res, 503, { id: body.id, ok: false, error: 'Extension not connected. Please install the opencli Browser Bridge extension.' }); + return; + } + + const result = await new Promise((resolve, reject) => { + const timer = setTimeout(() => { + pending.delete(body.id); + reject(new Error('Command timeout (30s)')); + }, 30000); + pending.set(body.id, { resolve, reject, timer }); + extensionWs!.send(JSON.stringify(body)); + }); + + jsonResponse(res, 200, result); + } catch (err) { + jsonResponse(res, err instanceof Error && err.message.includes('timeout') ? 408 : 400, { + ok: false, + error: err instanceof Error ? err.message : 'Invalid request', + }); + } + return; + } + + jsonResponse(res, 404, { error: 'Not found' }); +} + +// ─── WebSocket for Extension ───────────────────────────────────────── + +const httpServer = createServer((req, res) => { handleRequest(req, res).catch(() => { res.writeHead(500); res.end(); }); }); +const wss = new WebSocketServer({ server: httpServer, path: '/ext' }); + +wss.on('connection', (ws) => { + console.error('[daemon] Extension connected'); + extensionWs = ws; + + ws.on('message', (data) => { + try { + const result = JSON.parse(data.toString()); + const p = pending.get(result.id); + if (p) { + clearTimeout(p.timer); + pending.delete(result.id); + p.resolve(result); + } + } catch { + // Ignore malformed messages + } + }); + + ws.on('close', () => { + console.error('[daemon] Extension disconnected'); + if (extensionWs === ws) { + extensionWs = null; + // Reject all pending requests since the extension is gone + for (const [id, p] of pending) { + clearTimeout(p.timer); + p.reject(new Error('Extension disconnected')); + } + pending.clear(); + } + }); + + ws.on('error', () => { + if (extensionWs === ws) extensionWs = null; + }); +}); + +// ─── Start ─────────────────────────────────────────────────────────── + +httpServer.listen(PORT, '127.0.0.1', () => { + console.error(`[daemon] Listening on http://127.0.0.1:${PORT}`); + resetIdleTimer(); +}); + +httpServer.on('error', (err: NodeJS.ErrnoException) => { + if (err.code === 'EADDRINUSE') { + console.error(`[daemon] Port ${PORT} already in use — another daemon is likely running. Exiting.`); + process.exit(0); + } + console.error('[daemon] Server error:', err.message); + process.exit(1); +}); + +// Graceful shutdown +process.on('SIGTERM', () => process.exit(0)); +process.on('SIGINT', () => process.exit(0)); diff --git a/src/doctor.test.ts b/src/doctor.test.ts index 8f4b33b..fb080f1 100644 --- a/src/doctor.test.ts +++ b/src/doctor.test.ts @@ -1,223 +1,62 @@ import { describe, expect, it } from 'vitest'; -import { - readTokenFromShellContent, - renderBrowserDoctorReport, - upsertShellToken, - readTomlConfigToken, - upsertTomlConfigToken, - upsertJsonConfigToken, -} from './doctor.js'; - -describe('shell token helpers', () => { - it('reads token from shell export', () => { - expect(readTokenFromShellContent('export PLAYWRIGHT_MCP_EXTENSION_TOKEN="abc123"\n')).toBe('abc123'); - }); - - it('appends token export when missing', () => { - const next = upsertShellToken('export PATH="/usr/bin"\n', 'abc123'); - expect(next).toContain('export PLAYWRIGHT_MCP_EXTENSION_TOKEN="abc123"'); - }); - - it('replaces token export when present', () => { - const next = upsertShellToken('export PLAYWRIGHT_MCP_EXTENSION_TOKEN="old"\n', 'new'); - expect(next).toContain('export PLAYWRIGHT_MCP_EXTENSION_TOKEN="new"'); - expect(next).not.toContain('"old"'); - }); -}); - -describe('toml token helpers', () => { - it('reads token from playwright env section', () => { - const content = ` -[mcp_servers.playwright.env] -PLAYWRIGHT_MCP_EXTENSION_TOKEN = "abc123" -`; - expect(readTomlConfigToken(content)).toBe('abc123'); - }); - - it('updates token inside existing env section', () => { - const content = ` -[mcp_servers.playwright.env] -PLAYWRIGHT_MCP_EXTENSION_TOKEN = "old" -`; - const next = upsertTomlConfigToken(content, 'new'); - expect(next).toContain('PLAYWRIGHT_MCP_EXTENSION_TOKEN = "new"'); - expect(next).not.toContain('"old"'); - }); - - it('creates env section when missing', () => { - const content = ` -[mcp_servers.playwright] -type = "stdio" -`; - const next = upsertTomlConfigToken(content, 'abc123'); - expect(next).toContain('[mcp_servers.playwright.env]'); - expect(next).toContain('PLAYWRIGHT_MCP_EXTENSION_TOKEN = "abc123"'); - }); -}); - -describe('json token helpers', () => { - it('writes token into standard mcpServers config', () => { - const next = upsertJsonConfigToken(JSON.stringify({ - mcpServers: { - playwright: { - command: 'npx', - args: ['-y', '@playwright/mcp@latest', '--extension'], - }, - }, - }), 'abc123'); - const parsed = JSON.parse(next); - expect(parsed.mcpServers.playwright.env.PLAYWRIGHT_MCP_EXTENSION_TOKEN).toBe('abc123'); - }); - - it('writes token into opencode mcp config', () => { - const next = upsertJsonConfigToken(JSON.stringify({ - $schema: 'https://opencode.ai/config.json', - mcp: { - playwright: { - command: ['npx', '-y', '@playwright/mcp@latest', '--extension'], - enabled: true, - type: 'local', - }, - }, - }), 'abc123'); - const parsed = JSON.parse(next); - expect(parsed.mcp.playwright.environment.PLAYWRIGHT_MCP_EXTENSION_TOKEN).toBe('abc123'); - }); - - it('creates standard mcpServers format for empty file (not OpenCode)', () => { - const next = upsertJsonConfigToken('', 'abc123'); - const parsed = JSON.parse(next); - expect(parsed.mcpServers.playwright.env.PLAYWRIGHT_MCP_EXTENSION_TOKEN).toBe('abc123'); - expect(parsed.mcp).toBeUndefined(); - }); - - it('creates OpenCode format when filePath contains opencode', () => { - const next = upsertJsonConfigToken('', 'abc123', '/home/user/.config/opencode/opencode.json'); - const parsed = JSON.parse(next); - expect(parsed.mcp.playwright.environment.PLAYWRIGHT_MCP_EXTENSION_TOKEN).toBe('abc123'); - expect(parsed.mcpServers).toBeUndefined(); - }); - - it('creates standard format when filePath is claude.json', () => { - const next = upsertJsonConfigToken('', 'abc123', '/home/user/.claude.json'); - const parsed = JSON.parse(next); - expect(parsed.mcpServers.playwright.env.PLAYWRIGHT_MCP_EXTENSION_TOKEN).toBe('abc123'); - }); -}); - -describe('fish shell support', () => { - it('generates fish set -gx syntax for fish config path', () => { - const next = upsertShellToken('', 'abc123', '/home/user/.config/fish/config.fish'); - expect(next).toContain('set -gx PLAYWRIGHT_MCP_EXTENSION_TOKEN "abc123"'); - expect(next).not.toContain('export'); - }); - - it('replaces existing fish set line', () => { - const content = 'set -gx PLAYWRIGHT_MCP_EXTENSION_TOKEN "old"\n'; - const next = upsertShellToken(content, 'new', '/home/user/.config/fish/config.fish'); - expect(next).toContain('set -gx PLAYWRIGHT_MCP_EXTENSION_TOKEN "new"'); - expect(next).not.toContain('"old"'); - }); - - it('appends fish syntax to existing fish config', () => { - const content = 'set -gx PATH /usr/bin\n'; - const next = upsertShellToken(content, 'abc123', '/home/user/.config/fish/config.fish'); - expect(next).toContain('set -gx PLAYWRIGHT_MCP_EXTENSION_TOKEN "abc123"'); - expect(next).toContain('set -gx PATH /usr/bin'); - }); - - it('uses export syntax for zshrc even with filePath', () => { - const next = upsertShellToken('', 'abc123', '/home/user/.zshrc'); - expect(next).toContain('export PLAYWRIGHT_MCP_EXTENSION_TOKEN="abc123"'); - expect(next).not.toContain('set -gx'); - }); -}); +import { renderBrowserDoctorReport } from './doctor.js'; describe('doctor report rendering', () => { const strip = (s: string) => s.replace(/\x1b\[[0-9;]*m/g, ''); - it('renders OK-style report when tokens match', () => { + it('renders OK-style report when daemon and extension connected', () => { const text = strip(renderBrowserDoctorReport({ - envToken: 'abc123', - envFingerprint: 'fp1', - extensionToken: 'abc123', - extensionFingerprint: 'fp1', - extensionInstalled: true, - extensionBrowsers: ['Chrome'], - shellFiles: [{ path: '/tmp/.zshrc', exists: true, token: 'abc123', fingerprint: 'fp1' }], - configs: [{ path: '/tmp/mcp.json', exists: true, format: 'json', token: 'abc123', fingerprint: 'fp1', writable: true }], - recommendedToken: 'abc123', - recommendedFingerprint: 'fp1', - warnings: [], + daemonRunning: true, + extensionConnected: true, issues: [], })); - expect(text).toContain('[OK] Extension installed (Chrome)'); - expect(text).toContain('[OK] Environment token: configured (fp1)'); - expect(text).toContain('[OK] /tmp/mcp.json'); - expect(text).toContain('configured (fp1)'); + expect(text).toContain('[OK] Daemon: running on port 19825'); + expect(text).toContain('[OK] Extension: connected'); + expect(text).toContain('Everything looks good!'); + }); + + it('renders MISSING when daemon not running', () => { + const text = strip(renderBrowserDoctorReport({ + daemonRunning: false, + extensionConnected: false, + issues: ['Daemon is not running.'], + })); + + expect(text).toContain('[MISSING] Daemon: not running'); + expect(text).toContain('[MISSING] Extension: not connected'); + expect(text).toContain('Daemon is not running.'); }); - it('renders MISMATCH-style report when fingerprints differ', () => { + it('renders extension not connected when daemon is running', () => { const text = strip(renderBrowserDoctorReport({ - envToken: 'abc123', - envFingerprint: 'fp1', - extensionToken: null, - extensionFingerprint: null, - extensionInstalled: false, - extensionBrowsers: [], - shellFiles: [{ path: '/tmp/.zshrc', exists: true, token: 'def456', fingerprint: 'fp2' }], - configs: [{ path: '/tmp/mcp.json', exists: true, format: 'json', token: 'abc123', fingerprint: 'fp1', writable: true }], - recommendedToken: 'abc123', - recommendedFingerprint: 'fp1', - warnings: [], - issues: ['Detected inconsistent Playwright MCP tokens across env/config files.'], + daemonRunning: true, + extensionConnected: false, + issues: ['Daemon is running but the Chrome extension is not connected.'], })); - expect(text).toContain('[MISSING] Extension not installed in any browser'); - expect(text).toContain('[MISMATCH] Environment token: configured (fp1)'); - expect(text).toContain('[MISMATCH] /tmp/.zshrc'); - expect(text).toContain('configured (fp2)'); - expect(text).toContain('[MISMATCH] Recommended token fingerprint: fp1'); + expect(text).toContain('[OK] Daemon: running on port 19825'); + expect(text).toContain('[MISSING] Extension: not connected'); }); it('renders connectivity OK when live test succeeds', () => { const text = strip(renderBrowserDoctorReport({ - envToken: 'abc123', - envFingerprint: 'fp1', - extensionToken: 'abc123', - extensionFingerprint: 'fp1', - extensionInstalled: true, - extensionBrowsers: ['Chrome'], - shellFiles: [], - configs: [], - recommendedToken: 'abc123', - recommendedFingerprint: 'fp1', + daemonRunning: true, + extensionConnected: true, connectivity: { ok: true, durationMs: 1234 }, - warnings: [], issues: [], })); - expect(text).toContain('[OK] Browser connectivity: connected in 1.2s'); + expect(text).toContain('[OK] Connectivity: connected in 1.2s'); }); - it('renders connectivity WARN when not tested', () => { + it('renders connectivity SKIP when not tested', () => { const text = strip(renderBrowserDoctorReport({ - envToken: 'abc123', - envFingerprint: 'fp1', - extensionToken: 'abc123', - extensionFingerprint: 'fp1', - extensionInstalled: true, - extensionBrowsers: ['Chrome'], - shellFiles: [], - configs: [], - recommendedToken: 'abc123', - recommendedFingerprint: 'fp1', - warnings: [], + daemonRunning: true, + extensionConnected: true, issues: [], })); - expect(text).toContain('[WARN] Browser connectivity: not tested (use --live)'); + expect(text).toContain('[SKIP] Connectivity: not tested (use --live)'); }); }); - diff --git a/src/doctor.ts b/src/doctor.ts index 3e75210..f63ef42 100644 --- a/src/doctor.ts +++ b/src/doctor.ts @@ -1,47 +1,22 @@ -import * as fs from 'node:fs'; -import * as os from 'node:os'; -import * as path from 'node:path'; +/** + * opencli doctor — diagnose and fix browser connectivity. + * + * Simplified for the daemon-based architecture. No more token management, + * MCP path discovery, or config file scanning. + */ -import { createInterface } from 'node:readline/promises'; -import { stdin as input, stdout as output } from 'node:process'; import chalk from 'chalk'; -import type { IPage } from './types.js'; -import { PlaywrightMCP, getTokenFingerprint } from './browser/index.js'; +import { checkDaemonStatus } from './browser/discover.js'; +import { PlaywrightMCP } from './browser/index.js'; import { browserSession } from './runtime.js'; -const PLAYWRIGHT_SERVER_NAME = 'playwright'; -export const PLAYWRIGHT_TOKEN_ENV = 'PLAYWRIGHT_MCP_EXTENSION_TOKEN'; -const PLAYWRIGHT_EXTENSION_ID = 'mmlmfjhmonkocbjadbfplnigmagldckm'; -const TOKEN_LINE_RE = /^(\s*export\s+PLAYWRIGHT_MCP_EXTENSION_TOKEN=)(['"]?)([^'"\\\n]+)\2\s*$/m; export type DoctorOptions = { fix?: boolean; yes?: boolean; live?: boolean; - shellRc?: string; - configPaths?: string[]; - token?: string; cliVersion?: string; }; -export type ShellFileStatus = { - path: string; - exists: boolean; - token: string | null; - fingerprint: string | null; -}; - -export type McpConfigFormat = 'json' | 'toml'; - -export type McpConfigStatus = { - path: string; - exists: boolean; - format: McpConfigFormat; - token: string | null; - fingerprint: string | null; - writable: boolean; - parseError?: string; -}; - export type ConnectivityResult = { ok: boolean; error?: string; @@ -50,463 +25,22 @@ export type ConnectivityResult = { export type DoctorReport = { cliVersion?: string; - envToken: string | null; - envFingerprint: string | null; - extensionToken: string | null; - extensionFingerprint: string | null; - extensionInstalled: boolean; - extensionBrowsers: string[]; - shellFiles: ShellFileStatus[]; - configs: McpConfigStatus[]; - recommendedToken: string | null; - recommendedFingerprint: string | null; + daemonRunning: boolean; + extensionConnected: boolean; connectivity?: ConnectivityResult; - warnings: string[]; issues: string[]; }; -type ReportStatus = 'OK' | 'MISSING' | 'MISMATCH' | 'WARN'; - -function colorLabel(status: ReportStatus): string { - switch (status) { - case 'OK': return chalk.green('[OK]'); - case 'MISSING': return chalk.red('[MISSING]'); - case 'MISMATCH': return chalk.yellow('[MISMATCH]'); - case 'WARN': return chalk.yellow('[WARN]'); - } -} - -function statusLine(status: ReportStatus, text: string): string { - return `${colorLabel(status)} ${text}`; -} - -function tokenSummary(token: string | null, fingerprint: string | null): string { - if (!token) return chalk.dim('missing'); - return `configured ${chalk.dim(`(${fingerprint})`)}`; -} - -export function shortenPath(p: string): string { - const home = os.homedir(); - return home && p.startsWith(home) ? '~' + p.slice(home.length) : p; -} - -export function toolName(p: string): string { - if (p.includes('.codex/')) return 'Codex'; - if (p.includes('.cursor/')) return 'Cursor'; - if (p.includes('.claude.json')) return 'Claude Code'; - if (p.includes('antigravity')) return 'Antigravity'; - if (p.includes('.gemini/settings')) return 'Gemini CLI'; - if (p.includes('opencode')) return 'OpenCode'; - if (p.includes('Claude/claude_desktop')) return 'Claude Desktop'; - if (p.includes('.vscode/')) return 'VS Code'; - if (p.includes('.mcp.json')) return 'Project MCP'; - if (p.includes('.zshrc') || p.includes('.bashrc') || p.includes('.profile')) return 'Shell'; - return ''; -} - -export function getDefaultShellRcPath(): string { - const shell = process.env.SHELL ?? ''; - if (shell.endsWith('/bash')) return path.join(os.homedir(), '.bashrc'); - if (shell.endsWith('/fish')) return path.join(os.homedir(), '.config', 'fish', 'config.fish'); - return path.join(os.homedir(), '.zshrc'); -} - -function isFishConfig(filePath: string): boolean { - return filePath.endsWith('config.fish') || filePath.includes('/fish/'); -} - -/** Detect if a JSON config file uses OpenCode's `mcp` format vs standard `mcpServers` */ -function isOpenCodeConfig(filePath: string): boolean { - return filePath.includes('opencode'); -} - -export function getDefaultMcpConfigPaths(cwd: string = process.cwd()): string[] { - const home = os.homedir(); - const candidates = [ - path.join(home, '.codex', 'config.toml'), - path.join(home, '.codex', 'mcp.json'), - path.join(home, '.cursor', 'mcp.json'), - path.join(home, '.claude.json'), - path.join(home, '.gemini', 'settings.json'), - path.join(home, '.gemini', 'antigravity', 'mcp_config.json'), - path.join(home, '.config', 'opencode', 'opencode.json'), - path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json'), - path.join(home, '.config', 'Claude', 'claude_desktop_config.json'), - path.join(cwd, '.cursor', 'mcp.json'), - path.join(cwd, '.vscode', 'mcp.json'), - path.join(cwd, '.opencode', 'opencode.json'), - path.join(cwd, '.mcp.json'), - ]; - return [...new Set(candidates)]; -} - -export function readTokenFromShellContent(content: string): string | null { - const m = content.match(TOKEN_LINE_RE); - return m?.[3] ?? null; -} - -export function upsertShellToken(content: string, token: string, filePath?: string): string { - if (filePath && isFishConfig(filePath)) { - // Fish shell uses `set -gx` instead of `export` - const fishLine = `set -gx ${PLAYWRIGHT_TOKEN_ENV} "${token}"`; - const fishRe = /^\s*set\s+(-gx\s+)?PLAYWRIGHT_MCP_EXTENSION_TOKEN\s+.*/m; - if (!content.trim()) return `${fishLine}\n`; - if (fishRe.test(content)) return content.replace(fishRe, fishLine); - return `${content.replace(/\s*$/, '')}\n${fishLine}\n`; - } - const nextLine = `export ${PLAYWRIGHT_TOKEN_ENV}="${token}"`; - if (!content.trim()) return `${nextLine}\n`; - if (TOKEN_LINE_RE.test(content)) return content.replace(TOKEN_LINE_RE, `$1"${ - token - }"`); - return `${content.replace(/\s*$/, '')}\n${nextLine}\n`; -} - -function readJsonConfigToken(content: string): string | null { - try { - const parsed = JSON.parse(content); - return readTokenFromJsonObject(parsed); - } catch { - return null; - } -} - -function readTokenFromJsonObject(parsed: any): string | null { - const direct = parsed?.mcpServers?.[PLAYWRIGHT_SERVER_NAME]?.env?.[PLAYWRIGHT_TOKEN_ENV]; - if (typeof direct === 'string' && direct) return direct; - const opencode = parsed?.mcp?.[PLAYWRIGHT_SERVER_NAME]?.environment?.[PLAYWRIGHT_TOKEN_ENV]; - if (typeof opencode === 'string' && opencode) return opencode; - return null; -} - -export function upsertJsonConfigToken(content: string, token: string, filePath?: string): string { - const parsed = content.trim() ? JSON.parse(content) : {}; - - // Determine format: use OpenCode format only if explicitly an opencode config, - // or if the existing content already uses `mcp` key (not `mcpServers`) - const useOpenCodeFormat = filePath - ? isOpenCodeConfig(filePath) - : (!parsed.mcpServers && parsed.mcp); - - if (useOpenCodeFormat) { - parsed.mcp = parsed.mcp ?? {}; - parsed.mcp[PLAYWRIGHT_SERVER_NAME] = parsed.mcp[PLAYWRIGHT_SERVER_NAME] ?? { - command: ['npx', '-y', '@playwright/mcp@latest', '--extension'], - enabled: true, - type: 'local', - }; - parsed.mcp[PLAYWRIGHT_SERVER_NAME].environment = parsed.mcp[PLAYWRIGHT_SERVER_NAME].environment ?? {}; - parsed.mcp[PLAYWRIGHT_SERVER_NAME].environment[PLAYWRIGHT_TOKEN_ENV] = token; - } else { - parsed.mcpServers = parsed.mcpServers ?? {}; - parsed.mcpServers[PLAYWRIGHT_SERVER_NAME] = parsed.mcpServers[PLAYWRIGHT_SERVER_NAME] ?? { - command: 'npx', - args: ['-y', '@playwright/mcp@latest', '--extension'], - }; - parsed.mcpServers[PLAYWRIGHT_SERVER_NAME].env = parsed.mcpServers[PLAYWRIGHT_SERVER_NAME].env ?? {}; - parsed.mcpServers[PLAYWRIGHT_SERVER_NAME].env[PLAYWRIGHT_TOKEN_ENV] = token; - } - return `${JSON.stringify(parsed, null, 2)}\n`; -} - -export function readTomlConfigToken(content: string): string | null { - const sectionMatch = content.match(/\[mcp_servers\.playwright\.env\][\s\S]*?(?=\n\[|$)/); - if (!sectionMatch) return null; - const tokenMatch = sectionMatch[0].match(/^\s*PLAYWRIGHT_MCP_EXTENSION_TOKEN\s*=\s*"([^"\n]+)"/m); - return tokenMatch?.[1] ?? null; -} - -export function upsertTomlConfigToken(content: string, token: string): string { - const envSectionRe = /(\[mcp_servers\.playwright\.env\][\s\S]*?)(?=\n\[|$)/; - const tokenLine = `PLAYWRIGHT_MCP_EXTENSION_TOKEN = "${token}"`; - if (envSectionRe.test(content)) { - return content.replace(envSectionRe, (section) => { - if (/^\s*PLAYWRIGHT_MCP_EXTENSION_TOKEN\s*=/m.test(section)) { - return section.replace(/^\s*PLAYWRIGHT_MCP_EXTENSION_TOKEN\s*=.*$/m, tokenLine); - } - return `${section.replace(/\s*$/, '')}\n${tokenLine}\n`; - }); - } - - const baseSectionRe = /(\[mcp_servers\.playwright\][\s\S]*?)(?=\n\[|$)/; - if (baseSectionRe.test(content)) { - return content.replace(baseSectionRe, (section) => `${section.replace(/\s*$/, '')}\n\n[mcp_servers.playwright.env]\n${tokenLine}\n`); - } - - const prefix = content.trim() ? `${content.replace(/\s*$/, '')}\n\n` : ''; - return `${prefix}[mcp_servers.playwright]\ntype = "stdio"\ncommand = "npx"\nargs = ["-y", "@playwright/mcp@latest", "--extension"]\n\n[mcp_servers.playwright.env]\n${tokenLine}\n`; -} - -export function fileExists(filePath: string): boolean { - try { - return fs.existsSync(filePath); - } catch { - return false; - } -} - -function canWrite(filePath: string): boolean { - try { - if (fileExists(filePath)) { - fs.accessSync(filePath, fs.constants.W_OK); - return true; - } - fs.accessSync(path.dirname(filePath), fs.constants.W_OK); - return true; - } catch { - return false; - } -} - -function readConfigStatus(filePath: string): McpConfigStatus { - const format: McpConfigFormat = filePath.endsWith('.toml') ? 'toml' : 'json'; - if (!fileExists(filePath)) { - return { path: filePath, exists: false, format, token: null, fingerprint: null, writable: canWrite(filePath) }; - } - try { - const content = fs.readFileSync(filePath, 'utf-8'); - const token = format === 'toml' ? readTomlConfigToken(content) : readJsonConfigToken(content); - return { - path: filePath, - exists: true, - format, - token, - fingerprint: getTokenFingerprint(token ?? undefined), - writable: canWrite(filePath), - }; - } catch (error: any) { - return { - path: filePath, - exists: true, - format, - token: null, - fingerprint: null, - writable: canWrite(filePath), - parseError: error?.message ?? String(error), - }; - } -} - -/** - * Dynamically enumerate Chrome profiles by scanning for 'Default' and 'Profile *' - * directories across all browser base paths. Falls back to ['Default'] if none found. - */ -function enumerateProfiles(baseDirs: string[]): string[] { - const profiles = new Set(); - for (const base of baseDirs) { - if (!fileExists(base)) continue; - try { - for (const entry of fs.readdirSync(base, { withFileTypes: true })) { - if (!entry.isDirectory()) continue; - if (entry.name === 'Default' || /^Profile \d+$/.test(entry.name)) { - profiles.add(entry.name); - } - } - } catch { /* permission denied, etc. */ } - } - return profiles.size > 0 ? [...profiles].sort() : ['Default']; -} - -/** - * Discover the auth token stored by the Playwright MCP Bridge extension - * by scanning Chrome's LevelDB localStorage files directly. - * - * Reads LevelDB .ldb/.log files as raw binary and searches for the - * extension ID near base64url token values. This works reliably across - * platforms because LevelDB's internal encoding can split ASCII strings - * like "auth-token" and the extension ID across byte boundaries, making - * text-based tools like `strings` + `grep` unreliable. - */ -export function discoverExtensionToken(): string | null { - const home = os.homedir(); - const platform = os.platform(); - const bases: string[] = []; - - if (platform === 'darwin') { - bases.push( - path.join(home, 'Library', 'Application Support', 'Google', 'Chrome'), - path.join(home, 'Library', 'Application Support', 'Google', 'Chrome Dev'), - path.join(home, 'Library', 'Application Support', 'Google', 'Chrome Beta'), - path.join(home, 'Library', 'Application Support', 'Google', 'Chrome Canary'), - path.join(home, 'Library', 'Application Support', 'Chromium'), - path.join(home, 'Library', 'Application Support', 'Microsoft Edge'), - ); - } else if (platform === 'linux') { - bases.push( - path.join(home, '.config', 'google-chrome'), - path.join(home, '.config', 'google-chrome-unstable'), - path.join(home, '.config', 'google-chrome-beta'), - path.join(home, '.config', 'chromium'), - path.join(home, '.config', 'microsoft-edge'), - ); - } else if (platform === 'win32') { - const appData = process.env.LOCALAPPDATA || path.join(home, 'AppData', 'Local'); - bases.push( - path.join(appData, 'Google', 'Chrome', 'User Data'), - path.join(appData, 'Google', 'Chrome Dev', 'User Data'), - path.join(appData, 'Google', 'Chrome Beta', 'User Data'), - path.join(appData, 'Microsoft', 'Edge', 'User Data'), - ); - } - - const profiles = enumerateProfiles(bases); - const tokenRe = /([A-Za-z0-9_-]{40,50})/; - - for (const base of bases) { - for (const profile of profiles) { - const dir = path.join(base, profile, 'Local Storage', 'leveldb'); - if (!fileExists(dir)) continue; - - const token = extractTokenViaBinaryRead(dir, tokenRe); - if (token) return token; - } - } - - return null; -} - -function extractTokenViaBinaryRead(dir: string, tokenRe: RegExp): string | null { - // LevelDB fragments strings across byte boundaries, so we can't search - // for the full extension ID or "auth-token" as contiguous ASCII. Instead, - // search for a short prefix of the extension ID that reliably appears as - // contiguous bytes, then scan a window around each match for a base64url - // token value. - // - // Observed LevelDB layout near the auth-token entry: - // ... auth-t ... 4,mmlmfjhPocbjadbfplnigmagldckm.7 ... - // hqI86ncsD1QpcVcj-k9CyzTF-ieCQd_4KreZ_wy1WHA ... - // - // The extension ID prefix "mmlmfjh" appears ~44 bytes before the token. - const extIdBuf = Buffer.from(PLAYWRIGHT_EXTENSION_ID); - const extIdPrefix = Buffer.from(PLAYWRIGHT_EXTENSION_ID.slice(0, 7)); // "mmlmfjh" - - let files: string[]; - try { - files = fs.readdirSync(dir) - .filter(f => f.endsWith('.ldb') || f.endsWith('.log')) - .map(f => path.join(dir, f)); - } catch { return null; } - - // Sort by mtime descending so we find the freshest token first - files.sort((a, b) => { - try { return fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs; } catch { return 0; } - }); - - for (const file of files) { - let data: Buffer; - try { data = fs.readFileSync(file); } catch { continue; } - - // Quick check: file must contain at least the prefix - if (data.indexOf(extIdPrefix) === -1) continue; - - // Strategy 1: scan after each occurrence of the extension ID prefix - // for base64url tokens within a 500-byte window - let idx = 0; - while (true) { - const pos = data.indexOf(extIdPrefix, idx); - if (pos === -1) break; - - const scanStart = pos; - const scanEnd = Math.min(data.length, pos + 500); - const window = data.subarray(scanStart, scanEnd).toString('latin1'); - const m = window.match(tokenRe); - if (m && validateBase64urlToken(m[1])) { - // Make sure this isn't another extension ID that happens to match - if (m[1] !== PLAYWRIGHT_EXTENSION_ID) return m[1]; - } - idx = pos + 1; - } - - // Strategy 2 (fallback): original approach using full extension ID + auth-token key - const keyBuf = Buffer.from('auth-token'); - idx = 0; - while (true) { - const kp = data.indexOf(keyBuf, idx); - if (kp === -1) break; - - const contextStart = Math.max(0, kp - 500); - if (data.indexOf(extIdBuf, contextStart) !== -1 && data.indexOf(extIdBuf, contextStart) < kp) { - const after = data.subarray(kp + keyBuf.length, kp + keyBuf.length + 200).toString('latin1'); - const m = after.match(tokenRe); - if (m && validateBase64urlToken(m[1])) return m[1]; - } - idx = kp + 1; - } - } - return null; -} - -function validateBase64urlToken(token: string): boolean { - try { - const b64 = token.replace(/-/g, '+').replace(/_/g, '/'); - const decoded = Buffer.from(b64, 'base64'); - return decoded.length >= 28 && decoded.length <= 36; - } catch { return false; } -} - - -/** - * Check whether the Playwright MCP Bridge extension is installed in any browser. - * Scans Chrome/Chromium/Edge Extensions directories for the known extension ID. - */ -export function checkExtensionInstalled(): { installed: boolean; browsers: string[] } { - const home = os.homedir(); - const platform = os.platform(); - const browserDirs: Array<{ name: string; base: string }> = []; - - if (platform === 'darwin') { - browserDirs.push( - { name: 'Chrome', base: path.join(home, 'Library', 'Application Support', 'Google', 'Chrome') }, - { name: 'Chrome Dev', base: path.join(home, 'Library', 'Application Support', 'Google', 'Chrome Dev') }, - { name: 'Chrome Beta', base: path.join(home, 'Library', 'Application Support', 'Google', 'Chrome Beta') }, - { name: 'Chrome Canary', base: path.join(home, 'Library', 'Application Support', 'Google', 'Chrome Canary') }, - { name: 'Chromium', base: path.join(home, 'Library', 'Application Support', 'Chromium') }, - { name: 'Edge', base: path.join(home, 'Library', 'Application Support', 'Microsoft Edge') }, - ); - } else if (platform === 'linux') { - browserDirs.push( - { name: 'Chrome', base: path.join(home, '.config', 'google-chrome') }, - { name: 'Chrome Dev', base: path.join(home, '.config', 'google-chrome-unstable') }, - { name: 'Chrome Beta', base: path.join(home, '.config', 'google-chrome-beta') }, - { name: 'Chromium', base: path.join(home, '.config', 'chromium') }, - { name: 'Edge', base: path.join(home, '.config', 'microsoft-edge') }, - ); - } else if (platform === 'win32') { - const appData = process.env.LOCALAPPDATA || path.join(home, 'AppData', 'Local'); - browserDirs.push( - { name: 'Chrome', base: path.join(appData, 'Google', 'Chrome', 'User Data') }, - { name: 'Chrome Dev', base: path.join(appData, 'Google', 'Chrome Dev', 'User Data') }, - { name: 'Chrome Beta', base: path.join(appData, 'Google', 'Chrome Beta', 'User Data') }, - { name: 'Edge', base: path.join(appData, 'Microsoft', 'Edge', 'User Data') }, - ); - } - - const profiles = enumerateProfiles(browserDirs.map(d => d.base)); - const foundBrowsers: string[] = []; - - for (const { name, base } of browserDirs) { - for (const profile of profiles) { - const extDir = path.join(base, profile, 'Extensions', PLAYWRIGHT_EXTENSION_ID); - if (fileExists(extDir)) { - foundBrowsers.push(name); - break; // one match per browser is enough - } - } - } - - return { installed: foundBrowsers.length > 0, browsers: [...new Set(foundBrowsers)] }; -} - /** - * Test token connectivity by attempting a real MCP connection. - * Connects, does the JSON-RPC handshake, and immediately closes. + * Test connectivity by attempting a real browser command. */ -export async function checkTokenConnectivity(opts?: { timeout?: number }): Promise { - const timeout = opts?.timeout ?? 8; +export async function checkConnectivity(opts?: { timeout?: number }): Promise { const start = Date.now(); try { const mcp = new PlaywrightMCP(); - await mcp.connect({ timeout }); + const page = await mcp.connect({ timeout: opts?.timeout ?? 8 }); + // Try a simple eval to verify end-to-end connectivity + await page.evaluate('1 + 1'); await mcp.close(); return { ok: true, durationMs: Date.now() - start }; } catch (err: any) { @@ -515,215 +49,87 @@ export async function checkTokenConnectivity(opts?: { timeout?: number }): Promi } export async function runBrowserDoctor(opts: DoctorOptions = {}): Promise { - const envToken = process.env[PLAYWRIGHT_TOKEN_ENV] ?? null; - const shellPath = opts.shellRc ?? getDefaultShellRcPath(); - const shellFiles: ShellFileStatus[] = [shellPath].map((filePath) => { - if (!fileExists(filePath)) return { path: filePath, exists: false, token: null, fingerprint: null }; - const content = fs.readFileSync(filePath, 'utf-8'); - const token = readTokenFromShellContent(content); - return { path: filePath, exists: true, token, fingerprint: getTokenFingerprint(token ?? undefined) }; - }); - const configPaths = opts.configPaths?.length ? opts.configPaths : getDefaultMcpConfigPaths(); - const configs = configPaths.map(readConfigStatus); - - // Try to discover the token directly from the Chrome extension's localStorage - const extensionToken = discoverExtensionToken(); + const status = await checkDaemonStatus(); - const allTokens = [ - opts.token ?? null, - extensionToken, - envToken, - ...shellFiles.map(s => s.token), - ...configs.map(c => c.token), - ].filter((v): v is string => !!v); - const uniqueTokens = [...new Set(allTokens)]; - const recommendedToken = opts.token ?? extensionToken ?? envToken ?? (uniqueTokens.length === 1 ? uniqueTokens[0] : null) ?? null; - - // Check extension installation - const extInstall = checkExtensionInstalled(); - - // Connectivity test (only when --live) let connectivity: ConnectivityResult | undefined; if (opts.live) { - connectivity = await checkTokenConnectivity(); + connectivity = await checkConnectivity(); + } + + const issues: string[] = []; + if (!status.running) { + issues.push('Daemon is not running. It should start automatically when you run an opencli browser command.'); + } + if (status.running && !status.extensionConnected) { + issues.push( + 'Daemon is running but the Chrome extension is not connected.\n' + + 'Please install the opencli Browser Bridge extension:\n' + + ' 1. Download from GitHub Releases\n' + + ' 2. Open chrome://extensions/ → Enable Developer Mode\n' + + ' 3. Click "Load unpacked" → select the extension folder', + ); + } + if (connectivity && !connectivity.ok) { + issues.push(`Browser connectivity test failed: ${connectivity.error ?? 'unknown'}`); } - const report: DoctorReport = { + return { cliVersion: opts.cliVersion, - envToken, - envFingerprint: getTokenFingerprint(envToken ?? undefined), - extensionToken, - extensionFingerprint: getTokenFingerprint(extensionToken ?? undefined), - extensionInstalled: extInstall.installed, - extensionBrowsers: extInstall.browsers, - shellFiles, - configs, - recommendedToken, - recommendedFingerprint: getTokenFingerprint(recommendedToken ?? undefined), + daemonRunning: status.running, + extensionConnected: status.extensionConnected, connectivity, - warnings: [], - issues: [], + issues, }; - - if (!extInstall.installed) report.issues.push('Playwright MCP Bridge extension is not installed in any browser.'); - if (!envToken) report.issues.push(`Current environment is missing ${PLAYWRIGHT_TOKEN_ENV}.`); - if (!shellFiles.some(s => s.token)) report.issues.push('Shell startup file does not export PLAYWRIGHT_MCP_EXTENSION_TOKEN.'); - if (!configs.some(c => c.token)) report.issues.push('No scanned MCP config currently contains a Playwright extension token.'); - if (uniqueTokens.length > 1) report.issues.push('Detected inconsistent Playwright MCP tokens across env/config files.'); - if (connectivity && !connectivity.ok) report.issues.push(`Browser connectivity test failed: ${connectivity.error ?? 'unknown'}`); - for (const config of configs) { - if (config.parseError) report.warnings.push(`Could not parse ${config.path}: ${config.parseError}`); - } - if (!recommendedToken) { - report.warnings.push('No token source found.'); - } - return report; } export function renderBrowserDoctorReport(report: DoctorReport): string { - const tokenFingerprints = [ - report.extensionFingerprint, - report.envFingerprint, - ...report.shellFiles.map(shell => shell.fingerprint), - ...report.configs.filter(config => config.exists).map(config => config.fingerprint), - ].filter((value): value is string => !!value); - const uniqueFingerprints = [...new Set(tokenFingerprints)]; - const hasMismatch = uniqueFingerprints.length > 1; const lines = [chalk.bold(`opencli v${report.cliVersion ?? 'unknown'} doctor`), '']; - // CDP endpoint mode (for remote/server environments) - const cdpEndpoint = process.env.OPENCLI_CDP_ENDPOINT; - if (cdpEndpoint) { - lines.push(statusLine('OK', `CDP endpoint: ${chalk.cyan(cdpEndpoint)}`)); - lines.push(chalk.dim(' → Remote Chrome mode: extension token not required')); - lines.push(''); - return lines.join('\n'); - } - - const installStatus: ReportStatus = report.extensionInstalled ? 'OK' : 'MISSING'; - const installDetail = report.extensionInstalled - ? `Extension installed (${report.extensionBrowsers.join(', ')})` - : 'Extension not installed in any browser'; - lines.push(statusLine(installStatus, installDetail)); - - const extStatus: ReportStatus = !report.extensionToken ? 'MISSING' : hasMismatch ? 'MISMATCH' : 'OK'; - lines.push(statusLine(extStatus, `Extension token (Chrome LevelDB): ${tokenSummary(report.extensionToken, report.extensionFingerprint)}`)); + // Daemon status + const daemonIcon = report.daemonRunning ? chalk.green('[OK]') : chalk.red('[MISSING]'); + lines.push(`${daemonIcon} Daemon: ${report.daemonRunning ? 'running on port 19825' : 'not running'}`); - const envStatus: ReportStatus = !report.envToken ? 'MISSING' : hasMismatch ? 'MISMATCH' : 'OK'; - lines.push(statusLine(envStatus, `Environment token: ${tokenSummary(report.envToken, report.envFingerprint)}`)); - - for (const shell of report.shellFiles) { - const shellStatus: ReportStatus = !shell.token ? 'MISSING' : hasMismatch ? 'MISMATCH' : 'OK'; - const tool = toolName(shell.path); - const suffix = tool ? chalk.dim(` [${tool}]`) : ''; - lines.push(statusLine(shellStatus, `${shortenPath(shell.path)}${suffix}: ${tokenSummary(shell.token, shell.fingerprint)}`)); - } - const existingConfigs = report.configs.filter(config => config.exists); - const missingConfigCount = report.configs.length - existingConfigs.length; - if (existingConfigs.length > 0) { - for (const config of existingConfigs) { - const parseSuffix = config.parseError ? chalk.red(` (parse error)`) : ''; - const configStatus: ReportStatus = config.parseError - ? 'WARN' - : !config.token - ? 'MISSING' - : hasMismatch - ? 'MISMATCH' - : 'OK'; - const tool = toolName(config.path); - const suffix = tool ? chalk.dim(` [${tool}]`) : ''; - lines.push(statusLine(configStatus, `${shortenPath(config.path)}${suffix}: ${tokenSummary(config.token, config.fingerprint)}${parseSuffix}`)); - } - } else { - lines.push(statusLine('MISSING', 'MCP config: no existing config files found')); - } - if (missingConfigCount > 0) lines.push(chalk.dim(` Other scanned config locations not present: ${missingConfigCount}`)); - lines.push(''); + // Extension status + const extIcon = report.extensionConnected ? chalk.green('[OK]') : chalk.yellow('[MISSING]'); + lines.push(`${extIcon} Extension: ${report.extensionConnected ? 'connected' : 'not connected'}`); - // Connectivity result + // Connectivity if (report.connectivity) { - const connStatus: ReportStatus = report.connectivity.ok ? 'OK' : 'WARN'; - const connDetail = report.connectivity.ok - ? `Browser connectivity: connected in ${(report.connectivity.durationMs / 1000).toFixed(1)}s` - : `Browser connectivity: failed (${report.connectivity.error ?? 'unknown'})`; - lines.push(statusLine(connStatus, connDetail)); + const connIcon = report.connectivity.ok ? chalk.green('[OK]') : chalk.red('[FAIL]'); + const detail = report.connectivity.ok + ? `connected in ${(report.connectivity.durationMs / 1000).toFixed(1)}s` + : `failed (${report.connectivity.error ?? 'unknown'})`; + lines.push(`${connIcon} Connectivity: ${detail}`); } else { - lines.push(statusLine('WARN', 'Browser connectivity: not tested (use --live)')); + lines.push(`${chalk.dim('[SKIP]')} Connectivity: not tested (use --live)`); } - lines.push(statusLine( - hasMismatch ? 'MISMATCH' : report.recommendedToken ? 'OK' : 'WARN', - `Recommended token fingerprint: ${report.recommendedFingerprint ?? 'unavailable'}`, - )); if (report.issues.length) { lines.push('', chalk.yellow('Issues:')); - for (const issue of report.issues) lines.push(chalk.dim(` • ${issue}`)); - } - if (report.warnings.length) { - lines.push('', chalk.yellow('Warnings:')); - for (const warning of report.warnings) lines.push(chalk.dim(` • ${warning}`)); - } - return lines.join('\n'); -} - -async function confirmPrompt(question: string): Promise { - const rl = createInterface({ input, output }); - try { - const answer = (await rl.question(`${question} [y/N] `)).trim().toLowerCase(); - return answer === 'y' || answer === 'yes'; - } finally { - rl.close(); + for (const issue of report.issues) { + lines.push(chalk.dim(` • ${issue}`)); + } + } else if (report.daemonRunning && report.extensionConnected) { + lines.push('', chalk.green('Everything looks good!')); } -} -export function writeFileWithMkdir(filePath: string, content: string): void { - fs.mkdirSync(path.dirname(filePath), { recursive: true }); - fs.writeFileSync(filePath, content, 'utf-8'); + return lines.join('\n'); } -export async function applyBrowserDoctorFix(report: DoctorReport, opts: DoctorOptions = {}): Promise { - const token = opts.token ?? report.recommendedToken; - if (!token) throw new Error('No Playwright MCP token is available to write. Provide --token first.'); - const fp = getTokenFingerprint(token); - - const plannedWrites: string[] = []; - const shellPath = opts.shellRc ?? report.shellFiles[0]?.path ?? getDefaultShellRcPath(); - const shellStatus = report.shellFiles.find(s => s.path === shellPath); - if (shellStatus?.fingerprint !== fp) plannedWrites.push(shellPath); - for (const config of report.configs) { - if (!config.writable) continue; - if (config.fingerprint === fp) continue; // already correct - plannedWrites.push(config.path); - } - - if (plannedWrites.length === 0) { - console.log(chalk.green('All config files are already up to date.')); - return []; - } - - if (!opts.yes) { - const ok = await confirmPrompt(`Update ${plannedWrites.length} file(s) with Playwright MCP token fingerprint ${fp}?`); - if (!ok) return []; - } - - const written: string[] = []; - if (plannedWrites.includes(shellPath)) { - const shellBefore = fileExists(shellPath) ? fs.readFileSync(shellPath, 'utf-8') : ''; - writeFileWithMkdir(shellPath, upsertShellToken(shellBefore, token, shellPath)); - written.push(shellPath); - } - - for (const config of report.configs) { - if (!plannedWrites.includes(config.path)) continue; - if (config.parseError) continue; - const before = fileExists(config.path) ? fs.readFileSync(config.path, 'utf-8') : ''; - const next = config.format === 'toml' - ? upsertTomlConfigToken(before, token) - : upsertJsonConfigToken(before, token, config.path); - writeFileWithMkdir(config.path, next); - written.push(config.path); - } - - process.env[PLAYWRIGHT_TOKEN_ENV] = token; - return written; -} +// Backward compatibility exports (no-ops for things that no longer exist) +export const PLAYWRIGHT_TOKEN_ENV = 'PLAYWRIGHT_MCP_EXTENSION_TOKEN'; +export function discoverExtensionToken(): string | null { return null; } +export function checkExtensionInstalled(): { installed: boolean; browsers: string[] } { return { installed: false, browsers: [] }; } +export function applyBrowserDoctorFix(): Promise { return Promise.resolve([]); } +export function getDefaultShellRcPath(): string { return ''; } +export function getDefaultMcpConfigPaths(): string[] { return []; } +export function readTokenFromShellContent(_content: string): string | null { return null; } +export function upsertShellToken(content: string): string { return content; } +export function upsertJsonConfigToken(content: string): string { return content; } +export function readTomlConfigToken(_content: string): string | null { return null; } +export function upsertTomlConfigToken(content: string): string { return content; } +export function shortenPath(p: string): string { return p; } +export function toolName(_p: string): string { return ''; } +export function fileExists(filePath: string): boolean { try { return require('node:fs').existsSync(filePath); } catch { return false; } } +export function writeFileWithMkdir(_p: string, _c: string): void {} +export async function checkTokenConnectivity(opts?: { timeout?: number }): Promise { return checkConnectivity(opts); } diff --git a/src/main.ts b/src/main.ts index e6bcd38..e3d89cf 100644 --- a/src/main.ts +++ b/src/main.ts @@ -119,36 +119,19 @@ program.command('cascade').description('Strategy cascade: find simplest working }); program.command('doctor') - .description('Diagnose Playwright MCP Bridge, token consistency, and Chrome remote debugging') - .option('--fix', 'Apply suggested fixes to shell rc and detected MCP configs', false) - .option('-y, --yes', 'Skip confirmation prompts when applying fixes', false) - .option('--token ', 'Override token to write instead of auto-detecting') + .description('Diagnose opencli browser bridge connectivity') .option('--live', 'Test browser connectivity (requires Chrome running)', false) - .option('--shell-rc ', 'Shell startup file to update') - .option('--mcp-config ', 'Comma-separated MCP config paths to scan/update') .action(async (opts) => { - const { runBrowserDoctor, renderBrowserDoctorReport, applyBrowserDoctorFix } = await import('./doctor.js'); - const configPaths = opts.mcpConfig ? String(opts.mcpConfig).split(',').map((s: string) => s.trim()).filter(Boolean) : undefined; - const report = await runBrowserDoctor({ token: opts.token, live: opts.live, shellRc: opts.shellRc, configPaths, cliVersion: PKG_VERSION }); + const { runBrowserDoctor, renderBrowserDoctorReport } = await import('./doctor.js'); + const report = await runBrowserDoctor({ live: opts.live, cliVersion: PKG_VERSION }); console.log(renderBrowserDoctorReport(report)); - if (opts.fix) { - const written = await applyBrowserDoctorFix(report, { fix: true, yes: opts.yes, token: opts.token, shellRc: opts.shellRc, configPaths }); - console.log(); - if (written.length > 0) { - console.log(chalk.green('Updated files:')); - for (const filePath of written) console.log(`- ${filePath}`); - } else { - console.log(chalk.yellow('No files were changed.')); - } - } }); program.command('setup') - .description('Interactive setup: configure Playwright MCP token across all detected tools') - .option('--token ', 'Provide token directly instead of auto-detecting') - .action(async (opts) => { + .description('Interactive setup: verify browser bridge connectivity') + .action(async () => { const { runSetup } = await import('./setup.js'); - await runSetup({ cliVersion: PKG_VERSION, token: opts.token }); + await runSetup({ cliVersion: PKG_VERSION }); }); program.command('completion') diff --git a/src/pipeline/steps/browser.ts b/src/pipeline/steps/browser.ts index 21302f1..d846f7f 100644 --- a/src/pipeline/steps/browser.ts +++ b/src/pipeline/steps/browser.ts @@ -52,7 +52,7 @@ export async function stepSnapshot(page: IPage | null, params: any, _data: any, export async function stepEvaluate(page: IPage | null, params: any, data: any, args: Record): Promise { const js = String(render(params, { args, data })); - let result = await page!.evaluate(normalizeEvaluateSource(js)); + let result = await page!.evaluate(js); // MCP may return JSON as a string — auto-parse it if (typeof result === 'string') { const trimmed = result.trim(); diff --git a/src/setup.ts b/src/setup.ts index df5f962..216ef00 100644 --- a/src/setup.ts +++ b/src/setup.ts @@ -1,205 +1,69 @@ /** - * setup.ts — Interactive Playwright MCP token setup + * setup.ts — Interactive browser setup for opencli * - * Discovers the extension token, shows an interactive checkbox - * for selecting which config files to update, and applies changes. + * Simplified for daemon-based architecture. No more token management. + * Just verifies daemon + extension connectivity. */ -import * as fs from 'node:fs'; + import chalk from 'chalk'; -import { createInterface } from 'node:readline/promises'; -import { stdin as input, stdout as output } from 'node:process'; -import { - type DoctorReport, - PLAYWRIGHT_TOKEN_ENV, - checkExtensionInstalled, - checkTokenConnectivity, - discoverExtensionToken, - fileExists, - getDefaultShellRcPath, - runBrowserDoctor, - shortenPath, - toolName, - upsertJsonConfigToken, - upsertShellToken, - upsertTomlConfigToken, - writeFileWithMkdir, -} from './doctor.js'; -import { getTokenFingerprint } from './browser/index.js'; -import { type CheckboxItem, checkboxPrompt } from './tui.js'; +import { checkDaemonStatus } from './browser/discover.js'; +import { checkConnectivity } from './doctor.js'; +import { PlaywrightMCP } from './browser/index.js'; export async function runSetup(opts: { cliVersion?: string; token?: string } = {}) { console.log(); - console.log(chalk.bold(' opencli setup') + chalk.dim(' — Playwright MCP token configuration')); + console.log(chalk.bold(' opencli setup') + chalk.dim(' — browser bridge configuration')); console.log(); - // Step 1: Discover token - let token = opts.token ?? null; - - if (!token) { - const extensionToken = discoverExtensionToken(); - const envToken = process.env[PLAYWRIGHT_TOKEN_ENV] ?? null; + // Step 1: Check daemon + console.log(chalk.dim(' Checking daemon status...')); + const status = await checkDaemonStatus(); - if (extensionToken && envToken && extensionToken === envToken) { - token = extensionToken; - console.log(` ${chalk.green('✓')} Token auto-discovered from Chrome extension`); - console.log(` Fingerprint: ${chalk.bold(getTokenFingerprint(token) ?? 'unknown')}`); - } else if (extensionToken) { - token = extensionToken; - console.log(` ${chalk.green('✓')} Token discovered from Chrome extension ` + - chalk.dim(`(${getTokenFingerprint(token)})`)); - if (envToken && envToken !== extensionToken) { - console.log(` ${chalk.yellow('!')} Environment has different token ` + - chalk.dim(`(${getTokenFingerprint(envToken)})`)); - } - } else if (envToken) { - token = envToken; - console.log(` ${chalk.green('✓')} Token from environment variable ` + - chalk.dim(`(${getTokenFingerprint(token)})`)); - } + if (status.running) { + console.log(` ${chalk.green('✓')} Daemon is running on port 19825`); } else { - console.log(` ${chalk.green('✓')} Using provided token ` + - chalk.dim(`(${getTokenFingerprint(token)})`)); + console.log(` ${chalk.yellow('!')} Daemon is not running`); + console.log(chalk.dim(' The daemon starts automatically when you run a browser command.')); + console.log(chalk.dim(' Starting daemon now...')); + + // Try to spawn daemon + const mcp = new PlaywrightMCP(); + try { + await mcp.connect({ timeout: 5 }); + await mcp.close(); + console.log(` ${chalk.green('✓')} Daemon started successfully`); + } catch { + console.log(` ${chalk.yellow('!')} Could not start daemon automatically`); + } } - if (!token) { - // Give precise diagnosis of why token scan failed - const extInstall = checkExtensionInstalled(); - - console.log(` ${chalk.red('✗')} Browser token scan failed\n`); - if (!extInstall.installed) { - console.log(chalk.dim(' Cause: Playwright MCP Bridge extension is not installed')); - console.log(chalk.dim(' Fix: Install from https://chromewebstore.google.com/detail/')); - console.log(chalk.dim(' playwright-mcp-bridge/mmlmfjhmonkocbjadbfplnigmagldckm')); - } else { - console.log(chalk.dim(` Cause: Extension is installed (${extInstall.browsers.join(', ')}) but token not found in LevelDB`)); - console.log(chalk.dim(' Fix: 1) Open the extension popup and verify the token is generated')); - console.log(chalk.dim(' 2) Close Chrome completely, then re-run setup')); - } + // Step 2: Check extension + const statusAfter = await checkDaemonStatus(); + if (statusAfter.extensionConnected) { + console.log(` ${chalk.green('✓')} Chrome extension connected`); + } else { + console.log(` ${chalk.red('✗')} Chrome extension not connected`); console.log(); - console.log(` You can enter the token manually, or fix the above and re-run ${chalk.bold('opencli setup')}.`); + console.log(chalk.dim(' To install the opencli Browser Bridge extension:')); + console.log(chalk.dim(' 1. Download from GitHub Releases')); + console.log(chalk.dim(' 2. Open chrome://extensions/ → Enable Developer Mode')); + console.log(chalk.dim(' 3. Click "Load unpacked" → select the extension folder')); + console.log(chalk.dim(' 4. Make sure Chrome is running')); console.log(); - const rl = createInterface({ input, output }); - const answer = await rl.question(' Token (press Enter to abort): '); - rl.close(); - token = answer.trim(); - if (!token) { - console.log(chalk.red('\n No token provided. Aborting.\n')); - return; - } - } - - const fingerprint = getTokenFingerprint(token) ?? 'unknown'; - console.log(); - - // Step 2: Scan all config locations - const report = await runBrowserDoctor({ token, cliVersion: opts.cliVersion }); - - // Step 3: Build checkbox items - const items: CheckboxItem[] = []; - - // Shell file - const shellPath = report.shellFiles[0]?.path ?? getDefaultShellRcPath(); - const shellStatus = report.shellFiles[0]; - const shellFp = shellStatus?.fingerprint; - const shellOk = shellFp === fingerprint; - const shellTool = toolName(shellPath) || 'Shell'; - items.push({ - label: padRight(shortenPath(shellPath), 50) + chalk.dim(` [${shellTool}]`), - value: `shell:${shellPath}`, - checked: !shellOk, - status: shellOk ? `configured (${shellFp})` : shellFp ? `mismatch (${shellFp})` : 'missing', - statusColor: shellOk ? 'green' : shellFp ? 'yellow' : 'red', - }); - - // Config files - for (const config of report.configs) { - const fp = config.fingerprint; - const ok = fp === fingerprint; - const tool = toolName(config.path); - items.push({ - label: padRight(shortenPath(config.path), 50) + chalk.dim(tool ? ` [${tool}]` : ''), - value: `config:${config.path}`, - checked: false, // let user explicitly select which tools to configure - status: ok ? `configured (${fp})` : !config.exists ? 'will create' : fp ? `mismatch (${fp})` : 'missing', - statusColor: ok ? 'green' : 'yellow', - }); - } - - // Step 4: Show interactive checkbox - console.clear(); - const selected = await checkboxPrompt(items, { - title: ` ${chalk.bold('opencli setup')} — token ${chalk.cyan(fingerprint)}`, - }); - - if (selected.length === 0) { - console.log(chalk.dim(' No changes made.\n')); return; } - // Step 5: Apply changes - const written: string[] = []; - let wroteShell = false; - - for (const sel of selected) { - if (sel.startsWith('shell:')) { - const p = sel.slice('shell:'.length); - const before = fileExists(p) ? fs.readFileSync(p, 'utf-8') : ''; - writeFileWithMkdir(p, upsertShellToken(before, token, p)); - written.push(p); - wroteShell = true; - } else if (sel.startsWith('config:')) { - const p = sel.slice('config:'.length); - const config = report.configs.find(c => c.path === p); - if (config && config.parseError) continue; - const before = fileExists(p) ? fs.readFileSync(p, 'utf-8') : ''; - const format = config?.format ?? (p.endsWith('.toml') ? 'toml' : 'json'); - const next = format === 'toml' ? upsertTomlConfigToken(before, token) : upsertJsonConfigToken(before, token, p); - writeFileWithMkdir(p, next); - written.push(p); - } - } - - process.env[PLAYWRIGHT_TOKEN_ENV] = token; - - // Step 6: Summary - if (written.length > 0) { - console.log(chalk.green.bold(` ✓ Updated ${written.length} file(s):`)); - for (const p of written) { - const tool = toolName(p); - console.log(` ${chalk.dim('•')} ${shortenPath(p)}${tool ? chalk.dim(` [${tool}]`) : ''}`); - } - if (wroteShell) { - console.log(); - console.log(chalk.cyan(` 💡 Run ${chalk.bold(`source ${shortenPath(shellPath)}`)} to apply token to current shell.`)); - } - } else { - console.log(chalk.yellow(' No files were changed.')); - } + // Step 3: Test connectivity console.log(); - - // Step 7: Auto-verify browser connectivity - console.log(chalk.dim(' Verifying browser connectivity...')); - try { - const result = await checkTokenConnectivity({ timeout: 5 }); - if (result.ok) { - console.log(` ${chalk.green('✓')} Browser connected in ${(result.durationMs / 1000).toFixed(1)}s`); - } else { - console.log(` ${chalk.green('✓')} Token saved successfully.`); - console.log(` ${chalk.yellow('!')} Browser connectivity test failed: ${result.error ?? 'unknown'}`); - console.log(chalk.dim(' Token configuration is complete. To use opencli, make sure Chrome')); - console.log(chalk.dim(' is running with the Playwright MCP Bridge extension enabled.')); - console.log(chalk.dim(` Run ${chalk.bold('opencli doctor --live')} to re-test connectivity.`)); - } - } catch { - console.log(` ${chalk.green('✓')} Token saved successfully.`); - console.log(` ${chalk.yellow('!')} Browser connectivity test skipped (Chrome may not be running).`); - console.log(chalk.dim(' Token configuration is complete. Start Chrome to begin using opencli.')); - console.log(chalk.dim(` Run ${chalk.bold('opencli doctor --live')} to re-test connectivity.`)); + console.log(chalk.dim(' Testing browser connectivity...')); + const conn = await checkConnectivity({ timeout: 5 }); + if (conn.ok) { + console.log(` ${chalk.green('✓')} Browser connected in ${(conn.durationMs / 1000).toFixed(1)}s`); + console.log(); + console.log(chalk.green.bold(' ✓ Setup complete! You can now use opencli browser commands.')); + } else { + console.log(` ${chalk.yellow('!')} Connectivity test failed: ${conn.error ?? 'unknown'}`); + console.log(chalk.dim(` Run ${chalk.bold('opencli doctor --live')} to diagnose.`)); } console.log(); } - -function padRight(s: string, n: number): string { - const visible = s.replace(/\x1b\[[0-9;]*m/g, ''); - return visible.length >= n ? s : s + ' '.repeat(n - visible.length); -} From 01b8b6b5bf4dca44c094efb9c9ed9ac0ca562e1a Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 15:58:14 +0800 Subject: [PATCH 03/10] refactor: fix 14 issues from deep code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit P0 Critical: - #1 Fix double IIFE wrapping: unified wrapForEval() replaces normalizeEvaluateSource + ad-hoc wrap in page.evaluate() - #2 Fix navigate race: check tab.status before addListener, reduced timeout 30s→15s P1 Should Fix: - #8 Remove unused permissions (scripting, host_permissions, content_scripts) - #10 Add retry (3x, 500ms) + timeout (30s) to sendCommand() P2 Cleanup: - #3 Extract isWebUrl() to safely handle undefined tab.url - #4 Sanitize maxDepth with Math.max/min bounds - #6 Delete empty src/daemon/ directory - #7 Remove dead createJsonRpcRequest + its test - #9 Remove stale IIFE-mode comment - #11 Validate body.id in daemon request handler - #12 Guard ensureAttached: detach+re-attach on 'already attached' - #14 Extract _tabOpt() helper (removes 13x spread duplication) - #15 Add verbose warning for unsupported consoleMessages() All 35 unit tests pass. --- extension/content/noop.js | 2 - extension/manifest.json | 11 ---- extension/src/background.ts | 51 ++++++++-------- extension/src/cdp.ts | 12 +++- src/browser.test.ts | 9 --- src/browser/daemon-client.ts | 39 +++++++++---- src/browser/index.ts | 3 - src/browser/mcp.ts | 7 +-- src/browser/page.ts | 110 +++++++++++++++++------------------ src/daemon.ts | 4 ++ 10 files changed, 127 insertions(+), 121 deletions(-) delete mode 100644 extension/content/noop.js diff --git a/extension/content/noop.js b/extension/content/noop.js deleted file mode 100644 index 2698aae..0000000 --- a/extension/content/noop.js +++ /dev/null @@ -1,2 +0,0 @@ -// Minimal content script — required by manifest to auto-grant host permissions. -// No actual logic needed; chrome.scripting.executeScript handles all injection. diff --git a/extension/manifest.json b/extension/manifest.json index d0c84c9..c2a2d6c 100644 --- a/extension/manifest.json +++ b/extension/manifest.json @@ -5,22 +5,11 @@ "description": "Bridge between opencli CLI and your browser — execute commands, read cookies, manage tabs.", "permissions": [ "debugger", - "scripting", "tabs", "cookies", "activeTab", "alarms" ], - "host_permissions": [ - "" - ], - "content_scripts": [ - { - "matches": ["http://*/*", "https://*/*"], - "js": ["content/noop.js"], - "run_at": "document_idle" - } - ], "background": { "service_worker": "dist/background.js", "type": "module" diff --git a/extension/src/background.ts b/extension/src/background.ts index 2dcebde..30ec020 100644 --- a/extension/src/background.ts +++ b/extension/src/background.ts @@ -2,11 +2,7 @@ * opencli Browser Bridge — Service Worker (background script). * * Connects to the opencli daemon via WebSocket, receives commands, - * dispatches them to Chrome APIs (scripting/tabs/cookies), returns results. - * - * IMPORTANT: In IIFE mode (non-module), all chrome.* API registrations - * must happen inside lifecycle events (onInstalled/onStartup), NOT at - * the top level, or the service worker registration will fail. + * dispatches them to Chrome APIs (debugger/tabs/cookies), returns results. */ import type { Command, Result } from './protocol'; @@ -66,7 +62,6 @@ function scheduleReconnect(): void { } // ─── Lifecycle events ──────────────────────────────────────────────── -// All chrome.* API registrations must be in these listeners, not top-level. function initialize(): void { chrome.alarms.create('keepalive', { periodInMinutes: 0.4 }); // ~24 seconds @@ -114,20 +109,25 @@ async function handleCommand(cmd: Command): Promise { // ─── Action handlers ───────────────────────────────────────────────── +/** Check if a URL is a debuggable web page (not chrome:// or extension page) */ +function isWebUrl(url?: string): boolean { + if (!url) return false; + return !url.startsWith('chrome://') && !url.startsWith('chrome-extension://'); +} + /** Resolve target tab: use specified tabId or fall back to active web page tab */ async function resolveTabId(tabId?: number): Promise { if (tabId !== undefined) return tabId; // Try the active tab first const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true }); - if (activeTab?.id && activeTab.url && !activeTab.url.startsWith('chrome://') && !activeTab.url.startsWith('chrome-extension://')) { + if (activeTab?.id && isWebUrl(activeTab.url)) { return activeTab.id; } - // Active tab is not debuggable (chrome:// or chrome-extension://), - // try to find any open web page tab + // Active tab is not debuggable — try to find any open web page tab const allTabs = await chrome.tabs.query({ currentWindow: true }); - const webTab = allTabs.find(t => t.id && t.url && !t.url.startsWith('chrome://') && !t.url.startsWith('chrome-extension://')); + const webTab = allTabs.find(t => t.id && isWebUrl(t.url)); if (webTab?.id) { await chrome.tabs.update(webTab.id, { active: true }); return webTab.id; @@ -155,20 +155,25 @@ async function handleNavigate(cmd: Command): Promise { const tabId = await resolveTabId(cmd.tabId); await chrome.tabs.update(tabId, { url: cmd.url }); - // Wait for page to finish loading + // Wait for page to finish loading, checking current status first to avoid race await new Promise((resolve) => { - const listener = (id: number, info: chrome.tabs.TabChangeInfo) => { - if (id === tabId && info.status === 'complete') { + // Check if already complete (e.g. cached pages) + chrome.tabs.get(tabId).then(tab => { + if (tab.status === 'complete') { resolve(); return; } + + const listener = (id: number, info: chrome.tabs.TabChangeInfo) => { + if (id === tabId && info.status === 'complete') { + chrome.tabs.onUpdated.removeListener(listener); + resolve(); + } + }; + chrome.tabs.onUpdated.addListener(listener); + // Timeout fallback + setTimeout(() => { chrome.tabs.onUpdated.removeListener(listener); resolve(); - } - }; - chrome.tabs.onUpdated.addListener(listener); - // Timeout fallback - setTimeout(() => { - chrome.tabs.onUpdated.removeListener(listener); - resolve(); - }, 30000); + }, 15000); + }); }); const tab = await chrome.tabs.get(tabId); @@ -180,7 +185,7 @@ async function handleTabs(cmd: Command): Promise { case 'list': { const tabs = await chrome.tabs.query({}); const data = tabs - .filter((t) => t.url && !t.url.startsWith('chrome://') && !t.url.startsWith('chrome-extension://')) + .filter((t) => isWebUrl(t.url)) .map((t, i) => ({ index: i, tabId: t.id, @@ -196,7 +201,6 @@ async function handleTabs(cmd: Command): Promise { } case 'close': { if (cmd.index !== undefined) { - // Close by index const tabs = await chrome.tabs.query({}); const target = tabs[cmd.index]; if (!target?.id) return { id: cmd.id, ok: false, error: `Tab index ${cmd.index} not found` }; @@ -204,7 +208,6 @@ async function handleTabs(cmd: Command): Promise { cdp.detach(target.id); return { id: cmd.id, ok: true, data: { closed: target.id } }; } - // Close by tabId or active tab const tabId = await resolveTabId(cmd.tabId); await chrome.tabs.remove(tabId); cdp.detach(tabId); diff --git a/extension/src/cdp.ts b/extension/src/cdp.ts index 8d4409a..390133d 100644 --- a/extension/src/cdp.ts +++ b/extension/src/cdp.ts @@ -15,7 +15,17 @@ async function ensureAttached(tabId: number): Promise { await chrome.debugger.attach({ tabId }, '1.3'); } catch (e: unknown) { const msg = e instanceof Error ? e.message : String(e); - if (!msg.includes('Another debugger is already attached')) { + // "Already attached" from OUR previous session (service worker restart) — OK, track it + if (msg.includes('Another debugger is already attached')) { + // Don't add to attached set — we can't sendCommand on someone else's session + // Try to detach and re-attach to claim ownership + try { await chrome.debugger.detach({ tabId }); } catch { /* ignore */ } + try { + await chrome.debugger.attach({ tabId }, '1.3'); + } catch { + throw new Error(`attach failed: ${msg}`); + } + } else { throw new Error(`attach failed: ${msg}`); } } diff --git a/src/browser.test.ts b/src/browser.test.ts index ca679a5..dba6826 100644 --- a/src/browser.test.ts +++ b/src/browser.test.ts @@ -2,15 +2,6 @@ import { afterEach, describe, it, expect, vi } from 'vitest'; import { PlaywrightMCP, __test__ } from './browser/index.js'; describe('browser helpers', () => { - it('creates JSON-RPC requests with unique ids', () => { - const first = __test__.createJsonRpcRequest('tools/call', { name: 'browser_tabs' }); - const second = __test__.createJsonRpcRequest('tools/call', { name: 'browser_snapshot' }); - - expect(second.id).toBe(first.id + 1); - expect(first.message).toContain(`"id":${first.id}`); - expect(second.message).toContain(`"id":${second.id}`); - }); - it('extracts tab entries from string snapshots', () => { const entries = __test__.extractTabEntries('Tab 0 https://example.com\nTab 1 Chrome Extension'); diff --git a/src/browser/daemon-client.ts b/src/browser/daemon-client.ts index d7810cf..c12689b 100644 --- a/src/browser/daemon-client.ts +++ b/src/browser/daemon-client.ts @@ -65,6 +65,7 @@ export async function isExtensionConnected(): Promise { /** * Send a command to the daemon and wait for a result. + * Retries up to 3 times with 500ms delay for transient failures. */ export async function sendCommand( action: DaemonCommand['action'], @@ -72,18 +73,36 @@ export async function sendCommand( ): Promise { const id = generateId(); const command: DaemonCommand = { id, action, ...params }; + const maxRetries = 3; - const res = await fetch(`${DAEMON_URL}/command`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(command), - }); + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + const controller = new AbortController(); + const timer = setTimeout(() => controller.abort(), 30000); - const result = (await res.json()) as DaemonResult; + const res = await fetch(`${DAEMON_URL}/command`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(command), + signal: controller.signal, + }); + clearTimeout(timer); - if (!result.ok) { - throw new Error(result.error ?? 'Daemon command failed'); - } + const result = (await res.json()) as DaemonResult; + + if (!result.ok) { + throw new Error(result.error ?? 'Daemon command failed'); + } - return result.data; + return result.data; + } catch (err) { + const isRetryable = err instanceof TypeError // fetch network error + || (err instanceof Error && err.name === 'AbortError'); + if (isRetryable && attempt < maxRetries) { + await new Promise(r => setTimeout(r, 500)); + continue; + } + throw err; + } + } } diff --git a/src/browser/index.ts b/src/browser/index.ts index adec262..0c08f08 100644 --- a/src/browser/index.ts +++ b/src/browser/index.ts @@ -14,13 +14,10 @@ export function getTokenFingerprint(_token: string | undefined): string | null { return null; } -// Test-only helpers -import { createJsonRpcRequest } from './mcp.js'; import { extractTabEntries, diffTabIndexes, appendLimited } from './tabs.js'; import { withTimeoutMs } from '../runtime.js'; export const __test__ = { - createJsonRpcRequest, extractTabEntries, diffTabIndexes, appendLimited, diff --git a/src/browser/mcp.ts b/src/browser/mcp.ts index d40a9a8..e3bbf49 100644 --- a/src/browser/mcp.ts +++ b/src/browser/mcp.ts @@ -17,12 +17,7 @@ const DAEMON_SPAWN_TIMEOUT = 10000; // 10s to wait for daemon + extension export type PlaywrightMCPState = 'idle' | 'connecting' | 'connected' | 'closing' | 'closed'; -// Re-export for __test__ compatibility -let _jsonRpcId = 0; -export function createJsonRpcRequest(method: string, params: Record = {}): { id: number; message: string } { - const id = ++_jsonRpcId; - return { id, message: JSON.stringify({ id, method, params }) }; -} + /** * Browser factory: manages daemon lifecycle and provides IPage instances. diff --git a/src/browser/page.ts b/src/browser/page.ts index 2ef766b..3097f56 100644 --- a/src/browser/page.ts +++ b/src/browser/page.ts @@ -11,8 +11,6 @@ */ import { formatSnapshot } from '../snapshotFormatter.js'; -import { normalizeEvaluateSource } from '../pipeline/template.js'; -import { generateInterceptorJs, generateReadInterceptedJs } from '../interceptor.js'; import type { IPage } from '../types.js'; import { sendCommand } from './daemon-client.js'; @@ -23,10 +21,15 @@ export class Page implements IPage { /** Active tab ID, set after navigate and used in all subsequent commands */ private _tabId: number | undefined; + /** Helper: spread tabId into command params if we have one */ + private _tabOpt(): { tabId: number } | Record { + return this._tabId !== undefined ? { tabId: this._tabId } : {}; + } + async goto(url: string): Promise { const result = await sendCommand('navigate', { url, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + ...this._tabOpt(), }) as { tabId?: number }; // Remember the tabId for subsequent exec calls if (result?.tabId) { @@ -35,27 +38,16 @@ export class Page implements IPage { } async evaluate(js: string): Promise { - const normalized = normalizeEvaluateSource(js); - // Wrap function-style code: `() => { ... }` or `async () => { ... }` → IIFE - const trimmed = normalized.trim(); - const code = trimmed.startsWith('async') - ? `(${trimmed})()` - : trimmed.startsWith('function') || trimmed.startsWith('(') - ? `(${trimmed})()` - : trimmed; - return sendCommand('exec', { - code, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), - }); + const code = wrapForEval(js); + return sendCommand('exec', { code, ...this._tabOpt() }); } async snapshot(opts: { interactive?: boolean; compact?: boolean; maxDepth?: number; raw?: boolean } = {}): Promise { - // Use CDP Accessibility.getFullAXTree via exec + const maxDepth = Math.max(1, Math.min(Number(opts.maxDepth) || 50, 200)); const code = ` (async () => { - // Build a simplified accessibility tree from the DOM - function buildTree(node, depth = 0) { - if (depth > ${opts.maxDepth ?? 50}) return ''; + function buildTree(node, depth) { + if (depth > ${maxDepth}) return ''; const role = node.getAttribute?.('role') || node.tagName?.toLowerCase() || 'generic'; const name = node.getAttribute?.('aria-label') || node.getAttribute?.('alt') || node.textContent?.trim().slice(0, 80) || ''; const isInteractive = ['a', 'button', 'input', 'select', 'textarea'].includes(node.tagName?.toLowerCase()) || node.getAttribute?.('tabindex') != null; @@ -64,7 +56,7 @@ export class Page implements IPage { let indent = ' '.repeat(depth); let line = indent + role; - if (name) line += ' "' + name.replace(/"/g, '\\"') + '"'; + if (name) line += ' "' + name.replace(/"/g, '\\\\"') + '"'; if (node.tagName?.toLowerCase() === 'a' && node.href) line += ' [' + node.href + ']'; if (node.tagName?.toLowerCase() === 'input') line += ' [' + (node.type || 'text') + ']'; @@ -76,13 +68,10 @@ export class Page implements IPage { } return result; } - return buildTree(document.body); + return buildTree(document.body, 0); })() `; - const raw = await sendCommand('exec', { - code, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), - }); + const raw = await sendCommand('exec', { code, ...this._tabOpt() }); if (opts.raw) return raw; if (typeof raw === 'string') return formatSnapshot(raw, opts); return raw; @@ -101,10 +90,7 @@ export class Page implements IPage { return 'clicked'; })() `; - await sendCommand('exec', { - code, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), - }); + await sendCommand('exec', { code, ...this._tabOpt() }); } async typeText(ref: string, text: string): Promise { @@ -123,10 +109,7 @@ export class Page implements IPage { return 'typed'; })() `; - await sendCommand('exec', { - code, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), - }); + await sendCommand('exec', { code, ...this._tabOpt() }); } async pressKey(key: string): Promise { @@ -138,10 +121,7 @@ export class Page implements IPage { return 'pressed'; })() `; - await sendCommand('exec', { - code, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), - }); + await sendCommand('exec', { code, ...this._tabOpt() }); } async wait(options: number | { text?: string; time?: number; timeout?: number }): Promise { @@ -166,10 +146,7 @@ export class Page implements IPage { check(); }) `; - await sendCommand('exec', { - code, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), - }); + await sendCommand('exec', { code, ...this._tabOpt() }); } } @@ -190,7 +167,6 @@ export class Page implements IPage { } async networkRequests(includeStatic: boolean = false): Promise { - // Use performance API to get network entries const code = ` (() => { const entries = performance.getEntriesByType('resource'); @@ -204,15 +180,15 @@ export class Page implements IPage { })); })() `; - return sendCommand('exec', { - code, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), - }); + return sendCommand('exec', { code, ...this._tabOpt() }); } async consoleMessages(level: string = 'info'): Promise { - // Console messages can't be retrospectively read via exec. - // Return empty for now — users should use networkRequests or evaluate. + // Console messages can't be retrospectively read via CDP Runtime.evaluate. + // Would need Runtime.consoleAPICalled event listener, which is not yet implemented. + if (process.env.OPENCLI_VERBOSE) { + console.error('[page] consoleMessages() not supported in lightweight mode — returning empty'); + } return []; } @@ -221,7 +197,7 @@ export class Page implements IPage { const dy = direction === 'up' ? -amount : direction === 'down' ? amount : 0; await sendCommand('exec', { code: `window.scrollBy(${dx}, ${dy})`, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + ...this._tabOpt(), }); } @@ -248,27 +224,51 @@ export class Page implements IPage { } })() `; - await sendCommand('exec', { - code, - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), - }); + await sendCommand('exec', { code, ...this._tabOpt() }); } async installInterceptor(pattern: string): Promise { + const { generateInterceptorJs } = await import('../interceptor.js'); await sendCommand('exec', { code: generateInterceptorJs(JSON.stringify(pattern), { arrayName: '__opencli_xhr', patchGuard: '__opencli_interceptor_patched', }), - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + ...this._tabOpt(), }); } async getInterceptedRequests(): Promise { + const { generateReadInterceptedJs } = await import('../interceptor.js'); const result = await sendCommand('exec', { code: generateReadInterceptedJs('__opencli_xhr'), - ...(this._tabId !== undefined ? { tabId: this._tabId } : {}), + ...this._tabOpt(), }); return (result as any[]) || []; } } + +// ─── Helpers ───────────────────────────────────────────────────────── + +/** + * Wrap JS code for CDP Runtime.evaluate: + * - Already an IIFE `(...)()` → send as-is + * - Arrow/function literal → wrap as IIFE `(code)()` + * - `new Promise(...)` or raw expression → send as-is (expression) + */ +function wrapForEval(js: string): string { + const code = js.trim(); + if (!code) return 'undefined'; + + // Already an IIFE: `(async () => { ... })()` or `(function() {...})()` + if (/^\([\s\S]*\)\s*\(.*\)\s*$/.test(code)) return code; + + // Arrow function: `() => ...` or `async () => ...` + if (/^(async\s+)?(\([^)]*\)|[A-Za-z_]\w*)\s*=>/.test(code)) return `(${code})()`; + + // Function declaration: `function ...` or `async function ...` + if (/^(async\s+)?function[\s(]/.test(code)) return `(${code})()`; + + // Everything else: bare expression, `new Promise(...)`, etc. → evaluate directly + return code; +} diff --git a/src/daemon.ts b/src/daemon.ts index 568eda7..21b29db 100644 --- a/src/daemon.ts +++ b/src/daemon.ts @@ -74,6 +74,10 @@ async function handleRequest(req: IncomingMessage, res: ServerResponse): Promise resetIdleTimer(); try { const body = JSON.parse(await readBody(req)); + if (!body.id) { + jsonResponse(res, 400, { ok: false, error: 'Missing command id' }); + return; + } if (!extensionWs || extensionWs.readyState !== WebSocket.OPEN) { jsonResponse(res, 503, { id: body.id, ok: false, error: 'Extension not connected. Please install the opencli Browser Bridge extension.' }); From 8e8c4a02297e8220a20364d48ed4a2c781b627b3 Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 16:06:26 +0800 Subject: [PATCH 04/10] feat: add exponential backoff reconnect + CDP screenshot support Exponential backoff: - Reconnect delay: 2s, 4s, 8s, 16s, ..., capped at 60s - Resets to base delay on successful connection - Reduces idle CPU waste vs fixed 3s reconnect Screenshot via CDP Page.captureScreenshot: - New 'screenshot' action in protocol (5th action) - Supports format (png/jpeg), quality, fullPage - Full-page: uses Emulation.setDeviceMetricsOverride for scroll height - CLI-side: page.screenshot() with optional file save - Extension build: 9.81KB (+1.7KB from 8.11KB) Inspired by bb-browser's architecture patterns. --- extension/src/background.ts | 25 +++++++++++++++-- extension/src/cdp.ts | 53 ++++++++++++++++++++++++++++++++++-- extension/src/protocol.ts | 17 +++++++++--- src/browser/daemon-client.ts | 5 +++- src/browser/page.ts | 31 +++++++++++++++++++++ 5 files changed, 121 insertions(+), 10 deletions(-) diff --git a/extension/src/background.ts b/extension/src/background.ts index 30ec020..fa9acaa 100644 --- a/extension/src/background.ts +++ b/extension/src/background.ts @@ -6,11 +6,12 @@ */ import type { Command, Result } from './protocol'; -import { DAEMON_WS_URL, WS_RECONNECT_DELAY } from './protocol'; +import { DAEMON_WS_URL, WS_RECONNECT_BASE_DELAY, WS_RECONNECT_MAX_DELAY } from './protocol'; import * as cdp from './cdp'; let ws: WebSocket | null = null; let reconnectTimer: ReturnType | null = null; +let reconnectAttempts = 0; // ─── WebSocket connection ──────────────────────────────────────────── @@ -26,6 +27,7 @@ function connect(): void { ws.onopen = () => { console.log('[opencli] Connected to daemon'); + reconnectAttempts = 0; // Reset on successful connection if (reconnectTimer) { clearTimeout(reconnectTimer); reconnectTimer = null; @@ -55,10 +57,13 @@ function connect(): void { function scheduleReconnect(): void { if (reconnectTimer) return; + reconnectAttempts++; + // Exponential backoff: 2s, 4s, 8s, 16s, ..., capped at 60s + const delay = Math.min(WS_RECONNECT_BASE_DELAY * Math.pow(2, reconnectAttempts - 1), WS_RECONNECT_MAX_DELAY); reconnectTimer = setTimeout(() => { reconnectTimer = null; connect(); - }, WS_RECONNECT_DELAY); + }, delay); } // ─── Lifecycle events ──────────────────────────────────────────────── @@ -95,6 +100,8 @@ async function handleCommand(cmd: Command): Promise { return await handleTabs(cmd); case 'cookies': return await handleCookies(cmd); + case 'screenshot': + return await handleScreenshot(cmd); default: return { id: cmd.id, ok: false, error: `Unknown action: ${cmd.action}` }; } @@ -247,3 +254,17 @@ async function handleCookies(cmd: Command): Promise { })); return { id: cmd.id, ok: true, data }; } + +async function handleScreenshot(cmd: Command): Promise { + const tabId = await resolveTabId(cmd.tabId); + try { + const data = await cdp.screenshot(tabId, { + format: cmd.format, + quality: cmd.quality, + fullPage: cmd.fullPage, + }); + return { id: cmd.id, ok: true, data }; + } catch (err) { + return { id: cmd.id, ok: false, error: err instanceof Error ? err.message : String(err) }; + } +} diff --git a/extension/src/cdp.ts b/extension/src/cdp.ts index 390133d..ac9fe38 100644 --- a/extension/src/cdp.ts +++ b/extension/src/cdp.ts @@ -15,10 +15,7 @@ async function ensureAttached(tabId: number): Promise { await chrome.debugger.attach({ tabId }, '1.3'); } catch (e: unknown) { const msg = e instanceof Error ? e.message : String(e); - // "Already attached" from OUR previous session (service worker restart) — OK, track it if (msg.includes('Another debugger is already attached')) { - // Don't add to attached set — we can't sendCommand on someone else's session - // Try to detach and re-attach to claim ownership try { await chrome.debugger.detach({ tabId }); } catch { /* ignore */ } try { await chrome.debugger.attach({ tabId }, '1.3'); @@ -62,6 +59,56 @@ export async function evaluate(tabId: number, expression: string): Promise { + await ensureAttached(tabId); + + const format = options.format ?? 'png'; + + // For full-page screenshots, get the full page dimensions first + if (options.fullPage) { + // Get full page metrics + const metrics = await chrome.debugger.sendCommand({ tabId }, 'Page.getLayoutMetrics') as { + contentSize?: { width: number; height: number }; + cssContentSize?: { width: number; height: number }; + }; + const size = metrics.cssContentSize || metrics.contentSize; + if (size) { + // Set device metrics to full page size + await chrome.debugger.sendCommand({ tabId }, 'Emulation.setDeviceMetricsOverride', { + mobile: false, + width: Math.ceil(size.width), + height: Math.ceil(size.height), + deviceScaleFactor: 1, + }); + } + } + + try { + const params: Record = { format }; + if (format === 'jpeg' && options.quality !== undefined) { + params.quality = Math.max(0, Math.min(100, options.quality)); + } + + const result = await chrome.debugger.sendCommand({ tabId }, 'Page.captureScreenshot', params) as { + data: string; // base64-encoded + }; + + return result.data; + } finally { + // Reset device metrics if we changed them for full-page + if (options.fullPage) { + await chrome.debugger.sendCommand({ tabId }, 'Emulation.clearDeviceMetricsOverride').catch(() => {}); + } + } +} + export function detach(tabId: number): void { if (!attached.has(tabId)) return; attached.delete(tabId); diff --git a/extension/src/protocol.ts b/extension/src/protocol.ts index 83f7391..efce9c0 100644 --- a/extension/src/protocol.ts +++ b/extension/src/protocol.ts @@ -1,10 +1,11 @@ /** * opencli browser protocol — shared types between daemon, extension, and CLI. * - * Only 4 actions. Everything else is just JS code sent via 'exec'. + * 5 actions: exec, navigate, tabs, cookies, screenshot. + * Everything else is just JS code sent via 'exec'. */ -export type Action = 'exec' | 'navigate' | 'tabs' | 'cookies'; +export type Action = 'exec' | 'navigate' | 'tabs' | 'cookies' | 'screenshot'; export interface Command { /** Unique request ID */ @@ -23,6 +24,12 @@ export interface Command { index?: number; /** Cookie domain filter */ domain?: string; + /** Screenshot format: png (default) or jpeg */ + format?: 'png' | 'jpeg'; + /** JPEG quality (0-100), only for jpeg format */ + quality?: number; + /** Whether to capture full page (not just viewport) */ + fullPage?: boolean; } export interface Result { @@ -42,7 +49,9 @@ export const DAEMON_HOST = 'localhost'; export const DAEMON_WS_URL = `ws://${DAEMON_HOST}:${DAEMON_PORT}/ext`; export const DAEMON_HTTP_URL = `http://${DAEMON_HOST}:${DAEMON_PORT}`; -/** Reconnect delay for extension WebSocket (ms) */ -export const WS_RECONNECT_DELAY = 3000; +/** Base reconnect delay for extension WebSocket (ms) */ +export const WS_RECONNECT_BASE_DELAY = 2000; +/** Max reconnect delay (ms) */ +export const WS_RECONNECT_MAX_DELAY = 60000; /** Idle timeout before daemon auto-exits (ms) */ export const DAEMON_IDLE_TIMEOUT = 5 * 60 * 1000; diff --git a/src/browser/daemon-client.ts b/src/browser/daemon-client.ts index c12689b..678661c 100644 --- a/src/browser/daemon-client.ts +++ b/src/browser/daemon-client.ts @@ -15,13 +15,16 @@ function generateId(): string { export interface DaemonCommand { id: string; - action: 'exec' | 'navigate' | 'tabs' | 'cookies'; + action: 'exec' | 'navigate' | 'tabs' | 'cookies' | 'screenshot'; tabId?: number; code?: string; url?: string; op?: string; index?: number; domain?: string; + format?: 'png' | 'jpeg'; + quality?: number; + fullPage?: boolean; } export interface DaemonResult { diff --git a/src/browser/page.ts b/src/browser/page.ts index 3097f56..af9c7b7 100644 --- a/src/browser/page.ts +++ b/src/browser/page.ts @@ -192,6 +192,37 @@ export class Page implements IPage { return []; } + /** + * Capture a screenshot via CDP Page.captureScreenshot. + * @param options.format - 'png' (default) or 'jpeg' + * @param options.quality - JPEG quality 0-100 + * @param options.fullPage - capture full scrollable page + * @param options.path - save to file path (returns base64 if omitted) + */ + async screenshot(options: { + format?: 'png' | 'jpeg'; + quality?: number; + fullPage?: boolean; + path?: string; + } = {}): Promise { + const base64 = await sendCommand('screenshot', { + format: options.format, + quality: options.quality, + fullPage: options.fullPage, + ...this._tabOpt(), + }) as string; + + if (options.path) { + const fs = await import('node:fs'); + const path = await import('node:path'); + const dir = path.dirname(options.path); + fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync(options.path, Buffer.from(base64, 'base64')); + } + + return base64; + } + async scroll(direction: string = 'down', amount: number = 500): Promise { const dx = direction === 'left' ? -amount : direction === 'right' ? amount : 0; const dy = direction === 'up' ? -amount : direction === 'down' ? amount : 0; From 3d1f9640ea9c6c97452321a99e888a0e51be0bac Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 16:11:07 +0800 Subject: [PATCH 05/10] feat: forward extension console logs to daemon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extension side: - Hook console.log/warn/error → forward via WS as { type: 'log', level, msg, ts } - Original console output preserved (for chrome://extensions debug) Daemon side: - Ring buffer (200 entries) stores extension logs - Logs printed to daemon stderr with emoji prefix (📋/⚠️/❌) - GET /logs — returns buffered logs (optional ?level= filter) - DELETE /logs — clears log buffer Usage: curl localhost:19825/logs # view all logs curl localhost:19825/logs?level=error # errors only curl -X DELETE localhost:19825/logs # clear buffer Extension build: 10.48KB --- extension/src/background.ts | 19 ++++++++++++++++ src/daemon.ts | 43 +++++++++++++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 4 deletions(-) diff --git a/extension/src/background.ts b/extension/src/background.ts index fa9acaa..7fc96cf 100644 --- a/extension/src/background.ts +++ b/extension/src/background.ts @@ -13,6 +13,25 @@ let ws: WebSocket | null = null; let reconnectTimer: ReturnType | null = null; let reconnectAttempts = 0; +// ─── Console log forwarding ────────────────────────────────────────── +// Hook console.log/warn/error to forward logs to daemon via WebSocket. + +const _origLog = console.log.bind(console); +const _origWarn = console.warn.bind(console); +const _origError = console.error.bind(console); + +function forwardLog(level: 'info' | 'warn' | 'error', args: unknown[]): void { + if (!ws || ws.readyState !== WebSocket.OPEN) return; + try { + const msg = args.map(a => typeof a === 'string' ? a : JSON.stringify(a)).join(' '); + ws.send(JSON.stringify({ type: 'log', level, msg, ts: Date.now() })); + } catch { /* don't recurse */ } +} + +console.log = (...args: unknown[]) => { _origLog(...args); forwardLog('info', args); }; +console.warn = (...args: unknown[]) => { _origWarn(...args); forwardLog('warn', args); }; +console.error = (...args: unknown[]) => { _origError(...args); forwardLog('error', args); }; + // ─── WebSocket connection ──────────────────────────────────────────── function connect(): void { diff --git a/src/daemon.ts b/src/daemon.ts index 21b29db..8cfc9c7 100644 --- a/src/daemon.ts +++ b/src/daemon.ts @@ -27,6 +27,16 @@ const pending = new Map(); let idleTimer: ReturnType | null = null; +// Extension log ring buffer +interface LogEntry { level: string; msg: string; ts: number; } +const LOG_BUFFER_SIZE = 200; +const logBuffer: LogEntry[] = []; + +function pushLog(entry: LogEntry): void { + logBuffer.push(entry); + if (logBuffer.length > LOG_BUFFER_SIZE) logBuffer.shift(); +} + // ─── Idle auto-exit ────────────────────────────────────────────────── function resetIdleTimer(): void { @@ -70,6 +80,21 @@ async function handleRequest(req: IncomingMessage, res: ServerResponse): Promise return; } + if (req.method === 'GET' && url === '/logs') { + const level = new URL(url, `http://localhost:${PORT}`).searchParams.get('level'); + const filtered = level + ? logBuffer.filter(e => e.level === level) + : logBuffer; + jsonResponse(res, 200, { ok: true, logs: filtered }); + return; + } + + if (req.method === 'DELETE' && url === '/logs') { + logBuffer.length = 0; + jsonResponse(res, 200, { ok: true }); + return; + } + if (req.method === 'POST' && url === '/command') { resetIdleTimer(); try { @@ -117,12 +142,22 @@ wss.on('connection', (ws) => { ws.on('message', (data) => { try { - const result = JSON.parse(data.toString()); - const p = pending.get(result.id); + const msg = JSON.parse(data.toString()); + + // Handle log messages from extension + if (msg.type === 'log') { + const prefix = msg.level === 'error' ? '❌' : msg.level === 'warn' ? '⚠️' : '📋'; + console.error(`${prefix} [ext] ${msg.msg}`); + pushLog({ level: msg.level, msg: msg.msg, ts: msg.ts ?? Date.now() }); + return; + } + + // Handle command results + const p = pending.get(msg.id); if (p) { clearTimeout(p.timer); - pending.delete(result.id); - p.resolve(result); + pending.delete(msg.id); + p.resolve(msg); } } catch { // Ignore malformed messages From 59c0d639a565d2b6b06faf474ad8a51f69a8e293 Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 16:36:06 +0800 Subject: [PATCH 06/10] refactor: fix 9 issues from round 2 code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug fixes: - #1 /logs?level=error returned 404 — use pathname for route matching - #2 Duplicate initialization — added 'initialized' guard flag Should fix: - #4 Added screenshot() to IPage interface - #5 Graceful shutdown rejects pending requests before exit - #6 Use process.execPath instead of 'npx tsx' for faster daemon spawn Cleanup: - #7 Removed duplicate 'browser' keyword in package.json - #8 Removed unused normalizeEvaluateSource import from browser.ts - #9 Changed dynamic import to static import in intercept.ts - #10 Added explicit throw at end of sendCommand for clarity 61 tests pass (4 test files). Extension: 10.55KB. --- extension/src/background.ts | 4 ++++ package.json | 3 +-- src/browser/daemon-client.ts | 2 ++ src/browser/mcp.ts | 9 ++++----- src/daemon.ts | 26 ++++++++++++++++++++------ src/pipeline/steps/browser.ts | 2 +- src/pipeline/steps/intercept.ts | 3 +-- src/types.ts | 1 + 8 files changed, 34 insertions(+), 16 deletions(-) diff --git a/extension/src/background.ts b/extension/src/background.ts index 7fc96cf..86577a2 100644 --- a/extension/src/background.ts +++ b/extension/src/background.ts @@ -87,7 +87,11 @@ function scheduleReconnect(): void { // ─── Lifecycle events ──────────────────────────────────────────────── +let initialized = false; + function initialize(): void { + if (initialized) return; + initialized = true; chrome.alarms.create('keepalive', { periodInMinutes: 0.4 }); // ~24 seconds cdp.registerListeners(); connect(); diff --git a/package.json b/package.json index e423014..5752a36 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,7 @@ "cli", "browser", "web", - "ai", - "browser" + "ai" ], "author": "jackwener", "license": "Apache-2.0", diff --git a/src/browser/daemon-client.ts b/src/browser/daemon-client.ts index 678661c..8d7b935 100644 --- a/src/browser/daemon-client.ts +++ b/src/browser/daemon-client.ts @@ -108,4 +108,6 @@ export async function sendCommand( throw err; } } + // Unreachable — the loop always returns or throws + throw new Error('sendCommand: max retries exhausted'); } diff --git a/src/browser/mcp.ts b/src/browser/mcp.ts index e3bbf49..4378fec 100644 --- a/src/browser/mcp.ts +++ b/src/browser/mcp.ts @@ -78,11 +78,10 @@ export class PlaywrightMCP { console.error(`[opencli] Starting daemon (${isTs ? 'ts' : 'js'})...`); } - // Use tsx for .ts files, node for .js files - const runtime = isTs ? 'npx' : process.execPath; - const args = isTs ? ['tsx', daemonPath] : [daemonPath]; - - this._daemonProc = spawn(runtime, args, { + // Use the current runtime to spawn daemon — avoids slow npx resolution. + // If already running under tsx (dev), process.execPath is tsx's node. + // If running compiled (node dist/), process.execPath is node. + this._daemonProc = spawn(process.execPath, [daemonPath], { detached: true, stdio: 'ignore', env: { ...process.env }, diff --git a/src/daemon.ts b/src/daemon.ts index 8cfc9c7..033a3a7 100644 --- a/src/daemon.ts +++ b/src/daemon.ts @@ -70,8 +70,9 @@ async function handleRequest(req: IncomingMessage, res: ServerResponse): Promise if (req.method === 'OPTIONS') { res.writeHead(204); res.end(); return; } const url = req.url ?? '/'; + const pathname = url.split('?')[0]; - if (req.method === 'GET' && url === '/status') { + if (req.method === 'GET' && pathname === '/status') { jsonResponse(res, 200, { ok: true, extensionConnected: extensionWs?.readyState === WebSocket.OPEN, @@ -80,8 +81,9 @@ async function handleRequest(req: IncomingMessage, res: ServerResponse): Promise return; } - if (req.method === 'GET' && url === '/logs') { - const level = new URL(url, `http://localhost:${PORT}`).searchParams.get('level'); + if (req.method === 'GET' && pathname === '/logs') { + const params = new URL(url, `http://localhost:${PORT}`).searchParams; + const level = params.get('level'); const filtered = level ? logBuffer.filter(e => e.level === level) : logBuffer; @@ -89,7 +91,7 @@ async function handleRequest(req: IncomingMessage, res: ServerResponse): Promise return; } - if (req.method === 'DELETE' && url === '/logs') { + if (req.method === 'DELETE' && pathname === '/logs') { logBuffer.length = 0; jsonResponse(res, 200, { ok: true }); return; @@ -199,5 +201,17 @@ httpServer.on('error', (err: NodeJS.ErrnoException) => { }); // Graceful shutdown -process.on('SIGTERM', () => process.exit(0)); -process.on('SIGINT', () => process.exit(0)); +function shutdown(): void { + // Reject all pending requests so CLI doesn't hang + for (const [, p] of pending) { + clearTimeout(p.timer); + p.reject(new Error('Daemon shutting down')); + } + pending.clear(); + if (extensionWs) extensionWs.close(); + httpServer.close(); + process.exit(0); +} + +process.on('SIGTERM', shutdown); +process.on('SIGINT', shutdown); diff --git a/src/pipeline/steps/browser.ts b/src/pipeline/steps/browser.ts index d846f7f..2d28958 100644 --- a/src/pipeline/steps/browser.ts +++ b/src/pipeline/steps/browser.ts @@ -4,7 +4,7 @@ */ import type { IPage } from '../../types.js'; -import { render, normalizeEvaluateSource } from '../template.js'; +import { render } from '../template.js'; export async function stepNavigate(page: IPage | null, params: any, data: any, args: Record): Promise { const url = render(params, { args, data }); diff --git a/src/pipeline/steps/intercept.ts b/src/pipeline/steps/intercept.ts index b7ad0c7..26b60d9 100644 --- a/src/pipeline/steps/intercept.ts +++ b/src/pipeline/steps/intercept.ts @@ -3,7 +3,7 @@ */ import type { IPage } from '../../types.js'; -import { render } from '../template.js'; +import { render, normalizeEvaluateSource } from '../template.js'; import { generateInterceptorJs, generateReadInterceptedJs } from '../../interceptor.js'; export async function stepIntercept(page: IPage | null, params: any, data: any, args: Record): Promise { @@ -24,7 +24,6 @@ export async function stepIntercept(page: IPage | null, params: any, data: any, await page!.goto(String(url)); } else if (trigger.startsWith('evaluate:')) { const js = trigger.slice('evaluate:'.length); - const { normalizeEvaluateSource } = await import('../template.js'); await page!.evaluate(normalizeEvaluateSource(render(js, { args, data }) as string)); } else if (trigger.startsWith('click:')) { const ref = render(trigger.slice('click:'.length), { args, data }); diff --git a/src/types.ts b/src/types.ts index 08075d9..5ee5af6 100644 --- a/src/types.ts +++ b/src/types.ts @@ -23,4 +23,5 @@ export interface IPage { autoScroll(options?: { times?: number; delayMs?: number }): Promise; installInterceptor(pattern: string): Promise; getInterceptedRequests(): Promise; + screenshot(options?: { format?: 'png' | 'jpeg'; quality?: number; fullPage?: boolean; path?: string }): Promise; } From ebe4683a9e77e4f3450c74ec9bbf48d1892cf3be Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 16:43:58 +0800 Subject: [PATCH 07/10] fix: add screenshot mock to executor.test.ts for IPage compat tsc --noEmit failed because createMockPage() was missing the screenshot() method added to IPage in the round 2 review fix. --- src/pipeline/executor.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pipeline/executor.test.ts b/src/pipeline/executor.test.ts index 1b6217e..dcd1b67 100644 --- a/src/pipeline/executor.test.ts +++ b/src/pipeline/executor.test.ts @@ -26,6 +26,7 @@ function createMockPage(overrides: Partial = {}): IPage { autoScroll: vi.fn(), installInterceptor: vi.fn(), getInterceptedRequests: vi.fn().mockResolvedValue([]), + screenshot: vi.fn().mockResolvedValue(''), ...overrides, }; } From 3b33ade214073ade54a28e7ef6de27d67a515ae6 Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 16:49:10 +0800 Subject: [PATCH 08/10] docs: update README, README.zh-CN, SKILL.md for new Browser Bridge architecture MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace all Playwright MCP Bridge references with opencli Browser Bridge - Remove token setup, MCP config, and manual setup sections - Simplify prerequisites: just install extension, zero config - Update troubleshooting: daemon status/logs commands - Update env vars: add OPENCLI_DAEMON_PORT, OPENCLI_VERBOSE - Update SKILL.md tags: mcp,playwright → chrome-extension,cdp --- README.md | 71 ++++++++++------------------------------------- README.zh-CN.md | 74 ++++++++++--------------------------------------- SKILL.md | 18 ++++++------ 3 files changed, 39 insertions(+), 124 deletions(-) diff --git a/README.md b/README.md index 71067a8..525df39 100644 --- a/README.md +++ b/README.md @@ -49,69 +49,25 @@ Turn ANY Electron application into a CLI tool! Recombine, script, and extend app > **⚠️ Important**: Browser commands reuse your Chrome login session. You must be logged into the target website in Chrome before running commands. If you get empty data or errors, check your login status first. -OpenCLI connects to your browser through the Playwright MCP Bridge extension. -It prefers an existing local/global `@playwright/mcp` install and falls back to `npx -y @playwright/mcp@latest` automatically when no local MCP server is found. +OpenCLI connects to your browser through a lightweight **Browser Bridge** Chrome Extension + micro-daemon (zero config, auto-start). -### Playwright MCP Bridge Extension Setup +### Browser Bridge Extension Setup -1. Install **[Playwright MCP Bridge](https://chromewebstore.google.com/detail/playwright-mcp-bridge/mmlmfjhmonkocbjadbfplnigmagldckm)** extension in Chrome. -2. Run `opencli setup` — discovers the token, distributes it to your tools, and verifies connectivity: +1. Install the **opencli Browser Bridge** extension in Chrome (from the Chrome Web Store or load the `extension/` folder as unpacked). +2. That's it! The daemon auto-starts when you run any browser command. No tokens, no manual configuration. -```bash -opencli setup -``` - -The interactive TUI will: -- 🔍 Auto-discover `PLAYWRIGHT_MCP_EXTENSION_TOKEN` from Chrome (no manual copy needed) -- ☑️ Show all detected tools (Codex, Cursor, Claude Code, Gemini CLI, etc.) -- ✏️ Update only the files you select (Space to toggle, Enter to confirm) -- 🔌 Auto-verify browser connectivity after writing configs - -> **Tip**: Use `opencli doctor` for ongoing diagnosis and maintenance: +> **Tip**: Use `opencli doctor` for ongoing diagnosis: > ```bash -> opencli doctor # Read-only token & config diagnosis -> opencli doctor --live # Also test live browser connectivity -> opencli doctor --fix # Fix mismatched configs (interactive) -> opencli doctor --fix -y # Fix all configs non-interactively +> opencli doctor # Check extension + daemon connectivity +> opencli doctor --live # Also test live browser commands > ``` -**Alternative: CDP Mode (For Servers/Headless)** -If you cannot install the browser extension (e.g. running OpenCLI on a remote headless server), you can connect OpenCLI to your local Chrome via CDP using SSH tunnels or reverse proxies. See the [CDP Connection Guide](./CDP.md) for detailed instructions. - -
    -Manual setup (alternative) - -Add token to your MCP client config (e.g. Claude/Cursor): - -```json -{ - "mcpServers": { - "playwright": { - "command": "npx", - "args": ["-y", "@playwright/mcp@latest", "--extension"], - "env": { - "PLAYWRIGHT_MCP_EXTENSION_TOKEN": "" - } - } - } -} -``` - -Export in shell (e.g. `~/.zshrc`): - -```bash -export PLAYWRIGHT_MCP_EXTENSION_TOKEN="" -``` - -
    - ## Quick Start ### Install via npm (recommended) ```bash npm install -g @jackwener/opencli -opencli setup # One-time: configure Playwright MCP token ``` Then use directly: @@ -297,15 +253,16 @@ npx vitest run tests/e2e/ # E2E tests ## Troubleshooting -- **"Failed to connect to Playwright MCP Bridge"** - - Ensure the Playwright MCP extension is installed and **enabled** in your running Chrome. - - Restart the Chrome browser if you just installed the extension. +- **"Extension not connected"** + - Ensure the opencli Browser Bridge extension is installed and **enabled** in your running Chrome. + - Restart Chrome if you just installed the extension. - **Empty data returns or 'Unauthorized' error** - - Your login session in Chrome might have expired. Open a normal Chrome tab, navigate to the target site, and log in or refresh the page to prove you are human. + - Your login session in Chrome might have expired. Open a normal Chrome tab, navigate to the target site, and log in or refresh the page. - **Node API errors** - Make sure you are using Node.js >= 20. Some dependencies require modern Node APIs. -- **Token issues** - - Run `opencli doctor` to diagnose token configuration across all tools. +- **Daemon issues** + - Check daemon status: `curl localhost:19825/status` + - View extension logs: `curl localhost:19825/logs` ## Releasing New Versions diff --git a/README.zh-CN.md b/README.zh-CN.md index 45f9c72..43a6d9a 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -50,69 +50,25 @@ CLI all electron!现在支持把所有 electron 应用 CLI 化,从而组合 > **⚠️ 重要**:大多数命令复用你的 Chrome 登录状态。运行命令前,你必须已在 Chrome 中打开目标网站并完成登录。如果获取到空数据或报错,请先检查你的浏览器登录状态。 -OpenCLI 通过 Playwright MCP Bridge 扩展与你的浏览器通信。 -它会优先复用本地或全局已安装的 `@playwright/mcp`,如果没有嗅探到可用 MCP server,则会自动回退到 `npx -y @playwright/mcp@latest` 启动。 +OpenCLI 通过轻量化的 **Browser Bridge** Chrome 扩展 + 微型 daemon 与浏览器通信(零配置,自动启动)。 -### Playwright MCP Bridge 扩展配置 +### Browser Bridge 扩展配置 -1. 安装 **[Playwright MCP Bridge](https://chromewebstore.google.com/detail/playwright-mcp-bridge/mmlmfjhmonkocbjadbfplnigmagldckm)** 扩展 -2. 运行 `opencli setup` — 自动发现 Token、分发到各工具、验证连通性: +1. 在 Chrome 中安装 **opencli Browser Bridge** 扩展(从 Chrome Web Store 安装或加载 `extension/` 文件夹作为未打包扩展)。 +2. 完成!运行任何浏览器命令时 daemon 会自动启动。无需 token,无需手动配置。 -```bash -opencli setup -``` - -交互式 TUI 会: -- 🔍 从 Chrome 自动发现 `PLAYWRIGHT_MCP_EXTENSION_TOKEN`(无需手动复制) -- ☑️ 显示所有支持的工具(Codex、Cursor、Claude Code、Gemini CLI 等) -- ✏️ 只更新你选中的文件(空格切换,回车确认) -- 🔌 完成后自动验证浏览器连通性 - -> **Tip**:后续诊断和维护用 `opencli doctor`: +> **Tip**:后续诊断用 `opencli doctor`: > ```bash -> opencli doctor # 只读 Token 与配置诊断 -> opencli doctor --live # 额外测试浏览器连通性 -> opencli doctor --fix # 修复不一致的配置(交互确认) -> opencli doctor --fix -y # 无交互直接修复所有配置 +> opencli doctor # 检查扩展和 daemon 连通性 +> opencli doctor --live # 额外测试浏览器命令 > ``` -**备选方案:CDP 模式 (适用于服务器/无头环境)** -如果你无法安装浏览器扩展(比如在远程无头服务器上运行 OpenCLI),你可以通过 SSH 隧道或反向代理,利用 CDP (Chrome DevTools Protocol) 连接到本地的 Chrome 浏览器。详细指南请参考 [CDP 连接教程](./CDP.zh-CN.md)。 - -
    -手动配置(备选方案) - -配置你的 MCP 客户端(如 Claude/Cursor 等): - -```json -{ - "mcpServers": { - "playwright": { - "command": "npx", - "args": ["-y", "@playwright/mcp@latest", "--extension"], - "env": { - "PLAYWRIGHT_MCP_EXTENSION_TOKEN": "<你的-token>" - } - } - } -} -``` - -在终端环境变量中导出(建议写进 `~/.zshrc`): - -```bash -export PLAYWRIGHT_MCP_EXTENSION_TOKEN="<你的-token>" -``` - -
    - ## 快速开始 ### npm 全局安装(推荐) ```bash npm install -g @jackwener/opencli -opencli setup # 首次使用:配置 Playwright MCP token ``` 直接使用: @@ -280,16 +236,16 @@ opencli cascade https://api.example.com/data ## 常见问题排查 -- **"Failed to connect to Playwright MCP Bridge"** 报错 - - 确保你当前的 Chrome 已安装且**开启了** Playwright MCP Bridge 浏览器插件。 - - 如果是刚装完插件,需要重启 Chrome 浏览器。 +- **"Extension not connected" 报错** + - 确保你当前的 Chrome 已安装且**开启了** opencli Browser Bridge 浏览器扩展。 + - 如果是刚装完扩展,需要重启 Chrome 浏览器。 - **返回空数据,或者报错 "Unauthorized"** - - Chrome 里的登录态可能已经过期(甚至被要求过滑动验证码)。请打开当前 Chrome 页面,在新标签页重新手工登录或刷新该页面。 + - Chrome 里的登录态可能已经过期。请打开当前 Chrome 页面,在新标签页重新手工登录或刷新该页面。 - **Node API 错误 (如 parseArgs, fs 等)** - - 确保 Node.js 版本 `>= 20`。旧版不支持我们使用的现代核心库 API。 -- **Token 问题** - - 运行 `opencli doctor` 诊断所有工具的 Token 配置状态。 - - 使用 `opencli doctor --live` 测试浏览器连通性。 + - 确保 Node.js 版本 `>= 20`。 +- **Daemon 问题** + - 检查 daemon 状态:`curl localhost:19825/status` + - 查看扩展日志:`curl localhost:19825/logs` ## 版本发布 diff --git a/SKILL.md b/SKILL.md index 2e2bd4c..8ae61ac 100644 --- a/SKILL.md +++ b/SKILL.md @@ -3,7 +3,7 @@ name: opencli description: "OpenCLI — Make any website or Electron App your CLI. Zero risk, AI-powered, reuse Chrome login. 80+ commands across 19 sites." version: 0.7.3 author: jackwener -tags: [cli, browser, web, mcp, playwright, bilibili, zhihu, twitter, github, v2ex, hackernews, reddit, xiaohongshu, xueqiu, youtube, boss, coupang, AI, agent] +tags: [cli, browser, web, chrome-extension, cdp, bilibili, zhihu, twitter, github, v2ex, hackernews, reddit, xiaohongshu, xueqiu, youtube, boss, coupang, AI, agent] --- # OpenCLI @@ -12,7 +12,7 @@ tags: [cli, browser, web, mcp, playwright, bilibili, zhihu, twitter, github, v2e > [!CAUTION] > **AI Agent 必读:创建或修改任何适配器之前,你必须先阅读 [CLI-EXPLORER.md](./CLI-EXPLORER.md)!** -> 该文档包含完整的 API 发现工作流(必须使用 Playwright MCP Bridge 浏览器探索)、5 级认证策略决策树、平台 SDK 速查表、`tap` 步骤调试流程、分页 API 模板、级联请求模式、以及常见陷阱。 +> 该文档包含完整的 API 发现工作流(必须使用浏览器探索)、5 级认证策略决策树、平台 SDK 速查表、`tap` 步骤调试流程、分页 API 模板、级联请求模式、以及常见陷阱。 > **本文件(SKILL.md)仅提供命令参考和简化模板,不足以正确开发适配器。** ## Install & Run @@ -34,8 +34,8 @@ npm update -g @jackwener/opencli Browser commands require: 1. Chrome browser running **(logged into target sites)** -2. [Playwright MCP Bridge](https://chromewebstore.google.com/detail/playwright-mcp-bridge/mmlmfjhmonkocbjadbfplnigmagldckm) extension installed -3. Run `opencli setup` to auto-discover token and configure all tools +2. **opencli Browser Bridge** Chrome extension installed (load `extension/` as unpacked or install from Chrome Web Store) +3. No further setup needed — the daemon auto-starts on first browser command > **Note**: You must be logged into the target website in Chrome before running commands. Tabs opened during command execution are auto-closed afterwards. @@ -227,7 +227,7 @@ opencli bilibili hot -v # Show each pipeline step and data flow > [!IMPORTANT] > **完整模式 — 在写任何代码之前,先阅读 [CLI-EXPLORER.md](./CLI-EXPLORER.md)。** -> 它包含:① AI Agent 浏览器探索工作流(必须用 Playwright MCP 抓包验证 API)② 认证策略决策树 ③ 平台 SDK(如 Bilibili 的 `apiGet`/`fetchJson`)④ YAML vs TS 选择指南 ⑤ `tap` 步骤调试方法 ⑥ 级联请求模板 ⑦ 常见陷阱表。 +> 它包含:① AI Agent 浏览器探索工作流 ② 认证策略决策树 ③ 平台 SDK(如 Bilibili 的 `apiGet`/`fetchJson`)④ YAML vs TS 选择指南 ⑤ `tap` 步骤调试方法 ⑥ 级联请求模板 ⑦ 常见陷阱表。 > **下方仅为简化模板参考,直接使用极易踩坑。** ### YAML Pipeline (declarative, recommended) @@ -374,16 +374,18 @@ ${{ index + 1 }} | Variable | Default | Description | |----------|---------|-------------| +| `OPENCLI_DAEMON_PORT` | 19825 | Daemon listen port | | `OPENCLI_BROWSER_CONNECT_TIMEOUT` | 30 | Browser connection timeout (sec) | | `OPENCLI_BROWSER_COMMAND_TIMEOUT` | 45 | Command execution timeout (sec) | | `OPENCLI_BROWSER_EXPLORE_TIMEOUT` | 120 | Explore timeout (sec) | -| `PLAYWRIGHT_MCP_EXTENSION_TOKEN` | — | Auto-approve extension connection | +| `OPENCLI_VERBOSE` | — | Show daemon/extension logs | ## Troubleshooting | Issue | Solution | |-------|----------| | `npx not found` | Install Node.js: `brew install node` | -| `Timed out connecting to browser` | 1) Chrome must be open 2) Install MCP Bridge extension and configure token | +| `Extension not connected` | 1) Chrome must be open 2) Install opencli Browser Bridge extension | | `Target page context` error | Add `navigate:` step before `evaluate:` in YAML | -| Empty table data | Check if evaluate returns JSON string (MCP parsing) or data path is wrong | +| Empty table data | Check if evaluate returns correct data path | +| Daemon issues | `curl localhost:19825/status` to check, `curl localhost:19825/logs` for extension logs | From beda0b714c7fd8ae3b59b7db590b43d3b48c5ef4 Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 16:55:20 +0800 Subject: [PATCH 09/10] docs: remove all remaining Playwright references from docs Updated 6 files: - CDP.md, CDP.zh-CN.md: Browser Bridge instead of Playwright MCP Bridge - CLI-ELECTRON.md: Browser Bridge / IPage abstraction wording - CLI-EXPLORER.md: browser tools instead of Playwright MCP tools - TESTING.md: Browser Bridge extension mode, removed token references - src/clis/chatgpt/README{,.zh-CN}.md: CDP instead of Playwright Zero Playwright references remaining across all .md files. --- CDP.md | 2 +- CDP.zh-CN.md | 2 +- CLI-ELECTRON.md | 4 ++-- CLI-EXPLORER.md | 8 ++++---- TESTING.md | 14 +++++++------- src/clis/chatgpt/README.md | 2 +- src/clis/chatgpt/README.zh-CN.md | 2 +- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/CDP.md b/CDP.md index a833d88..186cf3c 100644 --- a/CDP.md +++ b/CDP.md @@ -1,6 +1,6 @@ # Connecting OpenCLI via CDP (Remote/Headless Servers) -If you cannot use the Playwright MCP Bridge extension (e.g., in a remote headless server environment without a UI), OpenCLI provides an alternative: connecting directly to Chrome via **CDP (Chrome DevTools Protocol)**. +If you cannot use the opencli Browser Bridge extension (e.g., in a remote headless server environment without a UI), OpenCLI provides an alternative: connecting directly to Chrome via **CDP (Chrome DevTools Protocol)**. Because CDP binds to `localhost` by default for security reasons, accessing it from a remote server requires an additional networking tunnel. diff --git a/CDP.zh-CN.md b/CDP.zh-CN.md index 5641ed6..bf27409 100644 --- a/CDP.zh-CN.md +++ b/CDP.zh-CN.md @@ -1,6 +1,6 @@ # 通过 CDP 远程连接 OpenCLI (服务器/无头环境) -如果你无法使用 Playwright MCP Bridge 浏览器扩展(例如:在无界面的远程服务器上运行 OpenCLI 时),OpenCLI 提供了备选方案:通过连接 **CDP (Chrome DevTools Protocol,即 Chrome 开发者工具协议)** 来直接控制本地 Chrome。 +如果你无法使用 opencli Browser Bridge 浏览器扩展(例如:在无界面的远程服务器上运行 OpenCLI 时),OpenCLI 提供了备选方案:通过连接 **CDP (Chrome DevTools Protocol,即 Chrome 开发者工具协议)** 来直接控制本地 Chrome。 出于安全考虑,CDP 默认仅绑定在 `localhost` 的本地端口。所以,若是想让**远程服务器**调用本地的 CDP 服务,我们需要依靠一层额外的网络隧道。 diff --git a/CLI-ELECTRON.md b/CLI-ELECTRON.md index 5d752a1..ec298b9 100644 --- a/CLI-ELECTRON.md +++ b/CLI-ELECTRON.md @@ -8,7 +8,7 @@ Based on the successful automation of **Cursor**, **Codex**, **Antigravity**, ** ## Core Concept -Electron apps are essentially local Chromium browser instances. By exposing a debugging port (CDP — Chrome DevTools Protocol) at launch time, we can use Playwright to pierce through the UI layer, accessing and controlling all underlying state including React/Vue components and Shadow DOM. +Electron apps are essentially local Chromium browser instances. By exposing a debugging port (CDP — Chrome DevTools Protocol) at launch time, we can use the Browser Bridge to pierce through the UI layer, accessing and controlling all underlying state including React/Vue components and Shadow DOM. > **Note:** Not all desktop apps are Electron. WeChat (native Cocoa) and Feishu/Lark (custom Lark Framework) embed Chromium but do NOT expose CDP. For those apps, use the AppleScript + clipboard approach instead (see [Non-Electron Pattern](#non-electron-pattern-applescript)). @@ -109,7 +109,7 @@ Core techniques: ## Pitfalls & Gotchas 1. **Port conflicts (EADDRINUSE)**: Only one app per port. Use unique ports: Codex=9222, ChatGPT=9224, Cursor=9226, ChatWise=9228, Notion=9230, Discord=9232 -2. **IPage abstraction**: OpenCLI wraps Playwright Page as `IPage` (`src/types.ts`). Use `page.pressKey()` and `page.evaluate()`, NOT `page.keyboard.press()` +2. **IPage abstraction**: OpenCLI wraps the browser page as `IPage` (`src/types.ts`). Use `page.pressKey()` and `page.evaluate()`, NOT direct DOM APIs 3. **Timing**: Always add `await page.wait(0.5)` to `1.0` after DOM mutations. Returning too early disconnects prematurely 4. **AppleScript requires Accessibility**: Terminal app must be granted permission in System Settings → Privacy & Security → Accessibility diff --git a/CLI-EXPLORER.md b/CLI-EXPLORER.md index 73191ed..b619c05 100644 --- a/CLI-EXPLORER.md +++ b/CLI-EXPLORER.md @@ -9,12 +9,12 @@ --- -## AI Agent 开发者必读:用 Playwright MCP Bridge 探索 +## AI Agent 开发者必读:用浏览器探索 > [!CAUTION] -> **你(AI Agent)必须通过 Playwright MCP Bridge 打开浏览器去访问目标网站!** +> **你(AI Agent)必须通过浏览器打开目标网站去探索!** > 不要只靠 `opencli explore` 命令或静态分析来发现 API。 -> 你拥有 Playwright MCP 工具,必须主动用它们浏览网页、观察网络请求、模拟用户交互。 +> 你拥有浏览器工具,必须主动用它们浏览网页、观察网络请求、模拟用户交互。 ### 为什么? @@ -36,7 +36,7 @@ | ❌ 错误做法 | ✅ 正确做法 | |------------|------------| -| 只用 `opencli explore` 命令,等结果自动出来 | 用 MCP Bridge 打开浏览器,主动浏览页面 | +| 只用 `opencli explore` 命令,等结果自动出来 | 用浏览器工具打开页面,主动浏览 | | 直接在代码里 `fetch(url)`,不看浏览器实际请求 | 先在浏览器中确认 API 可用,再写代码 | | 页面打开后直接抓包,期望所有 API 都出现 | 模拟点击交互(展开评论/切换标签/加载更多) | | 遇到 HTTP 200 但空数据就放弃 | 检查是否需要 Wbi 签名或 Cookie 鉴权 | diff --git a/TESTING.md b/TESTING.md index 59fd647..688441b 100644 --- a/TESTING.md +++ b/TESTING.md @@ -105,10 +105,10 @@ npx vitest src/ ### 浏览器命令本地测试须知 -- 无 `PLAYWRIGHT_MCP_EXTENSION_TOKEN` 时,opencli 自动启动一个独立浏览器实例 +- opencli 通过 Browser Bridge 扩展连接已运行的 Chrome 浏览器 - `browser-public.test.ts` 使用 `tryBrowserCommand()`,站点反爬导致空数据时 warn + pass - `browser-auth.test.ts` 验证 **graceful failure**(不 crash 不 hang 即通过) -- 如需测试完整登录态,保持 Chrome 登录态 + 设置 `PLAYWRIGHT_MCP_EXTENSION_TOKEN`,手动跑对应测试 +- 如需测试完整登录态,保持 Chrome 登录态并安装 Browser Bridge 扩展,手动跑对应测试 --- @@ -202,12 +202,12 @@ steps: ## 浏览器模式 -opencli 根据 `PLAYWRIGHT_MCP_EXTENSION_TOKEN` 环境变量自动选择模式: +opencli 通过 Browser Bridge 扩展连接浏览器: -| 条件 | 模式 | MCP 参数 | 使用场景 | -|---|---|---|---| -| Token 已设置 | Extension 模式 | `--extension` | 本地用户,连接已登录的 Chrome | -| Token 未设置 | Standalone 模式 | (无特殊 flag) | CI 或无扩展环境,自启浏览器 | +| 条件 | 模式 | 使用场景 | +|---|---|---| +| 扩展已安装 | Extension 模式 | 本地用户,连接已登录的 Chrome | +| 扩展未安装 | CLI 报错提示安装 | 需要安装 Browser Bridge 扩展 | CI 中使用 `OPENCLI_BROWSER_EXECUTABLE_PATH` 指定真实 Chrome 路径: diff --git a/src/clis/chatgpt/README.md b/src/clis/chatgpt/README.md index 7d9b0d0..7d491e2 100644 --- a/src/clis/chatgpt/README.md +++ b/src/clis/chatgpt/README.md @@ -35,7 +35,7 @@ export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9224" ## How It Works - **AppleScript mode**: Uses `osascript` and `pbcopy`/`pbpaste` for clipboard-based text transfer. No remote debugging port needed. -- **CDP mode**: Connects via Playwright to the Electron renderer process for direct DOM manipulation. +- **CDP mode**: Connects via Chrome DevTools Protocol to the Electron renderer process for direct DOM manipulation. ## Limitations diff --git a/src/clis/chatgpt/README.zh-CN.md b/src/clis/chatgpt/README.zh-CN.md index cf30a16..4a65698 100644 --- a/src/clis/chatgpt/README.zh-CN.md +++ b/src/clis/chatgpt/README.zh-CN.md @@ -35,7 +35,7 @@ export OPENCLI_CDP_ENDPOINT="http://127.0.0.1:9224" ## 工作原理 - **AppleScript 模式**:使用 `osascript` 和 `pbcopy`/`pbpaste` 进行剪贴板文本传输,无需远程调试端口。 -- **CDP 模式**:通过 Playwright 连接到 Electron 渲染进程,直接操作 DOM。 +- **CDP 模式**:通过 Chrome DevTools Protocol 连接到 Electron 渲染进程,直接操作 DOM。 ## 限制 From 3b6f72ca0830aa27e71922251ed2c578204d68f7 Mon Sep 17 00:00:00 2001 From: jackwener Date: Thu, 19 Mar 2026 16:57:40 +0800 Subject: [PATCH 10/10] =?UTF-8?q?docs:=20fix=20extension=20install=20instr?= =?UTF-8?q?uctions=20=E2=80=94=20no=20store=20yet,=20no=20restart=20needed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove 'Chrome Web Store' references (not published yet) - Add detailed unpacked extension install steps (chrome://extensions) - Remove 'restart Chrome' advice (Service Worker activates immediately) - Direct users to chrome://extensions for troubleshooting --- README.md | 7 ++++--- README.zh-CN.md | 7 ++++--- SKILL.md | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 525df39..6ea5a6e 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,9 @@ OpenCLI connects to your browser through a lightweight **Browser Bridge** Chrome ### Browser Bridge Extension Setup -1. Install the **opencli Browser Bridge** extension in Chrome (from the Chrome Web Store or load the `extension/` folder as unpacked). +1. Install the **opencli Browser Bridge** extension in Chrome: + - Open `chrome://extensions`, enable **Developer mode** (top-right toggle) + - Click **Load unpacked**, select the `extension/` folder from this repo 2. That's it! The daemon auto-starts when you run any browser command. No tokens, no manual configuration. > **Tip**: Use `opencli doctor` for ongoing diagnosis: @@ -254,8 +256,7 @@ npx vitest run tests/e2e/ # E2E tests ## Troubleshooting - **"Extension not connected"** - - Ensure the opencli Browser Bridge extension is installed and **enabled** in your running Chrome. - - Restart Chrome if you just installed the extension. + - Ensure the opencli Browser Bridge extension is installed and **enabled** in `chrome://extensions`. - **Empty data returns or 'Unauthorized' error** - Your login session in Chrome might have expired. Open a normal Chrome tab, navigate to the target site, and log in or refresh the page. - **Node API errors** diff --git a/README.zh-CN.md b/README.zh-CN.md index 43a6d9a..5f3011d 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -54,7 +54,9 @@ OpenCLI 通过轻量化的 **Browser Bridge** Chrome 扩展 + 微型 daemon 与 ### Browser Bridge 扩展配置 -1. 在 Chrome 中安装 **opencli Browser Bridge** 扩展(从 Chrome Web Store 安装或加载 `extension/` 文件夹作为未打包扩展)。 +1. 在 Chrome 中安装 **opencli Browser Bridge** 扩展: + - 打开 `chrome://extensions`,启用右上角的 **开发者模式** + - 点击 **加载已解压的扩展程序**,选择本仓库的 `extension/` 文件夹 2. 完成!运行任何浏览器命令时 daemon 会自动启动。无需 token,无需手动配置。 > **Tip**:后续诊断用 `opencli doctor`: @@ -237,8 +239,7 @@ opencli cascade https://api.example.com/data ## 常见问题排查 - **"Extension not connected" 报错** - - 确保你当前的 Chrome 已安装且**开启了** opencli Browser Bridge 浏览器扩展。 - - 如果是刚装完扩展,需要重启 Chrome 浏览器。 + - 确保你当前的 Chrome 已安装且**开启了** opencli Browser Bridge 扩展(在 `chrome://extensions` 中检查)。 - **返回空数据,或者报错 "Unauthorized"** - Chrome 里的登录态可能已经过期。请打开当前 Chrome 页面,在新标签页重新手工登录或刷新该页面。 - **Node API 错误 (如 parseArgs, fs 等)** diff --git a/SKILL.md b/SKILL.md index 8ae61ac..ef87f84 100644 --- a/SKILL.md +++ b/SKILL.md @@ -34,7 +34,7 @@ npm update -g @jackwener/opencli Browser commands require: 1. Chrome browser running **(logged into target sites)** -2. **opencli Browser Bridge** Chrome extension installed (load `extension/` as unpacked or install from Chrome Web Store) +2. **opencli Browser Bridge** Chrome extension installed (load `extension/` as unpacked in `chrome://extensions`) 3. No further setup needed — the daemon auto-starts on first browser command > **Note**: You must be logged into the target website in Chrome before running commands. Tabs opened during command execution are auto-closed afterwards.