From 1513aef682a9b3363c0bf60292e6ddc781c716ce Mon Sep 17 00:00:00 2001 From: Rahul Sridhar Date: Mon, 26 Aug 2024 19:29:48 -0700 Subject: [PATCH 01/16] Project import generated by Copybara. (#439) GitOrigin-RevId: 340170c5584009bf2b7ce263a82b13758986e5ad Co-authored-by: Copybara Bot --- autoload/codeium.vim | 10 ++++++++++ autoload/codeium/server.vim | 13 +++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/autoload/codeium.vim b/autoload/codeium.vim index 7b9c0972..0ea437e1 100644 --- a/autoload/codeium.vim +++ b/autoload/codeium.vim @@ -470,6 +470,15 @@ function! s:GetProjectRoot() abort return getcwd() endfunction +function! codeium#RefreshContext() abort + " current buffer is 1 + try + call codeium#server#Request('RefreshContextForIdeAction', {'active_document': codeium#doc#GetDocument(1, line('.'), line('.'))}) + catch + call codeium#log#Exception() + endtry +endfunction + " This assumes a single workspace is involved per Vim session, for now. let s:codeium_workspace_indexed = v:false function! codeium#AddTrackedWorkspace() abort @@ -489,6 +498,7 @@ function! codeium#Chat() abort return endif try + call codeium#RefreshContext() call codeium#server#Request('GetProcesses', codeium#server#RequestMetadata(), function('s:LaunchChat', [])) call codeium#AddTrackedWorkspace() catch diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index 5286c0ea..549da3d1 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -1,5 +1,5 @@ -let s:language_server_version = '1.12.0' -let s:language_server_sha = 'beda8738f37970fd4066114bfb0e930e01316a62' +let s:language_server_version = '1.14.11' +let s:language_server_sha = '071907d082576067b0c7a5f2f7659958865d751e' let s:root = expand(':h:h:h') let s:bin = v:null @@ -174,6 +174,15 @@ function! codeium#server#Start(...) abort let bin_suffix = 'windows_x64.exe' endif + let config = get(g:, 'codeium_server_config', {}) + if has_key(config, 'portal_url') && !empty(config.portal_url) + let response = system('curl -s ' . config.portal_url . '/api/version') + if v:shell_error != 0 + let s:language_server_version = '1.14.11' + let s:language_server_sha = '071907d082576067b0c7a5f2f7659958865d751e' + endif + endif + let sha = get(codeium#command#LoadConfig(codeium#command#XdgConfigDir()), 'sha', s:language_server_sha) let bin_dir = codeium#command#HomeDir() . '/bin/' . sha let s:bin = bin_dir . '/language_server_' . bin_suffix From fc5a68d6273715f13a1257f02a63d668604d9f27 Mon Sep 17 00:00:00 2001 From: Micah Halter Date: Wed, 4 Sep 2024 18:49:09 -0400 Subject: [PATCH 02/16] fix(server): protect against responses with no status (#421) --- autoload/codeium/server.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index 549da3d1..e359c58f 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -123,7 +123,7 @@ function! s:HandleGetStatusResponse(out, err, status) abort if a:status == 0 " Parse the JSON response let response = json_decode(join(a:out, "\n")) - let status = response.status + let status = get(response, 'status', {}) " Check if there is a message in the response and echo it if has_key(status, 'message') && !empty(status.message) echom status.message From fa65fa942aaf1aef73b6dbe3cc0faa713b738fbe Mon Sep 17 00:00:00 2001 From: Saransh Saini <66969478+saranshsaini@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:00:10 -0700 Subject: [PATCH 03/16] specify chat and web ports (#447) * specify chat client and web server ports' * help docs --------- Co-authored-by: Saransh Saini --- autoload/codeium/server.vim | 9 +++++++++ doc/codeium.txt | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index e359c58f..8083aae3 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -252,6 +252,7 @@ endfunction function! s:ActuallyStart() abort let config = get(g:, 'codeium_server_config', {}) + let chat_ports = get(g:, 'codeium_port_config', {}) let manager_dir = tempname() . '/codeium/manager' call mkdir(manager_dir, 'p') @@ -266,6 +267,14 @@ function! s:ActuallyStart() abort let args += ['--enterprise_mode'] let args += ['--portal_url', get(config, 'portal_url', 'https://codeium.example.com')] endif + " If either of these is set, only one vim window (with any number of buffers) will work with Codeium. + " Opening other vim windows won't be able to use Codeium features. + if has_key(chat_ports, 'web_server') && !empty(chat_ports.web_server) + let args += ['--chat_web_server_port', chat_ports.web_server] + endif + if has_key(chat_ports, 'chat_client') && !empty(chat_ports.chat_client) + let args += ['--chat_client_port', chat_ports.chat_client] + endif call codeium#log#Info('Launching server with manager_dir ' . manager_dir) if has('nvim') diff --git a/doc/codeium.txt b/doc/codeium.txt index 1bb4a36a..d486749a 100644 --- a/doc/codeium.txt +++ b/doc/codeium.txt @@ -108,6 +108,21 @@ g:codeium_arch Manually set the host architecture, accepted values > let g:codeium_arch = "x86_64" < + *g:codeium_port_config* +g:codeium_port_config + Set the ports the chat client and web server use. + Pass in web_server and chat_client fields to the mapping to set. + Please note that if either of the ports are specified, only one + window will work with codeium. + That window can have as many buffers within it, but any other + opened windows will not be able to use Codeium's features. +> + let g:codeium_port_config = { + 'web_server': , + 'chat_client': + } +< + *g:codeium_virtual_text_priority* g:codeium_virtual_text_priority The priority used for Codeium's virtual text completions From dfe75c688a8ee9c3d192c51b6e7d315a3ca37d74 Mon Sep 17 00:00:00 2001 From: "PRIZ ;]" Date: Mon, 23 Sep 2024 00:17:22 -0500 Subject: [PATCH 04/16] Add support for WSL (#435) * downloads linux file on wsl * Change has(darwin) --> has(mac) --- autoload/codeium/server.vim | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index 8083aae3..be799319 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -162,6 +162,14 @@ function! codeium#server#Start(...) abort endif let is_arm = stridx(arch, 'arm') == 0 || stridx(arch, 'aarch64') == 0 + if empty(os) + if has("linux") + let os = "Linux" + elseif has("mac") + let os = "Darwin" + endif + endif + if os ==# 'Linux' && is_arm let bin_suffix = 'linux_arm' elseif os ==# 'Linux' From 5644ac5a0e098ca0cf5deed1c909c3fa5e9901f3 Mon Sep 17 00:00:00 2001 From: Daniel Imfeld Date: Mon, 30 Sep 2024 17:52:48 -1000 Subject: [PATCH 05/16] add vim command for invoking chat (#457) --- README.md | 3 ++- autoload/codeium/command.vim | 4 ++++ doc/codeium.txt | 3 +++ plugin/codeium.vim | 7 +++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e5d3a910..45ee36a2 100644 --- a/README.md +++ b/README.md @@ -188,10 +188,11 @@ vim-airline supports Codeium out-of-the-box since commit [3854429d](https://gith ### Launching Codeium Chat -Calling the `codeium#Chat()` function will enable search and indexing in the current project and launch Codeium Chat in a new browser window. +Calling the `codeium#Chat()` function or using the `Codeium Chat` command will enable search and indexing in the current project and launch Codeium Chat in a new browser window. ```vim :call codeium#Chat() +:Codeium Chat ``` The project root is determined by looking in Vim's current working directory for some specific files or directories to be present and goes up to parent directories until one is found. This list of hints is user-configurable and the default value is: diff --git a/autoload/codeium/command.vim b/autoload/codeium/command.vim index 4f5f7658..9a90173c 100644 --- a/autoload/codeium/command.vim +++ b/autoload/codeium/command.vim @@ -137,6 +137,10 @@ function! s:commands.Auth(...) abort endif endfunction +function s:commands.Chat(...) abort + call codeium#Chat() +endfunction + function! s:commands.Disable(...) abort let g:codeium_enabled = 0 endfunction diff --git a/doc/codeium.txt b/doc/codeium.txt index d486749a..8c828ed3 100644 --- a/doc/codeium.txt +++ b/doc/codeium.txt @@ -13,6 +13,9 @@ COMMANDS *:Codeium* *:Codeium_Auth* :Codeium Auth Authenticate to Codeium. + *:Codeium_Chat* +:Codeium Chat Open Codeium Chat in a browser window + *:Codeium_Disable* :Codeium Disable Disable Codeium completions diff --git a/plugin/codeium.vim b/plugin/codeium.vim index 6df3101d..36f1bd07 100644 --- a/plugin/codeium.vim +++ b/plugin/codeium.vim @@ -108,8 +108,15 @@ endfun command! CodeiumAuto :silent! call CodeiumAuto() +function! CodeiumChat() + call codeium#Chat() +endfun + +command! CodeiumChat :silent! call CodeiumChat() + :amenu Plugin.Codeium.Enable\ \Codeium\ \(\:CodeiumEnable\) :call CodeiumEnable() :amenu Plugin.Codeium.Disable\ \Codeium\ \(\:CodeiumDisable\) :call CodeiumDisable() :amenu Plugin.Codeium.Manual\ \Codeium\ \AI\ \Autocompletion\ \(\:CodeiumManual\) :call CodeiumManual() :amenu Plugin.Codeium.Automatic\ \Codeium\ \AI\ \Completion\ \(\:CodeiumAuto\) :call CodeiumAuto() :amenu Plugin.Codeium.Toggle\ \Codeium\ \(\:CodeiumToggle\) :call CodeiumToggle() +:amenu Plugin.Codeium.Chat\ \Codeium\ \(\:CodeiumChat\) :call CodeiumChat() From b9be24761977b64c100db1c8745635d46172a4e2 Mon Sep 17 00:00:00 2001 From: Rahul Sridhar Date: Fri, 4 Oct 2024 15:59:09 -0700 Subject: [PATCH 06/16] Project import generated by Copybara. (#460) * Project import generated by Copybara. GitOrigin-RevId: 6c901dfcb013215ddf7041aba8e2bd0c4b54e829 * reverts --------- Co-authored-by: Copybara Bot --- autoload/codeium/server.vim | 10 +++++----- doc/codeium.txt | 9 ++++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index be799319..a841a9e6 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -1,5 +1,5 @@ -let s:language_server_version = '1.14.11' -let s:language_server_sha = '071907d082576067b0c7a5f2f7659958865d751e' +let s:language_server_version = '1.20.8' +let s:language_server_sha = '37f12b83df389802b7d4e293b3e1a986aca289c0' let s:root = expand(':h:h:h') let s:bin = v:null @@ -186,8 +186,8 @@ function! codeium#server#Start(...) abort if has_key(config, 'portal_url') && !empty(config.portal_url) let response = system('curl -s ' . config.portal_url . '/api/version') if v:shell_error != 0 - let s:language_server_version = '1.14.11' - let s:language_server_sha = '071907d082576067b0c7a5f2f7659958865d751e' + let s:language_server_version = response + let s:language_server_sha = 'enterprise-' . s:language_server_version endif endif @@ -276,7 +276,7 @@ function! s:ActuallyStart() abort let args += ['--portal_url', get(config, 'portal_url', 'https://codeium.example.com')] endif " If either of these is set, only one vim window (with any number of buffers) will work with Codeium. - " Opening other vim windows won't be able to use Codeium features. + " Opening other vim windows won't be able to use Codeium features. if has_key(chat_ports, 'web_server') && !empty(chat_ports.web_server) let args += ['--chat_web_server_port', chat_ports.web_server] endif diff --git a/doc/codeium.txt b/doc/codeium.txt index 8c828ed3..4a30ebfd 100644 --- a/doc/codeium.txt +++ b/doc/codeium.txt @@ -113,11 +113,11 @@ g:codeium_arch Manually set the host architecture, accepted values < *g:codeium_port_config* g:codeium_port_config - Set the ports the chat client and web server use. + Set the ports the chat client and web server use. Pass in web_server and chat_client fields to the mapping to set. - Please note that if either of the ports are specified, only one - window will work with codeium. - That window can have as many buffers within it, but any other + Please note that if either of the ports are specified, only one + window will work with codeium. + That window can have as many buffers within it, but any other opened windows will not be able to use Codeium's features. > let g:codeium_port_config = { @@ -125,7 +125,6 @@ g:codeium_port_config 'chat_client': } < - *g:codeium_virtual_text_priority* g:codeium_virtual_text_priority The priority used for Codeium's virtual text completions From f74306ea57e0c139045ca4ca1661a5a36e4ef485 Mon Sep 17 00:00:00 2001 From: Rahul Sridhar Date: Fri, 4 Oct 2024 16:22:23 -0700 Subject: [PATCH 07/16] Vim fixes (#461) * Vim fixes * fix --- autoload/codeium/doc.vim | 3 +-- autoload/codeium/server.vim | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/autoload/codeium/doc.vim b/autoload/codeium/doc.vim index b50b8b59..8084d089 100644 --- a/autoload/codeium/doc.vim +++ b/autoload/codeium/doc.vim @@ -103,8 +103,7 @@ function! codeium#doc#GetDocument(bufId, curLine, curCol) abort \ 'editor_language': editor_language, \ 'language': get(s:language_enum, language, 0), \ 'cursor_position': {'row': a:curLine - 1, 'col': a:curCol - 1}, - \ 'absolute_path': fnamemodify(bufname(a:bufId), ':p'), - \ 'relative_path': fnamemodify(bufname(a:bufId), ':') + \ 'absolute_path_migrate_me_to_uri': fnamemodify(bufname(a:bufId), ':p'), \ } let line_ending = codeium#util#LineEndingChars(v:null) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index a841a9e6..01681b32 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -185,9 +185,13 @@ function! codeium#server#Start(...) abort let config = get(g:, 'codeium_server_config', {}) if has_key(config, 'portal_url') && !empty(config.portal_url) let response = system('curl -s ' . config.portal_url . '/api/version') - if v:shell_error != 0 + if v:shell_error let s:language_server_version = response let s:language_server_sha = 'enterprise-' . s:language_server_version + else + call codeium#log#Error('Failed to fetch version from ' . config.portal_url) + call codeium#log#Error(v:shell_error) + call codeium#log#Error(v:stderr) endif endif From 9ff8d323ff56ff513457f3f7f4305523408d538e Mon Sep 17 00:00:00 2001 From: Rahul Sridhar Date: Fri, 4 Oct 2024 16:27:46 -0700 Subject: [PATCH 08/16] fix (#462) --- autoload/codeium/server.vim | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index 01681b32..ff9c1c49 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -185,13 +185,12 @@ function! codeium#server#Start(...) abort let config = get(g:, 'codeium_server_config', {}) if has_key(config, 'portal_url') && !empty(config.portal_url) let response = system('curl -s ' . config.portal_url . '/api/version') - if v:shell_error + if v:shell_error == '0' let s:language_server_version = response let s:language_server_sha = 'enterprise-' . s:language_server_version else call codeium#log#Error('Failed to fetch version from ' . config.portal_url) call codeium#log#Error(v:shell_error) - call codeium#log#Error(v:stderr) endif endif From d85a85ca7e12967db22b00fd5e9f1a095bb47c96 Mon Sep 17 00:00:00 2001 From: Daniel Imfeld Date: Mon, 7 Oct 2024 08:17:12 -1000 Subject: [PATCH 09/16] Fix RefreshContextForIdeAction call to pass correct column (#458) This fixes this error: E1002 15:51:49.912757 76190 interceptor.go:51] /exa.language_server_pb.LanguageServerService/RefreshContextForIdeAction: invalid position (row 258, col 258): character 258 out of range [0, 18] for line 258 --- autoload/codeium.vim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/autoload/codeium.vim b/autoload/codeium.vim index 0ea437e1..1ccbee66 100644 --- a/autoload/codeium.vim +++ b/autoload/codeium.vim @@ -473,7 +473,7 @@ endfunction function! codeium#RefreshContext() abort " current buffer is 1 try - call codeium#server#Request('RefreshContextForIdeAction', {'active_document': codeium#doc#GetDocument(1, line('.'), line('.'))}) + call codeium#server#Request('RefreshContextForIdeAction', {'active_document': codeium#doc#GetDocument(1, line('.'), col('.'))}) catch call codeium#log#Exception() endtry From 452fcfa08dcf293cd2f78e32e9d7c6dbe618e0f0 Mon Sep 17 00:00:00 2001 From: roberthou1 Date: Fri, 11 Oct 2024 11:24:31 -0700 Subject: [PATCH 10/16] adding badges for docs and canny board (#466) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 45ee36a2..546de4f4 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ [![Discord](https://img.shields.io/discord/1027685395649015980?label=community&color=5865F2&logo=discord&logoColor=FFFFFF)](https://discord.gg/3XFf78nAx5) [![Twitter Follow](https://img.shields.io/badge/style--blue?style=social&logo=twitter&label=Follow%20%40codeiumdev)](https://twitter.com/intent/follow?screen_name=codeiumdev) ![License](https://img.shields.io/github/license/Exafunction/codeium.vim) +[![Docs](https://img.shields.io/badge/Codeium%20Docs-09B6A2)](https://docs.codeium.com) +[![Canny Board](https://img.shields.io/badge/Feature%20Requests-6b69ff)](https://codeium.canny.io/feature-requests/) [![built with Codeium](https://codeium.com/badges/main)](https://codeium.com?repo_name=exafunction%2Fcodeium.vim) [![Visual Studio](https://img.shields.io/visual-studio-marketplace/i/Codeium.codeium?label=Visual%20Studio&logo=visualstudio)](https://marketplace.visualstudio.com/items?itemName=Codeium.codeium) From 8c01979323b2b480c8bf160d3ff85bd1668baa49 Mon Sep 17 00:00:00 2001 From: Saransh Saini <66969478+saranshsaini@users.noreply.github.com> Date: Mon, 14 Oct 2024 12:39:08 -0700 Subject: [PATCH 11/16] Make it easier to open chat url when using vim/nvim remotely (#468) Make url clearer when chat ports are configured --- autoload/codeium.vim | 27 ++++++++++++++++++++------- doc/codeium.txt | 4 +++- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/autoload/codeium.vim b/autoload/codeium.vim index 1ccbee66..61789f38 100644 --- a/autoload/codeium.vim +++ b/autoload/codeium.vim @@ -419,12 +419,7 @@ function! codeium#CycleOrComplete() abort endif endfunction -function! s:LaunchChat(out, err, status) abort - let l:metadata = codeium#server#RequestMetadata() - let l:processes = json_decode(join(a:out, '')) - let l:chat_port = l:processes['chatClientPort'] - let l:ws_port = l:processes['chatWebServerPort'] - +function BuildChatUrl(metadata, chat_port, ws_port) abort let config = get(g:, 'codeium_server_config', {}) let l:has_enterprise_extension = 'false' if has_key(config, 'api_url') && !empty(config.api_url) @@ -432,7 +427,17 @@ function! s:LaunchChat(out, err, status) abort endif " Hard-coded to English locale and allowed telemetry. - let l:url = 'http://127.0.0.1:' . l:chat_port . '/?' . 'api_key=' . l:metadata.api_key . '&ide_name=' . l:metadata.ide_name . '&ide_version=' . l:metadata.ide_version . '&extension_name=' . l:metadata.extension_name . '&extension_version=' . l:metadata.extension_version . '&web_server_url=ws://127.0.0.1:' . l:ws_port . '&has_enterprise_extension=' . l:has_enterprise_extension . '&app_name=Vim&locale=en&ide_telemetry_enabled=true&has_index_service=true' + let l:url = 'http://127.0.0.1:' . a:chat_port . '/?' . 'api_key=' . a:metadata.api_key . '&ide_name=' . a:metadata.ide_name . '&ide_version=' . a:metadata.ide_version . '&extension_name=' . a:metadata.extension_name . '&extension_version=' . a:metadata.extension_version . '&web_server_url=ws://127.0.0.1:' . a:ws_port . '&has_enterprise_extension=' . l:has_enterprise_extension . '&app_name=Vim&locale=en&ide_telemetry_enabled=true&has_index_service=true' + return l:url +endfunction + +function! s:LaunchChat(out, err, status) abort + let l:metadata = codeium#server#RequestMetadata() + let l:processes = json_decode(join(a:out, '')) + let l:chat_port = l:processes['chatClientPort'] + let l:ws_port = l:processes['chatWebServerPort'] + + let l:url = BuildChatUrl(l:metadata, l:chat_port, l:ws_port) let l:browser = codeium#command#BrowserCommand() let opened_browser = v:false if !empty(browser) @@ -501,6 +506,14 @@ function! codeium#Chat() abort call codeium#RefreshContext() call codeium#server#Request('GetProcesses', codeium#server#RequestMetadata(), function('s:LaunchChat', [])) call codeium#AddTrackedWorkspace() + " If user has chat_ports set, they are probably using vim remotely and trying to use chat via port forwarding. + " In that case display the url here so that it is easier to copy, as the browser will fail to open automatically. + let chat_ports = get(g:, 'codeium_port_config', {}) + if has_key(chat_ports, 'chat_client') && !empty(chat_ports.chat_client) && has_key(chat_ports, 'web_server') && !empty(chat_ports.web_server) + let l:metadata = codeium#server#RequestMetadata() + let l:url = BuildChatUrl(l:metadata, chat_ports.chat_client, chat_ports.web_server) + echomsg l:url + endif catch call codeium#log#Exception() endtry diff --git a/doc/codeium.txt b/doc/codeium.txt index 4a30ebfd..c87b9122 100644 --- a/doc/codeium.txt +++ b/doc/codeium.txt @@ -115,8 +115,10 @@ g:codeium_arch Manually set the host architecture, accepted values g:codeium_port_config Set the ports the chat client and web server use. Pass in web_server and chat_client fields to the mapping to set. - Please note that if either of the ports are specified, only one + Please note that if this option is set, only one window will work with codeium. + It is recommended to set both the web_server and chat_client options + if using this. That window can have as many buffers within it, but any other opened windows will not be able to use Codeium's features. > From 605ab06780c9c42a63fc8afa8c0bd02b3b51b66f Mon Sep 17 00:00:00 2001 From: Saransh Saini <66969478+saranshsaini@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:46:36 -0800 Subject: [PATCH 12/16] Fix LS port if codeium_port_config is set (#469) * remote check * fixes * update doc --------- Co-authored-by: Saransh Saini --- autoload/codeium/server.vim | 14 +++++++++++--- autoload/codeium/util.vim | 5 +++++ doc/codeium.txt | 4 +++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index ff9c1c49..7e624783 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -25,6 +25,10 @@ if !exists('s:editor_version') endif let s:server_port = v:null +if codeium#util#IsUsingRemoteChat() + let s:server_port = 42100 +endif + let g:codeium_server_job = v:null function! s:OnExit(result, status, on_complete_cb) abort @@ -266,11 +270,9 @@ function! s:ActuallyStart() abort let chat_ports = get(g:, 'codeium_port_config', {}) let manager_dir = tempname() . '/codeium/manager' call mkdir(manager_dir, 'p') - let args = [ \ s:bin, \ '--api_server_url', get(config, 'api_url', 'https://server.codeium.com'), - \ '--manager_dir', manager_dir, \ '--enable_local_search', '--enable_index_service', '--search_max_workspace_file_count', '5000', \ '--enable_chat_web_server', '--enable_chat_client' \ ] @@ -278,6 +280,9 @@ function! s:ActuallyStart() abort let args += ['--enterprise_mode'] let args += ['--portal_url', get(config, 'portal_url', 'https://codeium.example.com')] endif + if !codeium#util#IsUsingRemoteChat() + let args += ['--manager_dir', manager_dir] + endif " If either of these is set, only one vim window (with any number of buffers) will work with Codeium. " Opening other vim windows won't be able to use Codeium features. if has_key(chat_ports, 'web_server') && !empty(chat_ports.web_server) @@ -298,6 +303,9 @@ function! s:ActuallyStart() abort \ 'err_cb': { channel, data -> codeium#log#Info('[SERVER] ' . data) }, \ }) endif - call timer_start(500, function('s:FindPort', [manager_dir]), {'repeat': -1}) + if !codeium#util#IsUsingRemoteChat() + call timer_start(500, function('s:FindPort', [manager_dir]), {'repeat': -1}) + endif + call timer_start(5000, function('s:SendHeartbeat', []), {'repeat': -1}) endfunction diff --git a/autoload/codeium/util.vim b/autoload/codeium/util.vim index 3d91a446..48eae30b 100644 --- a/autoload/codeium/util.vim +++ b/autoload/codeium/util.vim @@ -8,3 +8,8 @@ function! codeium#util#HasSupportedVersion() abort return s:nvim_virt_text_support || s:vim_virt_text_support endfunction + +function! codeium#util#IsUsingRemoteChat() abort + let chat_ports = get(g:, 'codeium_port_config', {}) + return has_key(chat_ports, 'chat_client') && !empty(chat_ports.chat_client) && has_key(chat_ports, 'web_server') && !empty(chat_ports.web_server) +endfunction diff --git a/doc/codeium.txt b/doc/codeium.txt index c87b9122..5c33c70d 100644 --- a/doc/codeium.txt +++ b/doc/codeium.txt @@ -118,7 +118,9 @@ g:codeium_port_config Please note that if this option is set, only one window will work with codeium. It is recommended to set both the web_server and chat_client options - if using this. + if using this. + If you are setting this because you are using vim remotely and want chat to work + you will need to forward the two ports you set here, along with port 42100. That window can have as many buffers within it, but any other opened windows will not be able to use Codeium's features. > From d152e6cd3d814a44f36447bb0d21d51f6787fe9c Mon Sep 17 00:00:00 2001 From: Saransh Saini <66969478+saranshsaini@users.noreply.github.com> Date: Mon, 2 Dec 2024 11:41:23 -0800 Subject: [PATCH 13/16] Windows Fix Powershell (#479) * wip * wat * wuh --- autoload/codeium/server.vim | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index 7e624783..2ae6be2b 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -239,7 +239,8 @@ function! s:UnzipAndStart(status) abort let old_shellredir = &shellredir " Switch to powershell. let &shell = 'powershell' - set shellquote= shellpipe=\| shellxquote= + set shellquote=\" + set shellpipe=\| set shellcmdflag=-NoLogo\ -NoProfile\ -ExecutionPolicy\ RemoteSigned\ -Command set shellredir=\|\ Out-File\ -Encoding\ UTF8 call system('& { . ' . shellescape(s:root . '/powershell/gzip.ps1') . '; Expand-File ' . shellescape(s:bin . '.gz') . ' }') From 000de972de76f357c03da14f4f8dd9a969d4fe8c Mon Sep 17 00:00:00 2001 From: Saransh Saini <66969478+saranshsaini@users.noreply.github.com> Date: Mon, 13 Jan 2025 14:13:39 -0800 Subject: [PATCH 14/16] Respect Redirects in Curl Requests(#485) --- autoload/codeium/command.vim | 4 ++-- autoload/codeium/server.vim | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/autoload/codeium/command.vim b/autoload/codeium/command.vim index 9a90173c..e7350287 100644 --- a/autoload/codeium/command.vim +++ b/autoload/codeium/command.vim @@ -91,7 +91,7 @@ function! s:commands.Auth(...) abort endif while empty(api_key) && tries < 3 - let command = 'curl -sS ' . register_user_url . ' ' . + let command = 'curl -sSL ' . register_user_url . ' ' . \ '--header "Content-Type: application/json" ' . \ '--data ' . shellescape(json_encode({'firebase_id_token': auth_token})) let response = system(command) @@ -104,7 +104,7 @@ function! s:commands.Auth(...) abort \ . 'Would you like to try auth without checking SSL certificate revocation? (y/n): ') call inputrestore() if useNoSsl ==? 'y' - let command = 'curl --ssl-no-revoke -sS ' . register_user_url . ' ' . + let command = 'curl --ssl-no-revoke -sSL ' . register_user_url . ' ' . \ '--header "Content-Type: application/json" ' . \ '--data ' . shellescape(json_encode({'firebase_id_token': auth_token})) let response = system(command) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index 2ae6be2b..49e88108 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -73,7 +73,7 @@ function! codeium#server#Request(type, data, ...) abort \ '/exa.language_server_pb.LanguageServerService/' . a:type let data = json_encode(a:data) let args = [ - \ 'curl', uri, + \ 'curl', '-L', uri, \ '--header', 'Content-Type: application/json', \ '-d@-' \ ] @@ -188,7 +188,7 @@ function! codeium#server#Start(...) abort let config = get(g:, 'codeium_server_config', {}) if has_key(config, 'portal_url') && !empty(config.portal_url) - let response = system('curl -s ' . config.portal_url . '/api/version') + let response = system('curl -sL ' . config.portal_url . '/api/version') if v:shell_error == '0' let s:language_server_version = response let s:language_server_sha = 'enterprise-' . s:language_server_version From 272c6e2755e8faa90e26bcdcd9fde6b9e61751ea Mon Sep 17 00:00:00 2001 From: Saransh Saini <66969478+saranshsaini@users.noreply.github.com> Date: Fri, 4 Apr 2025 10:29:56 -0700 Subject: [PATCH 15/16] A rose by any other name (#493) --- README.md | 64 ++++++++++++++++++++-------------------- assets/codeium_logo.svg | 32 -------------------- assets/simple_logo.svg | 34 --------------------- codeium.svg | 9 ------ windsurf.png | Bin 0 -> 135017 bytes 5 files changed, 32 insertions(+), 107 deletions(-) delete mode 100644 assets/codeium_logo.svg delete mode 100644 assets/simple_logo.svg delete mode 100644 codeium.svg create mode 100644 windsurf.png diff --git a/README.md b/README.md index 546de4f4..63a40f08 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,26 @@

- Codeium + Windsurf

--- [![Discord](https://img.shields.io/discord/1027685395649015980?label=community&color=5865F2&logo=discord&logoColor=FFFFFF)](https://discord.gg/3XFf78nAx5) -[![Twitter Follow](https://img.shields.io/badge/style--blue?style=social&logo=twitter&label=Follow%20%40codeiumdev)](https://twitter.com/intent/follow?screen_name=codeiumdev) -![License](https://img.shields.io/github/license/Exafunction/codeium.vim) -[![Docs](https://img.shields.io/badge/Codeium%20Docs-09B6A2)](https://docs.codeium.com) -[![Canny Board](https://img.shields.io/badge/Feature%20Requests-6b69ff)](https://codeium.canny.io/feature-requests/) -[![built with Codeium](https://codeium.com/badges/main)](https://codeium.com?repo_name=exafunction%2Fcodeium.vim) +[![Twitter Follow](https://img.shields.io/badge/style--blue?style=social&logo=twitter&label=Follow%20%40windsurf_ai)](https://twitter.com/intent/follow?screen_name=windsurf_ai) +![License](https://img.shields.io/github/license/Exafunction/windsurf.vim) +[![Docs](https://img.shields.io/badge/Windsurf%20Docs-09B6A2)](https://docs.windsurf.com) +[![Canny Board](https://img.shields.io/badge/Feature%20Requests-6b69ff)](https://windsurf.canny.io/feature-requests/) +[![built with Windsurf](https://windsurf.com/badges/main)](https://windsurf.com?repo_name=exafunction%2Fwindsurf.vim) [![Visual Studio](https://img.shields.io/visual-studio-marketplace/i/Codeium.codeium?label=Visual%20Studio&logo=visualstudio)](https://marketplace.visualstudio.com/items?itemName=Codeium.codeium) [![JetBrains](https://img.shields.io/jetbrains/plugin/d/20540?label=JetBrains)](https://plugins.jetbrains.com/plugin/20540-codeium/) [![Open VSX](https://img.shields.io/open-vsx/dt/Codeium/codeium?label=Open%20VSX)](https://open-vsx.org/extension/Codeium/codeium) [![Google Chrome](https://img.shields.io/chrome-web-store/users/hobjkcpmjhlegmobgonaagepfckjkceh?label=Google%20Chrome&logo=googlechrome&logoColor=FFFFFF)](https://chrome.google.com/webstore/detail/codeium/hobjkcpmjhlegmobgonaagepfckjkceh) -# codeium.vim +# windsurf.vim _Free, ultrafast Copilot alternative for Vim and Neovim_ -Codeium autocompletes your code with AI in all major IDEs. We [launched](https://www.codeium.com/blog/codeium-copilot-alternative-in-vim) this implementation of the Codeium plugin for Vim and Neovim to bring this modern coding superpower to more developers. Check out our [playground](https://www.codeium.com/playground) if you want to quickly try out Codeium online. +Windsurf autocompletes your code with AI in all major IDEs. We [launched](https://www.windsurf.com/blog/codeium-copilot-alternative-in-vim) this implementation of the Windsurf plugin for Vim and Neovim to bring this modern coding superpower to more developers. Check out our [playground](https://www.windsurf.com/playground) if you want to quickly try out Windsurf online. Contributions are welcome! Feel free to submit pull requests and issues related to the plugin. @@ -35,13 +35,13 @@ Contributions are welcome! Feel free to submit pull requests and issues related 1. Install [Vim](https://github.com/vim/vim) (at least 9.0.0185) or [Neovim](https://github.com/neovim/neovim/releases/latest) (at least 0.6) -2. Install `Exafunction/codeium.vim` using your vim plugin manager of +2. Install `Exafunction/windsurf.vim` using your vim plugin manager of choice, or manually. See [Installation Options](#-installation-options) below. -3. Run `:Codeium Auth` to set up the plugin and start using Codeium. +3. Run `:Codeium Auth` to set up the plugin and start using Windsurf. You can run `:help codeium` for a full list of commands and configuration -options, or see [this guide](https://www.codeium.com/vim_tutorial) for a quick tutorial on how to use Codeium. +options, or see [this guide](https://www.windsurf.com/vim_tutorial) for a quick tutorial on how to use Windsurf. ## 🛠️ Configuration @@ -50,7 +50,7 @@ A few of the most popular options are highlighted below. ### ⌨️ Keybindings -Codeium provides the following functions to control suggestions: +Windsurf provides the following functions to control suggestions: | Action | Function | Default Binding | | --------------------------- | ------------------------------ | --------------- | @@ -62,7 +62,7 @@ Codeium provides the following functions to control suggestions: | Accept word from suggestion | `codeium#AcceptNextWord()` | `` | | Accept line from suggestion | `codeium#AcceptNextLine()` | `` | -Codeium's default keybindings can be disabled by setting +Windsurf's default keybindings can be disabled by setting ```vim let g:codeium_disable_bindings = 1 @@ -93,7 +93,7 @@ Or in Neovim (using [wbthomason/packer.nvim](https://github.com/wbthomason/packe ```lua -- Remove the `use` here if you're using folke/lazy.nvim. use { - 'Exafunction/codeium.vim', + 'Exafunction/windsurf.vim', config = function () -- Change '' here to any keycode you like. vim.keymap.set('i', '', function () return vim.fn['codeium#Accept']() end, { expr = true, silent = true }) @@ -106,9 +106,9 @@ use { (Make sure that you ran `:Codeium Auth` after installation.) -### ⛔ Disabling Codeium +### ⛔ Disabling Windsurf -Codeium can be disabled for particular filetypes by setting the +Windsurf can be disabled for particular filetypes by setting the `g:codeium_filetypes` variable in your vim config file (vimrc/init.vim): ```vim @@ -118,7 +118,7 @@ let g:codeium_filetypes = { \ } ``` -Codeium is enabled by default for most filetypes. +Windsurf is enabled by default for most filetypes. You can also _disable_ codeium by default with the `g:codeium_enabled` variable, and enable it manually per buffer by running `:CodeiumEnable`: @@ -163,32 +163,32 @@ To disable automatic text rendering of suggestions (the gray text that appears f let g:codeium_render = v:false ``` -### Show Codeium status in statusline +### Show Windsurf status in statusline -Codeium status can be generated by calling the `codeium#GetStatusString()` function. In +Windsurf status can be generated by calling the `codeium#GetStatusString()` function. In Neovim, you can use `vim.api.nvim_call_function("codeium#GetStatusString", {})` instead. -It produces a 3 char long string with Codeium status: +It produces a 3 char long string with Windsurf status: - `'3/8'` - third suggestion out of 8 -- `'0'` - Codeium returned no suggestions -- `'*'` - waiting for Codeium response +- `'0'` - Windsurf returned no suggestions +- `'*'` - waiting for Windsurf response -In normal mode, status shows if Codeium is enabled or disabled by showing +In normal mode, status shows if Windsurf is enabled or disabled by showing `'ON'` or `'OFF'`. In order to show it in status line add following line to your `.vimrc`: ```set statusline+=\{…\}%3{codeium#GetStatusString()}``` -Shorter variant without Codeium logo: +Shorter variant without Windsurf logo: ```set statusline+=%3{codeium#GetStatusString()}``` Please check `:help statusline` for further information about building statusline in VIM. -vim-airline supports Codeium out-of-the-box since commit [3854429d](https://github.com/vim-airline/vim-airline/commit/3854429d99c8a2fb555a9837b155f33c957a2202). +vim-airline supports Windsurf out-of-the-box since commit [3854429d](https://github.com/vim-airline/vim-airline/commit/3854429d99c8a2fb555a9837b155f33c957a2202). -### Launching Codeium Chat +### Launching Windsurf Chat Calling the `codeium#Chat()` function or using the `Codeium Chat` command will enable search and indexing in the current project and launch Codeium Chat in a new browser window. @@ -209,7 +209,7 @@ Note that launching chat enables telemetry. ```lua { - 'Exafunction/codeium.vim', + 'Exafunction/windsurf.vim', event = 'BufEnter' } ``` @@ -217,19 +217,19 @@ Note that launching chat enables telemetry. ### 🔌 vim-plug ```vim -Plug 'Exafunction/codeium.vim', { 'branch': 'main' } +Plug 'Exafunction/windsurf.vim', { 'branch': 'main' } ``` ### 📦 Vundle ```vim -Plugin 'Exafunction/codeium.vim' +Plugin 'Exafunction/windsurf.vim' ``` ### 📦 packer.nvim: ```vim -use 'Exafunction/codeium.vim' +use 'Exafunction/windsurf.vim' ``` ### 💪 Manual @@ -240,7 +240,7 @@ Run the following. On windows, you can replace `~/.vim` with `$HOME/vimfiles`: ```bash -git clone https://github.com/Exafunction/codeium.vim ~/.vim/pack/Exafunction/start/codeium.vim +git clone https://github.com/Exafunction/windsurf.vim ~/.vim/pack/Exafunction/start/windsurf.vim ``` #### 💻 Neovim @@ -249,5 +249,5 @@ Run the following. On windows, you can replace `~/.config` with `$HOME/AppData/Local`: ```bash -git clone https://github.com/Exafunction/codeium.vim ~/.config/nvim/pack/Exafunction/start/codeium.vim +git clone https://github.com/Exafunction/windsurf.vim ~/.config/nvim/pack/Exafunction/start/windsurf.vim ``` diff --git a/assets/codeium_logo.svg b/assets/codeium_logo.svg deleted file mode 100644 index 7ca8b3e8..00000000 --- a/assets/codeium_logo.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/assets/simple_logo.svg b/assets/simple_logo.svg deleted file mode 100644 index 99f47640..00000000 --- a/assets/simple_logo.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/codeium.svg b/codeium.svg deleted file mode 100644 index 7df5eb2d..00000000 --- a/codeium.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/windsurf.png b/windsurf.png new file mode 100644 index 0000000000000000000000000000000000000000..cd191d578cbf3379f33d7d1fefb4559049d066e3 GIT binary patch literal 135017 zcmeFZby$<@{{XBL1knSc2q>^2ScHUhV*m!B!swFj-e_>5q6ixtr6m+4Mt7G8Lt4g0 zm!n5_ZM=`?{LVSg`9M0)G3`IkMm3~bjv_BXKKG46Q_F24hZ%rj3OUT2|2$~ic+ zIh};Jnqdr&4$H`83O|V5^DW>-fT+X0GNQAxH2R;RTcR%~O}}nDb$=s!^tGh`741n* z#m9#ZgZ}@A|IZL184L1GQ?YiTWVvYzNC)DaV_31?emClBwiU@tj6+_qB@*3Y)<5?9 zbiWgnxzh5%0<*WFFK#h#FKse`CfBgvvBdS>uf@kjS8;45FIa_gr?JlU9 z!zx!L``0F17Ft_ls7{1!O0ULX5(kG`4SH*nD$2qg16PM7N|O59ZvIk0>u%7|$_h-_ zO4v}mBAHpY`&z{ws^H5fxSBbAOd@fAdq>@&5<1o2P`f{3&!AqDboJOTg@5?eNw0bQ zj_5gxMPnYM`OYnAX-IqKA}bZPhuu-sy~*fomf zB-0d6d$hIg`$R(drX8HBDyRFkqpTrAzOx(IE8PbAyF%D|S_b zt`x*SSXc=XS+KwSOMvRwX=!CU>hE+bQM?j^tQ#~@sDMKIH)h!#PpN$IEO_s!RE)XP zXZM-{lpm~6O!4D7LRRNv0tMi8ZPfTAha4-Mu@76! zYa#67I*hnwt>qozyx({)ci6w)N}FO|3Mi+P6~|ni z)FY7;e6A~_t~dvGc>5I0cC3_wlt1jJ$U;R0u5@7zLr|=!ezj{O&-}TIY?ODoqeqg^T5&&X)#$uM2 z;+0U9v4vd7a0m~B04l8*Ui#3o|1QU(gQvs>k^+Vwn8dk!10X8PseVebS6s*=dOxK z2pRF6ZRsc^%3k^vnP}UB>bhk;9zrNJyH1y?g&fA8sg3EzzZLsEwWI@GJ@|Ej&m9jN z{y&mWsgBJN+9U5p*XYF-Iwhr7ZW;TyPv2r2c=0b9#JqS+hdTWTcZGt6MQX`8i@J+) zP6oB9BT3gP-IgYMOH%_3X)gQ;DzmaF=}Ss+R-3qtlxgif*lN)^rXLq*y6CcevF;~jZ56P3;m5dEd=sh?6VAO3L_ zTK?yXM#HYc&v%C&Y!Yq7(+-uLuoXs6;C^b z4t<-PX-7TG6V62A`nUKC-ZXGpJms!!4sjsHJ4cnUj8_Mq0S_+EV`(Tq&U!qD4E7T= z+9qx2x~z5GVE6~$e~DNYnakuU8~5$9D5$T!o*s)KdkecxzU!_FR6D!JzwLdJC7jUx ztlEJ@R55sPc;!)zmLsef^r4Qho@9@_O+i#Fb2B#n6jt6Q9@XnB;p17@F4rSL0oOlT zDD)d5HN;$dYDrml*$%24?qV#+*d2TS-N2r23Q&rgxp zJlnN>cl14cd>5s28h&B&#zH|2cF3hk%K-oTU-IqGV+f{P`?{&INt;eJq>U6B5`XPp z^r-Jby{kc~xA)hnj#)N}{Z2~eDjGwhI|r3nwsO&K*{=xKF8zX}%UO!(sWS3LO8Y&Q zP4YcDvQnEcue89_M|44^5_A}aMxlCZcOA?}m;m#)5IQSJvC&&yKsBfABCSCvl^2tG zD=FN}2Dd24{SSuH++9>0+!JMI*PyvDD^v5cx3&D+)&|#@{g}MiTfg+uQmkC`fHQD_ z1ui@FSxc{^fIPvHiODL7`IkNUOETKBA14!R)rbA4A=F?EcPB^6xXS(F{S8%XQq}1w zomSAh&LaiCu+39<6}whs)9mG+pzckdeeX}Hj*9Wr??c8JR>eJCru<(?2paxeULM!I zJ#Oe<3L+mo6TMR4YNletKa_a*Gj#b_316+iURBt^##xC&oKUUo)n8D+k?Cl zvppPD3G5nrbh1dSrolh-`|(X7e}pHQytY;2{_a4s^(hAiZDMJ!SH2~Qwi;ozubg&J zeTH!d4J1&|Yk)sIw~3A2adAv_FKW8+KnP1ODM>-}f3#dO1qcD#aajYEMw^+%BI1uq zU(>$nZ{Ha8uZcKQ&F7fDnf{4zM?KE*N2nA{<*9kkoJjKh<|f~{k^eiz?tj0i&l8T8 zp0Ye>P4~{jx6s3LG*`TD+(XNum;1^uM;~VVi>dzr^Rr))eL-mHj_tR~#hB9C0FUyP z=#eC7vC0{+^*+0c7lp9LgaWvjWT~f4E*8b<^xySVHox$5vUXV_lE|CRx#&5`JrP4_ zKQ3$D89$Ca>!C8{dUS^VU*2GV^S)(yojIHOQ~966TIUV~Ui)*(U-=ew^d|imrthlR zTNcMf`UT3PW^PLzW7bFzJ>U$WRAc}7+s$wq{)H9mXx4YCIWjml=K zo+AShyF}_8u4PFzM+_IGk9R!PoS7gFQ!)9Q2b2$r+~KLJH6Hl~mfDu~?bk}LGF>T* z$DWX*lPy`6O1?)yE0+KSU|!4J$=XGfoBZ&Ws=-)7uDGBzG*ATaK(>&k{fx_x4)yY?~}=9uHRW>yw*1HDPxzjf3qkFD%K z*QbC35k)s)Sv=UCQ~cgQ>HKnE$mw^df57wyzK4IzGlyz>-ft^agl;&I{$Oy=6)N!M zi43I?3VN=|Hx}xsM!;dgd2{UFpvzs53FDy&)=q*qN&u!GJ zS@*|Rq^!@I@OmZ|4)9X!^A8?Eu79K@TJX1$YfKE`qvc!O@iMQalj{f{EQ%>jr3g!U zfuGqZ=i8mJj(&t}D_mh`kR)8;*B>h>I7YGYKRjZstixgA`Sft3ZD>2# ze3-op9ApXe?51JydRvsYNuh9%jXx4(($Bj;A$q@gRC(- zw%zv(=1l1Y3{8Cl`D({x!S~FmDRA?+KGu!>)YIOX*vzBKvoe2P?pNWx0%>8?xV>fd z(#xD`^*>+^3oap=!nSD^~YrkP!f;W4BFr#+rO`6Hh=h0GCTkJJY-D_1nUwr8tnT|UwG zhyKNL%8-Hidh$SJ0u(pLbpkftq$``y;(`AH9djK|G&=fYFo$S7UADDKG|)3%;2&vb zKuLBM3_FB4OS8*Y{Htv8*ZO(sfNTZ8xHAiil{f-RF$sU_0`?qWR*F7w1XI9c#djaQ zsv9|p!TMnzm0TYBN+BSBEvcCN8_1TIn8oj0@=kD9C;(wrzVEf44IX`8M_3WZ|4pjz z4~oH5i~a{;G7rXGDsSGDp1hAv@D)7Bj87Z-GDShGe*|aD4_Mtk+KFzWAAfn&-yEG( zO)Cpu%dpU*_`v0) z2$U!P<*+L*xO`8%V&7H1;yea~;LzXiJ; zqCo5)!U*w(qh%^Qbd&qyaMKJR6i0ym*>e;SvkST`?Kuy<%n+5Jw7LM_P*i=ZjrH@M;d{ zV>_SjcVwYuE@>k$>I&s2D8pgn3*k3VN>GweEB6)2rD)l~-KnjE^#;9~uR=>tcQyW& zdx{5Zmh?;+?f!v3oB%Z-Rs4HbmL>1`V<_wqLYvlal_XJ8SQU7&vtU8nW9CFcddnQa zchr~E5~P!}kod^6@^8#39}sKDfowRSLA>(wYK5BpoRC?D#msL1n~odOsSy!~k#{nw6+F|IJoXTU{A zT@DJM07j9I>RbFvi9)lb$gH@9Hzx!?y|8;z$@5lE5aS#vsRZOhG-gVHS% zg=_vWgN_hNxc*whH2=?v-{eS>8J~yWI#kB0`IOiE_FCIA1fh(S1JF+CWcX??%@O`*ZluYifv>v|6OQLIW_R8VI$;lus*Z&A58RTGKOx2Jy)pJ$!OPtDJ*NBDiHM@{!~-GD z5h>5v4~mhK49}Ay+x+}MC=mr}X-bt|yRiIai#Ya(4w8DvqJ->;!mk>`%jb16y#)`h z8(Z?_dx?$U@04DyoY+w}hE}dTuZJh<)aLB=Z%X(czy{yoE)xpR{9JF^)c-6&WocXY z21!Y~?aFetmb3=!#J`VT(z48tk6zhPG+t0%2^ucw9nDrLEEQdDdxhf{)LD}~xE>i9 zZ7qHry0RWra^<*e$)xHG4aF{PAM2{4O-4hIX~a?iz&+*b3p$L%usR9vrYafKFz#e` z7*HbmkL6eAx<9pKC4BMs)<+1Rb2I6oF?1Za(p~L!?~gAlV-yCY?4YFbo3*7;XCBGV z>ZNbWgpb-{tcnbnK-477 zgAEr#Jzp<8Ne|l+JRLVz(K~8KNCvtmUfSy~f4aawlKB_(j?B%4km7P*^Cbg1nVS7v zCuH?7kEpJOTEdoQBc}4QjA6j^$UW!9w+@4|PQ{`b4cWs7COWUuSnwgnn?ctywU1)H z1P9w+a)S83UBs*w?6#YxylLbQ9+Z$!lNX87X;hEmC{~M_R4R_w!R7M|RDZ1Q+gi4~ zSXs0;Hn4|Tboa7H{RPYaLPzmSUL6QpQX-U+M94FDM?OE?6tJMf3fN z7KKLOY4f6l>k4zlU*EkCeAn-Cun9@Yh6L`8lL-+rGPYFh7Z)1|Q@4cTt0BHGegNz$g}u!X>WlaVY>%9M=)haaUMAx@X2;9UfF@W>3~ zkXK3KqS;!hO~SSyReqC!`WgnVzRKn|sNfi{DRy?oj?5u5a?Ov+*1!+&`g&2N+$YQ8 z9tL`INU|$)5UWf{gh6>|$Srm9??_|F>^jE4Kh={4mC4kcMNchFd~B`%_T;8ukf{}p z|5aFbj#90T^NMPhn>8zA*kJufyC=U}lH+~uL@Zd597>Pf7azY<|3$g&DuorKaIilL z*K449F~92Z(B$>G`a6T!aPr=W!m#Wteyw0QZ-5ZFQS0j=!sRGIzfmbWThtr888;A= zPX!M2JHUsb(N0rJ!s*XqJ|SJRZ=yC9Tx3&XG2woT3I*We8sQ1qW~2anuHBD{ zyMVh>k~HYpvfl}*a?4I^^mM{3zeSGv?rg+6A8f8IWa$heEe7sh=!OGxEc+(oso;>HtjqGhBFSM{UO*HZTd=3EbIg%37`uADvGOnY}qFYdkX z1071?CqQWr~$`LSk?S|^Y{;Iu!5%|%$L6iN~Uhrq8 z-a$RwU?~3}jU!~K9E9STXFbBM1y{X}F@DPK3#3R*j{afRFpj68gQ?Pl^xG}djp%fG zsj|Y_#ePh~85%^5Zg`2*l$#B1x&EDHdjKPRAHQnNEW4K1FS4MUd(KF~!J*75Z+2$a zYI-WU;bRR1*b&e+S!eTX|<6>Cb>vR&;jHE zNm*Qqi_tqzJnS7gaQ}96N|RRZIR}Y8o9)68xTuS_SA4zGMkfirg%UF~EEScVBIlbM zb%P~2=4)&3`A?gA7cP)@{X=!#@|KgUeS&F~n=a-)RO+l(hQ3|$Sc2?55MG^zEKXUX zne`T%q(+fkQME6HCe)vDd1}2>b^C8)HB*{n@%I?v?6EkwyvoXZV-*;N_Hd0&ra*R5 z^h%=Ca$o0KJChB6Try$xAr(0KC<61f%bZT8Y5mI{HJAobP7)e^XZK?EZ1_X>cJY+X z7hji$XI4`dAp`J<`sQJeIqp>!8j@|4vdP!i0Ma)2ISkSWu%OF?~u3fp|Xz*Td zg$zJmf-D7=5{MqPX2=Mlep4X{~(g;gxI9=UMo<62h_jP3|A*Zv~t~G-nOutkNn) zF+Ok0Twr?cw~h@glw++*`lY?65TK%m$tGFK=Zm!Ajt&X>$#Y0^k@$x9>Hcz_##IzATQ$Vx*X~Ewp5O|6V9z)C#aON5&>nGVBb71 zhra3GP_4Yg;K^$1TpLke(4$N`=xGs&zWM4ogV|otyIvVE`+L3o!1w_+Cj~?CvO9ZX z3;w?GB=QHxxpw-}h)uNvwhK8lgFUF=K|FD5Deb1xjO)aT=|P2k5X9EMVyjI&!+Q32 zW|fZ^56_F4tJhB!J#lvmA3(uv+KC9Fk|=>--aBJFNDTIeI20RR%d& zcJ?zZH(hkMOG7JpSo$D}d2!TM{4Cbd&hx-V?VNKLJWE<~uD*I2>=jseQwCBbLc7i( z8d2g*uTYUQ;@{Wj;!UzCv*{XZ4)TyFv5)GZxxM!r%ZVo;+^DVI-=cowm7(uVi{Fjm zCeC3RCL8=!N;6P$-B#5({Q@v9@~DIR$&gTET&t$DrtUSlbcsxe#9q&FA_OKAT^PeF zvuSwG!4^F~F4`~S9l7+uE*uK=d+tixlhX{l+yxyzF2y`%w%|Ff&+ci3F9DN z;j~T`j%Q$IxCU=fqnAsM{s^BN8+LhR4W1YDA4zyakQwSIMTzt&M5RI1rh^$62EhHf zH8Lk8Q}-G$dxPTR^+m~gy+f%=8>9%CeA7IB?GG{=2Q;O#u0w1Bketj?@2LO>F*_yNkzG_35EBp;{&T) z?XeyNCO|u9qx%gGRwoSgRE2^G=WrZr9*!Us<6Nuen6OdYV0{V;nSD`=w&$b2Ca+Up z6S< zRc(aM)1pQpr@na)7nvca+DK9f!#T++n=-$$ynv!w+o6|}dxO0%F&@j~U*pfTi*FEg zby62Y=i{S#2R}Q~DI(>a7E$~P@WBYjhin@jeXz zLfI?@d9RcA8-`=(ePz^w6Cx)Y0`rTCNI;@cX?yd(hG+sOXWvG?c9t_SP)3xRbn2j3 za!b?bWv!}5Aj~|=k|(6`P!1rqaSi6E^bt@$RX3y|M1OLXDO2@Py~mwBiLF-=dqI(a z|AgeXCTBdd$=CZTihFu4esZPEwt}7!-)c_K)m{2Mpoi^)<;KAlgn@ZUFtq*oU{C2R zS!h27EuU)D?fBs$7QPqBNwnlfX~wO_ju8q`YgS1;4h~68gX}UKg*95ZyIH!K==7s{ zOuYyBkVwvhhR%{gE>Jjh#icyj@nCgePbMgg^nVjJ|1SyB*cG6ERIA%Q2eMVkPB^es zdf?E0aHT@-i6#yBm2v*>sf9T~$OtCB_fL$$z4_Yk`I4P}Wr=fdWEaVWR~fpI`9(<8 z)C*(dbrVAL<+TR-a(+Ugl1=hK)DNz@9t2cqN{AWi1kLlaBm8GoO!{J7x^ zPl~PtGb&zjqTVqJ9fa!C@>Xq)8zVF?%oLDLTAbYzckCUcN4^F{1PPqjg>Jn^*PMAA z%9B@GP~f$_lT=+BS>pQN{91B6D8m2GnI=znkKwbp*(0dxj|sF=#yK~Uj2^0y99yj* zFv|xbveztZqHL}I1IJB*cYU+8Zr=-~l4Z`5v2HJL^@K~0V@lL`nx%vLo?eI_EE0Ie z!4S-p~ezigKfMHb5u=Zke%95V1LTNy~zBoOnMz| zD4An#*0kn`AawYXhF-LDOG)0ANHwCd{o)tSJCx+OYuYkzmghY%&FLp;lVU7tIFhAN z+R$Zg)SrJ$axoYje{v%4;e?Anoi_cah=xO!)g(^Y*fhuY{kxd!5d8a2dku4=II{i* z#zWvg89(Mb$-JwPv^Wp9W@zF9+|87OttaCMN-wuB1dUv>YUG?}eTli$fEPa3a5lc~ z0is!YOIO8`rvB3(~A|!?7NQ|d&-MAsZVL@<_EBr!gPg)>7xQG zcL_Gj!q31o^%&CK@D;DFDVIu{Kq2bQW!>5P!Xy}U61IVX9PBqFu(oI$GkdD}8zmi8 z_02=v=2?$%!V(@GDxklYx<}G#6wVfX$_hgZ7?Ct?lC+p{ngkErMK}=<`mSC5s7mC z?Za++DYIUeGy*U-kp1O>#o_}(Zi(3idl;)@jEenmvxiL$werny+Y7Va%sZc?Z43Yt za$Iwx(c_K+4Guyu=4azqFAc(|ZLe_B_5-1eV_Y4fa2&%F;(-6nnI@831+9QQ%30`e zk-m)aSPN6Y&`W{L{TTKCWylB!g!R>+Ha;yE)(uc_ZmL35D;UbL?p$506H70z!0q5>E&Uin} z=>e}G48+xKQz;(_&%n{jPtB_MIHeA*i#$7rO<4C(+agG()1E~%7I9ItU=toSHi=Hc zG}~QkTL`z8^Ak^1&i87XNf5WvYLJI4+(WN#3!8*BNhC&1Hf1J}9V%NgQG!g3QOoAi z=l?5|lCg@e1?}|Ck*UQ7Ys2UAf}{Nb*zP@S#E6OYIpmmGLuFs zq|58=em>muzYwlnbjhhBj67RS5yd(CXQv&B@_Cz!%`NRbV*?6r9G^pZ3qox}m(8{8 zRo^uNp;0x{6V>ZY9%_d%6%~Zr#TYH>0(wPYzD!rgkll%Gu=j9_jq^#gDnK^B!5#g! zZ2tp{!ojkup+w@K2H$_<9cSJl&@`Q_yw~J_ld63+RKxlzvFwmWG&R`lbbtd|9$%WV zO5ohrrQsx=oB;l6_;NgIBH3og^P+6&=9&E1pF?P%kl=AlI%~g{e^y$>;zyp6S3VW? z^%&}a#k11?CFD5_Dz58hWtV?JhqCu(j09(D9dkZ$)$WPnAoXU_43xQZS1TgFgOnOb zlhJ2u9Qj~JboDcgx`!(>>YJ+q^rl*=rS|%s-q~J{+JSqeD`hntS-CAm{GdpfOh&t% zSWc-4X{XakODSObM$|BAvUtmLpyNZ}|8nQ2zpzHvl>@S^?zgKFc}rK44?Zm; z-+WKh2p++!viVT#i%$g+SA}*W*JO$RQ5sGfsx2M}xFGl6BH+h$JJcN!MJ;acxg z^^~KP$7|ZK0FFJ4XM1~%L1KzUwevqpjmtFzP|{xWo4sx{p3k$atK%!HN8_NBTnOrX z3MovzYfc4u#q>C<0R^o7kycXt3?zD!PhNR@#q23qbK6zQiAZ|bh@pJ|{9|n&{uB&3 zE)U;~wJ`lD5B?`fep;ssLLH0;?k1ITFPA|xR%h-gjoBbXaWMC=IaGvh+o~uOX2^h+ zN2+=oX~5)Y74hSkN35&&mxUMNpP*ok7&EbfTGCu+;H7P^^|N_z{$(`&XTv|Ta)cBM z>%Fmj@pN=>5HIS%)YoS~uulCP3R#Qb$tB(mgKZ1*Dx~scXNdr?dRTHz-ZAz%fclZ@4ooN5p6QB5wXHm9RX=?!ZYELuz@C(QSX;|*2dG}f{mNiWvSw;F;f-I&b7O`+h%!U_=03lhrSaPd+sR?b}HO;U1EVnUfv{Yx(gDD2=UrbBj_@yr%K!OFDBb zi|fKn)EqJN^ZAAUv66L$w4q|lx~MXf0NEJ)z#F{#%89No@Z%>k<&`6w zt`}pzjuB?GdZU%o%8`J-@SRth$@e_}36&vjK_{15XEC7A>Qu9AgP3g25x`Ex`RdVfKD}Ji zrqWX|(KhFmAG8=FlJuJl#XRUQ)k^3HA|D8ztK1wVQj66!4XlGc6HX{khErAW3Z3(7 z1L)AJ88) ze~(^u5Xy!{-9QaDid+MUoK6oy>1k`gj6QUkKhQ8R`Y=X#=E0%u3%JuQK6&F8%jQqH zu)Ct|F!W{&=yk?`xwag6g=8RMB@U*cm?8Qf=KYO!-Epc*z?93@W(m4rNKMlq?I2@) z`$?gx7^0B&M5dgTk}(a$JZG-L&7AQJ1hABs)>+R$uswL-$e-?xFfeXok3ONNT>YZUUZR7ScoYIR>!Qp&%iCTxR<=75mx%dd;e47uw z@mVcVg{Z^k4V(-#u#pcYw-XQE>b6kfIXKDXDtI;jN7j#oFyC(g(QtrT2ps80h zTpc|!V0Hx%fR?01XxVbiN-?Uoh@>1>Pf5uS@YbP$7m$MMJ%=C8)YW1UV(ZY=z z?FU{9B!<)>-(YTvwmH z64Jkkan;aOVXM?X6Tdp|>eUn$X)W%T2I`NjNV{_BvoX#TDf$?p6{-&Wm)zDW?~!Eg zB?ef3A)Jf04hWQ*B|fZPTK0@dF^)g#I4$G)c=R(HNk%Vsh!!M>`s*%$JJ%5!HG55) zrX~u1smyDZ+e?#%Wql?@OX$Qgq!+|`TcZC}0FCsVbHP+~Ji4tUe#^0Y)I4A`cHbLD z1zO_@AK6KmnbbJIjyg1X039h?H-Zan#_oM^4=|gCIrh0{RT$^zlX4L)(Nqkn8GN4PC>kHT|2bS8GpKHfZ^0k}fJ&c&M6s5uPim01m`v#3X;3W4M zvQdGIi>5vB67QO~6UWr|clL={%_UrtIdR`vZzpW#Adu*KCA@=11_+-wq%szx>&6DF2|1*IH$;DpTTXBST= zsyG*OI-_YNxK!>ct!b%9pO=2m)K&~r53)b0=KlHFq9-MP&hNjvD0I$6b!qZe%d}f2 z^{PW=&e8r>uurX(v^6m1FWrH3tE$uL4i4N5JZKO65*?+zY7BHjo~b~=C09LB8LYWeK@qgVU1{8a0k%kb|oZq`z*xwLZXL<=eUA7y4r z#dKY5W&0ZuC$4SH7C+U@HixbZQ-j{*V6ri0F|$z!=~~v0zHzHl!DvTai{s_pa9l%H zX;tyH2YVUK{YFpR4{-H98zEp97 zSyM_o_@M(QrlnpBpeOj1Odmg0cxTKtZU6~;Q>O(&1?~pQRq62yjy6X>e1^F(wvsOL z=qy5yRul(L={6Uqy@p3%Qqcr5Q|}(ukO33{lPt*MT8}v<*YT}NiehG4|58^KPa;~f zDPB#7U=PcFJLUSjgPIK|b$pF?#s1j$)2^4jWgSo3R4St1MCsgH@d>XkmOPA^PKpFf zJt)b*TZ?1X=eGXX%1$S>y*2mPR^)W01eBBDSsuLeu(-GxYL_Hv`R9ny46=?KjYZEZ zTOT;FJ%=oPAHg4%axa9utRu{K*1z8}$jMb3%db(31e@;|$Bk4Bg|S4~Cz<#LW`5+xUImJQ7xGrT+$ZCY z`}S(!4avcm2c0Z3tMoa%*FROR6cnF=rf3|T_kn$O{l<{+$JFz22D|T5+^V-tNtvDE z@9D^MPvept3mZp(lL6J`B7^Ex+cRl)?Xk>CP`T}iJ!gl~42{lB%kL*I_YwIk z^Q-EziLV2XOy{d3qP%YIS8L@vGTuaX7QQ;B4hBkI8qE~~bUo)wuYW8GQ`hn2X#LXa z`93x~D}50zybp{}M_qoY+{76!|M{S!u{z9aONRH1rM(&yJvSbv6mEi0p55>`j}^43923UQlLoxD1R%3au> z4cv{-rd7#q)KV6H=EROI!oLpoqyk+&^CA$nA}EsiZFG7p$tv;8_e$zes^c6Hn{^=C z8p2NvDU3v$0D<^2AxC2f_+m@zSrC!ByaLmNpbqO0dqv0(zDKIO>Cod~A zc^%m=J2I~xsWNpw+`WyK|B|99lKT1e+(CEQr_&yC^5I^y?eU%c$zqu`<-pw@+5*Ei zYQar?5!Z+dx7-KK9o#@_3)#vk3G1DkQ6**$GOi0flU?!OEQ?P$hkDxi5zeXZSNMpL z!)taEj*|?CwR`*5b#AH=R=Yd)>DcL{qS~X|ssyUGL-E>dda;h5?LVtKjP@@RUR`y# zZdwHjzKQg;C-@w)k7VtmLh6`FRE3yyVxksHS78M&Fg99>~5|vNwxm)e_=wpjHBb07d^o_@~g> zn`l`z8AvIqr<7Jcb=0F

KVuB=&dts78s@Is2%E#*)bd$Y^cxE+n`5;QA}&4}4U# zp%2E?RWU4Qn!!ypB}>Tse!OU8s@|&(zn(byS>W{VEAFnq3g+Bw4i4vh+*ia|X2dfl zRw|lZ`xWJF-&dQd+uj;pG1<4+Xx^ow_Z6STt)T}3@t_9V&bhgqS+Pf5NnQ$HCPP7= zP}WZi*$_8Ddyp}m8^~bOrj6vB8IIf?+(>pHsZwQdC8FMF9OF7}_vdjRRrRs4rPB3_ z&!_I$y_PX%Gssyj2|QmFX19AQc^IU5Tz2v5#u9(@P8gc^o7xDvLld?YR1Ht^sOEOb zQryjxt67ZWm9naSU!w+825WH@-9R;l2($I~4_i|E*t8m;z1|wn=+pKTjKUQ^soOuU zwUgj=cE(~%SU$>^Pd&Vju&;10>@g4~GBI9QvJ+3vTI?7-_SGCjm3YQxgsHQYyn)sa zB%iz)0~@vt%oy# zrWtQvZz}7lZ%Utu!4&JxSvIad)HXEC$*nG1Fscea!}9H1>zZy7kfx)r16fbl8v95M z6>X8uSocUbyz0h$Nonx(jGo_3InuZ%l6n3v(3jOb?(m^E!HXodfppKm37p;r&Uv|i zg(h539J>v4qvJCf9V!^H!V1Xy*!D+}pSVklm-#_BJJlQ)xzu1k_HoSMmp%UMzTi4h zs_xOdvm0XzqjI~~j2Xl$_x4&vMKydwX%(96T}b*Xz|r>@??;59t9^-zI@Avj$)xIz zRCzpFs@*oSEU}h)2EnpOS82Cz%1ZuOUS&PAoY;}BeCy3FuPm5(J5mr%oq1yQmSoouhYa@4{Biq>1W@ z+Cg(AkC*G_JDpXJd&}LWH}u~lngr~#jPAV@{MJT(!|%W_7m{Lmpd7WJ#HzDg?yvFm z5f0<9WaY;RSBXjYx4wyL*pg<2Xpf4O6t$zfe zz=4{P9lJF*z4_sg+HrgZ+YOmPDWpTgX8-2fRb%hBmAnQCs}DL|%b2$3<}LOr{S7Cj7qcsaCV?Yg57di5`j?U4 zkLqchxoC#o@LGctUa0ZgB`6x5-*oli$ZasqCMMA{O4dFeg?2bgt}%a;D}9e%OdEB^ zf4>G|iuCo**tF|BV!d3ujny@?ZL22qFVxt$r4Qz3M$cx0Oui{;6%z$|`?U zsmGMao?Z{CTcdjZ4x<$zhT_S2#bl$3z<7iun=gHOR>ol*&ArXqx;DbOzCF;XP(`jv z&E{4F$_?oKMfT0zTSj1Yd;j;2j=;HD#2W31)IxcUY&O&2wBgfn@qn@-5T3TuNm{ux-ICq)Ab|1psmUa&mpwpi=)0L3^=Jj+bP~!#8 z&hI0!?=6K2IBbFr_RX98&r%)0|li|;OxeQ5q7AcyC`5Pm+3kN=v){DKWb+3Y4fQz$d%vU9)2b&Vguqh^Wp%h zFf-Hjt<|~Tz=$K>m65Yc;5!#9eMD1ba1rfT0GQ{%Z>I7Bvg;2ZX2uE#C|u zgFung^3Cza4=-5ChIcnOL6^Pz4<0IEkg|+a5E(Zv7GG90)74Kqs4?@{Vbxl~htYe~ z5SH<`Y~0^j7OH8wyw^RwMN$`YV`xK{8^mnA_BjwZMY_qxb!qIXS z01YmK_TFLA*JIF*ya#<>?L$Mac>fi zod7gzuX8lhgn`TD)Y@{^FF`{p0&{4%RS$=)Pa>-^58mBv z#3)HEH2ra0X8P3jEHDypw`(8}^4d^N=jN*d_nZpC`?q!kLs>*D6N`m28$Ec0#=EnjW4Ao7Y~EhE(pD@GY6q}h1>Oja`E=9HlQIQ#ni_j z$IR%X8VL@@fdzruDjMLJEPd_+YGCG^Px#Cx>3gF~IyePq2?P{?CEXC=1Orv$F;S5B zN($CNUSn`mz`}DXqjvW$aPVHutBy&hvod^CJ2*? zzJqJ;#R8HPCb8#pS839Q8iDi9Z7=KEKqx&ur&zp?dg8^3J7bav>2+4VSLy4zx0YA# z&j^1)az}#KXo1pg{s1u0ow?cdBXizuSI9-a^e^mlQ)*Y{;@Z*IUpJ1Vb{k@L;7;a^w*AlcxLlnKN~%g zEq!~U*!+Bl*C0*5pYTm6rX(ptZ{2yD8U+*^TRs=gAk6=$v?EGrKh#dQ_zBjqpE~gO zkSeZ|@Vz&fHu8lY0O{FxY?8<;#o1Si*?{UtMhhT7JRHqARs%!toIaWG^!E&cj=um~~~8BQ3H7u(4gVTGjK}QvtnB zfa59_v6Ef9!YM0+vRGP9|4f?XNWe*$%jCeufj@B7H?SJiK^BNx(H} z1SbPuD&*SYS5b;eq-a&!KiL@3&J@p8TNKj9!=4W43%4U4UtilnO%Qao9(U zu@5`YOMrPNnglM8vx%=~L$!~cjCuapHaqRzJS!EghgzKn-bf~;>1Hwq2whf8kZnV= zWVpF}&0MS{Z3vRWH-~?CyTd@h9?a{ z!ZMTi@^g72he6rQF}7pCEn&UzOft~D*)Kjdj?p%sW&duFS&zvvS97K2A?;8Z73OjH z3VJ#Ev@)=^PpDL$b2V@vV3MWCPV6w~D)Wm2x4@xqiwWiSvuavc{iN7VBo!??x2ZJI z+!V-;#|%L<&QGoFr|p_M+y(DLt78(iCsWE5BBogtH7AP`7x&p0`d}+m4-YMLKMT;( zIL)PBRjBa)Q1#VOQAXR_%s5DhFmw+?BO)mwEz&8{Lx>{M-3@|thjd7HBb@?+fONNn z#L$g^d@tU6e`|efy?>GKIcLYSpZ%OY>G*f2^*$bx7#HJJ`+rsGZdCWBwnh(x7saNf zfni|47zbIOaj6cU@xVe7&ZuOMFcFV>fw(XAq}0WcSu*G9w6kokqQvG zhs#GQsBUu=3!c9LJW6D0+BNMY)E?oM1gxL#??VRqI0{$|fk^EmR~Ej&U3*>;}1_HCw#n=W3;w~&Rl``Idw z_-!9BRf>ao@PxeqB||kJZz_KkrNaQrgOP4+n-r!K11Ituu&tzCckS&etsofv?u@$I zE^&!R>y5L?Gn{a7Bsvf!xNawvNrRH}(|Pl>NQX~Mll#wCl7Q#5XWy6QSvdApYtl#$3*(Bfxl>{U&gm{|+*U)oE%Iamvp z<~T6H3q?$r6upR48tc;%>wL3bR(L6E^TuyYzq@p zHRIXdQij`m%$e=;*|6cVwE70`l9qnD_(_W12S1{$XV&7OgVOk#_>UN+%n5#m(XY=aTIplJfmp`MQQi*Ri=3mv)0oC$ zE5FY@?DjMS9Q!=;eOTdIS-blvxr74|GLA36-Dv^kmGt(zn^x}S>o*PC0<;4%=&P;Y zgu3K&=oTB>@4hBs!xvu^l~Kt-%);1MMMRrM`}eoiEzsXMjf9b&t7lm4k?)uz-vG@y zbDy(WX)PJke|^`HXMU$H>C4GXuF4*_WmwXV2J`&ooc0V{ldc>{-S4euFYpKBo z6u}P2|E&Emg`}@~*`B71tW}P!eSW!Bm1vDBDl_Uw8E_1^_xu9}?)z)zfCCm`zt{j`vv4-$IXs#&d@}>efV1aA=QDgh5+zOe63~OwQV#3)iW7;Q+SJLy z5^_Gb$#fHa5jJ&!X?}+SsD?MMJw}yVjsVzTC<;kgP7a`Ec55qst5WS`MF=0k^_v3P zAFZurrL1as$UdRo`6@d=;~_2s0lfan8Cf3V*y)rMz#|ovp|;D^F1Y~uAPO?r$JfL!NS~4+ zUWZ8VxF~QDmPrW!+7T)FPogfAw3tTQ_^?{Evk*TAS~-0F%n#p2+`KRSJfD5FVlZR( zOWDf;LoY~njA;7PT$zZBAkZE5lOj448jl}xPY_EQi=hex8mQQ{OovJNb?h~TxNq_+ z*Knk$QqcT)BQE=@E?Lh6G?I zv&)v$aRjN`-+hL`S~=eiFcuJ|{gl6bB_PWbKVfRHxrrKfjM0@J&Pj?rpQ582Jeir+ za7*7DpDt=c&YwS(st7Hvin4YzH+<;8?)Te;w1YtD@h?4RXa94#F4n-?IIfD%ZV zHu~dXUvXRLZ2_kcD!=Em<#p-xTojt$6~3v`3RldA$^}eaqZWnMHE0%YUnNY&Oc_rvfjMZXMQ60r6;j6eyjmaM{4_1{^eq`a>p+W*!U zt0*1{o2GQkpetI4IKO#J03QK?#&uj)7%0Gi-U(AkdD>$%atftUkJ_Bce(Z^hOdT4} z3%lh2_WpZZJ&S(iNKSuMn0<8=&F1|CERS@-C1eT-7N&Xq)`u-1eM3l8;Gd~)hn|<6 z7~HxeWbCQHkdIGCiaU&yR5kEW$B{+dIjm7NUd{r7esY+SGhDw*%PZVCXw==pM~sdX zx46)0OX%AF&Mhw>QYHECE#vb3RlU`o{r|6u1-$C8yJ}Q?F_rP;(w-FcT}$}9MQ2Oe zlUv0EBh-^=Rkqyw34n{iU=l4-`@@GKncyd|n{(U-;o-_YsHz{G`r^EAiT3{Z6LcVOlz1!z? zTj7E$mG=-Az!+x-iaK>w;;%BUUZ3QdTl`KR0d_v0Zlvj7V#uppbH*0z7gXMOu>yyD z1P1-pDSt(-8oHz27hwsr16mDX*e0Oiu)q^*dy%Rv2uwFFAa1x^PTWs(&UBk?>(_Xe zl<1I`2|?Urz^OEBYT6NJ5UAi==2zVFik-#6Oc!dZIbpo*`+R@Q=m}C(159(AzQRsF5=!UAkq;9 zRKaL|JdYOKHu|k^YL)~Y9z0vB>N|1KT@cZy7te|SYN{c@)}dvO?Vss-ymux#@E9)ITYu)u2EL?{XFlGMoy*h5fMMlhyNuVY`714C#KBaSd1fF z4%|#6ArHYt-9|TJ3GSA_fF*1J_JWbMtbQZ?Gay}UA3R&^mGgo*W>=)c(ep7m@FtWjeXfZ#0Y-nABoWo)y~PENc1l2c?wtWqgK|?KRv$Q}*!%hi zvd0O4Jl(AC<2oj-e>Izr&LV*oUfh@>NU$@znmy7xH*|# z6vy2HnN118!e2b)3m1C#+z6=`oRi(}G_B2%>r=~r?hY90fi--_NhNzfyEQo%w_!&W z5Z3VeU6Ghtt=JW@9pqw1IfWqq@a+TRqDGYNX#)+|$@981_+b(UubM7!gIMrzW}uo* zG`P`cU;>y7OG2g*1W~kD{2FHlaC~X{K+R@SU&HK&4wVJ*5XX|NNDg;G*A~AeD3E&l zc;Pn9{b1+oG#S@+IX-1S&+6a(Xs~hcj8CFo`fa;G@|P-I=1Egr$eT$N0GzK4{r<~! zSb}YQZnwTvuFdZDR!!dz^`Vdvn)?R<5R|Sh7szR6IzU0IVSK~?PL%Tu5H~tt;{dui zb$8*UId|X{!1`AE;}VimnS=Me*Q7Yl8LQjlT5EoizV$_kxIUJE z2CF^oh?$@HE2lZ-OhbP_IMmUNe$VXE+dpf2Env58gd1(5i!7~50@5FLE#INGhZZ0w zP&7k2I?;*)brZdsF6r6C6abR%f&VzKhFiGB7n5mVn21mPoY^CP`Vo*HyNX3R@dg4z zIffQ^-d40Q++1CH{A*Y0#rz}Dp+e=SrwuE^pzi=l(Ls*B(|#06w{&2aoGhN;#Z_Y@#0diP z;F~(F*x3~MFtZBp1N|jKcR&xHEUZ8k-%$%m!HzOBN70pkk2b1WPlPKaKkwT3a`x{ByD<}O?bJ@G#+Xe8buxPr%!GG z`6TK`z!($X`%NiJM~lDkQ5>?7?Z@}<*$lJ{7Y)d?W!cZ)5{GmW8pTYetro>hje!%) z&>i8L-cka_@-ySti+Kc?9|8|f+$9+Z?sy1eV)kJw(IJN5*V^t$Or{~j7SiFuPK_ae4Zxj3%P#`(ZGChL8=j;(CR)iEK3*j zRHM=ijW{$c0oknISxVQ6W71`*42_JVOYxnyS-JIrWTAvu(c)Q<-D}DNhxPJr2iIhy z)D|J!P~jBoY{xMT{NGRlVezjDes8jL8K4l5oW-qsQ%!)&sU;NmOeiM5&ic$|l^ZJ> z4GR+_oG~it`G@lzXS!3;t$c+%EgXOG(EsCuOuS$EqzMwy5%Cge{HE)j8FgWax_Px) zozm;lWW6s)S+@lBnLq@G(Y})T%1!zEU$=)+!i98orBTnUaDJN)P?$SjM|TQtL|z-& z?`h-NTkb`V?^{Bb7Q4?o^My1=2?*dI;337DQJ<1CnU$JnH74XHEPI=xQc=dbA&}1K zXHIBqaCo`#_Rb1*@ORl~Nzxqk;;HW^%zuktfiQICG_Xi)&aha)sb%5ryS=U(UC3PT zv%5cH)^`JUH|?bmW&iyc-+Bl`+1cvFFyGf}GgnkMSD*#4T+`f!k+TC2u!*0sW*nzz zcc_zxnz~GQ^*KIu3_4yIRF1w4L+ch?ppBMxvureaE$}6`>+6RXR8d=4!0+@y)_;4& zI@$#7u4#LYH$~X({mf0h5e=pNuxltHKPR`ai10XBJJ*?u5B3iktr66;uh{i!{MN0a z!sfu5f)`^Zs*d=LT38{ z<$NK^Owp2f_$hUE_Oy5B{l3SmB^5g+)TQUc4hTgsgDn9F0PZ2U7ct^aSRY1XQYIP2 zhg<1^KDdA_Z!d&S_mX#J_7 zZ|EurQY;SNW~c2@ZpAK-+{y6_gj4D~N^9fOuWMYq8vp$#&%%hZ;O~vZK{L4(>vekd z;p)+@;vR?H0S+Fe1v>r*S3K&dIWc;gLsu$VU* zJ$^-Ph{QWbWT5p@_DMZc9!Zyd`u zMn8rq7=^{nicJq%ku?gxcr^={eTN+6qjS#L^!N`EOo)jJ>*huqgL&7!F^5&bC~z7^ zv_QTz>g<=7>#zaK%9u8}&)P7XdQDJqeClI#}qHPBw5nr84N$m%GYtl zwuC%i^_dV{>Yh3Nl03Ia#4~h!m?C_WFId+koy)7i<0N-gVsu-cn~@N-Chr)h6w{%N z`JsqB)u?FULLUDLmdT-V=r*=P2v;5~Q8b+W1Uh~r0?Or63Wn4APB_gDnTdm;Lgo4` zO~Qs|B=q;LLr}fIr8-?0D3fb7Okle0M(l%t-OU0~uFCTpxJg zsw9{JDgbiJoUa%99ehgm^3v42YOIdJAY_bSn`?VXA|6RB?S^xsm*ufUfcc_~w`;iV zzzR8HO91z)f&y^3%FsBEVTBh|#tXaQ{3UYv%c)}IavW0KP%Cibi&>I`d=AY(-k9@Zpzm$E-zF+|>#WVMa<_I=@DHVpiEK&3lx5iq#WU0Ok8l z+Y?#9xoZ6{iuj3u!vkB9@4FN(MS@x8soIll`77NBk}yFWkSOxxW><=O+HI?&@8M=; z%=S%{sst>VzLUaq{q#gpeW8>lW@Q#oQM!I3X6cFPBvshJ0m(O6@OS*J;%2_OAzPWo zw-jcdfSVGx))d`c?RVeX*(B|5e!z{98cf^Hz{vBx64Y98=2>JW+PF?sCYLT8M1v*1 z{zktlXUa+rKMX^2-qqS^Kw3MjmU!fs3v7zMIqjk(q9tGT?@De?(_(I%WBI92pGcUo zenGHegmLVN^GEkhKGwG|g$KmNr++Sn_kV%*-9PKG4{KmXt7~~hJk%A7d=ar*sa&St zvOv&$yvDFPM|tF9n#7`G*j<-~y;)9R=!mQ};iQPLAa)WP`*?d&?_QLvzxT~(uRr^B zzsnyhe4{mr&={Jitj`$neC-Xkd2Ze8)^z`@3hws`@-G7XU~f}<@!}<%OWK>%9{64% z9ApEDdi(cm`J4CA@}1iw|9~2T)z7XtKH9tSEYb+%m z+b0E8nIen``Y;|}?LceblF?WbSSnt!MS`mXJLV)gpg-KcySO2FL%qB|-`&Fltz4y- zv{RQmwe`4Io*MWQ{=)x9>nk4J4aBm+!GOQRu`WTTMsPzuMe8R$AW31W3peH5mimq0 zOY9J5ikdup;q<3xCX6Ff;gl=0wK@{=460&pPPID;zp!h?`%1b6p!iZ-gJBj>5xVM}V3^Y57?_a$MpbqJ z#^QN^?`VlD{qkY=T<1^8=aHXDDQi%Pzv~~01v948L8TPVo5s*{-q%5R5bQ}3l!5ey zQjg_KtQ&HKpQI-RWoXOu04cOr3a&tDp(bc>NT0XXhAF)raT7T8heSHI>!uW@wR|%7 z!Ld5O+3z%|CP(Y_9=*e_QDpx|3x%nO$$o9 zSeLh+*)^NDnPk3H!lX%*x(r6;so1uv#~f6s@AhHb6gvYKgzp2J06i#ipE+$b0g8*v zL;cR-FL8NHDzQ9@LBR3}&A$5&kJlCdG=hxHG8y7?R5Fm9I{p`)3q)yt5WZ;W%BZw^ z{KOP5}S)+oJ%JD zD#p;!oO<^5g6tti&kHfCybO6*oXCQj-16|s>DfW%qQefw2~JzQx9R!p$=XmR`;SfK zNjmEgZOTk7S)Q=rV#!4fiuY8?46o@xgvqu((^Q?Ry+yUEF1vNgJvQ+s(+Wz2PD>?S zn^Dv`k{@J3siRztYytZ~1Cn_aglzFh`#Isf9~(m|p+(wb05~hA`D%TVQ5Z;K*4#2B zjw0NYc>vg0KOOwNOt@rU=HH1aU<|Kzk+xhsa<*FWy%69O{)E7`V2)F)|1=i%Kl-u4 zpgqP2W>T%!t47YnO24rmVxw@x2FaOFuR=yaHfWz`s!l^7kxYg*Hxh<%VN^8f?JWc; zGc4`NDqN$Zn;ojUSGL2d>XFM#{2iPh+^#PP791ErdJf`-JRI3MP%)3l)2o1p^BU|= z!*wTGlDS@ST}VPhJFRz+^1EMG5_R3c3^v90CsFKr22XI_qY-apipjfd+KED5L^3Zj zcnvQ%fzm1+{qF0BekS-R^@~QS4u-eQ#?Z2RkQC?Z@(HP2)@-g=ZOrM;!l4W-keELD z5zHzch$-bgu9NYRTv6|(-AZS+#a(Xcd=K`V+SyQ(#IK+&%`lKjF|mQpVA0SIiGr*l_~&FS4tgFy|E>q+_C=e+J`G3>-G zqXthm@J(J3ib}{1wQ*bqymPvbrLRHY@ck`QW*(uK9O_p!vRPE%B`hGh_-+@o_0z*u zPql}VyEJ7x(7|-h0fKpA{W*avss?nP@r{yhj-Bdrz@M;9@?GfY(se~0!tUxhk0XM- zk{r{$D8?OKY&>LZtC@Jxos63^BIA6gA-lXfBtP*-C(1Q6OeY9MxhKz#Hfy}d)=K^y zp*IxBh?jFj(3ZfW*GP9wpb%!h2)56WNdKLA`Ystty9l~HQC2;+Q1O$VUbdygeG#a3 zy#Mu%Tu)^9em!1))zjN9nKb%TB+03?FgD**bd8J%>QZ8 z1jAvE7H7nAWp=G?&7CZkBY5hZyHpjs`7FJh8>A{6dZm->vrK;fX34s6zH{eBH*PDBp>jmvgNASE_Gm%h6WYHMo`U%Ep$FhIrU4H$vJe_lkt5f3`wcO@^mL^T-D>VMd zv%w0F+ST%xf!B54v_TcYm%#&h(*PyFfdv$^epgx{Q_lYtdZc%^nT%z;8N%_kQ^q`La2V{XWKs4YygMbY&Y=By`-ZBE z`jq;jk~Mh{2aTPRkPuI+10{8>-mLO*w_WOx;P#-~`+eJw-05ewE!ruNG-h8@X=$$P zpHFV%r5-laUheT=hQ`;7W~tcaTrLW_w_nPCFB%n9G_rI=+NMziG0VPcBkbH_pCSn)6M^b%X&;1KXomG%Sc*heBu0 zX}~tqg;PA+li&|c8aaCqJhMPtuZ;j^H?K@M_c%4N>EPLN% zA|}x!IOIBLz_IK{e_V#YVc)8*1z+nRP{cBWU&)!F9WEFdeZpUTA2ip7TGRHgVN2EG zI`+yjIl531xCwTfdANi=kfwEJ^D3qSc}iF%OD-<&-}oNHk7MLL#n>VXV*ImlCMLZ6 zyly=sI~sG%y143cr^KD9S}+jtnO}j`qDOrSnGQOB!SKmK^5L3I-WoijK|eso)#jTz z0moX(X>ai4At!;awI(msU5Mwo!KanIlQ1p*VFP>%Z6%uX)`;OuV&m1vn-vM+Zhd`` z!Z!c0K-m>CaB_pH#fcCmrLND??N_gLa5%puw+6xBCgTl_zNb;{|p z%@XQImm!J3@3KmE=yn>J2$b(q7BWE65`Fk$qV zFr~6UEiE9OFl?^``U`t?g+OFGUVvk#5FV#Qm%eCrQpZ@KGB2On?iWmMm!`EVvCo@TJNI)-v+^E4-*NW2HIm)RQ(?dph;$(Q( z(zgdFkL7>!{pece;d=(8Rt|Wm*Gb36@{bTGma&@Dq6N`FFPymq==j+9(S)w$UNw%oNaa}*R zNov{c6JA%SLCb=twX;~%D9QXd1pEX~um60U>1gdFbGAwO>CUA0hx%5Ii@+8xM3|{l zrRYg-!NTjCKwq1;n5r@2D>{^vGbLvkN1^*G9!NcTo--yYm>ioFxI%=pLP`9heK(dx(RaU>&ILtuX! zu5D24B4nvp?DM|0>{$%d=l?Cw1fGC%Rewys5v|=Gb!+FQXY;{pC+9M9gfjM;MNVm`olo>Fp+ za=5&&TTkpHuGSpW!Fa)y?i9T!U%(28e2t-(qv-7!kc&JcO^%;78v3Wfs`azU2$P{i zQOf#sv)s)OZVP*tnqs{s{7MsFx7@p^nMbFfbq8~ush!hSZ(!zYLwzwld!PseI# zjRu)clQxhf9DszOoSk;<>btUEErLzRy#7;nlLhs~L zvGH=$z)1YYv}w|t<&5Fuf(%%LZl!KTRWyw-55`KlQ6;}9{T7H;_CTK84S`t{jc^qM zOsMNQ(qS{jO=k%B)&i~JIHK7|`P~=JW2JX2k19-$CTkvM`(L}n!T2-DHmVNCe+?2N zVqO*UKTIC_Gq{QI6z*4z)fcxvFC^B&?B8Krub+2rKWdbKE-CBQ^g2&eY;-zzAm|M) z_)~+_o1iy__Rzr(Q;e*kV~ba;J|C3=Ti%xSAAA5H<=9-e@Vd!Z^dL5ib&d!f>o`NU z$f{=N7fI(2?W7|yrJw%!Psda6xezpFsov%9sT$=^u8u((?)?NA?++gdE0k3z6u?IG z_e(C^S{!QPiWcE6JDX7^&{PBu5q4;#MMCQzslw==x=YGi1jFb zVDgsLMR-3kq%lD4RkaJ^>xivqc__gQql&`AR1VAViSBzHUR$xCtw`@lxJF#ZC8n&r1=dL+ z{vwx(#j|XgkmF!dK0eVuJ2aGQJifeuKZMJpt#(}Jz)+`liWYl%7c-`wqRa7LSfVQU zc82`Qs$VLa=x;0)95Ae4g2un`J96mhICW?BC((lGgk3z!xN#30CMHM?EC=`J)q4_H zfaU!44mxz-Tb=Let(vZHQ3>bGEkfo8u zmd~AR5nB54TBt3G?8tLBeikUvfX9~}QksFjTtOr#I7a*2ABbjj5OYGax)tg6o6Nu8 zbZirXigi8DG`yC3mCNeOBQkhnlrcP=#^!PJCWY*AYPD;mlP$%y3$7#NHfM%`tfeGD&f%ddgqX-&z4(Fr>)yYeHOrbUsD*FTkfbb3G#ZMret z?&ZBK`FqMY2%=`m6!Ec*A{_WYtM@rV_KL%A;wUZY{^~co=J7H}lVqa#$&iY*v;sIX z*ZuJU|0Trs;W$GZa!Cp;1kQ{@D26r0rIOxNH_k2Uk6`7)iyuAfT8x(cPFhh;V!-i~ z;Xec%h#6~ZlE&rlEp86*IjS$7hXTu$1i!?D4XikIk0+9FVE=CxfbSmN+#c2w2T)$* z&Nl;0W~KKZ@vHVL;)i--nj$fAp(@3*baNl68K5{Ie8JTS&@VfZ4X%iDmM3LWr-j-3 z5ucHGU#2S-b1zwvlndx-q0y8*VasARYgoJPn19zr`z}ru%Xos$G}|Ihe&F|YoBjNu z^ICBLC@Y|VX#NRH?z6xxa`PC+sfKe*D}vFksAe_P*DEO>S-1eWSJ<=l`hl9Z&`6c0 z@aZiNe&};5&VuKJ;XD0K){M*^`escEm$z@^?yl3npdN;BUvI4@{QSG8=bS3eB+w;5 zE)`{cq3$;I<3Z|I?`#plJ6fOlco){k6S347o@bLSe04~HgV5#-*`COO2jra+_gETu zR=7adXqMRrrTRCO8&#Cg)9=FzHobVK(K{BIl0p^PSy=uW83H*t*HJ$MFanv{lVu8L<={}lI^ps%Nz)bvVml5ie}=wkkh1@cIPI;0VEn@2*zN=A0p7*I(;+KM1JTN`5@W*X3w}X{+8->f z$}g=3Rhr*1toZC3u-?0*W)W=!X&`P1X(jxigOR@8I5?tmPMMw z9(;Ky+IRAaJ1_thGh3`5^MVfbJM$3=^M^EU1Z;O_a0do zNZL!}i@T25JIK1j7L9@EeAmH<2fY^SG?KJ}J<3xU?|+^{gSqk&*FWf4&}iW03W?SI zm;LB4Umt2iq>!k-Hne%>8IMI8->18-eh?gTJrRvk+a5 zBzoeOv8ooy!=zAHRjXg^R1FYMrCmm`3HpF`A>Xo?#jovJ>9%J9FGM4N#(-a>p6699 z`5PkGi;8Js)GnuBi& zP=s8D;E16K!Q&N63$T((`431@X+jYoS@}_~Shco(ohAE-#hooSKhvp)>k~bL_ndd} zhM9R#pUdF4)gfbA?WyDYT4y9{n$=u2@18-|zd_9rf?kOm^km z7ejD8Fp+TJeElo8Z{FK;B)F#3F0b3+W8DuQ%(qU=I@q7wHmo(IL*$u#@m;Bnvyq6D zF~J{_QDSXJMug|3@z#Wtz>WfQEdQ)~t*uMI_Kgv!A1(-@XD<&0+=Q@eJIJ2lhh6Dw z!pFZBV+*98y{6Jm0%F&5uszSk8H%PnVG2%3k6a>r4>tOQBEe{svVJ~^XO`zl;7Sa z91wqCN!4OqBGWrHovU#1?%?`gPaUof&MzbIB7Be3EQF15+!r|jXNn#r^}1A?8Uqr8 zx@8X|J7!k%QRSCYC*{hW`lG)PpFAn8iZhEBI&0RjRO%IO-rU-6 z*)k_s&T0(Ye=`gpF>q4(71k8T&W+h(G`>a9m+_XiY`5jTLy#dHk*x;YXFWEVybOXn zOML7JF99XoK-M515R1+UIjyLjDvaBa7YC~;YLF>*Jso}E^F$*?vcJ$^kmDJ)cr3KR z>*u#3U%K-(sP!)7&e+-Ni6(eD9(|vmZuj{c$#s5FqLM#8RYNc$cU!8_;C{0y)?B?^ zY*mZm1pRnD7+$;AM^|SFBOX$Le@LA$R8m*P;1VH z<)hU9_9hM3o6q!R2A^l66v!o`r`^T;3_i#T-*T8$JC!cyL8~*NiAV|YF+yk1b((9 zWUot&4FMubgp-xz-jIYqH`%k?4arZZ$n`14atHn?_9aNGg})pd-@56gU$>{M*j1qMr|9BnJZ%4}Sfc z)W|!F$PrQQiEI%SO~I`Ph!FsVK*T$ef+}2m8kFAopn1uW0>>dw3r!fqrYvFuT}gbw zl#CjBYw&VrW8PwuV_3``b*%CakR}wmZH?{2C)ZyEY*=WJ5Kwb`@r^hRmW|Rp4R*`i zQkCHfh%VN#^e>G7j2#L#L!cyz?TZK>cvdWE9U-U+(D8Z(%A(^GYh}Cj52mQIU-P zB0JitB)#p0$A-QMr=|m`U^zDbP+A&1D><<|-RKXuO8V0k7NOJbZmMn(XCz6QGqpKw z$Ha9(>#TP^V2%)C1L0F77dj}J1&0V|1p2DVC1tJ&N41Iu;qx|!TuZy)3DV*{kdoG4 zJ3D≫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 Date: Tue, 29 Jul 2025 17:42:00 -0700 Subject: [PATCH 16/16] Add glibc version checking for enterprise customers with legacy systems (#501) - Add glibc detection functions using multiple fallback methods (ldd, getconf, libc.so.6) - Check glibc version when portal_url is configured (self-hosted mode) - Use legacy language server version 1.46.0 for enterprise customers with glibc <= 2.27 - Preserve existing behavior when conditions are not met - Include proper logging for debugging and monitoring Implements the same logic as VS Code extension commit 15eec19fe34 Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- autoload/codeium/server.vim | 96 +++++++++++++++++++++++++++++++++++-- 1 file changed, 91 insertions(+), 5 deletions(-) diff --git a/autoload/codeium/server.vim b/autoload/codeium/server.vim index 49e88108..2b33b952 100644 --- a/autoload/codeium/server.vim +++ b/autoload/codeium/server.vim @@ -31,6 +31,85 @@ endif let g:codeium_server_job = v:null +function! s:DetectGlibcVersion() abort + if !has('unix') || has('mac') + return v:null + endif + + try + try + let ldd_output = system('ldd --version 2>/dev/null') + if v:shell_error == 0 + let match = matchlist(ldd_output, 'ldd (GNU libc) \(\d\+\.\d\+\)') + if !empty(match) + call codeium#log#Info('Detected glibc version via ldd: ' . match[1]) + return match[1] + endif + endif + catch + endtry + + try + let getconf_output = system('getconf GNU_LIBC_VERSION 2>/dev/null') + if v:shell_error == 0 + let match = matchlist(getconf_output, 'glibc \(\d\+\.\d\+\)') + if !empty(match) + call codeium#log#Info('Detected glibc version via getconf: ' . match[1]) + return match[1] + endif + endif + catch + endtry + + try + let libc_output = system('/lib/x86_64-linux-gnu/libc.so.6 2>/dev/null') + if v:shell_error == 0 + let match = matchlist(libc_output, 'GNU C Library.*release version \(\d\+\.\d\+\)') + if !empty(match) + call codeium#log#Info('Detected glibc version via libc.so.6: ' . match[1]) + return match[1] + endif + endif + catch + endtry + + call codeium#log#Warn('Could not detect glibc version using any method') + return v:null + catch + call codeium#log#Error('Error detecting glibc version: ' . v:exception) + return v:null + endtry +endfunction + +function! s:CompareVersions(version1, version2) abort + let parts1 = split(a:version1, '\.') + let parts2 = split(a:version2, '\.') + + let major1 = str2nr(parts1[0]) + let minor1 = str2nr(parts1[1]) + let major2 = str2nr(parts2[0]) + let minor2 = str2nr(parts2[1]) + + if major1 != major2 + return major1 < major2 ? -1 : 1 + endif + + if minor1 != minor2 + return minor1 < minor2 ? -1 : 1 + endif + + return 0 +endfunction + +function! s:IsGlibcVersionLessOrEqual(target_version) abort + let current_version = s:DetectGlibcVersion() + if current_version is# v:null + return v:false + endif + + return s:CompareVersions(current_version, a:target_version) <= 0 +endfunction + function! s:OnExit(result, status, on_complete_cb) abort let did_close = has_key(a:result, 'closed') if did_close @@ -188,13 +267,20 @@ function! codeium#server#Start(...) abort let config = get(g:, 'codeium_server_config', {}) if has_key(config, 'portal_url') && !empty(config.portal_url) - let response = system('curl -sL ' . config.portal_url . '/api/version') - if v:shell_error == '0' - let s:language_server_version = response + let has_old_glibc = s:IsGlibcVersionLessOrEqual('2.27') + if has_old_glibc + call codeium#log#Info('Using legacy language server version 1.46.0 for enterprise customer with glibc <= 2.27') + let s:language_server_version = '1.46.0' let s:language_server_sha = 'enterprise-' . s:language_server_version else - call codeium#log#Error('Failed to fetch version from ' . config.portal_url) - call codeium#log#Error(v:shell_error) + let response = system('curl -sL ' . config.portal_url . '/api/version') + if v:shell_error == '0' + let s:language_server_version = response + let s:language_server_sha = 'enterprise-' . s:language_server_version + else + call codeium#log#Error('Failed to fetch version from ' . config.portal_url) + call codeium#log#Error(v:shell_error) + endif endif endif