From 8d78a17efbdf4e344f3ca703ae9a0a42c6a1e174 Mon Sep 17 00:00:00 2001 From: c0dev0id Date: Wed, 14 Feb 2024 16:20:07 +0100 Subject: [PATCH] Update 2024-02-14 16:20 Linux/x86_64-ld5587 --- .../plugins/opt/vim-taskwarrior/LICENSE.txt | 23 ++ .../plugins/opt/vim-taskwarrior/README.md | 223 +++++++++++ .../airline/extensions/taskwarrior.vim | 41 ++ .../opt/vim-taskwarrior/autoload/taskinfo.vim | 44 +++ .../vim-taskwarrior/autoload/taskwarrior.vim | 221 +++++++++++ .../autoload/taskwarrior/action.vim | 370 ++++++++++++++++++ .../autoload/taskwarrior/complete.vim | 54 +++ .../autoload/taskwarrior/data.vim | 132 +++++++ .../autoload/taskwarrior/log.vim | 68 ++++ .../autoload/taskwarrior/sort.vim | 88 +++++ .../autoload/unite/kinds/task.vim | 23 ++ .../autoload/unite/sources/task.vim | 68 ++++ .../vim-taskwarrior/autoload/webapi/json.vim | 135 +++++++ .../opt/vim-taskwarrior/doc/vim-tw.txt | 262 +++++++++++++ .../vim-taskwarrior/ftplugin/taskreport.vim | 145 +++++++ .../vim-taskwarrior/plugin/taskwarrior.vim | 110 ++++++ .../opt/vim-taskwarrior/screenshot.png | Bin 0 -> 138917 bytes .../opt/vim-taskwarrior/syntax/taskinfo.vim | 8 + .../opt/vim-taskwarrior/syntax/taskreport.vim | 43 ++ 19 files changed, 2058 insertions(+) create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/LICENSE.txt create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/README.md create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/airline/extensions/taskwarrior.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/taskinfo.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/action.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/complete.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/data.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/log.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/sort.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/unite/kinds/task.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/unite/sources/task.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/autoload/webapi/json.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/doc/vim-tw.txt create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/ftplugin/taskreport.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/plugin/taskwarrior.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/screenshot.png create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/syntax/taskinfo.vim create mode 100644 .vim/pack/plugins/opt/vim-taskwarrior/syntax/taskreport.vim diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/LICENSE.txt b/.vim/pack/plugins/opt/vim-taskwarrior/LICENSE.txt new file mode 100644 index 0000000..51c47ce --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/LICENSE.txt @@ -0,0 +1,23 @@ +============================================== +This is a copy of the MIT license. +============================================== +Copyright (C) 2013 Zc He +Copyright (C) 2013 David J Patrick + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/README.md b/.vim/pack/plugins/opt/vim-taskwarrior/README.md new file mode 100644 index 0000000..53d383b --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/README.md @@ -0,0 +1,223 @@ +vim-taskwarrior +=============== + +_a vim interface for [taskwarrior](https://taskwarrior.org)_ + +Taskwarrior is a command-line todo list manager. It helps you manage task lists +with projects, tags, dates, dependencies, annotations, recurrences and apply +complex (or simple) queries with attribute modifiers, boolean, regex filters +and produce any number of reports, built-in or customizable reports, attributes +and color themes. Task keeps data in JSON text files and it's always improving. +Find out more at https://taskwarrior.org and read man task and man taskrc. + +vim-taskwarrior is a vim plugin that extends taskwarrior with an interactive +interface. It features a rich set of mappings and commands, is easy to customize, +and makes adding, modifying, sorting, reporting and marking done, fast, easy and fun! +Homepage: https://github.com/farseer90718/vim-taskwarrior, patches welcome! + +---- + +### Prerequisites: + +This plugin requires Taskwarrior 2.2.0 or higher, although >2.3.x is required +for taskd sync functions, and recommended in general, and well worth the price; +free :) +see: https://taskwarrior.org/download/ + +Vim version 7.x is required. + +Suggested plugins + +* [vim-airline](https://github.com/bling/vim-airline) for [better statusline information](https://github.com/farseer90718/vim-taskwarrior#screenshot). +* [unite.vim](https://github.com/Shougo/unite.vim) for easier bookmark/history operations. + +If you experience line-wrapping issues, add the following line to your .vimrc + +``` +let g:task_rc_override = 'rc.defaultwidth=0' +``` + +If you experience task truncation (vim-taskwarrior not showing enough tasks), add: + +``` +let g:task_rc_override = 'rc.defaultheight=0' +``` + + +---- + +### Screenshot: + +![screenshot](https://raw.github.com/farseer90718/vim-taskwarrior/master/screenshot.png) +![vim-taskwarrior animated gif](http://taskextras.org/attachments/download/655/20131110_002753.gif) + +### Installing: + +Either [download zip file](https://github.com/farseer90718/vim-taskwarrior/archive/master.zip) +and extract in ~/.vim or use your favorite plugin manager. + +- [Pathogen](https://github.com/tpope/vim-pathogen) + - `git clone https://github.com/farseer90718/vim-taskwarrior ~/.vim/bundle/vim-taskwarrior` +- [Vundle](https://github.com/gmarik/vundle) + 1. Add `Bundle 'farseer90718/vim-taskwarrior'` to .vimrc + 2. Run `:BundleInstall` +- [NeoBundle](https://github.com/Shougo/neobundle.vim) + 1. Add `NeoBundle 'farseer90718/vim-taskwarrior'` to .vimrc + 2. Run `:NeoBundleInstall` +- [vim-plug](https://github.com/junegunn/vim-plug) + 1. Add `Plug 'blindFS/vim-taskwarrior'` to .vimrc + 2. Run `:PlugInstall` + +---- + +### Default map: + +```vim +nnoremap A ... " add annotation +nnoremap x ... " delete annotation. +nnoremap o ... " open the annotation as a file. +nnoremap a ... " create new task. +nnoremap d ... " set the task in current line done. +nnoremap D ... " delete task +nnoremap ... " delete field/annotation/task +nnoremap ... " select/remove current task to selected list +nnoremap m ... " modify current field. +nnoremap M ... " modify current task. +nnoremap f ... " change filter +nnoremap r ... " change report type +nnoremap c ... " execute a command for selected tasks/current task +nnoremap R ... " refresh the report/clear selected list +nnoremap q ... " quit buffer. +nnoremap X ... " clear all completed task. +nnoremap p ... " duplicate selected tasks +nnoremap u ... " undo last change. +nnoremap + ... " start task +nnoremap - ... " stop task +nnoremap S ... " sync with taskd server. +nnoremap s ... " sort by this column primarily.(if already of the highest priority then switch the polarity) +nnoremap < ... " sort by this column increasingly.(if already increasingly then increase its priority) +nnoremap > ... " sort by this column decreasingly.(if already decreasingly then decrease its priority) +nnoremap H ... " cycle column format left +nnoremap L ... " cycle column format right +nnoremap J ... " next historical entry +nnoremap K ... " previous historical entry +nnoremap B ... " create a bookmark for current combination +nnoremap ... " view the documents +nnoremap ... " show task info. +nnoremap ... " jump to the next column +nnoremap ... " jump to the previous column +nnoremap ... " jump to the next non-empty column +nnoremap ... " jump to the previous non-empty column +vnoremap d ... " set done to all visual selected tasks +vnoremap D ... " delete all visual selected tasks +vnoremap ... " show information about visual selected tasks +vnoremap ... " add visual selected tasks to selected list + +``` +---- + +### Commands: + +```vim +:TW [args] " task [filter report arguments] +:TWUndo " undo the previous modification +:TWEditTaskrc " edit ~/.taskrc +:TWEditVitrc " edit ~/.vitrc +:TWDeleteCompleted " clear all completed tasks +:TWAdd " add new tasks interactively +:TWAnnotate " add an annotation +:TWComplete " mark task done +:TWDelete " deleta a task +:TWDeleteAnnotation " delete an annotation +:TWModifyInteractive " make changes to a task interactively (use with caution!) +:TWReportInfo " run the info report +:TWReportSort [args] " overide the sort method, reset to default if no arguments passed +:TWSync " synchronise with taskd server +:TWToggleReadonly " toggle readonly option +:TWToggleHLField " toggle highlight field option +:TWHistory " list history records using unite.vim +:TWHistoryClear " clear history +:TWBookmark " list bookmarks using unite.vim +:TWBookmarkClear " clear bookmarks + +``` +---- + +### Options: + +```vim +" default task report type +let g:task_report_name = 'next' +" custom reports have to be listed explicitly to make them available +let g:task_report_command = [] +" whether the field under the cursor is highlighted +let g:task_highlight_field = 1 +" can not make change to task data when set to 1 +let g:task_readonly = 0 +" vim built-in term for task undo in gvim +let g:task_gui_term = 1 +" allows user to override task configurations. Seperated by space. Defaults to '' +let g:task_rc_override = 'rc.defaultwidth=999' +" default fields to ask when adding a new task +let g:task_default_prompt = ['due', 'description'] +" whether the info window is splited vertically +let g:task_info_vsplit = 0 +" info window size +let g:task_info_size = 15 +" info window position +let g:task_info_position = 'belowright' +" directory to store log files defaults to taskwarrior data.location +let g:task_log_directory = '~/.task' +" max number of historical entries +let g:task_log_max = '20' +" forward arrow shown on statusline +let g:task_left_arrow = ' <<' +" backward arrow ... +let g:task_left_arrow = '>> ' + +``` +---- + +### Syntax highlightling: + +Default scheme: + +```vim +highlight default link taskwarrior_tablehead Tabline +highlight default link taskwarrior_field IncSearch +highlight default link taskwarrior_selected Visual +highlight default link taskwarrior_id VarId +highlight default link taskwarrior_project String +highlight default link taskwarrior_Status Include +highlight default link taskwarrior_priority Class +highlight default link taskwarrior_due Todo +highlight default link taskwarrior_end Keyword +highlight default link taskwarrior_description Normal +highlight default link taskwarrior_entry Special +highlight default link taskwarrior_depends Todo +highlight default link taskwarrior_tags Keyword +highlight default link taskwarrior_uuid VarId +highlight default link taskwarrior_urgency Todo +``` + +Feel free to change any of above by something like: + +```vim +hi taskwarrior_xxx guibg = xxx guifg = xxx ctermbg = xxx ctermfg = xxx +``` + +in your vimrc. + +### Acknowledgement: + +* [vim-airline](https://github.com/bling/vim-airline) by bling +* [unite.vim](https://github.com/Shougo/unite.vim) by Shougo +* [webapi-vim](https://github.com/mattn/webapi-vim) by mattn + +### License: + +[MIT](https://raw.github.com/farseer90718/vim-taskwarrior/master/LICENSE.txt) + + +[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/farseer90718/vim-taskwarrior/trend.png)](https://bitdeli.com/free "Bitdeli Badge") + diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/airline/extensions/taskwarrior.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/airline/extensions/taskwarrior.vim new file mode 100644 index 0000000..be336c5 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/airline/extensions/taskwarrior.vim @@ -0,0 +1,41 @@ +function! airline#extensions#taskwarrior#apply(...) + if &ft == 'taskreport' + call a:1.add_section('airline_a', ' Taskwarrior ') + call a:1.add_section('airline_b', ' %{b:command} %{&readonly ? g:airline_symbols.readonly : ""}') + call a:1.add_section('airline_b', ' @%{b:context} ') + call a:1.add_section('airline_b', g:task_left_arrow.' %{b:hist > 1 ? g:task_right_arrow : ""}') + call a:1.add_section('airline_c', ' %{b:filter} ') + call a:1.add_section('airline_c', ' %{b:sstring} ') + call a:1.split() + call a:1.add_section('airline_x', ' %{b:now} ') + call a:1.add_section('airline_x', ' %{b:task_report_columns[taskwarrior#data#current_index()]} ') + call a:1.add_section('airline_y', ' %{b:sort} ') + if b:active != '0' + call airline#parts#define_text('active', ' '.b:active.' ') + call airline#parts#define_accent('active', 'orange') + call a:1.add_section('airline_z', airline#section#create(['active'])) + endif + call a:1.add_section('airline_z', ' %{b:summary[0]} ') + call airline#parts#define_text('completed', ' '.b:summary[1].' ') + call airline#parts#define_accent('completed', 'green') + call a:1.add_section('airline_z', airline#section#create(['completed'])) + call a:1.add_section('airline_z', ' %{b:summary[2]} ') + return 1 + elseif &ft == 'taskinfo' + call a:1.add_section('airline_a', ' Taskinfo ') + call a:1.add_section('airline_b', ' %{b:command." ".g:airline_symbols.readonly }') + call a:1.add_section('airline_c', ' %{b:filter} ') + call a:1.split() + return 1 + endif +endfunction + +function s:context() + let con = split(system('task context show'), '\n') + let con = con =~ 'No context' ? 'none' : con + return con +endfunction + +function! airline#extensions#taskwarrior#init(ext) + call a:ext.add_statusline_func('airline#extensions#taskwarrior#apply') +endfunction diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskinfo.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskinfo.vim new file mode 100644 index 0000000..66b875e --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskinfo.vim @@ -0,0 +1,44 @@ +function! taskinfo#init(command, filter, info) + if exists('g:task_info') + call taskinfo#quit() + endif + + if a:command != 'info' + \ && exists('g:task_info_arg') + \ && g:task_info_arg == [a:command, a:filter] + unlet g:task_info_arg + return + endif + + execute g:task_info_position.' '.g:task_info_size. + \ (g:task_info_vsplit ? 'v' : '').'split' + edit taskinfo + let g:task_info = bufnr('%') + let g:task_info_arg = [a:command, a:filter] + setlocal noswapfile + setlocal modifiable + call append(0, a:info) + silent global/^[\t ]*$/delete + silent global/^[ -]\+$/delete + setlocal readonly + setlocal nomodifiable + setlocal buftype=nofile + setlocal nowrap + setlocal filetype=taskinfo + 1 + + let b:command = a:command + let b:filter = a:filter + + nnoremap q :call taskinfo#quit() + nnoremap :call taskinfo#quit() + + if a:command != 'info' + wincmd W + endif +endfunction + +function! taskinfo#quit() + silent! execute g:task_info.'bd!' + unlet g:task_info +endfunction diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior.vim new file mode 100644 index 0000000..156cc30 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior.vim @@ -0,0 +1,221 @@ +function! taskwarrior#list(...) abort + setlocal noreadonly + setlocal modifiable + let pos = getpos('.') + %delete + call taskwarrior#buffer_var_init() + let b:command = get(a:, 1, b:command) + let b:filter = get(a:, 2, b:filter) + let b:type = get(a:, 3, b:type) + let b:rc = get(a:, 4, b:rc). ' rc.defaultheight=0' + + let b:rc .= ' '.join(filter(split(b:filter, ' '), "v:val =~ '^rc\..*'")) + let b:filter = join(filter(split(b:filter, ' '), "v:val !~ '^rc\..*'")) + let rcs = split(b:rc, ' ') + let b:rc = join(filter(copy(rcs), "match(rcs, matchstr(v:val, '^[^=:]*'), v:key+1) == -1"), ' ') + + if b:type == 'special' + setlocal buftype=nofile + call append(0, split(system('task '.b:rc.' '.b:filter.' '.b:command), '\n')) + silent global/^[\t ]*$/delete + execute 'setlocal filetype=task_'.b:command + nnoremap q :call taskwarrior#Bclose(bufnr('%')) + call setpos('.', pos) + return + endif + + let b:hist = get(b:, 'hist', 1) + call taskwarrior#log#history('write') + + let rcc = matchstr(b:rc, 'rc\.report\.'.b:command.'\.columns.\zs\S*') + let rcl = matchstr(b:rc, 'rc\.report\.'.b:command.'\.labels.\zs\S*') + " let b:task_report_columns = rcc == '' ? split(system("task _get -- rc.report.".b:command.".columns")[0:-2], ',') : split(rcc, ',') + " let b:task_report_labels = rcl == '' ? split(system("task _get -- rc.report.".b:command.".labels")[0:-2], ',') : split(rcl, ',') + let b:task_report_columns = rcc == '' ? split(matchstr(system("task show |grep report.".b:command.".columns")[0:-2], '\S*$'), ',') : split(rcc, ',') + let b:task_report_labels = rcl == '' ? split(matchstr(system("task show |grep report.".b:command.".labels")[0:-2], '\S*$'), ',') : split(rcl, ',') + let line1 = join(b:task_report_labels, ' ') + + let context = split(substitute( + \ system('task '.b:rc.' '.b:filter.' '.b:command), + \ '\[[0-9;]\+m', + \ '', 'g'), + \ '\n') + let split_lineno = match(context, '^[ -]\+$') + if split_lineno == -1 + call append(0, line1) + else + let end = len(context)-match(reverse(copy(context)), '^$') + call append(0, context[split_lineno-1:end-1]) + silent global/^[\t ]*$/delete + silent global/^[ -]\+$/delete + endif + + call filter(b:task_report_columns, "index(split(getline(1), ' '), b:task_report_labels[v:key]) != -1") + call filter(b:task_report_labels, "index(split(getline(1), ' '), v:val) != -1") + + let b:task_columns = [] + let ci = 0 + 1 + while ci != -1 + let b:task_columns += [ci] + let ci = search('\s\S', 'W', 1) + let ci = ci > 0 ? virtcol('.') : -1 + endwhile + + let b:task_columns += [999] + let b:summary = taskwarrior#data#global_stats() + let b:sort = taskwarrior#sort#order_list()[0] + let a_tasks = split(system('task active limit:1 rc.verbose:nothing + \ rc.report.active.sort=start- + \ rc.report.active.columns=start.active,start.age,id,description.desc + \ rc.report.active.labels=A,Age,ID,Description'), '\n') + let b:now = len(a_tasks) > 0 ? a_tasks[-1] : '' + let b:active = split(system('task start.any: count'), '\n')[0] + let b:selected = [] + let b:sline = [] + let b:sstring = '' + let con = split(system('task context show'), '\n')[0] + let b:context = con =~ 'No context' ? 'none' : + \ matchstr(con, 'Context .\zs\S*\ze. ') + + setlocal filetype=taskreport + if exists('b:ct') + for l in range(line('$')) + if taskwarrior#data#get_uuid(l) == b:ct + let pos[1] = l + break + endif + endfor + endif + call setpos('.', pos) +endfunction + +function! taskwarrior#buffer_var_init() + let b:command = get(b:, 'command', g:task_report_name) + let b:filter = get(b:, 'filter', '') + let b:type = get(b:, 'type', 'report') + let b:rc = get(b:, 'rc', g:task_rc_override) +endfunction + +function! taskwarrior#init(...) + if exists(':TagbarClose') + TagbarClose + endif + let argstring = join(a:000, ' ') + let [command, filter, type] = taskwarrior#command_type(argstring) + let rc = g:task_rc_override + + if type == 'interactive' + if !g:task_readonly + execute '!task '.argstring + call taskwarrior#refresh() + endif + return + endif + + execute 'edit task\ '.command.'\ '.type + + if exists('g:task_view') + let g:task_view += [bufnr('%')] + else + let g:task_view = [bufnr('%')] + endif + + setlocal noswapfile + call taskwarrior#list(command, filter, type, rc) + +endfunction + +function! taskwarrior#refresh() + if exists('g:task_view') + for bufn in g:task_view + execute bufn.'buffer' + call taskwarrior#list() + endfor + else + call taskwarrior#init() + endif +endfunction + +function! taskwarrior#Bclose(buffer) + if a:buffer =~ '^\d\+$' + let btarget = bufnr(str2nr(a:buffer)) + else + let btarget = bufnr(a:buffer) + endif + if bufname(btarget) == '' + bdelete + return + endif + " Numbers of windows that view target buffer which we will delete. + let wnums = filter(range(1, winnr('$')), 'winbufnr(v:val) == btarget') + let wcurrent = winnr() + for w in wnums + execute w.'wincmd w' + let prevbuf = bufnr('#') + if prevbuf > 0 && buflisted(prevbuf) && prevbuf != w + buffer # + else + bprevious + endif + if btarget == bufnr('%') + " Numbers of listed buffers which are not the target to be deleted. + let blisted = filter(range(1, bufnr('$')), 'buflisted(v:val) && v:val != btarget') + " Listed, not target, and not displayed. + let bhidden = filter(copy(blisted), 'bufwinnr(v:val) < 0') + " Take the first buffer, if any (could be more intelligent). + let bjump = (bhidden + blisted + [-1])[0] + if bjump > 0 + execute 'buffer '.bjump + else + enew + endif + endif + endfor + execute 'silent! bdelete '.btarget + execute wcurrent.'wincmd w' +endfunction + + +function! taskwarrior#hi_field() + silent! syntax clear taskwarrior_field + let index = taskwarrior#data#current_index() + execute 'syntax match taskwarrior_field /\%>1l\%'.line('.').'l\%'.(b:task_columns[index]+1).'v.*\%<'.(b:task_columns[index+1]+1).'v/' +endfunction + +function! taskwarrior#quit() + call taskwarrior#Bclose(bufnr('%')) + call remove(g:task_view, index(g:task_view, bufnr('%'))) +endfunction + +function! taskwarrior#quit_all() + for bufn in g:task_view + call taskwarrior#Bclose(bufn) + endfor + let g:task_view = [] +endfunction + +function! taskwarrior#system_call(filter, command, args, mode) + if a:mode == 'silent' + call system('task '.a:filter.' '.a:command.' '.a:args) + elseif a:mode == 'echo' + echo "\n----------------\n" + echo system('task '.a:filter.' '.a:command.' '.a:args) + else + execute '!task '.a:filter.' '.a:command.' '.a:args + endif + call taskwarrior#refresh() +endfunction + +function! taskwarrior#command_type(string) + for sub in split(a:string, ' ') + if index(g:task_report_command, sub) != -1 + return [ sub, substitute(' '.a:string, ' '.sub, '', ''), 'report' ] + elseif index(g:task_interactive_command, sub) != -1 + return [ sub, substitute(' '.a:string, ' '.sub, '', ''), 'interactive' ] + elseif index(g:task_all_commands, sub) != -1 + return [ sub, substitute(' '.a:string, ' '.sub, '', ''), 'special' ] + endif + endfor + return [ g:task_report_name, a:string, 'report' ] +endfunction diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/action.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/action.vim new file mode 100644 index 0000000..852a4b6 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/action.vim @@ -0,0 +1,370 @@ +function! taskwarrior#action#new() + call taskwarrior#system_call('', 'add', taskwarrior#data#get_args('add'), 'echo') +endfunction + +function! taskwarrior#action#set_done() + call taskwarrior#system_call(taskwarrior#data#get_uuid(), ' done', '', 'silent') +endfunction + +function! taskwarrior#action#urgency() abort + let cc = taskwarrior#data#current_column() + let udas = split(system('task _udas'), '\n') + let cmap = { 'start' : 'active', + \ 'entry' : 'age', + \ 'depends' : 'blocked', + \ 'parent' : 'blocking', + \ 'wait' : 'waiting', + \ 'description' : 'annotations' + \ } + let isuda = 0 + if has_key(cmap, cc) + let cc = cmap[cc] + elseif index(['due', 'priority', 'project', 'tags', 'scheduled'] + \ , cc) == -1 + if index(udas, cc) == -1 + call taskwarrior#sort#by_arg('urgency-') + return + else + let isuda = 1 + endif + endif + let rcfile = $HOME.'/.taskrc' + if filereadable(rcfile) + let cv = taskwarrior#data#get_value_by_column(line('.'), cc) + let option = isuda ? 'urgency.uda.'.cc.'.coefficient' : + \ 'urgency.'.cc.'.coefficient' + if len(cv) + let ctag = expand('') + if cc == 'tags' && index(split(cv), ctag) != -1 + let option = 'urgency.user.tag.'.ctag.'.coefficient' + elseif cc == 'project' && cv =~ '^[^ \t%\\*]\+$' + let pl = split(cv, '\.') + let idx = index(pl, expand('')) + let option = 'urgency.user.project.'. + \ join(pl[0:idx], '.').'.coefficient' + elseif isuda && cv =~ '^\w\+$' + let option = 'urgency.uda.'.cc.'.'.cv.'.coefficient' + endif + endif + let default_raw = split(system('task _get rc.'.option), '\n') + let default = len(default_raw) ? default_raw[0] : '0' + let new = input(option.' : ', default) + let lines = readfile(rcfile) + let index = match(lines, option) + if str2float(new) == str2float(default) + elseif str2float(new) == 0 + call filter(lines, 'v:val !~ option') + elseif index == -1 + call add(lines, option.'='.new) + else + let lines[index] = option.'='.new + endif + call writefile(lines, rcfile) + endif + call taskwarrior#sort#by_arg('urgency-') + execute 'normal! :\' +endfunction + +function! taskwarrior#action#modify(mode) + let uuid = taskwarrior#data#get_uuid() + if uuid == '' + return + endif + if a:mode == 'current' + let field = taskwarrior#data#current_column() + if index(['id', 'uuid', 'status', 'urgency'], field) != -1 + return + elseif field == 'description' + call taskwarrior#system_call(uuid, 'modify', taskwarrior#data#get_args('modify', [field]), 'external') + else + call taskwarrior#system_call(uuid, 'modify', taskwarrior#data#get_args('modify', [field]), 'silent') + endif + else + call taskwarrior#system_call(uuid, 'modify', taskwarrior#data#get_args('modify'), 'external') + endif +endfunction + +function! taskwarrior#action#delete() + let uuid = taskwarrior#data#get_uuid() + if uuid == '' + call taskwarrior#action#annotate('del') + else + let ccol = taskwarrior#data#current_column() + if index(['project', 'tags', 'due', 'priority', 'start', 'depends'], ccol) != -1 + call taskwarrior#system_call(uuid, 'modify', ccol.':', 'silent') + else + execute '!task '.uuid.' delete' + endif + endif + call taskwarrior#refresh() +endfunction + +function! taskwarrior#action#remove() + execute '!task '.taskwarrior#data#get_uuid().' delete' + call taskwarrior#list() +endfunction + +function! taskwarrior#action#annotate(op) + let ln = line('.') + let offset = -1 + while ln > 1 && taskwarrior#data#get_uuid(ln) == '' + let ln -= 1 + let offset += 1 + endwhile + let uuid = taskwarrior#data#get_uuid(ln) + if uuid == '' + return + endif + if a:op == 'add' + let annotation = input('new annotation:', '', 'file') + call taskwarrior#system_call(uuid, ' annotate ', annotation, 'silent') + elseif a:op == 'del' + let annotation = input('annotation pattern to delete:') + call taskwarrior#system_call(uuid, ' denotate ', annotation, 'silent') + elseif offset >= 0 + let taskobj = taskwarrior#data#get_query(uuid) + if exists('taskobj.annotations[offset].description') + let file = substitute(taskobj.annotations[offset].description, '\s*\/\s*', '/', 'g') + let file = escape(file, ' ') + let ft = 'text' + if executable('file') + let ft = system('file '.file)[:-2] + endif + if ft =~ 'text$' + execute 'e '.file + elseif ft !~ '(No such file or directory)' || file =~ '[a-z]*:\/\/[^ >,;]*' + if executable('xdg-open') + call system('xdg-open '.file.'&') + elseif executable('open') + call system('open '.file.'&') + endif + endif + endif + endif +endfunction + +function! taskwarrior#action#filter() + let column = taskwarrior#data#current_column() + if index(['project', 'tags', 'status', 'priority'], column) != -1 && line('.') > 1 + let filter = substitute(substitute(taskwarrior#data#get_args('modify', [column]), 'tags:', '+', ''), '\v^\s*\+(\s|$)', '', '') + elseif column =~ '\v^(entry|end|due)$' + let filter = column.'.before:'.input(column.'.before:', taskwarrior#data#get_value_by_column('.', column)) + elseif column == 'description' + let filter = 'description:'.input('description:', taskwarrior#data#get_value_by_column('.', column) ) + else + let filter = input('new filter:', b:filter, 'customlist,taskwarrior#complete#filter') + endif + let filter = substitute(filter, 'status:\(\s\|$\)', 'status.any: ', 'g') + if filter != b:filter + let b:filter = filter + let b:hist = 1 + call taskwarrior#list() + endif +endfunction + +function! taskwarrior#action#command() + if len(b:selected) == 0 + let filter = taskwarrior#data#get_uuid() + else + let filter = join(b:selected, ',') + endif + let command = input('task '.filter.':', '', 'customlist,taskwarrior#complete#command') + if index(g:task_all_commands, b:command) == -1 + return + endif + call taskwarrior#system_call(filter, command, '', 'interactive') +endfunction + +function! taskwarrior#action#report() + let command = input('new report:', g:task_report_name, 'customlist,taskwarrior#complete#report') + if index(g:task_report_command, command) != -1 && command != b:command + let b:command = command + let b:hist = 1 + call taskwarrior#list() + endif +endfunction + +function! taskwarrior#action#paste() + if len(b:selected) == 0 + return + elseif len(b:selected) < 3 + call taskwarrior#system_call(join(b:selected, ','), 'duplicate', '', 'echo') + else + call taskwarrior#system_call(join(b:selected, ','), 'duplicate', '', 'interactive') + endif +endfunction + +function! taskwarrior#action#columns_format_change(direction) + let ccol = taskwarrior#data#current_column() + if !exists('g:task_columns_format[ccol]') + return + endif + let clist = g:task_columns_format[ccol] + if len(clist) == 1 + return + endif + let ccol_ful = b:task_report_columns[taskwarrior#data#current_index()] + let ccol_sub = matchstr(ccol_ful, '\.\zs.*') + let rcl = matchstr(b:rc, 'rc\.report\.'.b:command.'\.columns.\zs\S*') + " let dfl = system('task _get -- rc.report.'.b:command.'.columns')[0:-2] + let dfl = matchstr(system('task show | grep report.'.b:command.'.columns')[0:-2], '\S*$') + let index = index(clist, ccol_sub) + let index = index == -1 ? 0 : index + if a:direction == 'left' + let index -= 1 + else + let index += 1 + if index == len(clist) + let index = 0 + endif + endif + let newsub = index == 0 ? '' : '.'.clist[index] + let b:rc .= ' rc.report.'.b:command.'.columns:'. + \ substitute( + \ rcl == '' ? dfl : rcl, + \ '[=:,]\zs'.ccol_ful.'\ze\(,\|$\)', + \ ccol.newsub, '' + \ ) + let b:hist = 1 + call taskwarrior#list() +endfunction + +function! taskwarrior#action#date(count) + let ccol = taskwarrior#data#current_column() + if index(['due', 'end', 'entry'], ccol) == -1 + return + endif + setlocal modifiable + if exists('g:loaded_speeddating') + call speeddating#increment(a:count) + elseif a:count > 0 + execute 'normal! '.a:count.'' + else + execute 'normal! '.-a:count.'' + endif + let b:ct = taskwarrior#data#get_uuid() + call taskwarrior#system_call(b:ct, 'modify', ccol.':'.taskwarrior#data#get_value_by_column('.', ccol, 'temp'), 'silent') +endfunction + +function! taskwarrior#action#visual(action) range + let line1 = getpos("'<")[1] + let line2 = getpos("'>")[1] + let fil = [] + let lin = [] + for l in range(line1, line2) + let uuid = taskwarrior#data#get_uuid(l) + if uuid !~ '^\s*$' + let fil += [uuid] + let lin += [l] + endif + endfor + let filter = join(fil, ',') + if a:action == 'done' + call taskwarrior#system_call(filter, 'done', '', 'interactive') + elseif a:action == 'delete' + call taskwarrior#system_call(filter, 'delete', '', 'interactive') + elseif a:action == 'info' + call taskinfo#init('information', filter, split(system('task rc.color=no information '.filter), '\n')) + elseif a:action == 'select' + for var in fil + let index = index(b:selected, var) + if index == -1 + let b:selected += [var] + let b:sline += [lin[index(fil, var)]] + else + call remove(b:selected, index) + call remove(b:sline, index) + endif + endfor + let b:sstring = join(b:selected, ' ') + setlocal syntax=taskreport + endif +endfunction + +function! taskwarrior#action#move_cursor(direction, mode) + let ci = taskwarrior#data#current_index() + if ci == -1 || (ci == 0 && a:direction == 'left') || (ci == len(b:task_columns)-1 && a:direction == 'right') + return + endif + if a:direction == 'left' + call search('\%'.(b:task_columns[ci-1]+1).'v', 'be') + else + call search('\%'.(b:task_columns[ci+1]+1).'v', 'e') + endif + if a:mode == 'skip' && taskwarrior#data#get_value_by_index('.', taskwarrior#data#current_index()) =~ '^\s*$' + call taskwarrior#action#move_cursor(a:direction, 'skip') + endif +endfunction + +function! taskwarrior#action#undo() + if has("gui_running") + if exists('g:task_gui_term') && g:task_gui_term == 1 + !task rc.color=off undo + elseif executable('xterm') + silent !xterm -e 'task undo' + elseif executable('urxvt') + silent !urxvt -e task undo + elseif executable('gnome-terminal') + silent !gnome-terminal -e 'task undo' + endif + else + sil !clear + !task undo + endif + call taskwarrior#refresh() +endfunction + +function! taskwarrior#action#clear_completed() + !task status:completed delete + call taskwarrior#refresh() +endfunction + +function! taskwarrior#action#sync(action) + execute '!task '.a:action.' ' + call taskwarrior#refresh() +endfunction + +function! taskwarrior#action#select() + let uuid = taskwarrior#data#get_uuid() + if uuid == '' + return + endif + let index = index(b:selected, uuid) + if index == -1 + let b:selected += [uuid] + let b:sline += [line('.')] + else + call remove(b:selected, index) + call remove(b:sline, index) + endif + let b:sstring = join(b:selected, ' ') + setlocal syntax=taskreport +endfunction + +function! taskwarrior#action#show_info(...) + if a:0 > 0 + let command = 'info' + let filter = a:1 + else + let ccol = taskwarrior#data#current_column() + let dict = { 'project': 'projects', + \ 'tags': 'tags', + \ 'id': 'stats', + \ 'depends': 'blocking', + \ 'recur': 'recurring', + \ 'due': 'overdue', + \ 'wait': 'waiting', + \ 'urgency': 'ready', + \ 'entry': 'history.monthly', + \ 'end': 'history.monthly'} + let command = get(dict, ccol, 'summary') + let uuid = taskwarrior#data#get_uuid() + if uuid !~ '^\s*$' + let command = substitute(command, '\v(summary|stats)', 'information', '') + let filter = taskwarrior#data#get_uuid() + else + let filter = b:filter + endif + endif + call taskinfo#init(command, filter, split(system('task rc.color=no '.command.' '.filter), '\n')) +endfunction diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/complete.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/complete.vim new file mode 100644 index 0000000..272b57d --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/complete.vim @@ -0,0 +1,54 @@ +function! taskwarrior#complete#TW(A, L, P) + let command = copy(g:task_all_commands) + let filter = copy(g:task_filter) + let config = copy(g:task_all_configurations) + let contexts = split(system('task _context'), '\n') + let context_cmd = ['define', 'show', 'list', 'delete'] + let words = split(a:L, ' ') + if len(words) > 1 && words[1] == 'context' + if len(words) == 2 || index(context_cmd, words[2]) == -1 + return filter(context_cmd + contexts + ['none'], + \ 'match(v:val, a:A) != -1') + elseif words[2] == 'delete' + return filter(contexts, 'match(v:val, a:A) != -1') + else + return [] + endif + endif + for ph in words + if ph == 'config' || ph == 'show' + return filter(config, 'match(v:val, a:A) != -1') + elseif ph =~ '^rc\..*' + return map(filter(config, 'match(v:val, a:A[3:]) != -1'), + \ "'rc.'.v:val") + elseif index(command, ph) != -1 + return filter(filter, 'match(v:val, a:A) != -1') + endif + endfor + return filter(command+filter, 'match(v:val, a:A) != -1') +endfunction + +function! taskwarrior#complete#sort(A, L, P) + let cols = map(split(system('task _columns'), '\n'), + \ 'matchstr(v:val, "^\\w*")') + return filter(cols, 'match(v:val, a:A) != -1') +endfunction + +function! taskwarrior#complete#filter(A, L, P) + let lead = matchstr(a:A, '\S*$') + let lead = lead == '' ? '.*' : lead + let dict = copy(g:task_filter) + for ph in split(a:L, ' ') + call remove(dict, index(dict, matchstr(ph, '.*:\ze'))) + endfor + return map(filter(dict, 'match(v:val, lead) != -1'), + \ "matchstr(a:L, '.*\\ze\\s\\+\\S*').' '.v:val") +endfunction + +function! taskwarrior#complete#command(A, L, P) + return filter(copy(g:task_all_commands), 'match(v:val, a:A) != -1') +endfunction + +function! taskwarrior#complete#report(A, L, P) + return filter(copy(g:task_report_command), 'match(v:val, a:A) != -1') +endfunction diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/data.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/data.vim new file mode 100644 index 0000000..deaf2e4 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/data.vim @@ -0,0 +1,132 @@ +function! taskwarrior#data#get_uuid(...) + let line = a:0 == 0 ? '.' : a:1 + let vol = taskwarrior#data#get_value_by_column(line, 'uuid') + let vol = vol =~ '[0-9a-f]\{8}\(-[0-9a-f]\{4}\)\{3}-[0-9a-f]\{12}' ? + \ vol : taskwarrior#data#get_value_by_column(line, 'id') + return vol =~ '^\s*-*\s*$' ? '' : vol +endfunction + +function! taskwarrior#data#get_args(...) + if a:0 == 0 + return + elseif a:0 == 1 + return taskwarrior#data#get_args(a:1, g:task_default_prompt) + endif + let arg = ' ' + for key in a:2 + let default = a:1 == 'modify' ? + \ taskwarrior#data#get_value_by_column('.', key) + \ : '' + let temp = shellescape(input(key.":", default), 1) + if key == 'description' + let arg .= ' '.temp + elseif temp !~ '^[ \t]*$' || a:1 == 'modify' + let arg .= ' '.key.':'.temp + endif + endfor + echom arg + return arg +endfunction + +function! taskwarrior#data#get_value_by_column(line, column, ...) + if a:line == 1 || (a:line == '.' && line('.') == 1) + return '' + endif + if a:column == 'id' || a:column == 'uuid' || exists('a:1') + let index = match(b:task_report_columns, '^'.a:column.'.*') + return taskwarrior#data#get_value_by_index(a:line, index(b:task_report_columns, a:column)) + else + let dict = taskwarrior#data#get_query() + let val = get(dict, a:column, '') + if type(val) == type('') + return val + elseif type(val) == type([]) + return join(val, ' ') + else + return string(val) + endif + endif +endfunction + +function! taskwarrior#data#get_value_by_index(line, index) + if exists('b:task_columns[a:index]') + return substitute(getline(a:line)[b:task_columns[a:index]:b:task_columns[a:index+1]-1], '\(\s*$\|^\s*\)', '', 'g') + endif + return '' +endfunction + +function! taskwarrior#data#current_index() + let i = 0 + while i < len(b:task_columns) && virtcol('.') >= b:task_columns[i] + let i += 1 + endwhile + return i-1 +endfunction + +function! taskwarrior#data#current_column() + return matchstr(b:task_report_columns[taskwarrior#data#current_index()], '^\w\+') +endfunction + +function! taskwarrior#data#get_stats(method) + let dict = {} + if a:method != 'current' + let stat = split(system('task '.a:method.' stats'), '\n') + else + let uuid = taskwarrior#data#get_uuid() + let stat = split(system('task '.taskwarrior#data#get_uuid().' stats'), '\n') + if uuid == '' || len(stat) < 5 + return {} + endif + endif + for line in stat[2:-1] + if line !~ '^\W*$' + let dict[split(line, '\s\s')[0]] = substitute(split(line, '\s\s')[-1], '^\s*', '', '') + endif + endfor + return dict +endfunction + +function! taskwarrior#data#get_query(...) + let uuid = get(a:, 1, taskwarrior#data#get_uuid()) + if uuid == '' + return {} + endif + let obj = webapi#json#decode(substitute(system( + \ 'task rc.verbose=off '.uuid.' export'), + \ '\nConfiguration.*', '', '')) + return type(obj) == 3 ? obj[0] : obj +endfunction + +function! taskwarrior#data#global_stats() + let dict = taskwarrior#data#get_stats(b:filter) + return [ + \ get(dict, 'Pending', 0), + \ get(dict, 'Completed', 0), + \ get(taskwarrior#data#get_stats(''), 'Pending', 0) + \ ] +endfunction + +function! taskwarrior#data#category() + let dict = {} + let dict.Pending = [] + let dict.Waiting = [] + let dict.Recurring = [] + let dict.Completed = [] + for i in range(2, line('$')) + let uuid = taskwarrior#data#get_uuid(i) + if uuid == '' + continue + endif + let subdict = taskwarrior#data#get_stats(uuid) + if subdict.Pending == '1' + let dict.Pending += [i] + elseif subdict.Waiting == '1' + let dict.Waiting += [i] + elseif subdict.Recurring == '1' + let dict.Recurring += [i] + elseif subdict.Completed == '1' + let dict.Completed += [i] + endif + endfor + return dict +endfunction diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/log.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/log.vim new file mode 100644 index 0000000..b25a6b8 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/log.vim @@ -0,0 +1,68 @@ +if !isdirectory(expand(g:task_log_directory)) + call mkdir(expand(g:task_log_directory), 'p') +endif +let s:history_file = expand(g:task_log_directory.'/.vim_tw.history') +let s:bookmark_file = expand(g:task_log_directory.'/.vim_tw.bookmark') + +function! taskwarrior#log#history(action) + if findfile(s:history_file) == '' + call writefile([], s:history_file) + endif + if a:action == 'write' && filewritable(s:history_file) && b:hist == 1 + let fl = readfile(s:history_file) + let numb = len(fl) + let last = numb ? substitute(fl[-1], '\v($|\n|\t|\s)', '', 'g') : '' + let current = join([b:command, b:filter, b:rc], ' ') + if last == substitute(current, '[\t ]', '', 'g') + return + endif + call add(fl, current) + if numb >= g:task_log_max + call remove(fl, 0) + endif + call writefile(fl, s:history_file) + elseif a:action == 'read' && filereadable(s:history_file) + call taskwarrior#init(join(split(readfile(s:history_file)[-1], ' '), ' ')) + elseif a:action == 'clear' + call writefile([], s:history_file) + elseif a:action != 'write' + let hists = readfile(s:history_file) + if a:action == 'previous' + if b:hist >= len(hists) + return + endif + let b:hist += 1 + elseif a:action == 'next' + if b:hist == 1 + return + endif + let b:hist -= 1 + endif + let hlist = split(substitute(hists[-b:hist], '\v($|\n)', ' ', ''), ' ') + if len(hlist) != 3 + return + endif + let [b:command, b:filter, b:rc] = hlist + call taskwarrior#list() + endif +endfunction + +function! taskwarrior#log#bookmark(action) + if findfile(s:bookmark_file) == '' + call writefile([], s:bookmark_file) + endif + if a:action == 'new' && filewritable(s:bookmark_file) + let now = b:command.' '.b:filter.' '.b:rc + let ext = readfile(s:bookmark_file) + if index(ext, now) == -1 + execute 'redir >> '.s:bookmark_file + silent! echo now + redir END + echohl String + echomsg 'New bookmark added.' + echohl None + endif + elseif a:action == 'clear' + call writefile([], s:bookmark_file) + endif +endfunction diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/sort.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/sort.vim new file mode 100644 index 0000000..35df448 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/taskwarrior/sort.vim @@ -0,0 +1,88 @@ +function! taskwarrior#sort#by_arg(...) + let args = substitute(join(a:000, ' '), '\s\+', ',', 'g') + let args = substitute(args, '\w\zs,', '-,', 'g') + let args = substitute(args, '\w\zs$', '-', '') + if args =~ '^\s*$' + let b:rc = substitute(b:rc, 'rc.report.'.b:command.'.sort[:=]\S*', '', 'g') + else + let b:rc .= args == '' ? '' : ' rc.report.'.b:command.'.sort:'.args + endif + let b:hist = 1 + call taskwarrior#list() +endfunction + +function! taskwarrior#sort#by_column(polarity, column) + let fromrc = matchstr(b:rc, 'rc\.report\.'.b:command.'\.sort.\zs\S*') + " let default = system('task _get -- rc.report.'.b:command.'.sort')[0:-2] + let default = matchstr(system('task show | grep report.'.b:command.'.sort')[0:-2], '\S*$') + let colshort = map(copy(b:task_report_columns), 'matchstr(v:val, "^\\w*")') + let ccol = index(colshort, a:column) == -1 ? + \ taskwarrior#data#current_column() : + \ a:column + let list = split(fromrc, ',') + let ind = index(split(fromrc, '[-+],\='), ccol) + let dlist = split(default, ',') + let dind = index(split(default, '[-+],\='), ccol) + if fromrc == '' + if dind != -1 + if a:polarity == 'm' + if dind == 0 + let dlist[0] = dlist[0][0:-2].(dlist[0][-1:-1] == '+' ? '-' : '+') + endif + call insert(dlist, remove(dlist, dind)) + elseif dlist[dind] == ccol.a:polarity + return + else + let dlist[dind] = ccol.a:polarity + endif + let b:rc .= ' rc.report.'.b:command.'.sort:'.join(dlist, ',') + else + let polarity = a:polarity == 'm' ? '-' : a:polarity + let b:rc .= ' rc.report.'.b:command.'.sort:'.ccol.polarity.','.default + endif + elseif ind != -1 + if a:polarity == 'm' + if ind == 0 + let list[0] = list[0][0:-2].(list[0][-1:-1] == '+' ? '-' : '+') + else + call insert(list, remove(list, ind)) + endif + elseif list[ind] == ccol.a:polarity + if a:polarity == '+' + call insert(list, remove(list, ind), ind > 1 ? ind-1 : 0) + else + if ind > len(list)-3 + call add(list, remove(list, ind)) + else + call insert(list, remove(list, ind), ind+1) + endif + endif + else + let list[ind] = ccol.a:polarity + endif + let g:listabc = list + let b:rc = substitute(b:rc, 'report\.'.b:command.'\.sort.'.fromrc, 'report.'.b:command.'.sort:'.join(list, ','), '') + else + let polarity = a:polarity == 'm' ? '-' : a:polarity + let b:rc = substitute(b:rc, 'report\.'.b:command.'\.sort.', 'report.'.b:command.'.sort:'.ccol.polarity.',', '') + endif + let b:hist = 1 + call taskwarrior#list() +endfunction + +function! taskwarrior#sort#order_list() + let fromrc = matchstr(b:rc, 'rc\.report\.'.b:command.'\.sort.\zs\S*') + if fromrc == '' + " let list = split(system('task _get -- rc.report.'.b:command.'.sort')[0:-2], ',') + let list = split(matchstr(system('task show | grep report.'.b:command.'.sort')[0:-2], '\S*$'), ',') + else + let list = split(fromrc, ',') + endif + while exists('list[0]') && match(b:task_report_columns, list[0][0:-2]) == -1 && system('task count '.list[0][0:-2].'.any:')[0] == '0' + call remove(list, 0) + endwhile + if len(list) == 0 + let list = ['status-'] + endif + return list +endfunction diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/unite/kinds/task.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/unite/kinds/task.vim new file mode 100644 index 0000000..ed9f41a --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/unite/kinds/task.vim @@ -0,0 +1,23 @@ +let s:save_cpo = &cpo +set cpo&vim + +function! unite#kinds#task#define() + return s:kind +endfunction + +let s:kind = { + \ 'name' : 'task', + \ 'default_action' : 'show', + \ 'action_table': {}, + \} + +let s:kind.action_table.show = { + \ 'description' : 'Show report', + \ } + +function! s:kind.action_table.show.func(candidate) + call taskwarrior#init(join(split(a:candidate.word, '[ \t]'), ' ')) +endfunction + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/unite/sources/task.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/unite/sources/task.vim new file mode 100644 index 0000000..38d4f56 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/unite/sources/task.vim @@ -0,0 +1,68 @@ +let s:save_cpo = &cpo +set cpo&vim + +let s:template = { + \ 'name' : 'task/', + \ 'description' : 'vim-taskwarrior ', + \ 'filters' : ['matcher_regexp'], + \ 'action_table': {}, + \ 'hooks' : {}, + \ } + +let s:bookmark = { + \ 'name' : 'bookmark', + \ 'logfile' : expand(g:task_log_directory.'/.vim_tw.bookmark') + \ } + +let s:history = { + \ 'name' : 'history', + \ 'logfile' : expand(g:task_log_directory.'/.vim_tw.history') + \ } + +function! s:make_source(dict) + let source = deepcopy(s:template) + let source.name .= a:dict.name + let source.description .= a:dict.name + let source.logfile = a:dict.logfile + + function! source.hooks.on_syntax(args, context) + syntax match uniteSource__task_rc /rc.*/ contained containedin=ALL contains=uniteCandidateInputKeyword + syntax match uniteSource__task_report /\w\+\ze[ \t]\+/ contained containedin=ALL + highlight default link uniteSource__task_rc String + highlight default link uniteSource__task_report Keyword + endfunction + + function! source.gather_candidates(args, context) + if findfile(self.logfile) == '' + call writefile([], self.logfile) + endif + return map(reverse(readfile(self.logfile)), + \ '{"word": v:val, + \ "kind": "task", + \ "source": "task/" . self.name, + \ }') + endfunction + + let source.action_table.delete = { + \ 'description' : 'remove the item', + \ } + + function! source.action_table.delete.func(candidate) + let current = substitute(a:candidate.word, '\s', '', 'g') + let lfile = g:task_log_directory.'/.vim_tw.bookmark' + let all = readfile(lfile) + let allns = map(copy(all), "substitute(v:val, '[ \t]', '', 'g')") + call remove(all, index(allns, current)) + call writefile(all, lfile) + endfunction + + return source +endfunction + +function! unite#sources#task#define() + return map([s:bookmark, s:history], 's:make_source(v:val)') +endfunction + + +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/autoload/webapi/json.vim b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/webapi/json.vim new file mode 100644 index 0000000..5d6e7ba --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/autoload/webapi/json.vim @@ -0,0 +1,135 @@ +" json +" Last Change: 2012-03-08 +" Maintainer: Yasuhiro Matsumoto +" License: This file is placed in the public domain. +" Reference: +" +let s:save_cpo = &cpo +set cpo&vim + +function! webapi#json#null() + return 0 +endfunction + +function! webapi#json#true() + return 1 +endfunction + +function! webapi#json#false() + return 0 +endfunction + +function! s:nr2byte(nr) + if a:nr < 0x80 + return nr2char(a:nr) + elseif a:nr < 0x800 + return nr2char(a:nr/64+192).nr2char(a:nr%64+128) + else + return nr2char(a:nr/4096%16+224).nr2char(a:nr/64%64+128).nr2char(a:nr%64+128) + endif +endfunction + +function! s:nr2enc_char(charcode) + if &encoding == 'utf-8' + return nr2char(a:charcode) + endif + let char = s:nr2byte(a:charcode) + if strlen(char) > 1 + let char = strtrans(iconv(char, 'utf-8', &encoding)) + endif + return char +endfunction + +function! s:fixup(val, tmp) + if type(a:val) == 0 + return a:val + elseif type(a:val) == 1 + if a:val == a:tmp.'null' + return function('webapi#json#null') + elseif a:val == a:tmp.'true' + return function('webapi#json#true') + elseif a:val == a:tmp.'false' + return function('webapi#json#false') + endif + return a:val + elseif type(a:val) == 2 + return a:val + elseif type(a:val) == 3 + return map(a:val, 's:fixup(v:val, a:tmp)') + elseif type(a:val) == 4 + return map(a:val, 's:fixup(v:val, a:tmp)') + else + return string(a:val) + endif +endfunction + +function! webapi#json#decode(json) + let json = iconv(a:json, "utf-8", &encoding) + if get(g:, 'webapi#json#parse_strict', 1) == 1 && substitute(substitute(substitute( + \ json, + \ '\\\%(["\\/bfnrt]\|u[0-9a-fA-F]\{4}\)', '\@', 'g'), + \ '"[^\"\\\n\r]*\"\|true\|false\|null\|-\?\d\+' + \ . '\%(\.\d*\)\?\%([eE][+\-]\{-}\d\+\)\?', ']', 'g'), + \ '\%(^\|:\|,\)\%(\s*\[\)\+', '', 'g') !~ '^[\],:{} \t\n]*$' + throw json + endif + let json = substitute(json, '\n', '', 'g') + let json = substitute(json, '\\u34;', '\\"', 'g') + if v:version >= 703 && has('patch780') + let json = substitute(json, '\\u\(\x\x\x\x\)', '\=iconv(nr2char(str2nr(submatch(1), 16), 1), "utf-8", &encoding)', 'g') + else + let json = substitute(json, '\\u\(\x\x\x\x\)', '\=s:nr2enc_char("0x".submatch(1))', 'g') + endif + if get(g:, 'webapi#json#allow_nil', 0) != 0 + let tmp = '__WEBAPI_JSON__' + while 1 + if stridx(json, tmp) == -1 + break + endif + let tmp .= '_' + endwhile + let [null,true,false] = [ + \ tmp.'null', + \ tmp.'true', + \ tmp.'false'] + sandbox let ret = eval(json) + call s:fixup(ret, tmp) + else + let [null,true,false] = [0,1,0] + sandbox let ret = eval(json) + endif + return ret +endfunction + +function! webapi#json#encode(val) + if type(a:val) == 0 + return a:val + elseif type(a:val) == 1 + let json = '"' . escape(a:val, '\"') . '"' + let json = substitute(json, "\r", '\\r', 'g') + let json = substitute(json, "\n", '\\n', 'g') + let json = substitute(json, "\t", '\\t', 'g') + let json = substitute(json, '\([[:cntrl:]]\)', '\=printf("\x%02d", char2nr(submatch(1)))', 'g') + return iconv(json, &encoding, "utf-8") + elseif type(a:val) == 2 + let s = string(a:val) + if s == "function('webapi#json#null')" + return 'null' + elseif s == "function('webapi#json#true')" + return 'true' + elseif s == "function('webapi#json#false')" + return 'false' + endif + elseif type(a:val) == 3 + return '[' . join(map(copy(a:val), 'webapi#json#encode(v:val)'), ',') . ']' + elseif type(a:val) == 4 + return '{' . join(map(keys(a:val), 'webapi#json#encode(v:val).":".webapi#json#encode(a:val[v:val])'), ',') . '}' + else + return string(a:val) + endif +endfunction + +let &cpo = s:save_cpo +unlet s:save_cpo + +" vim:set et: diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/doc/vim-tw.txt b/.vim/pack/plugins/opt/vim-taskwarrior/doc/vim-tw.txt new file mode 100644 index 0000000..bd5718b --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/doc/vim-tw.txt @@ -0,0 +1,262 @@ +*vim-tw.txt* a vim interface for |Taskwarrior| version 1.1 ~ + _ _ _ _ ~ + __ _(_)_ __ ___ | |_ __ _ __| |____ __ ____ _ _ _ _ _(_)___ _ _ ~ + \ V / | ' \ |___| | _/ _` (_-< / /\ V V / _` | '_| '_| / _ \ '_| ~ + \_/|_|_|_|_| \__\__,_/__/_\_\ \_/\_/\__,_|_| |_| |_\___/_| ~ + ~ + ~ +============================================================================== +QUICK-REFERENCE *tw-quickref* + +| a = add task | m = modify | S = taskd sync | = this help | +| A = annotate | M = mod prompts | s = sort col | = task info | +| d = task done | q = quit buffer | < = sort incr | c = abort | +| D = task delete | r = new report | > = sort decr | = task/anno | +| c = task cmd | u = undo last | = next col | = (de)select | +| f = add filter | x = del annot | = prev col | p = dupe select | +| H = cycle fmt l | + = start task | = r field | R = refresh | +| L = cycle fmt r | - = stop task | = l field | X = clear done | +| J = next entry | K = prev entry | B = new bookmark | o = open annotation | + +============================================================================== +CONTENTS *tw-contents* + +01. Intro ........................................................ |Taskwarrior| +02. Prerequisites ........................................... |tw-prerequisites| +03. Mappings ..................................................... |tw-mappings| +04. Commands ..................................................... |tw-commands| + 4.1 Global Commands ....................................... |tw-gl-commands| + 4.2 Local Commands ........................................ |tw-lc-commands| +05. Customization ........................................... |tw-customization| +06. Troubleshooting ....................................... |tw-troubleshooting| +07. Contributions ........................................... |tw-contributions| +08. License ....................................................... |tw-license| +09. Changelog ................................................... |tw-changelog| + +============================================================================== +1. INTRODUCTION *Taskwarrior* + +Taskwarrior is a command-line todo list manager. It helps you manage task lists +with projects, tags, dates, dependencies, annotations, recurrences and apply +complex (or simple) queries with attribute-modifiers, booleans, regex filters, +custom attributes and color themes, and any number of built-in or customizable +reports. Task keeps data in JSON text files and it's always improving. +Find out more at https://taskwarrior.org and read man task and man taskrc. + +vim-taskwarrior is a vim plugin that extends taskwarrior with an interactive +interface. It features a rich set of mappings and commands, is easy to customize +and makes adding, modifying, sorting and marking tasks done, fast, easy and fun! +Homepage: https://github.com/farseer90718/vim-taskwarrior, patches welcome! + +============================================================================== +2. PREREQUISITES *tw-prerequisites* + +This plugin requires Taskwarrior 2.2.0 or higher, although > 2.3.x is required +for taskd sync functions, and recommended in general, and well worth the price; +free :) see: https://taskwarrior.org/download/ + +Vim version 7.x is required. + +the vim-airline plugin (https://github.com/bling/vim-airline) is not required +but it greatly enhances the status-bar and takes the guess-work out of reports. + +If you experience line-wrapping issues, add the following line to your .vimrc +let g:task_rc_override = 'defaultwidth=999' + +============================================================================== +3. MAPPING *tw-mappings* + +(taskwarrior_quickref) :quick reference +(taskwarrior_quit) :quit the buffer +(taskwarrior_skip_left) :move the cursor to the left field, skipping blanks +(taskwarrior_step_left) :move the cursor to the left field without skipping +(taskwarrior_skip_right) :... right ... +(taskwarrior_step_right) :... ... +(taskwarrior_sort_increase) :increase the priority of current field in sorting +(taskwarrior_sort_decrease) :decrease ... +(taskwarrior_sort_inverse) :invert the sorting method of the main field +(taskwarrior_show_info) :show information +(taskwarrior_filter) :apply a new filter to the tasks +(taskwarrior_next_format) :change the format of current field to the next one +(taskwarrior_previous_format) :... previous ... +(taskwarrior_next_history) :next history of report +(taskwarrior_previous_history) :previous ... +(taskwarrior_new_bookmark) :add a new bookmark for current setup +(taskwarrior_visual_show_info) :show informations about selected tasks +(taskwarrior_annotate) :add a new annotation +(taskwarrior_denotate) :delete the annotation +(taskwarrior_open_annotate) :open the annotation as a file or url +(taskwarrior_remove) :remove the task +(taskwarrior_delete) :remove the task/annotation +(taskwarrior_new) :new task +(taskwarrior_command) :apply a command to selected tasks +(taskwarrior_done) :set the selected tasks done +(taskwarrior_report) :change report type +(taskwarrior_refresh) :refresh the buffer +(taskwarrior_clear_completed) :clear all completed tasks +(taskwarrior_undo) :undo +(taskwarrior_sync) :synchronise with the remote server +(taskwarrior_modify_field) :modify current field of the task +(taskwarrior_modify_task) :modify the fields specified in |g:task_default_prompt| +(taskwarrior_paste) :duplicate the selected tasks +(taskwarrior_start_task) :start a task +(taskwarrior_stop_task) :stop a task +(taskwarrior_select) :select a task +(taskwarrior_increase) :increase a number/date +(taskwarrior_decrease) :decrease ... +(taskwarrior_visual_done) :set visual selected tasks done +(taskwarrior_visual_delete) :delete visual selected tasks +(taskwarrior_visual_select) :select visual selected tasks + +Default ones +------------------------------------------------------------------------------ + + (taskwarrior_quickref) +q (taskwarrior_quit) + (taskwarrior_skip_left) + (taskwarrior_step_left) + (taskwarrior_skip_right) + (taskwarrior_step_right) +< (taskwarrior_sort_increase) +> (taskwarrior_sort_decrease) +s (taskwarrior_sort_inverse) + (taskwarrior_show_info) +f (taskwarrior_filter) +H (taskwarrior_next_format) +L (taskwarrior_previous_format) +J (taskwarrior_next_history) +K (taskwarrior_previous_history) +B (taskwarrior_new_bookmark) + (taskwarrior_visual_show_info) + +A (taskwarrior_annotate) +x (taskwarrior_denotate) +o (taskwarrior_open_annotate) +D (taskwarrior_remove) + (taskwarrior_delete) +a (taskwarrior_new) +c (taskwarrior_command) +d (taskwarrior_done) +r (taskwarrior_report) +R (taskwarrior_refresh) +X (taskwarrior_clear_completed) +u (taskwarrior_undo) +S (taskwarrior_sync) +m (taskwarrior_modify_field) +M (taskwarrior_modify_task) +p (taskwarrior_paste) ++ (taskwarrior_start_task) +- (taskwarrior_stop_task) + (taskwarrior_select) + (taskwarrior_increase) + (taskwarrior_decrease) +d (taskwarrior_visual_done) +D (taskwarrior_visual_delete) + (taskwarrior_visual_delete) + (taskwarrior_visual_select) + +How to change +------------------------------------------------------------------------------ +Add something like these to your configuration files + + augroup TaskwarriorMapping + autocmd! + autocmd FileType taskreport nmap {key} + \ (taskwarrior_...) + autocmd FileType taskreport nunmap {key} + augroup END + +============================================================================== +4. COMMAND *tw-commands* + +4.1 Global Commands *tw-gl-commands* +------------------------------------------------------------------------------ + +Almost the same as the shell command 'task' *:TW* +Undo last move *:TWUndo* +Edit taskrc right away *:TWEditTaskrc* +Edit vitrc *:TWEditVitrc* +Delete completed tasks *:TWDeleteCompleted* +list history records using |unite.vim| *:TWHistory* +clear history *:TWHistoryClear* +list bookmarks using |unite.vim| *:TWBookmark* +clear bookmarks *:TWBookmarkClear* +4.2 Local Commands *tw-lc-commands* +------------------------------------------------------------------------------ + +Add an annotation *:TWAnnotate* +Mark task done *:TWComplete* +Delete a task *:TWDelete* +Delete an annotation *:TWDeleteAnnotation* +Make changes to a task interactively *:TWModifyInteractive* +Run the info report *:TWReportInfo* +Overide the sort method *:TWReportSort* +Synchronise with taskd server *:TWSync* +Toggle readonly option *:TWToggleReadonly* +Toggle highlight field option *:TWToggleHLField* + +============================================================================== +5. CUSTOMIZATION *tw-customization* + + *g:task_report_name* +Default task report type. +Default value is 'next'. + *g:task_highlight_field* +Whether the field under the cursor is highlighted. +Default value is 1. + *g:task_readonly* +Can not make change to task data when set to 1. +Default value is 0. + *g:task_rc_override* +Allows user to override task configurations. Seperated by space. +Default value is ''. + *g:task_default_prompt* +Default fields to ask when adding a new task. +Default value is: +['due', 'project', 'priority', 'description', 'tag', 'depends']. + *g:task_info_vsplit* +Whether the info window is splited vertically. +Default value is 0. + *g:task_info_size* +Info window size. +Default value is 15 for horizontal and 50 for vertical. + *g:task_info_position* +Info window position. +Default value is 'belowright'. + *g:task_log_directory* +Directory to store log files defaults to taskwarrior data.location. +Default value is taskwarrior data.location. + *g:task_log_max* +Max number of historical entries. +Default value is 10. + *g:task_left_arrow* +Forward arrow shown on statusline. +Default value is ' <<' + *g:task_right_arrow* +Backward arrow shown on statusline. +Default value is '>> ' + *g:task_gui_term* +Uses gvim's dumb terminal for undo commands when set to 1. +Default value is 1 + +============================================================================== +6. TROUBLESHOOTING *tw-troubleshooting* + + +============================================================================== +7. CONTRIBUTIONS *tw-contributions* + +Contributions and pull requests are welcome. + +============================================================================== +8. LICENSE *tw-license* + +MIT License. +Copyright © 2013 Zc He. +Copyright © 2013 David J Patrick. + +============================================================================== +9. CHANGELOG *tw-changelog* + +.. in progress! + diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/ftplugin/taskreport.vim b/.vim/pack/plugins/opt/vim-taskwarrior/ftplugin/taskreport.vim new file mode 100644 index 0000000..a5d1161 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/ftplugin/taskreport.vim @@ -0,0 +1,145 @@ +setlocal buftype=nofile +setlocal nomodifiable +setlocal cursorline +setlocal startofline +setlocal nowrap + +nnoremap (taskwarrior_quickref) :h tw-quickref +nnoremap (taskwarrior_quit) :call taskwarrior#quit() +nnoremap (taskwarrior_quit_all) :call taskwarrior#quit_all() +nnoremap (taskwarrior_skip_left) :call taskwarrior#action#move_cursor('left', 'skip') +nnoremap (taskwarrior_step_left) :call taskwarrior#action#move_cursor('left', 'step') +nnoremap (taskwarrior_skip_right) :call taskwarrior#action#move_cursor('right', 'skip') +nnoremap (taskwarrior_step_right) :call taskwarrior#action#move_cursor('right', 'step') +nnoremap (taskwarrior_sort_increase) :call taskwarrior#sort#by_column('+', '') +nnoremap (taskwarrior_sort_decrease) :call taskwarrior#sort#by_column('-', '') +nnoremap (taskwarrior_sort_inverse) :call taskwarrior#sort#by_column('m', '') +nnoremap (taskwarrior_show_info) :call taskwarrior#action#show_info() +nnoremap (taskwarrior_filter) :call taskwarrior#action#filter() +nnoremap (taskwarrior_next_format) :call taskwarrior#action#columns_format_change('left') +nnoremap (taskwarrior_previous_format) :call taskwarrior#action#columns_format_change('right') +nnoremap (taskwarrior_next_history) :call taskwarrior#log#history('next') +nnoremap (taskwarrior_previous_history) :call taskwarrior#log#history('previous') +nnoremap (taskwarrior_new_bookmark) :call taskwarrior#log#bookmark('new') +vnoremap (taskwarrior_visual_show_info) :call taskwarrior#action#visual('info') + +nnoremap (taskwarrior_annotate) :call taskwarrior#action#annotate('add') +nnoremap (taskwarrior_denotate) :call taskwarrior#action#annotate('del') +nnoremap (taskwarrior_open_annotate) :call taskwarrior#action#annotate('open') +nnoremap (taskwarrior_remove) :call taskwarrior#action#remove() +nnoremap (taskwarrior_delete) :call taskwarrior#action#delete() +nnoremap (taskwarrior_new) :call taskwarrior#action#new() +nnoremap (taskwarrior_command) :call taskwarrior#action#command() +nnoremap (taskwarrior_done) :call taskwarrior#action#set_done() +nnoremap (taskwarrior_report) :call taskwarrior#action#report() +nnoremap (taskwarrior_refresh) :call taskwarrior#list() +nnoremap (taskwarrior_clear_completed) :call taskwarrior#action#clear_completed() +nnoremap (taskwarrior_undo) :call taskwarrior#action#undo() +nnoremap (taskwarrior_urgency) :call taskwarrior#action#urgency() +nnoremap (taskwarrior_sync) :call taskwarrior#action#sync('sync') +nnoremap (taskwarrior_modify_field) :call taskwarrior#action#modify('current') +nnoremap (taskwarrior_modify_task) :call taskwarrior#action#modify('') +nnoremap (taskwarrior_paste) :call taskwarrior#action#paste() +nnoremap (taskwarrior_start_task) :call taskwarrior#system_call(taskwarrior#data#get_uuid(), 'start', '', 'silent') +nnoremap (taskwarrior_stop_task) :call taskwarrior#system_call(taskwarrior#data#get_uuid(), 'stop', '', 'silent') +nnoremap (taskwarrior_select) :call taskwarrior#action#select() +nnoremap (taskwarrior_increase) :call taskwarrior#action#date(v:count1) +nnoremap (taskwarrior_decrease) :call taskwarrior#action#date(-v:count1) +vnoremap (taskwarrior_visual_done) :call taskwarrior#action#visual('done') +vnoremap (taskwarrior_visual_delete) :call taskwarrior#action#visual('delete') +vnoremap (taskwarrior_visual_select) :call taskwarrior#action#visual('select') + +nmap (taskwarrior_quickref) +nmap Q (taskwarrior_quit_all) +nmap q (taskwarrior_quit) +nmap (taskwarrior_skip_left) +nmap (taskwarrior_step_left) +nmap (taskwarrior_skip_right) +nmap (taskwarrior_step_right) +nmap < (taskwarrior_sort_increase) +nmap > (taskwarrior_sort_decrease) +nmap s (taskwarrior_sort_inverse) +nmap (taskwarrior_show_info) +nmap f (taskwarrior_filter) +nmap H (taskwarrior_next_format) +nmap L (taskwarrior_previous_format) +nmap J (taskwarrior_next_history) +nmap K (taskwarrior_previous_history) +nmap B (taskwarrior_new_bookmark) +vmap (taskwarrior_visual_show_info) + +if g:task_highlight_field + autocmd CursorMoved :call taskwarrior#hi_field() +else + autocmd! CursorMoved +endif + +if g:task_readonly + setlocal readonly + if hasmapto('(taskwarrior_undo)') + nunmap A + nunmap x + nunmap o + nunmap D + nunmap + nunmap a + nunmap c + nunmap d + nunmap r + nunmap R + nunmap X + nunmap u + nunmap S + nunmap m + nunmap M + nunmap p + nunmap + + nunmap - + nunmap + nunmap + nunmap + vunmap d + vunmap D + vunmap + vunmap + endif +else + nmap A (taskwarrior_annotate) + nmap x (taskwarrior_denotate) + nmap o (taskwarrior_open_annotate) + nmap D (taskwarrior_remove) + nmap (taskwarrior_delete) + nmap a (taskwarrior_new) + nmap c (taskwarrior_command) + nmap d (taskwarrior_done) + nmap r (taskwarrior_report) + nmap R (taskwarrior_refresh) + nmap X (taskwarrior_clear_completed) + nmap u (taskwarrior_undo) + nmap U (taskwarrior_urgency) + nmap S (taskwarrior_sync) + nmap m (taskwarrior_modify_field) + nmap M (taskwarrior_modify_task) + nmap p (taskwarrior_paste) + nmap + (taskwarrior_start_task) + nmap - (taskwarrior_stop_task) + nmap (taskwarrior_select) + nmap (taskwarrior_increase) + nmap (taskwarrior_decrease) + vmap d (taskwarrior_visual_done) + vmap D (taskwarrior_visual_delete) + vmap (taskwarrior_visual_delete) + vmap (taskwarrior_visual_select) + + command! -buffer TWAdd :call taskwarrior#action#new() + command! -buffer TWAnnotate :call taskwarrior#action#annotate('add') + command! -buffer TWComplete :call taskwarrior#action#set_done() + command! -buffer TWDelete :call taskwarrior#action#delete() + command! -buffer TWDeleteAnnotation :call taskwarrior#action#annotate('del') + command! -buffer TWModifyInteractive :call taskwarrior#modify('') + command! -buffer TWSync :call taskwarrior#action#sync('sync') +endif + +command! -buffer TWToggleReadonly :let g:task_readonly = (g:task_readonly ? 0 : 1) | call taskwarrior#refresh() +command! -buffer TWToggleHLField :let g:task_highlight_field = (g:task_highlight_field ? 0 : 1) | call taskwarrior#refresh() +command! -buffer -nargs=? -complete=customlist,taskwarrior#complete#sort TWReportSort :call taskwarrior#action#sort_by_arg() diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/plugin/taskwarrior.vim b/.vim/pack/plugins/opt/vim-taskwarrior/plugin/taskwarrior.vim new file mode 100644 index 0000000..43a776d --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/plugin/taskwarrior.vim @@ -0,0 +1,110 @@ +if exists('g:loaded_taskwarrior') && g:loaded_taskwarrior + finish +endif + +if !executable('task') + echoerr "This plugin depends on taskwarrior(https://taskwarrior.org)." + finish +endif + +let g:task_report_command = get(g:, 'task_report_command', []) +let s:task_report_command = ['active', 'all', 'blocked', 'blocking', 'completed', 'list', 'long', 'ls', 'minimal', 'newest', 'next', 'oldest', 'overdue', 'ready', 'recurring', 'unblocked', 'waiting'] +let g:task_report_command = extend(s:task_report_command, g:task_report_command) +let g:task_interactive_command = ['annotate', 'denotate', 'execute', 'duplicate', + \ 'append', 'prepend', 'stop', 'delete', 'done', 'undo', + \ 'config', 'edit', 'start', 'sync', 'synchronize', 'add', + \ 'modify', 'import', 'colors', 'color', 'logo', 'context'] +let g:task_filter = ['description:', 'proj:', 'pri:', 'status:', 'tag:', 'due.before:', 'due.after:', 'entry.before', 'entry.after', 'end.before', 'end.after', '+'] +let g:task_all_commands = split(system('task _command'), '\n') +let g:task_all_configurations = split(system('task _config'), '\n') +let g:task_report_name = index(g:task_report_command, get(g:, 'task_report_name')) != -1 ? get(g:, 'task_report_name') : 'next' +let g:task_highlight_field = get(g:, 'task_highlight_field', 1) +let g:task_readonly = get(g:, 'task_readonly', 0) +let g:task_rc_override = get(g:, 'task_rc_override', '') +let g:task_default_prompt = get(g:, 'task_default_prompt', ['due', 'project', 'priority', 'description', 'tag', 'depends']) +let g:task_info_vsplit = get(g:, 'task_info_vsplit', 0) +let g:task_info_size = get(g:, 'task_info_size', g:task_info_vsplit? 50 : 15) +let g:task_info_position = get(g:, 'task_info_position', 'belowright') +" let g:task_log_directory = get(g:, 'task_log_file', system('task _get -- rc.data.location')[0:-2]) +let g:task_log_directory = get(g:, 'task_log_file', matchstr(system('task show | grep data.location')[0:-2], '\S*$')) +let g:task_log_max = get(g:, 'task_log_max', 10) +let g:task_left_arrow = get(g:, 'task_left_arrow', ' <<') +let g:task_right_arrow = get(g:, 'task_right_arrow', '>> ') +let g:task_readonly_symbol = get(g:, 'task_readonly_symbol', ' î‚¢ ') +let g:task_gui_term = get(g:, 'task_gui_term', 1) +let g:task_columns_format = { + \ 'depends': ['list', 'count', 'indicator'], + \ 'description': ['combined', 'desc', 'oneline', 'truncated', 'count'], + \ 'due': ['formatted', 'julian', 'epoch', 'iso', 'age', 'countdown'], + \ 'end': ['formatted', 'julian', 'epoch', 'iso', 'age', 'countdown'], + \ 'entry': ['formatted', 'julian', 'epoch', 'iso', 'age', 'countdown'], + \ 'id': ['number'], + \ 'imask': ['number'], + \ 'mask': ['default'], + \ 'modified': ['formatted', 'julian', 'epoch', 'iso', 'age', 'countdown'], + \ 'parent': ['long', 'short'], + \ 'priority': ['short', 'long'], + \ 'project': ['full', 'parent', 'indented'], + \ 'recur': ['duration', 'indicator'], + \ 'scheduled': ['formatted', 'julian', 'epoch', 'iso', 'age', 'countdown'], + \ 'start': ['formatted', 'julian', 'epoch', 'iso', 'age', 'countdown', 'active'], + \ 'status': ['long', 'short'], + \ 'tags': ['list', 'indicator', 'count'], + \ 'until': ['formatted', 'julian', 'epoch', 'iso', 'age', 'countdown'], + \ 'urgency': ['real', 'integer'], + \ 'uuid': ['long', 'short'], + \ 'wait': ['formatted', 'julian', 'epoch', 'iso', 'age', 'countdown'] } +" +"commented out pending taskd collision avoidance +"command! TaskPush call tw#remote('push') +"command! TaskPull call tw#remote('pull') +"command! TaskMerge call tw#remote('merge') +" +"commands; +" +command! -nargs=? -complete=customlist,taskwarrior#complete#TW TW :call taskwarrior#init() +command! -nargs=? TWReportInfo :call taskwarrior#action#show_info() +"command! TWConfigColor +command! TWDeleteCompleted :call taskwarrior#action#clear_completed() +"command! TWDeleteNote +"command! TWEdit +"command! TWEditAnnotation +"command! TWEditDescription +command! TWEditTaskrc :execute "e ".$HOME."/.taskrc" +command! TWEditVitrc :execute "e ".$HOME."/.vitrc" +command! TWEditTaskopenrc :execute "e ".$HOME."/.taskopenrc" +"command! TWExport +"command! TWHelp +command! TWHistory :Unite task/history +command! TWHistoryClear :call taskwarrior#log#history('clear') +command! TWBookmark :Unite task/bookmark +command! TWBookmarkClear :call taskwarrior#log#bookmark('clear') +"command! TWInsert +"command! TWImport +"command! TWNote +"command! TWOpen +"command! TWOpenInline +"command! TWReport +"command! TWReportAgenda +"command! TWReportBreak +"command! TWReportCalendar +"command! TWReportDesc +"command! TWReportEdit +"command! TWReportGantt +"command! TWReportProjects +"command! TWReportTags +"command! TWSyncFiles +"command! TWSyncStatus +"command! TWTheme +"command! TWThemeEdit +"command! TWThemeShow +command! TWUndo :call taskwarrior#action#undo() +"command! TWWiki +"command! TWWikiDiary +"command! TWWikiDiaryAdd +"command! TWWikiGenIndex +"command! TWWikiGenProject +"command! TWWikiGenTag +"command! TWWikiIndex + +let g:loaded_taskwarrior = 1 diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/screenshot.png b/.vim/pack/plugins/opt/vim-taskwarrior/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ec4225997fffc4d711bba86050ac51f31f1babcf GIT binary patch literal 138917 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≧`)SSkhz(XmptX86S*ED_JI6pr`xPcV zf2=R?761@x4|mS1O$rVmVBju@&(W^!nU1EpD5V_Xc+82U@`Lj2`J?f%UJt29=V< zwse9&H|8PlFEr8q1>S&t+3@4D$lJNDCZ0cSQPY!=@?DyDXK6X2@Clj=sM3!gK6)L) z73VaUXXzRT@Wq`Yv`_umHa_kL4!-enOv`#&pJhbWd_MBU7?EK-_Sf=>OY0QB;f*to zrc5TfpeHV=LPWU|BSIw!pHuw)pyeZBy+(EYb$j&|yAa41ywK^OGtli~bim^;XE~Qs zI^efOEKJr! zQSW}rM=8VO$Y>v?T{~JbKF83aCN@b*EG@mX#rVX>i*knV2%IKTt6Rp#Nxw_^L1kzm zzvR@S+^vYE&Sx5%AxL2=B5#wkv>7p%ZCeho+UBaV`qCzIc-fMeGnifG*DvUWn$KD? z*I8BPxV5+IFZo+Qs8gIAP~X#>Ia?mU&D~H#BEzZG;q$uGni~BOPS*6TyfxeSK>k$5^5tgzqec%QAa`RD7i!s8rnX)cdDDhYM8 zKJzL1QwA&=fjXz0zRaeNpr1bA$x7SdxE>!SUIY=Pv{u(^z#LKZ5jcc1rh(PPcV|wX zoB;m33b{VPtHXv<<5oARq%k6=)?EyAG@wA0C?+DtpZm#k8^d@gl0bmx zUZ0QN{m_mY8@|}6+i2?xV-Dh14Zy0>TSub|&!a%O2WcPA$k3i4~ zLpw=eA#cj>5@01Iq2cA7scL^28g+2fq=W(x)bOS_I|e^GvNtKo|BfG+Sx08CUdAks zkt$q6d|FxV{*0mr1r!qKE`~RT$%IU?NRktA?|ir^EyqMlA>S&b>yOr78A zd~&|p)zFJ-y4!E{&V(Y+lc)Sj99Sr<{JSiVwHD5xEF8lA{O!{u7zuA>85f5MM3Lb?f`(+J{DPyUh7t!f~SNVR=k!c69{7w+sZcaDRePD5#H|Sgm ze0kX1Lj1YO8+nPX;$k6b?&I^UQQ5tTx%5LRo-91Vj*O?Y`2mqqFpo%|_Yo-v8Zc1l z`|bk)`~EK4)arXp0%g%EEn+YO$sliumed4cdX^&xiOy!I)neNwSqc&^6^gE+wnalO z9|q;EM%oPnfWW*(YNAbZKXdI=rpK3G$mV&JYw+PQh!<<74%Fz#8jW&tr5zg;OqDJz zTw{b_kS{?*z4@+2-`PbkDSx+i!XqZRiqi83CMN>zh;?L?B|lL$c98nZ!xSC6xRA?s zKm6$WNsk}<1NZY-sew-#9W_yV9Hj$wN0zQEelIm}-t@Q-?GtISnR`;Ju5Y)YJ(6{e zjpk2X(Y#eBn&s0TmZ+?H*vyL*K6XZV(L$MxmCmhmO95~Ye{o%ZUvXLgo-jV-Ikv%~nr3F>SYk${>o05lZ?>WZ-#T4#J1QmNIFOQr-%_&$yYP4T&?;)Gq`G%}S@KCZDN&OO+&7&qx zH;P+=@uih8n#J{&-A(og$MVUf-sa*v(ZoKbuVirj`DL)Z&sSG!jw}b zX_OEa$NXQaDxY(@lWnxRp4yY7!zI-rbz4>>NCq1Oi)jQ-n;G`98-s8)+(E?H+=1E?vs@ zvs6FqkxK>A*H#i#wXSb60y@rvH)Q_u*&+=p*vo91;C1!11 zM?hqvJ~n>a+1_e2Sz6UxLZ5fIFblp&gANQJfD!X>A^$EyXIP_`3zz9suwU z2r(&S&!9Y`qd7>1%n@GxO#)&+PM9G42yvHr$RF3tnv&QErvrig{i?^$^9G0$Kw#Kz zR&NZ-!E88r;1mRGZqUfgq?rtRZ1YD`P*jTc7tOQ^xLMoJ-M(x}K+ z`e*G$ia&Yo{q=0txQf<{l77G55g9sL&;^VjCkwz&YX{922FS7c@BR)$mThrn8f^~; z(j~d|DVSdUWlr6=f0N2}D&q$pfnByXte0H4V0DpTJI4t3%8@QJm*xnFbc02s39MV13aThqR<}L8D!XmD0+=W7gN@GrlLHF$7`;gfNlbZrf7r6xjC% z?mj{T_hX{?`5H*s!tKW+=4YeP*X9{`ABQhH0KVID!m}io zfJHN0k7czHM-FQ;LlIpak5My z5S8al?cqujE}9Qp+825VjdrtU>?A9>+kI@#SS?aSweFB6l8`fIN;4dA_e2Pm>#OjQ z)>Spsp<59a_mC%-v|kz@R7yrc8yQs&1TOu(87c%Qvd3YW7{6gh`Ve4c1OiUUIuU z8LP3=`PeaOQC8j5t{2U*{5nFJLm z3}&S2wHNRj<=Ic#k)Dx$=grGekKJp%bM}d>)%F>IO-ohK!|B;UveJF0j*=j{=wP|# z#{!fBAn*`1vBTXsmRMqS(~+I_^^o|B>B9FC9xt*VN+(eue8(iwDr&wedY?j|%*U?#oYg@bxK8=8s92n@A;8Y)9713-eeZjQ2L zARO`{G{)*=KVwxk1F#N-9HTw1_8P7AA^UQPiL`s~nM-O^@3x_K3~$jQsqc60PUg+4 zhNL4p@ByJsQ$P3A^5KAHxCK26k`tJGDs1pYwFLt&UzOvPdTWWRzHT!ckqUj- z$#~+Hfg9O#UE0m1|J)0d0qQcs|DgGo{+s3(b`pjp_+N;A43K?d>v;>t%vfGviMaS1=

Q2p0D>i)N~DUyfr(-7%e5diGS)5TW3UPH|u7aV}u6vT7#^jur*e( zompG7|13g?FuzpcR^|w9iwj1?5q1n$=d0knkerma@F78?OS8I?c3Dry!RX6teVSTt zXSS<|xfbX7Z}bqJgy|in9o>Q!UsQQLkzwec&)*CMGWukp2=}8i=>X?b-^$ z(rO|u^p3}%v6nizG=PUH0{Fgd^L^^t3vVtr<45X({*c}zJK1`ta;u0O$pZi&Dy}T~ zF7c4Jx7h}72UA03T2I>NH3FX`8>I6b^{G#>m6ZhhcK3ic+A3@^xl@Ld@&RA_)g8>l zOkCw$47fmpXeD4KdF=Mwvw(oH30Go^*1;gZZ+|nji3Qe+uHc#U>r#D6L7QMTNL;x&u&8IM6QDA*z-H9#8fr%M8%vFqqGIkZTX zzYUTOKvz`SBqNs!gLYTO>wp0QBi$g^lBGMHI<(7EVkB3I2Y2*~DZ4{9aB-!s-Zp~XvuM>}Q*i#(8Qq3!o(RU0A zUtvd(BYjr#p@PVKz49C2fi*eB=lx1obNCiFL zBhyxwK0`G2hxC4tf2te(;jSU2>{6C@w#%^AIcijc5RW{O2y=GZGHNb|$$t{3Rzq3- z6A%{O&xe*g3INn*p=AzO@=UNV07=s+g$e|nxaEC(JH*Ryq=PD_%kg^677r>LU;2057%3}M(v=j|q>I{%WH6WPF(tG0x@@$9LpZ6l;^rd@SuN}9F79tU4|~Uv zSA}|!2YrjLt~>w4>s+MjANFJlbG93#51Hb9f1~zTuKRU4>_Yd&DVyslYd@{T<>MX{ zEHwRQ{`0D55sNZ`o56#=i{Q!4+#Z~vleTMef8zBqJmy4e@(vnRgQj=?iZV)FMxBa4_e4mM+-W4VA%v2s3ge0fl1NYw{(%t_->|nP#ka+XrQ%YF;>)PP!jjL@O zaH<8lY+tCHW6<8SF{ajy2O^TOJ}2mSzhIaFXJk09C{(Rg5sr7{3#Vhp0e=p&t|)+e z!vIS;+~~a|)?S0}qmirPd#gMsu>F9w$|3BZpSTBp^g-UL-qYW-OXs!?l{Q7m99ZJi zFKgw_mT@Eg7RjJ})GNJG?!vwkPA1DC1Cquiz)ES^7oIASLvtV@1tEmt;SAAl@?3$B z|8&F-&g<>e3Ln6LctLXdwou|D>148_xDsw~j{bfKrh3}46EHtOq&`#Op$(fK1;|-` z=)jWh2fquGXC#MG`^gfde}%9uK@7L#H_&mos#0Iyz+_z5)u!zJ;Il;;oOb47=@s1k z7&7;$A8t?o*TlD}w8g8;`4uvpnsD;NAV=eFE zg?(apC6ESj$S0cuN?E14ALXR>p4^5(YR{AUb`IVuc@th(8M=(CX#$BeMGpG7qT!sY z+FEX9>XAq4Sv21R0#q0L%N#+Lvqk;L@}Lv}y4&kjbzr-^<~tfgn}g8`=S&w&8{ zCjvP(rsKM|UlbOY`rK`6sPgTjJc&c*?tTy9_Oc6h6M$g5jST=OO!;jLSL}N&IV#`0 zphCZ$kJLq{zePHHj+P>o0w7?zTmCMM!!*X~y*~)6qX3Sjd?|^(Snq?)Ghta+O;13U&rwJr z*&AcwW!5XvM<+G)6{4qp!iO*^95)gn6Q=VluhpyETl#$e&tHz$;AP=jd@3yE5Oh1Y zONwKg?{5lRB5&P zijH8XD>3%0r7np;ZlTDO5pjR^tj>u!e93#|Z5*TgJdRtkJO7cBh!9NxahKwfh45$z z%ZkLj&NZXjjaI+VSp7^rFtjx<(?e^mq&5(Z_%tz&_;#!F@toDn_jdY?Z#T)rA7cq$ zfN5Oo{lEjh@9?P1iRnw?WYGlmq!EA~mdr@72r9ReF)cWJ+}GTC=p zZT5(!7C% za2q(5+rF1Z=%VlIP1lT{Ji<{2^E^QWNB3EZ|ASs@a{O0%?c9O&KM365e+t~#G9wZy zE5w;4z8oYv%aJzQ9mgbjNR$)=`pUX4HQ8Jw)VDfGZ%hCJ(;=y)2Gjl0wR@R1FECWL z*Mj}5(%9uu_mg`s1^@gl*$W=UIV!Q#>>Y>M z_zp14G||LAP<5`L0R9e?+s(@XUkjasi2EA_RLU~D&h%BJ>IdpKDx#{gC;Dhy-lhnx6_rMJ|1BGyt>cza*X(!$5k3Ang_JN6A3hm9=&Lh;>wRX+os+odIlDn!G8*H602| zf{8!&6VaE#{LJt(5nlDzmC3#-=Zs`=5fO7AqY(KWGO*Gl(psZY!QPx~fPqY%bJmlR zp2QgX&KDA^y;l)s449;V|DHE<{AvOwz1z5fO zi*5;&kmtEOJsr};QB?+gn{%ylV8-4{rKkgOEp4M?RTZIb09Vk@F;HePLX2I?en@9x z&X6|dvkE-eaeA8Sr-PZ5`|0jF_8?fE7#}{5W9gvZFBRdtSl$c@c2C27Oqc+Irg{H_ z)T)r@USD7QH%22-s#Vv`} z{Q=Z&Pp5~IBb}9uzP>j6t=6accekD5Y#~w`nkq`0{o-`rB9f>J%x4(x>P4 ziF?W#&$`*@%F`XxjgRXY)apJ4d;mWNPzBP(P4~F<;PSK~^FUO_F@&+=*vrla3dXKW zXlDR00Yt*+0=+0Kw928 z2haGvrTY1UmRTcVN!p_tS~fjNXt-#rv7n&8{O#i6LQH~?L2nR?+<$KuRii_yn^SF# z`E;&_gvXeB>dKY4qK2K=cyb}|ar37AW7+1?Nn;c*=S_78fuH6QZHs?ENe~nl)NkPDFKcSk^^Ge7)j{ynAH7e7r#89W(u69?Wyk;kV?B@2tb@WK_36A;} z_S6dV60}X~pfm%F5ZIOAL}m!Ks5h`=kL?|kR=+I;(wJ9kQyY1EY#E_p3ITx#JQ4p6cBj(#x9%iV<7Ue$VvhVO&YoiwiG~?-~Q6xA3-a| zl3D(HCOj!^W9TjhCBG^kX7Hzlz&5|N%sf3^T=PGR6j7{Gb|S@NDbTTvHk z?eHsaEwZ#`%j{+;s&MXA69hb7(#9)uipfR zoO=7azp2PjlnD>yKg%_=krmzkiy+LATO;@6A5q{f*f<65tR26u1=Ygcyu=cS`<+^MfbT z(e75Wm;Ifd5iq*!YP>xEWZ1xYzo}=^J1F9+6TQnC3vsRtMJ$|(aRmhR!Bj;f+JFV$ z^KQ&pT!(sRNqg0(MTi%(%j^*f0}^+cXsP&d%BGKTozCU1ZddJy;?O^vzsMmwB6s}Uw#SIR1jZ^x63))>k%2&^T$>p`Cy@0@}P_G$3q<{0-O%c#)!q@QCUF(h-Hb5&pb$jXsBwqwuF6Yn`k4S1!AC97V1mO< zXOh;T&O`wEgV);@8Yv)_Ud+bhsOYI~dJd~9(%|*b>D`-Z%|KBYc2}gPH8#0~ed#yg?Jh7I9)ast>!YiV- zdsmt&BWm^?RTU+6zCIT?CtC5E|K140-!YGR@`w9VIF04=GTfi*C zvpT=~F3C^r?G?ob3pAXJ1J6X>)w`sx85ySJ`UVlQ@xW>!q41MhnG0_m1`W|d!~8-_ zRDt=S7JpcGgL&12%?|f=pAs+(y()xWbJxGOLB>T`nP#Cs)6hRW|5qRBC^Plnm8b-o!pa6!y zb(!$d9&*{Dvo*BUU2I$Hqh9=pE>+oMApWDvWO=JWIUSr2FPr^(>PRUU3^YofE1*}?(M~iqj=`X`@%9!3KfPsr89&B_pOifv`xL?@e~p;Ee>OZcDXXbPoq-is zXK>ZEOr+cl@AKz64!cnwhC$(ER1Ur{$))U=u0CPw`MlGR&!9*8J{$_^Yj&`+LyN|o zy8U6k=rVUOo4DEA9kh)%uiDAF+^j^8jCnc0oGdjvb#z5}vN3G(eH6l-QS3ZY$Dxj4 zV%yKF28+dZJBpz5u)Pfv%ehrSxc+x-LEoKpS1X`$UyIA#Y7N`xL+Yot88io&*o3Wo zl9vu~EnBX{srOgONjdDHTEDWQm_!BzeNWn5-sWO;8w3g!k$qWb*8#{k71MSbJ}<9( zYeeM{V|vLfcAp6~N`SnFzgA6ol__P`b>UOswbnQ zx35OK;e^!hCd1RJy?ez@Psb<(7zP;C3NqBM^dtN${pjgw#84jj%0C(mbP{uqo0U9b z5*x-4i%kYJ8#rnNWQ&nWI{az0fdB~fgB{IWjN5-og*%Lj>tw{5_`~AOGwEH6m`4qkk)7wAYnzu{v`Zz{WeW*(*NeihC7>pB|#9Axz4>`dXrQk-B zcD5NL`;ByWcWX5Po{+@YR=hZ{J^aQ9%urvuDK06(;Sxnfq}$NN3Yjs!dWiCO>;u~a zx%%GCj^P%<`weQ$9EHZ07ag*-dZs8)K`(YulAt|_JhYQM6S*y@-W@*pAB_#eF9=e0 z5l^R>CBvj|Y^YyOwM&mnsL+JTJOd^(ka5G4NZD!m)W|Ul-E<568yhX;#xKJq?(2fH zC@7e`r;xTX$qFfV>dx}5hfus50?VCsT!WHQEkw&%Fl}4nXUqvnIC#a}#b>>rZ;x1eQGOKBQVnou5 zgGYYj`KZt;q!ZyVwFybQPd=D$U7+PLF_P~)V_(-(#?-t&+P7i^g~={uZ(WNHEn!ov zj!SuXBC&P;(z~A{P`^*|*(yCvcHwiEul^Gwwefbonlvtm+jjZ!_C8pLr@W%32JJV# z%+qeCHFwi$9si~iqf>s4EFJz3K9_9%p5$?rVgIZ^4?hgehgp0Np(gV2{>>&G@S=k)pj&_=_d+*Dg)i4hr93l`#q ziE!PSNxlM1+Zp^pwn8M|V=pU;Ay~jtjShRy@MbR%Lg1)jI^_PLf`d}R=5&@2(jMAN zo4YLh&DS4`es{Z37nwd5m-`1b6pd6xo71wwf0%HqLsa zt`{iJYya5&K9WG>rfVZZLYP_Skn~%zr~(s%ZITo-J*+X*w*DchBYRnSSzZXNbx9fe z*JwnA-DX}HvTli7j!MizY6_!>kyb~3_?n3%esdIAWVtY=$u!^HpU697=CyFXwh>xn zUNeGd(&K}~@zYS{)^>yJv zdJ3|9#^?eQDi_=0$>y_6l=g=A0`z==z<}{gK^opJ3g|Z)XT*mEar!)JfFA;6 zBSOO3MJx5@C!F8Oeu)~V3M6+{`>k)G8~#}oNGQ0VnLH2vx=~+Q*OQ=wQyf!cPA9#x z=BsmB7(sE8)YQ!{+r2dN$h`xGGe0;RZYK@>5vRP@WiF`n+B4v07)P}e<8L!9$Q+Iu z5_0G1!*Z~;Og~nZG^vcq!-vg~64b_f7Bc1o2HA~w>%mO?X2V?jUu*|)XqE#JD$xTQ znA+eUKCy4s4B8|Nq!D@odZZu2Q)I;)Yb+i`(#%A`ju)PnPIJkQ1pLh0nP<&6TjsF> zKT?I19T42pOxc9q)z1Whj$Nt@(vP4=65#fq%6bR<<#4#jxsdetN;2;QSs8;nc^dZ0 z8!|i18RkLwV1(|BTtPPoto9~xsEDLrCERNU4SvTG`<=8wy%a@|-FB5TbTS6KFg2Pb ze!~@HB78wf_uC{06<~)n{)Hm7#cxJM6G(1X0Hc^DO485i1yWw z>($2H?B#cDUQ=kBVT3ozl^h>C0;usqXJw7o3({OV2UGALB*yF;Ssu7|$g9QfxykP( zU&Y{&-e_OZ-E_Z0(-VZ3xmOG|!GJDKnuyH4+I!pjynxDryaI{bKIsu$e%yI0o>08 z6ridOEF1iJj;{Uc>xSAuuL_J|xIaNYEhzFpZ83i)LfPni4b(aF zwxw+zfoc8;s>Z`I3CvuyI7f-YYcT~f7Ao@VhuXXz?_HGL6~{5h@wg3KBDK&snANRg zS-;pl{p_Qu@Pt7IN0vNJ;HY~fexPXVYQI%%!j{Y6?Vo4%D3xfA^x}O%lF*%^$#5L$ zwC+fubt2nQVxUszEx&X!?zQ?p8XPRYk!rhj_xbZ5Nw4)B^7Pb+ewSH+C>!y6O)-01K#$EUKy|2S=`dhiW7hT_&4|C=|`(zsN%ROaOy%dqEu0!3;L zAv|1`R}oW6Jxq-211G)p{RC*@oyxZu(ng7bc?Pn7#!ytPROfhJ%!+CLqZL_XouVrt>wi%au;ySb=%8O~59qmlT- zLv<7BE=?A>psAA#cS-$zjF$|Nn@wAl@M8*vI)+RZ#P9X~j>`rv>7z^MNwHBcvG?cS zfz0aNWGsSqbw!dPfFHl3W`~D>1!3q9jQyj-%W13Aek90fTa%z)KW!}?621Z0eQTir z{EBuLkqxx4z}eozQ>-uL5i5E~3A){s6ull*1!`dsboyONcLJ{R-E^p1o7-7h?C*~Ke>C^y+BO8>^Q{MXJ>1~A z?n7DxZsh|V_;=YZF!a)po(xI~Oax-JysQMR&@oF$xgSpRX;Yz9(}yv%BOa<#Ltu&gf>igO|};t69z=Uaw)^`cl6+yQpTi4=axFx=c5 z%cO5D{0K^M1zxz?TWgPWy5x-J`Z4QrvgRhO%JCP>qU(m^d?eD>!_)TD7sEBB<7+*R zb?T?)4?z$BgTl*!l=T&T`V`G5mWFFZVp_NK3s19I0zoF_6&*!Y4Kl7fp=e5Wmw81?F3qP#O^5IJmD~J5?lXB}K%?IN z9H=~4O+byS0-k#9Zb@l!{`qP?6ZX5nbGz#yWB``T@1Cj&;Q>XR`U8z z@!tjmk7W_XFnvBcQBh_ZX@nX6!8hg5z>p#~^Tjn1a5{-8Lrh)T>N)8WIGq&YFF8`B z<~CTV*=vk?&ea+F z7(N-V$uW_7nk^q+FA#q!ad3s?h(nOaRQ`qat4VXq*+ zl862;>HkQ>zlLZkY7`~(*@rXa?l6cALIEd4KGVNsAWdaFG027XBx~)P(D=%eWf0_6 z>ddw*QOegs`JVUn*epn~{YvlmOQ7b*xKx}{S4M4pA9d>q<_R52IVB_af1(|6CBB`5 zAH9SdOjHkDD)6SwM!~Rw6o!6QsUBR#_uCRPaAQv+?>(?r z+prSs)0o&t=7WdC8m{Yn#aUf^_B^>a32)#z?eOqBJe@Q!)M;5uI;2~_JarIR7bNgd zNiVEI0OY^Xz{jN)xoWLRCog<{-nOLGZ!OOL+sxCyyT;g}6B*rKNI(9e0YiHmp=AFx z@u4SJO$= z?r2D}5t_?uSO`a6^aOuO*#y7Pf3?oDNak1`mtb-s%}&kLN2*zzbzq?83zzbDM6_|2 zt!SfnW**@~bv^Gg@oB*hF4>+$(u4Ey`X;i$&Td(t6X+EDyB!^k#=5p9vc6K#TT}@{ z^8Ytw8R!K~c-8tb;2Wb|ZHXeur75D=NPWhs7KZd{tohGul@)4kG(v63{Q3J{i|?&y z(!a35Jp(auOZ)#F8+_jWXUfu$9pYapOUP%MdSXMS%cdIM_qFuSA$$Sq9-(rJ_Y1yY z(0NBc;t}Y5M;zl@O+S}*AD!PTvsIOAM5bIAA@?e2HU?+-M#P$Vl{=fu@HxvcV#D{G zB=_FzPV!x^nqT}u`d?rn&V!+elA$wzY>~#?v}jIR%Y(l-`4qjCa;=5>lpvNNP*v~1cIDV3+WDl68V3(NI{$f z^P9CF9!fAzV-hqT}IGzys~hz; z!X}s7DZS$O=x#i}LGC|4|VyvN16VQI?CmW8)Mbx%t*vUd+WCLGi zS1r>!e$Az2ngMEr2n7?}zZ}IlXEtMLXD+5x}~n9^VCgufC|BD#$7=p&7$?VE;i33$h7QN){WrxA<)anNOq z>Q;;z9{wlA3|6}$ISBOL=3-)@Dq3c?wtPQC<9BiKnTO|>7KayA7SrrMFRO4z3!w!Y zAKzox>VI{e$Y_}^VQ_%Xb2+>S@~Oq1^yQ2tNbzNN0$1c}>d-Hzp8hGUu+-#ZPGT}) zrj6|DHW3!Ot0hd%L_Cj;D=(~A`sLoqGM0^SBToFw{105gD9*t4(R|6mo=Keu&{^Ld zGWF3-lrQb=^~jG_B}%5)JAVnq&xzl(GS#{f!)i0>haqi4fGFHG?FtT}^2~7W+3L}o z#2CA_`4*~S!jh^_6G~Q2h4<@VqUNDqf6_wv)^T& zPBhXg0!+yqSGIIXBPi^aG^p4DHuzz0nvYP z`JEg$&c<=rya<72XBNepX)*P8Fcq*Nd!`o{XR4s%jbU~KqgNTQD}i)==ER`mg)w1K zm)}UdqRKa7l z-ZurT@L4Xrkjq*Grbv&-Tf>2Jv6w_Mg`*PQ52bQ0OCrrXG}EY$g01y!Njwf-%@pWM z-Hdf%I1lG(OJGR_wL)W_+7mEot2BPxEt&Db!71v7QI;5yX5x+n^>=7Tb!H@>;G@lS zjP*enUW02<8(pno@y!fRBI;L4kQ$Z%!M#>AXj!r5KJ?(wJcMN>nt3rADdP%0J`LH3 zR@((F(LxeFin`C885Nv^MbjKITH2of!2AyW!bE&m7RjP_|$O%B?HfsNr$&(FdrXf-|aoUAuF3pweasKUIE0O2v_DbbGC=z+$i8?BEkHcaDCK zr|+F(F2U(%Q1hL?xlbNkeuH?VnLa3Pc$IeL{yJ3pxt~?bA3eiSfbZYOwrh%=WtTd0 zR==Ekj{wpu-7tbeWhUD{A<}SxgR584=2jzqd)Gidf1Zs=7Chnn17SrBl*?&ejKEed zo6V&5lfM>5^J~hJo;-9VHm4*PwcSa!azMPw{y$~BI){BrWK*5jcg||(_21ydTUk|F zzjp)D!CpZH@1!KXKFqhuq+b`>6l%U0`(wjB>vEiu^|w2{;?jkUA*wu|x>A=W>@d(v68Syf;qVVcYlLSZybRce%amY8$`^0va^W8Ue!H}%MZT+% zrt|N0iU{B9*UBji|7^sFo(BgzwW_6~B~sM+Sjuj1mM`^0N;3BUelN%8X7zv9Vc#L! zl*i5ce|B;_VrB~bs`j~&3!Zp1jN2!&F@Jfm#Ap&k2jsg$kk;hj?29Kfvu((XcfW{7 zoLr+E>8<%Ti)_BZe{s+kwZq^R;%Wq%yYKw`o8|qI;?8+!2p`O`Ca>=rmIA1kb)2^koD5%^Q3@BEOO9v zZ&-XK6>Z^niF1~fphWVIgci%y%OS?5rxW5-B)yLBk^Z)bBta*WAJxtln_A<_7joZG zM_`l$yS`^q+43IJL@(5uWtRXeRJF}79e<8xx{LJ3olF(FR4W$eBK=>~d)^Djiszz7 z&+XNhz3b~Ydc+)9VrtjtKuN<_rh_N-9EonL;?9n|#%{r1#*T#ORN;RWYCp7m#4UEI zul0|%fO%*bU-&Z5qi$gT%-EPGc<$dqK80}HcH;Qa+Q>)qHQ(LkEc~H>qDVe*mGjrS z0tFE}nB0~W#mCE|*j0^cn4jkG;6sojVq#zf=_Psn>%`=6W`8a;)qS?H)f|K4wFR3y z8LDW1zMUyqgA#GsN$ek5yObbpm8CQgC4f?LsPRo=)p>uIt;V6m8G5|jTXc|wn#gge zd^!A{A$Qs6y)1dA%UVr$Z|lJ?I#)Oxn6m!qbs|HGs{NM1UT87>>ZNsA+44x+@$&EC zXkh2w^Zi-|U4rAU-IR-eI``iGvvW^fatP~R?I0`6;3puBJZH9Rm%*RDkDJ`x<)^3L z^enHur@GkKz$DT_N%*0Wp~tubnWzc^!=jjANRUAxL4z2A;%+t_r#8=?hB;hExZ{EVuHL0x98c@sQ!8dyA3By7 zP2Fd+W@I&QlL=i1JEjFGOpZ1dOPTc6R~^56O5JUHBtE9RZ{PDBI;iAU^5s->-xi}k z3J}k!YPxs6jo?>1gEnFM80C!&n}l8?V?#alSnf?h*B}H!Lq}!ZQpwY&ELRCJk27H| z$s(Y5EmE!rQs5sN)s*#G>g(0&vgLDj?5(kI(W_QZL|wYH+gGm>+C7Qm&j|_DM@(tt zxK%yMlYH$I$-TdJ*-Dk;_8!if$nkygr6Wc)FCEVsqH(%&(xff&5l?LtJ@uMlPO8t0 ztC;D@8*Hw;-zHRc*8iM>(o@dTU6xZG3{m0g;l7}!@3=lVT5};OjEOJ;obH|oHdwCe zB-ZrMPI?oa8T&_6HppPPZc&u&;>deiHnhB?7QIyLA=2C&X`(=g{4>M5Fb84V0GLoTUxvD@9!FPHW zXg-{->EY8{cX-0*u)C}84qnNop!rjca@iC~XSu&sB{CVxU2UqVBl)+x8?Veyf6191 zJVXyWnXCDn8>bszgiNG!vB!+pCk|7sI!EuZ1enpPqnffSR+JtHTMzCJQc{(^ZcxB%@xC z78o}EOqZkEXj_H?JiFw^OPL~UJ**aIf0||?4z)$}o~I6J@Wsx903;ooX}n6_{xtrv zxkx;e`|h*+=qy*wg;wUZL1J(jQ+IfSR_{Fo+==z-+L6}q_z~-J@PZETi@%#KZ+R`c zzrb8$^u9*;32E)?dVw_@C92zdD;1yjlkh9vIy6t(9~oZpT)?;AaAtOPkMQ)Yatr^Vm3bOcD#?_DFf{Jt7^r zii6#rC`Ei;TW34Btvv0arp&hTqGFFrJvHbd3)2ulo>Bv1|8$X!uBgW1-8yl$tC>Kx zxy|yLnLm47qj|FaPlr-#1E z%0hVdpQ$}syqb`9xN*2!Rjhpwz*gF0|1>1RtH;IRNRH));d2q!*Z`rjmFmkBddJb` zPfzue@Mr?x&U3pm2#?e#<1t>JRed@eOk)!)V-SEApW!PQo73lM_FgycTG?WmVvgq@ zT&}`EuBW6cV54MvqQ?`HoGoQ|t3t;3Hf(@OB;1P>t(+HnpnR~VipQ8IHe-ulW{Y8i#=U>9X|I-ZJk%` z9{v(QLej~hAyPXM!`%G*TZz82=#QXsOvTq5Vk=7sk9PWz+{6rPdQaISX{W( z^=oW~o!HZQ3Fnfp@nL(@=wMq0n*sQSD$DMIuGTfeEg7N|QYk*d;M zE3?Keo!4?XDvHVZ*=|%xW(aHmYx^y=xmr0NkF`WY5knjArt|j9@wwQ2jKi0fkg{z* z{FL5&{e%=7P0v?rsKZOY(egQN9ZJtH9h=`k;N_;;gAFdXx*_-B@)@*wLr2G*{ThqE znZN(XeNFo2$h(Q&V+e_?gtT?zrfeSb^K!@jrU{}Tvt+62neIdEj=X5-tonH~@$ie{ zqXXkiR%0=r+UuhN)e-;ws>vu)&BZ=ZQIb*xV(?64EQLQ7v#MVaEmkY}{KkTdMj)E} z2O|n{m#*z(OE@%<%fk7+u7^J7_et%#qQ9X0J0~2C%g$Yf-1=Eu87^d5fi(nM%5!a}P+Zb@9kH1&L;EfOyXVA%*b9n8 z8kb9NqZcvDPoF775$I1CMu`th=@Y*0P_@+V^??-vuWs9M2o&Xd(dU^5#{(~USdfr;GODp}lizc$R$IR;^8lDRF88yQD= zc3Wwv$373&SiarSv5#p*U-+ePAErJ%-GWbi@z~Pp82EcpSxVbsWVo@)#ZOx@xKVTu)DufBY#>9GcGI@>afb z`$3Pt*0r;Dpl7Tb*V|RbHj&NaE?(oNlajUGV*YR|_mqVYMWA*R?|9V>T)%|f`n+M< zfd^1KeLup-J8`a7>An~w-*o@@jec{q)&J+H)upQf(O6p@4tF zd2S9hIB*&uAVayQ;%1#`mw)J8K-QxA;l|ED_hzRNw^9Ydzxlnz{q_C?w`!G@7Fm!hr!em?sz0iE%u~IZVUn$U3GM31JL{_o@jd z<0%lK&x`#{o9YEJ8qGd05w@Nr(GuYgIcr~Q$?h6O<>AB?Q{u_vep?7?yhNz+VU5v? zXSnHQ&cDq!NKhi@g=?x310W zljh$>Ew>g59Av#^zf=cBt7m_2HY$?teA`FB!MAo=Sh9DNWe0%jnwUsebT&)X{KSe6 z6W%Z9zhMndoea%WE8Nu$c4@q9FNnUVU^r!KKW~>(g4ZfHOi<(@aRJOoV!EF(Z74Ko zxA=pV%dC7X=b`P+9myA_R^t~|tC*CKvAUI2IF2J#7i&>kn{BgQWjAUg>NQ;bUiK(<7txMQii^)&oC`&Vk!Z3^I0)?rDgfd%iCAzz z=d4tW+&N!qcx)mBuSP~)`gFv9DW|G!$AqxynO7*Zn6&@pJe$jrF0HD*B>E!ZZ9M_E z3TltucMiqRy|C%|zVS@@ooBC4#)RG)L%F3)rynva0(>_FH&? z?c|ZQ5K`o%qii6JgVP{FI-H<)_?HpKL-zuH$y+0&!C*-H33+ucMZ&f8#j#fTcU`s)iIn`5tn z*2BaOq?)WMR+*Ysxy8`261jKJXit;48R{nQ!X?x0?>BFz2on2EF@59M37(Vnt$Hvm zS}#9?iwaiuEBCn-KQKAkcSEFQ&NOv*BQ0ib+U31&0+)40C}WUXVmReKKd%E^bG#j0 z>p+_=u48jM9p_Sx)Q-k6F9~;K9#U*yt)AxIL(;bYdapdeACl#*Vp3!0XVvL z?lmjiy$*}KM7Y{+efEdE7l^BSdmE8^{0Y$b*#W{|GAIWIP(FWopB|r10|1UMGdM2} zqs|h42Pveax?e|5BORnr0i4K7rrWLcJ)m~Da(k>759wo{OEtL;I{18dw#=lz4Zgv* z+3L3JqILhZpwOMa3Df52MzBC_iEZ4#Gz;BH6)g;}x5qu6`eg*4P!xj7|CVruLiI1AApsh)}g|u@j2)2zOPr-hGAix7!f9+#n z0@uEo?~BfQw9zRa9iTF!iLmP_i{NqNYwS)B>3MOwzeHWzET`ij?qXJzG}JXa8ZW(6 zfEwU#TT@3&W^Q_=USn@BcX%UIq}*^A0`1o>b=}Vcr$;}M#o}VW%XBF7;coqPvc}u3I&Ju| z$6#Uu=?}f9vs4VqPcKtn?=!RM3%baQ4Kw}5kbR|kr?s=Is|&u1*;x&hRRLQ2+etjf z&pH>|no&n8grq+b`Frs)(ddu^AQkd?MVstQkL$_Q<_B*#pXbS6lr2*-ldoq|Yj3m}a+8^(x)7iN_Hsek?_;Bd z)tC#hei7&eO7Mwc*sBQOo1z$~3H<%8exQrI>9v>?49-N%stLPbG#l%s|7?Do{Ozn#R z;F_)r*9CZn2MQzohmUvJT)|^U?f~PCxtf}IXPMh)4wN8z7x#rM)f*WYGBZfbD z{QtM0RKnFz$|RZq9_$lbKh}_Nxve$7Y_J@cy1!QL#YI#53abZXE7^@33OJU&x?bZj#4B5evQMo zY1&b2R)#jC)HAcmG}rN=R6Sk$!l(={YTCC_<&!UJQryr$ItT+)5M)7bA=tpAGy~HX z9cvP0@9`z*b4X+qeh_5j5S{+!n|MK8K(N5C8qFrwbsQxwBy%Ah)>PNjyzrVXN+-xIhBq?D$BXwCSyhmV>>4B$xlzo|)8xM}VM9d+HfmUcoU z!1GWemJjQ%nPp41H==Qyu7AnNeKv*epM#fePZRi>4!gd5pKdEVig5RIIHO74?~Q%h z>og-{bR(dEW}iPYd_DQ|#jdwhfRU?;Rp4(SV>nY!C z7{mANBvh`)emg5%fhPpvAJqs{iWTg2u6yBKfL=8@H^UoR^W2`!j&+-1yek9w&9ECG z(iC+NYRNJJap+s4dApcPM5C?#Q zXuh7J^c$hweg-nDAvK{CrIJQ+F7Nk_+Is4qa-DB(k$rP}3*vr(sw79&8F+Fs_8Q79 z=5%j~t?lsX58H`+ZI=^#pJxZjP*R$f_6P;fMeKwb*Nxc(8g6e!1DqtM(vE|O`0EW) z?mOw?wVpzMe5u~#m4~W~I0xGr|0dmcV9DU%niRYs&CP0LG2b3Ek)GN*_k(oW_n^4~x$rU7%Pj;Cv+D=@c4; zF&m%G#ridTVUf!DaMYv4%$l>%}vVBHJdmaY4 z6}dh0jBXzn#341aZC!d^;kf@`r#&VL1ON(a44MYm*S9T11JfU2XPR<@4n+pX!o{M= zV`2}V0*U1TK~asELGlEUyL3xBlh51y=K0r=`bqH-z7Nm%qWgVpt`0j%mQEicIE!ZU z(|z?o$^?U+x2ci!mwVJ}mXGq&Qk&&T+j*XHnB z;u=Wrj$8^~^Ka?;zim&^2Lx3wZycZi=#T%IbR5z&FffR0&W($k$r4Rj%0HTHfI_;s z%ujIaShCh>s2Bk_xnBGPUR3%<@vEt1@!1SS)5kW_VMktQ!wye57(wy z_jTgXm!{(KH#U?VY?j-tEnRdN0FC>MJ)J$Nu4n=CIE~HmbShkKQ+;X1%Jm{21`zT9TM*b)tvqkkCYw8h zSDL`VkFDIe*d>iaqd1&d;?6jYv^6o!CK{#nK~b>5hFVXaB1;)-G5lg$f~ zIGM5?LrMYC=IM%{pk~ro8QxGBAp+3Ce^7J;_WWea-3I%$5tXArK0VR+CcgK;F_jlab;Xgyor*AO$|1-6@oYn9!271fNV^7S# zxz3M&`Mt)mqT|P2mE=0BU@0ulqQfLr>QKhzwL_)@xZemiu?YHlKjOJM8hBbeia-C8 zM^VxoLsqZZR5}^5KL{=c?@o06yH732vh%(+rAP`)aT)P^aILSQ__#7Ga#$FLPGFEY zv zv|5iXgmHRk+Gi}4==D|~w-{TG;<$;ZXFM%mE!21QlEhraDBbQK|vK$MmeBljNoZ|^c+tlDV2@6nyf=RH@>65 z$RtW~vUVY~L!9U<#8I zg(ojkVF);!!l~3)q~bCF6AxL^2>3GUX9UaOam!5n3oo7P$?oyax2uWb>mFyTOSJ6a znda<&;d~g#D_(EIts@rE!14mHQ|?8!xuGGizJYBA`lW2~Pxl9ko+X1SOE;JgE1sU35qBR>>pALgOi`*j~8Iiv`Tr_F2o?> zq%uX&VbD%=>_&jXFlkCsO2BrMxi$m8e-t)bk%-z_d0-QK=C$`zhWLFgrO;kEqeBEKW%z(yTDS5*=3-0gIk7;|!`OX+Pxe zXpSx18w3bRG59-st|&=p*e*YUEhHZV4l6DZIU_;(d+gKC4k8pAdBwD|!LbHFf(&2) z?@N=xBbLyRLO>+?d6UfQ%s!)nv`>o}v;~`( zT#Y#STk^YtFwvaiwVp4(g3ON-=g%a;b1H-T;#7Mc=n__Pr}YK#W-#vBK3iKQYJPnR zr~E=v1h6og{q{AP5fVz{QqWR4{$AuHrg3U{===_v0m5;3l9EuZJ#>Aw68(g40h6SG z=-Sm*894O~n=>&MW`OVVSeiw2Vot1!D3+^n=0X_;$$d&!9-<3^n`L(Rny}~j`hS`> zALEc16-7viP|CV}Sf6&WSGB8gaw?W^`&bQA)T;f0gYp2QL$@Y4O3KAW3`h>PVH+LO4@sATDnQ;%Sh>Pvk`A|l3fmz+AG!a)P!K=_P>M(* zO;!dGUDBs)k?cHK^x8lU+AQ~0b1o|2*DFBaNNId8-eQoMXGR!cpq*zx7+{tjSB_Vy z{!x>iRTUK{8~zKc!?IK)#=}Vwi_^K1rjrThX^8A0>>=RFN_Qu{9&$FZE^Q$mtcpj= zk@~zrWY|DS)Y-LRrh{$zT)Ty|X0UCzPRAivOY!$ZFFT1wo$pb;ZA4~@jLqTs>e~-= zRc2zJPWRwHDC2YwzXS_dhG~6uPo!QWYrwgV5waYxT-U%HeS`)1pifY_{E9 zLnLMx1w*4#G^D}}hhAW}yTqdsm5EaZ2l#`}GsH<8x~x^Zg3Bu=BnAB;5dzdFUiafH zQ#*?ytS!oFy63&Za=Lr657U4DAKgbl1t~QW(=Gf zi81`OYJZrfP+N~X0UOrMMaFPx-=uVZo#6FewN$v^iq7P?evK*E#OgJK+IU#oqRnC} z=qkOT(g~Hzuj$hc;T(pL6RcK8DwXR(TWB9qg&FTh?2 z%5A_-S1#S>uHfr?4;v++USi>bn8iMpa7nSCF+&L~@Qav` zI*x1#2QBNTa12H3Owdelu{o|$6h!6M$bPv_#UB8Xyq*54lHk0~gVz3W#5X3EDogip z`tpQ>IafEs(G*)YJT{o^wZg{CP*>j9lkmuLS#-VkZD%Zph`oUrO|x!|yBjtD4VCjy z|4r*#7hiW*QQpB>eBgDl$2gmJv!}U_khC4}iZ_%i=GMiyYc;iVG4oNZENAeT!$&jC zeLgHZVC!Ki>Iq=)wiy)41hu-OahdW)Q@o2zguEBO8A$|s$@RCr-439D!%Mee>)(eD zv5~hJSDW1*!3ZxRC}=gjLDBei`b!fwfEn|fc>n;zllSZH_9t-9VS7ihYzN2Q>pq1+ z(t!#7`|h1kTM;Z^WAvoK=3CmP!1L6Rtya^^I5975(>!p?F7RpYce`&y$UXOK1iBCV zv>;OHey$dS6~SJwfqXF<9UlMw>guKt1p8|-uEryVOT>K>GMxJnYYaHP>-Pm?hrn}y z|7M;zG@0W$KeFI9spsZ29fI+to2x?u!a(KxFL)(4m|hv}>*=}JhdPRCVKr>~hC6@6 z{ST?SlI&k*+jPHu5<~C2JJ0Nh#HdvX^nKq)BC~b3QSni-N-k%u>q}|}on9Tgq?dOjmsTrc@ub5w8A%Y@=~2>-X&_M-E{x5oSD~E3c!IRO^9uAIZ4*j z4T!GioAG=O6CWA1%Mu*N2vU?wKd#$Z7TNQ)Nng&I+Pfv$`0jmleH8O@zHUcK-Sxw* zh0)kU28MOUic2Abr6K|`<7><)hpuSoSS{S(s8x^U57wAMz~Ee?NG&`G9- zOgG_FE(+&tT@OPw>pdO+OkDmj9o@XGRVZ`Ky@?bVfa7(4YFm!Q44+z_O#9ldY484= z@J#Gqx>o|e{q$|T)N3DpynO6Oo>IRo;u zCm=tg=*MepoqF%63O&c;QgLuwUP+6;VEIKDr-Wc|i%!9{+j@qLRftXrAq+kCD3f@x z)2y>8nP0!L%vy_Tq+O;@#K|Fi46@8A0W)!vvUXi*)t<_aT&-05JxBrT6g|r`bNaxmp=PBI~Rb}=}&|7cm0QM zINI0)O)Eiixlo7(yLtaRj5?k}X`JW5t)*`F#+U+1S3ZH?i=d|NxaOnS9zOH4a)_n^D zxSFe&Gx&)FAQLzCc?%#6G)J@T>KYhzG>f@f@$SwM8Rc$2Kj8y};d@i#J>tEeT_Hk}TRWY`#SFF` zO$<#sKr=O|fDj1tqi2xON@c*t#e)sQssk(Yj-$+IS~a4h@`(h&MS8IX386FW>%(UU zl0?hUHB#`ZOxg6m78qo>W~CumXE6NCM**@>t%fkry@$$XrP!SOh~T>R8p8jT1xQGO zb(qv7*IfAkKV(nvAd8c*f+>N^Uzoiwin%KRdGL1n`?rr37C&<))?lt@56G4y3(BwU;T&uar+21 zPhpxs-r8&}q|&1o@5Cr|E+Sh2@Pfk)na(tQy;yGr8a9AhX(zxvw4)S5D=aAEGBdi;|*&ALd@>wb$BCnJc+}`t#Z~=>#nOr zr4>H%)+sZi(_ifipX$wTTed?*JiwgaX^(NU-GayeYivdJcVo*?B6GoI|7}3$B7{4j zm#w(#xGgpFxB9eL5{FLIObG7K=!9)afh_4G#< zpkG1G{jZ>k(q&_!d|CD@x%bhI<5l*G{ns2{4X^qVI!|0cU|+bckziVigd}6?_~!3s zcr-xkxJVR8K_iJIwQQ&UW0r7v29=nMVh#-1HTKY>4z1tXO>AMjfNapn9eW$V1QZi|J;-lhI z4Q|w_X^G8|nk2HYk9BzZKGMHN@NMabf>{Q&%k_4S&KTS@vsCSy3ewU4k0i|awgBV5 zk}yWNzwjX8yWjj_fVsZAp*3Lth)BVD_1_!E_X_XXpFRv6w0-}BM|QvWMmWE8I&Hl^ ztU1#0JH`I^AK@1sIUW{Y!5WwU!860}nx)orpMW8nOkW0IAN3kWE~oR(6=rm#SrgUA z@hOwjQa`z`!$!LA`|>z7QVO%hyF7ybZOlc)FDQ?-DHY?apE_VucxM5EaDsWT?2rXH zjK~iDQH&)KZ39$F?yi{F?BQ16QTb%8)x>++^Ko#+=F-2k=hJ6`#wS^_VFX6}?a^_U zo#>d!zyTKRa5!Q*Vlqb=re8*aU_bbm1?J@&w9uNM23zpTM412!=S6F^5p(?LE(iKp z2802iASh_4Xdts^4@;Gw!~tP=EL>fw_-Tk@Kh>>j>Oq#}oh*)fg(i;0>)KViX7``E5b!J+z*$GonfCC1Xc>}AZ;cFI({;x!wG zyqtP^HoOD;E)>P++GIQ*nrbZUtBjuP*?1uJ_`1sq8$Na_5~lVpkg#Zl0smW&bTLWs zVbY)%0~53P7autZ3G>nO66bxV`{Q>02G4(>&MHe63>?49YVYF75$vq}o$}p%f1xwp z@d-**zv_Jjp^|8cOO#;~4TVRxt?HFD*FJ?!`Lmg`!1L@<-c{Tb877Ja@UJF;uk!B(mLIp|LWGm+`Bm$i}@@))sfd{X9} zsY?50Jgq@p8lz@$l$$B{0-{~U=W#h3uX~hqYfaDlA{&FlvOPRa_k9c&ZJVUs5BbvGCFX zCxz5WM?xZ{sLg5M2<%7eOdJ3QNY4t15y_ z)PhFRnBc2nLh=epX~z%3Z{I$o=SP^GQ^!lM8K>eH4Qa4dpcLa9lSu0z3p;Q36THuV zU8ykuQIsNOQK8Ow45R50DWJFBWZa4bOK z2fbs|kRz6rzVm-?R!qasw9bcC$>P*B^#p$>Xxeug5D&>F?`9|`X3Pc*jMeo9P81`n z@-^%ph@U_i2BNb7!`_yIlxj>;fR7IbpAQg;ds4-zIH8*}^SCH?CWPDzo; zKx`Z>4pm!y&M<&lL=bx1mOO2^K3`pF`|Klp=oN7i(br%6ORWk)ZBYG=NwM zT;@XGWeVR<|7_3L)R83*E}A;AxwItpny=l>iO$M7%OP`IRw`nCe30957Ewbi+>b)@pah_J47V2rFU80@l*`va6gpRiRKH68`oXhH(7ME~X|mkZB+kD4SZpao_axlnlonZzE* zuSt+8NM#a#hJ-0nnqg8bnoizOg@e)F6ftWP&$!WW;ZZRuzW? zhS<=*`}020qBy{ajN#)YNZYElio<`rvVii_IVp}Qn&!o228z0PGnrr!2!VqpNOE?b zjjfnK)#K=4AZw5@KuWF_GGgoIK`20|3!x}blEdSnB$KA&(S<@|5&%ev%eUuHJ`?pJ640N72% zGYZci5f1_X1RMur41RDVL?BW2F%$JPLpWf?g+(-A-^p;mr-G!wK$)Z!=T2bP$i%j@ zeiV?>4sjqOQz*Ke*gzPN4h7yb>qEYXQpk^wR|mot2E5y_q_T8HwQdMnkcYswg#@R7 z7{s;bgh993MdbWIK7xmqo);uCb;YBc4S2!^X0}L(RH`sxu@9{ESIT0BozLCb2Dfc0 zGZY_iA1~RLS>#6qMcGFt5kUZ?p^c?AG2xKQ{E0|0mRXElsY^kjYc?9dBKq5?WHK8>l+AB{qQnPUl7QJd6nDA_zwf1!K3U66%`=_MiEy8 zp;H85(i5f-`SX+|n{0Z{(-zP@w#g{=5%+TN!jZ2f!MTD9L5uwOS0Kd000OIARDLA1 zN+5BHyn2QBFD!K~A)*?>=9YB$gJIgBDJ`@;{E6``t0~UWO`^DvV9G|+kN*c{ZynWE z6z_YU;O_1OD-fC-gocJTl3z`tob*|I%_36 zIr;7V`HF$M3SvIJgt<(Avjt(EG~0I8$AVwe%=u)Eh@&>2xxu)jLQOy^l~*DO zf2((AHTo8BL6C8tAo>9;4p)kiPQw&rFl7e-MK}kd=0rxLpHPJXTn4I$!8kTDG{r_e z2`&X>G0G%efj*Z9ELH`vd`vMoX&-Ex2fzp>kFiWX(Y~LM9W@c^d4F{eOrOjF>fXC2 z2-#o`Lqj1H`}sE(;qN^LhD=YwG+0?$k=irxfDKw(%EFcaElWqH#H!x}lG7awl(y&$ zC#b~#Oys@7h_WIAWaPj*8P(~OhPP71qp+Lcq#@9ws1f`offbVO-xBL zh7x1u2o)e@(?KnUaWmQNv5Q%z zq(gP!eG%xsW&{@aa`B1eW#LdzG5a#|!qr*#sZBO}k@0MH%hR0r(k+=m_WSCG=wnCM zC#BrCBfxcM4Mv@LTlRhE!Z+c({GbGc)Sx^x-kKCZ)V@RTb!vrHj;+W7_>iEY8B!~6 zL5PAVonQi@AK~yT^cMUeBMZimiIfgVpk|_ml?|v@)}l~Q#*-cqOiY3;MWBwO9x*N? zz*bajLk;^cOic5uxYCvfU$q~WE0I!wVNugOszRrDK86g@uCW?&`A>KY385EUYjF>8S z_<6x;?CiTJya8&%;Fnm%W6_crSOy_`4Tr9nv%l$Ug)A&5*5AFYe=^cK?+RN@%&%HT z%^k`R^68weC(S^tEsM-86HH}O9&wM#Ur#sO4>Pxmbyr818Xm+xRE7yV@1Ul_MgDN- zZzp8d(cl}Mp(<-~w)E{3>!86>?MI7Q=&_yS_q86W7WIV|7N|9vOObas$XFnzAu?$( zusL&U&|2PFhe#<$p!t;401C0$&*<6wwH0KO2w{W#bvGkS?&>K*y~AWKg$zmr%LwRm z1(JXS1I!n37Z*(g?<{2(h|hKD&^obo*?Ag4_y=VX%B-+RKWsd>2!n8m-aICH7y}@{ z7G>>6z{DsDoEQ1LIDALYbNJUE10mZ6dfYj70PPYio{*v{lTCDION2QhT*ca*QT+p( zKA~7f);=|pU2za0Zn8|1uE-cNRzS%?0obB4Gzv4<#2M98MtR18{ha@yrzGdOe+nwi zP?Ta~FcEHooDk{J;^XlhR&Tu7Zna~cRUDy@W(r>TlgkrhOlVu+PQtJ87&{m`GBq4~ zDc&DvIee^bZN!Oa3W0$7I9TL<1=7tu&f{8A)&AIv%x#tH2={^t`^`<0;*L^XH>am8 zeL?$;Gchc;$yaeoow+u&OfGN3aw#omDRKB=A1b3P_Iwb!LmKifkpn0S`ja6_u;d`X z>ku9HQFxbV#;N$I8ERPVK^a*w5_FuNLr8v?LAJq?(B-x~HC|I+LTh@N!vJ5>JH_u)n6J}4Z)3pdh zRwA6wKy%a$z6^Z=lA2%q#F4GjU;NWquOdI{PsU++g=ZyfUV&q6A_|LMQX$$x9=}-^jx8v#1&wWky{Jr;JfYG(9m=(#f6LS2$kLw-Y&&b5rk%t-D zQC27c6-KAxvENv&Ou2!>`bP^t*`R~}n-ul%Kc%R$|2rw_hgrn|%d`Jj+2?)dkAho~ zsBN{*g04HuI*?bJtO`VtJ{~6eo-s5YU-d}}chHc=QwCJQ!M9!Y5|jDf3nlyyjcPY7 zzwh%easc?5@P8fhKd$AVlD~SsZW$u_eJNA*bvw8{X>(&3H?`5Zzb_A@iJ(#RdLb;y zes5gS#G+6%n>unNYw;DHa;3RygpCFwqGtF6U(Mk`l6N`3e~_H}T%g<8q0t??V#SuT z4^e)i48llJK~a`L91N<4J@M8GAt&6)$}|QFCY@$DzR-{DCHQs6VMBH%A7JqR(yAn; z(CaX-7~^I9^72t}u}}$#3OcX78T9un+;w5ArzpzuZfg9fFB=z>MP*d(Q1AVLJUYJ$ z2{3Z0O&3!UL&Et)5%Zx4#y}K7MMbu`eRyfF989>Zh}f+7;jj-F$j7=hT~s6vDHVnJ zJbb?3;h)t&p0r9S^gMF0ZA+qhM!R|zq9}9bwSS1uhjdagdvYvr5bFKV_4Kj;?Q>UG zJ_eCTcT`-&$8x(8e+gABL=rflnfJq8U)M8|lAj)3|E;&Poin-GE5LMtc6-rn~+8@VD)KRSS#r zxc@5hAU(Fz^)Sg;Hzc}QY{KIuR%(2}DO+%oGq8;Xd=} z@Gy{tc?{XrD)N7Y1B-3s=1r$_OuUk#m+7x}Rk;F9ZTyX{$Nw*IK-C7V_m-5)SMgxg z*Y`>0YfF1&PBT|XnR;`7#>A)cj3rWO_1d3hAD=VD8a-?#nJ4TXcc52lJa5y7PJHT& z?H*N%{*w_Y;ds!3;y^t=xQS0<@U8nX8J_G_>ar^lp9532UWfinPBcX(_6kyvnF=F4CD#k8+Ga*SNWP~Me{gPzbfX%yd1bHOu$p#HRZ>_i4suJBB&t7KL3W-$xFgql>a79Q zCxPa&j~&mCGherI?;rFy3j9C%BnL(hI52VLCzkXCXf_{p|BF~8b1X)A*|xLV;MbCx z!eJQY%hcBcUk{J_z5a34&Kl3FoDbGjxBk{~GcrT#_dYVwgzEESv9!5o1bMD+CU`%s zzKwQZ7Y~@7ewm(WNi#P&hgh`_z|n|MQGax^t>sHF z@&PhC`YgWt_iWvN!*oEqTuu27|JKvg!&*ER@}%ukDN@7Th}d4d2A+6MV}ASMT}CEG zHV*sceYoXZ?)v(Vuh)ySTiA4{a_wmyEjpmm>2{<2Swwa_JKy8gbR$of+#0hT$SR&5 z9f0c3y?a!z?7jMsRwBj($d4CSW7|4AOh1Ir_WL_7U{B>pJSEtpn z1|7IO6QoKVCF(qBP~dwVdz_Af2#=RoqU(IfN}z$HeQV7}#fNZ<@U>;Sv0R>)>a&v^ z9oOPpmC6+>jkGqSO81wbIYFb#dW+XK-BHcwH>tL3FC?IQ@Spjd_N&U1OXOLa;A043 zU}IO?eWa1(j+E@FU+3*u=*K4CgIGm{T<-z3t2a8U>rv^ACi(?o^;~J_F+Q>x&dwL< z|M0bHx{l@~Ieotws9{=v$<`Gt&Na+|`+mX0}`#!K_P1q0)yAjXWRvhNXk#Fko}4Tk{^35V;PPN;_NNIL#x~7r75xIYp^F* z%V&j)<*SubuL}Do6}5NXhbSjpYuQW(Pc7>%mn+sIE*||~X0Q83&KUyg>mEB&!vBRa z^05DBz4ZT+`_@z+nj`IUEyxOU;eSst-1cgFXz&hoKPAvVKUxH~G;78s>&C$X)~{ii zWX<_E8W$uFAiph$W?DDpDY)kCt>N|eOLvZMuah2Yb)G-%!NIQ(mk~um~W<(_=ST=u>L!s2b zp{_n@Tl7chpem*eG6yA0sSuAu5$ z`#ACw44J#ujtv;GFRv`8BLxu2gola#u#l;xrf^XB09H;w=uR+BM-yUJx!H|R+`7px zzL7kDXQz6onCSexENn&tcLe+QQ$l8#nXzt)|IYswbchG65rh9fF^9>28-8`$|4+kj z?1yYeSHsjlfri6Md~XFA%NCm)%6q|rx2<4CS(~Zvnm;Yb1bt$B|J#@AwtD4V%=Gfw zv$H*dUimF`Las}<%g1vZHtbx`={^vB;+QykQ?c!!tYkm-Vs5-IxWwq`aEnw{F^4BO8*$vE|$A zLi#f(2^Rd=s!srefjQ_;`4&3ZS&rj86skx7;SaPZjiH}*GVo}PK2e`R%bAp1AVJ7w zqa2xoNDuv@?DN_BZO%dc1P6c7#1W#c#SvilczMj_py#PE`7B*LSV)1*6u!29v8L6K zriX^b@7T-u*1R6=QNZNNPe(6_DdsxGs^R}~8lwW2p+!x}wjSqO3w5%NZ?5Vwj_K!3 zX175sLVEUpD;Ki$NZX0S4?PyX%bBLtbT)C1paYB52Y%`6bv1b38WPV>PE-Brh zoOAhae%k-H#h7~Jl@^@=`H#?R$@_CIJia{P`+|0R>+K%dxX;n6w-i`-o#G1D>-xMp z(=680DdWFP#TybPdaF&h3LEu=JHBi)J?ec!(4lV!HR)1bFj7tLMkkXNH@01zka&fH zQ@h6YwyCAe%K7m|Z+u+9e8|Yh-IoO&=w?zt z*C0N_4IFx4Qq}i%^(R#a0?_62ulT=+$JWuqD{N2ghIZpk0L*6i!dje~*QWlSnmcqi z;+<(0$j>3d5gJTYl;!r<;JjI-msc}o`=dC)e`^7HE{mXs7W@qhh5b;nKN;env>`W7 zo)wyuP3~K$BN3{~TC|REDD)Fx<{JzWNcT0H^7;A$ymWN;(My0w6%Ner!0QFhkIW-+5Q${;41q$s^xhpoL^ZLs(5g);KonOm3Bhay3zUQ z<973pL0AuVJo8wthGErn=WK>dmVU+SG5~kM-kPQJ{37?2X27>9nC(9i+A|^|;$8J0 z8_&${HH+mAZZxxh&koUPIYacF&~h6qzQaly7td8wLrd*B6Ra6k9{g_K5=~US70?~@ zXsM~ym`5eH=w{v6Dt8PUs)kX?s}7IYPvYU}evR5W4DU>b6sGvTO;=dO{0q&!!eb1dV9fO>m%-P78|9p21bq??#N7c3P`v94EkxS3~>QMA}+y{Z1ps97bs* zuZ4AHX%Xf(S}V_2j|9orX3QPp5gYdtmPHQ!b!0+dlwyI@B$omAsSS?KzB=7U2td?L zR7pqx23v}y5&tN3k;hXmB-J`a6L%sB_qRyG=*-~ITco=b-E1~`WB04^Ao{L25>f)J zfhFuY9e5lAejRUeSgNImzdkJJSpRHR)38qNnOoj^GbT=O{;%jvZmvxC;Iz)F=16-g}Dl@mH?+=Pv3T=Ih@YGbT)K@KL17J~qyAoO`cmoU_D$bv+0?O?$ z9;6zU%D8ugKpS<(PGjyKIIVcIj+FjE^W^Cc*=1Sr`-_F$)L+%75%BdJj>!$`=P;4$-3`)-R=s^Eey5;am*FRE^b z*?>P5?F7Rh%&4V7c`+VpU4)$6CN9PlTiFw%2COPHH7qBKMHyo{hJC3ec7AyV5_<+* zPq;A%?%aZvCQulz5+d;uAHJr7#VJj8)J_|+#Z4cPX6-oWU z`mS^hO+QDGgl8E=P;|2MB*$gcCy1xiFr(7Fb1?1wf}q9yv5*nCfg#7#!u_l#6ih%` zVid)wMTd#ChAPBo&p?i5BpeZQ?)mcdia9*)%QcBSG+Sm^Z>JfO$F3$McElJJv12i9{(*<8?Z_I zE^7a^gH$YyU}z3!BMti$)A{q_kZ+kNuPG(zj@P zs~FwoUKq-A+=JSdE!CB58D^b;qd z!>Cz>HaU3U+8t_8p7Obd=gI=N6;b2ad!H2f0j((`lCGH*oqZ%Jt`o*jJB=T^nv~Rb z;f~b<`U?8pv#zJt!S5;6@m-!(ZmTvM{6>ovZtYZo+8PUwwE4N#+6VRJm?3^3BwHe2 zC2alKvRtHnATCK#46+6QV2aIoRU8qPaNviK2T%yc{w5{zE1L-9gbTZ6fx}B%tk|d2 zk<0N6Q}g~J$`qCj^OIzI^v5e6wMt%pnI%zx=x_(b1;Ne{#w@}^MR74#P-*c;GLo4o z-~VCkw}|Zld(H(jMwas&O1Qe#3PYwMX%TtjRN9{>XCqTeOst&133gm`xMTJjf#UfM zByGz!tHYJOjTos1vhN%0-pGQ#pWvH_y}~S8myZ7?rG2>g5f8iN7OFIt8<`z=AZk}F z;$7V)`Mb65-pMMof?e1cjsn@fu?$S;M-rN6Su)vd_g~ zUxrbTju-wY?1mPSuSBX_HY(3>e6uQ^M#B0O5l`hZ9{I~rnsMDK2l_)1jbZ|YC((Xi zT&WsTv}(d0c=!}!w1SeIhW^X1Z^iC-?TE&yv}Fb5VWzxvWtf?SsUsO?cvx?IEn)?7 zRO?oK*?LS1jn1UvC@ygD@A_e(&?LDraOMLD?rnxT(?{05TxME}fi;2oW_g)NfX@SmL7} z326}FSzrJR(GwybYExr%ObF;_y+Bq^&R*VKTr*!>%3L`T`}SHMb@mcA8Wv;#ATcyR z@$j*;-sN-H4u**o)GOyuN)`;xR~VM7&v%uw$^~JPOBp}`%NkT0GEzr}gye7kqP(9U z#>8vxch53+*y!}$raI*K-YWaE>Q(!X_|}u6gwa{<)+18sbgswbXp=l&_jH*Sr-S6G zTa87_9yCb7to3n~)hf<#%uS`MHvZcDx)XJ9#?6vQ$4-C%3 z>W=#rp@rUl^2fUTA;V0oO!=4mc3@hnhuyT1vsdN|!)c$-tl&<^+Hbgd&ty2i!SNOj zXNzHrp&}DSVnbhmt;j@nx_hGpZdWBWB|RHNfJqxJr>dwTtD?d1r3^-1q!%asgMx00 z{|puljRu2i29dqF)Txblj78V0)M5mUHeYQ+p(hG)_z8aX8SVl79l7JJxX{T^AJbRw zt;a+(!tL_JQf<7qt1bME#ksXs9`oHr_JLcuiWUwF_p5Yw-=%tQ^GL6)x;neSJMScY zQtWS>*quLH5vpe=yZN>8xJ&PxJYLTv_#S*aByVDvekO_1-JZsZAE~QkNUbUu%}P=czD$@Xf)E)D0`I~v0zLp{NCS)T#r zCI(PTP=Li?D7J%i0*VvNOhd-MBq(c5qsWiZ&=}xdDDV?BQ-4oQ^Ec(CcwhhzOn3Jv zWj=O_g>tBv*=2Kh{1vpYgDU_fvOFI6wm9{F@tl1L4Y4=N^&DmOnR$qCx~30RB5bX@ z?r62$df8yKKHt&u)+V3j*uRWq5%f8xR3M$F;)>zj-Z3M0nC$Mvnb&5lFcPpm6gZ#w zcG-4LA({K6l=hZfqvLeGCD!tK_hsf0-FJUS6`gPtHmW7YLp9L%#5<&1f>FB=R{m!g zApz{r)Zf>Lad zCkG8JAZ}nxOO30JTD!efjDWMq3p<05S#z^)gE=qI$CX1D??nT=a>^z|+D&oG)P$*(SEzW^XZYE319v;8 z8Qf`jj3+Y%9T-vhy^fnZGP#?$T(DN7cwV}vOb(-w=up$V{v_x6PJ{$!!Y!b)8t?ik zOuSv6x21HnNKSG_TUh#>K1{6D*K$+xoO{01Uy#hr&TdrcHXG2MdOoFv+})UYKacYw zGw{3&&e&x&!UK%nm**_}jYIgZ&-q<~_M^iJ&*ZfmrEr>W*O3bwH`B;taDW<_%iGex zD1p$g-_A3R>}Gn;gTvgX*_{vP=Kfhvq|T5T@eCr}t$CpZghwicybi`Wc>y5hfz0!m z5F4Fz>9DqHWPh~n9sLH+4ijLE&H8b^giUvPq_t4xb-X@6?ol*nxr1`TipCku`%+_e zT6fei4b~Dx1}H%JMH>~r%?&8>If=KJjE%&u zUd?Q@w`*D)%ILQ|QQ7pjoDXN>s}jjM(YC`S%`mb1zSJ$j z=X&)0cI@(;sg)&Ga+od=a_>Hg<$nuY(c9>S?$3ScRPu6}Jmcp7&3fXytGP2n=j%J> zI0lVI!v0%7VA4`I7TWgkd4izv5+8k(OkhupbpAYTCYH3r_@2E7{gAzCCC#Rulq}y8 zV)fe}ou%t^aPDF4x{AExI)qrz zeYu3?b$R{$t_m`9p1c1Y5LEWqU1kyb{e3g&p~F>}@H_iqtJM3eBm2fpQN_mlq>wIm zThU~SBp@xB&FMY5`u?^)8rbu(nCA0Gq-OPb*JpqR5!lzulAET!TCXtIV$KYE zB*D-r+jZoCO)ZApwIz~u4XqPAspVy9E;_c zbJPlbo>%J{wQ2KkgW4Z4R>p4_Cqzj{p9!MU7IeHW5egePO=D1DK)7m5H|_{EY#7ld z#hI6o~F$m9c$T9Z-bQ`S8OmOm=aV$|+s9t33!bqv# zx1ilIgQ<6$9F>J(-(Aw8BExT)^K*^@ajwAVOO{ln_9OxE^sj36pLP0@S7x#4qPoww zH(j2lMitIjW#lfS-JD8HN7+H*CVv$4Uk9{vH&(d-m%w}CWe&@y;0to@!i`^7W?pZZ z@0a<3&mD+MBgWlvTd1CTUgwW8&?8i6S#EbGGt6YV$M>E#uU1wXTy{Ba)+ZSzTe0)~ z{%d$R^?UK2x$frbMeZjdp>LP7Gh+QD>~Vn8PWj!x^&RFkhr^|v;hHhsPOWDyNVUT- zythG?;LBvTQl*xLjHEn)>uF)}SWU-N0WjU_5Pa@9>sj3SzG?r;HJ0Ag5bAz!bU#fsKqr;0FVUqQRe z+5XK*mau^GLmC(l!R9JxGohE)Z2KoG(T9M1LT5&jAV``7pq1_1zg}4ema}QI@(!(_ z2B-cid#c>7W1RS;F6JPNv*l~Esx zuFvVj_K*IaRa&=gd+zQNXSqn{O`+QVHXo`x9QEoz%J1Ri&!I}=Y0qQC2d4nbl#G}_u*{`5e1O0bfS$4w_) zG;!+$*|YC)Ar(v7zs&`5otf0SwQBR6;U2hMIsF??`Ol}bssk5w_FK?GZ6`}65LrYV zQ~Sv}F*=#^q#$&N0?+BLMWWgIb@!`WtxacGKW0g8+d_fod1h0?_xDbz+7YTpy&&C2 zCNcGVt9esS2|={uriaaa4Lpqya!8`oL5J@kBGF1Ztn?2h;E-c|X9>KdSz2 zZnYe0ClH_=4iA&=z$+evlK6-jJ~77Ow?ZXbogyAX<3ar?oWjorJ=Dr}R(n99&wNl- zj0Ms%;g4N;-PC6&dq^&}9pE{q#!nNYTd+O~WFw#XZi>)wo0vBG*}*%>1dRJX_yyEw zd+#R25V+r(uebl`770bOCWz zhKbs?*WK#BiUTM>z-#s>SHQhSXsx}zVaC3df10g?)YZK8h~;O$66qYPhcFe%b50pC zSJ&LFb z)+D}fbg|4;Z#T{KX3@l6m)(E3_N=wro?1f5_2-eK5h8;8{N!ojf_@7T0O5YpeH547 zfWJlDD3a(V0m5>-!FC=kUo~YR7ppR|hv8R=3Cs-i%hoVrIo*n)o`3TdL;oZQu8+)%uu;6#L;%f}CrsDAZ1hB<@D)9o!q1`S6MzdAGjK4_n5 z5d44wmnRkOt3=8lmAl*08knwQ^D%OUq*G8|5tasoyGbY;O6`RNtVnT;h`Q!ZXfGw} zB$#J}Jb%T!BTVzVaw+~jWT*K!UEaValBy};dM$r{&EKUxFKki6qU$l98oTIdE-Pcv z{XLYFwZQ!~L-3bpO;#uF%>k$4)24k7d`bf7C#~0ZEqc4F0oS{Ki&gWdi=k9AmL((w zF*IJA;gaGQbI}jcg6Fj?B(A$Y(e#e)hhaUm4|aMDeXhKU_(ITyUjJT%1UedvYTmB) zm#(uP+N`Z`8Ajf2MZ4Gq1x-%l94sc&%2MA(@MFnW`47(FHLg<*$bH=Q15hV@Hy(0a zkMJi1nuQE|nvuJ%qLs2)J(RN7pItMI5L$Gy|6(*O6fA zW;9dV%K*h<)Y_3}j=>R-x%-jP@f0hynR<&_q|ODT$e4@`V#mtN2NC_o1pTHY#7Ll$ zMIzuL!fJ-$Vf#?n0IlrDTABs=t(8ZCOvPu^NbwBiH%`fiT#d+vLFGsSDt#!zJ>f_1 zYWr4#gwz<|yKaU%#&GC}1Im>vGSr(yL8Ts{9+8JplXu8%FxO+lMM-dRKd+O&*16GP zr~);RnSAe%E&^+sx|_PwYF4N*oXrmNC!1&9eV6uecxsRdh$?_aa zWwawV0^AwsV{Y!;Dzt1B$D3W3?;heS0CalKENPRq?MDh_WJYDYJ+L!0y$%ROYC(z^ z$@%Yg{cBbm`B&z!bI-kdogs=(+iZa*D1hhCPi)*$%d^LF!z86WfjjUUov)hGFYl5p z=Y^|Zo1J`JFSlRWEUI^Pobk%vH8t;g^gFz+;1wT-(iO_;ne|xTpM^ZPk_E-qD}FlP zc{lO9_Pf*R*jp}fb-kSiDs}w&audz6db?3oqR6*(T}SjyJEe=`B2_5;Mz-QlL3)?l zbw|lK&p{xxW@9JYJB!ll^&#BG9S;x}#eaUmOtc2EGVF6Jj+(By9b`vpr;d90$h;7u zU$1A01X+AU*+$z0{%^lo@M%M`XOibji=Ov>)cwe-R z9Vm4jmdBzw)Y=a@#=bnblDW0?8N87Sx$lY{=sV2~z|qy3^dZNtdGvUXfI}rA7t?`U z4EcTk_~vP)xG(no$;{VX3`9YCGi252<&+5OPF~1ef0=dddYcK(#DBY558iS~^tRdl z@Y3_X`l_Y3D8x!5s+!DSBT}LkZ}_5%lK`E-8|0{Ie1#M;+O5_L)2-GA-f4}sZwb@* zc-Y2-hJ}45nJ+ANiiKuuZoF@7cT^#j0gGp zo|^xt3b{hPY;)Uv6ziCs3`<#KzGu; zz_S(pl2WJl!*%7kN?dq2%|m_!NsD$|m?kt4vvP4JUec1*+`EsDmqnC=zieY&I4WZ0n!t7U0<@+@D)d&iG1<5CA<~V{G=9>5 zsx_;ardl;wMA(=IJ0EiX70I#XxcFUrFnb4mCh|+GVC5{Q#fmc=5Y&ne>B3twQphdN zaVPszNtO`AUtC3FV`H^$=l7cxdf!^e2hKd`XE$N7*yj<+fFrPL#dl)WbM^+i@EU>HqEkR^ zKWd&~w^ZwVmrz8^UV#*@{+t#$S-zP1M-7#UDV0|SO2X$Mu(WXJHQ?7`H+Wuq$e9OST|>-e8-30y z_>BEuh$G*w2MgAIan@)zKIWLTc@kHY$RDZVxg(P=MJz==nQqy*IuQ;wsZ;mZ$e`Wc zs>UE*Np~Q&O#FG?FH#c3{H+9nC4=FT=Uj#=MaoTwyAaDaS3^Itj~pBE?=2c{4fW5Z z2>ov@z%PEdZ6wZuL}?yu?XmK!qPaiUNXJf-%V@@0gZlUd3qg6Zy}Ma%=-c7CQ5U$q z2d4zx`1c6$Y1n3~G1N;Wo7ei#cs5zGo#$gCdqmJPAclx}}XwNzzdGkJL0 zH#JcFAfn{jw>pDOBWvB}ug39qQpf>9)B_X+48>c#ji5b^bodp>dxnC7;)5^evmUHM z?`UH;ov56Mcpz>2lhu*wV@>+k=JYJ|S5u-+mMt8DIMFvbe*h6B3WF3@ff1WCBFq#6 zMC}xlHrCr4Xnsh~MNJ_pAJ;uAkD{h9=1D&H6$6Apip>WL;#7rZI?g)v8&t!LTP#Zt z=e`qh~s~4-`=2 zpaM!PK3qG^ka0?OigF7M%U}hVx-+d71ZTpqvuV1sPW1u>hK@A{3a}#9O#$V|A4JM> zH+3;nDdXaVXVz%x@mY4&-y1(c80?s4$w+i);g}-r@a&3NWdRIWa3r3}1K(YG<(b(q z53ocR*~He(`kwy-?74j;wyQ{$DBDQoTd8nO3qwOz4GQW-3mc2mH3W`>6JbcOukmDXw9tD5a33du_YJwaFW^_-7c}~Ry$WIq) zJe`QhAg;@JepHy6fKC!Bm4E;&n}d(p0((nbCpXd|V}W=9*k4^r!Vi&t^IcjzEu5s{;j7KH7)pe*MH%J8dSrl`*k*5dDPe!8 z2?aPvSb7^a42c6AjzH+jsFXwz zZ`@M$%W=>eDZvB?8BHowzWhZ&2|Vfud*c@2^{ZfxI8tp=)0k3+lQ8AC%gTqdLzk(^ z!!G@H%%ZhKviyn>Ao~?0%$zEw%imq9KwYDTf*Q{8P;81&tT{Rw`S4X*_jz?xoZ>d2 ztVS(($srk`ah#t(deam>k)ICC>jJiaivE2q?hJ0*n*2rDH_9nkUZ-o>wT#Uwj)z z_+6=*1EvmL!xJw~oliW9a0}hwFlB5*g5W3^432MvHBlCn8xc;;lMlkD*r(gI73L5}e=EHhi8H^gq95n~P#pv1m5b zWk;P~9g|WOE5^&sseFa^pB=yZ2AsI*dR|dAn#VyAXZjPxr6UG_LHT>h5y9D7oVy)A z*D%m~nN2RnywD7U4f4HZAd#U_2^^nVGzkbnaf6^d)AT)FaK?T}H}iMXskm|2D}ObZ zxr3zUZ*OoBw4gs~P{gQeL)tynEO49oeomkO8B#^EJdZX5{}b4P{uauDGW=3B?PfHB zwXj925`PW;R+9O)$2M+HGgp)|z7JXv+3K6=G7^7qI2Nr{a81od4a%V;c*P<+LCC{w z=16ezhp_DvS&o+F<)&J*#5ho=YdHSm!KCoB`EDRpQwIS?rMhftgE=#V|NOx$^5(m6 z!;$fASXfc&bnsr#(62VyTp?%$SAXSf&qpF{TE5flE{26Z7{f?R!h)C2P?v`l11&A9 ztyeS!*zl*6znH(w2cY7VSMIBiUzb)6Qy2LE?L`t+$NU7wO1A{1R746?31(F#ic8fh zQ=y?cD4%?*DT_72jF_jbxYwPxasSCGJwxh0CSh0G5gFiy!`Fp}0qlzd5 z{v~!B3;zHRAOgZPBOnoZ=(F}+%}q#uJD_@j3xmmoql&^dc^8o9AC8pKhaogOB_bhF z=sIc}w(`n;vL_P#O!n`OlKvITM$231g6~}+WxZ;R!!W}-0C;t3JLvG;p1;={724uB~ddMq|}I>cs}bj%^x;+A@xwyba- znQ&4HHa=?FgGCxp1g@ZHuQ-muX;_$i7EkJDQ^f$=&)B@@_APcz6tZbQ8}q$7kVafy zdm~3B4BC*lKlvLfQEB@q;7_P={@4rnZVrpSl+o>>z1PXv7a+edTOP~(`G-Vq0W9cx zdw2WX1J$Lce&dbGx-X&1{mzxm`f;)2WVdUyCcDc)Ldm9L)^~IY`?Zn|ziC#%y5~^! z{l2aQHSK-ywMpM|r?w$8(9~eqsfi^G1j?q3ba~wcGj|DIt;Pg%sb{=CRF~H`tS=rCuyTI zCvNNOx1UX4?33W+J2!LR_ofM@&b}N7Q9oxr1D{;P~|Nq>Cg93bunw$m?*t+ zU*jtSic1;N7Z{;)13g&TG4Diy%?{(LZAayqJWx5P3+-5<1AVIHN!}~OJg*=*VvkJy zi-IFda)c>id0tsKcdk@4Co4t+KRW6mC_&OMFNA2*S((KesaWJuT%!HKv|Pk`wj71a z=C3R}@;4_{+^d2B1X`?jWz;3Z0Od8b$Ln*&R9&2$ zj+TQ(cw$oGY!Qt^I3*zkRwCpf#bFag2!U@?Nl)aMrTk#e%mlKpy7os1vlJe;FYC29 zPM9q!gUrRn1QX(^#aYzquMURz9|AGj%HlN~1@}Zkl}OuMZ}#W=Jtpcn3fc6pPp6ko zJo)Z846b1{eBK0z@ob57gvNg*vhW}Hsf_61>pMbmvG|_9>95NHx_7|4@`^L-wM`f$gH@^9uUwUAWO#+vWGTS4qyn>s0;rx13Zxb1oq7`q#~bplSc3e{@x5PA2co zveehksnEz{i?dt4<88-@Wq2S&_n!jbm!j$WIG$|q=cIXl&yDxh29A&N z2zd04&>VI|*X_UeK5vey1@5Lz)Mi|O_HQcl&bWreY)AuSLrn=ke@*_t^_A7fA}4(S zyb3+W{y}hWU?CfU39yJ8>lt-lRjDmCx0)p&WCMnys#Vnn>@5#dg++1e7;% zo48uTHgq-`Z!t9{Dh)bEp{OQ5S7ESUW}@1kf`<@<(=55s?rW5SjvAMSf#Q(MdQaIZ zstY#v-JFm3{I|#5sxekZgYc=>$*5xeWYcj^De7|bH7EX>4NjY(Z^wD~c8?1}-}gE+lF1~S zEKakdcBVBD?M%YXT^;l5)UgbE@hd97g|2Qr-F!@ zkD4p9A~5rd9ol+@%LBjrx}5hMs&4*YjLzE4inxYyQAzc6HXdS~)Z1$vJDtA$-G747 zr7>qr*Vc>rk^h6Xvuvs>e82O--Q7L7I|O%k5AGZwxCHluySuwvaCZ%Ia7ZAyLvSm< zw*P5oI-S1i2iVVxJ$q(9_qx`-7OSAkr&p*lKe$ThY8!ux!o$kt~d9=P~ zP^A&|Z#T(AuyG>qJy26N*N=O#^_5-7` zK_q7_!9fb@ZnNkkK2x0NXjRgRa*?YP8GmaJ!VJY{_w`^g$5j)PIhq#bfpl(NTvC*x z8WHa4Z4n~d!^@RQmv=W3WN2M@_ zM`V_r4eoq@0&Q9vyYm;!1}rOB>~0PTYEFxE$fAReNVI3hH0vnPndsLFZ2ZXvx0AZq zhOy0`b$-uJJ3`HkxtV3*qyDxZL-9oHH4}FmzsdJlyE<5Zcz$aFu(i#c-(enDR;cQ!B4Nwy3^N z-Mn91*4MkYy|KFuF6(VD>A_lk&*Afne^ydtNyr4cWqafm$Q=v zNwUa=#}Tey_Q!v7TOSyTh{Xy`ja`PiwI z)h(GX%w(m-G`Y^upc_+wCgF~%7)l7i~QnSl%P*1^D8)|ej=>-YG3BWvYgW&HwgnlNek!+byFfmJUT0x-Sp^UroH zPT&1i?1rYgVMi}wEG?i(u^QWkQ56(+(HzH08uGXz%w0BeI?7d_X%)!@!KO;$sPl=FDJ z517$5`z#FZoGVS)YW-h>K7nbKHlSZ`PuT1EX;J&z#}rQOrJ{LUF5Hm28R>?gi;N@c z*_XbhQ5!SbOTCwF2=MtOxGP%xufGqPt-qzSWj)ob;77N{{m#{JeSp*cUcI9lAn<@+ zr0bwlPDYWK+jqF|Q2FI5GyZ)nVDnABxwZ8G<_!-MPL=?jDhz)K5c!Ovu=0BCv(s~1 z8cPsJbd`tne!Z*G?Y570pbb9(Az{J=Wo8jUDHbMqQ#1R70Q!y#gC%ib2FaFUu9ON& zSk(-^LkZhC+QHL2cmH-l(ORcw9X*b$38PtnPJ=?sOtB^^2dOAL#XT1cnT|<8PEMd! z&;_B9UMBg)%m{fJijy4*BLjjRgqNQk#F3c=vZnNilqGMZ!D$q@=^1p?dNOSwIqTL? zYjRM+c2Gbm-=2_c(3gfsGW39M@u-2)eyEP@q^EOt)-ma-wyVZt6cnYb`p5UDP!vKZ zX4X7aL_|PhEM?!4kZ5wUaI z8-??*dv0nL`0+mp?!VcySSi-6F833;p)F1YPj`CkMNFQ0qxdtkUXxXj^bn&l*QGSLO1^?zu|4L(EW1(^@(lFFF^n5#=Zihv+%rf8boCPn>%~ zHs>uAG5QwgRp0Y?)-=tnIt6V0`02|7nE$T)dXl<0y7fWU+y-fLifc@`DZ5%U(q>ns zpV|uVrzdM=Qj6r+d$MCV1=g128t3hC+M&vR|C8}H>56wi*jml*l5H@Y{^_$YnP)_} zUjWR2WHp0->z=yFOOjt@R_kIfRar68y*rqQ+JuTC+Spl1|D}_gISgWD;?lsN zq9o)X$8$4}f)2OYrfMQkCAZarq12N4qDuXRvYeY`0X~>>IqPdqW)&s?6Dm=UT(MHE z)g2Umnx1`b)kXtF{yCy|TZ5{gL4Pr&uY}P&GC|n%OB9 zkebUW_Jiz>K+$zW>tA(a--SAnHuAq{ZXjIDr{P`tRbA)I`TxsE3?U?hjs1F1oG(~@ zJ>g@#-lRaPnVqrh5pQSve__4nPNY>^C0pG$sDccP2Xnxje*=5rXiPLv(n^oRmSkR+ z{r2xrt}9NK+sUkRMolmW3-WJYse=Htv0n{%|nB)&#TdIWqvjIhqpR@*N+rm2s=x~MuuIFGGPH4tOL6Y8IW03=vp|9xl;{`~Ah=uI{6e;oPNrb3ppU9F%L7-L zjIvT{=EA*sPFU>_b+OhdJsc?v_D!S$3QY7c>DKvK<+Gcw=^#%eUp6gA_F4@LPHw3~ zV!_y|6QQp+KT7~U$_(dCWJ<3dT3TrEDbz>b9%W`JFbE6uOloNl1J}lb6y|BPA0@Oi zeo*l!$6{H)!B?4?91;H<9;fG*SGV9vEy7a5V0R-5msG-W*@*^iqVOGbBNS@@0y#z6 zR4jkxbmgyFNXX=QgiiZjwXO&OM7@WF;Zk{pdepk2o#ppF?q78B=FvW5fq8R#_8Wn{ zkHsC@dTuN3BDPQC|5#s7!<6Q`UBDqCPZyVXS{_d%Q?hh}y0_&bE3txiI29r9-;C|dbLItz z;gVmX0~Vl<>Q@c2TqtFAHvsG~o%)I^T^_yMH?uOaYh_JM=>LU{DXhX~ zjp;dti{k|UR+y%)7y;8pAztDGrQ&D3JxVX5g8Y}Ov~qhF1NsBEngyK~=?_1pCp81I z0PheozB9k#r-6@`mk)hiH7`$+)0O(2(mgZ+4hy2q#CDU+d^l34Z7G@f^`G_^3?y83 zA5gZx9C(GBovM4O@>o4^1}Oh!IBY~33JIlcHzw!!9hNVFiSE05*Z2O`veX)bj7<;W znW~dHWdHy(WpyaF{7iXuN9;>6Dd+j?bYH*G_v*at)@d~UtA>!Lwd{}Ed%aT}_*{+4 zO`pl9wjRegQs)KPI{h*mBgvI?>!7DmVSXAlzSX$P1YN; zwq@7~09z8GFsdlr7}1_lfy2Y7P#gZD6d90ojZkjaGT34%YC)1KK<2K|6TGWqn z10+bL(V{@N)4A_RuYT|w4&xAj2Io177gV6E-)$8QkUU-dRDh_&!^X!? zHK;5GBI`Ll9?z++8Bm`k^3&`I;hI(iaP#}CKOC}B^NLOnm*=^a_t;nCvr)$f&B->B z;@>A8XSw#{T@$EoY=0fDxC|#8O^DWSod}(i!Yhz84J%_zgsTGyX#OKPxQ|1G5EWk&@$t0$oc;W)x@X3L{f$xWi1^!&vExY^jGAru2;FN&e8k{b1ku-D5KFXLTcpKBi zuKMBn){$`q2F0jQ>*=^CFko>yb*!j}nbE$u`3$BQX<;_Q04wK~Os2+ZHU_x_FXi@XjMZ#$y5VPWP@tBcdgV5p{4BmM}_*s=`9FEd=SPS4taZ#u+fl4fZD7n`1*LK~$_O{U`y9U9!NslbI zJGAwa!GHI{`9Xz+cXoREc*4dJdGL~<1%=95p`Ey$-0;x2z3O5(L3TB~jbKw~(Ky#j z40iQv4KW7;)fVwwAi#tH!xiJ`rTS-}u+UAf`2!&`=b6TvZ}s|(p?S~Fvp)?s!Tox* z75>OLBz)!)*YA4G)C5Iet(EC+_|d8sn0XH=0E7}%u>tgL=7TrRSZo=nKo5qEu&?61 z(!_MCtslt>o)CVSW)%UD{1ucIu4>d%vw<%W#)~9mk__ss$wIc5jY;;oX;B3adB0wqCrt_Y7F0*%m47)_P%> zv?Kr6oJ}s+$e{p~qFmf+FfL+QSP+^hk>~@G#SC;sQZ%Y4%AyUMve1ZPn~Jx{fuKq{ zc9{hwYD6WmacErZUI{I140_2HTusTsD0#+i2qrq2hJqR`7=U!j)ioV)oNNrB@Ej>v z=?h|2W?2+2(dq#DGICI66e()V6|Y$ZkE%JvWw@*qh~x}?)X^K!_Z0g#7+v>F9I?>m z(;F7-5$Bic-A=A=+lMcx(6A!Bu9cx0OD@1w=BaZUt;i~+1qq==Et^_}$K>S$qSIV} zYC}iKH0vY9gh)alhgRmLD4M4aG})!;CvA))`iwXQsqO@*c7Z=FX`W}>0QjAgtcOcP zs92$c?Dn}VPx)Af@7g8X62U#yu=+7(i)X}*oSeH{)tU*JIh@?-s(GI!L9>+%Fr7E6 z9<;l+E#K5dwM5~Pv_OH8zIjlA3hEPI*|R_01QeJsd~MG;poCUm9H)M0Ja zl!yx|Hcf7EYzzRk6*Odj0-NWVBy|od;BV6JVn9J*lPhH&2pf#qhZZWTW+1CcHO~C^vpN(fQVAs}K{r~T8%9-^nxU1> zX#2eqX5ydn##rM;Bc+@8$%=U$n#78c=9g2+zHSmE@l-Wh_z)yP8A)_{_aPCNVIwn% z4mGC7k0X@ENCl(kVnUq(HcME9q-ewpu51SkvikEzq97q zM9xbW)ST3mlrw&+Im*e@vLO|7D8Fb*zgDADV8Y5FPjG0M9ww}r36MZq(g)g&S5QF; z<{!dKpCzoKi)s1cJ~wO8z{f)C<8z8)frvz^5h3+8c^Ji|*eE%;FI}y)OAAb5;SYMU z)OOKjyT``=AWF%tYr1GirIT|6LT`IQabiK6P;&4{)=U4bny^FBXN3jzOYYK$BC~C~ zS&%WCEsjg$y)=$w7}~U>H8y(ydfd$iyVihRMpftPL1B=U%c=dR6*}k}F~&#TxbQ9! zp&34NiZHQ6xby9h`#Mtr5g7tYvl0R{Hj~h1q^>M#%c{fh2bpUGT4GSr+@(L+xSIDw z_a4fwr294y3wj!N{cx*U)U>h_dilM5%GMn4euJxEdmRn`(P8v(I#votAPj8FrkEp4 zakpsVxL**SYd?NSn*8d`Vt}PwCWJtv00fzeor^0D6SGeP#7u`2HGLCS5wjLSqM_lS zX^H{VGTh-skVH8a07Jb-7E3>s4ptQ+ngarM07oMl!MCFLxn-RhC+k}vDEzmS3#(la z5;8`=Cc7q)_yK^TB~s!Qof4ljJDkq|;bb+qph}?#mvF`*8#nPT1#ohpXn#o4;*MRD zi}$P0RHFKO)#KNx29q_$ew;!iatJf>FILp*Aq>e#oUYTA*!G^FPf*9!<>3voORG>- zfQns%qBgsvkuScm;Y#KCR4T1b)?|GD1{bT4=oEP#w`mLf7>x)JHs5*oBYI`Y`LC7T zE^A_jOZWbiV-41q^|8LESk5>?Nx%3#rF+88W%1+G2c0aZ39WQRy4JgPK`hWfkwzt9 zBfG0C6%-{G@lED;zx&@M+H1_};KD1#bjnHk@}BGISC}i z49dVL*}O6JAI^HFPS+h#qmrF=N9!CGFvwiwFnmz}IZ5tO4?70*`LiG{lwabfNv;KE zMF-0iFf-0bf!@(-woYP{HiXw7%?}5r>RKz$SNgz9jb*4Ul$ozoTy({OiVSgqP({In zNj7GfSe*RSYRO-JQTI`!PRzuzcVrRu?8Hi&n@QK*BAXFsSYX?PYX`w*c^{QUR5d^7 z?~uLZXlQL|39(C>=SM`8cXgh`bltC?8eaY|rfgDn301Y#3AAn-{nKxc0+~PwjSeIk zFak}us1;K8(3Z~+eBiyv8HD;S-Xj-EyO6ba6sAV|3i$@dA0 zHYaPd#nCudn=UGIz-1sI`g2sHp~*J#Ij-+}9*Xn(Y#a%uEah%CZCk(H{Pm3*+3mov zj~A1&iF**4PM#hPiml6$i`JY)&6TI@FpSvULqNW}b=p363s)ZqKfn@7`0^P z@Q8ojXCi1R8s1^XowtneU4Cf6=j$zZej(kW@&S{?v$A}=%(my&WU;edeg(?kAZOG+Fam$ya*51g&`e?Ua@r#V_x=xbh>3CNlp_5O>NW z5Vx=Fk7m|ZS--Klwh4SzU1xnTgD6%@9HsKSlKoABM}CjbG)>HyPt7)kaM5Z2Pf70# z38>o<6Cca@$C&u3O8LJ0{?LYXiAj&iXRlE)RFV*bUE=%q4`Qo@p5MopAVXrqgC)TF z@FM(M(KI|jlj}K4(DCb?iIjW#lJQAf@6#rDNx3V>fA4t1$k%S`I=z1>%reaVdvD84 zVilMe@kJ^3DOxTpOzP8+aZoycS=96jm972ew*5SVaK?XK6k+WF73grA-+4T9B06V~ z`ptc7%~EUmP3E2~<-4c7uFnVO>2|H9Xh}Dz&Nl(e3(#(Gcvh-H`gT{t$^2MHgus?H zFYQ{afKsRbeN8W5{x&Wj09dO3@q~AK{|EqNtdySxN6W;M=oTcmrk?V4-`tEc%isfU zVdFCV)+#Wz+=t$)Xy$r*e)quII*MrO^1OF;_*J*_mPDhdub8@8xkay}`<{RcRRe6^ zvZwO=fSwLAqH`JFR3w?=cNJ#^Y&hkhQ}b@myM+1C0pZ&(I{-kdg1`4zaW+;UK$p+y zl=7Pf%MU2AE@%a1Iz|80o)0B-cD2u`RY{s-|}w40^Z+T_qny*g7Wo8*Z5fqKcWkz$fpegI_}MNvOWhhhgbL_il10 z&&yIHHo6U2GE{!Ga~!X&Fj}1sl1V%YT@{)HX4+3AMZ1oc`OHnG2-LX$oB_3VvvezF zGF7Q7Yat0wpBia)f=bH-4)K_^^>l{(Cb#qG*_YAmeBQ6&>q&QkSEN?ncwEA7Y10NskDvMQ=|+ zt*IQRBspf*``vBYbxiq-AK>~c8X)F+ZGB!#7BGI-1|h{rf&hjnELPH=<8Q+suiVH8 z+N$PZ_UilF&8bmeH7gX6I$0Q1tFSGkisJnygO({^$m;97@t*Tec1@wGoXSsx|B?Fh7<+ufqD)9S*FKv(O0SHt(<2&3)v z*LK9wq_E()8MyC!!qDvpY_9ePLK&x_#Eeh>i9WU1?{twM{d5I6}J?$(4njB^)p-H|)glTW}AFroV z%5Px9Mcmil>D4EjzACbk_(X2Uw39qvUr$Gd9N&qbCSY}-@1OHM9RoC;M)S#hJVuO8 zxDR$e_fQl*S1hw1#KaR)Zp^^?3#1rLtzcbN+<0mWY|KvwAiX#S&=(LnvOA4Tr%%5} zB)VV}vqo7c%@GOR^}}_YDO|Q9C29mCq1F^gj211W$>jJ(4WMHUk0NJUV~`a2C0Ziu zGwURnSwVYlO9BOG1XE)rMiM5O0dpK}EY7SXAOz7NfI%s(+Q4(~$<{xmhx?`+r10R5 zK8DiZw-!Y2_~#KK{`BP2%H$Rpg=Rm@W29gvQ(??qG*DzH_UmMjr$7?-=r5WaWJYp! zB!*HzjXM*>b+TN$;6h&OSuj@tJSQZCz(`?=Q67Mtf-=cR8bT#0Cj(iOlc#K8A@G64 z;CA^kv%lf_ivmyGbyxgxwd*BI<5S|L?*|&tMKHFSRHI(N zeWjVTJD(4tIYj5%I%nU@U2{Y{%fzXW#ZoTsT(`dyR+&-R`Ek&>PxXo2BqQ)avy+Sv zQQmAOG4H4UpXMpNGx?=u(r;HcNtUIS8uIXgXqN)N9|$~VS{l<)rZ$Xv%{^s2Jh2V7 zCl({Ffwzau>#ZVx?nv3s{{70eYa^?&25hLdCch{Xa_+tU84}Q{-&s}1b+{LH{kUb- zv=D$*_3sP%@p6llZ`jc%@JHv;>vBz`&JN%6WPUK7pcP`H@$p&qn@+h}dj8Cu(A7~e ziVx<~+gQHq`!K0Y+oiG{pl+*U3sv}XVJ%&SY{POc>n5Z~)>c#Bn_Zny4vQY3DNyF7 zXzTqk=eczoAKO~diYGz6KO*a0N*m9#dh-DH(Pn@8N3zIjtSR92LNDN?v{(QJVzdb# z7<>7nQ7ja_rq!R)w6+zTVX;u!7KoUb0){m4-NE0Z^%K)Hnr1Tq#x_!l&MF}-E~-LH zmI^_%^onVMu)Pu}o8ZZhb%|3kVR>R?OIi|Kr@pA`1N_VZazK@D@qF~@b|KY_4esH! zjx*SROA2?bCp4oQyH? zwx|NiG9<;QUKr#>fmLL=kF@)(;2-w3=9f{ zW+E?1)LPTAz?B(OJ^sF`lG_Hy%fyzWi_0Bgc$yb!#=Uof`mdv@@?&07ufur+1pCf{ z@r~y9dzrL)M*!gUZGPfmChzCxx)O_uMRxsqdsD*S-e)I%+hiZCDr#7OQ;FFxl=yo= zYu%OJEm+_8oX8cX+<=!?AsGQPmo8}~qj~7qqzf&? z50+DWhLgq8_a5fRJS=Nt_QTg8xE=qS_e<6dBZtsTAo%N#6+d&@c#_TLOIsbI=VLvj z%f64}2fG?e3?Nf9IlYM(04J z0!dktfDpoz27{i#pD{0nF6ToU2*8BPD^TOXwJYMkWWM>v!Z?UOQCcR%gaJ!V&gGA} z3W-1uL%B<|f@zt##%scCC)J1#`(`>$X&-|Rg^jq4fG+|87KbMZbfS9F7{VQN6l#N& z%n{`)V!Tyg2!oX!LnE*C%7aZ*U~KpoGo@VZq(E4yoE5Yv;oMG#Sj^?2>ADq`5u`8m zwu^bQk{Pnl3eVSbS1^zdMMtWZQOhkR6$IIvtuF5?!e@zrZqf*?Tsmeu2#*vEUx=Q_ zr{@oCB4$sjKPUIf896kuN}qdE(8iLw0R*9P_0MndZ;!Z?Y=wNKp|1<7-7zA z@P>JUrf=4BT-C_+TyAy!LcI3={OMC{d;$gOUjBlzTx>Ixi((A$d@9@82Z+`ybzT7v z?|>OlFe<828 zthy;tXDz&)d}}CwVEWplT6f}-F6=p8&^FlGgW&W2@T8JzwHhP+3eG!b=hS;A|M!sZLMDMfiD3xIMIzcj`9 zf+NVWHbmenpuq$q61y~V++0@ML=eGD|lu-}QV3hP7fkK}ZeDCXB z=RM^ULr;_Vpt#z7=0?}W(coX{dB2*eFL2NZuh+86^R<&U|Jgl}rmp_<8akaObiCP`%`Dr z`l<#vx?iuap|&w#_jp9JAL;PDhPnIk#8yJ#b~ks*%J*%IH-D|eaZ3ZKO7px6$=IOt zi5&Z0#9=meCqt+xw8H7}@bdNga8{raqKkdP^5c*^TN57ykQ)kuoy#>zQ*ujGbvc%)0VanIP3jH^H%PAQ=NX;_jcBq)sHo@ zA2}VBaw>@ClQu|5N68>n5^_NU1SGb|=rfjn8?0`TK2KaIajQVWbSey?A_o**`+ zeZgU2Iu*J(n6_!2D>|1}*tY?DBvlIj$BF;4{dM-}d*!8`7=`s+M-GZl}4xs?k>}5NAV*_q=rQW z0PtYR_T91EhU)V+_XcyKpLv3%+6N7G{F}>GmZU}avIOq41x^cXb0JJ_Z*Lt9wSkq7 zRj0F>D!q^Cesw5R&p1)AIWBMi{#f6!#;k=iXY;;Y?|b5r{0-1Dc}#drZ0GUv+EVHC zn*F)>yst3xnE-&-_j6YjldXPk9?2?>l$YGt`7O?!=&-M)w31)%W44nYwcmI)*;`nY1_)g%5Z_FJl2rYilMH!v9nmG>Q5{ zr@~T8LYyKso8VI!wx+Jlyd<*X^3As3;Zb5xqu(c|twoOkhE=G=L`Td@v;rZp`0q3g zbgEml8-L1CuRa&dNAGtG@&jCpf`)F9$*m+cmEDOU2AW_br6!$MGMOo0p3fm6RPAFH zCiw(i6BSbf!Lk5zf%0B%^RFZ>-=#!|c)ShRPM|JvW1wL|l-Xq1+L>&%t%8Gid`9tQ zVm5zqiiTYwQz^(Q(jJ=r<)R`d5Affequ)tCfP89{$nezCvh?ez_^Er>dDXSU;PaHX z)9XsP;imP+JKfl6v0%NOmzax2XqLF<(|A$(QE7uBq=G}qJ>Wiw^5BP=;Dx7hZ zze3LsbkMvge`{rMT=`=x+{pJq`yB`4-`=Da@?yxcjkIi67OrXZ)&t;Em0JEn58=dZ+2N4#Z5I4#nkWiobJbdYv8vf zTZU2%rwrRMV3w371Xc55($}`&infgsk|n07gYd_rDU%i^7YAo;QQ&`3V||viHGvyi zMJrOk`cQ$_ei(^?DlBTOS&MNv)t)%r|mF*^bK7V;Hm^<$(|Phaw;R!iqNa4Z`Ru#l;q~d$MZhTyERF`(fGh;S=WY25xvETPa#nP3pTKY-M6Ig!2Wd%p;qj2pG|^-8c`6BsnWo zS|1tV(H2a481d3dtg?z7-c80ZR0cI~ZNkVV1OtSb{^Gz~e=_yc5Lthke@tjKz0Gj7 zOlq`8k%*bg5Y`Ojro|Sq!5NT-;>js7*;!?{QJ`_#K_`gs(GvZekp*f_!^rA>k46b; z7zDN~_!6C=wh9vJgksf_83zI2NqP#)crg5LTf*+e=5F|}>E?tS0``g;y%a^QJhqG7`5ipgZ;LUW|;D&Rx>iqej7Aw zHqHkdiF)5k+T|sKgSL=L+@yZx@>9ZB&aWv155lOElbzagMMC3eAS6OT52T(X!XylO zFyr|{sgrg#+X;;$y*xfJ|3NlqC$`@7CuQcgKP#LK_TojeQ=-$)xpL4$ zi^AKlMJ1?XLnBz3LkD)_6B*Y~oENI+*rNkVd&q_9&_d<#W!aHlBH7e*)Ut?5j?e7Q z#h~z-6V%my$V3gZr`8rU3s`zgk{5<6PMJs)8-vDEXKJ}I^^FDnu;yhY&1zeF4ML#Fi-|O!dUR zbK}`dprV)2n<*@=;SBXzU$oqTtz%*FV5?{$nU1=Z0jmAS#$%iMKhx01^NkhV|QU%n$nf**EJ>1+IQg zFGzGmldkrJrnX$O;yI37%s>*`sVH8jNh~tIPQmzgMNa1=V*Seq`LlcUEEZAC9C`-#xfRtf?cDWa8vUA*Q|s3qyYWV!A_ z162c4tgISg6I74MS7po!#S-}vNK`@wpcludjvGk_Y#kNG@e;<(zH$u6>%oMNoY|){ zW}cFG>I4Utq+nVB?aR9G1mbbWsg0?M7*`E;A{sD=(IKyLa-*|!%>zS915cx(gSjyD zc0AJ<;K$R}I5=f!9EL&55gBQw&}3hVxM-W`gyOe@S6?ZWIrwcBEIe!#4W`b%CTt>} zCz19wHgX$h0el%Mrr3E+L|B5lg}R1<2NwHYi;dqOz6U%Nv#OANyGjh@*-Jk3-;H;D z!Ev8%mVx^I7xHVc&o_@*UXf*5|9^9KM~!PLGLkc|w6s_KYu3jH=H9-;=>f0%7}wI5 zm=oi_i>6GG-FkIbF^d-R7Ubz$wi{SK9;c|x($*-8KrrP4!E`~Rd4Ud@`dWy69ED*3XbB8)1ptiM+=dvgkp01Xy z<~OYVshVA^EGQ_H01}=490Fi)DlQ1oDTQ37zYoKAG~@Z{KRo=sAeqKpV=seviJ$aF zC5TNq%@txB>Ti}s;>Sa@So1+0#v=ASNeg;p95w*+-`se zE2G-nfx9XL~TSOCzMX4VC<=339xR4gch$$k~k0JDOP zN^Y-Jo~%qXaH@U5HVDYr37GWW`$3nS!q$g3^ z(AvO!TAF*)+-u?8tOIFz>IDoT8F|zUwHU+CiczZ_pRSZPHLI#tXPk=MoS=bk(Yks&wR0nFZS@0gj1t7rGSK3GW=i&flRgbi$v8v+Fj@J&^hWbedqwB zC&!Fl^znsQ@N*#{!h(eZL_b#&!~wi;hPIsOgszlW+N``-WXs|P!niVp2F z3JX7lQ-J-n_g=ZXkT#HV+qm(#BdQbi*S~n#mT}Z+bBnYd?|9e{a;y@YAwHWBQpHF=`ro~c59MuQihHw@1cEGQDF-$C#CNiB)j#ea^8?>xzaG#2m&Jgf_ zzV11EaCu!>A-VgP2`HbHvPcnJWCG#8{c+qgS!Jr9ul?fZ^->7Vvf+YpTZG7JqUQ|1 zx$(z_KEC^GrMKYwDobp88S|EDpLrZXM?+1+#Z0=ku=;XVv1wl=X8?O;Lxb#P?P@pn zv!P~MfXQN2{;WYCe~=KZ(Z8!{M?izay9O`J!YM%0ci-JQ{nI#)zZRg{yVYoV{x(7nmSoeC;+f8oPBE}+0;!q4;7-*rJ~2|~jC2Cqs;DhuSvO7$`y>p2q+QqpB4(puktE58er zYlC$jhmDbN%w1{d6N*4p`iYt_JuGC%P?&h-Gpk8NW&G2FJJFh^)0`2K-<^oF!DqP) zhAbr~KzbcT0V(GQC!RD{=LwugHIu95JD!@)?|lyS(9M10V?6UH@%HlZ4Wj+q!$%na zK>W??^5r~>W}^zT{{O^_*@8YXBdr1rC*g3O@$bXatOGaMAFdBa9eDnJ|G*n*Bx^nY zo)prm1{SUTc=N(niWr!VT<(ASJqX`FjBvwf%nF{yb-XhNto~e7zeGr`1EmJMSYMvA zp1A(0=!Oi9*CC%PdJNR_pY`(fwK$fDuNU4AHc)2$*r!T89_8tLIAZm^DDgwud7sI@ z*Q(zAbC`F%R`2e;8zhA@Q54x6K8D-p_At4=OCcfSeuGX(y*d|Tpu970BT~?n7vLNp z)z{nk{ocw5$Rj zwwsPrCqSIEDZ>b-==ZFzYb)t7PoKvee8S1)J9;^O=ltNo$`+aZPC+i&$TSPbTY?rgmLroLa1kLow_aS z>@7pHTdJL>cQWu2mvSIdc)(5cCy%{5z1;CQMSDLz-oonpH-P~&7LarkrQmbm+2?;|R_ z)4dfAue;kq&vq>Z6Y}>^7wV&5xFM&*ndQ(;Tl(dy!~UMsoFjHyeB5=S=gmLU*Y#lU zXpeIhuO1m>K|iNb<7V>bXY!tNOY1J! zVktucFREl&O5k=;nr`gzUa@P)xI)^HY1k*$?BX{0?xXVhH?Oa*9>a`W3}%vwgo*@f zB@MQ7Y|VA-!tZ$B0a5_AL<&9i%f22tH3@tjMd8hObn)$jB2deYK1kv6Qei|KIRrhL z@0}l7ZMd?HZY2pdu%zXd6$1cVwY&nD)Gn_hDK`BInk#9E`>~wjA&5X~2FRp>NO0X~ z0fRtP!!UY2b`0<#6@dm$vUNBHToTd*!WK8!g<1$KZ8dM}V2reA@V0CzH=fNW&8Ltz zo|da3V>7T?ue+s%ul|F7$#H@Gna|pn4IvcRrk6Mhr%0mqb{5dx^alWC?{yqM7yCB5 z6m)&JKejfniHGg&1KxQbzgb2B1on{$JoT<&>AW7y?8^jfrtm4c82e>(t^M5&Wr&0T z5LfED4Hdu55`bI3w?pKMSnqNx829-3-DpNvp zzi+*$7ruKNEisBG6m&b#bOW2GEl|vcU79by3UHl zjXphBc%dcGpuI0OO-Tk!s*! z7F8uUvl||Nr<%92u1A%XiF_Uy|QvFud;C{8pPB5hOK!zi&PeXmEZ8*K4&T83!x!~}mEos|B zHdA6K{f~94$K4r(`f?8PiFM-S$2i!$GuVFK4KW-1<@~?1wUz?{sp`Epg{8U^^pfs$zv&-ku7~3P zH_F~JsLiO2^TyqwK%qDVik9LIEfgtI+}(==cZU`z?(SOL9YS$;w-k3LSOVER@4L^; z?x)@TnwiYx+~-bmpX>LR@6yE!2|4KBdfaX|t*P{0Hu5e4&O*g-vzG&Rq;-J}V-@5Y zfpu=Lsg??aqP|P5Kmpg4J`m@(_&FUm8JRUEVtINc1x%u>WU9AVMRkuuA@Q*vWQHEl z6oK|8Pax`-e-W0F=O5_Hc)lng=7Vt~Sf-H~`M*}ZKc}NhG_$hbmtN!jsWg2kxuS=o z(D*NN6a^{E6@kD?X21+FNKR-g4?AHAesm5OGkrVal)qr+@UNff>fm#w3n3oGH45SC z+7P+?h%14-r`PzKcN8%Qw!P^>yoQ ze@p$q1uV0+JSrTjPeW_UWX56+Hnvhy$MET|u|eBGj6)i2}N zA$9``qqImJOX8-|QVFF?AKK^l>`M#V5f82YUhRry^L!4IEAN;mH%~Lb^tUVY(&z%n ze65Kpn|RAD2-hQwmO+@dj2{-(7ts*DKfIf-by`1oh;1U0p?OU)203dnBLwA%yR0S% zT)qy4?jyKU!hB#|l{GJOIj+A84nkWGHeszX?!$pQ5&t{H61Ux}>g&con@R!5f7)IS zPB}u44(PqYodc{@F_-ln93F0VR4u^;XOFCU?9xCckCz9KfPutI6|B4XqZMU~{nlOO zFsS+?4KwoOSG6h!Nm>dIxQ1#h>M+}V9MxN`5ikgSe@SfxyXuUC)@+AlSo^zb_3S)T zo$|k)2QCAbX|G=AfSlszA?=M^9I7q%Go_xSV)xHdNo&);qYf3j_e1>tKX|p{iO+-Z zUv`CvVD$oQOsb^L6#zsbB8;4RzqbFhgWYT)VpFY0_AXts(B0qNv0HW^g8y?NBsd{^ zX&0G>6X6m%cN4qgcrH7=*ub9JgBzjcmq+4F>|KZehu-5A*8!lyym5OP)_FB1WDLD7 z>l{#=jCBXRZoj6rKsb-9R^jOguK|nJwUF5}dZ8xES)Mqq)!{x8w$A%p{W22ov8YXF z*iSwH^z43^6(_=^%rwnt&VBNdj7Azh5I`LKQ_JfRiW8=q6WP|>TiPvvK)GLC<2o_w z56=r(LM0<1YedAT=El>C)6%ey!4~hc7sMQ#J|SMh@BcpA?@!w_>U`8#9;mIkV1Im5Q!@n&F5KA(oD3_#n(l;#WT7qg zbZ_T>ICefT;e&B;y{O3S7#H1K*M3>Re<$c<@L;T`_pFM~vG7tA)$`Hj1waE*yPef{ zq?){SaR27PaLH;v8^mh&8kSMeB^Lay;9D9eL8Obx0edV-)bL9&mubxz<52P(?ULT< zAU4zjDJ+G|nv{F=`^O2@X?fo@@*=nB7{Yqha~ z<&y+#Q$&`8l3}8}No{~>bjasg6nlgT(>^)2V9Bi7l4+k134&Q4VCN`pb=c6zp~6>z z$twBTRFcH1H;6S>HTGTK0nyA~Ld1ypY$lwu*&%~2~G$1DCy$h&yAjPVg)82L*UafA=*JkI4pOSOI?uk2{faxdv$r$O zdRWMOMV=zpFlYmu0hJ2_c#k$TpoJg8pPnwN61L)^1JejrX5|Du+cjgg9) z5H!L>%zA*ygHWJ0QAJP!b*#CA4L%e4}fJDra}jeDa2nRl@Gd$|g(Amjb`{9lIHY_K!a8Kk47-Ik?lR6d?b_*zWj3v*2HB4WApe?`Mp` zM;YdJ9?2ToUB;WvlzLdZZ`BE?W!&`}c>PKfGmc}xLZ*l``c3ndRvtZB=pFfkD^2f9q&;ST>>hZ zw$V!*QBJ*%gzeY+C5=eQzZa-k#1Kk)bdk|ZGL}?x(-(G;W6=^}N7Z@k!)B7jDDQ{| z+h_;O%qayX2-Ea04ddc1qb)}L`?JLb_v81|3b>b}EqwmvhyKB!ww*Qq-4lCE1QnX9 z+jsF^=efbNavxr*cehsx9{F0|r8#PLp|iF0kEZXrpj79p=_eEk8HB2OM^YICrwhg- z=tSc7C=czLWT{%8G+bCp8(dVO3u?esbD@tX>0wp={0=cl?FThIy;gje*E@uj$EC-J zpkC!R-m14*cac5ko=6Sc<)NJZn0(8Uy}Cte@q`Kk3Q>vkEHtEuSl^u`UA|#EYZcdM z;L-QKBP9!oeq)%MiN{oCY;{o|KgSw3(V5jLX&;_JPA~b3@f&BdIKyP@Co>%9%kOcu zmK>g#6=YKACi$|b^u8yw8IclAlhp>Tx1H$+tT%Hgk>LZ#M@C?V~-BoSV zXVYMijz2oZdbrj0Agv^cWSnh>;;OJ4C*G0%>K(_B^leu0x7L zSxs-re|&f|*+DUaXeLX|`A4O*G8A6;cHF@4&lh=YW4^8)nahhqTvIT z{_y>F><-m>ecTSSQ#HvF7te0pxCudmT;#W=e)33Z<(M$t^y)A#+hVn$rQc2jkDGZB z-))zf2jH?i1cnc4Ywxuc>{^DdyCO7>7Hp9}kVs0>mk?q~rE}<0t{TY@*-A<)VDd;e zJJ}Z3to2wYeoa@HM>Rh^nAHqLL^zY8k)Mvu&0dMN zp(w~*q~%PW+v?3`yrk9g8>P4k{@nejnGJc&;-p`5{q6JW*mFjNw9-UY=0X#GYE&m7 zBa#U#*5rdJH)cV2UVEBqbu!I=&jwU$hCkMSe2A!Z( z{Kx?6yoRx%x);J*+Hg$vLWGDI@jR>3x4a3i<=~POs}`cqq}gEMPop;RB`~a_)Q|<= zK6IAVtVVsgQ+4PkTj=Un(Wi1UQGMEJf;WV6+|zV}0de_m^2T3^R}Y&qC=25Jb92_o zTg*k)O4Np9#5kq&Vtw#wrq`)#y{TW?23o|F2G}uK(0;lw{@msrTk6=*w>>xL4(t9h{cc0yfkLdmEH0 z+BbIVpSCe^_y``B%(JRc~6nY%TqaC_eWD*jTH^g z48_>4Rk;AI2Ob>Zy27{Mf$FeNcIAI!OQ29BCoAfqkBv)f!V=sBtmH5IG!x3~M)k|+ z*1HACR;Ki7zYzw|`U)eYrLi_bg5*$E9y!eji4NkP$M6pqdg^WRWJ-9EJ~g_+80mkG z*fa9t(S6p)L7RS@6L9RhAm$kYH?Q++QC}k;s*tqoP^R5eCpFvhv%W?8us@h`pR85f z+z7u(7)#8#8P8X|5t|L|s+)A!LL{YyOPj(KlHjCIlEAd2>Bg*>_XD$AWjceuFbN}$ z#Lr@RTQ!QHcTohYa1lAT6qc7q@#rna8w%XHdsG{x2{Bm0a`RX0y{z6~<(MpvR5Vl(!$W_A-lhZYdy)#z$i zHYMrHPNYbwsjlv+S}pEy*z&7u%=ivGsv>{;ceT_!zO22N7yrxgOw{S~#Qztn+^v9IFd%M2exyee%F> zSi3cPw&?bniqeKZZ2b)`jev=C=D^KF*k@%85)}z$i&d(nmi~*akFq#2UpCqH;Fa|! z<*MwAbtN5vpWU)!EU)E1F#ZfFkJp%ZX4jG=_@MP&=ZFw75kZJCSJL1oITl(De}%_p zMUMPFA}h)V^4H_j|DZ*h*6QnU1NU8R@%Bpzn$?+q1M3*7ypi?oA5a%kf$jg*0=T$6 zuv%0zAgWq;?=U$@epW-0qhC@H3=+sELFh1!#~>W^pWD*SZXMv+RAOf5funSM~`Ge^n6$Qz?|8x1WH)IP}o16Xk z9U}yQHq{LOIN5%Ala*UpE@G8RK}GN!`DIt#D)~PyvFFpWDRSNNIjxKr->jR#^?QEC zhnjVr+_SmbquussVJ+K%`r&_+wT?NoX)M*DMh)=`s0qBK-(EwUrk5TNbx!~NNurm* zVCTz~C4mOwzjeuTfBXy~E3xd79~#6&?MG`~$j zz+@!bGx4LnKZuE#DZ|7($LgJ=6Q~LxsKde{Wj#?r5cU!#&%YuaD$ie+htg7$%o()Q z&`gS{YCA)nV0I8Bw4$iu!5Qo(A3SSYjgg*PE`V%j)wv&|u#iZ)%=3dZ{kc-k&QM=E z_GN?Gwpzf~AHEwB<~n&DnZJ@%1d%0QwuHsnJz+}v9-l|+0^DpOL4LuxzlRN6hhxg9 ztI97DQ{RCzoHu`7-5E+eA5tSDY~5N1p0}KGvcQfTMdBJKlR4Shs(f!tQsOk4nNWuV z)U995)J#niw)E@0KiqYev%`8zH6?Od16+}OmAj6%Gd2-S)}dvNK8Rq0Z1Pmy{wV zj>hNYOZD|q7yCYUbjh)U{`qC{578L2###$VgtQJkQvw^gP)$L)iZ3>N5xjA^b$gtY zem)9(1R!i@$^g4wW;yUUrY}8*EVT`I+pF|*fw1nBTi7KHHrtN`4D4{_&gXfu*mKSJ z72r0QIpAS0vtQD1`sG4w83(nn00xEyBP?(}E#lLF*mE(CcT}}EU0yz*w`h=|mPtwH z*VnjczX}~j>+3WN3*BX_?~1?zR=i^)`99|-&*fS}EpA!lL@ul=N~q^4G9u>^^>L7+ zY^J|;7>UqEvXYT2M1M`M)4`;u`8b)zgChH#@B>O66Xud^JpxKl-;fIiANqsGzWiE2cTZ19%2v;>B2{)}t9bcBeoJcm>%83D;z5jaRejKJ62!Rgv=r;CU=GLH+Po)kGl!QzkYRW`jnqvs z1&4O@sC3->Lpx=sbDrMo1l$I~9fJ>jwQ*ZM>mtpaY28kvpD08fmOOV^t8I#~usgEF zyg=P?FaFL-f0J*gI?QVV$7%S_nkuHlU&+wm5EjWcDf8%)k% z%H_W1R^l|e&ojG~DjCk>$CLq2a+V$F85d&D*m)whpuX0?+cN*f3a`g@YrlIt!(1;D zRhb5xovQ8nLHJal)N(I3OJ4pBqe?z2b62Vff4kG|Ay-lhziJGS3K zpCsAfOn*-UXO#pLH^3X_o-g!TXsO`{Z6P%SvI%0 zgcUB*nZDEEGAQG2va^)yal2M)>Crx;iC!(NKFP{Z$m<+%>FawXAU?dLf-n?;@coAX zu%mC|evl^DDrWlyJHSvC8HYtnvWgoX9wEn);Zd@ZtFzU1MELWQEb^_}cb&Rl)y-1& z_3R@d<=yGmN@L#21M;nO^xn=$QiOJJ8)}#qO0t?XONiM|-LM1}jI*WuIt&zBAD@bI z9PJe>%Folbz(z1~u37AM76+?rU%8ZaUYPjNYM~Wxnn?}N>atMr6p1XM>Y1nAtZpyf z)=t3_ApZNXbhzx5vAR6rcFWSv2<5w>!lznYaIT=6$z;n@?U@h;>X$N{EaB@J*C;&Q z@EU8|1O@wmJrNN46&&%V208xME1@A?j7C7_IN^wMCIao>$w~D;eFO2RXm*LF-^a_ z&#=uA7u0w$dTQCEBD!4tYQqLf|NmKD)GaAZeX@i}U){W{XT|DGfEe=1uZkQ|_qp`9 zhImvPfhI2IU?pOul!%@^yKyGFOjaFb4ZG7 zhR8k!Ju!%bpPbiW_fdH-jfrTv{*!6qfrD##q8(HCqptz*iEh!%Gt+Y8Zg zjKQQB7W@%Hgkoy`osBU@;ma>9+mV`Wne`zwIYffGLAPkhhTYkAst%?G!nN;eirY`x|!kq-u+Bs?)Lzlk0KVhBS zZyls`X<(a!BA&~c77pO&!Sz$f9g9P!;zsa|XHt>1@-d;`+$p#BL0ey_2p-MlQ7QKC zF0oSptd=a`d1KC4>>8Q|Yk@_t5)V`9qjfVrEQYIYF+DJ8$m1Xsm+qWX1_G@#aXsNt zTDQxF-k>Jx9ASD-U%H1b>cQ8R^Op4^=e(Dt?8@P*o8dfYE%VZ)9EN1W&ZsqwQC(%G zx!Bie$XqK|CU>3KMwAz*p+I&?6ns$g1$Q*`vO4gj`MH3&V+bx7t5?{&wpqQ9Y9aYu z_A?&^TL5c!h5S+qVeyZO?WV6jg-)IfhyUE5!&Qw{v*+2hzsbfZwi%Uu8#0|32pbVZf7kcpRt1Usya}zq+Bx zlMppK>Gdkb^@cD=pYDjGb-&uj@D1sW_x=4Tn4i6>hfFI?VjC>d>VhKGVvkFi7sHi6 z(1lS)Xh+ZsPB*P+iY^zGa(UxPI!wqoEGxM!$?;zDuT0qA7oxkC=9u2N?Zsv<*Ft0~ z<7G>o6mnP*3xzlMEwe>`%?PIb*tAm{ak_P zlpt8(u2vNYc~e$dw4{;)wg~|bi&U3`;5nc)$upb=c-_E@)wQ>WcMIdK@P-(_k>QAa z)AI|5>2r9bBb@JDzMQ0U1G=9*z6{@O?W8KMbcOhZkT~|iop84`9UfC*4C}^$&&SOC zG~5KIVm|ryYb|W@&ij{~pr+1u2uIEGWC7aOn>{BcPX*x`upZB@{mSl zMU|m1-{LjQVuR!uClXmVL}sX(cPNrT@AL9=QTq}nr$PspH{F&OPCSkMc82k**ALZa z<&&8EI^L`&8BxFYsPQ%*{y`sdSQ>B`tJ`l3nY{U7EU0RJ^9?&9kuk!)s!YtzkCc|` z%bZ+l6Pg{|gogRu2}>bC>zLXw-LQMl=7NoX@zt$ZRMrmrq{Uv{rGuQjP4`ZIkl=$l z6~BhraNRr3URo@~^ugz7l;ZEcW`2@Zc5=ht?MMjumyTBxK9@+VRooFC}>;AZ!8q2SA9Qj0Q5;`zk#I@!T@eo&-gENA$T98LQ*;T)>F@xp=ueG1U9{=$;_8dn?zTBGszUjE95GZYPTqaC%l~}lux;4u| z#|7SPJpL*{Po%=%WdZsnCe|jl1n?HQon__`zM+@;6@X4p)Fw^vUAoQml+rGWv%}|k zW-bIem&Da|JOxlZ*K2(}e$wplIPY6d?eWBjg5<%!dVq7};ikHu*?nyJ%}eBY)ws&M_2)6o zKY40%`Kx$=`EDzBmDV15x6@;cD6`z!HVH+U=AQ!lzdz5l~ zE5qq_oh-zF7T#vD^8!}ksNhE^zeSIs5pAhrp-F_WvXa%V=sPq7oWs3m=WD3f+s02| zD(jzuH~$m*)$at+zdPmjSURl9a5|!S5Nq(dyvDb$7bm{RI+nN!U);w;=$*1my6l|r z{U-ompEj!R3sC3kc(e6^KmmBMAk1VM;{w2&P8(9ch1WzmL<7O%sU8ICn&Fl zo8S!4{R^WdC&*wXWXYGzXZcanx%|)#l;~-`-#VOnSgI}zYRpx;5PQh>pIWuf11nuR zZP;-NJ}oe$RssUAQbjmnbJd;zmz`?{V)##^B(%tX}zT6XAd6K;``=#B^Evadc>w2)h<-W}ptGlnV<+>>0cfVstorw@b zb3fMF1%~p(tp*0+f?!huT#)eEjT>oXBkzgIt(yaF;E^|kv*`Q*bOrv#^*X0S8RcDe z>N?eRMMc)L^QhVM1OauyyEwMjAgyP2^}Aay5TM5amRBxqVf8X}7U1`s`*mPHD9zw8 zRv-u5wb=2}Q_1yI8Px+G2?Lwjeq&`5Y%aEBMPg^?81JQ+79zMkh|LyC*3o#68`i$s zu5LoG&#TN%ixE6x+U^xohS;v}7@<3lz;5xDpU&xHXLLQDbh0_i*?|zl^GOM!D*0jY z3Gw=B470Tjwtv>GA4b&GM}2#77r;DQ*ObMVo?(JAGDEl7&qz;dRpHCEdH46B%02(O z(x@BnBM$St+BSWTt;KKmMffk@UZvHDLWYfRUyE9d+#$r?lfhgfdR(w|u9y8ykvxZy z#%|vDOEBvG{7B(%!Z ziU^naEW6PL2|<7fEvgg|{)%Uum~N6n@b`X19+eOK*^w-`XzjMV?~!z;64gi=LZ!yq zG1XG>(CD+Xa6Gl-ZQ;epc+>3#NZ*GO8Ku5pPT?T_;j`YQd$D(P_d~!?alW^Z(n+XA#h*xNpcyJ7#~R-z`4ymnqFIu%me-rCBlv~c`*MG83h7fGNIN?G*fm{+ z_Hb}LofBTuOi9yq9Loj+RZDo;tNc=3e_o7|2;AM4&30cnNr~Hp(g5o&S~wUUA8j~_ z^*`$Q21LDEYCG5wJV{a1_h(Z5K2c3;Rf!pbmxM|$)#gTs^*1v+Vq!yIxXuY4qx;CT38`8tS`>BkD zMvISLYc{PQ8HAUz@w--GUCxyAN5{s}M$XC){i6q$W;1>sO(jeGOjpyXv8>bLz=Gf| zn&@vBc~5J-SCGp}iIQ1rZoMKtJ>NhUfWSl{ksiMq;M>LT+*|6%^5nAudQ_={6q6d?EpO^ZgGi*yv0v|Gf`%Po6hS%WS1%B#aZfE>A;BzDSE z`SjYkpkW()w8@d4JNQw)zCJsdH7Hb-mZo}E?AN49c5q)j4&fx3WTML)^Ef zCq&qz-rPJX-iZnSCFe|C*~IceJl)3s?=B{NP2)a&51OahFQo<0yCC0GJ*M`zs54V` z4;cg-_hMQyE-F~KwCKePeYG8{QuyPQ*4eF$N|EAH%ve z-QrsJFD42zCnhFCU9?2EbtNrUBjhx9|8Q8FDO40YmsXZp3&`1ub(N`{S(T4lQy7?V zr)|^~8c1a2dyjW1ikw|SdK86CBwSQrE87A*SbOlTDr(kV`iG#D`fRd@lDc#eCRsQq ztdf$**=9{YpqOet&odrI5$T({w{YE_6R{b?-0na^#fu-+%wj$()wmW<) ztazCNiMD^tRYYcf@=lpW`gZsCXNGRYTg(lyuaBZ~fERbsuEmA}Ek>}=UZQS{8_g#i}73*DUE&7bw#rxL`8z}J+f-9P{4OC!imPSfF& zlFN^<+%^t2l%K9=jlEN!0_>L4zrTI+`22(rNqkgi`lRlqZ zgZ<^A<7Eam_3HHQ{@8iuL7JV;p=Jt6WWHnKc&NpPq~3Bl&!MA{sJZKzVjXWZ5r1tM z$`BxVOk9*^W0hC)av11L>T_!c$%WAo`bh1`cyN^4;i+yT**tvAj~Yeob%0*;(?P`|7Rg$?+o-+=NGS zR9>~zh=jgZJ8hEp^b(^&;RR9pjxn+!@9-XiE_`+Bz9;R)P*JWl`LpyX1%iCG9VB*s*xOCzKl*5o-S7$9pwI6D)P6{$0wMXd zrbVioj9-1t1G--Vdas*Sem%5)sJ=Ege!2wpc=*){P0eX{6!9H;Xen0e=j-y;$Y{<> zqKCHBQhWTPo+yuy8&`(Hl^lly&L_OB8MGZ&80RA8!@(-)3s_yZfp-LxtD5-?Y zPAb{=$}OkwZ|6i$<9`u8A_}s9rTr`BD$r}jWNb~$;>n2a{bUhNey@(YX(fv8$elP` zWo;?<-Cy``+uP8Ziu!^L~j^e|&H|u|dd`bnu08!BI?BRQ%9fH849tWk%_tEE_ zm)qeNjoBWKUMBs|O235SoO`jSL~p|mXNp=4UC+wun%*ud32?1&vh!>tYfmk050lr3@hYnyFzk2m`rS#b>G z_!2wm(0`MsS+DNC|D0v1fgVB*0npei8Xq_2R5ut^HR`@tw~w71c}%;H4R<{&Pd^W0 zF+FQ;j#u6Em_OQDfGdMRf(X)kfsF}v=#M)efRnjZYJJLhT9W0gwDgE_j+Nl??;>T1 zw*m&Yp;Vi*7K3!mxgK)~c1NSW@Q=3y#^y_0NinP6d^RUwOBitCa7WHDQb9%6s6Kb_ z4JJ%J@Y)lbz;QuKu!($QWZ8N~HEGQ#AviMd)2coB5O?tvfL4fA`JZ+h&T{~qFSaI6R2qIgF7;3{MCUe(o z^R&nh(BB*XJjf2Vvi~Bs)KeP{2{NC0>b->Bt7O-Gf}&}6U!BuD zP3C#8npSF2-8bYtO~yg9$ZFOY3`6SGr^L^*kxAt#SYRFdaUlQ05>EhSWT`}TT9xR1 z(?i$c{$aP1CD|c5BnPYxfc{*j@}8-%M9=XX@`a0kxx{Qx2>gG1@s3$x>2~aG+>gv@ z&&aRn>XR;HWu2I)s%BJR!(=Yd-kDk?DP|79!%E`(UC)`)nex>}G<}3)ZGjGJ7{%}@ zq}A_HJMdsw#aFokf*eQXaRG#^z#i_&s9Jo$re(mFW%2u0S3LcEY?=daBd;Na9Ar}3 zioy!{_aCBuGpTB7625_h^bhr{jS33QhJUO2=nKc@Dpnhd;mzh1KZum*Srhf-w4w6S zGEIK86`5#^W@z-07=7&Y^6F;tQeVnYWu1){banSAI3L2tEe}TNfM4(?PW>mWw-(aA z5D^mE{(0vLP!R1oXu6Fx?sT|~eUsA^S0!|3$vhjAw&}FYM3AuMH^Vk9avug3*u2}r zsr9Y9hkE8Tza|0i%a+BDi^=k?UqQahPoPI|lt8WEcJ-y;aSaf<3G-doVtySa4%}h5 z^gErTfh$S;c%F443CjB|Of4GhaY2 zhPiscHB^2xQGsXbWTN2_7eMIkC9vUSa{Q#V3z9Ni19BU{#+UffF6IT9guP(5ZZzRa zGmhi=-BKFev=A>_9|5 zt~*=oJC}7ss>2<9OomUkh-vO_(twGMkBt)Tx7Ui&&&@nWU{`?1b*=>Pnoz%??T-B{ z-rT2-@|nUyhCjLt`0YG1wa9JBNR{umF5a>OnW{V_=cORd(2IqT>OmG38ey~Eoc9QZ zxgO$~Tj@IQjc<8vKUu%?@AV3RLf|FAw}G%`5dp&BG%EiomF``rI=*hp`Rsa+$E>lj z55#H?IpD6J#uuWBA`HK9nB4PA0NAYT>%%57p5%kj_9PAT4{_e(>(Gnq$K?#cYX8a3 z>9T3q79empJR<@v?d8Z<;_l+s5%MS@o=iqz>On|5Tqtxnlke^+$oQT>H=)!WNg9Q= z4HF*FCyR+E$C0m_E+gs0LuhG5uwkG%GY6GVAKXa%k>2SecU{*(DoFQ}@7+eIlX2;` zgB^0`6_r`$RyQ-6Q-A@HyjGH{5rOeh>yNZw+C3q%I>PL!JW&rRYfv?u$ z_$6eR^W~9BKPLi19{@a?8xA)S|lXFxRTh_PY6{e+e`n zw?9EN-<22Gxat9V?d`Q1Ub(t$qQ9OpFayt_#-dL>#!qS0aejw+uVBx;BUhsbnxSUd zv*i@Fd*A)pxR-6%(?+X6t=H&k?IXCA4+uRLq5dSacgM3O>aiXUyM3TBZoY>mrB<6z zpxy|nZ*wdM-0*;W|9S(VbL+69+9hy|!yFwmY(hoivcA?3Y@O$CpHw5ht!dqT+YK?i zE7Jyv)t?O3ikP0Q8$WknIvV;r>rt^{`PPB(H0eXBhs$vGiTG}96 z&MqzwZsA#NX6fXp5oS!Q?)f*Co=uCQnvjeXKUHz@mh@m%QO+b_hY|?es#JNLxyTtI?!&e4gJgI z@4Fko+`SWxJoHxoEoIM>G068^9(Y%;ZG4>-2<>)|s`|~sD|iAXqjo)oK>^F+uuusH zgO4j6FwC-O(48l!=JnSkgSN5Ht=*Q#&a1KCQ8;#Y04dp^o!NjBnbpV83>`VFqG*-@ zO{tRVm>+MoixPwoi2wYujcyqhIb&SMYvcAt=_B%b*x9XNSrJwzEJw;1!Hh=I>96q* zE_D}>0{Y|@-(*VXNMBv*@(dLHV@hHGU_Y3ZTQo z#Cv;scW&Hy*TF{Z7~x@by>F-d;#mf?m^35k9k8J{C2K!Telh(A%<0d zWXIwHwt>c98N=U+Ex(Qm$6MQ-pq^mHO$GX%$QwwGTQ%k3u+YIG-hISWkgfT}L1 z1o~?|-~O*DYL|}rbA7`E`}U(ElASArr}EN z<5`HAs$f0W=HT{uI8GEs7I<)FC-IUJ{)un>#w5>~4&(+|1_lgUF~0>_PqZkVUBrB< z*5P~HuBLfP3Vc>cGlC408Q#OO|8?Wm1cH1aLY0afH>}AfzMo8TK}Tw*+0;K z_kkZGJ}tCkco{IxJSF6mrz&Y=KkmO8T$u%-sXNT}I}r&yR+8}kZTyh&?RBqEpJoHI zFtU^DX;{VZ`ihB0)_tjBKw&-^;GS1K7 zB?2LrFBk$2_>~j|u&kptg+EYOx=a3ie$$_3gbzqCNMP@R-yr{MW6#z`LC+fzYGT zP5@xa_jq>vvcmyl9!Ge6Q)KJ|9dJmyyvO#3z*}Ngfs!@0OGCbnPs7!RFGo_x9S~0e zqnP0#?{$V#PJat3!sF#QSiiC0elpWOv=J`T5xOF@O-ar-5{P9o8mgkBGhf$l=xc~7irM>N{PGeW$M7EJW$=F zsR+MPw3u}s_u7IYCadTlH9KnP4eWW$7Y5HNUit&-2CE8R4UhrBNmes*gLMf7v*n{zhKrNpJf(X@kl39SbCEVIR}dg>~$;fY_Da0OhXqSNFdAU55;0=C+AnkBra zoFQDsEgS!;do*Kkm^9yed2?a%L*B26y+~F{p;&6>^5%sfVq%i;dLyOZ z<63;2vdt)VmNz$fPZeLDBp8V|#D~j^izQ4Y#Ul6fdYZLrV(mdN&*u$C2li&8q0~8= zyZ=plq1Qv6Ol6=FXRY^8CobYF8Sf|SgBN_kpmgmT1EH5F%hIOj_WBNZfCzVM|HB=c$thx)-`z>3tRtCmT}& zx$X-;)}W!4oKJU$HAWKk>$PX~&1Hc*AqOfFFWu`NM1+^VXBl~3{r^;8XIabV*{_T= z_ct^U0{_!~ZAWph8+>P0_yG!dk#u5g-7+ie$&;($%S++_Z%<452x?4 zXgXhS0Pr4+7~+BPCF+MvY-Mq9#Qw=TP1k|4hf86iL7=5;*o_;#K`gNT*AZz=OykE4uVH#`N_=b2(J zE~Y(8y8&u4TXRume+xW=v!5C8!%SG6DJbojC^S(Gcy)v823bML<6qI19uLM9(I~5>#xzZ z1GfRQ02JQu4nCKCI0CEZ zLrvb|3?b+^nkjGymu6yh#IH_>S(DBdmv~rtv!56rSpzIkw&`Z8;ol)H z#;{O7tHDPPovkfzqv!L1yzZmMl1|QB%)R;h@Q1()%;74%Mp$MuWVe747pnzz`HchOTQMn>0F~= zzv)`|eF?m3VpysY^Eub^J*vzD9%Mb(Kg=F}^b4?jK(BjfZ zH*dGqV6%=~MHG}KM@dEe=cuG$j!>)Hjn898(Uzsp9R_JB=7$)b%jIkqKaA2kQg$}VhFXVgo&Pd~w|1q~+oYyNntA+#qzhm9w24Pz7 zADcq;qP5MpMd;=5b&QaA>n&X3l{R^^$UUBcNL5^#f$@cR5mB_?V0cK>I>eU30$o%# za@uJeSF#FO-h4~3Hzs|a_U~kn6a~XWHYI^Ag>~wNy}5ki5T>JdNJJu2+n}WX94gwG zp?Vc+cZF@|5zlA?Cz5jDtPEMR1ee|hlJ|N`ICa3@Gg!an%pqr6eu{J6im?S;Nf!7z z)E_5!TE56e)A=M3V7lp`|Mlv6HnXE^6?zp4dQLmNFlzNaj9?P{1101$9lp)1xCrfya&m!W9(wVa zzY(?HHmMH>;C-t+bL5t;)w5)+xcFtC6ZL^7svK{lQ9xO9E18wIDl>bMB)=ZqQ`zGN ziccM<)?Pl;yNGNL&&N)}@eXyF)+u>0*q(i3suho@$jG?w5FR6b2Z8zt z$-|Pf*zyC~BKzJHJEP?#KD`%h4NH^ux-b(-&3h$pEn7sXeA;U6e*+;}qMU;A6OKk} zJ2IBpk>nG!9}cWG#^P{+S5xppDL=>BkAtQa?aFPYtb*aAI(gFHCvEine4h%SfkKr2 z;o8(w->|%+5kI!2r@PAy<%%PaS+rPdy^)u(@#oI~qoVF^t_taogbN>*Q)*H~_HBlb z_$S0{6OFVwZVI<&=ji>r=pze+x1c5|MS9K`mj_zpLtqK}M{cLb;{DXs-Qe5(r*9@- z5eP};kt;a=vYWMIBBna^lB&9fW<@lxphn3rRMCZ$qR>uM>!K)Md}S<*)O!?G-&X6F zA+9G%7>K#(8~gn6V^nc5H=ngse3edwE}uN1akwvDZLPdM^qu&*uizm)eLTvlPE$oQ z$r`yPVGAAQ)mE9B?GF zHI(0S8hPA?T5FIE)} zGvAlg@9+i(fdHagqkttP;;t1(CZH%{(CG~-8eB37%4Geq#R(3_?uMCnz3%es6 zKmQN5-ukb}H|`rAFuFFng)xxs4kbp1bc5tZcZi5zn$g`M-5{MJjl^geHIN1o5D^7b z@aDRn=l<>f56H9Z7a9!y=JB!-cV?oR$l{S#DiWksI$%jIWg*I;Q7-zg z;r{GcIi9}PKnUYrWfB*1yBEi>8mDdO8+4OxN5lT3>~&f}oWTGN>;NlBl$eQ8Z^6U6 z445(^3!We;R!&P&u@w(AQ!Qpqt-`W6Cx?T~mq5ZkWb%eW3C?B+$_Y$HJTlj^CPCG~ z>~#&?#$D38i8ATS>8Q)E+iv~ghLxQo7%J_?TWrACUjeoNCm58bY$Ma$V#*)^MMjNo zu~xY32%v^h*`z9|)!7WR{^Hdi=45Se`$N!0 za)JCvVl*8d9hRp#fQ->pxdxqs_=fW4>SY3UVUT1-T9n)TU8}G+naO;hs*}wnPmjhM zi2M=lYL3lhK+eH>$X?LM(gt|hX2LV85*}J#}RYbd9j|&OnKRDSm8JKMk zUd9HIDliY|j4`jOgR;cZ>N7-j(%SBpM%Yl(_!LObUy0gt}rZOi7vo2xS9G< zzK#0`9IH9Ml#4H)JJ{a1TD_B(KEXntHZbrP7Auxqn&J{pUt2iT1h#BZ^&2W84E6|m z&nIw-GDtsE)~Ib%)R6(m)X2XIj-UpW5XZRfEr{A;g!G8n^-DzPwtOMOi+Ar6vG1Ju z-|pv`E(kxq+4WIyq#tsxD{xEeoT0Ktet)_odo&+V(+7w?ipUJIoEx0 z*Eu7Q{i&!-_s_$$2glpGC=K=8T%meon8lDxJE;9i(>@ts7ZC#2hgb4sm@X9z*89<| zjJlaFuz~%;qKTu0s9Xlw#3>!X5wSBmp&hxR&l~7RQWO9A2OU0ev`owRgsAjC6VG;_ znox85{yl_hOwH}%=F4|bCS7w9dqVKMcXd-~gG)Z3jMC3De{oBf2jczXLq-SzrJ?Z*cY&t6lFlg3vfID% zS0jMclD4ka zD{T;WU$x289xhNaopV#+vmbrF+0)U12aC7242u7Hc}?&a_h5!~qYqpzHMtoo&Yx?W z7MRli1gPpu;DEKTTk?Xu#!9dC;!#fRbe1F%O6Q|WImrA4f zH2<@s27{?r0$=x+EH?*PyfIUYJ|+tJkgD}s(!-)HZH9(zb;I}|GBP=IgfV&JrStLc zKTW;jPd=c(bss&bJJt! zPB_7vYD(8zh)_$M?@PCvM-LO}T~nS-r9d9naf}%Oo&8X$VC-ziNXo~l6CtVGO?&1S zTOD#=U;d#y)_@#1UFli0VrZ@QcjAPFcXqaM6b-4S``Y$AM-RNIanodF8uFU+5(pA( zk(AG`d!$iYmQmPYm3^}aqV4-~{t7qROObOzs8XYMBCwrwG zo#$|J(J}RoGgZ6ev&F`_s~!6NZ{4P5r4@4Jo;@7|1jXYmDtQEXwqz}A{0k9hp`bEajXQF~WF$0_ zgBXt+-+qW@Y?|0y{ZjDc)nyERwoD7t*v`U6+fZ)o&UAVG1$X^i^>}Zc+Ym&vY&Vg9 z)E*8_qpP6+$EoIetQ$6C{(0lnkY(CTEv^um)L{t0P$Bvtl|24g)LFD5z&Y53V` zlsCksLWi4B>K0c0<|nPmY9e}%xHNCAKlFR6<`e9+ig4$M4D)>n#V~cvNW~>FA$G6^ z4)@e{R`uvv&#u9WAM47r;j3Ny8_cI%3%7QP=QSi_@)D5U2(&5`1YU+LW`38A|8Z2@ zlbZ7}RHN~a27r(rJ#;Oj)@mC|>0;0}*rBqug|pO^_)%}=Trb>*cvX&o^>}-t-|eqq zf*?6~dtxzyRO-KdLDbLtB7Ex5IQUhF#+pXRp3{YKVj?=?}BM3a3 zxN*}zQ0<})W`z%E$R>rraV2LLWh-}?L%Z8UXT^#FQ1H6Fg5dCpm_rP3@0gL7X1T-G zfLr_P!}s8(%Q3%zs@EIA-vMl$CI3oq?(Gefp2U8pAkU4OXgt24DNp07?BAh*4Wh6D z5%pHBpmFvEuETzbgReg7=9HKr)>lun`kIBNA!o_x-?+K5r-C(7+o5gemD0~H6OYnT zBCd-CCbJpr-$Q2q03tC*4j;PBr8y=^AC6P2R*DTL`H1gEs%tf!-(A6FQx7%zodiMl5c%9>9m`2sS6jPJbz+zhtp5$6Lr5hcZ6`hP-?kJoZL@o zt~nLsfY*+3-4xcjn9X#+40Ie^+&>&Q$vXz?a!~~|$;x#_+UQ*tcM}bOy1VE*C-F7) z7-NinEEeXt{AX8u6BK(KL{5bXcDul)xY)tQwWTZFuq0s+?s^rW;eQDV(AO!et@{Ve ze(dq`I#-SOFsJjUqodkmTO`GCiED~9dvYtWPF(m6rX$chZtV>?XOU#FrHYG9A&$); zKE>1h+V$VX3)FXV^&@G)wC8w)0}I@tCNE)f)JGD*clt7^wP~hFkhmG zRs$aaLFIJ|^y)|d!77J+TEe1*RGE65mxNu^dR+Oz)Dn$6rOb!!QY9$1@!=)4lXYxd zXP%08IV@N&+tRbAz)!R5KQQB59Ib%K4hsP&qF*&J%Cp(s6V0($+=K}=)K|GAl5owY z!E?h$n{GJ^PM<_qmd`F%IkwNOHcVPVwFNvE$h*#xagAHFj7jJI&Guc@!QUUf!)^Ro z8@X9)+qJNf_4+jhjUC~OF9e5|?eznFm%_Es)1PZ@^Ocv4$!tNzVTl=3uCFqEMtNLN ze#)@2IPBfCygX>-{C2vS>b8(ybA_LT{Uhs`YZy&+k-f`mrxUsMYs-3ZP%UPt{Qq(R zu5=?3pxID}XVNiT#uzkILAQmcn$Kt^el8a>9?^nB7Z!(*9mRl|G7cQvh7$IU=pXj- z@wmgwh>Hn#02P$5Ope)8SXNI`4fkwgskw0+rAA>*@4KO*HDh2JRQSW~ELhqioSqDe zp8Az>bg9d_b8g*wgn-u?b-}mA;6a-UJDIN^f1`*FL`$m>aljYGsb-+Tko5m{&vres z8=MFuZ}?KSei}~wrTR~%yaRgoNaYZ}7x3z{SC zp`^r^*NbpTow~^qsL8LkY(C@oJg%JnIsL$o3mlQ3 zRyx8Gq%C>XEQ(a7mO27NWBl+LAOoeJ{uR5vo1)_p?&-k$%E4fTV8kpQx|K&+{-cY? z`jjPCCYz_ADv(}+8Q+kw=yGiV5Wvrgsjvb2BF~-@tw_GF5)Uwm5Mcho*i$k=NHTf; zvtvn?yKiyky^O>Ug}j;L^mkC_6cyNa5P6Kl>*u$fmTe098weBDZzZ)MP8_R(4YaOO za_=smyTVe?0xI7-2^{hGHLBCh4H(2IPxjZuN#iFq#F+&@u!DRJC545+AFwPkT5aa- zAtmBZz3`j))t9zxRfUM$X@#YcR3;||u+auZI|t4-RhaQ|;dJhYiN>~?_+cft^$Q8YO}FQ(u~_Ou1vd z)gL>JEBv|%S}u6u>PD1EOlu91pZd?>9okfV#21d`T5tc)`;`Wxp}!#iSa1R}gBBPL zghs&cj0lMJUL<)=a_=O_+5)gOj$YkDKE9dDRM;MG*2wz0O}WB(H=rY1{lsom^=n=> zGeHZLXEP`qgN5EG!Xxe@j(uYZQw_^gk#_Z_a6z=FtY#4_5S$MeMn^*|&tE&DG4l)IJ;!|aJ_C{xwr)%@swI*xY%e8SB+us7(llUTrjf6OYjE zu%K_0v-)0cIJi}yBm+njO*mz3;b{8Dd0Qj{9~vnDV>9mAFSoYa!6T=>rUyvgjN*dcLH+odm#Lbi1V+Q%1* zmr%d`B|qcD(poFmIjXfzgb=wK<({9JOWL%8_vq-)GBxu%>Zw|>5X}Yl%P$fkf%bMZ zzFuCjkr)VL39H!6uPr^NJ~2h(lC-*+=Xs1|BnWb0k-xHuo3X#5jJ* zvf<%k>|wkWmVm~t)w-IISRxBLqMqPxKIJcW2JiVeUnLk3KNqMPPDn6g$=)6vg*XZq zc^D7X&d_Nxei+NiSsTCL9QH(S)O8A~oAEIsVUS#EzW)+aYrj=n6QVs$qR&5s;;T@x zi~z&0Y;ra97=u|3JJ_vUBTlO!*=<4@-t^{!yGa#_i!FtD!>b)E&44K-!~XVVX64!_ zQz?MdY;n1ooVzS8+mVe;u5*N`mW)(5ERPLl3+|?5Z(<2LzQ9Q&jBbzj#^8)}=%iM1 zL<=?nyEK{1Zf}yb5N~^F(YRMFkE@LP|Hmq$U?JuaEXk}E1hC8rAnL#l{vs(LVW8i@| z$c>y`2X!iBA9W&$((|{ZC!;{BJ6B^vD{ljXD8YUZ1*6DGaic8?_S|#KQaL5(k42hf z`v0(qNh%ps>^rr@d)w9*I+0StuHxHxN?QCE#+$1}p0ZGF^9b;c{;H_$P*EgfEU?a> zY&)!{1?g&_Fi$bmQ}djrM41`as7>0N_bL99MRMF1SImfIw48z`gh3Ecy1Rc7<6Mp} z(bTT}y82VU0;vVRjo@)-dA;3DpfIi8haXU^U2}HHn3III@Pkc-S%*K3=1Cqm@ApR@ zapN;(P4l$eWDPMaPQ>C+gh zB3^>FkvdUjQ>o*wRIJoSD#)=sj-F>LSIsyI{;&+8D=Y7^&J}I~N z_y}D7U|PS~N&Vr~=rDc0dcVS~%~ww*e~^n4u=I%JY{@7YC7~ZRcG|*krZ~st|LV=vp;&zmIzi2FKAyG@rgmXHWsb|W9vGjs`h+r zh_s#>fB?!W?rIA}N|p7-F{aDIo*0HEBWejLr4L)aOAAH342^2J*)p+Q(Ff41E~V`Y zBF!em`#BwikqR>>Cs<7w>=ijkB{_%AWVXU+$Z`k6e<}5T{j`J3^p*@W&OpjGxTT0j zMlTG1-b{#kxJvNL}}9#Vi)I9$DA>Sb=9sM}U)|5Pz=OG$G9lA8)6 zc2>E+d&$LuWv{`_u*v0W-@s#}jVf!#$;oc*lBX-F=~a{a*1bA5B*t@IW#*LzmJVXc zIWbQcognszAMF>U(6yzYrg{_b^u5GEuK9({pKbYqY$C2l>J(R2nlbq0Hg|Ux*?;^6 z`!o73TJ6T%q`P%JaJDT#Z$LrP`%a=`z%F$caJ>j^q9GT*0ifDJJ`ebyV3Fh z`||JqJ+w97xAUnw4I>A?Ah9x>?je4e_jQqj;eCVogkT8GwC+LKBzHYoZgeK5?U3)0 zsYE8U>a20HrU}OFcdi_N*BI-poK)fwbtJGYgQ@T1HWsHlwY%$fUdT)xA0y5BW9BA6 z3h*5yu1&Ofp~oOWe{5pYcvWqPEaM?=k($_w!omLJ9mGD`tN>lRto*qnJ^BJhnJ_#A z8%}&>szRKyum7l>{LSwP;mOD3FNPw(%+1}$F}#16ykkvsE&=Dt>N~)j`9UnD4?4(4 zlRa@8i>HqXFVZ!a&i-KGVfF&h!9gSFa6yA=yHMK;f^&R%B z)1SF%e4*6^f_ViuTZO9oTK}J@O*2F#>Mx`Ob4Amb*=|JN+Q`rsU(3f-+2|Uxe$9NZ`+UZe*=v-wZl}xFSK$;aX z)-qPddQM|;ZJ!%)7r8@c5D1KjOF@{Ki?d zW2SzYm1o0K^+)zb$h#?py;_gp3-W3q!OwU4D*p@I_tA}oJok|#_6SA!?#q8P-n>)! z+QJ5Doad3&r?CIFrgMSXQ!wZ_Z7|MTUgk}#-wAffT|F1tSs$`M)V5$PG#YEzzOP_i zepS`eLZ_O*)0QjlBP%=nh^QG+V3@}Z+U;|3xL@WP!5r7kV1^>1)B#Zx5X!^P3ZHr)6I5YETTXPq|XKJS=46;Tu;P zY!(XzFA~a&NA&fL)KH=VAXk_$osETP%iS+MqQTW=-!SFoZ_ZjLDKT3N~p z5Lzop25J(u&ZpKfQ^Iu>)x+9lPDD%0woW66vZT$(y>-<*>S0~j+ELYRP%^N6&F9f- z&!(-)X79S5;AN@a4D9KdsKJfp0m99o6^Ak$Qm^a+jg`Hc_U|@Q5We_>PTC;6T@kt8 zogzdvB|~LcPaDe4n?Iav44TJ3Z;0|pw4C-6 z=_W#puC%k?9-`U)WclV) z5|p-i9M$m+A7zA8p(4Vf@yF_2(_=%cE2v~3m5ypdF0o8R#@bd)tuCCfj5>HLjUCG~ z1i0ljE|p9-rT%Pi2?hwA-eM}XQ)0Wo6By&RmG;w=p)+d}g&t{1;)JFc0dPmvP7bz^ zdGnMyBSts@+7O@U6!kBIBZc(E?BhzA($rvTFD0Dn-V9-3I(~1Pub9uZ1a(~;fw<*k zCs-?{R7Lk%&l64Tjh}jLntVm^HLwCSdjeOwei~#XnR{E{;>R~JJ%9cT?dbF0w+(>2?<5~MmG?LjhQ_V9*uxN&;;MC zdjxTIMdnO21W2aOuSMdWnkrwuh^HQrsVwTH)!gs@bZdXQ^1vE_^u7L6ugN2GKwYP2 zG0H}pRx@jvv{tBNTy82@SGs7@JK!;{c+Of9`_DCD=p&u1sD(xlwj5Nw15-n&;*ZNb z{*iYlvY9-Vn29jJZu{BiS|mMhOj~B^Hr0bS6nAHS}!l4 zO0aD)K!g9VvQPsX$k)y-&)mr0Q#b6ms`aY~*j#KaM2|DKlrjo`hXsCm(tFYYQ8R`5 zj?oNmF&ql(b8y$j6i{1l`hs}=`eF~2=f~3Ls!;g2Cj2aHl=reCJFILY2uKrR~H-<#Cjj9E`d=7-w%IaCooGTPz&rSf}~5sUBS+%`Sm3q}E6ai)ka&| znQ%~;v$2Iz)+r(+nWHS>q#%wR;S~s{6Ds3F9rX|anrm9QM9raCR*7&T$Am22$}Pp= zvkr2Ay#|g{?uTm$KpSeKk|x+4dul!E)uw&M7pIPgBXU#Mdd!NhAPC6M z-18%p70&`jfG{&#>6~`6>k7}dil=h%r{xHU!(tCfeu}*u!9^59gzn9rHKKnHmrK3) z?PQcD$YXtia4J`LtncFYx;Vc3x+UeKx4N#Q)3EkmANoP*S^)B036~K!vA2q-hB}6~ ze4`Y)jLl_ghKCqq~nXIu>osSYZ-@BFp@u<*LW=0!&% zdWyNTG0S}4caA5WLF8M9zrX{>p%062BV&c%pE^yKt&eiCxLX45F9Cvdw;SSwAM=nD zYw}&+kc1cTBOZ#loKmUU1fJKSXIvll^@?(Mg(tT72)=u>@3Ghq$Y4N}`khw7)Vi!D zG~gd+7sG{q%G!|HxlbOkf-G@bnLQU_2~H34UzFgj#<(#OJixnuhx?H4ng-b=Vq+Q9JGPnOg069RG2$R|*&{t_-U5 zz~%B9QC|GnXRyQg(ryu9xkx%P4MGqNUSSW6nbmPGuTIn~PEJu&1bW@*dY&O8o^i(o#D6p$lwp z1PXp^Em%BhT(|sOZuUPNOUPzXv^ta&R`!hSiVD-v_9ueUNkw!*NhARk zWrdip719+7M*9l0Q>bB~ITcokYpY!dkBn-xm2NcnShq~hEap-U!M%0XQkLIzK-s5GRp6+5qYXd`OzzFw7Etda&Xr1d74kg1gN(&S}0a}@{v0$ zP`)Qi57GSWp~X1EfSlYKA+W(6VRR#4l)lvB*Jq z5k}dBj3mD`40DUy_R`WL??q}ldi6W$$Nk}}3qPUJ5MKOW8PCRd=XR_CAf z`)nHnkA45M`YRT97x!+@lKyA;te;K5fJZuy0qpx@7;NJLL*uq2Y)L_^=h!{Z+?+B4 zHeeY5>g2N3XLjK1(q^UEg=oQH75T`~En~_^B;W12ladu*JCBj2L3@^Q1^}JFr$5-K2E&uAW|e@PFNL4*kZ# zoD%1ecLlX%fow#N4*$G{I*dS!U7hVY+|gXaDUY6{_+`VJq;n4`Oc3^ORfqv! z$v!qxLPjFZU}HTWs|>(MYMk;`l0Rv%-I9cHo@;>NZHL28oIJis);|ENB2s}CA&X}F z8Rxa$EJ_N?E=f+9-jo(s22fNCh49Bg zi#rA6QDS97$RG+YmFk%xXTf|Q?c}Kb2Z{-=G7U4rgDhk7rS)DaVK?gu9A|(|SjAr} zQz-$YK(21bQN)QHAPl64whSO7E~PL)#s_Sx(6-O+H0aXJvk45J)8IkUr z@Rl-l#uj5}5`4;o)e|}xxM%xmk}Co--Y0J?()(nxWV2zennnq*K$dFz`rB0SB7m4D zl3#&RaQ)z^I#DieJ1&=0zbNHg9036-0ol;?KV~h(Pn=YKObI^WOZgM1{h8$S(+r z>Z0ZRuz>pDFu*51g*+09W_io@*_Zn0o@mOF=4SS=aAXN@`B=wL5}NOKQ*Tl7F_=)@ zJdnncj(&r!B{0fYMA>^0vRD>q@4-A(8*ogNL>Ee~! zu2G9jT~memP7<~NgoKE}X%4N@hDHdetFGnfZH36E*|Bk%nkbpT1X|vj#o3h)p62UY;QH$BQ!Qmr7}`!jr$fj5s z`1v&(=EOe@w*W!>`zD+ylOJ+xd~wKBpir5*0tvG@(rf~bgF@lj>A<4QVLnS=VU-2u zW$LA-DU`bA*O&LF`16R+vMMSC$D#~(!vt^it;|oR`dd`{~M|xhS_w5?j`3BGLslfB;uw>UWZ%ZrM$f*{{%`s zrS0sTGrT|UnynL_KZIckjcP2sMU5Vs0JVm(6Gu?2oJQNE9NP)JKdCqX}xlpu(1-(X|jY zBN_mhs&%FL>n95kT>>4BTTUS#7XHr!udi+uKslhIt&S=hNCgfoM zSs2cq;_w}jsx40P^5tM+v3QArJ`C2d-rSyK9GBGdKw|z>6G0PPLREUCWDv9Y5s1Yg z@KK7t(+JD0{k&+C7yv58RJ+<`-q!aGgnHJ;OYTk)9KJ%eQOuV)YS{`=>srF#lgJfDLBVd_9-v z@ppaY91fP^qXhyeU=9f`=Ia);R(Um{8B7fq#zQwg3pZ~4*$gGT$72(1<@Il@{j!h~ z20g>J=N#+lq#$eF+%%!qboNe+BOL13*zrq*Th&jDLKTejpYr*fiW{^HDaC2o-W#8v zmj-DrarU_mhAGkTt9HSF1V{+%kP7oxWpuuOYNh3j$z>F>r;%pRB49S2Beib&9*R#; zW7STp=zx#VSnb43Z^z2ih@_BsMv+bdhyItb(s3;{tZ83Sjk8Vmosfgx81!}1?9b4Flxh3e?2$t8aBBc5 z%P}r%ubu*lA^soAwqy~a+y>#qe+cCg1ivk7K;Q$P5&*AuW-J_E*_3XH?MCO#5K^5x znO_KC?WV+Zlg|Y)KnX{%(pMCWA;BCn$DJ>A(jbn?L<&?`jr2exDsVc0y#(DdbOTm_ zcg{dGRZP-y65JK;uVn&~K0LEx&3@`^Y?r81_hkXeHV|hym%sZ z|BcxmEq})TIi~=*XD21uR;9^0z%TLqUrFf2GxsluciDy*l9!LBlOE#?F}3#@9bvk4 zMj)U*GA*+GFlk(iqTs%g7U=k-BR;xU=!5`s236Udd>^WWTy2K5+6< zz$Ln*Kl@1txus;{xId=uTia}&WP@k(+A6nl1eWhp)lG9$s}S)#*v!P7tqTiKafzoA-SN>8aU`by{>8m2vuJL8)+g|b|3gn!0AuK`5Cm~ERMu!Kqp%UbVTPap*Q(3vwoxmy zPrKkbWT+tVtY*^b99W5nDF_MZ>&apBG@%H~8G9ZtDzPXZJTYJUz$@4BB)pwu9+75* zUA+Yn4Bcc2Y?si-IM3nz-VSWjah~a93)g7wq;@WWp1u!9Ka@$u$a4xOaA4gRe2HA? zZ1W?;Vs}D_WR=+D%r6z1TUyiZCr+_C`Y$EU(b5ranQ@Cub@6fc_6AvX{0Q*g^M|1F z38+fX>8j%=Z5O>1k0gl98R_g0h*M+#qSy7wTRQC{Z~SbjRT?@Nsc|M6*GwGb-=H2O!*n~#6;t1-CO8@=$4K)N;f^;L3{7-tdJITA}IG$o+)r% z)F(oMz&8GM2F@+{dG&Rbv2A3~?L3{TRSB0~lXiAqNYwL!7^lgQKTlHtDs2*^PwkSp zvgm`ILTT;{E17-&@T$+uBVazi%TA`|eV$7cxHJM-!EW9=ehT$($v|f}1OoZ5&I%=9 z9%)8cF8v1WXd72uH$1x{k%#s-r)A7WgUFmsroqn=qLEH^N>mDg-zbvdq0cv-h;nDDI%i{9LGrI^Xe^)R2We<*pO38UOMTk}hJ6uB7X}oXj0Tm%?k^CY? zJ;(BIBjF5|;XvmX)4eH#%YX0wC_MCF=WjjBVeo<1xoS0~$u=#dukqZQJP+~g3e5Nd zBj>2VA-DsQTmP58RA(uGoyI-mA-UeZ%Fnd%Yh0Pc0&+xn0pzQh(od%2=wUtsd)i|R z#)Rv&#a)e6q3fsoh1w+Zn1|#R0@rVEwe|c?^8aE*FybPyj}0=Ix}QRY)qirA#QFtu zN<)7gLmu*bnqDgiD$CN{xH{XDak7<6^|b-JmiAWX6)DqQn!fwnMQXsR$74PQ*y5jq z-XPmOt+3Oml(1oq^a})sWm*4}MQ(}g0)diZ{7j>)xcPanZ?gfI@kv6>8I$Qy5@G4| zb0>Pu{z=TUoAAGZYpTzmx{SVh(spvQ)XxxfvGS+UQ;UEAi^qWHq*QI(Yq{GApV7?m zul81|p{N_-^-HTXrOwa!6Wx^Q0e}wqAA?N1V4RK?#k9ElGWjDbAefyIS~BQv{{rR+ z@HrVB)K}0GQ+NM4;4xFno4`strf~dHIEFqnp)aAXpuwoC77Iz}* zwv&>_gxCbQuq$#SkY6u~9rBJMyd*H&W>2Y8+Ai`z`F(pVo+M%pEtN{hAc#&x3%?>{ zDBv+Kgm9}gee*!N3Yb=N#kVI%cYKditUqN)GeF^%8$OZB*|Z(ENXYsQE;!HiegOnD znAbwP(;y~2qCD8d0HivTJ9}D4=`9dk|h=5TBjF$EjvME8PC9Ynx2CBP1CX8S6 zh6?0fSlgeRW5szh;cYEPNjOERC;BFWb#RT4*ao(`(ntm;M&YAMPIYzw2oxz1{Fs2( zLnk0DTPezF2~jTbw}%5d?>z)?)j`G;C;!+18Knv4VtH;o8PkH=BD=ueF_)@HW|p-# z6F(0;kT(yXHRjdCW+hq60?u?z!_qRrg?2x%sJY?$aQKj0R5ClFJcR}wK>>Yhdv7~> z`6Inye3&ldWqzI5wS1b8(2G846FFFz(cFL)-rJ0YjTc}caQ3I2&*@#%&0S*NVC~Z9 zsSRo5e*ZhXg?5&H>#AlVznh48*C(rKwrf{zSqQ00rC{w$i|0IcWwz0oY8;9O=~F z4hiezw#!U%8tI;^57u!nfB2s~_BWB50`9)Oo~mKR8t3)qkJVg4o#7ytW4to$YUpPx zoAu}qG`IU&EItK0o*4e`u=bY}*;(17MXRc74{L zR7vmw3T}-?=pv8*e~{IdSjiyO0*b{GIAU1FY&-w88@G=H=EX;yojZjStxr(`xWF=Nln}=2 zJDt$}kUfNvO%q@l8P=axU(i^|mVX_6`B1w|AhZaFgtI%bg7X<5A z@7DXG81)Kvv4xbJLpfR1E5v9?h*R}iei(LrJcEpP;ie)X1mfsNJ z7{peOBRvL})d8=j>Kdlu9 z>^_?Q@H&`Y+tT1q`Zldvx)7wI{oOfA$`Ci}CmTM0VvR!78SB=#+e}kBtOP0(5&PwC zCqhx*UGa$J{TXJKW? zX`DtNUuxQCMd*3I{Q`#=#0&*~`T`-Dpp|4>&F_lzkn2g&yqHG=C zNMmGK{u(#e$=FX4sbB8s&_JiS&0$5pjj<9 zq^`JmXoNAq($_Fl!{hg_28RX5Ry-Jpy;Qkn>|cV{grDBen9rK+F|8ECb4=S)1H=iV z1Yj&_Q*XShTov%ViJ~cy5{##OUyg@k5M&iZg%=m?@HI$)$@e6QpUzG9=pMFxjp_u_ zWyb$4wBZ)ve8sda!`-+-8Yw{XF1Km-{%M;3H`Q^MuWur5&p8jDk@~w7GAFuO0~A3( zJN9|EkFrOir>{`|^+Hn-mNLZ;r;Dl)ElqxXti@l6NEL-pk**KzSMk>h92~LH5i^m#il~QWf5t&$RST* zTJ%Rv<-?{6g}jg4S+~!BwA?(PH){P{;e3Q;E^cD)CfTZr*|<*yvyA=TnZQ0ZFYOJ5 zKHyZ#-tScrsOqmez^o{oiY+vOc0#h%cG)EF2Esf%v;sS^FMsle2pVArJI(lu67rH} z%}o{+`xo%$X=Lk0jKN@(E)$U_m_Rk8Gm)NHalsyAqXtl&z}Q*Sx!xHbpymD{)!&c> zhx+C^jxDn&Q}Z-OH>3zROFEr5+K|~w<9D|}DFH+Buk!Wla7rID?vGPZ724B9>-`DG zbepvUW`15ErKg!ZoCY8W8zF<+$~<)Wa*;q;Llr!u4XdDX6GQnK#HX71?|qCP93~o4 zCxkk`+H6n+Vrw>AncUl~Ie!NW2DOMWtzdLYJ`9A=*KuN!o=oKKnZA;ntix7~1 z2MR39e6&lSWDp6`ZhL8^_jF={wm3z1s+`ECB@k^V3xie@#(&aI!=O=V&qqL`CVe#gYR6jEE2-5=DT7fGVnT`C%!KTzH`K z;=azxW>i^~Rau{;5HIPRmozoYGIhPchpR!2AvOad0g;7|VbO7HH4e$36;mf*EJO|2 z8a!v3J!Q+;YxKVJMCqW+D#4ij?@4XmH|2M$L4SmE~JO$`sDZ zxr;4x4K_f^c>jurcw>MM1n@y=eml{J%%7u(fM7mbOjMY^#Jr88s4Vh&J7qU}z~rkWH_c|s6lUTu+LB^bJ(Bg!HG zY^s^i7t-bdiFJoP2T4QV9ceoC*(9;(l(MBB3y=e{6(u{KkY>^hNA*tSH(IQEjB!v) zM9fRNU0Q@FXoesfl{M3a00e6e>y&MRwugh-C1KNJ1#~(Lx=hKE&A?5eN8ynF4r<+1_RBl5;aa(mpPN|j zws!$QDCpR1O&rLY2#97uaITh?wS+OV>qQ4P8UPxMJWC?v=7>lJ*EDVcCPAHTthPN7 zTzn}VoGk#v%;@pkiTsSj&Ogn^7tPktjit2evoR{x8p>Lj`t~W9qT9B(ZCl=q#RZdc z*r56aeWO0?@;d`pPs6j|bZ7R7h-ltOi*4qkYkP31M@^DedGui_tC1i!qXp-a1-~av zXhEPv@>S49DR9Dk$^8$eDMk6-#QmPqSINX#W|%rknyeTg)k}3=OM&Y$EtnhH-gxR% z5CF+eE$nSGKJ=C-!3HW3c$k6|%d;a|sUm+zDjREMRaRxqWN~g8&xs8MS`;)VeN;C# z6cL1^=bDC}d-@iDAQ$bBzCKC^Q^zs$4pvU^OcI$73@S6Rk)%4h`dyW&&FL zn4^}NYSHPmNg(ek%wY6h5>rmtu?li_F)i#oJH5a^IFmUAd znsovpJuLyb6-Do&V3O7y!LqNNsArsHFGYt&N@`^S65kFNFL#o@Lx^OQMp#_sOzsl0 zLDL(_bbDm7fgS`|Yo(OM8=$eLGjGL2C?Mc`SWrk3Mjm34hJE4$a!UPfDT(DlI~}K$ zUfe`}Yp##+VAVc*WYJ`t;*#+T81x3SHaY^1j7Eq?4MvMV^l2KrR90nG*5@U9k5{*p z0LcQZ5`-kI)Q*dZ8W~P=!$L{LehHHcEA*0X0i;M`E;xG!Pd{2O)<(mypu?gV5dhH8 z74$9^@Sr@FrbB3 zk`iFbTD*a`7L7>eBv@EjRHUqOi*V9VaJI0YQ7}sN%yFWcyR0_g^myb6 z48pdD*x&{2bH*CXw4AL-otch1@`4aqcN;)vVP;+NBd@H=s;pbLIZkDwS+d6kAuNS< zl905P9&M(pbST3e4yx>+tWJ!*oHLn?tmz8P6NVfIE3N(-IEnbHUgEccKMacz3ubJnP z3FFI!1P}|e(N?uUJ+hb8=&yo7DqJS1`!s`RyrQ+^aCxITT{`!LlSnFH3DI6 znQf*74=w5>yf!mjj8BymR`N$gNTf`Qd;C}4%o*811=&%A2(nnMJ)+3v4+wxtMTp4E zX3haXWSE11NXk<40gwn#F+&8E-g;%-0o9$1U&2+^?OBeeqe`)_6a*+M45~*gqp}hf z(q;TlupBd}=vAe7V<@)rEEZV_yXRO!G%8VxvCm^7W>RXa8N9^86U1OR4prL`8N$e`P$*bGIyK&Zc6Xbj;ETZ+(7ww-~j2pEAEG4OQ; zGbAT4CMZtf1^|TFPoNPE60-cooQZUCO0gb`?z{LxeTt2A^oT%DV*~Fh;Jkhy=<gpqyvO#8%KK(sUj^Xp1$y|V70N)9Iv?Ui-=CuK6ho;}`u z6`7gBNYVi{2+v8(FZIbNqx}`^`cNchH>_Bao(J=>PAH3DZZFNXlkF#t28DO;HfAOJ*`-zP#u282bV0DvWSTyfix zAcM_L+7gK-%QS42&#O1HFg+51;!PjaLk`2~yGBlID#iF4?(9K+>}} z5B<2qwJ+Qs35pdb77;>1#7ZEqtjema&!k@eRCB;`QT(RkL{M9$4;ApFi)!g{Q_~_U zbLqcg0`zlmxhXcH5-DUMB0Iu%$~2+xc-dQHc<5eqB@ulCJDoK@xY`;G0ovpV?q{pr z4o>~fe^&E{IPDs`^!k*~k!~)}cPh7&JfY~wlEo>2`;l3SbYwgx->Ti1p@g|g4xyMP zR2ce%5q>wsM1xiYW(Kt4_OaGNz*<)V`KMQhOj2T2R%LyDpNa!tdAU`D5b8f+UgCSlq?FdC0wx22CW@FD z62-Z&;zyTZpi+?tv(`wyON=%%U;wW-dy6TFjqL3m^V^bV?m;=K6mLx@BX8rvIYL{LssU9%Pdqvz{02CMG|41g+9 zl|Wuul~q}{Z;f75;C_NA9v);;T@jqH=9^NYE@_Hgxzi}l2Atf=xK+FVx8THZvMYd) zw%T?`HK!n zXofQR<6+XfvcVn^L#}{;m+A|Sk02sOO%L7GG<|rRMK}roYi;NS<}aLJu806@*1BK| z`-&h;W!>>zjmr9MUY~ULo=U|$Sq(kOD}y~8(}_Z&H|i=>@KrZrX*kEy@DCQ@WFtZ7 z7l>v3-pf$Vz2_$?r2s%%M=fK|PDBVuASl8{??tJ|l-gRGp1Cc}nYEF;anzs_N3gIh)ni87)-h4>{*8z zL$i~hkAfD95SXorjr)n>pmW>7K#bpM<{^P_F^?Qowzi6ghhna5ATz%srN6kJT2uX# zScQgXJKZxcdf(F1nBah=Uz4eye^~oeREKZV*gW-wtXOrcY=J&O-CVAPo`kpb<0<3( zVe%H~=eOvCgf1I6-ouN<{n#?~_oP3UCLE>F$5nC|XpcY~Ya%2<9cw@|+PRtqgb@`H zvVc;GnVDliKv0H+r!08QMh3Ad2W!oWP$`Pzm`Jg(utp#v1H-n&Xe440(Sn4e6l*OY z%*MDgQP=|jqQvu5N>F%M@|s)RB`Wn_nc|xg04mB@tUr(lBCxBrnYAX$5K$cG5tt|< zQpSNM)&&#H&7UIxi)I}Ip;DRfK~SpNI0|W9NCJ7brQ_+ZE^QpHjla6EqjAA9$F zPoc8!R5o6mUX$?_r6ZM){CVxdj1$8q?bP@-vXlUzWF}7L6Mh|VDhcYu5B|8baV)LQ zZ7pae&q;;zbwmQ|o@JWh+Qu(R0w;6P6-SHN5+mVCp3Wzd4!l-29FUy33s}z-Byw;$ zXCTTvK{v*VobjhtY04*fY^|Z0Bi||OPa0tUtfs$%7I^V`V-s)X>wRh{Xt;dLY%Ov) zwqCfxK9FN}PQxr2K7Rq*+Lr8W1>oyf_Fkw2^5639aO!=@>6Z1MRR_8uSqK0CAOJ~3 zK~&gTxPxNbO;g4zPwXAr`57nV-$Yg9=ad-y zEaB6EH~*ZZ(BsAYaw-1@2I-AyU6*NX80Ai4vJWA)yYA<$CQ=(K6iee4FHnmJz$^kx zq)Z@ZHnt|r0z||X@@7+kM81}j+T03|B?Nf{02U@BhkY}OZaTKH1Iz)e6mfNixT9HlZUnj`AQV<~Rlu2O_K)+07Ef!L_Vk z3r_X`+^JDKMq8T z#cGhTndc_Tc>=~_+^M)AqEe)_HcH3NVSWX%O8u?cwgan%AI}_qvW;}l# zZ?g8j6;>;lwkn_aEsBVA2_Mg0PS52FpHalX>K4)71w=wJe7__avfKqR4sseq1A>mn z01;RN-2U{l-x?j2PcmXPg$U%LPRjI za~D?)g-nu+#EZbQNW%0sv?*rsOejy53V2k?`Ll6w66i!(87*>KP!c^>Q(m&zX7Z#` zEttsEe3D+yq#?QVXDoee%Du8w$JhI)1#)pDAcCme?3=_`pV>!@0mvw>TH3f*h_m#6 zLnmi2M&^Quf>5c*@95=I{Ys^Khu_HH3tPFBxAF@!5r3?>dj1R^0zc1A7}yin<)y(c zjBH{d<3y&&_U&9Vp%(VKFN9Y98^jE2iC8lL5|L&mB4$QJLIr>h!A<}`MBuGc7z8+q zB4$CbBJF^R5S=WU5TZGh(~KcNqc5i?yErq#IFqS<8(k+{rgGWG|Hrf;4muBVUuC11 znFR_6r&atpWx;3v0TGoIj>E`Xm`At&S8t-m)91G=Ngjma-&EEeU1{E-X~=DG{!`g= zClgWqls>48&#elZ1xZ-Jl+Mh=gftNe;p&!hZH!OQVxfgasYr`9ZsJ77m&|g)m^FFB za4+uW0+XrO5fK3ekVt8*S(u1`2p9m#D#Q_r1^_hHE5@zMH1pkOppwFO+z<7sJjJOS zffz)f@_nBoJZ4BeM@(l0?j;x=7RC7PI$Kx+Nv2D?w}+FKp-ME(FOg)JYY##eL6E@R|&#hEcjXgy;7OK z?h_lk$)~>adu`RpJ2l>r*9)hYxY39h`Zz-}JrUtp3}xS-3Jo_;SU3h0XALL9F@pfG z`7c7^lFl5P$pwI`$p7cR{YL7+8plfabGyr30ce4d6F)fc{)xivEPF=)45%{MjJk~@ z0jlQhD<9gPIrqYmk4_dUGJ>B*h?}?uDHXk*q3>b{;;8Cavh!=r`8~(p+&xf`8UKi- zAJlEAx-fRfiB--F=0R)NHJ?f7&&@$*LS*dJ2pPKb5732 zcupbAO71X1S#PrPg#PiE0mDa*)~s1G+0$Dr*Aq&wree75VX$k3$mr3dyS{TVw`1dz zI~ubTn$a3t*vJXmm=wU|K#BG$03nji4m>5m4_X8O@IU?c-vdO}1*`22LY2*K%ByB zZ!Z(Y!+y6UQT)h@-?`)j&t-gQp$RCo0|hCUt=Mv!$PPDx=?0<{Lp+>bAJUz-A$^vmW>v>?_iS64t;F&fiREv; zlW+UlnoTRRl~{i3LW86?jMUc%v8cAjab7=O#F<)9(wHLzBoQKth$27&AOI2}Kt-s~DCYnP5Fimnh(5-n z0J1hDKT;|aMY&8SM=Am!A{9m1Oq3(aAgU;n%Ver6Tj+FGuH(54+g4R#`HaN!6L0J; zw0(8;rj?agetV_ISP~)SCW8sptX#U|YfYo?9G_w>E=ASQMCXeWK41Bc1`<}&(5oL*PF<^%!DW(4Fv!QNl~Pt45ET01w=qX z%8<&aD5IiCMHv-kNo6do+TKbN`7%mni6TH4I&yf|cQ04(-2Bvz#wryll~qwzsffy? zS0+wlX_6)h=TH(*fy+xRYcBP8@X+DIyS{s+dgrDmcg`-C>`bLk0z_nO!qHwUu}DB3 zK632mKj^J_WXqQxnNt%fKtd!HMPTBziV(@O2*7yPC}oBnL=hkoDWx)quD#*;iin!I z5XVS_L;|Q;7ywBDk^pMqnchF+p#%T#`}?{-qxd0(bKiU8pTE~Tc5B~1*YWlBlgIMR z!X3}-SeW^2V|n2=kL6eQ9Dn`o{GzAVd}^^Ai4w*N^-OLhvo+LWUBk{wSsj_yA8<~sxVNrkjAYJK{ir=Omk!}47LY--*4 z-?Y}NDSWbW9rYPs)Nt2RPpzBfA6(2Wdg%9l@1aGxq8q7ZExY&0=le1Io|6hTWa>*srQ{YB?4>3;VWwdtX2u*X-Q<L2QKVD`F#CwI&)yU|S8g-Xf(FpH6y@xJaymp>Yi85`us{I-Vb&bS!i>RvVXbu>vxrfHDVJY}f&UYcITIulX00`|%s6UY z@?){+&uSx#nl~@s2=$p;zByNQe0>A_>w!H-$0qoiXLFx0^SUX3pv z{qR`+7Vo||`+>FFXLY^bjR2X&UtYDU|HQA~7#{ykF}G-L$Fkr)a-nB`_vOJ`oE}A0 zZJV2BX9KWWVXSlS)xHUWA!4>#O))K*0Q)9LrN=>gf9n^mtgD9n)#H6V{gZylse09t z9bai2ef!v(?+zBGVmS@^`o~>IWVj&Za~f1pCMz^qIw2g76>f45nwBamQZ}0r6>NTe zC-?7%Yw5d`nZNb1t#!xV`0>lV(zts2_HE0$etlv{g4a(QG=SM$hSfwj)-#?k8S5ef z5`fgM?RflmT56I%5c@JD1Y}`I@YVL8Dc@b!l^Iyv;N{|oh(@~V&vhxO8ERWHQlkvB zS&008<%-r=%s@_ zU42-;ths%8RfHv#00kpyLKyt`@UHJ&uK(heCmwEytkj)95yP0b+N%H}p!JQbr$6o+ zrkeS8&u^&{vif-dfHHjj%o(+4ZB5pSw_329A`$>*W@bXLbU|Sg*Ad5=k;gZ#9eVNL zJ4f?(8s7_RS1ek)BKN6;&s@jvuD=tmiReOplB-tTu;KSt-}_)=?G!Ftwr$ZP|F*q- zepEGo-hKae&0UL>4S37izW7JWm(Gi-=FQ#uN9#5$i*U*(c3fWm;btDtJ=1;E?=ZH%V%=}CLFab z+WE)r%jajR=g+(Mk5}KlNKI0UuUfiu>QUUjw~UokLxNg~HI4k6-@DOD2j3ujgBTTYbe`yJp4X&zLBVAZ06WObr2q zVf0+nFaLG^M<*lk!(~)GdltX&Qhj&7y0WkJCqJBfWdwzVW33C00}X+Wiyr*=(5@d| zF;ToqDI#TXbD9exagsW?6V0DFvFoo79=VtwzIgGKzkcuiv#~j+(c{N{{C^)h-c=as zy7b!L?Ad*6)D6Nh4S2Ie_o0J_ccr3uYFLED6*&)Gd-Fek`0@wCqeDYSzW3n|U${0B z-W^g31az#mHUvBvIB@92A9mM1y7|e68?x^BL_|a)fTWyio-%JRcIM0$ z-n;7IN193o?xL^teDI@_eVaDkKX&Mqfz@BRfAH7;aDCHXtZvE5)tBDeUBCXz+p9*( z9zPyB@b`yD?`i6Pzw_MXJk-`NxvyjUgH5$E&hM2By!-z5U+f2f#>eje+Cw#do8iH0 z2X>t}cw}G7)_}Y8NUze2+e`U=UJo3TOTU3{0?Z(xQ@2rjob+(=mGPxy-9{&$Z z`(Hiy+DGHOqsq>%Ep)!tc`!9C!uoA%cWlaLYt``S?kKl(< zc=zH30H~^4_sj}7cJ|d@_V&l)ey*AgtH1QcS^${)mskIujU&W%wnIu61}@9W<>(^CLZH64#O z4gT`bp5u7|JiM~~i;uRP`~NPDSC-eTUb^GUb4K1i`sTYsQwz&jeb1UNJz5I@H{Lq< z^1Gu+o2Rky?kC!oEy%#&z`4V*!qEwH!hAlSdcH#qcRlsQ>e^g&X6Vw1PFU2jpnA0P zqu1X$aHGkc`Th}h0ZN8`PzjxR?%xc!M&G&CvIkyT%x=)@SQ*gsRTC1LVc3Tqw z+}QiVi--Cd0D$UNKl$voW&l|FyMMS%1jbJP>PK&P#{htJtDkyyYcl{`-}}Oghi>@C z4>L_GHgCOq`Mg>c5B8ip`qADaS4IR-&04zU{w*u!Rl{)isnerm-*=kN|GJfrf32wo zERjiYvaALXM=vzL^m1L@d_9~*L6qyW_na8J|G7(xG9rb{xtH4BJ=p){En~z2%o>X( z+Cv{7-t~i?nnyQ3@jzXU(3qFAFmnu|6I_IkT=CGMU6<>hz3v*QPkwy7?Jw_IRO5@L}3NLQs)$bC2dXgMvs= z6q(P#T8l7|LKT6@Q&=D#I`U%ItY`0iWNnrZw;Vb2FE4hk`1kG2*$Bq2zw=*@Tx@8_ z_N6bM2y1Qp#}ORyUo-*;$K;%Kl0dHe`;NbHYVU``^&6Kz@>dI68%%eN^%%80uwnbE zSyk~+=k6n~{aya?|6x^2PHud7^kBa2EC0*F+WxD@4&@6BsX)&9>fWQT{_c}OFz6YQoZP& zhaTP;|Kg>i{Zh5~3y<8z`(OLfOMNiAee1*P>HSwu49;Af!=^7RYC3oNjl=a1JT;X- zo|&bF&f1zu#x7hN{9;pegrjXO^R8d|&3PMY^5?paTwl}Crmmcbr@E^O_n*4fw|(*a zRrOWJt`6Ul;!}n`I`ZQK*|tYl+_hL`As##5`O3@Jh9{`sqU`KyeWk9keQ7RJ80|jZ zcWp=jfO16FF8%ty_RoEK?cLD%%HQ_SeR|c#HGQw`pUD)2Y8y5@w|rjbnb%&qK4H}+ z!~2i?%hA~n|7pvKZy&o9PJ5!7wa=|w+;{PVe>{100B3cyZh2;H!>&UgoZlzCZKo!kWgJ;g=?S1dOHdxzSqaY0AVOMwVs@c_g z_{7PPSjHXvr++Ua`wsu>K5BSq-F-PinqfA)jR^B;a<+w$|jI#spt@f{1?_jJkK+jl&k`_0ey z_EPJ%$F|Kn`Q{6+UWKMr_dmR$cI<|Iw2uA!pN^?H8^8QeR-tq696I`oe>&av__J#c z|L9j2QhhNQJo@v0JgVkw{K`YwV2%+ru7CWoW&QhizxZm;FwI)L{((ooJm?-igRd%bM9Wp<_YnzeRyeTEQ~GFWhHv*vYBZ9Q(f>SNdS ztX1tg8s6xH9g zrY=LaY6tgdm2JTcUq5)FYRi9^U1cJ6&794TRsGA`*T+^hR~ekV)`hT#f9b&GK~;O# zid+UY3qq{HN!T0NRjoBS+dV-5J=!}~vub&UfJHE~xN+9N#i3X?s=}3*4s|VC_2l}# zU;L{U)~t=Kte0+0Iu1p8K}M6$#9kUc^zje>_YXfBn78w<9(ej|ixxEaXA7wYukJbU zFaPVy|K)$%yZ1`2e)MW*9|J)3{8>?F=iXnRJajzYu%@{#sO@?1+Wvpu{o>oO?oYNq z{_va{g3SDu`T5??fn4i+-FbK@f4%qo*zEQeHNo)#Y2KIb`NHOgx~j~qrHgj_j}Lxn za}`eT`*IuH*oo7}a~+R8yxPF$VyK#%DO?%J3s$daTi=mE ziEmudHOensW zbbmt)-PH58d|?M)eCrq8-F-UKGH3aw#=60w8>0dsquoPs>)dq@EbLg8=|6d6m`nHe z)P3JmeBTErNPy1${K(#O)$5<{Sl&F%^Olq|1 zOlF$81bU>WdvI*9yJu*qr+aX8u)Ak8Ta&F`cu#v_@2l^g>>Vl;hI&uF`^w%z`#lS* zsu$edHu&LN`!5ZQjSXBn@Yeg?CFg_bs3<8|^(4eTtXjBnmF)Y?TSvP33z^0xt5+|n z8|mrGOI7f`{TC0s^6XbwkhybU5a`63=Jl<3y75!}n7LDHb{P``5nZnLBO0>A^ zcfK@ezTYUS`&6cCenFvAJ_!yk001kV+xms&L+^e2;IW>-1BQqw0#pXqoxHaI=9(V) zt9#n2>}iaiyV74byDox}D`VLO^*Ms!Lnq!lGzOGuTo4U+k8$`>g4OZdmIvC0-u?Fe zBi%d&EGZ8R4OZ7R)&lqU?*3Wt5I|LHU3Oq-$Rse9Jtl&{=0B^xzWKprgYSK7-_a}D zRLmp-%qZ+Gs3qbf3W7kcap!+r-&SRA2alb-JWw~gP6-Om|H{43Jk?lD&Q-=5+W?86 z2nstfSLa@CiYw<_9ib>8iat($>*bHNo)#sH$aARR}6jrbAKo_v5VL-mzTUtfW;y zx#qU$NbeZK^o~<@jU78N-Ho+sc2&OTYBF`sM4=eSct@6F{V!g3d>ETmF3Y(rPfR+Sk5$rZ?5v#c1xlZC|Xq z_=~eQ7-~m_8VEtg&Uc@JSOB9c(l@4fqNtkY-uL|Crc38u-PJP?-_l%)ufKKlm&~Qkw;t_LzjC%5IQi24fw7ud ztDac?P;}xquMfu4OmV83viYu|xUuQ(hZlCt%b$JwyATf_|IvPVX8pE~C@lgWnsk|9!R7D+fd;7yz0`Mb{+_D? z4?dh%Ngz)DIYOp(_48Zh`yagh?E~^Bcdwa8M2J8@gaX1bq~veI3nqoj7hc;nxa4=& z&WUiKnslEQfa>Lo)<6zG7e+MAQ5aOHDUFv*?W%8VmG6JB`&;|r&o-=?r*NXyI%Xpk zj}!!{e)e4tKuw0U);e3A%>WVwqH|uYH&cJt@865xd;hI(?}tCzu&zZZ``J+dwD)W; zL+_OQ<@2xY8eIDIHBAwbfA+{q+?xBQ$g=OOk(#?O5fT7IPHl$0);iTTtbTgSiifWs zd;R3g|L2*8jmx(@yl{R444v-db*ne7t&0F4Tfh8~m0cenveWcY$j+a;cK%!d;2oX2 z{-4ub4{TbR1)!>xzrQlK=kP1vI<)Qg)~sqZ4tHwq`uhGCPYe{Q>fqx0yP^5%Sy_-9 z;~w8R-G*_shY0Z<~UV1&&`e;9%ZN=XD=8%|IW)*Tej_d_P%Nb0R4x4*)=xZ?qT+( zD#dv4gTMXYgK-X8zq)PP{Z*HLe)P!s7yw2t^z)YHrrh9_v9Tcl%+)VxlkN|uBERaQ z_{HX$J+*CJv>E^a9f3(iK~(aoy9-@=&b{

zmw$fr$ho-O_7ukQ(bKz*%G0YiJ>LOSj^*h`o5%X%?1t(b4UI4WV79p?M}w1wf0fBh zJC>)~l``5tl3mkWjn^zYfvTG4W=9SWkI-mtWn&dw8#3idV^g*2p23?wdSkfifybU* zInsGx&#u=m4aAUbTDpWU^$d(=SI((|t3#&IGN-wk+~yNsdHVZ%;`5<_Fo--@OQ4Z<^oR_Q@i^90}HTZ zs#ZV0Nxt{qo8SCU{%rla`C0Qau+fM?1QEq16($_(8~abZ_UcgE*SBnJj{u-{X`_1U z(v^|f3#+T^0bu0DiPN;;{t4-OQO)Y-H{Zxoi{I7`ogCN=3wa;&s?|<<2xAv<)zvu3j$gtn7g1qUC2bQnq zt9pI^@mF6PZu|P?E$x}eE3zVrkKMd{(roCxmQJbFZWm1*JXV} zvhkjObN`p_hl78&`=vMfhRw8VNo(WqkZ$kTx}2{M*R?N>5U_T<ss%6}?>om2owrO9daQ;Fi+ zpI_W`@!YE~c7GaCeA-*9@NK}{;L))$jIt9ywuRx-r=vBGwalGGnfkg_&))UWU77sp zizlw(*s1OlM+Qbf&0f{^z;g>*su8lYHvhZ3wr!}Z$)L(r&AYp)c4TBY1_Z#=aq3q- zd-p?kXVKpGb=%uV_kH*Hp>qW;S96wp1xC*7I{IN}?LEKW(cXMBvw^YGmoLs*yls0! zZBxQ_ASYeMfH4Xy?%*XRZuO)tn`pzxddu)+!ji zc(8Nw_mwiI;z5Jq=(sR){Kxy>I}uB2rtVm0&WK!!aqK=L5N3@xPRxDfhYLCzd!PE+ z)z+F|98W|UMUnANO?_llz3RD*4=(9@=bIlLzLGa4ok-{y=SI5RinYZ(S3dZscYkxV zX8T`k-qdc1nAEa(YumNgf7E%UU&sB|5B=y+XWNRqS|+>Es&>^kHb1cR#yj6UaJZYt z`Jw{=sG9Xp&N}~tqX*B974lR43)+qG2Kmqjs@r{nCcJ((le_`p3-QV1I zxH|?w+lL1rOeQS005+fNNX_;?-?XJYr(9>lI+C+US`QWk$ac|PJKe+k?f(P>P}Max zfcU_d?{d=}q^jz9s~4=@+T7e&RomROWPbk4YscPt@#MZe-8ZUcH>0j!zi@s-^@4?P z@$D0Dzj$Kr?kjy&^X~h4duuHs7kUo#(%Oad>!@bo+|_qgUwiY|QJUAWAi^j^omX*N z$GQc>=Z9N1Zm!QFsD^QlUme@y)TVEeKYnfbo0q?MY45A2_q}@hLT&5HMHz~!7Oblu zJ9K9E3&;2FzA`X-;e*dFZ>_;ek5jaU06eC9?C6PKy)ao62LRxquCCF!ci;DgdpE9L zkhya3y~Euj@zCXS*Ro6Qxp({44QrRo8a%oCjRRN41TfpYd?8;r*=^vum~CFZh%cPF zUb}2*&EWMBHa(F3E1fr*?zt;-{$x*H#%&NK1H;@@qIgud<-c3MeM?=grhfT-3p!@^ zpE@}%VheK(TmPtId2^I&YFM^)!P@&5tlgOF{^+vmm-~qdyM-ShIT3nx=tc9}P^{jFI7UH%41qH$AoFu1yV@&aRI>92|`c zJ;(aFZT^PGm#n|PWkLPextC8LIv0b^_jEzamc^UCxM=O>#)f>~fnQwevDgF|KHnc4 z=h8mx0#n;w{zKi$_i8T=vB+PrrA!Zr6V zY#q6J_Oce8?>>{Cvt`NFM;5j(q3(}vU~QrE%>$2gpXrL{ zuiLu)zRl}bFRmLo_3j({x<*+KUAj2jxbEIBY`bSoD_uHv5vxbfp6VW(@H#lZOhQs< z9k;Z78OK+T^^LU5Thx@a>xfi389@L7eYy2tzq9a2j~eT0*#BNbf9v(OdMI32_|unW z-5AaEcg{NWLF2ynn~n|)uWpZ(Qj{@tD>3FP=D?&7(0G$KuWhcqbo%Yz^i{8JX|5yV z$7aiSaV}$HS6}~|14p|HW4+f-ymj`YS5JSmXQcJsd3BMRy|O8H{_O4_9sA&&tNA4z zkAAhKKANz}V#RE-&1>h?UOKb;H+@yBTISZ3O2-(1*zCN<#kKt({`lA%FI_yJpS}GL zR(3Q|qU(<3L=d$IQ>J;{yqb$=-g)_Y&FXn`Yb;hEB>n+_j9z`?KOZ>ST^Q}TcKod~ zAH90|zdCqLUU=i8YpG@yKJ>MFdVcwfBjthX zuUaXH=h?e^#}&|a9>qmO^sYz$_{>v}+SGGUPz-;N?j@*IVR%Ie-`sZk+$ofBfv? z1Lywq$!~o5E{KRZGZ$OYdUvN!z0N@3nq5B?nnY3aRY}4#oZmSA!(aUDjg#O1^Ct(^ zFRLbiumNUJZ&x7Jjt4^{iky13TR(LHaB$=GAO7Os-}=(I?>}+&A@xy?12ZCc*N7kY zr)*SbfJQQRC*nNWeYkOQw>C;52&1&z@qh7WefWid zr|*6D&6i%hcF&oI_V3kTTyT+$&XA#k36DTl1gCqa&hFoL<*idsJk~o91?VX>(!WDQ zocY;%g&7*@;-WD5>3Y}xnf?2(T>6(6uAO*%|H1oI5@CI`iIQ^;K?A6FvAsdSgyP;z zkeNnWSBRs`X?_C#_&2|FswDh`HioB$^Q30|LNy%ec~3q$D7ZKZ+Og3oj&)yM<2Mn^C%w2{Q9RKy>tD;E1!OP za9hvoZhUt2o$DXI_t|F$$Ky3w^win>H?Lp4dHUg}o;f*)WSZdaQ|Llitt{k_L(x*sZG57cgDb;EsO4*I(u4r zjXZ@_0Iv$JttOi%tBYc;p#w~!&Nz}cuY3DvPM>`Lt(Sg!^~B?+_wQ?h3L84$8ooc( zTSH95F_7?t=T@Zg33QMGi*umJKmXl-t2WPm_q&V_=S=FDFg||e{J;JE2iK2)L!R@G z-+uYUw_l#>>hA6BbVOZ5#13v`H4e5x&mU}Sc!bT`F!nZ=lF`c!~k zm7pu?vL5k(Ch1zTz9-AN)qv9Fjfb@b?}Q>w10+4R1%!*~>Gv`Q*|+z*l}d-cfcsN)VrQ0~rDhVYI%G@%_@t#*c4>NQ4uvG{s2eNHnor#j0-Iq94!)T@4p3IGNwR-btn5iw_~UKiEOoCy15 zzAGuwZ4AR(NcOb?p0%B-fN%5;X>29~$7OkNUwrR`8m*h)lxJ=ANfcHraKdL=tr)iK zNEIjo`L92C7Rnuj!V2WaXB5Q1yAv$QCl+gC)|wvKxxnJb>cXy#D!FTU#Ltc_6&=I4 z6Fh*oeZKMHNOYdn!A0mX;Rsvg9A%H^*!1&@#Kcem^S3FRJ2J@ePH<=I?<_|C7LvY< zEwn4g@^XmRDI?8XvX#l*Us#?!STr$E zJTZ;BnC? zCYKh*9eNoyzXmvjsj}44DSwRcozbshaNo}#nIPnmXM;mbp1xW=`k1LO%WG>}#7}Sb z7&O#)d45%aFespi?`alsVUilHB7|_d(4gU-hLSo_0e#YU45W{6J7IKzb1N`->ABQP z_x1Gp;{q^{uIE*H=rZhxu>;y!svbSVbd0qD708bpme(t-V`mJ4O+g>WJaH*}aTMB{ zJk*6_3rjH6ZO;CAR<}V~2b|JYlqJtlI#`~cjcwPs2W;Oh22JKbQTMT$9sYo6QP*-nrkPbLNBrjGf)f=^H2|vG$P_+xEfzu7u(pn0q&s?}VkAYCm>}@$YytWT1@)9BaOnsDC5=Q^lF{cf&w1>3+{C3})610`8Qm(gWqtCTuu51M#8~PDFoAk>7R$v3 zdgcd^+*Af|r?h$BP_UJ{s)e*feL{GJ?(p$mcU9J|#y(x!x|aN&$idnVJOqUAg3m3e zyf>{ad~2ToiV0JX83+YPdiJ|iofuV47tALwqw^7vki$1$%}}e>>)2$>pm3(E8+~U( zcy}K@j8Da5lf_?b9{_o`*vc#00w{9F6~i5J#llDTRuxKTF}t3_civXszRD<*?j3T} z^5urtO3_%iE@sZN#E3wfnJ=b`1$T|t^zudW)^d*m3pW*!yG1@6Qkd59=Y2pXN#2cF@XohQt~5STXBlS zk{cV?5bN66@&;5OucMAS>e#NS+j>@Ui$-c$>I3|SV<@2S_tFNTw8|jx4zz?6t*UBD zSkNe9;wef~y$UU~Mw8koExFOqrXj^R57^>FwShKpzK>0Xj=s$*R>PZl$y9BcMg^V? zADC49uvJ?fBLS9VzZ4ePA~O*PZTFFwO;c4|DCD#pw})kVA_YEEY9a+>vQt(duj7m1 z`t4>ImYeYgj{{Qii~fX-Z2Fx`$Fv7@h`ycc&1Li^po0*hm0X*d=SEj3;QhiTH3_JS zv!H5fGzFkA*Q$d7ptu-$_Ko24$Q1@F`b;Xe$_kOP)FvDv;OlMZ%LBSKk?wy8|u|Q_UE% z!2Uj+D-ZkVb|UjxI=yXb3Q1@)14Ok^1yr1KA~2Z7L@;S)1_5RbLOC@_IRR)A1nZ)A?XK+FQPF>I)m%xWTH5H5gZZ$lwt@M+5!xWFRI;xuTGt~ysdd+fKyex8WnTY|)Uj(X%`|l5WZ>hp!!Vr0ExSGC6Y6(Wz&>%ta0!LNgaQTax$aIvVW|I$DUOw{=#|%#*!{h=>ouldk7En;8|V zp|8v=khT&4Z6152{9jJ!>E##`=vnT(lm(ZJc+P#b^La{kO5i_QYd57gSQv+1bcZ-6gC&}6XlKk+>?6wOyRDH_byeW0u8LqNy zjvQt{#C(N1z;?54Q|VmkLb~*E#LzJ#jc!EN-xQHb46&|CAoLR012Sty!jb|QnYoRm z&C4^RYq4M$07F$>+mm*E+mAte-6Ev8#LdbwiIR?yg_QkCxYf)eo4q#?$YqutLkfcf zIz1E-aT#h zK~g_h!Y3gAKbbTc19@9SsB(Q+>brz^>fFuMJ;95+1)0$PB(>swIIv8*um#E zSkp66kP)mxgpQq(M=mr0qpd(EM1HOq8}P@tAUz|M*=+~#yFy4ckLuVae)o6G#j-0C zBk-f=MF+f>`udv*25{NTvJPaVU~Y?uIVz>PHZC|FdjP~%q&uHO|Ikd5HTn9>&a=JE za&Vu>gW1HyJK3>AI_`VtHfODNLySVqFOw}@96L}RCYF5l3go-64^^<)4LGmNvWN3S zcL>V4+K0H!B}*KiorjQ_l=Z?XABG+#^Y+Jn8&$`;?**8p1CVpXC&^BB7CJ#vw+b85 z^U<>=aUvEBB(}1yTb}XHWUu29)UF^w?Ig3UpB^u0_S0QQLA}oj423KWE=re#y#jfK z@H(m=U%mNF3aBJcDho;%&DBf4B9u83>t5Kv?9jj7&`6D-Selcs>1QJPjM(QqIbT9ucy@H|*zMzLx0_ehRJ0+C(-&VHw>jc>Hwhs!R6>F8n zQljydzU}#+{6xmdZR?JyYX8Uc{uU3nZ^*9sC8 zmIyPKkj2Rhr&^NEM<2<0b?IZV`q~|oa(6KP+KrKwjm$Gi&^a;bdX?VlS$}4 zXeV$)$h^;9f`JoFS!U#lD=BzB#%eyE4o}Lf+p*Oq6h~m_NOm7MMp2Va3);}R&|YuH zTgUkHjQPE6KTv`Eh&^)YbL#Fsme*Wz9lHg8+^N~DjUIHI@Wan zC)Uny7W=#3hups(-kCa@*cgERQ4s9L{}+4^Mf9BmiSzA&H&!`#(LKR(MDMcFb5WDO z6wUi-MOqVJ8IV_^l8Wwk&JzMmw#@HD^9Ad8o+G>Znsbn)Qj)iQStcK_)ahGiMy*_G z_7{gSmIF@V(7i5*M++%UE(;Yzq0&?f55d6xff8Bs#6GvxYk;NekL=0q^TD$R&;5nz zunIuR#KrJ~T=br!sCq~ODy7*|9jrR)sAC*kc5{O`hTGO=xOR%B>@Jos20cuS2(VLl zz!lAo)NR#)mZXmY6!mySfk7B47sM*FIGjz2!4@%Jn4f+>l-|Zb-+1?8x|-w5W;Ar& z`FB^Y^*ZV}OmyK+id1zwfjD-|;Oap}ikR2Jt)>5etQdN zDoc6P!l~@Xg2#RH%%8_VWp)9Q<>$*f{KZxfM}A$#wF4ImFk+vizAxs1?8JPYT}K)7 z9#TWY$m)2{8R*R%y*rvF+Ur9f)FZD>c^!4sk#9oea@ZNOfd)T{FN#yW+t;vOntfF0 zCHMX(^4+%BzuZ>lvfprm6~tkM*Gz;3Q>-cGG;3KCT}oL~dKg?p85Y=7BhbF+9&ylg bqsadQ`+`Hqk7x8U00000NkvXXu0mjfFo=n_ literal 0 HcmV?d00001 diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/syntax/taskinfo.vim b/.vim/pack/plugins/opt/vim-taskwarrior/syntax/taskinfo.vim new file mode 100644 index 0000000..2ce2186 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/syntax/taskinfo.vim @@ -0,0 +1,8 @@ +if exists("b:current_syntax") + finish +endif + +syntax match taskinfo_head /.*\%1l/ +highlight default link taskinfo_head Tabline + +let b:current_syntax = 'taskinfo' diff --git a/.vim/pack/plugins/opt/vim-taskwarrior/syntax/taskreport.vim b/.vim/pack/plugins/opt/vim-taskwarrior/syntax/taskreport.vim new file mode 100644 index 0000000..3d0c882 --- /dev/null +++ b/.vim/pack/plugins/opt/vim-taskwarrior/syntax/taskreport.vim @@ -0,0 +1,43 @@ +if exists("b:current_syntax") + finish +endif + +if exists('b:task_report_labels') + syntax match taskwarrior_tablehead /.*\%1l/ +endif + +for n in b:sline + execute 'syntax match taskwarrior_selected /.*\%'.n.'l/ contains=ALL' +endfor + +if search('[^\x00-\xff]') == 0 + let exp = 'syntax match taskwarrior_%s /\%%>1l\%%%dc.*\%%<%dc/' +else + let exp = 'syntax match taskwarrior_%s /\%%>1l\%%%dv.*\%%<%dv/' +endif + +if exists('b:task_columns') && exists('b:task_report_columns') + for i in range(0, len(b:task_report_columns)-1) + if exists('b:task_columns['.(i+1).']') + execute printf(exp, matchstr(b:task_report_columns[i], '^\w\+') , b:task_columns[i]+1, b:task_columns[i+1]+1) + endif + endfor +endif + +highlight default link taskwarrior_tablehead Tabline +highlight default link taskwarrior_field IncSearch +highlight default link taskwarrior_selected Visual +highlight default link taskwarrior_id VarId +highlight default link taskwarrior_project String +highlight default link taskwarrior_Status Include +highlight default link taskwarrior_priority Class +highlight default link taskwarrior_due Todo +highlight default link taskwarrior_end Keyword +highlight default link taskwarrior_description Normal +highlight default link taskwarrior_entry Special +highlight default link taskwarrior_depends Todo +highlight default link taskwarrior_tags Keyword +highlight default link taskwarrior_uuid VarId +highlight default link taskwarrior_urgency Todo + +let b:current_syntax = 'taskreport'