From 5e13d048d6dbb9414add3c05a4c1be7cbd0d0973 Mon Sep 17 00:00:00 2001 From: Michael Chalupiak Date: Wed, 3 Jul 2024 15:44:47 -0400 Subject: [PATCH] some configs fixed? --- .bashrc | 168 + .config/btop/btop.conf | 248 + .config/btop/btop.log | 162 + .config/castero/castero.conf | 315 + .config/cmus/autosave | 233 + .config/cmus/cache | Bin 0 -> 772228 bytes .config/cmus/command-history | 7 + .config/cmus/lib.pl | 1355 ++ .config/cmus/playlists/default | 9 + .config/cmus/rc | 1 + .config/cmus/search-history | 11 + .config/enchant/en_US.dic | 0 .config/enchant/en_US.exc | 0 .config/glib-2.0/settings/keyfile | 3 + .config/goread/urls.yml | 13 + .config/htop/htoprc | 64 + .config/kak-tree-sitter/config.toml | 1440 ++ .config/kak/colors/base16-kakoune | 1 + .config/kak/colors/catppuccin_macchiato.kak | 163 + .config/kak/colors/catppuccin_mocha.kak | 166 + .config/kak/default.mustache | 169 + .config/kak/kakrc | 358 + .config/lazygit/config.yml | 0 .config/mc/ini | 143 + .config/mc/panels.ini | 0 .config/newsboat/config | 26 + .config/newsboat/queue | 0 .config/newsboat/urls | 9 + .config/nushell/config.nu | 895 + .config/nushell/env.nu | 100 + .config/nushell/history.txt | 13 + .config/nvim/after/plugin/colors.lua | 14 + .config/nvim/after/plugin/lsp.lua | 81 + .config/nvim/after/plugin/telescope.lua | 15 + .config/nvim/after/plugin/treesitter.lua | 22 + .config/nvim/after/plugin/undotree.lua | 2 + .config/nvim/db_ui/connections.json | 1 + .config/nvim/ftplugin/java.lua | 97 + .config/nvim/init.lua | 1 + .config/nvim/lua/config/dadbod.lua | 29 + .config/nvim/lua/config/init.lua | 3 + .config/nvim/lua/config/packer.lua | 328 + .config/nvim/lua/config/remap.lua | 56 + .config/nvim/lua/config/set.lua | 53 + .config/nvim/plugin/packer_compiled.lua | 660 + .config/pavucontrol.ini | 8 + .config/pulse/cookie | Bin 0 -> 256 bytes .config/ranger/scope.sh | 477 + .config/tinted-theming/tinty/config.toml | 17 + .doom.d_/config.el | 144 + .doom.d_/custom.el | 14 + .doom.d_/init.el | 195 + .doom.d_/packages.el | 55 + .scripts/add-project | 1 + .scripts/bar.sh | 21 + .scripts/build.sh | 1 + .scripts/buildtest.sh | 1 + .scripts/cloc | 18206 ++++++++++++++++++ .scripts/cloc-git | 5 + .scripts/enter-dev.sh | 12 + .scripts/fzf-ctags | 94 + .scripts/fzf-ctags-helper | 36 + .scripts/fzf-ctags-lib | 51 + .scripts/gb.sh | 3 + .scripts/gba.sh | 3 + .scripts/gbc.sh | 3 + .scripts/genesis.sh | 3 + .scripts/get_local_path | Bin 0 -> 19888 bytes .scripts/get_local_path.c | 17 + .scripts/n64.sh | 3 + .scripts/nes.sh | 3 + .scripts/open-note.sh | 6 + .scripts/projects | 9 + .scripts/pws.sh | 6 + .scripts/remove-project | 5 + .scripts/rfs.sh | 8 + .scripts/rfv.sh | 8 + .scripts/rfve.sh | 8 + .scripts/rgfs.sh | 8 + .scripts/rgrs.sh | 8 + .scripts/run.sh | 1 + .scripts/ryujinx.sh | 1 + .scripts/shutdown.sh | 3 + .scripts/snes.sh | 3 + .scripts/startup.sh | 6 + .scripts/styli.sh | 470 + .scripts/test.sh | 1 + .tmux.conf | 20 + required_tools.txt | 25 + 89 files changed, 27403 insertions(+) create mode 100644 .bashrc create mode 100644 .config/btop/btop.conf create mode 100644 .config/btop/btop.log create mode 100644 .config/castero/castero.conf create mode 100644 .config/cmus/autosave create mode 100644 .config/cmus/cache create mode 100644 .config/cmus/command-history create mode 100644 .config/cmus/lib.pl create mode 100644 .config/cmus/playlists/default create mode 100644 .config/cmus/rc create mode 100644 .config/cmus/search-history create mode 100644 .config/enchant/en_US.dic create mode 100644 .config/enchant/en_US.exc create mode 100644 .config/glib-2.0/settings/keyfile create mode 100644 .config/goread/urls.yml create mode 100644 .config/htop/htoprc create mode 100644 .config/kak-tree-sitter/config.toml create mode 120000 .config/kak/colors/base16-kakoune create mode 100644 .config/kak/colors/catppuccin_macchiato.kak create mode 100644 .config/kak/colors/catppuccin_mocha.kak create mode 100644 .config/kak/default.mustache create mode 100644 .config/kak/kakrc create mode 100644 .config/lazygit/config.yml create mode 100644 .config/mc/ini create mode 100644 .config/mc/panels.ini create mode 100644 .config/newsboat/config create mode 100644 .config/newsboat/queue create mode 100644 .config/newsboat/urls create mode 100644 .config/nushell/config.nu create mode 100644 .config/nushell/env.nu create mode 100644 .config/nushell/history.txt create mode 100644 .config/nvim/after/plugin/colors.lua create mode 100644 .config/nvim/after/plugin/lsp.lua create mode 100644 .config/nvim/after/plugin/telescope.lua create mode 100644 .config/nvim/after/plugin/treesitter.lua create mode 100644 .config/nvim/after/plugin/undotree.lua create mode 100644 .config/nvim/db_ui/connections.json create mode 100644 .config/nvim/ftplugin/java.lua create mode 100644 .config/nvim/init.lua create mode 100644 .config/nvim/lua/config/dadbod.lua create mode 100644 .config/nvim/lua/config/init.lua create mode 100644 .config/nvim/lua/config/packer.lua create mode 100644 .config/nvim/lua/config/remap.lua create mode 100644 .config/nvim/lua/config/set.lua create mode 100644 .config/nvim/plugin/packer_compiled.lua create mode 100644 .config/pavucontrol.ini create mode 100644 .config/pulse/cookie create mode 100755 .config/ranger/scope.sh create mode 100644 .config/tinted-theming/tinty/config.toml create mode 100644 .doom.d_/config.el create mode 100644 .doom.d_/custom.el create mode 100644 .doom.d_/init.el create mode 100644 .doom.d_/packages.el create mode 100755 .scripts/add-project create mode 100755 .scripts/bar.sh create mode 100755 .scripts/build.sh create mode 100755 .scripts/buildtest.sh create mode 100755 .scripts/cloc create mode 100755 .scripts/cloc-git create mode 100755 .scripts/enter-dev.sh create mode 100755 .scripts/fzf-ctags create mode 100755 .scripts/fzf-ctags-helper create mode 100755 .scripts/fzf-ctags-lib create mode 100755 .scripts/gb.sh create mode 100755 .scripts/gba.sh create mode 100755 .scripts/gbc.sh create mode 100755 .scripts/genesis.sh create mode 100755 .scripts/get_local_path create mode 100644 .scripts/get_local_path.c create mode 100755 .scripts/n64.sh create mode 100755 .scripts/nes.sh create mode 100755 .scripts/open-note.sh create mode 100644 .scripts/projects create mode 100755 .scripts/pws.sh create mode 100755 .scripts/remove-project create mode 100755 .scripts/rfs.sh create mode 100755 .scripts/rfv.sh create mode 100755 .scripts/rfve.sh create mode 100755 .scripts/rgfs.sh create mode 100755 .scripts/rgrs.sh create mode 100755 .scripts/run.sh create mode 100755 .scripts/ryujinx.sh create mode 100755 .scripts/shutdown.sh create mode 100755 .scripts/snes.sh create mode 100755 .scripts/startup.sh create mode 100755 .scripts/styli.sh create mode 100755 .scripts/test.sh create mode 100644 .tmux.conf create mode 100644 required_tools.txt diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..dfce3ae --- /dev/null +++ b/.bashrc @@ -0,0 +1,168 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +export PATH=~/.local/bin:/snap/bin:/usr/sandbox/:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/share/games:/usr/local/sbin:/usr/sbin:/sbin:$PATH +PATH=$PATH:~/.local/share/gem/ruby/3.0.0/bin/:~/.scripts +PATH=$PATH:~/.cargo/bin +PATH=$PATH:~/go/bin/ +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +#if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then +# debian_chroot=$(cat /etc/debian_chroot) +#fi +# +## set a fancy prompt (non-color, unless we know we "want" color) +#case "$TERM" in +# xterm-color) color_prompt=yes;; +#esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +force_color_prompt=yes + +#if [ -n "$force_color_prompt" ]; then +# if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then +# # We have color support; assume it's compliant with Ecma-48 +# # (ISO/IEC-6429). (Lack of such support is extremely rare, and such +# # a case would tend to support setf rather than setaf.) +# color_prompt=yes +# else +# color_prompt= +# fi +#fi +# +if [ "$color_prompt" = yes ]; then + PS1='\[\033[0;32m\]\u\[\033[00m\]\100\[\033[00m\]\h \[\033[0;32m\]\w\[\033[01;00m\]> '; else PS1='\[\033[0;32m\]\u\[\033[00m\]\100\[\033[00m\]\h \[\033[0;32m\]\w\[\033[01;00m\]> ' +#else +# PS1='\u\100\h \w> ' +fi +# +## Set 'man' colors +#if [ "$color_prompt" = yes ]; then +# man() { +# env \ +# LESS_TERMCAP_mb=$'\e[01;31m' \ +# LESS_TERMCAP_md=$'\e[01;31m' \ +# LESS_TERMCAP_me=$'\e[0m' \ +# LESS_TERMCAP_se=$'\e[0m' \ +# LESS_TERMCAP_so=$'\e[01;44;33m' \ +# LESS_TERMCAP_ue=$'\e[0m' \ +# LESS_TERMCAP_us=$'\e[01;32m' \ +# man "$@" +# } +#fi +# +#unset color_prompt force_color_prompt +# +# If this is an xterm set the title to user@host:dir +#case "$TERM" in +#xterm*|rxvt*) +# PS1="\[\033[0;31m\]\342\224\214\342\224\200\$([[ \$? != 0 ]] && echo \"[\[\033[0;31m\]\342\234\227\[\033[0;37m\]]\342\224\200\")[$(if [[ ${EUID} == 0 ]]; then echo '\[\033[01;31m\]root\[\033[01;33m\]@\[\033[01;96m\]\h'; else echo '\[\033[0;39m\]\u\[\033[01;33m\]@\[\033[01;96m\]\h'; fi)\[\033[0;31m\]]\342\224\200[\[\033[0;32m\]\w\[\033[0;31m\]]\n\[\033[0;31m\]\342\224\224\342\224\200\342\224\200\342\225\274 \[\033[0m\]\[\e[01;33m\]\\$\[\e[0m\]" +# ;; +#*) +# ;; +#esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + alias dir='dir --color=auto' + alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# some more ls aliases +alias ll='ls -lh' +alias la='ls -lha' +alias l='ls -CF' +alias emacs='emacs -nw' +alias dd='dd status=progress' +alias _='sudo' +alias _i='sudo -i' +alias please='sudo' +alias fucking='sudo' +alias hx='helix' +alias bat='bat --theme="base16-256"' +if [ -n "$(command -v 'eza')" ]; then + alias ls='eza' +fi + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. +export EDITOR='kak' + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +if [ "$XDG_SESSION_DESKTOP" = "sway" ] ; then + # https://github.com/swaywm/sway/issues/595 + export _JAVA_AWT_WM_NONREPARENTING=1 + export STUDIO_JDK=/usr/lib/jvm/java-11-openjdk/ +fi +eval "$(zoxide init bash)" + +export TMUX_TMPDIR=/tmp +export TINTED_SHELL_ENABLE_BASE16_VARS=1 + +tinty_source_shell_theme() { + tinty $@ + subcommand="$1" + + if [ "$subcommand" = "apply" ] || [ "$subcommand" = "init" ]; then + tinty_data_dir="${XDG_DATA_HOME:-$HOME/.local/share}/tinted-theming/tinty" + + for tinty_script_file in $(find "$tinty_data_dir" -maxdepth 1 -type f -name "*.sh"); do + . $tinty_script_file + done + + unset tinty_data_dir + fi + + unset subcommand +} + +if [ -n "$(command -v 'tinty')" ]; then +# tinty_source_shell_theme "init" + alias theme='tinty_source_shell_theme apply "$(tinty list | fzf --cycle)"' +fi + +if [ -n "$(command -v tmux)" ] && [ -z "$TMUX" ]; then + alias kak='tmux new-session kak > /dev/null' +fi +alias enter-dev='. enter-dev.sh' diff --git a/.config/btop/btop.conf b/.config/btop/btop.conf new file mode 100644 index 0000000..942d88b --- /dev/null +++ b/.config/btop/btop.conf @@ -0,0 +1,248 @@ +#? Config file for btop v. 1.3.2 + +#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. +#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" +color_theme = "TTY" + +#* If the theme set background should be shown, set to False if you want terminal background transparency. +theme_background = True + +#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. +truecolor = True + +#* Set to true to force tty mode regardless if a real tty has been detected or not. +#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. +force_tty = False + +#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. +#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. +#* Use whitespace " " as separator between different presets. +#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" +presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" + +#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. +#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. +vim_keys = False + +#* Rounded corners on boxes, is ignored if TTY mode is ON. +rounded_corners = True + +#* Default symbols to use for graph creation, "braille", "block" or "tty". +#* "braille" offers the highest resolution but might not be included in all fonts. +#* "block" has half the resolution of braille but uses more common characters. +#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. +#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. +graph_symbol = "braille" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_cpu = "default" + +# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty". +graph_symbol_gpu = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_mem = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_net = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_proc = "default" + +#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace. +shown_boxes = "cpu mem net proc" + +#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. +update_ms = 2000 + +#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", +#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. +proc_sorting = "cpu lazy" + +#* Reverse sorting order, True or False. +proc_reversed = False + +#* Show processes as a tree. +proc_tree = False + +#* Use the cpu graph colors in the process list. +proc_colors = True + +#* Use a darkening gradient in the process list. +proc_gradient = True + +#* If process cpu usage should be of the core it's running on or usage of the total available cpu power. +proc_per_core = False + +#* Show process memory as bytes instead of percent. +proc_mem_bytes = True + +#* Show cpu graph for each process. +proc_cpu_graphs = True + +#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) +proc_info_smaps = False + +#* Show proc box on left side of screen instead of right. +proc_left = False + +#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). +proc_filter_kernel = False + +#* In tree-view, always accumulate child process resources in the parent process. +proc_aggregate = False + +#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_upper = "Auto" + +#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_lower = "Auto" + +#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off". +show_gpu_info = "Auto" + +#* Toggles if the lower CPU graph should be inverted. +cpu_invert_lower = True + +#* Set to True to completely disable the lower CPU graph. +cpu_single_graph = False + +#* Show cpu box at bottom of screen instead of top. +cpu_bottom = False + +#* Shows the system uptime in the CPU box. +show_uptime = True + +#* Show cpu temperature. +check_temp = True + +#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. +cpu_sensor = "Auto" + +#* Show temperatures for cpu cores also if check_temp is True and sensors has been found. +show_coretemp = True + +#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. +#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. +#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. +#* Example: "4:0 5:1 6:3" +cpu_core_map = "" + +#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". +temp_scale = "celsius" + +#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. +base_10_sizes = False + +#* Show CPU frequency. +show_cpu_freq = True + +#* Draw a clock at top of screen, formatting according to strftime, empty string to disable. +#* Special formatting: /host = hostname | /user = username | /uptime = system uptime +clock_format = "%X" + +#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. +background_update = True + +#* Custom cpu model name, empty string to disable. +custom_cpu_name = "" + +#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". +#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". +disks_filter = "" + +#* Show graphs instead of meters for memory values. +mem_graphs = True + +#* Show mem box below net box instead of above. +mem_below_net = False + +#* Count ZFS ARC in cached and available memory. +zfs_arc_cached = True + +#* If swap memory should be shown in memory box. +show_swap = True + +#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. +swap_disk = True + +#* If mem box should be split to also show disks info. +show_disks = True + +#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. +only_physical = True + +#* Read disks list from /etc/fstab. This also disables only_physical. +use_fstab = True + +#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) +zfs_hide_datasets = False + +#* Set to true to show available disk space for privileged users. +disk_free_priv = False + +#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. +show_io_stat = True + +#* Toggles io mode for disks, showing big graphs for disk read/write speeds. +io_mode = False + +#* Set to True to show combined read/write io graphs in io mode. +io_graph_combined = False + +#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". +#* Example: "/mnt/media:100 /:20 /boot:1". +io_graph_speeds = "" + +#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. +net_download = 100 + +net_upload = 100 + +#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. +net_auto = True + +#* Sync the auto scaling for download and upload to whichever currently has the highest scale. +net_sync = True + +#* Starts with the Network Interface specified here. +net_iface = "" + +#* Show battery stats in top right if battery is present. +show_battery = True + +#* Which battery to use if multiple are present. "Auto" for auto detection. +selected_battery = "Auto" + +#* Show power stats of battery next to charge indicator. +show_battery_watts = True + +#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". +#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. +log_level = "WARNING" + +#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards. +nvml_measure_pcie_speeds = True + +#* Horizontally mirror the GPU graph. +gpu_mirror_graph = True + +#* Custom gpu0 model name, empty string to disable. +custom_gpu_name0 = "" + +#* Custom gpu1 model name, empty string to disable. +custom_gpu_name1 = "" + +#* Custom gpu2 model name, empty string to disable. +custom_gpu_name2 = "" + +#* Custom gpu3 model name, empty string to disable. +custom_gpu_name3 = "" + +#* Custom gpu4 model name, empty string to disable. +custom_gpu_name4 = "" + +#* Custom gpu5 model name, empty string to disable. +custom_gpu_name5 = "" diff --git a/.config/btop/btop.log b/.config/btop/btop.log new file mode 100644 index 0000000..6bcaed3 --- /dev/null +++ b/.config/btop/btop.log @@ -0,0 +1,162 @@ + +2024/06/06 (14:25:17) | ===> btop++ v.1.3.2 +2024/06/06 (14:25:17) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported +2024/06/06 (14:25:19) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:19) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:21) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:21) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:23) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:23) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:25) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:25) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:27) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:27) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:29) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:29) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:31) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:31) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:33) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:33) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:35) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:35) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:39) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:39) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:43) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:43) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:45) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:45) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:47) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:47) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:49) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:49) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:51) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:51) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:53) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:53) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:55) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:55) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:57) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:57) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:25:59) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:25:59) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:26:01) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:26:01) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:26:03) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:26:03) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:26:05) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:26:05) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:26:07) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:26:07) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:26:09) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:26:09) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:26:11) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:26:11) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:26:13) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:26:13) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:26:17) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:26:17) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/06 (14:26:19) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/06 (14:26:19) | WARNING: NVML: Failed to get GPU power usage: No data + +2024/06/07 (13:26:43) | ===> btop++ v.1.3.2 +2024/06/07 (13:26:43) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported +2024/06/07 (13:26:45) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:26:46) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/07 (13:26:47) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:26:48) | WARNING: NVML: Failed to get GPU power usage: No data + +2024/06/07 (13:26:52) | ===> btop++ v.1.3.2 +2024/06/07 (13:26:52) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported +2024/06/07 (13:26:54) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:26:54) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/07 (13:26:56) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:26:56) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/07 (13:26:58) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:26:58) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/07 (13:27:00) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:27:00) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/07 (13:27:02) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:27:02) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/07 (13:27:04) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:27:04) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/07 (13:27:06) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:27:06) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/07 (13:27:08) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/07 (13:27:08) | WARNING: NVML: Failed to get GPU power usage: No data + +2024/06/12 (15:06:55) | ===> btop++ v.1.3.2 +2024/06/12 (15:06:55) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported +2024/06/12 (15:06:57) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:06:58) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:06:59) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:00) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:01) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:01) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:01) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:02) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:02) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:03) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:03) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:03) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:03) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:05) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:06) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:07) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:08) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:09) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:10) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:11) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:12) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:13) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:14) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:15) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:16) | WARNING: NVML: Failed to get GPU power usage: No data + +2024/06/12 (15:07:17) | ===> btop++ v.1.3.2 +2024/06/12 (15:07:17) | WARNING: NVML: Failed to get maximum GPU power draw, defaulting to 225W: Not Supported +2024/06/12 (15:07:19) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:19) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:21) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:21) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:23) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:23) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:25) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:25) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:27) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:27) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:29) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:29) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:31) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:31) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:33) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:33) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:35) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:35) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:37) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:37) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:39) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:39) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:41) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:41) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:43) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:43) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:45) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:45) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:47) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:47) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:49) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:49) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:51) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:51) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:53) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:53) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:55) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:55) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:57) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:57) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:07:59) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:07:59) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:08:01) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:08:01) | WARNING: NVML: Failed to get GPU power usage: No data +2024/06/12 (15:08:03) | WARNING: NVML: Failed to get GPU utilization: Unknown Error +2024/06/12 (15:08:03) | WARNING: NVML: Failed to get GPU power usage: No data diff --git a/.config/castero/castero.conf b/.config/castero/castero.conf new file mode 100644 index 0000000..a09276d --- /dev/null +++ b/.config/castero/castero.conf @@ -0,0 +1,315 @@ +# castero configuration file +# https://github.com/xgi/castero + + +[client] +# Whether to limit the amount of memory used by the client (by doing more +# disk I/O). Enabling this will reduce performance -- only enable it if you +# know you need to. +# default: False +restrict_memory_usage = False + +# Whether to ask for confirmation before deleting a feed. +# default: False +delete_feed_confirmation = False + +# The minimum number of feeds before the client asks you for confirmation +# after pressing the reload key. +# default: 10 +reload_feeds_threshold = 10 + +# The maximum number of episodes to retain per feed. Set to -1 for no limit. +# default: -1 +max_episodes = -1 + +# Whether to keep episodes in the client even if they are no longer present on +# the feed (i.e. the RSS feed only shows the x most recent episodes). +# default: False +retain_absent_episodes = False + +# Default window layout. This can also be changed within castero by pressing the corresponding key. +# 1 - feeds + episodes + metadata +# 2 - queue + metadata +# 3 - feeds + episodes +# 4 - downloaded episodes + metadata +# 5 - all episodes + metadata +# default: 1 +default_layout = 1 + +# Hide vertical borders between menus. +# default: False +disable_vertical_borders = False + +# Whether to remove HTML tags from feed/episode descriptions. +# default: True +clean_html_descriptions = True + +# The display refresh delay, in ms. Increase to reduce idle CPU usage. +# default: 30 +refresh_delay = 30 + +# The external player to use for media playback. +# If the given player is not valid or a dependency is not met, the client will +# instead try to use the first valid interface. +# Available players (in order of precedence): +# mpv, vlc +# default: (blank) +player = + +# The command to run when you press key_execute (default e). All instances of +# the following tokens are replaced with the corresponding episode attributes: +# {file} - the episode enclosure, usually a remote mp3 file +# {title} - the episode name +# {description} - the episode description +# {link} - the link to the episode, which is often a blog post +# {pubdate} - the publish date/time of the episode +# {copyright} - the copyright of the episode +# Most of these attributes have spaces, so you will probably want to enclose +# the token with quotations. +# For example, `firefox "{file}"` would open the file in Firefox. +# The client executes the text you enter as a shell command. Use with caution! +# default: (blank) +execute_command = + +# An HTTP or SOCKS proxy to use for HTTP network requests. +# example: http://user:pass@10.10.1.10:3128 +# example: socks5://user:pass@host:port +# default: (blank) +proxy_http = + +# An HTTP or SOCKS proxy to use for HTTPS network requests. +# example: http://user:pass@10.10.1.10:3128 +# example: socks5://user:pass@host:port +# default: (blank) +proxy_https = + +# Behavior when adding selected feed into queue. +# If set to true, only unplayed episodes will be added to the queue. +# default: False +add_only_unplayed_episodes = False + +[feeds] +# Whether to reload/refresh your feeds when the client starts. Depending on how +# many feeds you have, this operation may take a long time. +# default: False +reload_on_start = False + + +[downloads] +# The (absolute) location to save episodes downloaded for offline playback. Set +# to blank or whitespaces to disable -- the client will default to either +# $XDG_DATA_DIR, if set, otherwise ~/.local/share/castero/downloaded +# default: (blank) +custom_download_dir = + +# The timeout for network requests, in seconds. The same value is used for +# connection and read timeouts. +# default: 3 +request_timeout = 3 + + +[colors] +# Available colors for all fields are: +# black, blue, cyan, green, magenta, red, white, yellow, transparent (background), +# integer from -1 to 255 if terminal supports 256 colors +# NOTE: Background transparency only works on compatible terminals with compositing + +# The foreground (text) color of the main interface. +# default: yellow +color_foreground = yellow + +# The background color of the main interface. +# default: black +color_background = black + +# The foreground (text) color of selected items. +# default: black +color_foreground_alt = black + +# The background color of selected items. +# default: white +color_background_alt = white + +# The foreground (text) color of marked items. Paired with color_background. +# default: green +color_foreground_dim = green + +# The foreground (text) color of status lines. Paired with color_background. +# default: white +color_foreground_status = white + +# The foreground (text) color of menu headings. Paired with color_background. +# default: yellow +color_foreground_heading = yellow + +# The foreground (text) color of dividers. Paired with color_background. +# default: white +color_foreground_dividers = white + + +[playback] +# The distance to move forward when pressing seek keys, in seconds. +# default: 30 +seek_distance_forward = 30 + +# The distance to move backward when pressing seek keys, in seconds. +# default: 10 +seek_distance_backward = 10 + +# The default playback speed. See also the rate_increase/rate_decrease keys. +# default: 1.0 +default_playback_speed = 1.0 + +# The default volume. Can be 0-100, inclusive. +# default: 100 +default_volume = 100 + +# The amount to adjust the volume when pressing the volume up/down keys. +# default: 5 +volume_adjust_distance = 5 + +# The distance to rewind when resuming from playback, in seconds. +# default: 0 +resume_rewind_distance = 0 + + +[keys] +# Keybindings for controlling the client. Entries may not be blank, but may +# overlap -- however, only one operation will be performed for each key press. +# Please see this page for a list of available key names: +# https://docs.python.org/3/library/curses.html#constants + +# Show the help menu. +# default: h +key_help = h + +# Exit the client +# default: q +key_exit = q + +# Add a feed. +# default: a +key_add_feed = a + +# Remove the selected feed. +# default: d +key_remove = d + +# Reload/refresh all feeds. +# default: r +key_reload = r + +# Reload/refresh the selected feed. +# default: R +key_reload_selected = R + +# Save episode for offline playback. +# default: s +key_save = s + +# Delete downloaded episodes. +# default: x +key_delete = x + +# Navigate up. +# default: UP +key_up = UP + +# Navigate right. +# default: RIGHT +key_right = RIGHT + +# Navigate down. +# default: DOWN +key_down = DOWN + +# Navigate left. +# default: LEFT +key_left = LEFT + +# Scroll menu up. +# default: PPAGE +key_scroll_up = PPAGE + +# Scroll menu down. +# default: NPAGE +key_scroll_down = NPAGE + +# Play selected feed/episode. +# default: ENTER +key_play_selected = ENTER + +# Add selected feed/episode to queue. +# default: SPACE +key_add_selected = SPACE + +# Clear the queue. +# default: c +key_clear = c + +# Clear progress from episode. +# default: z +key_clear_progress = z + +# Go to the next episode in the queue. +# default: n +key_next = n + +# Execute a command on the selected episode. See also execute_command. +key_execute = e + +# Invert the order of the menu. +# default: i +key_invert = i + +# Filter the contents of the menu. Press again to clear the filter. +# default: / +key_filter = / + +# Mark the episode as played/unplayed. +# default: i +key_mark_played = m + +# Pause/play the current episode. +# default: p +key_pause_play = p + +# Alternate binding for key_pause_play -- make identical to disable. +# default: k +key_pause_play_alt = k + +# Seek forward. +# default: f +key_seek_forward = f + +# Alternate binding for key_seek_forward -- make identical to disable. +# default: l +key_seek_forward_alt = l + +# Seek backward. +# default: b +key_seek_backward = b + +# Alternate binding for key_seek_backward -- make identical to disable. +# default: j +key_seek_backward_alt = j + +# Increase playback speed. +# default: ] +key_rate_increase = ] + +# Decrease playback speed. +# default: [ +key_rate_decrease = [ + +# Increase volume. +# default: = +key_volume_increase = = + +# Decrease volume. +# default: - +key_volume_decrease = - + +# Show episode URL. +# default: u +key_show_url = u diff --git a/.config/cmus/autosave b/.config/cmus/autosave new file mode 100644 index 0000000..51a1e59 --- /dev/null +++ b/.config/cmus/autosave @@ -0,0 +1,233 @@ +set aaa_mode=all +set altformat_current= %F +set altformat_playlist= %f%= %d +set altformat_title=%f +set altformat_trackwin= %f%= %d +set auto_expand_albums_follow=true +set auto_expand_albums_search=true +set auto_expand_albums_selcur=true +set auto_hide_playlists_panel=false +set auto_reshuffle=true +set block_key_paste=true +set buffer_seconds=10 +set color_cmdline_attr=default +set color_cmdline_bg=default +set color_cmdline_fg=default +set color_cur_sel_attr=default +set color_error=lightred +set color_info=lightyellow +set color_separator=blue +set color_statusline_attr=default +set color_statusline_bg=gray +set color_statusline_fg=black +set color_titleline_attr=default +set color_titleline_bg=blue +set color_titleline_fg=white +set color_trackwin_album_attr=bold +set color_trackwin_album_bg=default +set color_trackwin_album_fg=default +set color_win_attr=default +set color_win_bg=default +set color_win_cur=lightyellow +set color_win_cur_attr=default +set color_win_cur_sel_attr=default +set color_win_cur_sel_bg=blue +set color_win_cur_sel_fg=lightyellow +set color_win_dir=lightblue +set color_win_fg=default +set color_win_inactive_cur_sel_attr=default +set color_win_inactive_cur_sel_bg=gray +set color_win_inactive_cur_sel_fg=lightyellow +set color_win_inactive_sel_attr=default +set color_win_inactive_sel_bg=gray +set color_win_inactive_sel_fg=black +set color_win_sel_attr=default +set color_win_sel_bg=blue +set color_win_sel_fg=white +set color_win_title_attr=default +set color_win_title_bg=blue +set color_win_title_fg=white +set confirm_run=true +set continue=true +set continue_album=true +set device=/dev/cdrom +set display_artist_sort_name=false +set dsp.alsa.device=default +set dsp.ao.buffer_size=16384 +set dsp.ao.device_interface= +set dsp.ao.driver= +set dsp.ao.wav_counter=1 +set dsp.ao.wav_dir=/home/mikec +set dsp.jack.resampling_quality=2 +set dsp.jack.server_name= +set dsp.oss.device= +set follow=true +set format_clipped_text=… +set format_current= %a - %l%! - %n. %t%= %y +set format_playlist= %-21%a %3n. %t%= %y %d %{?X!=0?%3X ? } +set format_playlist_va= %-21%A %3n. %t (%a)%= %y %d %{?X!=0?%3X ? } +set format_statusline= %{status} %{?show_playback_position?%{position} %{?duration?/ %{duration} }?%{?duration?%{duration} }}- %{total} %{?bpm>0?at %{bpm} BPM }%{?volume>=0?vol: %{?lvolume!=rvolume?%{lvolume},%{rvolume} ?%{volume} }}%{?stream?buf: %{buffer} }%{?show_current_bitrate & bitrate>=0? %{bitrate} kbps }%=%{?repeat_current?repeat current?%{?play_library?%{playlist_mode} from %{?play_sorted?sorted }library?playlist}} | %1{continue}%1{follow}%1{repeat}%1{shuffle} +set format_title=%a - %l - %t (%y) +set format_trackwin=%3n. %t%= %y %d +set format_trackwin_album= %l %= %{albumduration} +set format_trackwin_va=%3n. %t (%a)%= %y %d +set format_treewin= %l +set format_treewin_artist=%a +set icecast_default_charset=ISO-8859-1 +set id3_default_charset=ISO-8859-1 +set ignore_duplicates=false +set input.cdio.cddb_url=freedb.freedb.org:8880 +set input.cdio.priority=50 +set input.cue.priority=50 +set input.ffmpeg.priority=30 +set input.flac.priority=50 +set input.mikmod.priority=40 +set input.modplug.priority=50 +set input.mpc.priority=50 +set input.opus.priority=50 +set input.vorbis.priority=50 +set input.wav.priority=50 +set input.wavpack.priority=50 +set lib_add_filter= +set lib_sort=albumartist date album discnumber tracknumber title filename play_count +set mixer.alsa.channel=PCM +set mixer.alsa.device=default +set mixer.oss.channel=PCM +set mixer.oss.device= +set mixer.pulse.restore_volume=1 +set mouse=false +set mpris=true +set output_plugin=pulse +set passwd= +set pause_on_output_change=false +set pl_env_vars= +set pl_sort= +set play_library=true +set play_sorted=false +set repeat=true +set repeat_current=false +set replaygain=disabled +set replaygain_limit=true +set replaygain_preamp=0.000000 +set resume=false +set rewind_offset=5 +set scroll_offset=2 +set set_term_title=true +set show_all_tracks=true +set show_current_bitrate=false +set show_hidden=false +set show_playback_position=true +set show_remaining_time=false +set shuffle=tracks +set skip_track_info=false +set smart_artist_sort=true +set softvol=false +set softvol_state=0 0 +set sort_albums_by_name=false +set start_view=tree +set status_display_program= +set stop_after_queue=false +set time_show_leading_zero=true +set tree_width_max=0 +set tree_width_percent=33 +set wrap_search=true +bind browser backspace browser-up +bind browser i toggle show_hidden +bind browser space win-activate +bind browser u win-update +bind common ! push shell +bind common + vol +10% +bind common , seek -1m +bind common - vol -10% +bind common . seek +1m +bind common / search-start +bind common 1 view tree +bind common 2 view sorted +bind common 3 view playlist +bind common 4 view queue +bind common 5 view browser +bind common 6 view filters +bind common 7 view settings +bind common = vol +10% +bind common ? search-b-start +bind common B player-next-album +bind common C toggle continue +bind common D win-remove +bind common E win-add-Q +bind common F push filter +bind common G win-bottom +bind common I echo {} +bind common L push live-filter +bind common M toggle play_library +bind common N search-prev +bind common P win-mv-before +bind common U win-update-cache +bind common Z player-prev-album +bind common [ vol +1% +0 +bind common ] vol +0 +1% +bind common ^B win-page-up +bind common ^C echo Type :quit to exit cmus. +bind common ^D win-half-page-down +bind common ^E win-scroll-down +bind common ^F win-page-down +bind common ^L refresh +bind common ^R toggle repeat_current +bind common ^U win-half-page-up +bind common ^Y win-scroll-up +bind common a win-add-l +bind common b player-next +bind common c player-pause +bind common delete win-remove +bind common down win-down +bind common e win-add-q +bind common end win-bottom +bind common enter win-activate +bind common f toggle follow +bind common g win-top +bind common h seek -5 +bind common home win-top +bind common i win-sel-cur +bind common j win-down +bind common k win-up +bind common l seek +5 +bind common left seek -5 +bind common m toggle aaa_mode +bind common mlb_click_bar player-pause +bind common mlb_click_bar_right player-pause +bind common mlb_click_selected win-activate +bind common mouse_scroll_down win-down +bind common mouse_scroll_down_bar seek -5 +bind common mouse_scroll_down_bar_right vol -1% +bind common mouse_scroll_down_title right-view -n +bind common mouse_scroll_up win-up +bind common mouse_scroll_up_bar seek +5 +bind common mouse_scroll_up_bar_right vol +1% +bind common mouse_scroll_up_title left-view -n +bind common n search-next +bind common o toggle play_sorted +bind common p win-mv-after +bind common page_down win-page-down +bind common page_up win-page-up +bind common q quit -i +bind common r toggle repeat +bind common right seek +5 +bind common s toggle shuffle +bind common space win-toggle +bind common t toggle show_remaining_time +bind common tab win-next +bind common u update-cache +bind common up win-up +bind common v player-stop +bind common x player-play +bind common y win-add-p +bind common z player-prev +bind common { vol -1% -0 +bind common } vol -0 -1% +fset 90s=date>=1990&date<2000 +fset classical=genre="Classical" +fset missing-tag=!stream&(artist=""|album=""|title=""|tracknumber=-1|date=-1) +fset mp3=filename="*.mp3" +fset ogg=filename="*.ogg" +fset ogg-or-mp3=ogg|mp3 +fset unheard=play_count=0 +factivate diff --git a/.config/cmus/cache b/.config/cmus/cache new file mode 100644 index 0000000000000000000000000000000000000000..516fdfc5f9852b3e726976c055d0425abf6282a6 GIT binary patch literal 772228 zcmdqK37jNZRWBR^!#1)gB8v_ZI5OQM)3tY1*N9-&Ue#6AHI>y}-GgHjl^InPQ<)jn zk(pJUt$v74MEn$esPGU)e?C|AsZT)^a6w#g0~CC?u4o?jbW>9&K~;3;>-?|6+yQ1jeV?#8a~o^Nf3(N1vSx7?E#g1R5xb$NK~%;~X- zGp9#RkB<)zH1|j8{|^4Y-3Yyo<8&ggw%6)5xBSQ%a_T|57Ju-fPSEZ+@sBv2pwsXj z{fC@CB;s&f6?A?8f4}75AqCPoH0rK+o!ahJc-0*l0;!{}*Bm%(dJg`7Fyc7!MU#uf ztB$&rft3Mg$8SZxQ)zVksO5D4kGme$_B7H*owqY85;~rW@%rv!={V!gcUx`u#OevW zK-+JFl$o$~qT^0SJqtbT;??(m>nr%xf+pO7uh>0;umvxwrztuk=s5v8=#b;{D15&9 zh+7LBpHWZ|Ms57}umzH)e0LdK3WoGL?n$o}cH5nxc9+3-V$9Tg9j~#~Z8H9vk9@D= zw>$1a&}j=YQ)4!+vg@#bC*#+hI-ci@3=IuAwXoUrTODUQJn$p;R_5JQvBWUkJ$IS%omfsVsw(iw~(B)s<YNnFHUU++WjG6KLC^CH{&^%mzq(BRS*9_tvJN|=am~mv zx#oNevqseR8pJG}DA?+Dg0Q71tSP^P*#(Mk+dqT^Ob$nm}npP%@&n>5~2Var_#4+4z!qPvM1!JUO%_v&8HoesN=dThK*??w>xrq>>5 zCTQrxS5ItZa~>7aAb(BK6S`rO%(om!ZsIU2yU*8ioM#z$z5)Cct=uF$=OV9F3)=3o zN02U)X^j;KQ-k`a>ws}W%9-*b3X-bE&B0N7r+f65Vv;v0@cRy-fBpmCe(o!Z#IG`a zYG&FHyvp>)7v#*svRi+1LpsqBNE|X_R zIF^D{`K=7c;mHY@KFkzf2zGYK80vUCzEI%FVngUHS|`yV@%tG5K3}Lj=isNlpo$oK zeT}qC9CX=@jXn;D1%?D8F0%g`9|RNTMxfU{KdF`Gl+cfn)+fY zRyr~&_l)U`Wv4gmCpguP^EcuTN&nY^{#QNpX3>u|o?8uDJN*$n+!w*}nVhh%F!=u# zeEz-97P(H!;eVPiT(|?sC4kjNqv2Kp?jBeTgSPLk;VWjU7D#{Jzsd3WkTL#WMf_i= zeUpPvb=LyA3&>#plnvH)-59cf$tU zW?`q}k+Uy=3nVc+`Mi?4L?=>bUtOnbmTG!xlrtI(E;j2g`yKKoW72>#jhUn-ZxCjG zZ}7t)@Op3Q^I8?FY(I2Yrpb9aO3iQJZTo&MFJkf^iHn51$7)K+F^TiZ2pu5;| zry8UR&6ie5f^9_FL3@TyKVwVf*SW8Ac=Al9&z%J92?j2-ez@Y%1tWj~=@~kt-XUCm@cT-TBb8FsBdk$mS=*%9fwPqQycBXe$0#e+ z(~?`T_+-al@qc3aY2DN=G#)49C2Ik51QuDhrAStVXv}f`LeSL{{)YQO*Fm9vag#1X z3-F<;`49(XQAtEKMLDT00B5FQ4_JUdL1vgNXdOHRd3U4vDn^9&~CdP zd}{#(B(!-z;wB#@AXXm7Gdy9hB1MjiR28OYox!VVD`TM^KT+pIrtOl)-*d$4%GKHA znGCm&bH?D?r{MF8zfcy=%x@92+zzx%)vMPV_N1}&Wif}wxGzC0FMnQZ2Kv4I!)(H{Sl((sDBYdu3&xqh6cGgFR6T3~*hFTWd z5&Sbbn!!I`Z{Tqnpa0^q<>ArmTX}7SU8E1tdiNf9BazG-ZZmnMK%7@^yC)Z0A|pF& zLFO(X!43=XyHfL_irKh6B}vZK1yK$Vy=ttuvhb66ztaBrBH;IxrODq6LJLi>hLxq{ z$tPrf>g%Aw)1x;j@Ry*)JxlGrdBi)Upp}L>8 zU}w78^@GL@X{02*lfvRy>o)g^bnfF?3YzW(64zGEH)KrlwvDGm7IWBJxH%i!^-I9% zv!5u-9$4~Pfsd#M1^PWIvoHiKWnb}meY)YbQA)$3oSey0PZD(er9lt*qd!<0J8WIxgaS0EYR{x z20b6d=XaMjZfijc$rsv^g})q~=!@5G2i|nZd6wptM}E32K3n&8u>49zK$GR=yuZEe z%MAW_qOh}?YJeoUB}a3jdGGCVL z%l~m#q4^L}a}AQQHyHamu#`8~Mki=u4FZn}e<~`T?-*9=V8!zdpPvSTHjRnLOP!tNDW$qAIwVd% zgTKd%oquAS7Ed%O>8Ro^bfc)}o~*R$-2aGL=(8x#ayNHVOF(HH337z~`TaBfK?L#U)$Aegmj6VmjhT=z+W%%0*ZK_ca z3&99sNk`AX^Iz~?<1q!}iE2&crMBTLKv8i0kfv?~<4;-`o?7F-m6 zb&oqd?qdD7V|1I4vuupLdeb2J#a3!l5qxmkXlQw7hDTrdQDtbRR^~AkDt>Uu+mozt z)*8}e_-`2aQ@@!B_hCim6Dw~_wxQn+cF;csaoHL0;a)0!l+4gEx&m-qe;~O#7g!BU z!`H98je=i=>U2HBH_5mm{k{qlOGz-AfB?f~1J@CJ{_rg&^7VWe*4+&_c?~VW^?Q6a zho48s+*Q`WM~yl4kMn3=&VN4YsQioaY*NlAXCmo2kTE=`x&S@A;a zsz42=tuQ3|K+G&Uj@N~fYOgUS6A9$1Ze`1Js8S)-jwAbm$aNOQsh?FQZtH&2r#5g{ zeEW9jv@5i!dN`?=Rf)>L4kof_?M2po7a1v7$I3ckN$(FpzW%mMdN&Z)yxXP!x*J$i znu~D#-PIwKUSe$`urd?pIP-@<7>)~uTu^<_$ujB1u)+Z`6T;I1-8~mUVi)L}lNHe4 zt-+pymzS1KriYyKJaGk^MYqCwk7aeR;s-0;(z;sl5Zynd%(!*mYbsI3!_p3tgy@V#-F_UcJoNfn?n zv{AgGS@OyGw&3;rc03%T4#gwrkaGBG{QaI{{pbpXnCCXbXpcN$sKJ46r)|oi34y!n zwRaDK20BsdBFfp6FE!ZTHWNgZW9H$qsAB7VY)N6hY7AS>T8-)n=#Y565r4m~U_67G zPkx4d?s-6YbO^a#i3Z3E0iR>nv>##$lN%+N>4b-69(x+tAYsA@J zSLNnW+X&+QX+1!Pj3*Ht-}{L|^T`!D%r-~LDTulpLbJDl7(W|{LdMmB)2SwPmc)V_ z=T4!&B)#kSym&{k{%PXNMMQdb;hSw+Nrpb-XF)aVi;6EicL7}<)F7Jv?h3=|r2@|i-VBtKIa-(t}l3(HU|0n+^#^De+ys_B6CT!ID$6-AT$%)(_2v`wIPXcjepCE{z zAks}fcp1JME4Dw=G3iIvMH8V^q)+z;0qpVXfFSu5&H%FBUdjW-d49UsK1IjGVUs!% z_6dPvJ|2S&*e^VX(=Yo|$oY=+=0~04^=8bW7R{(l?ZTcT<;DeCQE7@dLn~R&WCg1d zlp*mP>&abSi z{qc<{|Ag;Ld*$lC1i-%KKe?qJ`A63ZGvA5k`#&sM{>6;0OTWU@!`4dkeg&TE5izG5 z((gEC-U@wwZ^`n{>Frng#hdpb{J_bXfc~OG>a*X)-_IE>TJ8f6$+Ji$KIP8AQEW?| zRisEvpVKQ#qd) z^yw!F@n-2m*w2NR?qKXqd44;-`{26@&C6=`&@;T{?_x(2YN)&J?|NGXDUuu1OGR9l zT`t}pBQCgvRVZ(Sq5+%cx73~?JHql za2O+37m1p4NKUK6-HlydDDjeN_$U-Sm#TE(da3{04KYyIT~3->*_MP{d0Py<^Ua2S zpt|9=728K4LdU2YoUO=(VJd>fR#5DZ3{T2pHCRL1=m0Xg<~cE|YY!95QCUH4B;_&8 zuF--R?WPRPp-c_QG+$}>SKWj$P3is zz)Q{m2{F$>_Wuxba~~-TYe6IIkP6ud_i>AzXJmijn?%=TWe>D+31g$>q~dCifIfP||1EUf z+Tm8!Asq}0RHe`ugmybYHa1_xs1wpmI`Kwm3r87AkDn8zXr}*&ngzrHWDHl zJ<3>~!6s$^wL-}PY{qjdO?Ne=<73M7I|aIwgXUJyWQ09+-M`XBXa2f-lB@O&S_qh3 z5E#y?+A$Qhe3*DeTiR3Vo%=!8arTV)llp8tY@lp>qgtFFo>{|f(#)5~*9&ee{OdmU z|C;w(UKdHxD&&SGZvMPtpCD|*%yG=R3K{+3eV>8%en10Ww4S0v z;zs!=i|;BKw<>z6!f8vPi6R)WZ|saxbnYxuSWbDbKH*E%nGJ2w?P zG`H1^n>2djt@?tF`YY2R`HuXuZ~4ZOaid)=ml69xK!~|gZZ3XWRMj$-m~Yn?j?^cO z4vFKt@%P_;vQQkm*qyxHK)3}f^=XtnV@E#&IIeiaIq7??#P^9sy7EQZO&w3u)RYJD zt;XIU+x!;4hzLTXfsQ>*{EfnK?Ce?}q(U!BFK;wL%?2`fR8_ebyeL4(484&%sMS^L z(l=2g59b4w$j6vxC1ZV%p{?Wnk1s4V4tz0imqQ-UJ1 z6bjG);%Hi4B<78*J;w;KFEiwE6`!B+(bDi*BnL35Gg=iLrrhkD7W1O(lTg(cX)HAo zo`M+L{p4o97Q*G*pI@5Xm?WzSJXr!{-eZADW0Zty9U7}7nR$Mc@9;gv#>r!efZh;I zY+3xvRMtwSk7f|bu(lG-h-&{zxnws9B-I%=069TgB%2WYViB%f4Pc#Solq zbyUUfAdd5ooV<9xCI8H;${WWj{Nalo_uTfjIf`sapPbedoVI8^#;{6`#u%FW(GZ<4 zFE-y+9lwMSRZ=;dCFd*>sSc8C0GwiAjG5g3TFzsnr(ag$xb32S*b3A#{z029%APO> zP!U6IDSV9a68NNl%aq1+ogC5s^CgaF`kmB)%@WIM`nL33o|aB@1NsusLx-%JAUpWn z;|ukt#QbWOTE!<6gDtgjZnkxtQa_q3vkW?=v@Bx^vQ9d{K=x6WxKLlmZ+q0u$AwL< zC_R&A${6yAy_&N;%@T%^$~lcZRk)MV{uu7`x2S$?Ky0@>Dt45s)!9OpB{G&m$a zG*A8LZ8skubuR6%*aka(3U_h>NQ#w&tZ@G?Z*0$O0_PK)?3ixS?~f}seEP8880k{@p93DScfEw;|CKf2SJP6dFL!--I+a*#Bki+?9mMRFS< z{Y${X)C*4n4!`>)H-+zKsm~Z+w0Ju^=v{lto%h-y(wZ?x9$PQOC1>ViuSYw`_ej?( zll}0XV)p}%$Ip+a9en`hIC7mW=QE<~7d~IC|3SQ`!L}8NzI}ZA;a^Y?&uJ128_`U! zrAL>>^A6BUhaA^W;_nBZSg4=jAPO3ABOjm*A$N%)yELe=j)W&sh~J6ON(lW@8(Aq# z>it4VEn}HC9}0n83->h(P+J|y+%C96Gk!H@@+=o7!^g~XeG9&Q=siX1|0(!!=Yy!> zo}|`%C{t*%rlck+G}E#D^y-}lhF7K!XV1;;3Hg;zkW6vkeU!RO?3I(i%cw&yV1o~+ zzwAFet4Kbew_Eoc!44|l@J=JcNX?waz;~&Y^bEcR3m~&C)j^uuHrba;YSrfpHmO3~ zQC|>I@@ESjR@qk3X*I8LkFGxTyiM&VnC(0~nY%lLlj?6z^Wxc07Fpk-z7%j>Y;F5B zbo(@C2&Mz%Nh@X<79wYm1A{+)8DBsC-;30fQ$F}TK<7N#1A=zA+zLDBHHh@aH5a)J zY?CpAC^cN6-Y$lJ5oy1W`zGuIs2i}IHqe^WM~0Ucg8fqq;r`&dx34(8=fOr`-mvE> znbPVH4zAEzVJ3!EAw|fhl^m{ma(T$q&t!kU|LKLwrQad@l8MOdwTK$xqX#RR5F zi<)-9M1hcjJQqsKbqNIeQ^kfXaKs#C?jK3@G*2qDKOF5Qbf>!>)X3mo zMlToE=b!cpSwR6n%cPe(kf!_&w&X!MqZhQPjBWuDRutjX;WhED(HBr1X#FjWGL+t7 ziwQ}7@`IXQ8WI}A@(Qu3GLhPMi0qNu3hj%YydKlW2xn6#qzE;XC)d$H8=t1b!>#mu zEiBUHc7uB1tDyLJ#sf)|&3Y;FGd=GMh0Zq^@7d;ls!MCk$lGh@qsHZP2dAS$X<*4) z{D$*dAj#}TQ&eC@-9&V#_K=T2h_80a_D3t|k`{E!L; z;dgP_{<_B0z$M#o1>XR-$e@xF@l+AQUhsUtjR)pz?^%LfxWxYYX|Kkfs@82eTsGj3(dxg&Tpc-}| z-w{sk6mN`dtSgsV>xXByE?(GLTa0z3<#vh91~M?PaWG4f%AfdUoJ#7G%b@cE|4}GE zH>iLQ_W72__JUueZR)eyP|K5&kSXucZk zZEyXhx4uEsx<-PUFoY+DGRl!t`38RtoSyanmWj)z7ok)dJwx1ObV_EM7(i;x&0|y@ zF{CC?CHg|eTL@A7>_PqEj`N#r^po-b8+<-2)~|p71Lc!7n2N{rN|w4I|6EClbII7p zH;S=U!iqe=<~Y>%f)2^QWB5Gx=3?aeFSFfr)ojs)N%_*Oo4(U&)_kZ&Hi%kT zmY7LUk&)%lzK(QAzWqb|UH@32d>d}Lm0A?g7&Ux<->qcjDJG}m;S%?929{hXzl>+= z^$;5dblmj;_CwMRmX~pCmb`1%G;Y`IU#KvM18pLcwc#8?3AMW7Ux^p_nZKvdxX~2e zd)kW{K^rD0YNNYkcWlF?JR6`ouB~#o0*JgrS}Vp~g3IT^2Amj5h@4tjv7=@1!4-V& ze56o52VFBgYPue$C-PlrcA$~aro*a=MOuV*VTu{pQ2mw zo-);!EQFw8dVC8!cLo{cQLxoz^L@;QG;;jWVp<=c$k2+8vt!^*e)J#sT(Nj#8yD=0 z!{AP~JNMAx9=-NcwRK9_Fd9LyI|ZcGMz9a}DO{(t_rj*%(KtvGBZ=IKkKl*ma9;7F z8sZ`>*N3ei;c0D>_YK`R8udYPQo&PR^_pAQevYl z{XqGQk1Ez*C{O~vlw>kb4ZhgsqaK18b?k4E+6wNvF*cTjd_q1Z#)F#5$j}j4gdB}J z^)aAB&g)bM`GFS|Y6nqa(;EEh4ZjD>D~(#Xi%msO;_DzxB7*6}5LOW-ZWPmd#?87S zQGQQo@`V8XubA`*dq8e?lbLl%MSsFD;wkWEe*)@DeWh4^s=POFqE$9FJfRlkTEkK) za>~_5QJGBC>P@N{0CF`ZSFf`f0=l~8^Hlu83Uc^mds&Qgui!hmz97DP{jG)iy%Zu) zH@D9=@pjKwvES0fl4S%hRFMEEA_i#(p{Yw!}r;|fDED~CBt1b`nM-)YD* z?Gy7wh4#^(in=ZAN#ilEJxt9Oc9}AGl)tGs7ptuJKEbcVFyb1tO>0wP00jbO*MyK# zK2XfMh{Z)db|&v(7h1Gc4BTZOww;e*r2Vk?=8nmm4I){ri`dp#YDO`*24gGON9xic z-qzT_*YHc}V=M_(EV|i-zX!>YJdUb#JC6s(IFO&`#|y28OQ;pvV%fXav(=U-;u&9I zNPA2tBj1?`!&95#ej8!b1=NNHJ6@}88AVlrSgi>fz(jjUb^!`{cVX%~52@UNBY*_jxv_?|3x3&joTkn=CqnLek`eB`Mv zJhZ5$!e;jnIHHMrWL z3<4fXJ}J}w{CeDG8vEdC=om7isUEybAE1C&9%k^*ZTS4QFD-N)<+#i@dNm)R!VFz6 z&lZA=+3Q2xKpcxa|ULX;{pAe}4W z9DX7?O?n>*djEH^@nJshB51mSfc%cxi;N3}c7?{_qIILA(V`*3flI{|nGXVoOb&-E9^kCT|c&A?1&w zO7i@Er@GNL&(T=($svZ0sohR(*E>OGS9^dmoP(=odb6~2jfV*4 zh90G)Dz+;cO*<=;QH6<#W>%a)Cj$;|-VYKA>3tR6itp|$6o=``*;#t8-4L$!>K?WM zS*Fm+5~9t%nM{_!&H@a2k|0cZ+Mx0{$2l$dT#oB+fSy}EQKUW>^pMK{(cTW5g*UO* zjZEq0dT0*&eNv|PYIkRcnw0W(j8|93Yot>K05la3f`}NBUwZpJMPQAf)DyCgOB6rHi)MI)Mc&)&1kSFJS3-uE{HjHN2jgP!~ zff#6gW0{0>_0hz_GCx7eAMHQ$jAG|~n4Vbc!-=uaQd2=#y&j;c{wepqFoY@44G?+{ zLemC_-`Re5h~@@J-LLF)(L9P(jF8glVf!Gf zwvi`em9uL;K}ay$RR`@qro47gYYU3a@;)tqI-)p=)~74(AUU$&*ISvF%iy8$Q$uG? zp{h%+4fH)vG~@I3?Rq zVlbwlPDGnWoyg(hA<4LWMJ}n-A0^i|;&F_U4+wf>e)Hes^OGut+T|hDn=-%U3W5WH z>7b(FV!0QGmFjYHexSgl1(;V2grPhhI^_OABjDQ~eQmMh z%rlJ>`m0nV;+{m4Fxs6D^;*dNus|K^4oc1HV{r%;REAp*SfkI2|btGp* z?pz~0G@TQw+8tMnhe`*TcGwqAt|fHP__tDf8Rue7nWY+GJf?n3thiFKzJ2V%kPY=r z`}JMG_0d<#)fbz)y}RAD&H&Pd^#zFvCNcqddnH3Ugr-m&J!+4oV8T6ac6*^0ey5x z`TueJJ@<|x`vc&8VVJ`Nh1UroZ^UL%(#ncUk<#9RYpxPRNVcGP0jraBEWDS4RxNDU zZF%DwNp_z>byA530Lx^yhFkA>t-;L!)Xr5qNat_0 zjdK2+fP8i*V>C%d5?8Pd?;>UG3{OsEtrN^XF{IzRh4%lN4qHg{b~nI~ot|N09+l&) zWSbChN#H<}(75%J`ZxhP&va(ijhR8s`1A1wpHly$@3^(lbtT$UgM6>oK*}QRaRo(g zU;gt`f|q#Q6qZdSC|U3#(!)m3^h~_|yLaQ_%Kqr7xo~^kZFjfYNb%TfVKrV02fFH# zOHpXai^XfH5rztSAQ`w&eZb`}FIHb6#z9e!X>2&dDqbPI6a?{W*pV&+qKbY^BBtuI z1cE3w2-|JQ;wJXB1M+O^(zys7!&i|xb197W1hQIU%?uj))Dg+)K@bPI?*>WGyQs0D z?%+{xkc{eGJYWR^?)L_#pkh{nYd+ePL!jXfnMd6x$lCRqnomw|n{UJcDBKf6q0HX% zKK7JqNgMkx=e zFlS~={yi)&L(aBw9UbHRSbJ9LUK6eRqoAV~bLgA5=?}Kx8nkOIY-*2~D%zkkB~i&G zDjtcv_4ItcegwNFU+>>C!}vJ}mcIv{g3~K10ytgqg^f z6i<>&s4`95G%u5$&3PnOh(y=SF(wt+G{$)vpYQ*&a>to!B;cx`g1;$L;57}a^(Kkf zxUp!^1UgA?ld3B%VyxCfrQ>L+a-0_%c+);f4}WHzk9)a^|bZ-D!yBVqij?G?`5OAM}tDG-Y#<=60H}Lx| ze2$8Zb8E9V;fDpjSm{>Kg|(4d>Sj+N$6-q&>qW5o*xK{$>UD*k%A1^zLbeaC)GUD;<4VW*Ap<}1$NWd3^^v*?BEF0UVE43At{1L` z;wpC=?Ztdwd9&?n#k&2{? zR@%6e${{;fk@W5VG{%Saq5ST0`CFNd^!1;iiElvnYFbun$J8f3Tg+$OO(X4Yi@VeC zjApS4bF*b)p=%-RMPZE7S$zKEPn9}9u9MkJd5dP|1Q(>_blH+*RY=E>Bn+mzt0J=V_l!b%^Bmk02yq4u+(v+9)li2Pv-p0 zhcP~T^e8IKYM7CI%qrJoT^iH4)MzkwoUVc6>+#)7P8Plnf`fM{L@GZ7fppbez-j@h z7KIh0u>aW9mV<5`=oXCr0?N8Dwwh<*?}9nM*xG^1eQ+85Jg{|w-iHfmZ>s(yyyvK6 zH&UQGJ!(FP4u;B1vNB!KZAo=REJVnZER7JUbH;O)pq~QHbVxh>cky?%*nAf1!bzLi zqP!ThIr^4&(7T9j&$5W97uJ`28IEqS_4Edx$^=Zw;7rLL@rYPKD?cnojoB9H)8jaQ zKt$t^bbk^4e&x^K=6vBgkHKA}84NbjR=zgK!U}`vtlBmmc`?V_yY_&$w_HD1zi&t8 zsL|!})%)+XE$ahi{sr}qy*gN^+(h0X1^&>V3zdN_l=iqMXX`;HGXZO7AzGh0JU4o! zC3}kk3gZ!yP?CdVCE!uL4;_-;edvvy6XnutD1>+rJFE4biP_!G`bs4k#DWNw<0|=+ z^2|>EP@#E46xoD8B23+GN1<2OTCXX~GA?wfWy5*mH{jON4{M%@N0g`m;C zK%KUjn+-~jKZ3^7tXHAFD?e4N-74snU8hOu!m|}I9b^o#YHw9r(wANl&6Cp6M^pg;rVx6vW#qW!hMtCVrv z+(nEDi6g0ap|FGE(;6>o@zbM6lQA?OF;3TS@qaY>)=L>Tg+67lQpD-Zr%acla?Wdb z=($qkDK^eyg`Fky?n$qF^_|7)PpAbWABxGju4|MOsC)&ZvKTZ8Y2PGYO7piR+DFk| zM`)f;i}8Gs=*vxVc%jh!#2D=vcv#iMfC7z9tqKL4;Ua&N$*oN`nXzR33CDS#K{v^1 zr_la(d2}nhtq_~f+cpX{cGs~I^!+XVy%qnL`siyw=TnNUhl_ml?t`1E=bk%kq5EWj z3@dX!VMC!^A*3^vXUq9jzcd+Xzb=jX$q7aw#V=I)s6OhAMeAEe-#O&qvl7lJFkD86 z+PFqc`BNWI`aQ#)b6AjHtG_~%p#4=Hngt^V^ezRDApZZ>g{)u^CdE0o&qL35MDZ7Y+`w^ANgmsVJoBEp3aTDL) zx);v%5+Lgo+?($U~bHzO-;82(5ZsjimrCWF|bt@ z=h-ii(H|x?3R=fzET!?nDBC!b)lSj*TEVwcfBz(K{qIjKTuw8%3%D-Gj28+K@)Q|z zTUa*Jh?VNrxsfxCsp0P7{+Oy%uj@DZ8Yld6M!VH`zXKJ&yNj*E%@H2phh49Ef)-16 zM_A3wv5R4wxi}gQpF4A3dqeKmc7#evKl(<|a-35Jzr76n_VI7LiTt*?8=gS^Im%-8 z8De>iwlTSKadm6|;=QAZ*Em~MVlZqEzcI`xADj+3ulytae(5I)jdykTkuVRxB>T6z z+uh!7m=Q~9^wT9`M$j(D?QwhAb-CqR%y?4+a6m@L0M!>HMm9ZrcC!443r;ncgK%A_ zuNto+vNuNnW~M# zWIC>fhsIRN*H3dO0ih7bVhcr%YO^Kf*@EI(YIU=W6{z3B9g_GXel*=r>jH52iZXGa zNoy@U#2f}cH-*`(gws_hNg_A+Im94A8Lo_nU8P>k+-Q}>mzY)@Qa`G#_=mv{6@wqB zPWsWe7pZS4JD}3_qb-l^3_Io5ye>9DT}078+9{Z`kuXG!izEW-vxJ^GOI!RbqKF8Z zha;h9vOcghdSQKH_A3l$c%1Xi&v>4fdiZ_7ak9|5YxS*29b>f{ z^|r$1mcd9u1;(dyu-o(kRt`wj*krcu2m}>(1@rH+HXiF^6+c`GgG-w_kXlMGQc1|7 z92pwU)wZbNF!+x8+5Pn|6gh7hc+H2ro74j0!Ukeu_EK-?lewl&U$}5-t#)>49StTG z=cjBYYJ0L}zEa;!0(b<&nfUz?`0aUx_M2DX0KcKNNz~aw!x|rXI+(TK^o#s`FEC4t zZ6tH0ew3tcZ>)|^SN7H$mvk_-5Ye#E@R_gECw|m7kPa!Yv>)no|D{C!TV%V+K*~@t zkK_xJ2gRgqT$CfbN1=If{nYv0=5%GP4r^XvO)Y#Hi)$vgJ&drrLe^S;5*#;Gt{8W5H@eTA% zcQ42Ncz7A@1$cYI%XSRu88AaU;~6=C9&4(YSf82NzZ`DgyR0W37%rfGrV8pePlqa} zzi_^6d@a~KC_si6H&*vxHLnJtCd9`F(%eVq`+({9cT2=E-aZX;1@id}__Ak-V=-E9 zvbk}wJuyXYepSio$$hGZ(eq=tN-BOt~Nj zGj+bPtuLDUs~0B^It!Z-7M}`CMtQy$q|Q)^ zhdtdp`|=$0j-~U?Ru>i)*H#x6*L5h3O<($%T!GzJ8hDa_==cA)M7dn|DPzEIqgRfV z=alm~h#e)BJJs3R;>?BG)S@nxc962oyHtP4-veeJEOVX3n=4{PzGBBmIiG`17DsId z%HCdMmp5kDmbSNh=*^ZD!Z7ReUJd%c_xnqfH+Y56^C*jUcJ4apwt6%!RJ{gLhA-?@ z^bLZ{MZi(Mp}e_o)sQdhm;K5+%fzok#S~lEIT*Xb22rX-GEYJ?E-DJq!}_)MrKyc; z-i&Ve8L*^O_+@u)gzG` z7Pws#dE~U;%G2IkqFu{2t49HyzsgXBqq ze*4qVV?ywW^dnPz?K=zYH#UPh=B<#LI-^7OHs9|XE|^m;Zz@D_AkwN;Y(<3RVY^q$ zeyIqO_uacqPs~Vn+e>;Jt9@9Eb|11CtJ*7BQ$M<;uXnFeD*DrXLlqvjAr>#La`{x& z70B^?FUB)0SYLI~EEGk%r`&Ut5{vXGtBEF0CX&hT6MAa}g%EA5ZBcWKRv&|GZ1AoW zzobLHKgBtU-Cqx_Oxu#_s39;~5QN>@E_O)p(NK|`7byNoWvOyOQ;cn{Y-5Sjo+)I` z`dm(4OsCW*w9oBWq5JsG_}d=3C4;_A_}MAq3Xcpm%(sq~aZNmE{2@ZpXthkKanvR8 zWTk%KL15)J*C}W?p|=bDBJ+=b7N7t9mO|GLFh=&EOzJFMc7}5N!nRRgIm51@u_aX_ zt^qR3XnpIsCr=LyyL>O(G0*Y5nzKA@)Rn4}5n={%*lmv${H>QoGe3>-YYd?8H1HY3 z=ly}3jn8a^f?&Myeuw2uPN88hy5@8`=piqfoF~9&_7nr)P8E3rIBkwrQH<+V)!!C; z#(|>YV%tu+m3AA|4KO)bdk{(#gWWkcM0I5?Q3V+F?sA`7?b0^Ie5cy`<-9&2YYBNR z0vm}GfzF5+2PuzVgwH=&?EKEKs$v_Kg|LA|2H0-}Rt&Y#FeEZbGOlhRTc^73vu%!6 z&Tdo(glds@YBP`M>gvq<%{E6;@M#5mQ?{F^!%MR1SZ}eGyU|07KO4tt9G<+i1og}r zp~qfe;70lLQK9{jvt&0lh6aj!@sYZ!P!>}HvIcJ}y%9M9x{zpMp9ZTolcWa>ys00?yFXs2|0xIoGL`jgA(|-aFKF3n@RT;sBL9jn znaKpZz+2`}_5>DBsB_Q&G165P6_v~@vi&Vo3g08Kg3WGgKH81rwa_Tf!(Jhc2G+}X z*E?b9VwR<@dNga%&qiPa=)} z3`$a)K+ca$mqd)kNTXJns_aCQXXKV)Gx8CV^84V-13!ZAUjH?P@@2^D`?}42Q}Vehi$p!?g{H{= z6x@a6r$%jMdb|?7+N*clvm;k8%`WQ6iH2jI^9S=&)RD&<%Pj*XtE|+K{xG?&BfIYl zmkP#*CZTnxC;%6vqA*KZ}DV-@XEP-BGN+DSjCmJCcczJ6oz0Vw;?tm>%l?^vP!x zIsUWDZgrtDGgDb~r!Kjbl}qmYdS!JZi^pfW7pI23(bcJGSrwh}fS5wIGsp@Y-VHy= zuao0L`*IvSs!)2o9oh~Kc4GtHJnT?8A7+`1$_4UmXW89ZTrAFJaIg_7Q#n}ND7bfG zEYsw>&Cv5SuRZo_OTh<8hj34L_0Sk<&a&}YD>BL13@mbjUIrGq?qi4g?9w6m<@vzp ziG}(>`0IdQmV3M+Znl^5`U?Y78-7htIcDk;_-i}AE&i47Px(eyf4!9PtTwwlV12Ao zY#RacH#Dx1OCYrcpHAyrjQ6Mf*rye$PhVfrp-(8k?ICWFcF}CTj>Xuzx3z_hW+6s1QE(tZ<0GygbKec;Y_3?Om+%`eR7*!JjK3rwFt=`$uSLGa8`soBjG8>1Ou} zb+(Q^9qjlLgKwUM&!7HSk?Z=|7BvE+8D_!T*}>lBr`&n39a4`D>&wfNf-5TBdJwi7 za0gn}x~eiV{9aPy8NVJ6WY&U4jN@mF@g!Vc_ku#@$#^pr7sY*(MF$`0C~oWhRH6K#&dFus03HpLQ~u_ zDkcQ0ELJkPFKz;d5SNpR!&3g|%0o)T6=^`&+>GfbBs6C9gE244;Xyd&_8UIh@QHA` zRJi7b_M^t+rcIB^&`a}ZGJoGf*;h&O<6i@}mwdWVJ+8bI_;EU{Ay!~l;o@8YC=DCy zS}C1b)38H*Jn4`)P<-K&FD#RP1P+SIR=A#P={!6%xk$)U^)o==LYd;Nq>e$-`w-GY zPb!n%WP6C_{-}fhZ#P1(gKpt05~OYm!TN`hD^BxFqNyLYiBK_8l(F0zLg*)ctp<^t z4;5~dB7$uu;2O5Ote(7EOe&&-U%Euz2Xf3QDSTAX0vMicwYa1aM!<+?{QO?0f zApOG_}J}b(z}czQ8@D~?LzrmD(9{9vMLptUa?Z1ij$E2TkO6k z#&|04uPTb`A&#@K=1+FWUZO*e*K6_jK$+vU79mr$o$`EhdgRF?M+)<$qTB34#pp8q z%0%Bo3*EoK7%xdeda&e~eu%RT6{E)-uP2Z`DK<`_SQw-$(SNQ@J}z{AJ3s~9$p+k| zW)6u>r&vhfgKU2yqt0XLqlwG21WCF?=uegppt-+kt*3yljX{A#4o7^Lg| z6m@$cKFIp{BZ+3g)g$&`!rGqOw%V)Yxo8M99OQSSL*hp3x!-)ugM(YVgLXL7*l0+j#cf%dP4bcf1oJy_sIBW4r8L}tnkhqY&{=&ySIJl%ua+RlYDAur< zv@%-8iYPJK6;SwKq~C^cqP!G3Bwl3Kzxm-07GBu~dp2?!SoZ1(i|&z_Wd9<^Mf$rX zK4i~5@gWZmKB}pgO7v4sS{cTMfnwFOHp+?wew>pZ^99*OkNsR(et~?wEDa--2l)8O zGuK0LYL7fd@xu&xAp7FXtq;z4r{>u-0I5r^3kl{mR0bb3zmK7j*c}tV^E@+|lHBPpaR-|Q}&+ZaVHCm_J?-YJCZ7riJig^9~0fWvl(D@a`+LJkS8n&b~ zlLd{6cxu5ItFg!h!h#4VQ2Mc?9;5O6;?EW;&+M&DNzNf&4zi-k^f^%ji zS(K8*j`-o>XAaGd4~-4Y&Q6bxO`IMZnwTA*m>Qp+o2tx=j*m=^PdsyE;`HdmkT8JR zh#+Urz@6%zzOvB$@n}D%8tqgD)TGC@eZx-2n8%_&;B8 zb}-A~#oN2a2#~U5J3w4$oF47gt21ZD?iCZG_N+TBkCHMn9Z_~;%$3vF)g*FHZbv}q zE=KR?*?$wdZvp?k>+gz`bM0M0_YeptC0+#!VrP==Fmf01K3T*s99$Y1jVj*ovfNZm zd*B^e&+8Kb$_uAMjyug4^RFtCej2T6*ns?DmmNQXPmLHli~Pgh#Mu1U1B=mI#@O2* z*C+Mx#W3m<`l;{eZ@i{V`bTK|QMkqSD(bboW>7PmpTwNMwY4(R>@FTIk7o?N?O}b< z{xO5@L45wtLiMc1rr`Tg68Kiw^iW(1BLPF-=+;x7)R^>x@$L21y_xOt)939%uRO0W ziaEiw{-;CoJNb|Q{0(J}_ZaA&@_TTzVqzc_h}zn2r@e>T!pw26OjcUM!FH{(mO*^p zL;FI*m4bSqVqiWx0>`oI8xi^hGQ2xjC;t zlg9bBBG>!cdxG8x8t2GsQR9hz1bu9OZ|!iXb7ALR?C->uINB5M&>q+~-BiC#haBhc z$KMy>wM-tLu8i-7o2RaXXVI(EMt9Z&`@+DS*B=Kw z{-3`nlm1E2KfAph)B-FGdoEm8JCWDSlJLpBgPk$#mpXJdV_vsEt}ohY+)cj!6MXkm z?!SM|p!=I%UFLX`eQD4=nnm|!b9Zmid*IyiWxJg|Vtd$i(M|aekNk}?=_b?CpnEKf z?lWF6KDXYh^p>$Fh-D5Nu|2FWy3P6f0Ca!RLrb(+#CM~ARiZqQlp zhe2a|Y;_)uCT;Vb_K?2lG}meOfX+AEQQ|yL>&i7Gyt6P$KmLh{=Higw7~2?X*nM%@ z1N)*GBszae|G^>Sv`Arf-05QJj{HM(bIY>bE?iu^a?!guyw$)44#IZfcSs_Z{g%fP z%UKpfsD}4affU+biVjK7KjQCSDcD{?K$$jg$0S553Llu6YS70?Nlt5VH?8(grWq)4 zH&)0l$)EG$AB=;>RI11hvtJO=J9M?kdJ*O4b$ZiDBg&;>C>8p7CP9iwHTeJ~Fs~Bx zj2u7mlYZgD#p>D4R@if^4YYaWo?yyo^tQpGFtn?CUMsH?B1n{Xi-;@vlC?e_cX7DHD77YjuykHlj*k671MWsAK=#?rIn{vDYW-if||L z#PKC|YHT5(S65glerwK{^wuf5WA@6f^)&N%b}?QXR|?e^6cQIr`OmlZTIdO9h*oUl ztyS;6*ch1~Z=Q;myXl)H2FKAN@X;E4_$Yk-;yVkKtDr%R320||s)<6|%T=_%B*g-E z^;Ea+VoQoP?~H@CRurqr$YR0%19*_&Mg-}7G+p0Bvt?=_B0~B}-w%x!$Fx)e@f=Gk zOaE_pWPJZ!Ty4ernev2ge^{aX!&2O6g+xM?#X6Uole1&Z>GsZEykgewyFRYL-k}D4 zlt2E{leaiuxXxp67mXGNo7jY-HpmphAQJI*z&EoEpUOb62?Dl3-#`zY9fQ;ieJk=t zw5JGV9X|;)P~SN^>%9 zhOrfBU=u%64yR5wo@7ZuVRV~uiwB$j%Sxs5%>ZEC(0{}akN#A#`VY;GDC=a7*0q#% zMoB3{?j@*jGi1T%toUp)n#LoPDS684pr17R0m^;qbx1_i#J(6sHkY1515B?S=zC!q z=}~Ix88xeN=ajdP=g$0mzMg?A`BCpH*1l;VqC;@5V0F<0s5I5XLWKtbTaVCQ^q6HX zq3M_()l+@C65}BA4t>theoVk$Jw&4&nvr-P**X0h)!;LF=A=}XY7(LU6%^DAnr^DS zyHN{AI~eT5@E_4Ph4yoyL)w>w|LeZJP`=j4JraM#itY=1E2bJ}YQJv`i2*)U{2<}c zvI1cs;XiW!UYXBKcs=Zih0X)o`wj}`8PvJvNEnsm=9>Uxno+ZWB`uTGTVXFDga4@C z=cZFA|Aiq}sni(~zEbq9myP*O`shVuPNz~zmD>cTksAPx)QPk?|BsCyoE}Zz*y7r>MOomQz{VWGUyZZ_LPZ7F+ay2>IEq zQ0~{FEaf$>FqAqgm4lMW%J^l&?mWhji*Lu*pS!h8Tqr@=Tpoy#XQy(|(1uy)f;#PW zbsR{BCo_|vLHm;pJpLWu{b!kcLPiqeDdsAIBO*`cV4}!I1>So4SY`5&uPgN(O5!5a z$*cxT_Zzs7e|ojheE`(Kg`QYM4;{AkM}XFn6>LhK+L|p}0k8%{>hm-?(fWHxPmsz% zN%H;F%6yV(&nqS7qj0xj9S=TamiIn#aSkj^`-t#;@wb&IhnDwLE8%UkQ#OIe8H(8c zSMkhe*0@z1Bv%|VE+q9i<*naeXx~khf54B+SRS>gA?#ekOzE>>#nm^Y5#H*>HhhI_ z9fYS~n`SDNLSaL??1Q_XIn3(s#SAp*P#zl{l5U#6Yh}`nVv;>L$~GfpJed_5{7tnh ztdfx$T}~*`Va5%pj_=u}(gW`>wnej=9=P!}Wu&LCeMzC~GR1BkR0mW0kTpXlEh-ooHsbZA zk-C72y9=m4D{OG>E6LWU(>hG7Ml92deI^zBbGKn%yaC^@4i$k84&BS5v6V%c*njJ#!1TtE`N+~udEl1%QbfnUOWUY zU~$9IN82E*pt7ZFCO~tAqMTP9Ylt;!cIjwZnD`{Z;UOkcepg@r8s}mgiz-9iv)(?= zV{=>ty7t_a+B8OKw-;-A<6a5q7{k--3r%@v-Om*oSLtH=Ws1f%!zkMI(3AHhx^2-^ z40PLBUK89T6jK#}8ev?~mgx&!1Z4%16b2SHmBKTI{m;iJ>*p2z0;pM03&)}QDLUjl zNcqW+Ds~>^I8}Fp%QQVqwH;y_oY5LKla*U$92cYJ^`oTCT^hVJFWUr z_qpAHZ=6L*7odx2OW#a&Tdg70BcX+!#z%v#;5l9EcTNcfbHuL*a#MLXkHd+fe|lt* zaYAGkHG+=0NQgyp_sZ$*F~2>x@<1E`6?aHlj}tNfKgKvx-p0=rI*#*Rv_(=$5l@WW zg15hq5!^)#RJ5HmgGOQw5cg#^&{uhggJ^B*gcKkza{5K6k476UWRTBC-XZZDwkB@?;%I*_QUzR|bJWmV*+SQ}MLPv-k zMGa!DqyD-Ez1Bz+7OUb_*X~J1VQB!_chJpsp^kHVsoZDqw~NpJ@rgol^})q#dy!=_ z$KZ0G4qMyE;Yy|La^6l|rNIHeXhP{GTs}|)&=Ktc0r3X(-o|d&ZPRbfp(BUB<2q%H zu}xVM3Zm4o!L?l!KvT=*pw%9vo|_1XwD#IrdQvJCPG!u>(h(LI_;aS2*bc@gdF7k#K(JGTTVbw;Ufrszq1xjMV$zjo z2oR6o3S4~=!JVm1RE(IDrajbmV2cXaZJCkCXIpTc`T0Wigz`S%UKKXg@y(TldNvzW z$!N-xV+&REtU{RoxGmT<+!Yo_pjTPN$kifm3+nuVf!|~C`S%O$3#z^r@SB4Mg96~v zpGpqyf19_t;iNyfzwGz*GQ!o^PYjbPth-wo@2 zdvHBOGZrjL8j!O=tU9p0US$9q(C@bJg$BCTAYGp<$w8z-q)a2M*-5*GZh$d&WNMjb z8so_P!>=k)4vaBUML|Ke|MAoqR*L<&fg;!IHz*oRADjLjiYI*h%SzP8a}+f3#)p86(KH!tNtNM{Msn-+d|qV zD!@?qM$HY<_Na!P;Y5>yo;kl$-5wp1uLz&l6}oR)9zH3CQp5dy!qo>u$vHn0Q^)xS zhC+e^?L+;;h1N+KIIJM47fnez_Wp+PS#5ANy&;nnwO+HCmJiEn1dZf(r$df6(fRB` z_npY3QyFYNv6*VYxLa6PCSH8VOW51S52&-?LrvHLO@^lVU@EJ!)^$?Ldt*fk_` zs=4WrOBR9G}+lQ{!dXjYijKgLHMVnQnoup0$d!Y9eV1L|O_ZIndht z)yG1;7#n@Vz?s&iAGrI$!P#8uq;l7d3#@3X>}75$pg}B6qH)!CQVgiz)o(CxB|H7y zgAW$2DU&?S#{I5`GPt>)9aONeDGXoQ2ZIi&AIM&P!PtX?uWHGsfmP2Q$+65n&r%AK zW2G-u(V7C-Y{OReagcbCz4!7*J~(*A_FfvS_>>hXi}9z5yUByZA5Sp&gzTcbKVPW- zUGXmF&m(p-Fb%?SOr{JQNreSwq(0LSF0xOPfMa5$n>vf@vk_V$BL*hpO6%PeNL=?Cp3B%7B!2uz=2;QVX&Zf2%XKVQp>8f}W_ zVP6EQheeP7Yj$winHV4KJ^|)b*xSW+74AvioC6K~n=Bx?5>iuTcP*$P?CRfT;Zqf0 zgC#X1SpQYI9?JC7-)`VHgwLORT%mj#*4s^zO2n!T5p%V&B|8%%C+-lK%@bf70g_nm z#wdtC@iYoyvtn3 zaNbM*!6Ee=)h9l>EPSe{LTRN_(l|8oWa@pnEiLJGPp$)vpdn?9W1~vfuqe}E`5?c} z$&2axGkpHhD{N{G6dy^+yP# z=8--nGl60SY+Pw7B=q5Lb(=6{9a-r~X@Pz;NU6t%Q9vD>l7z2ye?LMjEU~QUCskr( z0DmH@s`}FmVvy$ z?-a`)$wZU&1w8ukj&s`Js~-do%bzHeuOg2!#HJbtRC9rBjrt)OIH=Y#spE{LT_Gh9 z$(QmWI>(vcJ5sZVTwix$2xioUurVNw16vYshM{zZ7|Oop*)wn>KlERGs8D?s`5v0s zQjJRWkkt-QTG<-x6jH}vZV$4WQpB2VoPL6kNR+X5Tx6ZLT7E-UPFg5JiXP*&MA}wS zPj%==O3u#401{;PkYAXLSL)?O0$+-NID?OQW$kDu{k7zLHx2w>P;6X>p|!aS)dHN) zQP-cT0EJ`78$INW=2D9wW!0?3)ny1r@}efI$jpHRR zmPx-7#gnQhxht0(u_jjIv#QD;5#%|K5^^Q|PekX-3*8Tt^`1l_1jgBP%O$jABA|Gn zXrfQTG&(gFbZiJPHEkb%0f^l9SMvSq@cobM7iy13$hBjwuBgdNd(Vev@Y;3*PdTqh zI=@}0mKoG#1V?3|80D7IiqG*eeZAldi38P}KmRGk&Ql5wVHfQJsR|7fGt$WSh(vHl z(_VHlm3es3$ z*q02ZA#I*15K$#^cu4nZ8q=h>BbnmV3W7n@T}t~gvjq)WR$R&e%Y(L!sz6z?bkg;PbWjo98=CC;< z27W(;?>Fx+i$9r*Z9S;hspYAAlALWM>8xcFm5H0xs{&85Tl4P9!gn=jMq&L3G|w2t zR1&zH;wNBq%E0aC@ZAT0tk8NpDNvXb7Xns>h891tK7oWeOC-~tkSOkp(%L=WL%vHa z2j{#4H0g)2g)*8WvC*ZM4@c@{Vj<0ejQqWHNI8Ast%&Qq0J3_WN4no^tbhowun}Z6 zjTGmyc;<#N8#YY&9P!Kv@4S%1731~BhdR!$eRElOEklDJ1gTjA@9>SrxcxM~`@7GS zrC(Q2_mq)%NoRzq!|DTUYBMDUs@BxRT&@(>x=`iDGE1FZs|g(-F5m2;Eb++1J{OYMAd)NF1b0TgnD$cAAZNBSVn$2| z>35z@@)RV!6t{Y7tt@@8NnRNAK{&t9E9k5Ke#a;8q&tgV7Y6a1i2Pg9W6B}Z*9E64 zGZ!kW)3Y(#j-?QLi@~qIjL(1a$+G5u-add;*k|hhF))QpR;KONS(D2u$H(DoFY>xB{-j-zg^msaqr!1yUbLiV9DMNj zrx)sv?zVO?#to3mx<<%HC!hA4U)A!yb?Oxe1@EDL!bOT=znUld0hs*E71VC+zwkTx9hUGSFcdN+C{o`tUgaLT4jIV z$Bldkf*E9uMco>CJ2alrs;8uZ$ZYbM`>OC??+z|ryM}!Mpnd8H#SG4Lx3|&v;HO`mjQ8nzJGLS4#+~+SdDT?*U^O> zC!Bx%P%;UXefXuEJ_2|?qf|Mi(&7#1Ciu@+{0vOBYx>7^E(ce`Ic&pK-%2K> zs)xyNpNU2jk}e}Zi%njQsZ z?$M^)W6nM5Z-q25(dMPfEaW)n4gUK_;PLj4mdSr)+@OQGY!;BFUF2A3SM|?>dAd@Y z#_cmvQM%IHU*}7J^G}w_SDStV^C|Y=3R(Wk63nqiT3>43N>wv(gq^--bj{VK;g~JU z`SLrchlH#4-Ki|5uLn=1AX#sHGno%AYfnBK zdG3ib6Q@p0V$DTew$Z0iU=*25n>`p>q|94#Qv45fUctq3+T#fLUpH-@O2NZiudh-A*Z zc0_W2(QyPma$b1KLmcOCN}OMh;*ZtvfCpmM;mPO^k4zb|7I~nNyyfe(e_=st2P(j(;8W|JW@Lo_wq!Yl+%k^+$T9<&;G_e>mvootD9rM+Ts%j+qWQ z4u68rk0>_pBBiqxeZ4=b?AOkhCh=K;zpjE!(A8W3!-by@$z*m;9N|H64mu<*w9b6v zzZS2jRQ^;JWk#%5Oh&5b1nIPt0ZzNtA|Y0`qt^p#m8%UF>eX59h){**>Qv#y3aeP= zOfN-c{5dmyBULX<T>&-vBd z|B3e5oH$c1J_}wD$x7Cl(A*%1<6&GQWZV3f6JA001EiT#cW{;e46l9$`~r~7f?p1k z^WO~lrhK}I68xO1d@pwJi8fI}aeb-@@KH<>JMiang2GxXPFkr9$n3y}7A4*!eNu_` zkZ5cujogSaA7h<9X)Wg@KLB&NzLI*D{4U>ILL5pRhg?sGp?OsX)DlIG8R^XZO%4@n z=PB3ODjqK>w%#+P-*VqgZR?pKa(wi2pOSV%DiLJb8-@G{bV#}>-^l-1x$~_V=&~3i z`XxCNAlKxvkeaq)CL8rBq`E1XF%Cx>d%*OG7M%a~Tg#mvbP)SyDE+qU$DU6rsp$mL z%$?*cD0{`gh4zygDz+a&O72+uH>A{Jb1YNqup9&BeE-zvO%F!-tpZG+(}SJ?mpdgS z;9^~rRo(A6O#^p|+kUQu{0>$B$3agk>halPFwf3^%f_59Ahn5ELq2Qq-3R7`FC9|P z(&sy$U#|Sei1sb|@g4n-fvIs7=2n$&92yg;7-nAYlM&ZgDcSzeA`5mNRHGZ35v`aUDuC&h91E%DAt4Hn0kc#N82Uq5iLSz zzsPlo6hyV^MGzjVm#6AEBMsA#JnsE7uF27M zhNmpgUy)r8k!|aixOS!?c(S4Y2>-JEX9l*%;KYJzR5EN}3{PwWdj>94Px2Eb+fCLC z6O%g?OF;`DrLCqEPZ^wQdKj{&oOnX-YvIKO$VvrGB z3$1tO>U&al=Kgh*C-j#k^HY+mV=@tQ$0nyWTU_4-BF$EL)>bmIZ==D*A=e#5@AFF@ z*My+H2Q#@Pe+1+C>NAY0gf7Z=>Xki?X10-iIL)iHQPo`K*DVH_x zJ99^uir7ql+wbAKzb}7WVV0ohh;3(*Y;A0)@jQdWY!|6ae5u(XR`S{FwZYs73D^5b zz*C4)W>n5V=Dv5ulCh-R=@PNSs0w!e)Sd zKQ^e;oEkzH)bXJ)FOp%G^b_U692*oNXty37)_d3j776P0_B}|fL{0^|OtRaSA|YC~ zcI29Yf)Cufn#gQQ0<2zP;75JS-c>w*nD{M%99EO!R)W@v4)r9*&H>8-+GWiISA$eM zQ?bG(luX9yZnPz^+rXY6=nlCM9uf!kz=E`oF1pFG=iS5Da<<*}vF$2)l}?8Un(|g2 zu^ducShQ`b*TbuWGiWkdcUMp=BU=(nyj4A+4J0@tXMj0J97T3)uZ?3E*zp2md`M5e ztWu=EL?c4-cRrd1wPiHX#Ldm+Gw(CHkOTh z=syFtGY3G?xYlTaZI6QZCj={6en!gEyDao>6l&kbFOxxUI*1V8k@Nc8ZqbNWqpLia z0NVc2ppWXFmJ00?w}8B#5WQAfpbthv)vHCpHa46v2U4a2#TQ7?q5j|Kz-Q^9tea!< zcNj&~Cz=k)r<5Q34Mo${gjP7^o^Q3$`3ZYc zq1*qR?ER-8GTQ+R40NBwE;in-yX2+z!m-G>T$(OI#ymQM&tLwkLivuZ zu`sKJ2QX+kd8lD*x{EE;defqWCfJQA>~3Y`2a0oCAH)>W%1u5M|1!hbcy4TR`S92Z|sdh=5n0?|~>HI^xD6;!~cYEP?{^ePuyAcUNXs zoG;EfapJ^T(8&nV<*?xEs4q2M4O?M#hYWU9gh$|iBWU!^=+MOcs8i;|tA~~Pi%R}j zpO8KNw1;GwcQzBY(Z93SsT2wQ6|zGrVW%Yw!ZSx3gge{i@!(2rwpyQL#&o}sap_I- z(7u{3?vF@*-*&Q!26Ha)R<5Yg#;0nQC4uF@GePiw9b)#^`+VFi!rI9d&Dv-5MV@eo%+7JII=W`wa=NP8T}P% z{aXq4Y3Pr%^v`GTw}JUA`E(YBJ4zNNTZyTyZuBvamL_1#?mIo&Zd1?OTfx}13fc#y z8S)dCgOigN$Iq6^Lxzg6A{B(&1G}e`E^Me#Paxr9IesI4erF?ld}z@uRS$*qjvOt$ z=PRAV)6;{~8&?(-S4)`HYZ%JjWR~b7`;0E8^9K0hHG|pGxrmm0V#lcp&Gt%crE{Ye zTv|VSVKk?B6eBeM`hj#?UX{m$JL|`{Ew6Rgg9Ynv_btaxK6z-+w zm-+Y4LC-%tHBAhbL-dt?QSr_Aj4h>jJJ@ z|7%&Id)LdqZ_VR>!|(5YeWo~2BekGawd<@$GQ7F6ytL36Y;AO-wT2&IdgetUE$kDL zmQ=^#t(M$U99d;JQ+m**t#yF@yco(_P}>b^HG9Xc`-Mm0>#uKM{&8|Lft{%m+!B=# zjXqncT;<>{QzI{nMxRn_)t?Q9gcwI>GIU-SK#LvsQ^@7pE!oo}zqDq>*;p?fob9^&K1> zoa(}N2u*qlEY)`qpliWXuRnSF(!f}Ie{ZqbzQ9}rHmssmm$J(MFRmerU#Q>2Et&c; z<|^O-6j&d}q&09LL=6Zw1G2fv$xb=**6OVs8Pt?wwm4eH1JpVifJn8r9GYq!HKDX} z2It`=>lWb`Z0^CwtQ}F|>=Q+u8(O10hQ%77!rdMu!`3fgD_pX0qj;Y8y(!D{&N<k7W={Lc+JF%$KYj8 zIO=raLy;*BReIQrZWQavT^L*h-6LjQsF8f2z;oeauuV*%&THxrr*H&_f^xfGBJDFi z_^AB&Voa2`rt@ps`pGKLw!Vr4jB!&;0dJkEzkV#PFhZ6PNGu?BjYG=Pz`3*jGAo5I zSp4!k`27zuJP5HMhdTGIIu0W%!${ygM+h-Gaa?iYu};pNPbVGS;Sc}<$cq| z{&`y0K9lLWmNq8nkK}k9L0j4*eli?hZxb^?*XP8)g~Bt`c?#wKz9i3i4PjisfiJzg zII*&)RdDINeV1X-87H^BPB(jzR0II~6?k6n3%Z|?=e*h!>C-AjGfA|IYqfJ+?gD3U zx|+}XgC4qgUTJ@F;UGW#UfM$eP6+JiK>!n7YB`EiFVglCCOc`p#ma%$bZSe0i$cKx z$9SJw6%7=0P8WujeI8H#?>FVh=lb|<7T2cG*qZdp%9365Z!mQh%{%+|dH&ymzr7*H z`Nv$tP!Z0BF?2NFE1swv(j>HR*BRYA-Tudqnq7ow()C&KZ_Mv+#qZh1pK3}MdfFav z${d?Pq{o|N`)d*t{dgtkTtAZRxOaS4PIin{J<~*ltuDQ8rsP!q#AVj$f-3A)t!;$1 zsK>#NJsNqMZ7Dc|{Zxz-t>a6X*4fn1NX5yq!uM8b)CHewk(VoI!hVth!g+Iy1Lf=g zbf)!Zd&VKLB5E)kV?}g9plMiP(`rm5VJHk+azpFmgEOt~-YX8e9zSa3)DR-K-w_>F zv=KP9=&=`C!pOpn)|Dqd^xs3@*s4)mae9IYYT2hE+Igl`&Wn zLo2iuZfvLgDsUS)n<+n4>qrm@VTQtE7;N29+z7Uc^Oa`Um60gc%FR5%PbsSB5tJ$d zI0#;@u1fwyRP%*PaOVK+yHV;la>ma^&+D+7B~#;j;<%Z~h1rwi!G5(JBKl^(vPr@1 z6gOQ#Nmp~W1fnj2qV0T|YmD`uj{7hEcBcCSM!<)=V;jJau(QH3U2;BpnEiYN6ZrWanbw!r=>&e{$V1>>6JDi& zqTtZr3jypE^vE-cjJhbb6he$%wA@TJgT^MhTa`9p?jqU0t297zF4Rbzlc6*9V87|^ zk`{+%Z20Jr;1Bl0z3aC|R1s8U0s#Gaq^(nc8V-OeiJh!s zu;>{D;9x%zyT_6K*J*aa`jl6I3L->%gkbat>3HhdM(K2oY6o7=s3-M)Hb zJ$jXiz2tOyxj{n2=4pBGzd=lni*cs&r>8dW2AnOvwrPk&I;L5&m=Q*RSav!5X#5m6 z_P|W@S?8h=KsH2%J&LDPY1at-Roh417=&gbT2s}JvFJ)por4TX{L$|Qtsk=JeIS@5=GIU=z%m=2|DfScBf`hCre3ei?ZEcVIC){+uO)ZK3QBw z2t;Qe5^Lu>N^0Vd`Cu;WG}=w5%~%h}cd20)UTUoul(+heCo;8T!rcb6$L4NO!I1-E zXm=1=53K_)v~)SQp#aDmM^hnu&(VZ?Uh%fY;-%XV({B+NEg52|=oTmO9l)xu z9By>6aG-vL;hHlQly+0>)R;iHdmVWMd+-?stzD!oBgEU-BSfG&2~=kdej<5A=}$XP zq52+lv7V#(DZDLPJ?9*L`usQ?(C%qI8U?wPN}XH-b$vBg;Ty=+k=|w0{Il>PJv(r( ztnosqJ`6Of4nUr`t~m8TeqP6BTq%{-J+UzEHq?vMs*HuTgX7kK(vnDQDNg{Q^P4Cq zwieb-6;D42`3A(-K_l?;Kl=P2A)$ttb*$6EbA|6G=a~j!!6|b$SjX> zSqVra$~hNR-_3r+nXQX!VDaKi2fH)uBxX?50CAsuEY8&+bcB0kXg1lG5dz<8k9FG> zP_wXn8j^<1iY)NPk-Va&+8+W>x>)c2Hh#V%<8?ifH`2B6nNsXBB~nd7cDn~ubH_qg zTX0xXO@@@b?tYgbCt-JzeBOF3KmCYoW=dUl7%bYhc$l|!QQbX_`R)+gk`t$IcX5v- zIQ|k#D;5eLmt;rtNOfXA-Og4YiQGX{U_%}u?N{wti?qbf+VItSZTjN;3fK3U!`gwk z742CjviFQiN#H{*eL!&-Kb&nGa%T%+xKOlIX7VIiYm#NDy2EHAgcaAM=vBmOkB6x7 zi4QIA)x~zekXw#jjZ4)tr)%G-EQubzH!`dc!uwTg{)d3eO1AO%+8BGp#bG^ZFF6LG zQu<@qEQmon=i9RXnCQRny)xy0ZRmD@s`gQj(0D`2EYe&Il0ZX*GWEhR$T_n3gz`A< zm8rfrGd}^xVukVwM|Y6)YDi8MO?$&cW{@X3RHizFoiDq(NyNg%f zE_R=Nbrg`@>|5x-w(gVT#|9M1>!sbwKJ=LIVN(9MD6b^!N~B9#lVp(McwEhyDxOuG zZJj!GO3hEgFKoGm<*H_UIopKiQhdLJ+3zXf*lw8yUSG|YkE^IQMLY46MNu~a#$FLU zc@J8}^uhHtHaAxuWW={Hv0PR&Ui|(rkIzpuFRpL`eDTr z6O~%$uo5Q*>sr^?%y78_ZOV*f_Bv%8q9}4?{LBSp(PJBi%6f36+<^^rt+Jv2VIgS4 zh&YJIWV3)Sqd8Vgqq&o{|QDakqn@4CXTH zsgTR9&Hxs-P#nrp^|d%2knIzammhjymiCE(Y~Rs5-)B5vO`K+)_-BNGc1Ldvx%pST zs&MqsG`4ntF9Ww@ZIHR_kt+U9OKxbN{OtQ=IbYcMz@9kY46aw(Hvqp`#9=z5GYc%Y z)@m%3wC7$%-FUT9g02cpiS^lCF#lYNEd;maQf*NWNEh;#H8S)=^Dv2+F|Fh z@G`uxDgqJ^=t9p)bS9{T!x@DK%lU`#x1C#Z;~Q%u(koV)c;5wvGLbN~fCoG&`6gW2 zEENhLBk*uBA5neA2YoHeI%o6P&|AVJM}S&9ICE-J84WqisSeKdgIcUtf{F6Z`7^T@ z$4)P>h>`15E8Zwkq_6OtnlD*$@;=b_vi?lv1Q|9cUXFS`Xva~7Q@lulClo_gU1I~2@`uSO`NQD3!G7_V!SS&{@x!_Ckzw>;BD z?Sb_|*%nNa46b~wm~E!J(ZuEiA{F8+C}EpRDUF>!q;SF(Tmxh1HUmci4n|P^co*(E zxEaPMcB8S=#-Bt9ZgItFLHu*8?vLudazf)sdH_sZ-M%) zl;~(;E9hGZH*n_FX>Or>m9FuW6E~Xhh-z(LfQmCvA(S82Dz2V)o~F*Dm!N{HmnnRj zHGfo(_Zy#`-~3G@$fi+T-A5HjwDbv!74-E<1l@>uF;u+mv=LZ_{HlfORzviOu%}GN z&paNQpItmZyI5QvT{#*i$vn=HMG*Sj1{AMA7q2h$`vWtrucl2XG%%7Eu*oY zmXDQi%n}koZPOtg1rmbz<%Ks1s$#m{Nx$bv*CGyXoia@y_z8)nSB>|v7C*lPfB)7T z$Gt>euXbf0N6n-=Y!b9Xnm9|Sm~#0%InshSa(d-FT7!z182pJqr_;3zsU$))g&~^zK7yB~%J&KG1_g!Ops2+E==Zy2!RzMM7H7H(mGYC=L z{=^c(iDU{exj>6+)vb!B=p({un)_6|FXrLsb;?bV^2$Pi`)V+Kp9JA=dv~_;MaNN8 zwAGP~gMc?RO1eRsx&&bYoC)AIz(*FCT>kdkGu;o%N-dI)?ESF*nFq7PUbttBOfZh#2LnG%X=)qJ6a;@x;m3SMb=KaR zY2GEurUk|2O1O`JSp;4})6*#z&OJsOuwd%eN@;9W7N$m*l$e#mCTw?V=^Vd-c1#It zUI)!O4wB%|HZu+sA|Lvx>Zza}@5Zr=Z^KtUjnc>6JBp>fE@^!A+gwl&c5Cp-V>8g$ zs8E}m+|*Hm4!V;-F)bN1H&>7Ah#+AxPkGCK9Hy^4TfGpgCS~kbVMC; zwo90Ps#o>VsZ8~6*r~Q`doiN+;L_pc)qxB1gV$CgYUzHa4GgFG(T<`f8Rzsbn9tW_ z8virjX;jIBAuL%KPvn@l=2BYk`VEGt7zcLx@SX)~~mNjt{&uQ~B%eL0QdLF=gL8iUSc zT>|QF@Z@aw@rn-8q!VFnAMQ)UB%&`|)80SHMPJ+}+PY#vfzuAHK-e{{O{Iev$r6sQ zp?RWwc)EDL$iMU0OygIOxGHMzqq`@WLe5zdpYYP69#9jtfbg?cn{r)>urT4>#c>a= z|6=KVT2Sgu>V(5W^Ofn!=p9)1%4S@^+Xn~1zpxKq8t?Z9zw`|Klv*VgMh zQwQOVtA{bct`{=lVs3-@4rD)X`L{(;y$sd|WY7H5!!xFT4=a34v@aYuCxXM;Qu$ev ztW>gSpDrFy>shq*nW>^Wpfm(H_aedxr%3Q0&5Nz1?94vV84Ifk`O)=5iR!wSbCwEtpuav*v;w1i;z= z8%j$)rZC2dWgv6#G2(M2!l% zg;p9@1H|UbKiq+2vN{s?7vNK*&WZ?rt<^TLO=H%^bO}mX@NH^&Lel&Iww+7$#2%LE z`6@=)EzX_7ZmGH>&iFwgTI`H&ZwFNXo7Sw&cvMXc%+rMsnZpxJxJ-&C*5Gv|U%~)8 zMptefLt)NN%~(f_YzA(LG36QvW7ePIJ0TTGb>;7a|FQn3`1HM}XR9Z~!7u_zQMrM# zT&d+*4~=7o=K80GuH9H&+~A&tvVH)Cq{=rj|Ma>hfV9XT%6jpy@V6Iby01fc>E`Z6 zcvwWd#mVC7;^?V`Q~HU4R5|kROo8@{Vh?P5n=R@BxCGxB0v<@{gaV-B1l_a{v0+jM z>BPK@xbpycoG4-sAKfK5ckU=sk`w+B$L=Vh(Wq76w-bMyue552y_pWTw|2Oz~?;Ep~>u6k-*MBN#!!d?TYpA!A zSSs)f{H8TH0^%Y~w7$DzSEK#B_8Q-2Pofon1A5yC>SMY|zJD~+`taKPS#)ck#FF0= z&FI}G3nyr=NT*rpkHV)ddPyD+zxnQ&XKk>|$r`okob2IUU9&kW-;XJ~i}|{Y-|v0u zZl5i+Xx zi35hoLv&n3`V4F@-hC^6`Le|~AIIg2%(rm#a!EB<6UNzXm;+j8O0h)zvm zSsTor6`Eh|#G6SSFsM2WF|%5Z6CXIO&!o6L3XgE$_AM{V#eQ?*mN4ZsP&HZ;RYx?2Y$n==SQB`~ zRK+hp`&ddP8c^&RT&p&bT@dX9Q}v4-mv{erq8`pSWU60ygus0Y2dOwmqNSctn-4qo zX{rR@abJ%!pyRBo4y&htp`v(z>@qm(3;G7D+UxZ=`1DKJo=fp?fEQJyK}tf10HQAW zqIbkmG!=WZbdOY~kLQyZqi7n#sD24>h<5@2yg-2>;10yMVXvD`sKK%44fki8)yl=Rg{j$SBJrLFlcgHrVt({QyN+)mRTP|K;5bd2wIY5_Tw z|CG*02+NBi#I$uwSb0d_@rfUwhGGZ{=0nGy@v zW=DeS2UCL=VjA@4m@iCBz*OaMzq;um4zxVVn&0#I{g!{tvJb`rHsrM$YBORmle9%g zTdl@c-BYR6xPys`UZI3I{#~+$_}viqv~3!XhjsqBv?Hfq0!DN(|GyIWJZ&ml{*UpQ zqGIc1)aI>0-`OUB@*zdTSEiKy2y*fUfw6=ddZOl3{j8(?3s8vYwX6F$- z8+hD5<8?g7V-e-v$cme+!Pddn7~F1$hbe6vsjgAs`1IiAdY>|XBotA9Q0C8fgTAL` zT306$HpuT%BGF4SA^z@>)dXRZe$;###m0z=TU8NOMgf>O^YK>zMw%3=7m5uKR;t zx|lDhuFr>aqn}ot)dps9hthy8#ib8B-o#P?-98l1MT7`4t#rjMmkOa$&16dr8nkzRbsgR`~slpaVJd9i*l^q>EDF-5^8u@L&BHzgWtM}1DTbtF>Fg%?=- zL-E9)zdh4+ui9#%9yv?{>R~~ZbWze7Nh)Y^g_w)-T4FD#CS89_vCS$n_276Qmkg~M z6o)7YoT=`gL>gw_O0XZBgGhhTzW7!ud$AE9P;tvxORR8Y7-Ay$S`@38JUu0#usHU&lXx2jBdjMYEZD;3Ap@ZT~GcK16DbDUxwstZyKB0Ll6o;^m#Cr0;AS|;2i@`D&biXcjjTb8%IfIbry%PoA z$`$}d-T?v>VSNqFGv!6m#qonL!p~nRXKDw)drSTdFg@kg3x6kSeW1Dk4xWcW zGUDAJ754HL?ev#AYd2PA*UmOO{p_vqypgr&apDP=6~D7xcm={%h}nc zgP8M(p~dQIPp~jv)n}%S7d@<|eX)wr++w-Y2$&gk1@KqbT_n+%nPX>r3T7YvI|C-yfH0zBO`GC@gJt zAFPd0IichaO)T-CLXngLGTl@bPlP1h;Kh*78no~f4Mf?HA!1tE>r#!-gf^S>d7FUwZnP{C!?KAi|@M@})Ra&NvuYqb+aAnkubt;ZbiuMC(mdS^V%g{C?{{Wh!5Hz7@Ty@TJW=f1Ma(0`frJx_3lS*Z%1O8q96i!k}GH z>O;RFntJ^uib?eQl7aWipr$h$^N@29b?zs^%?_Ez$dAV~Ej;Ob_DZgL<2*R1g$9+P3c(Cg z0NqM4d0PsqPWFlx35`#sO=oJHv9N*sv@-d?;zHX}?Z}fr%{w-1!p}VG*B@L@ne86R zm;SH0;#)$vM{%i!6Ml$hyCZ@UiziB_mQIyU*~Xt=HYHFCx-7^5lp}PA&Z~CNnuclY zk6T?BFP>O!z#4D15CA_;G4bI}r*eC2C0Ux@IoZ;gluCPK9Hf-tNaVdxT*gn|Bg;Nc zixlU-usM!aGdP8&bzC%Zf_6c<5%e3P8ZkR)+}eWI+o^1hc!tF!{vOR3L;4haEVRo* zWRZ4X1rePf>5P6Ns8cN?3g9LNRecVBrj*Nid!tcqp#H3=gfvp#bNlP=dXfm1|>IWTR zHhglR|71T(por_w)PH%sBLDl-Gp%jJBV0=qjp&{*ojtIMN~-u>DdZ=Gk@%c0p3f7I zgZmt0t2eN(Ev}&QG?uQDusKA0sz^a^BezlyuTqP&bw{*d(FR$)$kAeh_iDT6mQJ;)#}iBR|LYpU!rk zo7bso2NvB83IPnn7S&>GNv3{7JiFp?wK^=6*KlyVU+W-CpW0Hv7CAr#P?Y38F*uA? z=%c8PEi6KqE1!7g^AWCzUh0Yq603+6bfb*&l%hSr<~uCBD8A}Tx8;Nvl=A34>WA(m zOZzLp^gG;$m1+b?vY5(Pc&KohhGO3_9cy-fS+>;t^^Bfu;qo@%^7D7(gUcAzi*quN z_{5Ea=)#7Y32am7Zo+8CcfNz|<#@OeR2zMZRmpg|4B1AR78Sv_YdaL)oUo~u7Pw{i zW1;o*L7B$2sR2R`$H_B+9*{U#5nWkOwBkCJ`&|SzIfI&c9n}Sq$<_8|I#8CoL2~O+ z-`fjL?*J}z@w#*qKmXTE}JfJg{5ev%GHNptiLF>0)#mYh5k zzu)<#EaQCQ@e3!($r4H`L03ZFEi&W)?VCK(qlCdT-Bzm%)}(&3x?tNEQH7tNh$z`AA{nB%zJNr{>-Pc6c`Hqynf9IuiV$!dn%7EZ<~jkLAP{C@Q{N?YL7< z)n`4DR4Ba18u#n)`(NiYZbS#siLFzd)n`49n+0_!kw-!OIvuUqQ@`IUY!({uNw0O#d^AKfkB!>44%a8FiihBhCS!EP=OoOq6%Z|JC1oI=SW zYI0ko0;VSs1ai)I|Wkv#hk ztEf*hUEinT%*ZeG|75DymQb@=#B;)XM_ypzMiUM+O9~WQ^Zo3rGoMj=G7VX2O@6=P zpRS_g+wgnm(^;NhE;V<=$pQi?5jEMMaJUl`z<~lMu1rU{DWHcG@4$(^)eWGQq(F$> zc4Q}vA*_y$;!B-6e29J1IKH6zS@xo{gu}z=L~R_)$Hn*=t$) zMUc3D9ua!9@WN(5M^&+}r;?V%6PvZphEsZlAGx#-OQO<5Exp4&dY1CIDIyACWIAVY z@fj7I9-}Y5msdjncY|WocDHb#Jia>~kSPu~Za{Wg@G+t{9j$|~lj@05o|2E$XAvp- zql%AYEM!=mgxcO!ydt{In2HS{E$wP?3MVy{W_7PsX`sm-;sNGxfYa(*GTy6WYDMeo zr&;Dhv4W!nlww~oPCgRgjZ1tECy+{)ByB0l^U+|Pn>yIxZ z0%GD62!SIA9%k&bvA|G6bEIupE4*)yBG*d!A|)@5mkCO~$C4BB1OC;mS+4WTrAr`Y z8s{zzl$0&C(O$+PL&9y`!IFZ9SbcXCh(X?G9j|CzM{^*-+iF6pn>+or?Xe8?j z&sg~W2Jn6Q%`EqQ%g7HSrr+Epm@92$R_qi<51^OV;cq~3_a;<@8*$Ig5%|%Y)g1WV zo)jQ$17?LH>8d9ldZage9{=}Ra`z$p{_C06{fP$y97V$(xIDD|nB-FRfde94-6ASq z%4V#=)%Yonmo7dBBs%)Oln*~xr+`iZ6Gwl30&R*cf=Tq^3ZPs+h3&Xi$iZKtxX#z^ z;?;+e1(m)!N@j2NiLL~&;e%!kB3{RIjnbi$lgGs;(QNS}ik}g8fFPX8LA}~+hB&h_ zW5%!@9iZ*#X*HMH9?4K3RunIrY3Xq?lt)7s<3oMlKk?wa@EL=o0+EN0;jj+#z(HY0#fc(x~*DSEj}t^|9E1hveh}{vtJ*tSjvzQ z@bgO1;*(DSi|=_vUVJhUbP(I%SuXg)e0juJj$jT_of|hQtxDhI7BWH+6ugDu_03g~S~Nz1gl-okFp~=7xUZDFka(Fq zZ|IprOn0Vcg<*zS*_pTb7}D1lJe@$HCtv-sdS z81rj>HA{bxG0wwwr4AQZ(5O&%$93Uog*|NzTaD6lvrj)--LI2Yh4j2i7HEadb|D^G zw8NM}a|)U_>ib3)&)-vl(>*iwGsjPQ2bzZB@i@^clqd~Xw>;%Y%0&-WwMQ)VnHHwA?3ZE)ifQa5B$F3I(VQLFa9v@>>q)?` z{~)h*W(BP>gG7^8oh)=N^=MEH9D6q+1x>wNGWeGipEF&*kKcddZ}ZZ(qAiH5UQp^( zH{m6=xk6)iM*_840mW%S%=U@NlXND(EK-SQ3O}#-pZzSfFL>-za@iO3^}0S7E{o&Z zho>}8jayxs4wy7cFafCKDUX%OqT=*}h)M;=r3G`rdEh)hv@Sj4f&YQ#Ctj{}FZVi@1w78j*j#?F#yi+}k&u6RmcdJN$3~`{29ukN_kQF>e(KD@#LK4Z^0g@IY zUWNHjdlN?|B;Kazp}1SRSdYCKKfga)dl%-3JW1V2_#skQjc>AAH)36#q)Iz^Y^Mu>ntqS z&>V?B<k+^Axawcd;kSML3V`FOS56yrDz_bnv&=wUgA5nUoaCymNvgarJOz%jr zd}gC$Gt+!Xq0|JrMz{sqw)8jK zot>a|O2l#DXb{7qbb2Z!P--J!(%!m>DKqY1@|NMOG+w3DmvJ**Pc<-W4u3!#wy{69 zH!~A1&CWJPjFsJ$I!P;J<2$NFkU_fmjP)~LGQs?;}NAz_Fw#(01J<_qxS zM}F)h&-s(r`50{f|4zJ}HrD?QfKwbjT`bRJubq8prt;kCZtjLiF00jWkV~R``e^&R zc5z_z>gCd<{mKHb2l{K6&&oj!d&?cjNr3L{J*fWz_X}iu;&Y&VcR5pfJ6l`SOcY%p z@sn*=$PW>GNFQRvBA`qxkCX`JE4k`5Ach%`aJl>K^ z!tGP<&(uCOD6pY%*rvw)ic5@v8}2;wZfR(F@JV`!Qt*$#6hPf(;q(#w^_EQQ^q7+g zoFIC#(B?+w7Q`H9xm zXJ_kAGX@Ntrf>je0TdsVtnRnrd4aUbvJ*8WK~$b)J?y{|S>2a^QkYJMTdg`O#+lZX zerSS38RUJSyqCgPHqLNQiQHh(0D0?kPNtg`#w~s#KV&`AK0pb6S{9ntLQ0NMew3zj z-1J2@2wa({KZc^M!449Kz_ja?78MmOZ3c}tJfCdf26b3~KE|{*;4FcDqZODv*TV6g z_}kSlXKBY>=pY4FbpItMp!5)p!smu#?NEjc)8GBU8lLABBFGxpX^B3EwC6z%(YB6G zgzsDk9~U-SkZr2Z34h*_s2fr>_|(kb^L?=<9FbHw#NMVZlKr&s?ZS>@KJN3ZEY}kc zS+4oe78l9q37QmJd){eihSYlsavrJg3~_^)N8Pt1Tc^RL)hzg@k{O+*YV9&^FP@+VjiI~lmrQQ*F}@af zV4Mbc#-j{`FWIDS<5p-6wcFH<|&Gw!}5$Mkt_b+NW)QtIZA=MBPP5C@x^ z(yn>vpg`mqx$iyFzH%rnC+~WMt_Q7F;QAcAe<8c#qnWOc7dlmx{#`-07~nhJse`Ab zKZgW(F|6M3SY7dRN`(&&z&%AhdAh}sepH!+$64ucJ9iQO7jv?B1g>mY=a5(l5BTyv z9&70Z!foJ3v(>*mYA|c#0`*;`>+h7j6FzUx zv~N?)AJ!f*{=f^ISE?iQNOpP+#+3{MB|Xa;5abNkmddW zzpC^E_4R#mruDs7P`qpd6^RivfwKgheA2p8s@A~AD6Y_HwDGwGl}V0xTp_elZEx-( zr9m8;)X^FVXQ1i}41BC}0VfAXd*#06u+~Kp*LuvyiSOxK2~pCqLV0Bs)Ig|)@f^zW zN#^yF$g^?QUn7M0bXV~y&j+3Fygk!60#rIhafcb~PcZ?g;2qN8zpqrc`Y0Pc^?v<}e?;?74?=0=~mC8ndegtTMO?5-zCJkUUSz;!I zMSK#eGW{{7%Lep9ZS*i4aEw0m1|`i`g3EuoR)r zC`P^q6rKzfIhWSd0X#u`K^NnA2|sWDT$blP!n3higtI z6+|A9=sAXWz5@3#t<1vkOz)*mbkTVXT}&U*`@&4?U?UF~s~*bgBD%DSn8SVKbJ6UM zb%jNOFb|7qBj`b-;}^FnbcRg6g^>6P(T1B4uc#O{G)!Ylh=;NMxeK|D`1{nH zgkGVGain@IKk}TrA4hE&j8teupjZKpfvU0BSBe4{=-LF$7lfPfSkMC-Ti&Ry*#5ol z4!p4JOf?Z5vgPjZ?iMNDD7s`=>7n?&Y4S#O(&=J8`8ei0!U6fLx?Q0F^w|n-bIpOlduD5YIo9bO@s0II65RN+ROU;vniNb^<(T^)VDJI_k1p1y-wvEk zWvge9sT~%{U5H~0m}`}tA{{@Xa2e`UqEet`x=03zBj0)D(B7hCDDftugZf3##q>~} znP1CxeW>mR4H(Dh%!qOu`dYw4l{ctS(oMXZ(A&r8^D>BhAu;NB++V@(Q`yc#H15?p zqB>Dm*Fs)tY4u^mY>FB=FDti>$$?V8U%D9QXW{2R{;N#=>Z;z~BK7A zn;4IquRtX1ixCU^LW+NVH6mYMjQ@LSF}e?Lb~v%wfBhcD5McOELWcEqb zUd+w|pO-Vv%VEBu`tl27ncDd}J|eQe6c!gd^$m+Vq(G`l6)$AxC3j1R)%6AN-Ou71$^+=nG=49hCa8MR7yyA(r1(Xm<%u#3WSCTU&_BiV z)L6Z1`{1OVLY6e@U(2Rr9b`c|V3W#KM(9bLd;7vdp={wmxIE_xnc6ks2C83)mI34o zLhIrt@yPn2rkgYHZ#2!E={kWpW;j_&kI;gNYHxEvHGecH=>vHLVX}xdT|)PRNEqvNK}xL zbCT%Fq51-=XWW!2Nf||KD#9kg`m&ZtEFYDn-S+C4^QU(wR{b85K1(0ae)_u}l;wH> zTIx7|40d3Cp-ceUi^@I`2m?pi@8Mx<*-#v;J;f>kr^<&Y3L_zNucB7{I{hUMDNl}t zcj6&|f!7l=m2+*-z$@DJh*JE3jM7II5DDK5ZX_JoQk`lqi0I+e35WEj zenV6riRt}&(EIpI&rM4>z}<(dgnaWV+HoG`U5RpwHPlKcqcr&*7LMpOhT1p$%6zUG z^G=~abr$H->D$e8{}&C+L7(P5zDvZ}vVdMflAOX@)j8@6N|VR{nt(kn5E2_b(oU7Wu~@^jyNWV*hv{8+xDG``bLxO?O~ zn=pOvV!PppUg|?n7t>Ai_AU3myXofnOwj9{&onw^MG!4a5%m3&pfaYD{4ksMy<6x+ zz7VQuA|xM&*yv0RBN)eUO&C(XtUP_ru*FoXh4vc1i5R_Ikz42}yMgu08}UJSzl`Zd zK+Vjl;#d`-TA+}6DWa3l0SJb<%fg-dt3Beoa>bqe96MDq z+R)<*)qdIll6G^J)_21p_p~J>?}-YW2;W<8!UxwkAEJl}8j4pC7I<9z&1iFLqI$&N zM^rQi{-b9h0$bKRkbm=ynbs{c=>q=?vxP!?E#M_XMW053Z8C5k6G6pQup6lQglU%a2O?6^z+#%J=*TMbn zM|Fi`)XV3MycM4v!y0X!P0D)X?5h@E|2gpfK&J8U=BR+TbX|>yC@Mxe#!+@f@U9ys z$<~XazVB@~HEPRc!q^1#65f6^eD3d8<`bzgM2cx7Fx;tLqe7u-;Z5gH5Bx%|{Eg}> zqQD&~b0>T2H{1=}ZMnXs1(pwY7YbC5i7wVBWS@WX37PskDp=~k4TwynXt>dxWW2j% zn)u^LWy?pE!7>5WS_`1>o5k7LRJVtPpg1LfFFY*|;4K1$7>8Hm_s?W{eprfdSb;X( za%)ogkxjp30WAt54s@Y9mUQv_k-zelPtA7zsOmf_4|d_PLtY0a63IeX;94+ZobnQX z91~)`L(M3fF*Fevg2uybn4R%KuW5PCp+X|cYKEJ8eRHQqPl0wcx73#d>*&MKj!;DU z;H4HqPKeK>{H#DT#*^YOFFig}d$Mv^EO*g4TKGSEEoeA3GPiZQdZyL6II0fDOU8R5 zq(v`_<5V`31plE$H^syKS*G!)rQJ$(uh&vggDcI`ONUo$*LM1uTzZ_T?6vw+p+No~ zx>!E`1wa4s9huH2+}IUS_VZ+M$oAe!%{CMT$CvnKB?0r508ZZkxo_1L;&BsNEwWw4 znq+{L>S$foXBJ^FM8WhQSr%yY-SM7aw2h8!2nOKQ*_%Yh^|Eywzxs|$^$ZUW3I;f8 zE~kVKLY&gLKsBsyR{N*THJiW2#!XsI_Jr7SLG_m2_u0JY7SX`e+HfJ*qSoS0^=jY5 zLJ{+p4H&pcgj9&AIg*A#f%_+YT=_*wE=o_%MK1a*O#7mN%9+;uGe?LEo1D=Uy5~$^ z8%QA3wo2qjYThb?S!~GOLm=T|e*Y%uk+a#_10n?wIijc#O_i^Z&DRX=Mlcc({xF*9 z_)(=X61D-&CtW=Lr(^tIcweS=bX8Q(C8yCzDns0*w$gj@zw`&J>`0QIuvj=!Xsv~M zdGGvcsod^SN(_bMp_MhI%2<@j zsZ*aZ0VVm6OV3*pYOPy;g7H7?Ntwc()eQu`xa7t*qB+8cqgQ;)_$>$dB5vyLAYczJl zsp0nZ=*T_sEKl$XWqm^uFz@YZrRJfoP~f__Oy46h-_QQmO!tL- zhzD#~O4QfA)7V2*thmzyDN?9d?)2aW%W_Leu1OB$Xt2OpEH{kT8Q}Ge8Ou#XIq+KQ zv|GaLE}ocQF8XS)@X`@I=~HNucK1t#+`LEpi+ltnH($i>3pvtP+7H7jCd9 zX}LwHNkA9-0XU9<=z4Xw=TB;=cKC*$Tx|nMHd~zkq-(0!1;bFJPNa@PEbU%*zR2qGyL%m^8Az+i%zc@1T(%SWd z#p%h$WH9P8SgC#%T}(gihaZq>o*{g|RE+`L+{UT+7>aSCxH59pkx9KtWo~^+N1tTn z@G4L*5#tT$TvSJ|oe5EDpD~i(=w*K4WjbmwypcgXvAF)Tg%j!NSHCvXeOnv;43rk2 zvWsxV!=fi6jSAh4!+&5eV^S?8?$RLOmnj~Z$CehI4yMB-E-}O4+e8zW1vGhp*HWK? zG-rG~a_#(krMnl>Mj%2m?fAR!7ZT=(52^3@m13rTt2PRT5S$_o+mga)Pq@}7o!i_w zTi+dv_JqcB46rGOn6M){Tzs3wKUDAYcORXpz1Xho??Sjxi-^{aGU@o@fJLWttd**0 z<%?Tk*yVfLrPaPKKNXhfbow;K>M0&9`2IvTak-w5^V)m(o%qRz9_Os(ecRqSoip@xF<1 zO}-jCXrO_JUql9t!Acb|0(}cXZ8NOZ<=>gXN;Dy2_zGDjfuTjmOkC9GkuKKXgyUYe z_DD1k9Y=>L65VGHIL)Vo6i;!zPyLta_*?vbYqs&`(fB~eLNdWtibgr?wy4tw*8*;6?^gWH_7vq0?`~$R&u|7>oJ0X6+oEdo2jWaOq=GP_ejg=p z>QR$w4KZ)f=vA+;80&y6r5@X2hOftP3&q2bEGzm(NnYSWY7+BtYXk)0Lll0@4}{;1 zPi3qxnLuJ}a}2tv-7`!_Q}3qNfKXRS90J8~0T!hS^{UTLJ6Kf5=n{UeJwmcMcAInUq5++HR*$+ zu{(+@4I>}GQ3wH|#{A0ZQ5Fug-ag}V`Qw1jSrp-Rt0?Waf~Ge1&PCQ-v+p_@p)}on zY;@3L(1Fi?&a^(A+@u;R2zon-Pl^Ul+?)ne54v1+U@Ax~g}`uKSJpqYFMDmq`ZLDWsf!~KR-nYBxTo`wU;NkCS zlWDBLMivL}@Ds#K0;!)9T|A#e=Px`X|Mi6E)Hqo#i^n6FH{-mZUEFsMm?)IvK91BmXsBZ&&9_zl5J}X1qUg@n^YN-QSmq9q{V}@}w4igaCz^ zu>U4~)wBaq?y6w+^j!jlI6sx~p#9S5-{il3t)s^ks-aAa^J_~XMb6e*W4?1eC|%sH z#?Dq3xW>zvOUBCc;r2Gd%xgrd9rsB4hfic$$Ih`1B^)oV!SfD7JI(5OyQOVKv?Dtl z&YS09o+V3e&E+EXXeAdM7fN}{zqpdEKPo|ePxwfSFV5wa;2dS{xsef>AlgA;DloCF z2rRh&DC0wR-Zww!KLS1p<0a|BOWeXT;^0}&cI{ZmX?D*&Exw|4^6lU99|1REG1zQ% z#7gQ}IxQ>06h07)>;4uFw5|?inX?Y68%^wh$DIO| zcpd%`{Qi&G+QXfVn(Y50GObbe&^}t1nk4$vIG8EPrz67EuaW^~8(UT7$p15oj<4YN zTe7uxwZa52=$GUA28N$i$J^NPvmtAoN3dz3y<45iMDLe`QC)Vr*ghcoUYD&ssExs( zPcw6S8LpffgGv(jmg15p-Tmxuoj@$&;#|E#X8L z<3{Ii&-nJdaGOM+S$B)h<7K9xWgtrI?3;Y}O*XEEve&^1u;Y^loUyhM3!}qi#jkVz z$QfU34B^54A03w$Jug%HS>q=vrRlCRBtG#WP(G-lejpuLmi8;Kx)A_N(XS~`SRsps z&ydFxv4}Ug(}54+HIQxm5RV7S1Cc#$B~Kq{u_rT~I$|LLu6V*SBMoB7FBHHb_(kUs zs;j0#8~9tTRf9!0+QZDDiyg3TBE7%eMlYHOwKK#%kzL9B^Elx1^1sg1KBBnQEz~Xn zK0;(<0TKkdj8W+qXpTV2a2df#0>YcjxPN!(ubMv5SMh z4v<|4s$0baWN8X9o2mte@XpR4$IGd@ymuQgb504Y^jiA{f>h%`5iD~Z%-lp}qtj}2 z)ij7ideMF4j^bKaJ5?Mo)SKbGwX6bcl9{o4Cp%(ge;MAWPCD~9*}bFL`dhk~)@ zT3$o$4%)?`NzVyde^Jm11ATAK zRIbXw7A&G=0;b62<-IpQM&H{-!H(%OX5iki%E5jten_S2qRmI;pwjG{3$d(LY8zb^2XAg0pe#&S`2HjQHvXMi+EL}8hO#C* zlqjI9gjeKCFHN4X`_ z{joV+$n>BZ)50T76gbFJ+R=E9O-KrVL2ChRT~EGF%opXe(#3S00$q>Jm9BDtBC4nq z+YSZyub|qly(k}#GS>?WRL_zwri;$U-<4^dM+0{#&MUIm(+(ATx>B4%W~x{+mdNK# z37~7(?1bJmW3YX2Y2?y{OA}+0yk=N>L%orCcOtkB3umm`#PW&D_Ivyw{`P>3=dq5` z=P3FTpdte3oew+J7VJwDk`GW8pLU0?NNwc?;O(6hNzbE9TRG6ail{3Te%#X2lt+I3 z4O#B%$`w>|RQucFde}r|Y?Qm9jT)kk$yDE0L|p?cWVBJ95D8W@2*f6%AFWgN z+zuS$ju?IGRT1d+-<9D}gDuoR06M~hbt}aJll?Xe;Z~(dktu2gIfopSd5d44iQgZY zX&j1*urTl`K?sHCp*W}_E}V8n^0p(8Vufr^$z8%TM@O;S+BJHpYuLiZ;R1ZaH(KbM2 zpr5aFIo)NfiE5OvN#bqO)aL2krRwxARAm?82|9{q>zhceZu~#)>pAxKpr$ zlOq(>kHIo?D7}P$0SgN0ZC0NtgBK@bL|a2zysWM~Zzhs#y8aLT_Pv?*$@CQ44V`C3UJ)dQr9`SSUo z^8EV<}_rJRG&1f`)DLn65_!chue`ozY4 zLYdE~KHKe?>kYZ~QXaV2D$Db}0A<(^UT5hHNkv?!L<2*A3v-<~IaF^VekduvV0vg@ z{PFcn?LA`j$d&*L4D=UAPc57(j&|B%9h;<0iy}D@iM#Y^j^C%I+Ny{kLD9|wVw+{= zO5^gyD_hqtjb1SJX2xlXS#VSEL_`4#Rlk383k^d!inj;ai!1#>XhMdV**e4 zX)2DSX)s$I$B{}5;a+>^+WzERt1)xQfY4}4q&6B*KB+kUh=czgI*_Sdoa8@p)ZCrS zr|YZU`HbBI#eQ6a{X@g@hqL|T^uxgLNdKVt%ej%Uv-HE@nRET4;-k~&#?Oe4M$Sy| z4`b)VJ;TG}1LB^^k@0AK04wiU^Kf{dLg5EcwEb&$@#@<}Rq4Ju+$@`Y;s~?Plp^SX z!J&R~h2dOmtb#03k^I>d=Y19fCsdlYDG_h2?of^TN^x~xEsjpfuXL|g21fRm&&>@P zY&&2UmNmy|Ew94;=pT5b8@wgTscslutQUR(KVN-eu6ki~vklKG{E!sGG>y$(&F%Vf z+?T2=de^z0Xw@{1>jYwmpY1Uy2zt;o5du4lGYwL^AN;BL?02nP} zzS4l!JsIIPv%P)k{M1Nef7!wfQ0e_ij&`?3^|P7psK3smo{}%$AtYr6JlB%F0&u7} z1KWAY)0}}SwK(t22+K>$Q-{@R>HNet`de!}XvMP}1tsMf(8W0ZGJd}ERPHz;?^Xo+ z;G_}>V73h?Eha+Hx-S*GM2F23t7&ksyS35oOr9P_=7xrzhY|e&B)3@jQQp;U8@b{q zjl~I+II`9i30wSeDq0J{4h}?@(Q!R&s8z;nZ!l3_Do>udbbVvVWH7s#5OY{+7-AHM z$b3fm96$EaT`Cg*}vM zcFOQzX|mZV4-K^T3|X_fCGkeqUrQH|6h2A+;9{IUfS+GGlrK(*krojvGSkP{i$r`g ze7PNNkItNFZOnQAQ?TkU^EsJ8(~zZCsK4gL2j@&@81B`&*e~I5+QSs+haTVJAyh`Q z9mA0A-<&>u1%~|Og1P^)n?|sv@fxGR=m#v^sNT${@0Txb9Z_#x6wP#~Jto(f_{c-Y zvE_PqZ253$@vu9wZppRDYQ2bcVa(#Ep9fA)3v%Tr5p}Iy z*~RH670WY|#rfH_$>Qkz*y=*;;Er8R)5}Zib32WptA}PZ`k*PaW0h{$*u3*~CSY!L z!t1BM76`E%*KuUI+y|}~Z^;+OW^f>Cfl_71R)fObu0#?!+Cjb0D;C1hsv0)WPu99fYrVBLDVhke~*_(a85?@;Fm6hHmfCvwF@)YB2Z3t!fiafgQ-DUFj&tejp4n$+Qq@`6|^+bHanKW*7cmu_HW| zLciF>8A18}FY`)PWMTJ7y;uHEkcuKB*5Rt)lfM}o!bm+7@J=3~J z*)$UsYW{~acf_Y7jjUNoHrZ^$T~i!R3JZTR`Oe<@#l(3}VU-P&Gpo$?MB>{FVEb*2_)CeNQ9n_pQO z@_?pbwO{C!GQ<{J{BRTWz9L`0_EgvuyF!rMH=|(qB)PI0)*P4?{TLd8A++(5e4o$#e7HjKj)XTj%$-HdOB8zyN0T^ zS@>(EJCcV)$D9rWG+wHp$o%l>x?Jt|3)XZN_*|HAqIymrtmVw7vS76;_J%Geo?->l z$O93QEUUta8&i4p$g`%c)6KaHQyVig2WBY4uxTDJx+zCZ53}U^r+{1IS^47THmT65 z#BI(<`Mm`VP0&w<&fIQEJ3SfSY|LzSF7EDJN5;2i1bBjzd^XYpEnKL6+O@~#j0^2d zL|U(ia@M>)B7#O{0D65tjjhQG1G|k&SNq{Tbf3gchvqkU08d#4qkfkxXCDVHA9zmA zxFD4d^>Rq5j#sL}H5NO>QlLp=r=A=^XS(CF6MIv$XDcu-G+wguxRe46F-)vkX4vbB*= z`9zU+kB2VF4@X)VmKCeBg|(Wd@LnvqYj7n>Uh4N7B(^<5xDLK5XE`)5(`8T^yIK{5 z-taY~DW*9EB@)Ysil5(=vwa)3+W`Vb+bNcyF7Tfd1Y&) zvuZB5SU_EvrnqqWExeu&ydGW3S3Z%h(Lh1=;_6PK>!UIe^gB|~vbHzLO;@z>KUu2{ zT;K0rA6duwyJn+|I1%%P*0NrIr#jdBIPiLK=J`SKLWX_jOh5@@NYOl=&!@arzp!_H zF&NqL1{_3h_F$Z1;BuZg<3M#yOFxyX-%sW499Tw}WEuX@Ly6QBj4xFC)@tkqOHd@#L>!_JZ4G*tZ>@;Tv&2eW& z2u@y`p6hOJk9R{;MR~T~J_M;RHeHP0Bk+6ask!Q>8Q=x4a&r?M)8SgP-OCzu+D)mb zjqi490TMm9{g?A#vDO(GnkdbmJ_~KFD=6z=ky*}f8VI~N{(y0NCjR;h`Np+Swe2o7 z2=g#o^l>Uy!kFqUQRRB&+|cE6z17(_Q`9^vJuSSiVDlO2^`X^#`AoEA-!7uC4^F{6 zhALGVq2yV74b$zn!msqx~QX zTOlx#-2TPUX5F32hcm&%jj8zczCK)OT`Zqm9U2=sFj>zR#O_mXg?m`|QNPdUJtSYg z3lFe7z=d|KZQ{s~1 z6KOu3lqd#Wl2V=YhJCKql8^@SiD$mJi1a?(#5izV2;=o0;8p(Y-GG-i%xsX0 z6jOP=w14&NwKG@hW@3nSEPdB814IQIx8KL#e)QM!#SP)r2n(TVd@$oJ&=fVsEgtzf zt_^#zzFoiAe|~Xu#|)Eo=SQRkApxV4mY#Yo{&smISKMaNotiq6`=S}O&oe@7c5d+e z(D04mB~bgQ-O|KC zrV1N-ys)AqHkZy<7cQUKXl`v>@UXMOLjRJK_zl~y^Bv&BpUpSUa<)-ig891KMCEQL z`H3oI`V$_i6-!3RKM^wpGY8Y1&8;&xh7VF;h|YJI555IB{OP~s%Lh2JOhORL)*6LX ziek%4+sbDnygh<5BKnp$c6KMPoExdOP5+){J*3Kw9EcPabU#hgRNrjrslS1|tbKQ` zcKa+G%&=G6#U;cC9?y8cIzBvoxPN$|bj}<9WxUcP%_ow;T(6Q|J8HV$Pm|rMvj)3|SAK8V6TlU#IK=)TZ zl0V(zDs0j8e)eiulv`PoRB_w za=!U4^EfD!?(lLGg$r-7mtgrRJGNJf|@t{1z^}oxNU*@Zc#$IZ~_@H;~sT_NhAih$m;lvTE zP;a>evW=}MV`PQ8x%Dq=+O+*M#~m?_e+V4!{m@+P9hI3WjX3nVt)oUUZEfNOJtaok zBaWVTrix>HN*nR=nZ1!pYjA9_7EXHj?#C>?`!ewQT)yW$9@;ECRNkl_RG_kEL)}4iUsXhgvJ{J>uY-`?4_q(tP~$59Jzv>6;HN>F9{baN0#F zO2D2XYcisM=j2QjNS^6pd?+vU&eQqIcQ{kEm@}IFx!L*cgU;~i`fR$pcs}f#sd_|E z&_jM{3Ll*)dMPW4{sVqD&fpU?dB z-GqxZ>q-hVdj0F1&EiLEAuGf-$@_PU7P^lE??*o`U;PsSs)v3j!Ol|40PHj^Qz%p{ z9R3u1cbIMeCp#Nrp@L9v8Gl6X!SQO_?!A1ZN{uaYOQq`7Y9(h`TVgFSHdb!Jkykul zt#34`w}MB$_dSPIeRf0y%KaQK#nI@uY`Iq&~C);UZ28+Ck@f z|M{zptFxX(lI$S57?$*>w@5RX`HZ<-%wC26mZcU{>wn`(?FD|w!7iK3% zho=0CAZX=yKBk}ghrB%Bb3xG-Paa*`agZ86D4(l-b1DRGFJyiH!s_h#y>kD8Z=*t! zkL!MxUM7F`L+knS0oEtfK|mciHy;FXw?P?IpoAlSEENz3PmH!FhBk+)Vc zz4~Y?^i^|U|24}G^;;d!x1RGN)!RYrR0AzmxdZ`Dl`W%EVm1}l_*lpDnDRxf?^YV( zz2acHQrQAL^~y%LrTH*VE{+Tyj4e)AP(RPTngKZ1VHq&t^LECG`anPTp1JbXV&$+c zi(Y&^9+T)T9+Kq(6h+!btaEr}xmg|@4oB8no}~u}6bkPZ|HkVN;qvm#`+3C&fymE_ zD6%+4s+Z_f551DF;=V*`{8WFME}mbKgGYWYS9@zQM6M9d1l?q)4|}A78FvX5a+Bz= z*8}Ra_MUv}Xf1{$ZpDp`C=X;&l~93h0hHVrDLUdjc>;4~^V+%b;j!)2fKM~cuk-Qf z7YPhpJg*dg+?dQ)Zo}(=NQQPopjk(Ye4}TQB^Zu%uv{9LJUAP!4R$X1=(hbP#NT&5 zFju;lHY)+z!I8rojf~OvImJ3sVTS&#YatOA8?nN`$+OLwV6}B=X;m3n$#3?-QutP7 zC%sFZuly@;`LoC6ipz4VySa=044XokJDDP}gD{^-XrHiOaNN5iziCxA731^>v$*hh1BluXYV3D&86DKOE=~(Hfw%- zxPBA!%MSpbH+(wReWyXA#V+Y6klT#~$2fO#%9*_q>Ra#rvuXSH9uAy%{bAfF&wcPc z`Qp~0?9ra$X%vj{1F0M&4&k(b^GFlzT$ngNySa8@rs8dO!TVFj;kSXq@8uh3v;wkL zgyUi?*tCyx<)mwika>414vv+mQ977v9Ug299;EKl}ojuN$Ru=Mwed~_lKRQwF)3?hBvlOc zt8MB^<$74d_Lr!TT(Hu)GJ0lY_FS`l$pej4R{S0Dw|S5N;kdX?9LpQU*}UQ5dE+5s zwMDKgw)aOehnwT2)$0p`9=g6eG;wydfBG_~#R3@fYg2KdI`?!jE)>uBz(?ea3&I}a zKr~m0?}!`b_8N_|3k$6qi|Jv`C8#v}ovC!+(~^&mf$lrMmg{<4sy3?VP|}2B%C3~^ zvF`LIJi_2}S2WiKr`t12&53oNryK<1;{71cKkbX&^5lHyU!dUB4M|NY?oFlLu?jca zm6Od%bL?`(Ysh{{P#^O><&)myw{o6;B+%f14EsScMi;86r~~hu1w_R9ox_u>GvUVU zdSlc>zfy!%=W9LO&*w%w-(LmYt$h1}pwiL|3TB5g%6p8;-&iy!*gs7Z`uBIGvDJ}< z&gMjIjeVq!ulC?Veh|7C7phD96Z!h>N^O{d;@1pEzak;XO^8PKeu$G&p7-Ti_=p@>kr)t|(biVe3 z`PLJJ^C)QSU?W#)p-{X9ZbEdJBK;W;)5wW&AG8g0R}W8bUz)mF+3`pWNegPVS$y{A z_}ly5lCK_Bcu>;jv7#rnT^?g9-jNEAU)@~3FgJSobbt5qns>Jw*DYYZ@*d#x{Px|4 zkHsz~cS!1O-QkfGP51`VoFS5{fHR(p`B^R<2UZ{NQTWZm?PV-^Q-vVmtLMLp9_BhSrcx*`X(%`cC)KCn!~3@ z(AK(r1KY6Th~{)yyE?hDabc`{ctj>k{AH=rn%HOl9dLN?RKEO+-L}@zCb0YZd6o#G z$au^%*;1Z;S#`nC-UW#EVrMl)2?7I(PonEL)Hws?C7;MQ-ku1Ys=?`H=|G8xSPT?x zvrFa2(X>hr#6UZ!tb}Jr8zY+@NR+Jb`_njr>;s){s>A$K`PvIa_jE`FVX@hC(w^96 z8IO2~mRKbZ#s^0R<~R1*opK{BBs4phJMXY-9iA)@9hjh*(cTR}KcP!FVH;FE>3 z=f;K)#=F(c{Z%hZa6UfE!5zTi!(Yx_PcAi(LB8a1K_Pw(skfRyOjVmm6`ZZ_qcav+ z=pw3S5_Z9EEF}{wi{oc&&B+_p^cH+H3;gX~R8X5pibbY)zb87v<$qk>y1bjTfMVR|N3lHj#{!RJj8=1~_OL4NwHwyR)mFPB? zrM5I*>ERxITk8z&Uoo?iT_M;;sV2dQ@j(h7nRshJlIRUtc$1#`Oul|0aSYW`HDyG7 zIt;v9Ty0@9FY>glDM;8cX~_GxZL^KJ>CN)h{cxHiXO0|5ir%_t;YRD)JM+!QiH9r7 zCiH-uWJU$a(FfrML#FQa?2SMqB@~H?VnN;kI<|mjGq;CWxKjPPiG1s@mFbKadn6R} z`Fa8j!W_jJ)<(sl?Z^dIAI zJ(kLLKHIgta=5bHs$5x{N)2y~{C$iItrKV7n`>NXISh-V+fAG-Q}Gf}Se}BKugoLS zzQ^h(+AFZK@GDY*VpfeUn#IPA+2%@juUbo~fbw4~`TSk*&D(O8&ln$#IJc}iZ_QV3 zt!n6!i*;XrTE613<(AJgnLqy$_}}k4^OajJc4$E^Db<|LacdQ~wo^7Ezb@vy@!?=# zymn=7X>P%1ijaLw7t>8~RUgf_PXRSLmYrdzJGRd$QoPgc{)vNja5&ybPkc6B<|7g` zaeNQcNp``zeka#`(rRO`K^d&z=K7C}1NoKS z^`Kn&d_Aa&p6qB!v5sOU?pYp2Bw`7P80dUwzrWF63A#&O-UsOg?)%Gld>ViI zw!hDnFGLII(ak2>#Hypsq`xg9>*(gQB~IA4wBoO$ovmtU z2dhV1KUiLvI=pdXd~T25eiw~uOYJ0F`eq1VW%C`cjp(%%Vx!3>`KH-m65Q3E$L{RRPJ8y z5e;gra+^JHZe+lxLRfz=j$}u?Bj5P1OO>EWIpm1_tX7V!m@79q<})5n@!C(9&vk1n zdy`9J?a+qM~7f+9;TbAb6`LKArrB5h6__I&TbsfdPn#D5m!YEUEJ`DG$>9c5cdaTAc zjWa8q<)upp^~OkiTv0SKM7`hSVIa54C3cDG6>{Cm58-e3eQ)0U0-VCm=I+ z0z$84;YxW|-&|xL_w%v>Y_Bvg(yzMIt5>L^xuDzG$QR|?w!5hQeP(5QmNS7ZbNiai zmnj1C$5?n%Uxt4xurI@Yk!fC<-qS>B@g~iv6mh66SkBhl-Abc=n;)jGTG}(mZ{51I zv|evt_m#%ge$ut-z>;siY?5#4NP3q%j840iVVW)PIeN0g}BCOTOn(92XrQRpa^H`1{xQ zT^+ep4MR|{Qx``C9kxah3Wnc`MoTZ9XrqOmY8GBqeE#&XK^{$~D)K+`2NGhv6 zH2h2AM(Z-|gv$j_e+wg@xT=((cD0GAXyKw zi;aju6d#cFyc}RA&beGX&9^ZSMVm=gEm0%^W+STaM+#thpNZFT)F0?~zdiSTZt9JW zO7XBL{6-!1x|}OG^_zi_yij?CXjU$x$^lvLG#SkWn2$A4F_&|OKru$gQye2RO1>Be z>WBEE2j(qbwB+a@5D`Eu*0%sfB2raqFa9xMlkg1`An|#z5fYuEqtQ>i-Q1X1^GmPO zXs}u;Zy^e>64r)fP4BTv*sQdqv<;s;mKkQ}Em(N|9q|0w$-LzXw1$u;1b4RTexnVw z2FZYsp=ifwrB<2=HtY>siLZWwE^e;-DX7W3ZUYZ02^#p^4*+d_MDm4>wbl1kSc2NL z?0kk0Px!CnOd)d{!25z2t+Bs_^4ZI|=h3*{4S0&o{;3MG@~~=_6w}P=9KqEi7{9VJ&M9@IoW_cSM9v10w zXvYM`%n+`rRC|i#u|@^Kp@r#hL+)X zA43dMYsX@7U(Ro?D`^zgt8(uZ!m!s{41QnY+Coi2bj2 zsf2nWFhOCg%%a(+?5;^oBS%W(RDsmOIil*;iN!;Qj+84$mh}G2V}0J0XRXOfsdZ~+ z_ZrW8nUb$RRDLoVw@>_R-gm@W9y-41zDOhHBF(@UBOO)CmOKophLFiz~$Ns#%6Q_9v#2wVg za@^$x+#FTX)*HsELr2gWY;uS@@1(yFkDKAN0%A|I@cUEX_u|LojvurD$fPdSlg zR8N|QphL3|oaMk$=!&|uvw7H%4w<4`D`0W25Q4g0nyg&JpLINpJVt424GU7XfYTQh zz=q;+>EQ9Vg}-0&8+q#)EEqCkup664#%HG6?cs&0rd;GTIy9rfB~m7tiBRNkp@Zr9 z9R7Z4?)n6dTvU)BZFGecj5d&tFC4rp5czg#uPCnrCnRPY5(g@8n=zEMo4H&tQg-@! z259AYd#0c4#9#PC-t)Nj$`}Q-sjoT;)0j^bx6p^ZVdNcD^iETu1D(^_{gp%{p23>n z;6Y-yNBi`2=ybp8V&3CkdoL&5TFXUES87+KQX}UZ351E4r0c8lKM{R2Z@#KvzRt_| zd4vS7Y>@6LBcLF$B+&L@jZDy8@YeYpi@#idiup_Qzp`NdI^Qd$)mW0p&Z`Z9*ZF){ z@t5OWna=;j_rFpwpO>M=YM8-B)}W+Y*rO`#oeVs^h5o_8c#s^uv|zar<_YDAko_yx zvF?SN<2-ZSW$Zw)0A)@Jv27#C_CBQk%k)#fs9!8t9vpP_&3(tUsk&hpYXf_JBmH+Y z_x-f_`X#C=M7F!Ah`e`%_J5*+pq5oD=PYfDKCw$C@24g`_dONg9(RBF2lMY&@o}G* zw;j5O!bxc3(Lz=jHppn5ex`+)jT*twDvrJ!Y5HNkS^)-&ex-_{Iu_B=98<*e@?^IA)7yr;)4}p_C;ookSMs)Nmnzku)$zNb7y})@QtRz2RobF( z{weIDTe4v9=ERpP?jkjL6B{7ZqPdL4VV$bq>NBUcVoMAtFNXZAD1EDf9YSpJ!h<#H zx7tAq8>QIh7bco61=`Ch+$oRZm;XC=+=B*1X<`^sg%FIradMTC z6Yo?5e_60ga?Dc<%8k1zR+y&?6=%CAB5&6m#ZAmq*0GdCfA|Ilf%&<>`H*oj@N$&Spe4sq)XWu{X_05v;!TZHNKmIcd)l%-pSazg)*f-I(%v|y<~l(PJk`J$Zj1{*C8n zs;@g+Jpafg(O#=mNsevhw1aBVFZI0dcgWudbIe?A8?mO?nMp~p##lh2CYOXtp&I=U&?^gSdw4VQB?)%#& z>0|_`raWj!F$M$8;zD1;e4>e-i2o4xJ9nJXptM@=asuh3-Rhuxqgl8^b!ZgWzM>&0$Ep zQrl#Nt->UZ-tm4SPg%U+081nHdO|k-KFBLMt%2;ii z8&j0w@MA$<47L=$E&?LUEj418w1DSP-Z~vDez1I679*vF zu)2}x*d_U;{cdneZez&XC{d@fj-x*O8R+~Zwm6V7kX(lwO2(Wc*%g`Xz_{MRsR^9! z{`I`|s*Temwa~!+ji{_hfyGd;r;y}h34_jZ2SoC&qgaU}a0YkeWCBgp4fSBfyh@g& zy-K7QGR=diuRZI9j|0Dr&lHVc8Ji%8Uxj|erpQRxbO&xG&QhW^(Lj73=CJ)E<7Y?a z$0kZ=r{~YjCZ$WdO-&I?WeJO$+Az9g$<^Nimzmt>CtI#WpaQ%hO9av6omZC zk}b*otP2wJmhm(T%k<%_#JXQibEL&EyL~eIE!=+sxWDa#MeDs4e-Fay zPX)qU0N`k(5!T@ggu##0fqIpST#2Cj(pk8<)9ZgNo?aV2Q9FFoOrY2QGH}NXlKQlC zCb+=@HkAKE2an%>!r$Nh*u2;GD;ojcTd8v~2~6}bVeFl{(Y6{RgQzwaPB-WL+PNjY zsDS%MO!suF<%a@iQmh$XJI~|#cTD#T=pOl--02PwtQ(~nj@CnaB@>Yw_D(k&>!)Vd zZ$1)PYt#hLzMe_#Ka!8Qi`tIXxFA3MJ-?c_p1wI~u1YJ1T4nKGPT8-(9iFlUr!HZl z6PGDHvw|9E)U6J+^hSeLw_RF>OLH^Y0aMCb7)r)US=T6`e($>9X>J`puoWgWf^;^HhbS?F8i`nn1?z~! zkvbcBEx6A;&v{EnR`^mX@lfoh-sp6;t{)oO-rhdYL&{Qj)jt418``dPsv9?4{O()F zj-I--b?L_P$!!)Vng`8@aYTug z_64iJ9l+5`Flv*%22PAOFyOl9_bUGg_49k?S96|k0&FNE#ScO0SPelV3~{yG5!wc( zojp1OtMdw<0c|^v@W*brg&jbwQsXKcq;cXx4EpduIgFTK`-Z93QN4p$QterwpN<i8epFqS3*#EE~&1 zWxr@-T&J$OIj)NJ6Uo)v@{XIZU(1pjXVjd1jZ#Xw1SFPe4numFgailGPoab9qgF1?)x!>{mUl4Rof~Ay2=2i5B+-ZP^wVH7=UDtvJ4x(y6Jap%M9np_0S@!-Xmg<^4@9`IMa_ob~56jyiJ<4D={&iAW`tV zH>p3EzuyHM9-eRBMJkP3hdnHB;Lopg(3Dus6N;3ycjmtG{JzAu8}qe$(%#o$?qt1e zAEOXk@Z8^q>7o41OUH5@U%_fm#X{{bjZj&AxPuWJH;w5T>4RuDXsaCN1Yf6=%T&9vG118B zhhKehNQy4k95T^1n8$O)QSXd}Bh|S${-na>c+{sYz>#%#!d~=itW_**kmb;-_7JMI zOa;Su=ZGnGgM?C5xXU7}WW-+SLTm-#?kLey-R9N?R_ZLCSXkqU?f}B;9JqdezWYy+ zs6jp>|DI+4wTK2T2;MU{o?d2dvB{gLvw+yObf?K=yT zLr4sE+uOqZLUa9+U)v{lZw zj%G-xA(9H?YSUWfRE44NEgsxWSu_gI|yMy~6bGWs{?iha{?UOkDQOv-Nl^ z1C9}*Y(AEY)B%E3wp#c}e{EplPWpO1-#+TPUZDi>@xabm@6+%wa`h2)Y3id06cj;* z#~&3UT9$t9V=#y;sBN@_X=j@mZaQv|;369$tt^B`b}AjLmk95_`lZ6;-2I;Y2(kOh z8?r^z=8&5wCf{}vRe@$yU!HOM9pLu)eEUD@aykur7_l=j3mThLSp$13i4H|_ushG( z9ZC*8qFGnYl3F~@V>RxS+z5YZvy7rNM2)L#36AgClAVdgm?GsTw%Gmd9i|C_n!EWleJY~?b zY)u6EmBA&-2O6!nsUOC*aM+^g03svXeF!74{8k6PUweLG^2qpVYket!5xDuuoXFjh zGPg5CCiHRr4<4tKNBe+$`}65?2fG$~Tn$89ckP;_5+D5p$CAK&eW)j~+R-}jJ;&lR z`5k}#i@Ew+b$Vd@b{jQB>t4jZHq|<;AaZ$oHBoCeWi2Na%5rqa>ybgF)f1BWA;X46 z?#%N^s&iFLP_sfJT^>Kq0kGskDp`?%lC~4_oeunOE>7>KzNoJIlZt#NDzA)PrjY8> z1DHqFGfa{bkV`tAYvJ|d`0msB?(0X=g>^Ya@FJ*V56ltj+clYJ5G;{No|Ziu#3Gd< z!44K^CW^JGZQ>VC4;eCzTHg(LB-hsVm1e>Ns0tkUX=1=xTUeE<1slA_JNR(=M+=)D zk^t)ho6dyY%^EQbDQwYY6HJI?)8qglbV1?s_sSna`{$opD8?T$boeNx$gOi(HI1FA zu1{^FBW3WC{)+=rQdbS}hE^;?QcXMk)&etZIvurElahsQZ>vKSQ|O23-IikM{hWn6 z`JuKZuLkay?Um3sp{|TKao~{6o7lI(46&E@k|CE(gccbPKO4ND{wQ?txS;j;SH7np z{#c&QM3$d9P$Ji=&HxER^pnE^$Y2pdB0?`#DiB)3mo0~h^^%71f^~rO9!Xbq+IUQ= zAMaTXoFATVAD@V?LxvGnI%LA?c5LVvXCT;z0!kNh>$M_%ebT9W-0yiqEXanRi|aPC z9Fu?K$zNBH99x8#__~+!ntqoe>^$u<#M$y}NExeIFdD0g5#M_qk%*)q}itVuM0C2`4f`d7J9E9{7_g{h`%^%aVxCcHNYRO5XS%DedNy}9e%-7mzKIMba3B;ov3Z313mU2lrc2q?`%b)FGLi}Y4{VSS+~u@>1ZlE3#hN7Oo!=$^YKUwy7#HxVP3f=5Eg zvq8|6h^)z#V${U|X)tG_<9TlvD8+L8D&SSgIW8?|KqSgYo^CgFVNmKzd>`{ZXc!he z40lP57FjLB?&XXBgL?meR{W*+pZa{h{@0+9V69G4f}fI9gQOH1blxVGD1tK1_vvSgzw18V_L}wM`jDFT4(jL`Aq9TEyW$;-8cqZ|zd272v)Z5yo+>OxJ19b^9xF zri)TkA$rIz3QKe00hBdIcfoc~7eZ~QNO`nRj@TGh=yndBgkFEg4VgWvbdvVS#L`)b zt@l*WO~;3n{1OhgmU7ik^2KctmfyP2Nyzg~kmyn@HzZ>XCG}4x5*iB(6IGc#02jxX z=^q>{FHZnYd%q)RdD-gF+=U1?)Tl_7uuwBr^s^=zTOGFL!V3PD6uAr1S!pA&(uRfM z2&KDIk{!`a_2$REl&hVA7NV%8xr}oElKjRNrF&!crcxD@)Je+=O94mBcTz7ewtHqeU0hunLftK?&G!>ig}q z2sfQJDb&>QavimT>?llqIG~iSA=4~FeZC7XvW8RRb2xsLar_)`{I-1K;5EuIJVc>D zRP~^JLu54dL?H&u9}R?7TS5}=q@dOn@_6bMYm$&S3age@vLV9Kv9etcsF0+OckzlX$z8QMJESp*{K5;Wxm>3?R$2%%fP` zsX)dYqM6gQJGLw3+!RI{GpAuFu_}vgD#3Nn`&ac}<~z~AOiwoO3%x7|P2^@8!r_OikFF-sU?FSML?b|(p$7PLq^ z(f0BP7nTDa2XDo9FMd#-xSTlza>r56KeX)}Nud0RCHo9Jrj}4}wc(3eImn+;92T_; zHB-h4vQjIb^ls;#_qRke4xQdlD2^Vawaamm>}D*cVkNQu?=6iaN1ee5IwBV zKCSfG;~?+navjftu4&Ypq(0SCNTZ_Yq)8+K*02bGO-r4hW`h9kkac_=>dpem=>D(O zgh40&2+!Mk=W`++2m5>2Ur+tCO1bKDK|eKlI|sLjsQU>k-fe(Di1qh2%5btq#`b&M zzFh)j-<;_BWBLb&PS@|`&sY1=I`@=HCZc3<7YhRyS4{Hp{+|+5#N+N>e12;F{80njHb0necUu8Y>F?{{M^XFT}dt|XNIG|MQPUE=Im9Px%t@hiotUCVj6@6Pa0G3CY0*de^mY03 z&-L0m<1T|ZSwd{5|qd(ZT#9d-jQi@DCO` z=}s*BeINaoXr`yyVWdm@Vk4^R#p(LlT+Dcsq}KC3qW;k7en$S|5X{MVnH|`gapg|j z6+U_*k^S@>e?;;5Z_l+p$(cjenuJ;dW3&z*r{xIM91cS9UrK@#p6hriV(#MWlY11N z5#7y6vK#@)hj{;?_{((D`s0JS?lULo)(v#Wo((NjQf3a(%|=^5Ij!;7(AUO+O2-{O ziM5G1xDFH3P4mk~bKQS+)7`%jt_MU(z1#n_8h(!HNS7ZwknF<}o+wV2>JL5sYkB(N z+_k;Uwk zM<@n^PCA&+WUu^nu6+RAeBNOq*EpUo>c@9rIh%7?^Zs3u{K#IT_3o{?_K`S?O43u6 z24-+f-y1zDgaEHZ2PMd;$D=Q-aLZtGj9X=;MmJ+uYswA1ql&L=k5M0*&sFl&&u9I{ zMQori`4!#Ml84 z95-6y>b3apgSpzlD_Gs0LTASROOA-#j>CFJIw(iiK~Q9*!1PDRAO`F8qd6wEqpE;4;V+>+4=?)W zJm(p?AvsCSHyfy{j%gG-J{F!4U32>nE{~p^ncIpLvuKTCUCs)PLc{vg%UmZ!*FO(? z#Dl#1F7p`Lz@vwn^-aGzBszu+t@!?J!u%Me>ct>+3L9T`?MykWj5C-PdA*XD`f`^V zCNHS2rS0nx4M4Y77Kj$4Z3>gIb)?j?$YM^@Kg5QRZmkAX&^XuL z22-fSzdJE85RkbInm5>LPQ_{`&BUU06&+0X@8R#KJuFYVG?IrY6zIbwz2%;zqhB*< zF6~7aAPn~r+ReRA$v^@D*XA~OpHVy#G~4SAiWmRhT-O~D4rOf2aPJYUJJ6bQZ|J+4 z@G6CtBJipifLK(e-qQOMVlEEm?=a~4hGOUYV@A+ z*VZ7vOMW$=R_iI$N~9dG5lv=C_a8jEAI)q%kNQW_!ThDZ2WQIp>aBLe?@_yh1{TOj ztf3zErDealg)o!FdL!s0;1R(V=#q(?4miXWnRW~c9Ak8z!qRb9eLp1fqOJJa+o+|O z^IFPUMh;_|-m}LA`J2l5jti8o?V!OD>?i1~$~tTzbYfVo*mJ%b7v?!>qQR0U?~QkU zu*HAMH`~ayzK(ELbuhMP$!4Rv*wjkNGF+r2qsb(?E6MRd1AVrRUJ7W!>T8WB%Hu~* z%q>@^hEI*~*r!wD^=0Hq!9YnomMlN#3WD+!=y;Ecl-{Jmm(9@5XpIdM6o*oU@^eckj$7133WYCH!*?EqXsORJ_H|^G8vLZ>O~g<=agb-Ogz04z zy5d$N$#;n6v9u~{uu&X1b$&Bfj`rK~b+X(V^w&&NIU1>Dt1?cJF*=mNOB=Eu#CdPNV|66d8&z0dzs# z+4aitR~+|9^TG@B)t6)lBDBSCpuRueXr!@SL4*4RR1WE(cu31`%_%v>IYG>L{U&Nk zOx%e0$MLz$zn9{>r{@~KBMe)Oo-!FO2z+c4JtN&t&PR8?FdvT#pkI zA|40LcXa6V-`2}j59+J{KT~LO#PS%(u`TXKPfhn`M5w0iWUvlQX|t zXoW_EQuFH$>~3pHl)63ol}F+Vh9MkJmX6*bWXt;lVjd2io?5PPSn|CLdbFu)H^ius zYD7SC|3sd5h#!BM>pr}Ee|ydmU>igwobqWLa*$y%&77qKd%Uh?ZxEfY`NllwiF1`^ zvx5A?w%=UE%6Y%&VTGWXi*@p`uhv%^^(xw1Px-4M0>$yht#$*8So9!*&m3*BTHO}< zUyDxd?e41JtG)1!)*H7i1c#i^|8om>@`pU@-Ff=c&Y_;r>H5|dQf#+T4+F-+I^=<((vewk zYqz%U(?b5vH$Yfkf9Fq^ATK|A=TG9_H=NHc#`${{O7^<}o%}2`lNN2(f+^KRtYY?NFZjE9x3Jf;1)6qgg}PtH@`D zyP`@qs;!OW)RTHPQzq}LmYw7N`W^2;W__RxhIso^SK;nGj^n9C3n1GR4@n2l!-UT# z-kGNz)dxP>yeuavjXbf4=@%?*WfjF7fP51pxuS{@74);em~kNg%5(3_bKFNbP!U$R z&+DyC>OpobW;QqwmMZ9@9lAv&>jI~=ETet~Hqx4yG1(=dA*z{|)|QY!Mp@lT{M0_# z@w9E?Co1{jbrr3%em~dx+5O?BiI5y$y9F(cY$+`UqK1^|vc)ABW3WBiFQ|2C9ust$tgdxaO9TOLQGW4{v|{yBnG7>LPqveyrZ1v!TOSf z!@%RMw-=&sY*O`=T7n{>X6!30a16f3E*D(_xa5?LplAEx$^UZbDTT~K<3SgO^eUP* zTa&vS81c^*c~a7`2iL1Mu%Jsoq%j>^Y)LS%tCSkvEY8i9$KE6Syx`DXs$@ygMk>MeCG-5#$S>I z4XOEy>H0T({k~lLVMgzCs*Wv85ndq7XZRZH6oGD0XU@}7ijA_}*@{bY&%BAjbvbfU z-bHTEAnPj49E$o)FC7fgKxtmk54t9J`W&Hw<$3=t#VHye zIbjICj>J%9_;%An5d8Mt)vlOC{lNzlwGN!*MUz+8D=-*q+Ix8kn z7li~l!s3a~wZJggsuVux)8{{=waDrrY%vgv_d;Jh5dUR5DSqS!o><8IcM6q{=6p00 zr)}v)EOpx5l#(#cGcAH8EfbA;6OpK$Alv>i_AbnT9VJW(vQ$O!O_pB$EO6@O+Lt*V z4^EsC3#Pt7GIc~uXaYe)hIGl{j6ZFiL~$8(u-v>1e?RJQA##H)!w~fiI~2u6`}Q~W zF~gu@ZLQK;51y1cyPPnsVySNvk7K=fJiV)Yoae`Q(Ei@L?kHp)NxY!0HcV!xQ6yQP z4pOQl05KVm1~A0&Vfmj(4oH9GyU!Jki)n-^b=n=&&_sIJVx?|x&|0MHQ=75qb?#kC zq!N!v*ol7u`mW1$A5Wt%3N^GOoL?^b-O`2nSjFtN(_S92jQUg2!SYJ|kUpC0ex8%A zgch3?QCBj)GJ}C?7#sVp;{8e9=wLd&1A6HR1@Q;QZIg<7?<-A z-klEiKYu;OYrb`CBE2IxNmi0$u26&#ulbA&-t9bnc<+^DMdOj|qwgz-Z~9w1xTXJ` zNtBC6@3-jqI6gn6nDI7C)v#ft+1gX`Ci*pl1hY!Gb5Q-EMb9Vjxn2xkqBlE|v z7zabBo-`e-|K5PV4;93ZV7rD|T_uFql9??FKv~-F%4fD&*HhyBc&77>p!4Mg@yYcD zI?pU3#lqYD+75TwjN+{dTK_C!9o#^? zYIU=L&NCKIC11=_GL((6L*P`LiZ04ur-S8}=zDE3zt9I7X6e-j7!QsWbuRYk_*!J<&8?XMNRDxJbqvw{u>_F` z?$_*0LQC=KKDvHgBYi#A<8=(<@Vmg_O~vpt@j^+aCQixX>~WXs=Q`j_&kI3MzWF1O z9l6|XZ#bmk1@MrSoXlW?Q=6+j-8Fa_f9byl&R%d}T4~Eaw~O?6Zgz>t^Rg zE(NErn~_EJ_d+T??;n(%LGgHhc)$Gj7p;7qr8;uJTNMQO(_UwP)iR@End)LEbpi~! zr=pAZPybQT_fmZS7Y{6)J|oo)RHh}#X-P_EmXXOO#c|`V>Ex$8Od!JfZuv3$}V%P?a@WyC^mM86u-Up=)vKX6{ekp zD(mbFv_!O)I{`Z@cmqN25#5({3+NY+2 zaiMr7FW3GlQYTpJg~)!?;+T>HOZ(9xT@q-7N$7(u*|Cx9q%oc3hdBG-!SO#MqDQCO zlmwlmsJOn;u`UF}VkzTEU@hlo@jOIvLGR7AUR*Z6(}HKT(IAC2<;2~|fo%|b9{1U1 zIiU6A(c;&~k-S^MHMU)1{Jc9_ZDW=OvgdKU8}pmuIQ~1=dePbZo{fW5Y+9qAc1I_I zSIki&=%oE*ipOWZQr!8i103J8KIOkBNW{0hq)sH1YHK(_o#%1?8>WxqJbu1-zegmu z&NvR8V3Q}8rMaBXQ1o-YAbf+HA!^hlwDG8uW$wBcPaYWUr76w zFaARQ`NC=PEH`ECdD*d<>9VIaDYn^a>tWjW`|*biPJYeJz9civ-*?AJmkDCqAG9yH zF+lsuxgVyJZH_wK{)qOOcA9#f&rtF^2L95)dH(;1zyJBoxyEHys^qOiAn_yU{8j1-_F^R8re7_;<0fb_UvPKRrH*f1?2XQ`;G1;^t?hTo_f&YRtj9CQ%BE; zc(isA%qI!=gK(IG7tSKxz--gPk@jIed0npK#&|2*kwg^XIsxkp&WL`^#BXNe^tsvD z($h*)=f)@4ctd-fPS_LrUNi~2nV-C`w9>0|I;HV$82TMlm%g?%U*8N+GdpM*sl`U< zM<%#&6PzVq{9Tn9g{VKCm0syR*TS3pATRlkT=g$g&2qbp!st$@=?5u~Y#kYw_9?3F zYju$|Qu(-*5X*K9WU`ykOt67M=D`-KnYD)y0En?T*G08kd@>n26tSAQfGW)yQtx>W zQ+&8r?OVSEa$mV8Pq}}_+~VQ!*#l!^w}^TfaY20yfzfU#lM}`(O{&*U6@|x1)$B!2 zr#i|?HcDsf?QW$}M{k|$_8&fUaPt6emux*wl{n%%D~^qa!4@??meFjg1V`E$3yHV=Ms0l8!kHR0_e1fEel4>cQ?Y@EgdmJstX$rUD@G3_&sb-?-0N z6>@QKfOMns2-3l6f8U zTXrq{NyhK|5YM|$$^R!64&;}cxvDrURUr4JiCVo=5C+-xrg)nEh*hki)pQ9~AXpVE&VzesKIh6$CZO{CIxPo9EFp1c%u#!1R6u-_8w; z&r=m-Eu!5L8WTm+THf?V&k*$Tej4lXKf||Y21hTt)XY+0=>o}Bj}X+xcI&5=KBIW) z!Hr|tHV`w{0(GD&j%edKg7SY-^nXOrO?KSK!1z2HbWt`~BRH?AO5PZ>QN2Gpm_FJ! z9o%|kj!Ir{m#}$K-9Sm>n6Y`$X+8k7aU3=4DVm=q2FB0D024DZB1=fvpy9iMs_>Ik zhnKuD1(2WlJW!4U@=OQw-^b^{t;@=l8ahGr+WQC&A8BCove#bzf{^m0Nd7;e#`jI2 z|IonXq1=H0P{U0@cL4%mJ^*~?d5h^?1igm`M(+x`Iu*G3)^9JQI^J(%dVdMu*9S*0 z^~i#^8vkCgNV}X(NTg8rSL8vf>oR;nrRg??bRb%I2}3a^KX1D% z^_c<^>Ss*Hr_}g<7yf?6VDNzZv9gMm$9tNku>e&k(ag-$@_8fSdYm90{~S;_{ENcj zmH6(356rXw`FXay&zHvhhTn$!e{_Et>nm#Cc5oQ~%vCN0_zxC~ZFFgDmB#8FEJ~@J zkzB2oH+yhW`KUy4$<70&T`sZLaBOzKRq$GaO3t7 z?!W3_P3og|0hjk(3NQBSeFS)Y@xb8lIt+-$HUJ2`(X&3anUa)}i+{;)2VnZ$nr!AA}bzau~lMSvRQ7ZmRC zN@;x~KrYFCILsS0Na9i*t&0dm@o5rGo~cTCmh_FRkDohxetLDW%iXvf(%0vMcZVi? z>k3b{^QkW2k=4QBc@)4MLiu8>Z}8V#Jq%&_tLEW*)yKKYdcB&7VEuG!`|QP=Hdij7 zG_#0ub|9GXsQyvA-ooq6!0Q`cH8{ME0i~JlCOq+{Q4a$D*^gnn*6^#M@!Q@p>R1?3 zZ5(oIPGB!|BNMm_GdG9lWR(sh~>r}9GarX3W^Ea<# z%o001Z5PO~--7o|rhwZ=pF23*P6DL8qiDw1zOFQa-QLo0Y20tx#ZDtLZT?`ma%rPn zo}A^@6b{8j_tfsS3pC=qCdOkNc#Pd$Fdhpb>eaMhQD8HnRTH5XAVJu+i($|R*1L9@ zwFr>0PB%Eb-99{V+P1{{xalsC;eL3$-l4h(*XEk<<b_Sr1`Elso>G9UBut zGk;=Xs(jPMmcKAzDW3lBy9;zYkKz^SV1K|U^z^&F9#MQx(>^@XW5Y0PF)2X1XE!=i-ad`S@XZB2gdda%) zt`It?^b)V1H-Oo%zU%7XLq=YCs~*CFguy)(w6~~88=N(1;x)gtRo$+goGX|6)ZnR4 z=o_=|RCw`vxq{Cx^{)kGl(i z>)E$l6*(F{2wX;5m+F4{NSmDN-Z(tmIXlzpZ^qN_xhrI-&l4St%OBwLmtUP{{B+;) zGEBbX8@qr-#BWZLf1tIVCOVV1o;p~+IJ$hK(Vwm4zI)$Tu|3H+jliC~lxsd$|2UDo zJuTy%rH3gEqt%<%rcO^(#@7>WVfXMFPTaX~d~7*-2W0AgcU>JhBCB|=QuD^HtiOBk?CDq zp7tvj=5K2I=lU{^hV`5Fjf&@S-7OwptH9~!4_zHx$S97Tl4*nM#F>$nagF(6Fdbs`P88NmPCO?A*!I6XQpY^*QyYJzy7zv0csi zJTHbkeJ0nsfc?+^WCTxK+Nd;A9VQo!-#E7%>|Z=K)t_BG9N%&mm;eHg*R!mb{ulK2 z{;#_#a&(C7YN`Pxmb0{fw3EAJe14%@X;s&cF7-FLr9Yu>)NDQed|>$FkG(p0iCB#u z{QDL33h0PD+*U2sIeB(!{@CHx$=>iq+tu$jCJ(u9-#1buUDz9!|MBin@hpe%`Mr1L z8PBp^x#-s_C<(r`mAaN6pBTM)HaL2?(V14NS-&bt5(IHM*s51k!%m`g`kyGeXdn9# zU$|e6^&vj`yD$3q3x4-w?|cJZ=Hs_x3+&DJKKC{EKJU5rKKEDeea`dtBI&aeb}5ay z(y*g&WZ|_LxH+0Visq@8#>Nqp(pqo$DmQqf0VfFh>rxNqrJ%aW5JV4EFzxhUZX0@% z_(})mNzw8Bhi_S<|2`YIyzZ~BVBT)FIz!c=Gi_vo4>hY$n%%AXkVpy{!YaY1t^{c3 zM+}3)IMZ4S!gUaZ%u$gta^3miBPWg?Iey~kp`*u+4bzNd%}RP=?m@H1rpn}v9-=TY zA4Ejr_-pwe?~P$Jw|*mKY)PM)U%?c!`j zBd)+#;u=M0Tq9Vg@Pwdi81&G=^nD#ZU%HYy85w*#jGSh~)XB_d3LAq}x#>f2D+mFo zR0Gs}tydFcS(ateuhkOK%^Ie%Mu-^CI;B>L1R0=`^7JTQT$I^OtCHY(k9FYo_Mf?6V(xV_m%V~=pUEUVQ;Gw zv=Dn}t2hyn6#s0Lcrc0)aDCUr^bl7i7_YaHqo_nsrp(H(u1C^xtu#|h_0-($eHpj9c!js^k5} zE9sMPS$J!rC&f$y+bN4$qDzj1GlmjY&7&+LbkzWOhG_tkGNMove@ z_K%NQ19W6;d<@8qRay{G!nVq6Nq9Qr|Mxt2Tm%i^mADbN5+Q6$1D*|m1UHL zYpiygO7Y7};|l81UY$Z3CK+3u$~v#?5pDAd(XW*#6sE%Bc#8f=Y zu^kzg5*P;@F;-Gp#=uB+>96E@RIir~#_5^({0CQ3KQLq5X5b`7#Y!Ck&Txfl%+)b7 z5z;5TBc`Ca=}vouq@U`3(7`xRzR;^5Fz|6F3Zj&edfgx4QG*XD4Jm|E&J5j?=%c(H zI+#w%Km6mb6yvAL;5SV)CAcd@o4KU`8O9@`Sliwq7Rt#hGnsnd^mJV;-cqq9t+bs z0Xn~SC3!5Dr`K0D0_+~o1|6h5!dY2|izYT_<$RPl#U$1gYjX~$)!Wrpw+UZ~XBO#{ zIPpvf!;LHoZx#_+Knar!tZZTG+OiVY8)4jNf8)agoDY$S5cpKVBptyrNl)Dua>99ayzVD^vwJ1+VVQEWqiwmR*S6f9dFe2PZ1(DCSQkbZV1KA4V^>o*5Jnw8H09Zw%?4|3r16E7=toaq!h zcH!h4<5*KA$(JIg-!Fk+>WDh3fdiTNh>((a9MO8MUC_Ry(l==fryVd!yDUMvu0M__ z^1T0}{^%(`$St7rVnP0Yn@&qxNES!r7=8?+P&j+h;uW`{XvBmfHp@U8`^%UyF&+%;UY?;jI`FfZSp6z)`!SL zS+2r7#J*Rf8Z?^nd&>kAMoY9bHnzg`x^(n zzgR5a6K}Kwe-r0t@==DDcvMfA4wh%~BNP=6p!7HU3=B&~4n?*4*Jm2ctFcj%)N}?X zHO)=^lIhUtDtP`?bY&|WMWHQ_CdGK~af~NA`2ETM@$6#97ds~GVI{OW|7gsrhqHNe zb!H(=2!P+a1&St)4=!lGoaLK+MmtCX`+>4#fy3N9&M#znAo=*aR~BklCmcSy{*mJ~ zaf)dWBrR-Stf#wrw9#(vsGLZsGh!{(*`$MUq4|0KO8T>8tyfnTX6Hwirx)ho^C?&A z_HtEXLO+;hRdks$z2^M&3eup_o~TsrHMcf`7UGqZ<1ju~R|#k;Z{Q+DMhhZr_Jfp0LGx5@bNtrXPS?PLTl>|uBqC4O=B z6+^38F3RYR1_vaso}=$yGE>7!&O_;=ieM-bnOombN=-O1Ysvq8qRZ5#25wk}LJW2_?Ub$Ug0c^}-4%LiV#s-tj2rp?9{IQd;1*VH zv+F`gksG65(r_BBua_23us<<37~0c_{!1O+6eBx)@}%gunJQN^mRudh=fC;JLEzKt zTj?zaU4&iGI{bQgRgrn4%H7e%WTl4k=+jgLkFqNQDnfPEY+@ICMRW`itE77iS>nwB z%M7DejTBxso*bvm^7i$>^E(DGPRFse(uC+Zja~jRP3kU3w^=gCS}YBn>nu5=IM4rh zV)1e|-mRf{9hF>0a27@XqYP@L*0ZDjC8yI)PQ$IQ(P}LC5dAHOX)la5 zD(yDxWw9G9g)ea@K@s=aU^yVa`@al;u35iw5n2x#r8H8S!3MVIOzqSz?o*STcTnzm zpSAe51^S-#+r{$@Zgmm(L*4Hn-sp3-Zl`f1Sm&NG9Ars`x*p-(WzjnVdcSE9{3NF^ z>|w-LPBi?Bl}=z=a}GKZ2q?mm_wuNoJ{>Hl)KB4`2EfO~dJDlU4%Zv~(5DR2dtVDa z(82Fd^V37WRJ{+{yJ)_l&?h$bAjDC!1I9J>?QHVzI;hVo1B#_0%fdcpwYx4i8`2~9Ku8JA)(T!7)lON=Dj)ue;PYAOcC13d2=EqS20 z@+V&?e*Rq!dTkn~q?1O_iL_eUd-T9?shKSOuQOY%0X%Uvq6x^L6IUmpNChC{$)KI; z%h17mpTpvSWM5Aq0c*HECo>351Fhdi4DMr5z zr3eL(8-`QCHdT~7UFi+YB03aFz^&HMave_?MXpmD{eX7^ual5y#2uCJdVit*%Q%x= zbNiL#xo7$RSTkTvE?UIE5!I&NOBTFRNf>AJML3bd`7a#TMt1B^T}glMe&`t@qjD(n z(SSV5Otq|3JlW+~BH}1Fe!15`sGw9+!rs*d4gq0mNpMow!6}J0 za@@v?StTcjta16r`2JHU-h1C=9z$99HY%$XG>Jeeb%6fSs)M#uSo9MjS&^439L_X4 z^(F|1CrI8Ene|T|Mi737ogdtxTL;U?p0zw5>h`Sb(>%cvxc^Z2@i==uJ|8P;9*c0J zo;Og>Bc&-6H%5<_5fob!ZeirypKhV!+sZ~_Y05^JB2VdW)oWf#YhSmO1l#`DkKpT{ zMsdE&6qoz@lb7i=im%v%2-s6W3q59#*Ms#$k0!ch{}LsenG?F&JWwRdfn#Klsg&pG z>1m$P84zumXsx^zRy({3kH!oeh>(1+HSXSv@0PBle^OuLPQ;=BG_nq41@UozJ@oCB zi#}owDo>YZ;Af9XmsF)aOd_NLil~1p9XyVxkMnchR*>BsjUz5pR1$?rEa{PaHczqX zb%>NDNP;TVtWy7F`u+f)hYHsdlr_U%PSK#(BGK{sl$KVCLa~)nWnn&X(xOgclz5Ei zl`XmcOVIn&e=ANuzz;%s=ljv=ueyn*U~Nn*C}v>k1F^{kzj$f1NAB^`ioe=M-33LI zwr?mMD$!)T7}m*=q>l&WY-x_)$soW$THnAswDmp5puJ7S4{#%~3X=E1t08Gt7bW@j zst}4nK{QAXNdfvn3s>q3-1vsVa7DH+0*l*lZcs^Yly<0W1Oa-9CNzbN%h%7)=!@>6 z=4?n+^wssH;bSGNN7u#;jG+_Z1iabfEhJy7t`~63sb>h?n*E3@cxldi`b-wg){Yme%A0nTC3mgQ0&J z`@H)~^lxbyYgpR}VA7(qmc8A^#NiY&DT(%ji1KGydWZ7f_6~+_up5q$@c^D5=z7`a zp1#>T0vx(k*oE*`)6&ciQjlYUq(#iWt3jY+s7H(GB#I^r@ER z-cIwnX!he!be=LKbp5}pA)ZG)JFe(+!1r;3!Z!ebXk>(dpw=FYF1wcjlV+c0kPz>m z=>x0?trZ#aC?E@`;8dmOwcjCn zh2dJSQajCHOL{z16Vkcx0C_*)8|~V5NJMFTAzReR01|F$s^8C}bpjns-#0*xex|6r z3seTy=v%~|8PyOlT)T4Y$)Bw8ro|&i%1Ecu1qRRN2PKuB_gCr0c`0656P3Jm8P3lPv z#(Q5}C!gtF0^QS3E+{Wu5Qlvkc*;=b+etd~pZpcnk7L~_VrkF=j^fH=6iga4fi_b= z;<{1d$ag93K{Wk3->h2(WtI&(;_v-i@eR)xSK!b%zd^D3HWdu0M%m6ZDYKp-jIr#|vgM)FPdF54w+Ecom z#5!G%JkP`+zC=k+a=Orjh?iGU-94t0=8K?EJ6WeQnh}hFAeqXl+?*6N2C}i7AT$Lh z!)E>m$=-;+ME6e?l}~J1JCJjxyI%okEYb`CjkCujVfMZW&42qoS)^U0^EIA(oXep2 zXJaX3Y=)+CH(qy-kxy^6UeV0Q(ld;`QG~bGDRA}{Yg@(8JMqqnbVQ(rS4Xq}=tquh zJwZ7CSZ`4JG6u45JrQ5hkDgG~QjoJ`jTf>X-ZwBkp)3SbOK3tr?5tqWuVRq;M%f64 zmhe0~&WGs!@WAwhq`O}&p(yA>NdPZ(P#y*ytpDGGzi&8PoSvvx5Y&uN@BJm&w-ps$W1I$h|Ku{0919vhU zl zf1s%P9U&^9RnfH(u|z_Zh&?3~mq3IqMH5@1BH^&kxgiCo?mrBdsu;qtCBj#;&Bi1l;tXOXIs@T*S51LSUtc;+(d56mm^|JT( z{uJZ%q5oQtJ~!T$25RX{398u+jgbuCAA!6c;$qw*fqFTX0^Gt9?YPFqy!nsVDb_M5b4Z_ z8(sFBTc``YSZ@R!QY||)odiwy5|KCtPUm?K8z*axpwjW;kyRX_E0*3O|LO04ydZwI zgVlPe>~FTa#Dk4)*hV87OIsO(Bfdb5j3s|NXsj6u+g(#gBv{A#1NHrT2(0Rf&|bN< zhz@F)W~NAM4xQ_6qIc&;eX}d%pEbPpcqv}|&a8+Iiqsuf!lb?a{CmjK>eGwDwT*z1 zMvo%L$I;vn;Eqsmg_tQzBTe);u;+w`Li0+6GR63nMo{!d+;z#n&_$<=T4}GG3YKZ% zVOQIb3GMol#8h*9GxdtDaI(ZZ?~F2PhgW(eA?q3NQ<}M8Dr8Hc0LB#b=!{^7|tRlodWd-t}}+M6oNhkIC|MWpuNG8U)mRY zp-i_;`5OO+S~g;9l?`{-&VjH0*N89;mdQ@@)Zy>oE*QO+NH zU|nhwgrvURh-Vs%ZiB3EaINGaxsKPtwO)B=jA{Ja>$;EQyLZ2EVB>$$uTjro1Wf%8 zK-lRi(GZSbc4us#ZjJxP;qya2H8A;ILS2bQIM~sjvA|ZIE%{PAg9jNLv+$$-Pt$h~ z48JmJ3B!p@TPb-6X5WL{DoKzS6B8vEC%TG*A#xKak|?UT z>I1@gOAg6T{AbS`7=Fm_E6rlB3L99$WiwbDjoo6$d~Uy8A9&to;Ysxi|M3e2;n}U# zgLVVkLhuBPA-x?PJS_mFVp6}cFL)%nPB{UzFQhCvw>7Bf6ZYd8n?s^WHlBzbjz$9& zp_=#`g#y-4o_vTB_2vSKn+Ocs$&y)padoy5*0IHhTH&2~8|80ecjXF-BEY#pB@rU* zGlJHD_2=<_I@nJ@`2X|s3yQ;taMbYEHtCaC?!*pbSo03#Aqz*TY&D({y~ixMyAR*J zb$tMGHy-$HS=AlcdUebxbG8h!y%?dTqz?PjHW=~XyHcs@Ts300B+OdkS4W9tFG;Y`(M&zpLBU6SoeuqOPE;3V7l?#sQZhI5G7mM2-<==ZR8W$B!1Z{~wJM=oMA8S?u50%3a%L zFbpf+uGiGK4Bto&MJZ?cL!v<=a*FKuNTRz{RNPZ4-I`MEi-d%LNb+?qtAc}+mq`cD z7vvv$^&t3KhQEHgQ(9PCv$-k)kK&&VMQALNcfn?s^e9iv?h{3H|71~d%{pIW!t@a> z#W4QOF>-b0aRKavfO`)B9XdZBjnA(f2tPMazHScc9RERiH;Nju8LJIfV=2B1J}R7& z&oW1?m&ki09DZ#e{7t@_&git^TTWh0=e!oO`xYKqke?@#XFF9c z`av@YwJayey>x3lp|*^%FCq`M6v33K%rSWZ3+_L__$&ag=Y8GP#79ilmDv0_g81!9 z)tem?;T~}&q(P>x1mY495$wtJ3@biPBh)kom&YMPEP4;2Jn+x`EqS7O?==s*nt17R zbbm=w=m@Ob;W0o75mRGIOgj1_6cAri|7E$MdE%RjigSuyGizMMlZ1{!9}`F#>6%&= zJ&3d+=6MvqNC(qTdh~Ney166IAz3E}kmu>!{hhzjUh74p18#bMCJ7NR&!w-}Z8}3BQMw8ZVK*{uTW2p`!YW zM|`!$&uq6<-vme^W|*8>BUH954Jch^qD*aZi)?Yx@9x=kg(xoOCkwN~I;hN1*`j`P z6n0xWvn7OMsRI94h7mUGTr@djoV)4?YR*VJ#WugZ4=VxSbp_G?ro!y6Ec#t*r=6&g zs?tD0mkI#KegW2tMBkggR+QgFy{{$KBg_>y-}{koP!i3N42p|*p%0T>_q_d}n-1nP z`3Y|Q)`I*a7sGl3?(&N$qbXg!h~}+VMMcfMDBREqQQE52sWj3;!1U{ta+}36^i-e* z_F}MQSe(Wxg=6I4>P>lSGzcB2Twl!mF$#b6se0Hb?WNL^NFQm6V!Jjv zG-HYe>9x+S!*gTX6AP1@YMk>OSV(TZnL?&X+ye4KrufWA9=^|#i;v;Ek3GE@xuCaP z@*DMaWH{p84hgr4sAo_!=UCNWny9b!juDpUzb4_g7+5hB`prM@Yf7EmRN| zt>}}}gCR|(x-}CXj7JEY9i98qyRdkPJ`pspp8i5Hc}V)p0pID?nqNf~TYF{^I)Z<6 zVwYlplDs^}l9#vOyGQ=SAgI-08P}d(gG)GPB z#v^z&Qq-7rk|R}9hD_Odob3F2o>b6y^*dz0ilH-cTSyHhP-_@Pv7pHjy-wY6k{wQ#vM{9J7Ls?Hh!R?w+k93S?SHthf)F{fdzVmH9-qd7?bYObuPoj8atjUR zL!o$rlp9jdWqEKu82QDXbzedA6y#u{xs|9+90~f`;+e24D~`|~w)FV-gT3GVrK0$WA-RIS@RY2M+$_<`tb?qqQn}k|qY1pdV`5kxlme|T zR#V%k_SGJYZxlS`I={v^c8B?JZGbr11QSE2g4a1vlCE~KD9|4=R6c<24X6DU>VQXs zNqa3hfE;wO`Eeq(dVsypN_`ospDAcQ1#Z347+NqvFCs4#yjb)DN(_Zxs3iJxTT_c9 z%sxrSK);`*R)oT^=MT~&Q-#eR3Hn6yHncuQt#gn`s~3veOT;}JPL6|p(kJJivGJR@ zxb)%SBj}YEV)_zwwk3FJZy?Z#`@lZ`@GWcf73EESV6z}Q0w}=#lpP<-z2?>i3fo&8 zk96!zYiaw$>P=@?7pEf~>$se;T1G?*8jy>Sv@C;y_v_exJP&&B{jY-Ly+MhZSQo5T zI%HBzhmiTSvhDmM6Evz{tQ5~I0^Qmo%QV3F*={L;N2!cfO^A@8evpY_>|ybiRC-Vn z`2QqJFTWArJ>;hf(#txDqzo!pg#~rDfz3Z=;X^_Y^|wP>R0Hc}S`-|6b{&6D7Tw8 z={n`0PGhWJbo|vIi|##S-dvIEz0abX=8x^7{2$m@p}4+=m?|(`(~7~;7gEWo-(uN_ zE>yhNwqNDO<29C?AHnCzJBrc+SR9^4eKK_0La2U7%Zjr}QVgr3flE+cMGbrkSzK7d z`~gdYI{3lf$dX|x?_!C`<^tUhub{YWyhf&=-(m6l2k^OFP#hN0f~X@IB?pua>A@S4 z$@2S{$6Yh)`e+)f1qB~fbnw0b(ec=OiW;xo(AqLENz=B#Qb|kk+3BNNw#W-7PcW{d{I?uP2aaG@qoS#DkL9|=4htk0K#7O{`e@O$9FNTV8Tpt0$l0ub%MX3#T-3yAxx=@tf)!rX?(dr+Kh^UmmQK*-Pq;~dB)JC(GiL9n) zLAD|M`psR2gsGP0{1&~ih9I8oN{8~Eq2!R)FC>R=e_%m=I*l0QRc?tk!=*E2^hrB@ z^5~F`Nrsqei=0%X2*pm$X?b1pQ zU8zwXv|gI^VP5%QC-t+FOs6;ULJWV4pC?9c=0eWFp9 z<_xj>(@bFe-SL=$?453#wnfGeTv1C_s*yDCk1^ld8w#*;{ZfY_FXUGHUJkSLYf%|? z^vgC-vc{A#E#X~u1P8M7O_n}-7(RdCQ3cJz5}#9zUe(8zY04bIzvhCFU2BGQMVh#H zUj!y}@c1G;#$Q{gyu^5Dmav@gWmJ_|az$quxELlzOq@QH0D%w;FGIe(1l<&u_M1iR zn@c%Ro5;%uSXj4f=*huioMA}5DoJY6WFR8}Oze~J+`Ir45`xc^cS8r;p~UaGg6h4F zf^OT7o){8ww7tZ@&38>aXtwOf=8PQ2!%pxJ^Q7XsN#R8O-gq3){?fyXiZg)g7YjqU z&${87jA>c)$zg{I!QD=Eqq2w0x%L5yJg;9$gw)F1Jn}m0H&H?leM>=WqRSyoQ*#ut zhKYk_X8eGP84~8K2aF?tY&yW*$)Vkt+kc;2klWuVBp`+FC&Btx5C&#!8?x z-(6p);=D5M)GipUjdVj(nB^PCDx1E!bWI}VcrQ7VW<~P0lpf*nLU{@^rGoIIAagQ- zU@&hXZ-5GPlU)JNxYC$o4T`yPTAi*FS#gfpH&%m)wyY7{Lam_^@)p~2$*c8g$nucs zwo39sp2^aph2wlu#+%{_zpWs<4h^ho4bkbGy6l9dQ6E#5?Uj*gB>p+ZR9(ypiErkB zQpd}(?F1qaz%)dt-!vVJ$6ny^=z`WaIvyA-PBFvxNdywYBV!lny=fnb4t{@%NBONc z7h`u}=P|@)%^9>h3b(PXf#EY-L3FgkA*}2W{x#xZ*s5PdG7yCcD?YMsMv3mh$EwbJP@@G0?VKO(%tAmNm?T#mH2=7|&Ic~e`i zS$PkvQ?=))S;+OQOn-@8UxntW`xhnG8?=dyte8rx?l;Kubf$&8n4Vy>Tbt@9C_ykA zJ;hMyxAr`a-(Y@IfAyypWlzA=g)aimmMyveI9{pM>Y^vo%|QSYqgzKvLOrl;i|F0m zmn(W@xPn-tn0F&__O7?&n*1=oy;hW5huGb&BNbz0y^CUKA|r^DRS)gGoLY*1j8xTz zeFrt-MYk)IqZzHV>(#cR+)nc}Hj)o%j;*D!k3d;W;!>s00#X-uXnh#dtM-{<%lW_6b@M(h|5gFPtl#B2fNzW`v z(F2q^upSa2bI_xGK{|B0f4QLel}x&|HF>{O$Z5_1K%dz~1j~cexZrgs@%5tx?Ssbj zS*y?Z2N%QRl_&&MTVh(YBvEnEFZ6@WZt(Z-1eaqzKMFWJswh3!s0epI1uIeDHm0&p zNKN1NWJvcx7HH`)U~0`<@fu6r4mAC%qKo6uN#8$aq@eXcKzYd`_;n7OA$8laM(h(g z7~3P|+2*Oa>dGaATMCYh*_W~=q_uMF(gjpmLFk~(&SU%yeE0ZU3$ou-Bs8}3sVgO3 zZpyD*bUWF_FH97NP^$}-ZXXZYSobKM-ftdbTB9beo5p!vhak_dd0SC@ml5GH4rNOI zDeXluJnF`YygjO9VmnMCaj17kher;bojJUp^BXOIXoS!m)9}lfxH!L!^|uEc9#Yh} zPRIjEuh=?A)5p{fhW1HmRA#JNlJyD5UVZ#MgW@;h*^p^Ou7D*3w}hq1MzC!=QFL{E zOfyPGI*4dQ-$!24m>|k;S=(8^MG`bYIp(-cZI{?d<>P$&$kieXOWJla`QaXZVNiNy zWuv#RwAeX-@NIKJq=Smc3F(5gMvu}cnqx{XcbRy;H7N4DFNuFWkLL@DM{7Q=C^>?! z2o5#y4PkwyZDbNAs|`myUKl-iVWhs^IXc5l5y!~al(?Qz*xk(W7SKrt>xtLm@5v7q zQ-1>QjfDVATzJb6B7nVXq(Y0NWTYUp;94B1hcLuxKEbMJ366o;daD{V+-nEx945cd zhp16^7D?7{fCg~gm7B*e$4@-B{2ChShJ=UUVb0U2+U z7$Z0;U8dhoF+oP43v0=aY=^8q-jd(X;=3PuU_t9!l!FHhm0km(qSUhvir?*)kUuFI zll#fAltM+(R3#+6ZEYr>h}NMuF5fh_b$I_|u(niccURj8mDy~;J5UV{boHg4rugC) zi`HhJQIyDx#^|QaAHRyulPOS*nCHa9SihG-63HP! zyN$8Bg8r4@fM{tv8KP4EJR*_K1>vSb*a%b_N1>@2cCdOFs6*1Xgy8fIqTNYzLlotYZL*a>_a1z_Ti6&ozV!3rBoU#!N z*NZq7o~5HaN-+{5Ejv=HG|@sMtar>L9J4v2d1D8@^>($@C86`sc0eePkxZgk?Pk@A zfok#o)#3}SpMPxMfcP?2=~TA54ckwsmXhkn%n?N6WTe@~>Kia$F9*;_2kSSiGB!!> zyYR1}i7sZsNq;r$R^Ychwom4NOFP^cS~PO{7&aJn#t@_rv%MC=ljNYZ1|Uzg@wnq* zOCuJl&KQP<_sfi;-BC(Zpm9cC!nVclF?_z|(SzbQ<+i|OLJ6Lu$hd4;R`7s^-Z5)2 zVhr>+e2`UJa_EU19i5JyN868ExKqEg2S05V9{pOA^PDaOP+hfl@Akh*3ia@A=StA731YCQqr}O=T$5|(E75d`q&A%p2ngC zYd_jTr+NX&sXAi}%LR%yGcTJnvo5+vbPPEOR=}UIexh}Z`LZe8meW;|49z}*T+=aa z;rx1h_pnbE<>$~XJm?RVeC<^IoS1zDP`k}oodI^~A+VNv_~#_Ugc!l9s6)FY@q+(;~`)2E)@h^-YB)E8)`@tG;M2`Y4{J!Rqh+ravZ z1H(6HZTfC?JSTq2n%s9nxDRPHEQvn#MT)fkl7%Drf&QzY{8v+Dk(`DHU_Z4IE+473 zqF;ALbELc8g?T_59ursy^*WSuP#Rf-A0kb}v;Y^U9FvjQ*VuPkji#+A9QknQBG{yr zG!j{Pq{V)c9(j|+r*V9K@u1{go5jrarKPd2Kt~(e*eL(ir+hoianmitcD%#wYI$hW zL`JyzQnAprljr?!i(jYl`Om*Np!sx(%y5ePv?E32z>0q^dSp2j)h9EPV$mOIQ zA(1E~{&A@@57k^yB^z}nv~_1>g-^iGhULL@YaLqwL$j#&f|es@oi~I7>UxoIpQH-* z2r=*Us5mAnY-%&j+}Mb@8qhi8Ac8~F3_@5J9ZO&0TKK;Q_?L@{-=Qk9)a)8*I_wf&LAzPJ=CmjR2to_`jFV}7(%7sw(UraB!kBgv2AYqlWY>w5-8x1~5D=62?5>&GWHI!kjSF>`Yv z_=}2OmS2j$JNh#P#ZA!;Ee0;O-P`RjsML&-f7-H74$k;A=H(dOz|?ALCOCG&a3&2S zk4B`T5ckhgMK|I0gOZfDNahhyy`Enw$_`d^bJcZH*6_52LT6bl*X>s$6^_G;jc{?+ z=>ivtn)4x2kE0f3)Q_0zTF}9KC%@!7ii(@hq~8%Zzau$PRtzXi;JkYUbuoSWAlEM{ zn7=C<*egT8Ok)32*;moehO8R^x69}|Az10QJlUObS@wVLL~H# zLLgJN=&f^(zD*jPxa+9hDoIhbXDG zSy~Q#6q@bShsxCe(N3tDzO|K{_wD)=g!6bobYjReS%o&ds9jAF#)C`!Nz zI_O~goyQC1OMhcgc>sz&>XL&!Yiu{KP&=rFE#EzA9Oq?^ovAMQd12;6?QaC6(ZD(B zdA}gZj@B#R1A0I9F9pTL6TR4_M`R0vE}zk!s-CNq4>yOaM{YR~Y<1h7_{YPJ`&PGe zex1s0MfT=<)q8Tj6TRoVit=OX?`i3;Xv}DDA1$dg@}jwF1MvcWNa;;Mt>Q&}Ag&4> z&R$iQM+oPU@H|R-;DZk;%+B&_L(vF^AH%H|5))}2dcm4gYmhrSSU>zI{=T=Mx?O@! zsvC(RjQ)Y!+WIceb*L0^~ay}=VKYO$=zd|Y+FlQ!F9;w>`_>@`iMAluCV4NrELP~iR{I*$8_%EQhWT)^=R8j6SjIFW{c z?M6G6F@kUWro+MT!ik&P%iND~2bGh&^_8LKdB-jJdnM%WKc0D25qNBpnX7WA<(*RO#HXJ(Op|> z*gLws=%7>73}T#)%cJtjOWeva62#F1aIl7myfqg@R+fXfcf9JTe$7Iz+u6lzA z)A?ZAN&F;Ib!dxcx`iZGz37*AZ${NFwp zTxhae47M@%!M{)2kxn4!EToo^`~Uw^_a<L%BrsJr`X=Ayj7K5nR%;o>FR1^0EJO>)Nw%hGblR#Q3OVm5d}d+=PAyBinz5X zAdC9~$TFa^%y%N<+#3-$Ze~_@M?U8M;B{r*CGYv-#EBDUU4hRQl;X;m9dtC527pp- za?9()CH13*MPevN@gh1Nlr8_Lr}&Z26lGCph4rmKbdsJ3w}Td%B+sKb1j=vNtC&)7 zt&125{aH#LouO7+^GE`Ngp!Duk;Ru5M$WB`4WFqkm^GrUcmv&{V*HB087JC8PwMclLQ*rQ2)nf?1G6?- z2&09ld|}fB)Ckp9#_Zw2p*GSPHYSS?sSe|xzroLXXW=#*$!cbEC`Vu+r&c}vhAx?H z;^et=7go2=EUck$s%FIHqPeaoJJvb<-Qs1g9Ru1plK~^yRExfKQJXp43Dxs!eH(k#$--(0y9A9@4fk?9joXXA9OX^W z!MObe{{Dccz7+bjg#6R!w5G9yOgn!QXpJoe3&Sgo#>jF{Nifoe8XGv;p{7OU&5X)WpHX zXy@#r8Ngwgrqt5hW{FvG;QWS--r?-P=zak-I={ZW53PK;92t}SxPaRIto}3j_NA?! z;2F0+#2SORN(;v9)#X@>cQjsIKi?ReAh(4s6wM$@T>_bLM^fZiugWV=8$M+_6U)y( z1FlQ=_5@dy4M9Us3KO*;m9!+MZ`I^p8oRJR(%dQ(uOLjXm+68T})7K~0{-t`be17~&b8fSaO|J%*l~&T#HYGP?;q@E9 zYy7i*?C<(4!8%QQ+5lNJOW49AmeUQHdCg6rwtTP?Y@OO~t<;tb)Xb_k-KsaaqJ`Tp z0=GBJ_hf#?&B+1aCJJg$qVg1l%DBVzvoCLh=CNetnd02s{Oa=D{F(`^)pV)z;tUL_ z&O9AFe;fa5f)(swV0f|sGVlUZH&~f!qg@~M zw}II|^k#o2i-N*3u;j)`JKqMUEDqZ#Yd!f!FRo9oF6`_ap;n;VC1dAhz79D2@Jo9# z4`HoBjjb#U#JL-w-)UhvR}3l$?LN0(FdKH+n~hF3tL(M&yfyEre*7!%=naldN|M<^ zM{#t8F4t3~!DX6{`9rZ7}U5)q=61dxuI}V>&e8-{LTxcYAbJYZ$(D=)!!?|*Ag^t^RAskhLL zYcoVZSOX@4^$h*kb>U5*I=8Sp1F!f>GqQNn+@W=v+Lkm@ zDm~jw`O)MqjZe10FKY#Mu0R_b6XWO4&7V9OnR3!%(T+M^!NTjc!0SCzJ;5tQuT#rQ zU3IGvTw7YayggPwe`fN6G0CyzNGi<5`;Y9Enz$~P`(}mXH5KPi{f(aXp`Pf;D6?II zvu-imk*(I+B(kJ0Y=dT}HD+jGr?RuL-aI{I0eB+@YVIS$`27>`i(b+@{F-p@E{oD{ z@Qr5_q!2(`7v2PZn+s#R<2#L0XQxdi((R^eFZObw#eb9^xbr`HvYsHNqJd_P2pLC7 z{!$}LJlU)f~p3*SG9ckZilB%^~@yP@}FFwr|pNRB^pmrJEnoy6D+GQ6| z#sJkALQ((nZt*dHqJ#_xn^VLfdrGhiiMB{He$t=Ijr%F1w&VZAoEA*Re7 zg;_00s}PZ{gNqww=8YS%cr(|Ae>u;C$Mr)P*T|b(Ywhkek=)&vU!jm=gq1l}KR%gI zC+}18Z3zL&4eY6rn~st)17eJFq&LvPbdcZMSD#Fj@og{@QsHZAqSV^nLr0Mig+a-P zf@H2#6tJ9#no=)?b3B5^Gu51QK3CAm^s?M}H0T}m)Yp3|+zC(}9CU8NPe2}KScs^x zgmd()YvMta4^cCacIy;kNYy@16iQbDOys-TtzQ&>LK}!@ax0px~KZ!S#vuzwicRllaspYma?Aah_-lMtL-TXFei^wC3Z?1 zVLL*jpthMzpH_U$>n+LS@AOp1B5OP>>DRC2DH}{>NomE{*4-}F)Deb%nvPE>x_KVI z26R8cQ{F;bx}CfyXfkH1=~icfWh^Cav1(cK?j4~2L7wugrpjS`zd?o9o9LGVsa2@L zzD4WnO09w#2Q|0Ck-92YIgID2X-HAUJl5DhK^;v*mH7g9=NHOYrO<*BN&l!Fh>E31 zjzcyGmM{plL*QmYZEZXC32D9wTW5zdoT{l^27} z=Dx*a#`=tSHMvzMRqmWD*+fw!*qkBn!~n($2i8Pbvi@+n=Qu^FfTq^lAmAUXu{u*#NLt!oT3CW)JfK#6Ir*a*( zk*R1me*$R?r;%!01%hGSHi^WT3|F=b6NTOS_-St0H^q-&1n#|;I=W&wJM?wsI(RI{ zz5qIZ!k7F;U{R~SC2C86M%lAV6V__P)ETA(;p*}(gO`TY+)eGH)VSGs@eAVZhpWR}C~ztgD<0j%oMFP*d2SPlwqNBe z=p28FCwngz#<{R2*K8?~76X_j>+VwN#uZHCRQwE$UDUFoR+Z!mZ3WRMh2_CBmaF7u zrQV)y$0fNO#re{~^6~3{-|fEaV)4t-*wWmIq%o-2LiW3zt|PfVeVGGEiIbu1aXlfX zi|Uen=3D&m#q?snI9HgOD$M66F60YK7xJ@fh2{0ExiHl_KQR=HEKf{wc6`PIVoF6P zo+TLYE1?)H{DFu5RQ_+-Qc1`2_GY9gGvLlaKjk&p08d6K0g46j>}FSvo%JL?}6%fk_)@pM^;q zb9j#8ndo3#s9yCGJ=tmGYk_|jk7UN<^ij&2p%hz#9gGPrvD2R*-v3?VzX=_b$8hym zJ&$j(+Sw2&{B zVcD`+*CArf*H_}&@gzYJ>#NLfugA9+KjwLy)+q7mD(C=)T)&q&K`%Poh zXq$~J`%9Rwz8m;{*C#yjmB8p+SSrCr-bZdd6r4bH_gPfP$J9aozvxsZ>n97>e><$@ za}?C`WCJR~(-Gj4NUs#QjR_t)c!44%#Qs!SDYheE#ew{n#I-YgC|)R;IaNcehNM=xor4sP>DK z2tKK}rO+ysqecbhO~+nb7h0D6jwPe@>+t}$-B>-)fzO*?=xM%LZ>Zy=nV+)gkt2T` z&uOgOzVsvPbS277qWNc*c`IOZS5U1JND}*?zL+t&>yCOJaW4e7TB;j7M|j zJn993kRA5tOYf+rR9FRGc&pN8HG^--!i)Uc!Owc)8;wrjm2&7g98Ee7$^xCbO+u!) z&E=w#n%1pxQEQu|Osb%*SW+VCU{j0cqv zIMyl_+S!rzkvQdYhJZJy&$BG~vyyT9h0^0ZY5Z3$Ldd zm+}-s0|l7AU8eavE&2Yh;FF*GOi$*|JiLoF>{vt%c0>lv+k1Q$K^eoI1)7zfBS#|r z!;I7EOwaIR960^+_w5Z~U>8$R8PD3N)mRe?3KMk$e&xRvjox~lV_8s5qb&gH&II^B_{ zcqEH&Qxv5cICV)kL_3B*$rt869zT!q{oFTr@_T4}Y=tOU5SaEJy*-#5bn|>i;)T<> zLoYSh9Hb6yyh=M0l9(S)$GoS5@uU6ZuRr?!#xLH2C&>&FxOV$XeVxWel463|x1Sqh zXIyHxDOpWsLJ4@{I{%Cl?WbP+*!vr&^j1LUwKfPCSdBXwFk?rSY!)<-0}@m z7TRt?RC(5BsGMgMH$w;GK>F5WKJVXd(O#aj!lm^Fm*GOsgIpgvuH)Q>Gm0I2e|-REHfx+@*|x zWJhq{>5Asi1&Xo{{4>Uz4yJb$^nRT$eYFj}mafX`xS~~?#)k9Bsf@~r;y{MzWcwS> zcN*WX{8vx&UA(7+!hMG~ zlBPBIfZN3%zQDrsI`AC-YES%?kOLt?tqpebqF$9XndF4f&c~uMd4LN|Ek`2>DJfJD za}|cNazYf9j!+)q3fdjbMWx-aZSaav@R(<{UrxeUrjarfI~azBo-sImYH)OLdU|qX zbnN8l;Mnx3v58ZYGZTfWkyFFtr^cQ!Ja%$qY%nhNgpv7f3xCRYd#b0tm(+J{n>q~w z{bB&FrK-i{?Z64Yet`r#hC)3>4MFh$nOi9HMp=(DK`HK46aSjw1U1CrkRuR8Lw9Lj z1qn?d!KIGc)MRkhMz-EWBy@N+*e^HGGcrJ~2k2==N5KH12Y2(+`xPVwuz`78?08(R zARwO0eNp@uF{`SsR)Eh-p6Y7N1l!H1j>NK+;yQ+62>+KG-X>N@5YpJQMudc_=(uvO za&n|qDo&jqJ*yT}<5{;m9>sHKvQE*YF}F^lt57|EVy6zo?gFi}@1TR}r+(t^`+y%g zV7xQv9|Qm-^ow9kbOzdq>iK!RR~86!S1t^X)C^kJQ^FF9lbPPpUL0__v5-kA=z&+KTsXcx4)@3I1Cd% zAc0Tx6g#Q~)$+DobSIt>TU$%R)zQE8P@mf#qQE2nnWmiMQ2PMzFv3kU6aT_ZsKvFTv?$qxRWxAle( zMnV5Xcmy*s78Vkj$jNRs8~eyX&E$u|c%e2_-q|j!W`NM{pB{=K%S+M78mD;~&$-=tOqaCV`oc44{2$@R4q?16=pLi-uLm_M zeA10z7(LiuJsfPF+dYduZDNaMJn?qpfnC!72um)!6!f2eS8w?LH0Z~!tQcOtld|y} z+tg;Pww*Z#CJU$bqRqa`(HYdRb={Z|(AUoB6_@mz7F%CSYcXrC#Wo%WC z@-VsW)`M!6L>S+{vO9{t%7bSz^al6iy2Qes7rzT^e)cbWf`eG;Ar{v}dDZnOs${Mb zeZgq??4@XTcgHOi9gpgg{!bD!;9z<9Cj9-Ef6*KINslg)(un_Ojs8}!usFIkdw#s? zo(seJL%O7y=w7aaSX6>kOw1{3l zjx}=F^{`{$VCxH4fWspn)DwMam{i<&u0U}@9oKsP;>61GM$ztS7;mOF4r)7VgL8)) zhv-e_!o&5@W8m==OMm(y;PL1l$qCY%V?1V2)99cQpulE#z#MFrhgZTYmj@R!1V`Ja zca4y}@7x4FBiDN}Z)nD^g$<;suT^t(W=Ik-Ek-_tJ`#D`vZ|fHq zfWc$`uqSkjnO?3V7kyD^mR<0{*vTsk*M_dlmNHfq>ycd{Acj3>%TdZ-edB#S!GR_= z=7luUlC^&c2D*BXtz}P6E{|8EwYh4^t!rjJ@ECa5d_nuL+FN>p2W`V=1K8|^V-Wpw z%h$54wU-yBhc7Q36i$t}v2Z@@7&zGb4&sZ4_QoDXyXWbv*nv~s^ep{i=HReg*%@7) zMFCgWdTKo67jDrnTAbS8NR6SElB0+DDSqDUg$eQG(R zJ|)SD>H1rI{v~hv5ghn=#GhetBN2xWLT$F_lq4mm4Zo(5+sR=bnnPL?T3{Gvg7^nx zC;gx#*v^X}x(BcN$uH7g!=yVM#G_rRhE~HtMslQx)q_7|Fx!cPvx;RWwCyu-G%Tc|GUc;iA#~sKMz?bL*TZ6;2 zq_I}~){@lAxMwY}EE^sI6#Cy;!$gEuKAJ8J;~= z?TfeT>6;mg?xjsGw`K9=!}0km@9;G5$`vZ4(T4;N%CSSa*=3ZTB>@C;{zR*kM+=&U ztN?{FZ{+jJh%Q235j;q7CxRtHG)>qN$=Oqwe3Z%Q%aV zN--D9^$Fnol!tiYD-ohdJ2;wjSuAy-IzByGoowvx$2)!Fz8m4DT<#AnI;k$pYsMdt z`_c^_1Jzn{V0&Prfof+1)$P5Y(mE&)2*ELcfXZF)({v@IbRjf5sUb)WHKTSdk~8GA zit90+qJ(_>q})T){NQ~j(HA|{+qfC@tOnR+99;v6Csu@;0}He$CSy;FSWE;nL#LO+ zy@jh$tZiBt#n0s7HOa@5+@V6YpXbX5hl^U~y?-FSUGW32<5bu4QUAx6yhL#?iVB*c z{WnDoQqa&~{sKh5?c$MZUVJtgUF#9rl0FeMQU6{10L82wHEHVT0h%$IVl7@lq1m8O zHfwuWVQqToAQf%P&uDKSuf6T!GQY>dm+Z#(`qGms@PrYpOW4gE0bEiUpaH|;f!0Il zdqp0V3n<1H)=R0nb%~OZd55{y7(b?lp?HXbQnZrEdd@TEHM$~c)rLxmG+nhq9XJTE zDHOHUYwjbbk~)*@#>3FI4iMF`q=WgK#^KE`^2Fx`*&WA0)6%;d1Shrzry9R+4UIJj zs=SnArz7CXabIzcTPNHe@Y7C%xx z&}PmPKSq%hxl~~lwqNw2-~yH>Le$){mtUT}+HH!7NROBh9W|6(MI$vsA2qhm9N(V) z!FbMQ)_nUH$$s&CrFtC?^OUzeqY(;xCQx$~+e*=W-O{`yL+KYNU`W!UmCZFfkx{RPEmS&Z zCCL~QOS4Jlh0LIttw(zm=lIAWbi8+GBY~}N5za69?w-t3$NTD)8C@=V1J!E|9J#XV*#tnKp+*fhm{ z3r|5?c}lHAqDwk0NSeC#;#eH^cv9cl zAy0j0Exx7&g<8yqRHnvBy>W#TgUs>#jK!y~#^)#ZMo--gLuzI=A^x%Gl4G`U0Fgun zfr3~+T(dZXFv%6hFT^^#@BwlCJl+?Qe82Wpp7w>Bo;;uruJIvjg&hrYL9m@$oXpn8 z&8?Zffs3nO=s&A;e&Z`<_mgRvr);o}Wy!q~3ywNv=_zl+x66Z`@I?;7Hp+l624z|X z$j(JpI?>_4_~c|VnmiL>lRP1Ghi-7wku-`q#eIuslAl&E89#WB`8F{NW}AAx-htaw z-{DE`NM61JZkmaQCt-4LH-slLI0I_a=cCmv0PeAk2RwAn!sp%i?(&*He6HnZU~PmW z2AVw#lGM&*2^mi7)h)#M+Su0~a=2~z@D@4itt#mYvhphdD9ILFK*Z2+Ky1g&xF$jF< zVEvBb${+4)-IRD0_sW@V(bTzkqzSByrBS?gj{GEa@cUE$hM)RnU*o+SqTfd!%-t0< zX&@^E@{4zxu<;8o@f>6~wII(F&&6$o#3Z!Q)8r@#i-M$c?T!g0h&ud=q}z^HdMv&k z{JXF4;}=C_R;ApuHzo1Z-Mf5pXEbcgEM1B{zv>RAx%&u$k4W<3aizGH*Lxb**`U5f zvzI)*7|Xff-~c1K2j8zM<7zv_)Y_r$%VJPDJ+mIE==+34=Lhlmi=Xtvzj$B7GECIb zyoR`Veh2$Q5?yE-ybM=&9s3IOv$42Wa;2*m(jY1TN*{>+VAitS56}IuweC@zD(Jd9}L){K&t zs+q>P@3h8)>M=g!bAI%YSrm$?Ap>Bx9vl+?p>=ZYPDI$CbPAa}CfqjN^koU8$@A23 zpv?pdfi%^WB(F#;o%CNfhQKJy3yoOw78v&=qp{GBs7A>0k`mu-Y66ukeDnDH@1ORB zZwRgyZG;v{&4UYJGOFz$7A_S=EO|Y3l>rOvx(UUbFiAl`Kz20x71ZmHkL!C;t3kgt zgNiZ@13HSn6HTL&5m+KEXRXzQsft4E23Gfwa8ISr%eBS;)vSffr?%h7lBX?Zr>DBQ`s)G5 z8Av(^2q_&>A-NJw>zbZ$ZM;HGK)Hb5Agm26gbj4mI~Sm`-ZgB&0wJm^<%9g%UQ`Mj z18WhA31QPy!TcM*t_E#63;lTt=fW2T_(lT*b8#hul@5`%+=${ljcruNjJc$(6w2jJ zTH`A0+OO)#{IJGMpCW2YCpuTj1P+r2oa1XSGK+^(7OHX`xXCF4(PG=7sBgxnzPcy! zdxku(WP-{Uwj%sDE8f9zofEfP0*O9inhbF_&uSyIslFE-Y?t^4{QZbm_lO_UxN3$^ zokGQvsq3BiI{9+g;7e|&b@P0AmxUkg|3^LbSJZ_NX>o8mE+AX~iokV0C&z=@RP z#O3f1DV+!~54I2vi;O-bHc~N-w0>(~Xc_rf0Cdm~zS4o$n?3bcY=>8h(e&_#F5&Bf z(O755#Q5Vh`Ec<3qdeaq_muBu;jx4uY81_By6b?(XN^HOIZ8hvmwH7IO82Xi^H z+tQ)a`z%j=V>0R0244y>ZfASwNB;WAPuN~WHUd5 zEu5}6ro$4VY&Yj0yn=;Y|0Ge(8HuYQC_f(g>I~-DjeG?$aHOWQygDkm5 z@h5NU%{<;fHol{>|y)@-gBjokh2h|qD82+bj_1NT3^sVzXd<3_jpunaEmrb7}oRJRCcq=t%vr(oimSabWW%dInhh zL;BX;U-aZp(5#~E*B`fJOX^~9JzNFRCW{mvh0RVB4j zq%LX0FWR(82jkeQwwyS2yglVJzi7nQys1M!ZRFttLC_JZN4eb~vt|1-CRv0GR>)g@ zCOlH^yWCo9YYVPES!3+TVXTPl#WUyU*4FmUURo%l@~x)NoYFg;s)P_|vVw`S;*j>$ zeB*uIJAvDyKILh?!K{s*;njmJR4#$RXAN-y$f=5uR5uwNqTGiwG9Y!8l%%Za>d%Z9 zF|)i0!#-{C)Y+N-{E0Q7Qm*hE zlo;u=Z%CzEiMSa_=Y8^@nBL#V=byanoi8@`5R{Gabxt8ZnW9(D2uT;K+A3j+`v<;Q z^*#D)(DB4OJgxttOf~hp0qgD!IZ;;D< zgC(c7@psZ5<(dBiK4Z0te2^hSQ0?D79P~$3rsXN z`bnJ_4s;l6mvx`ZQ6DincwP8Ge14C&`DVT%%{attAR!aFhpI0(U8<7lXr|n}2HJy) zy#S2Il&y;giJQTSf6u!3#J&43OCP9EXof6=NPM&^(nz=}CZsrm7TdRc?Qq_8f#P*3|aCov8$^ySYI zsBP{+6anuQsya1MMuH&Xb`NEN#MCBC+r=Ak2<*CI-ZbWN@-qq<=TF7xz+0Wmv7W?o zjOrHd`0{5aFPMpg=FMagmE6^qEVW0k1Pv-WDuB_KieaKQmwUXLZ)`6kdSC9T@35$; ziUbynyKPQPXv#!FvzU>>kQn_;svIb}kPu?s%?|<>?my0a@Me7b69=C3{yJhCMF}=4 zF4Wi$AvuDETXEFRYmz|Tu0+oi@@UGPqIs-zTiz{X+QJqTpD-R&m*Dwd<7-{h@Q7L{ zcS%`?SlAKfzfYusTdM9fnTgEHv(PG35&pD|_%|{Dtlx*p@ZJL#H}F5ueV&3(c^jYORcn zc{#0gsA5H)B6d-FU?D;aiFy@%3!!>avtEUeK4XUlO{=W6ysA5rrBToL7(o6l>!;bJ zkHmbY^^6YY-|xlWU%Jgd|IUWtKHx6b_QAbavF**U)XY*>Wup)Ey%vy3kxH4j5W5F) z+IYHSFm#Zu4U`*WmH}-Q{co{w{I9@q^Ev+cR+t9Y%B2#O_|2anBOyry#OBJf0(Mrj z!j<&lc6Vjryj-r`F#1ynz zAY!jB$+D?toV1-8Wzg>-+bg!CGr<)!!GQ9Hw5X04nX_9COX_9fNt_AYJr-^+elYx3 zFT@~%i^J%#%{>kDzurlo!nTt9|oV%!Se6d9+b@O5}OC#B6Gs=u*}Y2fQ;`Z9()~ z+dF*?vo_tlM0UHBvMp>VV?+H&2hJb$6`!Zc8;P^Fdoh8MazI>^HGMM2pe;19qQyJw z1b@MA?-2h@=D}<6`8R#psdPNbD0i9Vz<`TfoJ>O@bu5hr?hD5AnAYEK?!o(~7F*f@}t7mDFQGbHP3ej2q@ zED$6y?Qcnsv4qathx8Su&J~s?r(<>=O(7>4`HwAr{vY`KyPxr|PslP9qB289txDxX zh6{>!PexsAJ86~&aERUMT*2d zII)^&|AHa{vr*#!)tTaXw^(ij`C0Lhfu%A!s-QTQ{AieV470Lj+L3RN*dSmfY3#{v zPO*S)V_PTSsopXjj62ow{x81l>#Z8D6v4rEYMoRUbZyrx>0n5 zb=V}vhF5m+3$&ROzoBG1eg|K{c!`)Wo@T5x3KWcovnGrV%DNWzF-v!U(hXL1b?9n`?l=OATGWZ9U!VGMU zYr4mGrVYN9(c6Wu&aoCV3kL5D`AaN*{V{xg#m7A9dpb9OU#UkF5^WG=iw#-^uEsUD z23N~9uHl-jG_&E(PFPD8vtocnbgosR`W6c~S4Z6He1qbJv7?VMs18RAE9HhC4<3;q<6zYnHKeA9Kype=DK|jhY>6tJg&fhrb0rfA}xG;Y(7M z&ebs!I-ubgnB+z%UIOcxKP__Var{69rk~Rcba&CQ8}SHcXN!S$t?53WPW|)Hv{d zo8m*C^gwU>f@C!wi1D-daX>OytYkt^n~I#CUX(pZq-nWh1yB^kty?LB3~PASduhmN zBHO7%0>d*FuB3;ZeejnVuCYRPvyhJ5dPw7UlYGj0E%PbqU(fRu*Qw9;C*pIQsz%_4jH)+1}ZA$qe|xYEA=f1T?EuEzR&(aiXA z$X0Fhej~VQiRxzQrSbM4i*o+c^&o%e>9M{$$FY~AYV@c(IIhgXiS0p(SnWNDbGc9J z_o=)F@(a8-*9&}A2W#0oqkBNJ*P~2!l*>$eAihcQ8RM{u&$WksIpA=nhB9+yvJ6p3 zEy~uQc`-gTP>M7{eoJCT&qgM5rFJ9J_7|nN%RNHj#p}q|JTRC0i=M2@o%m)sx*{D+ zYp|enhfn4lbK_(Df`te3&&z?&+Lr|$#?HGtJTjL|Hy*|>C_Hi&e^9;TpL)QT!+csr z^cR(D>kf)cjVuca`S9G=TJ+QY|9M{)a@DzG?+y%9@o=kBZZMp`r1;~c!iVR}@8k13 zJ@vgcR&qOXTIi_yCW&%YCQ<#pf&%7k59$Vvv16iP|BB*|A5n6L{STCn zJpCx2>yj>83bmuAXjU;BW%Q{quCOg+wk5?DyQBfaXIalluh=Acb&<}7XdA;PW_lP5 zj~g+aR?Xg!oLbhSGOHUhFoRh;Ioi~?(7uii9+%(6=ZE=TCe~#+p%MK%Qs2R6zcm3{I-NiThF;1Ym+|K#xsLL zfIaKqJRW2x`Yx~jHhnzWT4pTCtP4mZkmi^k-nPFfAxp~HqL2Y`Yr?OD&ky;^|4qrk zw(qK!x6PQ6k}KLiC2dyKCjQA>&7z;;w8BsJYMr(nd=6#Cyrj*-DJ6eAiEZ68lfAl} z#HMPQF&>?j$GijY_rIW5>xl_w*9>OfcH?6p7opVhgV`>f01#x)weX=naD%?;X{6?( zC|`(>W;D06rIU!g(9U;{Lc8U}O3T&&>T)?TBMI9sAqmLXce$%V^Q<~?Bzz)SkR3T$lCOG#Qup6-0ygPujE3EY}XQy zKQZa=cBf|C)mHx)&s8kGr}&Ns_e|axff3H}HLkdEUe_5sJH9qs?%X2nBdI6N{6u)K z_Ds$gXm%}YjJs}p3^L>mh9lNK(s>&cm%P(6d1H7co&0EAVaOYUt!|mTc{%8B^-SIv z)OF1t#$9dY&1miuQk=%}l>EHS9*!^javeJzcJvyfYA7i;FsgQ4OrrO4564r{+wIa3 zV<0E1=3dlxttd;ItAY+XSdNk2`a53p2XsA^wlD};Kih&8$2m>)3))C5%K>7jl7udwhYKKhRz@0Fdv>6y2Hza{29Luu>MGQdfODiOnW3UnQ}?IcoL zoZ9T#aw)k+@f+XUvw7}(^{(Z&^X|5Cd^l&JNTXhSJ2aKeeh&a0q!-j{mKx76jK6$Wd~OlhUGu4y9`ElXZI`$=}*O13WTZ4XZa zahoM4X&icI-?K1224~))oT3aJ8^fgO*o4!*g%jlgy}D<5m@^{B=2}hTFdSrQEiA=r z76;pwkL;x?RtUP<@X3kgBt`qLeJI*=PP#2ozA=4t`9@0K9v+#^~XKq zuOzm~W-4JuPEH%TzS(sp&1UViHy&xSm(#&|G12|}o{e)tSl5G_+|qtT)jIb;OKxo9 z^HJ}{)sE6~53hZdG0KL?|HcLxWBPYA$T)bM35Scl8)uus?uXmHv+bylrR;;h4VwR| zm*WjJ2Q_V6or1EZxF!DEDKK_9RBZuGtt#>2kiAbFXzKxz>jeTDHKMGQ`R@f+C4BWo ze13wbdSi0|(w%22K@~M(BBXngemoT&pgMaM6^%s(3H30r=9olCG#Wu^R2j^oB%|>_ z6%3d0P(@~r>rU}JqW+AJKksKBAzlx)k}74CGrl{&fC?miD6Uy8qYuwIl_a2oA{MoB z$n1;Q&6Iv38w$`+49?26=&*EzmeEKcC^hau04rioP(@YTwoq47&sE0XP<)aIRx;53#cVd8m8Wsy-ntW=7w z4osnlYAL^j94Ic;&A97w#28R;NSlF{oY9HwSPwiUIsON%aUyy8V+B8U9D^9<_x7k- z+@FX*eO#gg5vZBpC>HYTr$JJs9&~;x=DCLgM|%Gjv3&ty;d?eR-?+% zm2&N<60=ygoc@$#yI60eJkqCl(x;R>9vTDuo8{(S9&wfQZ-lx=U_*N#G>Po=dboOi z#6O`})A2Ks;Ey`!UiYLg$1jyZciI^e-_eE)srMKl=w4-Vis1O5{3jk?ieFyvRL5`* zaZ(X#_tZcql#ODrT`%vTp^H7R96A+Wz*CCqCZ_eWn9 zQll@wQEQ-9jFT*RDv=r$+>zSS;2p24_hvay^||}si(H} zV`u#8Hp}$*9;T%$ai05gMHlPOzktt=@YEl2E{e9WR?)6O^lm*AeVZU+!9{4NQs1{m zNN&UEu9moqDNCNCh{x_O^(;l#hb;OAF`pjei{H>o4qY_v5cEu7YVDMvu%N0cx=ICm z`Gp|Wo5~>*cq`<37LRrEyxfPZ^>_-OzxGw0_)_fcusTLppfF1^k+WLO&(}~RfHpt0 zP_Ngc)>cORr8+0&M@%X082PFAS19Jzb7Per58vGrS4@SJGh2*ynw2AC`E~jfSXob2 z-L=WWK)P>Np@KzS6rT(S&Chy6s#E5~tK*8#efn7LkiP$|U+pJV6>O)18Ep6PWt@(!u>u$^Lz1(-)t&P+V|jN3hvixk26K&>+&1PO&g9 zOt)r&wTaoO?ZcRE=L48-GHDcQfWGl`uyZraedSfMOGw-FvDQimf1})mm__M4xaCC zz~67H`NWA9-(vZynB}KC&+;>2>*~nt@a)#bCB^L$ZuJ<3wA;D;SwU?=?=|qrYleN% zyNp(wV&|(0D|btD*t%8;E^LmS-HT$P?Pnd2a^BDIINt{xKKe_(=-woaLFnXJLhNes z(%_ZBU}LGwy`AS#kAm-F+R*P2wuTb;g-i||g%@a|d?Y&V4>~Vunbonh_C)9jOTLjm ze01K=`ZSM@T9d6UYQ{OaM`hwT9mb{tyJ4w~ zk#ge@4r2G4x?hozd$byN=I{68#K)fPX&&$7=T#|-l^T2waJ}qO%LZ7s(Yl??fnCV& zsmes-%7sgVt7ELKzyzKBSf2Ua%JcVGdf`b=^q~!7;}HG5@oMLS%3e^Z*cJiZ z-d%t%qq+sYfQM)bJ7zV}i&QcTN;o)Kb5p1B4!2Mvgfx`gZK%RZ&nL8JTCYlHP%k}12<}R>j z87=pe-Upa-&$9T3`n%lb$=6+ftBwl5Bp|)AGUMNB?licik{cBMwkqb^@0k2`z0B^ zLBN-z`9=rNzrVrX?|P#jfA4}Y9u|NG;WZnPHbgaqj`FkRdL@6N0tE9r^{9%~7fqYV z{PC^%!pdTb*<`UPJdW31Ja__Lgp{FCpOh$mrlCtWo6)3VUAlpni{TuJ8G8~*aP|BN zkWy>jCE(3H)xw$lj(_uLKl2u}?bT7!8)g=;T;XynsAQRI`DDUD@vRD5z9N5OBC5f7 zu}*G@{5d#uFhFu=)%ch zql8kO_mtBr*8xnh%9zC`wEq9WQ+mNC6QcY(`SWS(DXXO0@+_WsjGtl>SQk~lf@5)s z5&DIIZUMFHJ>(o48XwCl-;?{2oMy2cBRkJ~J^As>`31R81}%l#Dh%=#Y9=FS+`_?b zh7U_A2-nsa`!DJb!2%{J1B7p7w5#FX{Jk1ixvwWRv5t-kaEgrY{hY zIG(HG11KN=mAx6~2+9c@64FWyPn|u?f_oS3s|>}^@ML#8{A}eC5fW_Y;Blt<&(H16 zINOxz!z`z6ns^sCYkqC+>S)XWF}_bya*)UQJ^1$QVK3H$;ywz@VnP=V1E~H|8d4rX zp0>Z(3XpVM4iCkqS6eb%lnRbG#`Dx_YM`Od04QvByaL7Ny|E|!uhU_(zBZ)B)~8z* zm+Yhef-c*LA=qER{O~4x_wzmB2aG)w9%1a5sMDV(!mBhW&AapokU9L>w|5$CguHZb`?JM3_6Vj0D_KUX}b2Di7c!O^Lj5Y9mN)B)xRMHFI`c2;TA*&j!i41FT zdL3BF!F*^Cc z^-1U!4_)qeT5&a`$Sm2Rvyt`&PHB7W1v=ixGe6Nf^o%Fnzw*cyq1p=76`J{p92;X7JpHk*R`I@>via8_eRyNvgrTHz1xLL6|QGWDi{rNL9m@$oD{tU6E-p= zu`aUX`qkRAyWIVYQT#Qjtk~>pW^&Zk9p#=auo?Z5!72) zG=tLJ`K_RoUkvNfk&N82R(|FczDuF7h+tq5=t6LF)nKxBqIxwGZv_?>~@JW{z}_7oxcX!uve9&R3)FW9t`%^AD603mLv*j2+a978L<&B<_#Aio?` z;nC3OwTgph;nf}IItCy$a#A(ulEN-{oaD?o$2fh#Q{9Lg8K=&y-z^?pkFjGYvc}e8 z2bC2@q36G1;Y#+oXL+g*qvN`A5Y~ex5(`dH_6;TjI!z*YijxNHjXct`=jm$sGf9R}?Nc^u=bczjr(gqlYdUN6J_ zVnElK26Py@T&(r|nR_ae084gl`f$hnyW-zf8x;Me;u$rf>;maYeLQW;AyA3Uayu6O zw2yo1v~T>)y_hiquKmz);cl}9NGYvSi8f!TYxG?&>)Ju)a{tZ3nbz%XPko_c#u{k9 zlo+`4s@+*JOH32TW&PMj5x=2g{r2w}565ta$rltjypGWQ51Ky^)w##y8_Eug)gsfKZEbScFvm~P)59LtyD+417fEU`atPjDDWV% zeJBUbUe-jI;Ph2&QbZ3=zFQWL;Bp*5D}JuxNV(=|o9`hbB^s_06`G>oDkZq~y6v=f_Yzd46#dvv| zsRy-fbd@V^Lv2R!ha)8+(qp3D#5pKBlMfG?W;dy+Xi7>JJ#r9+2Vs8B(rVGe*%}9m z^BKIy6F*1D1E5N_A`=6nu!!;n6vzh$R+!o`D~5~jQ9uq4BC&rG>6@+k5vBs=b)eD= zVGtu3-$H8v^-!dA$XdAtD{Ndeg(K_i7*XXEm!|P11O-_KX=sG4 ze90ZjUfhFp%-^}3zi=mVCoDqaB}ObQNBL>|1~3~~kG77m(4fwVVJb8QnRZcPOqoJD zK^6HL`>o4;>{TRL*dXPWdkP-n!kE%nEMes;?YmisjvKd*< zR_mH%lJ3>igVbt{1-S(`azJTfG@U6Q1E~qyC|7qbs`Tea?m=D$@p(`SGUo&OXCd*U zf}8+o11Pbj<2G#N0vZ||29jSVnH3`aV`6ER7xR;CvY&Ig$l~AEV;tTy>rc)k;{aP# z1MA)@3OgZ+lFA_1d1Z1e9M@%!2dOkkjkyI4Ahl>JsT&I;{SqB_BNEq24bh&Oz`lkM z(1r<8PuqN8oUPx7`guJ@=h}elqdy?xMzBK!D2#1G0$kY7L zNU#HZwNqU}lo@hok?3Na6e=RLs~bk*`tQs)lu!2{PwRx4u?tw1L&^g!>>_E|o=JiL z?Yxqwuo6s#+Ym>Hlv6;MPgUZQ%tGR@_rqkr@l~Jt46IaCLm3f$RA^}dIq~_adUSAr zN zG=7|Q&GAedH6cg#4?38?$^QQZU;JH06*IB`^yNjp3@DL#^x8gbEv?@@t)Ft^z>0r7jF6VAfcC0fAT`=RoaBJ%Uk{ER^g90@p-)QkM<Ku{7!10vQWGIwl(&2m5J7`H)BeaMXwu*NN|NElZ;2)qSjd#i^=F4sCkSlmPL zIPL4Uar`9fIW&*{8kLRTG!o;BE~Zf%ujUS^j|@RpG+(|Bt~(ySMd#kF1SOx0q?u{stJ#M8uR186ZlDV8W)2)<4K)E!LkX?(y+o z@>4%=5e5ZolF2tgttR-+>QqKWzV1v5aSTBvkvqZE`tF%i^XDfN@12}x@+cBc+}uX0*iL_| z3oH0TgskKT>6jRrmVZpo$Ulb1hX=(s!;=%k;*ask(e?(a95xDJKWg@g58kT9@#Mqzga&j)mJF0JjJA`I?8dePlSH{kL8a-hxY# z!xi2Y6V4rN)v*b})QjNbO6mS`HYY|Y5>O(CZvtJKV6cFr2j#r?U{-{=V}fE?YP(H* zB}#hVwz?OEwer>5FckGVikea18Em?dqqSF)oo6=y0%Ae^HQW>A)fsd)y_8q851W`lzi;euo8K>8H5j{Q?T%CuK>=AS@|Gyo7Km0|# z7{^%zAJy_32dGAhmRM0fL|?2_Fp`L?Lxtv669IV0ds`}(YNC&dJ#;#brrT?Ae)-J& za(=b2))_9zM9w#hp=@im$Wc5U9gHX0F&^isZl5;Lkl08X!R9hQoe`X9Ooc>fC#)h7 z)iyWMU?Cw%9xkXut!ecy(C~(s9`3_*yR&Gkff(p#2UVJl<4a;RiqNYn_a_5`4Xh zd_Q(hB3;kcM;y{JB^$*4(0+~}C&zsdnXaz`U-t87N420*Zo2p8j_Z=K)E=q8IETV7=-!41W(1tWvN$apM{)$M5NKi#qOX1KefsH4 zD#)+I+vSM>jdxD37^0J zDo^`$S?NdemAzlr&t+hj+N*bsl?h7ceL8T|gsip^&P4Jx3P_mxxOI3 z8b${QR7QX+RtWO$!M{_eK|`uqE3UCsTAC@WsOeXX>ew?-OZVgnv|~%{B6RR9_m>2T zw!KNf75N7G%l$z$u@*ob*ntmV7A3ro?#>tYk7$KZpB92@uvdYv0h^H8R!D85Rzup4 z6t@vk6ruxREJG5qm1Ip`T#?S}Iy#VNZ0+oE`T?vD+yCZCjz(w^g$Q1;@@5a!Ja|`}(HJ`Z8(f@~W`o$0U8YgPgd}n?I(RVOCPf(%cDKxmXCQ`h6 zzEIg(yRukaU0d2$R4zvDConvd0JIb$Pzg#g`nIA{Iv9Knjk~CUSXcG-uY-O%7>|bm zpTC^(B&VZRxnb*}G4+QRuHL&bbarw0@uCK@5H}sT0oP|1JWwi4e zwTZ{hAbAX#F8K>kKG6MKmu!Y|$T2|zi$ta8+o!-R_3{>y1Yy~a6@m$v`=^f3FEoKU zp-YKIo3@T};4c*)alah0U;gt+Kl%<(glTFiM6@CPu-GUjvl#7`FVwHDukB-P5L40f$Wv6Y?NLmCyjP)$VT)V$ModD<@}({3pQh)6{> zEIpF-%(rJ1V=%F(+aArATl_}-=brLOUvjM;VRL&D%(jFIjt!`4(AO4%T?8Q8KpR3$ z-lnjI=eC4xFBo-&qOseWCG4saF1y6aHe8z_)J52tOCl&i`a%mOEC7qxi`7DO{S9lE z0_0H0FYZQ?U=;-&mSFRw4yXt^u2i;z>1+^%V&ajP02sJlxMGRLRtFyZ7+oP%|kY#Kvsz+Jmz z0tIAS6=S_IvQM~m%#7n3IUc+Vt(pw?I60@Zp(7>qxkOSp7xOl>)qblimv7npVF5f z$rt*U`gMF*2yEGf^?8G|8sWuAV-x8QO7)Q!? zeuF3bgN6xkTx~Vnt!U_k0m!ke4%&~zGYDSJ-xE}tbUyW}pZ%rw3QVVFb&%X5h>Vxn zn7=H#Q(JYp838R+--HhKThKV}Kit>6kKfPoTFeAZ81RsJ4>8z>r3D{g=dHj1krV?X zy}%ta9NQ7J$7F3PC2Gkp2;%V{vLDgGIFKB8iKjjZ+PGRcXlD`$(G>>hohS=!Xpd-* zfs!+V>Rj$K>R+ax=I_-<_L>j0muHUGsBh2l89c5_L`O%6MT`H}@%h31_Z!{ohY0W! zoi)jLJ`DLA8IwRlAS~_SI%N#Qt|zKV{h zNP~h-$Gd;QLEOiX`RK#=_7R@)Gc|6>nny97izs?7T2^WNlr2#Z8D`BU1J;yPM-B`B z1_AMQi?2wYeCQee`Kq0EfMCN|06WEt&H(4iO`*USVW|LgXInr7Jwr{*4EE7yno}G} z&Y^9s`A~$U!QygI51Z&bMqN*#&&98*^B>eiF3}iUnk4i}n92LLPUBlM!^miG1y>gCDolUuu~(H@GvfkrvN`hDKry! zCIv2F?V-@i{QUg9wEv@EoG@3+!~PawaZ#$3Fzv_d%~aT^B1%Oz0Ukgs4y<*m;#@X6 zSwbg%p~P}|u3Sg5)Lr@tPx6P~6!_1;VGO?*sR)GLV$`y|#&QrG z*L67(I^Mcyv3hM7B8*>fh=^!X zT@}(-L}Zt~T1hH|&{a~MuQDiBPcc&;6ZPiyMpipzK%;GAyTL<;PxD%fI>=e(fCM%<37tSa!kQ<44xHZj+6%yXEPP-PSC;jM6t9 zrhYSf69C%T4$kp~wD12NPjRtJ&{LvAg!u;B>0p~!HCehme>%8wI5T`Up-I1w=Z}dI zm~A~eC~s#GOY!Y=upWN~pKtrO2Y9Jhv;@OIrGgrxc&TYJ6`-wMtyImZL~LBa#Kn(L zlRo(@Sw?&|#6!F7A-@l=8ROZmwOfc5^6$nyQQJ#DP>sB6_c6)(@%t3jreki#+}gFf ztoS}-Zl?&9c%T+p0UI0mygI@o{Q0~~1e z+NfbvcPU-m5_tOSC!1?3Bt3va(uk-*=A6DT$fZVz9{F{er`#gcd>jYWipW?hP=#nv$he4X-tHi=}zb-(o`QCZ5@h5xn!r@t1P~vxb9EiHII7rk_q%mnfd2;AwI3;OU7|BlOMi(C8q?+N4n6B@sTET<%d8 ze?JhP*Z5KP29?KLM-JmVh<{tWyLz8Y&an^1yiG6w&$_`ANzantq zIK7vQJZFc#_yYbv_GQ2)>tLo5T7VRGpi$K*81V#5ma={=e}#G94Nmd;>Bh-riRtFY z1$?=$viOSpPFFqk<7b)-LAI)7Jdvet_wk$eDjZnfyok?#_|Kl?Y`vdydRsf>cshevW~|QkfD7eV zoilaE_-4fh%VmT}=hs_koWiP9a*4q>x;2wskkb|Pgs4Zzv(VCx=a+X8M~z7FM5QS7 zqr7arxrg#$*!|!WWiK>fHi}p8%#sgcY85Pess8%YJ>}yg$B4rJHV(l0cuOa=eA2`g zH!4&~h#-?uWn;z2(gm5AvTsET>(M}!jZb1`rad>+=AD4?EvO=?K-vWcvs=mu9PN5f ze}`{>(wBUq!sMs{JQb0pfMSHD&0vkzekZCxKKl-}zH@$tV%7=df1n*u3vx;nI}=pq za^Gq3%hU1sj(_nqAMg7W^q9j-)bIN>Vw@?=pBdz)?uwwfgOMB>M($LipqW!*N53Fu z4gDdCiS+Bz2@^_zC*PIn1YSlTiK%G2Md~>6V|9Kr!U!zCukiwGX~<%yms$8ehUTNM zI34}XfbT47EFgef|HsKq`UUFpc4*U-H4=i30r@&MKSz`!bT_%%_hAu3X?_&TF7NM` zq3~b5YK(%_&R#6XEPHiYwb{Q>#db?se=?oO;QgXCF63AKmaq1-9_#Olahbym&leBL zQ$c?^$Hcnk7LSL{>ZkPOsvA~6ndM_3k+Nsu`nC9cu}AXc3^=NRMzo@u#T-&T-NG|{ zSsQen>=rLB8sAD?(Ue3JQ4RTr>tw4-3e!t*Bt4^=74M`u49vq>a)s-SvmW(DVE_Cc z;ao(xOn#+;hzLyCW=jNt=1&y+SNeZ{Env7AuSFzAKG0aLQA_s z4iPIS`e53Pnb}aL-OS3{$=tVFa)$aW|Im~C__;(KAf&EgKSk{t)w_$fjgv^tDz@q< zXyX>+nODb11x*af9NfZKR?$o+%Fm-JA~tU2tD=o7Ew)Jm!KB}^rR3>2TD}m)%n1?k z`k3tnP3PHBe9e7N^@ndL@=Jj)DTE?~Ms#?k7>22!N;R}7vBJ<1HNxcGF{Vhcqx6Bb zDB!9m4sokXCIUx2L$jdAX`0!u6wi2(yyqx#a<|2&6mKyT`q8fwDuCnsj_meF>4w-* zri#Pp91~kllP9pT)P9QMyCjPwsUaZ+IwdX>(~8Xtwstga8k&MegHmr%fA|=?lYK*j zeS@;34#`70cwHmE!FPD7-ux3F?vL};p22s?fdjNHI!Ky2%<7c&jAw5Zndi2VY|HR{b0`ue{ zhrZ+s_R;w@RA$GL*9VS1eYk+-gh7dqOIs|Ohy6&OX;x~AI(iNr^% z`Oo%qqVwN9+0TU)U%j4X0M<{rAka*|$AG{=v%x1K{#grG10E+Wc}R7%pEu%b-0N4U z`U@8AEeg2|#8%j1d`Yf;K{DFncD1T3t)GL#`k>N6H3w=R2c6~+6>U){6RG^IQWX%-s$2z6VX+L&ny;%UDM!a_nBtRFROkQ#c$BT>&Bb$_p9#qjn4$tH*_+TIOE1c zbWudD4c1L`GiJQAJk!E9b~4%u%C&*zvSdV^gKQ;FixT0>wH**|epvO(4uG@!A^in# ze7vVPLG_}TpOa(}L9bUhj6_!?6g{~DwP6pzV9p?OUWfGw%4BCuIm^r;xwq5rcE;t)*vZLwws(@8E*lm#gaGkziFM}%~WgX^R4c#_@WJumiTcZevQwPBMf>C%!rBn2p+ zC9dXyC1XJ<*JFJT78w+Y4EAebLvxR>^%c$(uU?+pTbXX>g~;W8U*W*?)B5&QPkGDB z(UkxpB_adEW@XL7KV-PGI55BnFJjIR4^*3Mq;-InUw6>+o4)qTIz8!7eo3zOc5Ev%4a-4^CRVFkn$pb|+ncBnJB4f@Bwi+|p ziherbs-(qS6YSVuR?jS8@uk7F>H4e;Q!=NRb%5@rIsg=5hA=&y z)42GNN*+i?LHsVSpxM6-+W(V<$5Zh6?#Ft<#jYp9^bmPe^s|B2wv zWS*bGcs$gXoYRTNc#!LiVwabrLkMtt*Tjpdep3o{Ie6BCh@?NY=%Rd(XL+jEzluna zseTXy0~RdjumfO0Libxrx3M&Yti6$3Tjhh)JaRk?H0@aPhwPajy~B@wuv)wTqGsV| zs-d)Uv59t17C91r;|iWZxS8cK9#fn@pI_TpoG#v-Uu{DF#B--t)o7mSBMBTU4yc%c z*%FldkYv4!Sh@=DWN0VWDkKhiQ$cWj^7Y-r6H(?J!Q-nH1i5vNhi{n9vpRC3r>*?u< zrET=AP%d3GC9fXKl`M~joRII9|HOI)>G8kjsSZ{0a==wI)PiY7+y6=KRVN&f>EapL z6LRh*5?@gANktF)Ly4Y&&-vyP%Nyz>H01)#Ce)_PBAljXQu$UA%=PA2Kit54`5=lu zedz{|foiQeusyJWPP2`HDmpk+S_kC;(e(p+g`i%6NT^~M3*>xr&INHM9!0)I@jc=; z5Y!YNR?GEz1mB$*lZWl_5N(G?)EH}fGeh85QPiydwTnCIx8w-rDSqS${&AXsWI%KP zT3a~5N>2Ml%j}?fMWji2^nMGk|B0{P z`ZP~^5i$+Kuq8V|=II;D0_Gml$2YNMR=h z%5fhlc_Q^N=}+mJQ%v)#rrlwrSs0C=c9xt@v3~ZA!2J!L_Jc7~(L6%c4A`fm!%h=K zVaS)O*Udf6;*S^O#A|-pkG;xx@2kzQ3R7KB3#q&7rZ5ykf49g`Z=G>*mORayM_N0P zmSf2pji}ztC9f9mY-Z3DCYK|5NC)d{&jwx(^kgqjUZO9*fQ^0CZOW6U(zIvnk>&fh ztZ{xEKL7N`Jn7q-oJU3l)jficcaCgwy6tQ=)ljf~mL8g#?Yc^CR32rUoW3epGCE!) zG8Tnywr=+PBHXJl@GpN8V0FnVr&Dq+%|yl~mB-P!8E7*K7U(L|mOC%&i03GumJXg@ zmw?YBdmuMgu(Hq55}xjMsmXZmngCz*WK@bPSH%-mnVhtTWyzXRYyMHa!PoSHPBdM1 z&b$?z$a-0G9^?y+MzmeVC?ZZqn7yIBXG~XpO5IOy7I(_YeQQf4MB$^vEh0 z#a4M6R&Se2v}xc-v{x&rV25Nnqy|&coBpv_bgHs^xt~)wusw*@-KRav^FCyt+jYe- zr5sle?bj?yZt-dwirQ(MDS#!fWoWZJm7Mk&QSsuqw8V7+c${cGd+y`DEXOHX=JXNh z(Gr*v4aP1Jnn=7TnuGs-5(YR}9;^c2Py1RY_R2_ujSygf-YtmHkQHJI=!LkB0ww91 z6Otw)zK8iydlE-)q@E_|`mp$KLfb!k?Wv#AYPq@9f}KP}I^EfX#|e3B zWJ`fdsA=yZc*NvAYC)f^Aj1H?+k!gs5q9rEC}yQuqLM*~Kd!W{l0if?w`60T;dm-g zyhRBbQa_?F>fyD!^Xm&h=~}5=Y3z%>gpK=N3wKz3`@WwKs7+xV-8Y4|w?-G^M-R!- zyLeQq!EL1+!1!XWyhR}|#>7!UzZMau#1w)JAyO$Mc+$0TU*#wsiVm*NMD-tk##5b+ z)e1TtQZc5XvChSq!mW}0!p7OF<=R;_!^G{Z!AqrT9eZj-A+44xktoUDwiL9Wlj17q zxL@hLs8xK4H(h=R<~nvfFR32aGalk;{X)}Ykt+@(4YI-3(1avEhwPSlj19Va*6l4Z zbG5il&CFHtf%5fXd2CV|J+)p&AmZs$eWJ6G6v~NrO;=H^h#a}}Wxb4?9c_!{f=?)3 zlMcr3!T7xSQcwHYj`(R#NfW#dq)M&n*w~tKMpKXhG_B_XJc$qaU+7>xiEw)5Q+@K8 z?c3}KUY1%a+0Rr<+E8u+-zBmMTq*vQdTGXt$#I`TuG9ZHVEp7~_`(%w&=aVd5y(0M z6d5*CM^=ubT2CytM$e56&6ZBBjuv-WPDgDX!}5C_%XJd{j-|YV=$^CY;p>3IpFhtR z4)tbhH>mWB_&B&m@p@FAfl5>qn+Q;~w~k^6jVqYURTx{1M=3F9T#Uz4&DV;i2uHJD}W76>HYuXg=RShOhAL)wav< ztHB1hRYwB##r*Xjx&Cw4UwQo%`RhM*{ngiBOMm?5>#xgSf7zX2hwHDq{<7;oe*G2K zeHi@moCi`ua8s6Ni^K$CJ6&`KQ0@SU=4uUkIwz09`E_VRZ`{7hdrdc;8oD ze;NLK-}k@o#eeqN*pXm|NP)w0xoZl4=DYvr@OSEL|L+XIr^P5FdN1jLV^8ul?;A(k zdl8ZiD-}4lY08gu*7qythYFYOEnYYXmv|k~AH#gO9#pW$-Nif#O0$q-m?Bn`2EehJ?Xy&B{oD3-PgEYag9NMVSY5PmWo>jPHAgan{h}$ z1vWz#Uhl(qw|S}`WezUznyQy~ny@LLJ(#s*u+r+nV3LXuOj7QWGX01+b$wrDSs~1a zn8-+DMDiYNgBZ*TU;;jL*nCFo!;5^`0Sy9x+YB6k7GQ}>Xyc#>%MfNWRrA2|s%99K z3)+lY&}=pidx+%5j$V+rT;r5hm|L>= zjN(bFp89vC_-s{3W(zU-rt(xf+2p1()@fjhMg2S!FAjE*2nJ@}3>#EDx40eDny}om z0v%MLS!OY;WeDIInxzy2yC1did>g*I^zVN3!?P`^_WVDo)tO9I=aPvnpl$*ZK z4syx3Um=5RkKKmocS?IK_$D8)E0M6ktSV~4p`I=cjtWB19 zmN>+MOtf;) zC-TgX@6Coa0Zi`A1Y?WMhI`z8&*DF-bN|rK`qAgs`ltJsD6eyKFKD9jMnkOBaO_@g zg|%&XgwKSi`-%)bwN%kQ0x6&EN`}ivs_BhD1$0;={g5;|-mWOtr7^8}<4TGCFi4+#+5pV^A?%Pf4p2A^NysV@E+itufrayNoY;2VL*m)5Id zxdOgMagJ84iSrg@CRyTkh16QPxxI%J6yXf2qLtbIrS44tB+06B;b0jML`4=+7D)z} z>A~r)rMtSSP#9|8m#)mJ>TZNGD=VrhyD~FsA~U->+h1i^d@L#|paS{?L>7JQ_@gKY z4vJ6Vxq&n2bD6=7=TnePe4@PX+$G}P8}~+K^>jq>Lg~rMjO~2)oO91T_bk}^6%WvG zGWI#F938FEdzOP*2SttRF<&R1)3Xwwbg57If~W*PUJc^0CuUxP|g9B9hEql7(=;hyKAK z?GMTqd}2m*uvXx$0NyLi8$^3u?2{=0e6pi+HNMvJ{bY!(7IVh=(6~FN4mAtK2bIqE zWRxfEpfhP(aU$95Y`!*^Tb({-IWQpUGV`Tr{Jxq|JQ=;NVF@`%RjeP~%u!iA^2{?B zYy?}8;grjM-Eut1fBgSt6fd}f{r$0BFdM59IZb>a3c!#Xp>lnWdCB~p#*WkNUh z_d+9$VMDi#Kqs`wKqf5Pjlx8@K-*poRHtO2rU=4>sizl#*51QVtSTdE`8!c_?_qb7 z6@W_hvFVWfa{-^Xe=eK-F6N1;RN(Ge z3b!o6`;TA|R@R}gO(95RVlD*4XNdN!K!hm@O- z;q!}Mbewo9(`ux0BSP5>as+fWUj(zDux=bS0K0}EV11DZH_3-z#^?P9>Nct(xVmmAQ%l59&L-Bhib06d1(#21m zcPxpE+&>Q5{+WoyA?c;~#P80^K5@{?o7Iy>7!9jiJEoVEON+AJ)|~rxZs6+5yfNsc ze&}>ada1tkQ!?tyV|_KOd(dSI$qFY6OCTAZqeSYOkXtnR#V%2!T4B?1>Tt`O$|daZ zurNau)PxX34`ncTRe^`}Q<9#1OGf*oRy<5Y-N7T8ZdAi-jyy3Xm9Mg1;k$1RcW10; zuSK(Ryk$PM#QRJ5`ls)ol|5&f=exu^)-y@4JN2Zcl96!2I)f3bZYY0(_{;ib|Nq?86x+&Qy>yj&c_vV~IO?-iJ9^5na@W z;n%X7SE{?^2J06@FRRWW@|F1s;%(_9xoT0{KB?o>FJ9mK6@!ki;_u0<#wVguT z)Sos+L}+>OW5kStIzC=2H;vLOQ{FWlGG6r#eE!oRV2b9x0rdX@>B+W1&%Q zh1eUcRw!i*PO!$#Errki<_8Y_e}m{~A$IA^?u9cKOXcMi8DS~wVe$um?&tr@+ws45 zNnGxF10s}PjTq%uQC#wy5Rv?9{NK+OqVrOgXP)%e%XsUr6a3`6A3H|m=b%ICt-r+Q z!HnVrSAxyL#h|{)8f&8c%}(1P8R9p|0P%Ig>oE0nMkTvQ+;2KRJED`ra35GdL zw_E9-!dw^xmpi5pk=sLL!K02mZ#vjUmaGLvu9SI%B*(qG2Qo15&vOl29*n8_PdAPI^D^sx>pj;tjY_$dpwB$Rg=kc`6_zqIk zYz4KeKoSbl;=t!AV8d%^vwqzLm+SF{hOdi&RahCcI25{>%W^weIkG_^iADKqUHH;`gPf_Ri1J0hLrgAO^Kq(|y~S<#Q6 zhNapTiA>H#I|Ep`v9V~8cOn0=JnxJ}gP z?ws%+GVGJLWVMaQlK5DxRo+IK?IRtc0#g`GkyFkVHe zCT9Fmf(HfJjUsYNkT26y_-Y4YrQXB9khb{j4~s*|*!wnjgOS!ww5ydl!-P$)fuZZn+-9x7afupxDkN z0x%KAdDL;xvkHs>>v9}iL`7ra+PY@~(J;oN7k|G!qdI*$eUJxc4pE4 z;qzxR+D|P;c&tF%ZrL?0|H;IGvxE{&A_Isn8gfMImN(v()p%0(2UOndz{7|<9tJnNWX^|VKhkz5om)(=Pj76@rJl=xz3_OD9X(SmA#(XQzNH<0h-{d z(}uCtqiIhlD)r^LmO>7Y(RY zPFK%1+vi6_KtWNvPlP<{IdjwspR#_sq@Usu|2(6(;Nq@d-RribS^r9Sdg;og+U+~N zl5DzMQrle>GtXNwel5eIjh-E^HAY(K;E3P}IlHGN7Xm|BmtN{s z!u3DipOIdYuM33)ToqSX!Uw{3r)(f=*1eoIPU~~Oe2j@Bx5Uf=0>L<>{74-B7ry(w z&u5PVi{hr1s0-ySY?qpwV4T~`lcey(yk`OkE@SzmEQ*onll{`9pNz)2_>7F@r^mp$ zCwgJd0SPCWZN#<7AsSlySgLaj365CKvHV)a9i=gm2_2z@vFHDZ?2U&){|shjZ?F_n zw=g-k9`p7r#M#uL$wdI#(zv0p`vmQc(@5;Uuaj9GN=Q=w#Hz^ie!+AxHWU z3W#Ml*>fFiO>CPqN-f##aB)n`n}SAJZ&QxrGeGACmPhZGzD>Fdd-c zYq4#2%ju`YqZr*rXo8WGMP&8J8Vhl7g*rv_rBqO0b}@gkNWc$?&pB(%n}lO;MtOV6 z>(NX>fs4?g92|;&Gx$H^4HKqf8w<&HV-MBf;!Z83c%hPIrxrVShMSFZQ}RW+0MC>w z!to)Q$yI~^a9e7(n#}AkoS0uOxM~Q=DJQzpr2shw_M1YkOuL`z#xLYTXK_CW8udi~ zObb_Viz;F03tb^@BlMuTuDuoG_QP4lyX>RX{cf;>K||>#+MHcLaorZ}4=QVYNsu^M zIE9Q0oTI1Yps|`6(tjb>wM5^Wvf7UmuWW|DxXD%)xMUOB10rHql7u96fK8rigP-bRooVfFD)Xj0Fe>MiZJvTfBR$vt8tZ_7APtrj@A`3!%CZaLZMPch33;Z zg7w1M<%7kkiN-{E#9<&a6ymzd5)WE0eM?69tMG+W)evxf3sD85C~}J;=ct*0O#TX$ zmv$*FZJHB=Q_mpn4(MoBN6)Qs)+$3{#-HdE66QTS>}BM_3i07MDBhb6i5J&X`UGAMaL}@)vpPtrp8-_y&nxDeZP#!5}F!5N)1gX2~p0{M+ z(}TZXnVG%@g+XCqi~^-mzRy;+MkQGjfMg`Cve!_9l5SDc#jQ50_tO+2SUR$! zPlwcBgy&vXc24v{DxMY-Cpyo3@idSNuMRUSd~o}gzTnb6HerxbLW z)X|6Rx{(&`FiA@;x?Ct+OX>jKl~FV)_+Hv;l)txI$x8oWFS#&*LSLrE){;N4z43qw z8?m~Vlo+f=v5L7zKS7~e+}_vb58m=1w)He0mFCWhUxTwU>nq23Llzw5*pC@+fSP^+ zN6GJm+g~XA(Bgw1=rL>yKx(j$`A#98An;F^PsR6O3acYofR)ByJaVNLyg^{dcx3?7$)`_5j#OM@`L(h&>{JS z>S6rYD#c#33AVRephzWBsI8~74hZ42R4HHDBj;C0eULp^TaCyTI zWThVxWI+xjF3P;fRa;!bx(j$TiH|AQWM2eDcpOB|7-qZ`^^JMXO?lGK>LeFVG|=^q zDKpn9P!j?hZ3d`J(87D}4xJKNq)s*aSJ%Y<;rkUR1Ru01MG ze35>#g)9t&#bPySFT<$32Qjyor^CltM_JlCzXiT| zOJ?h*gscOP8LH^nWDX-LlEn%c8LX3{`Z-{V;!zDD+pR$#9n>Fy4oUYL@cB$;egzxd z3uE?>NqnC+$l8pqW${Q4L;?(=ll+u)sPw-6`}3TKh+f6U;p*UM#5x9>=#u`z9~AX| zJ;?bF9^^?Mv*V|#VJ%5z^i#J3E9<%>hw@QEe@Qyu0ow1%Y`tdV+frEF-{%QF@JE&T z4mbQAWfUZXe}ME`Xa@RRs{nWPEE@hOzghZ=Y27yR_j%5L>*$e(YCcnJ|KCtxkrTPr zm~US$7te23V<)l=WbI~>Yeq}+!S*)N3TnwXRa&>)n^E0I%RH8F6xoQ7D;s5Zuj}QW zG7&0UnFw;w_XizQ9`}l<>ztc~+(>`g--17Wc_k}B{puP>YuMp4ognK(ttkcF2W%f%xh7_r*J3_c^f;#VK`^@Sg^ zJWMt_WF~e@y@oZS3nxhT9%JA^^YWRj>JTKC^j*naG(9KzDEjGe{z=T$DmE-BOA$x! z;{*;4Igh^>pFfwC-QC`-@%~^elON?m%}@lcX`)}X4XGl(Is!oa$r)m%u~lUo7Nk$< zkn~WV*^OD*(@H@MEFhNSx*D4QSjAuSKuAMb+kcTJigItU8x`H3==&u7gF~hBty$Tb z%DZTEDrR&yug!-_qgKZT^iW(R9g;5c7yoc?M)q?Xv53gNVqNZQ*k?soDinw`V?c$i zpqvo%ptynX3bS?N65n#0X;209!Uq3-vk2vI$IRKz%xz_!;@oZp5(%DqH!tUJxf-Aq1^T}s7z7HDUcW; zq?(UYzE8w5?%-RAla#~9gRlCsipP@g1?7TBDf^^AKPWLg)9pH9NXoJjkCY{DaC82l z02szUD#uV=K@k!npK8o9Qlz7`(k!}S0`m}MC0Z@?po-8t3*IsH)sukJ>;5()JB#9q zw@_0DI5AP;g>eutG)kq3plw#r>BhC@l@}Z2idzZ|hIzEzgp?Jgs)z*DlfVsO?9-lvi@g<2wv}^+sU&n5^~#JN4}VeJA$r{6HZHE4x005*3gg1b=aJ@6NaG28A%V zx{Hm^HV|GYSGNiW$o6I8H(4uRfmeANIe%8w<~&=2TjmVG`meRFB6v6su)(z0#t4r4 zo9$+^BZh+&aA4hqZY`_@wNr&YP5o(JXTzGn;#@L%_hd(`?J9E}^)Zlof$Zp!to%Nm z#$HGvhmhnZ_F-W=n$CPK?@QRFMKdb=M<~XG4IDv1ca#BO@m*uTo%Gw#KF*uQvXSG` z8gjJIh7!%WPSCuK!mm86%}mUSRM5tm^5{ZeC*0eekuM+JLk@Fynfcp>ynO+5z9%Dj zE0wokQ7t1E4Ppj?qR`q=YNKkGpy+2!WYn7osnEaT+FbiiRrrQQCDxC!EJi8Brle63 zrc~aK#S*D=9klQ95B#uaHo!FO*ETy+Oj2?j7Y&?02b{;AnvES+D%VhUXNNqVTddz( z8{KvAH+gKB@?x!4t)P!uPn9gC-B^N8;os1lWQu6NA88}juu{aX;*dKPnDYDSkb38L z=#Sg;!ILbm!gxC*Owr)gCrwfc8$v4(#V$zR4)op2sEo(+6zF?GPV|+^C_0Qv%dLP( z#|o-fo0Iy{D74*B&`0@5bjW$-L7?*k8Pz-0#sdm>gBLN|p(17*g-K*GvngkZeD{%TL%}0E}XkCJ~|=i97E5DJ4zlOFJFemG};L<4SS{^<^{muTQVEpI$9B+ zXi*szIY9S((5^ONzoOAY8Eq_RRcec<7w!nTtYkK<>rzQ$sjNJT#`R|mJx}!sF260C z^<>FMRa3FPF02P3D$=8D6D<%Cy~Ss=ThX}#!SomWvVD?Go)%H2-2Ca<-KFApo^an9 zU>Z|_x?oiaHr`1t^<692Ta0m`eYk&kcSiGt&+2DjLZpTII7_ITMxZ<`F3=ij&+bst z&WK0BxK#wc`Moe?YOt*uNDx4{wrcelph`c|La^nB6u~2ApkbCvM0~tv;PpKG{kV+c zc0?qKhF1|n$~+;3ei4~swO5j-9fF)xo&;wmzk#l`V4B!kPM&kUF->CU zLYbD4ae4#i$NL$4N%3g!`$$&vR)h5*#|}vojt@hyIUR}g(-OQb)MZ&*6ro4U4_47& z&hND{I3*xXos$L)I}B>sxS5y|JBghN(#3f>**eQ^6=Makco zRTBqG&7zbT0xAq>__9L$CJb!s1QM+cZedIH=D2f`K8iPcPDcJ3xM^JUEuc|gvuUSK z{B~{hQU3%wq<$s;>l5;)Z>3zv-X^Oyj51orFmet*+Q9Ll*KbR7ewzNlA?bYu=>2&9 z{0d@ftjdEyDu3a`cNVHwZc&W}Rp+p)C|^$2YkzOwAcxC42Yl#|_5$H` zcSijUn0{jv8{r)B4~GM(SPJ^QtVKp?Q#m^02`6VXU}3y5~FTz9{tK=eovxAir<;g46YH@CSdqLw#BOd5bNSS<7e@Z$euJ6R> zJ5S|^EAp~g@Dz4(k??2QmfQj(M2+)Ou|#X7jg4uPB?NSbR4C)jQNPe7yq1!+Cq5;8^y~3mBkdZ6WcYWWl?~6(i<-= zl_t(!xV*WfGoINrOmbdI*r#X4Gg6%FOaCe-JBtId(B3L+hy?+CUdHT=zB>kl5%pu` zV5n9p&JHhNQf9NOKL5f_i0|8@d=~e$V-L?``D)cwt=jWUzPbZ^^~{-E`3l$=n5b-p zU+t8M^^o+errA3K{l$r}T{_d(+|y*x=#C~A(ykiRB!B-*|KN~vNcj|RIg=M&h*@Wm zKRjbgTk}MGG;pyMY>!NzZEnsufD`blH*-48DZh^nN$+ps^Z7^RMsE=8)jC+8Vbk8h zB%ykWgJ2#tcmxBvw=#8l0}FPW;8PBDN3(YMoD` zU&YKhy|gefwzM#_IQ8^GX?mhCKeIMb7?~ekU5Fj@u?uW!d1-xir*Y=e6+KI!Ul-<4 zzY{bncfM5z&aP(UeCw($1L!B_V#M$`?pundPrGJ8LmaiSne<#Pv*_Zd4THCyykoJ!mYa1xEX5! z=AULO&m&C$=R4TrD4o7qYaY0GYutQ-1A8ZHneo?e20nj$GADc{$~!2|Jz5PD#hfDf znyJtAElzKSdslWGq;Wezxs}t#1!#fd!r>3Pvx^DmcCNZn8-Trd#jAIdFL zt2cN0;=w>?YUk`=pnDh$p|I;bpyal)v}k^KZW+FPzX+3x4R@USXZ`Oc%`Erihg$7pEuYPLIy7 ztekOxC*U=2=#W0oll&p=9g6pOLtcLP$slB_QC2Sj@kVH&=XVN6vUxf?V|`m2=fjB= zr_E!1iUU3%ZC~+X%aRL7K3;}QQ|ZQ09?a# zzZ=`V|4P@{-8i!*%Lr{opY?VU`mE@Qh()Qj1=(f`5NV)MKPNVt-i6jemK8cTtQGU4|UR zEvAsa!z7(oEo3LA^6;U1XIrPk*>jVd)6)lfNXLL~UP!c^TW2>K^8b^-uW?6S_}NV} zbPBSYMO?mbL_;C;b)vn*8`E}y#wv~JO8flo&Sg{tP>cvi5SQE5B37gND0E0Zqx{F) zpO_m?v;tzDV-{tuc%@i`5zq8=`lcFN6X*JN8y7D1!rN)zX`Bl5CpZScIgNU<53a=L z9^muw7v+WzQYBHBiTvVYewDfKV#i$yL}_f+m4oVRXKZGCZ*pePhnb@An310+6lQ?e z#9T*?dhwcaZr}wcEhdV&pY+$j^*3{~Pm(WeOwjikz-!u1N)20!+aaaxCru?uJ9I1n zy+?WMbVxq`Yka==%X!Vy$(MEn?#I)+ka!!tDHAZ)v}q!sP3i{gix_@NK9zOQ_m{pcM?5w= z@U)gUJGH>RYebYO=Q!x&{Bfw2qHk1c8q%1BQ+P2J=ry=FIdAp43>sR(BFzUWJLF zo{@^0v7AaS@*>B>$y%-N@_y&?&^qD|6dPyAikv%SnbQ)C&znzkC79_uXa*Y|hIy{WraQpdSAq-G8I`&Hm|+daAAg=IXmC)QC5 zm>Qd2_RVy637+N5>xAUQ?NhUz?d`EnpsO;+(%*$7fWz_K2A&juQM@fDeKrmJ;1v%m z9p(Zw-QxPY zV!f0HjRI2G<#QOqRINrmDHX%Cl~Od3UR_w7=89#i0|a( zZ|9{4X&s6JYX~%@?Tf-lShuHSV(&9?Vk(Z^&nFwr^QDukXGVt(bXIgF52UL>?;8c4 za-I5n!1G5Rofkg_2bfmi;ycnZb?Drcg`xV|UhM+>n|8O}w79VYbEj33Tpv&z_$Qu_ z8-Gz4-pz(tlICkliRw@#Ep^jDTL*}_C!iO(_j#`_AWf5aU9LZ!F&{EsM$QKx0&bs;fJtxgv(I%NGuZ! z@B~%bDGs?hs%?C*zFj}xJGWTb(ZiAL`6}*UEnqch%nNV9cNaHv!fyuM?9m|rt|dEo z%J0_+xtZDixibS-=g-XOrkrD0?}pCgyUzl*|I90IgMyS=Zk~&OPDQPYEJalp8rE)# zOGz5Su3SYx<=tWM-H+hA(SOa0?{0>vHY#>lll7TWNRyIE(Wh}Ly$X}Dlaut5#O_Jz zAAl09dlYOTG8|J9WbD%!*D^EE;W|lj;^|GXsc9Uj{wy7G{`qhCeEG$Bjl(w0kua)h zRcEMA4%|L!0EO7N6^_X#Gpmeabz!c$aPjPBxV3rC!R7)R^&!r<7P;>raridi@|wKj zR%aT8C78v_Au8HiVMtWNQ?GDPFIY87(u$a@Jbf_Lu56vXI&k2GBe8GwFyQfL|CSeD zU~4uBMJ#)36sF3GjxTMCg*)>;F;0o-T;AN-o!A&2s|Z%o9CpUdX?J%p8$h>gMgs$x zMj7jnY|da;ROCsbLCG|ggQ`YySeQRK_c4o+dZy}!{v)3>pYRk~PI&9ssa zb<5dz8v6G~fzO}*QC@PEm^Kd6K56JwOKqyRU8K^L$l#CUuzWU{sjZIe?oY|>QOk7Y zVj!8{CHaTqXm0p;j`-BUG%Xf_v6Qe00C%G0n{B zvtHy@D}1u=RQ9%}W}B0h5oRsfbqz>Q;8DPLkL%AHk9G7(u!<75W#a06@phBopx7ZD z$CPKF)} zOtYfXr5ZN2A|s$yI}0aw&XkAx=8%FafO5Wo12!24FZB)8`FUMleo}@PE$uK}VR;gV zq_NHnX1rcv>QZQ?o0RA#4#DE{nYPa#!Fc-iovGb+d+$PL!~qg8G2@!vi|;;^c|AxG zf2`wVu#$lSgHm&!_o*i13N0>_B^fj~D=AZb*o9pnd)eC2a;=7ZBSCsc=_yBiz!mZ3iLE`h8%VTo|_q44t>MuN?x3*cr3Hr<JD*r z+%r{No+PO3?U;g2o;$B_jq9lq$vW2YbztvIVl^tX)E*!wBY}QAI(c&MF6WI`bqGwr&a>^X<8{T@c1+E=SfVS5(yy7XwZ0irj}nLc z^AWSWy~Ns?CKA;dllq_Ve%T9i;y=q9tBmN7Waa_0Tza@k6Az9u0>(H+c{Kn6hnYw7 z1$_6xAI?cXE})tfmHVLpL#$g16P?65gcG7T7zHm_u5>UD*PlkfVZ?#uR=It-ckWW- z(u{kO1tvELxqY6S>^Up`93kxKBA_Fdy0Wnxmih;Rp|z%a3Zr^{bg1~e?o0Q}rw>j+Q|_=c1ew7=p|U>q36l@MAAk55Jlo`E})!CBgIG@$#Qiv%BXYuF zsp6N>?vWh)Xo!wJ@+nrB2>*01t-VAXbHplrCkMmn@@n(K(yB1#l23NP^z8w)IHP|N|4RRk!fztNhtnz2hsH%&gcQDP*aOlRHIe$^zg#HiZg5^%;B zq;eG7lvEN2B2Be(ZhUU0vUYCTPirm%49s=&Z{xfFkykv|3dmexj+RmMw=x)uGlMdT z>1U_nVwuSr#e>P_m4nUxgA^}<=WQDL=mWsxOL^^g7t3|Ou!NLVc!e4}1|FO<^i%TK z17~n?Q;D%#+^*GbXdNnwK-BXdVc`5GeD{e5iZJ z()q#0;#9RaJm;_w7%bkS3|xK&Uw^~RdEr97f^v21)^Kcg*fJ z8iNZ9&8v&)Ve3VxK=Ym{^iw_&9g;u(8lUg{T2AwOvD&Djb5ID!npr{EVLhr>IE2LI zRteYor&`lX;rM#m&VactrS;f*pOF_oFf^>XBdJ;0xv3afX7jM+pA7wQ^rG)Fm_aWc z_c!>0@{#ZNk=*zKiB#A?#JZG>--RkFKf%jr027Hu`^w4H>0onay)ojzLnzLw^|mR} z5$~r-`S=gu(9ElE4=RRDqY!<-qxMIsT$6!8LQK*$sC&Ix99;UNHW(m@(Kk+VunI@i@J^x!h9M7s1p2NV>N+ghX}ye6{o{VEeZ?=VA-)y4U$+Q5SB-3oq-LePIJI6}_Rp`tDWg=i z(btPB@as%~6a4pk@6Age3tT7} z_()N&$|_W1%kGg1lUq$)JU2UX`gCvS;+k`HF6(GWoIV7cUeP)ZoDBBSxrL)(>Kcb6 zDZ<&8=FH(-#y2fXyXa#u9#AqetJXFGDX#mG6vk_Lu}?w$Gw6`G(f&*M;W_EI5|!+N zqsJ1r9;vIw>g@dB-fFneacw1Xgw=bc$dkF>M0E%H^O~;DOUah3RVRDwc(XA;np;c4=Z| z^W13Z$|0Fe@xxMvIja9J`I`FWJ! zQ#&j=}c8ND>pl)6rxPK%rW>}-d$Okn=hM9Xx`dVdwB^VrO z3{@P^2pN+1cXP-$3%l+P5eG(g>`&%pZxH=c0ToonBG`&SV%eu%;vk-5mJBTDAL^Um z+-tQ<4R;9C!v!9aA8x|mugNRUhlrc^8#}FCy8^MIAudS8!X+bv!=nQSW1VVcf7QVv zvMz+=k6VGqC;mN0eY(^@1%oAr>kM&(Naa=pWwII~#dM~=j}CaW0$|Zg6R<0GW9b=R zSsWXzg%ek+=`A^FH00AA=)lKn$j{3mKkvwE{~B*tKP1Rh>^Dberm_i9tk#o?6i(xE ztJZh%%=wi?SJ{I{8aR+0diUSw$0top8Rd>$Y#d>OpjKQZX5@9XWoOJU)!|NWIJtiA zN0|WPGPkPX9BAOU<^gV z4oVvV_wsP2F*{W$UD^+(WJJ=TFXGf|az9h*eVPY)TDL$C(D6h=KT!R~@x1B}mS_(hYcUk2 zx-WsA@ogOXz-5rt_sh$pW22XfYtCHzeFGoLdwyIun z>nevHrIaI9ldNt?GQ+%J`K|I@(xFCUiIdXc&lplT>(b#>5y)^ubi^rRdI zc1}Wp?T%(hjWV4Ed@bgWIM!8I~CPo4IL=>d}AI3 z9lET_quc^Bk-SAJV3KuXi)gWNbtYWt>{V;d$~-SN&Z z8(jxDSF3vzY5A;2lxMl0EBW;=F%A!YYF_dzi+&o=bBYz`c-#uft__9lDQ_2Z;@CjB zZ>+X4yEMDtG-W`s=TZF;IwTGhul84Y^$Vc}>b$e`RNM4{MT&Z=)jNLBDqk6Eq$kj8 zH**p#i8ryhjsK5z6|4{BdVn4%$3#48$UIq?f?H9t}b(RNyFFyirO`Y;0<9sFkuK}O@+@td1 z3!eqEqO%K4$lZy{x^~S`d7`tkwKg#mt~F*{4jqg?9h5&!hs1^QuAY}yUJ?thZ;?}! z@M)5-c&TmAQnH`wfW=(Yfw!3dM(hO=y$=<7Le^1!Bfgu>%YT3_U0W>TU`r{YJks8( z24<2$Bo+Oog~=;dua3?3%Lo?TP(T;C_^u9EBn-B7>N!Jiehqlk^O{efEcdWKY6ymO zNcn|{W)r)K)pCtB*G4F6eZPjtQp+%l{ga(mxxPEUP+Hb2a${A*ZYqqB1uTt6TBNG? zx{vq}@5-0|eZxb2PL)G!7UjoD`6B<|`}2yoyWp2Ys#Snk+^T`g3p>sRkB@*?(5~#>C;uV` zgKp!Xo=c!Tylk$ozqC8rJ2X^u`YMR8zC!=tkT}tN|IwA)aWeFc&=-vDjz+)gKkQG; zgmMGrtS9?=|Df3a|9Q~;#9MNarwz{W3+=7KGSp>ZW@ZC3Q5~Cbeu#~dzFwnP>BJUR zPf#+ktD2carsFG8KkNG&W2Y}%n7@73(f;PQ2NK-Q#GJu5hFA`0I}?p!BW?d}Z7<<=uVj z2TVg zaU{Vf=EN}~aC(W*uT-z?_FVFddZL;YJvwnPFD%vAPSwwpy>hwY&5vn|ApKfq+*NC3 zQpBFVctVd#tIf+N=jdgkebKXGR${RLe4?|w76TFgtQt7}HNJb@U>iG%k$+wZNzh3+g9FMKQ_Vh$Z5zf#-*T=R0maZax)_fKb?0WlsSi zwu}*Chu^YBO)Vv=qvm<@25uGn{kW64;HIt{Y$6_PZFXSUls7wQ5Sqk~)_=+g*9xNg z7Fs^iu;evf6jb3gO>1z5Wy+M~`Z)%k<;qkgT5x^vc*qWDe2 zieD(aR5Y6xQ9XlJ1vF_b1enJa*3p-Z8iPr!22&k0CBb)c9ZmgIU;4o8_>Pt~Ed+i7 znC0p|ph-jub1f%-OxQN^1_Ge?yx5qDPEpb6Ca!T|jQJe6H*7T6EEM+to%@MV7vwCiHYGAiaqUukApD$}|38H{b=hmSM9Y}*?i z?Pt&-`S$bpT>MgY^#pD23Vd0mi0Lx2FR^Op2++)I6?VtDLY#}V2=zla_gULojhhoA z>v?}*@E7d|4}CFr`bj^{`%p+QtGBW964VekTRgyqjsZa&A~OM*>cKVTN=J}BRx2a; zzal8-rKFHhR4JoO*AhAkRa;F>4cNv)n<$23pSE!>7Fk?QrpuiJ5^R))L22VH`rPc9 zg=3(JdbVM67cH%NW&^)gxUp2edShX{Iu-gmL0AoXO4v6TLrhoWP;ucB=7vZrlA-=& z+&RVP*T0mVKNFaTd!&U&SuziB#_&~JyWm1g=>nlEtfy))u)7L9QEX9oAjP_=GZq<= ztkKR2>VPq7lTkO>bi@H^T#8ag|nKlsyP)|$q)GpN8;2yB+-e{SGPf4-FOPXkvk!+8BjucEF| zz21R=VD8g%;f{a4?&#hpaA}%@wb=CccO&(g#<*(+-%=f(Tl1K=iilW*F>cig;I z%SA+~7P9bFzVRy8V;hEQ@zea^_CndqntY<*__o*4`9XO!Tp<%SvW?V5^L)ixAm|llSGz%wK z87DYPF>4WfP`T$6QB!Vaa|Ll;>gpMunGZpB=JG(%6bw~#VH;B&Vq#F{&QB?Jy z8Iiq$?inhKp^m(Af59P%XGo3F+lw)$IAl5`e-r($y_}t1P~Oi=s&7!{@UEed6DNeAOw4TmvmGSffb1*h_dgjWda{ztgX+{##`1uljBV| z{8Vn^ZGAsSYr*80Td&pxK^^zgH0)6v@$*Go4)xV|Q*Ps4g1Xzn%r~+PrQX0ET;arI z5VCGk(O0IPQ)$qaL=9jMSW}QG3QG}13 zjt2<+A#tI2>zC)oN6gHjydJWz*?QW(aI~DKulux}HOWw^lSphMF&sX_{`EYG!&896 zFXYA_7W%s82FtZh-OWD`i*ALz=klw9GI!6a)a_RoOg>!dZO7lW$%$B z^~a2Hpt=XY_#YXLLr|lrSBNK7o`Fn`ldG4Uk5e^#GKPVZr=OxBq1{akjea^)fu_48 z^2#kx9La2X2TLY+S?7H0K%-Mo1)KEnRHlq)fZi3fLNbZ%@Z@_mX)5c^Mf1FH|S z&lnHNtN)?>+7~NiJ7Y%J#{k*~yOdRQnii^Oj$Z2a3 zIQe3Sp8jmPAk&{8@o`$P6EONM1Gm%o`zsmlv+3_nxV2ah6;=R}LTC#3ld64TCaswj zix1%*4)RRv<|eNv$!>RZ<7RfN!ihNN=@yMe4WPNoVbMG>J7RJ~SYQ*G&*QKQ!YW!_ zQe=L2@^I+Tr9r?4vTt}W-M{!d#yH-KvHgR4v$G!(N)3dcG{%Aa3SZ7}zh8%dj0w>!3k_e!VE7rM(UlsQsG~<}Kq_U$ zZ&upKMRTci%~vZ8c$egN3G!iD+#pa&^-#*@2F5`4ot5(LVVu7G_U!DIVz9GANhqxr z%tu(^WJ=CpsfX@h3$UND>>I=Sw}oJD*ymwLyKe_%+-<_tGzgU$V2WOJrQrKLiNvhA^uHJNcA5L5Zg(!^XNWzBHjkl%FC~VYXeX0%^p^ zB4D+J)gu|uP`YTqM80XEY1ZMSrUDmOk&AEwZEDjTlaj%ggMERsjey7^OpVZ{elK)L zejEbs-;kld1>4@W?OJdE;|jo|3I?Ln%Ud<_*Bgj)g{_^TvYc`w;Z{nxWr(i7qJMBm z`pD06Z>ID$8rZ#NOE!4G*oqC?+SEM7ppV;~3oxT#U{dW13}+A1S&HUaFN@oWfi`Xl zpOGOqKL`3g_pt2bM(n4+B;FT0i_ptUVP!YbX^)Q|Esn(R+UW6Z8Gaif0#u%K)Q5is zo!Quy4N^Fg{s2u0>2s@eou)Zd#tppc!0S`*$WH&7cui7E8thB43ZWFp4MjYKq%4Cu zR2Hy6#qT-_PXGdra7UTkp@@K{K8)C6J~XaZi4;eQdEq_5!13>Z9mEMk zk7AQ&B&^#5V-sfyR-33HZW43e$&vB3k;Soz!rIK@h5016ardsya?YWV?8i33o^Rmu z3E(rE;e2ND8F^R9&p;a(qbQ*Oln@odKN-BnxgqU>#5|`x&A`+x<|>X>i%n(UcrC8_ z{S-%E47bZi1js$vw@d2(SK+%~`DA|jaoxWeX%15XGdC~*XiO7U;k(3w0;wF;3Kdsl zNf3oKxaZw<=$7ZU$A`8~pPvoXI&|7NU_Ny|%{?d%@MQm5iQ8WSw`Y8NcK(I+-2m?| z)IXavCOVj4PE4OOtI?qXg%!2fg#AX6{+UL@4;kL1fSumOxIUw#e-`wQ z{7HuN2MCgm(nm+Dp}As;$PPPm_1ezV{LaNQk@ZK-Jk9GR$w!Nje5|3jXusj!U(Qai zUkvJ-+*+d6b#ia2=$GNvcWgC^OC<4$%Y;5!M-4veE{R%?qd}wHER^7a-HUeigtBJ_ zm$pJzwbY z^c)-L(}b+0eS|xnIp} zo(iymij++x3t;sH&Cw&PM32z+H|=E78SoC2i0YumnP>o; zLV2m2kysvD4E8=^AMXZ(e<;r61;wo7OYQw+@CtwBO%|9NQVO{=ztw9L_ED88=NxqL zsqAf2J51~hD|sS)?dh@pp@}o4VoDCgu7Sflfx|C8D=Qq3pGI3Z*vTeu4^yFV=opA7 z`V~JKYYpWNa$ct?ot-FMa_Tv%DH#^~=}6z!RjGchpq$)~=QU%d zS6bcrtzFPW^Ph2h36czall?-aKBju`Z@iEjPPBJvut_R9TxRJi4X7^kac{qq*;GuZ zPc$9UUZi-?H-C3l_F{XdZ~`1V6qPA;E;^SM=am5nFb$FhXr9;NC{;;S8pG zq>ZADsHvjl2+8Y&GMWw=dmXqu_bAAf;&`g9sD_Owe-uya@k3#ZQ-u?Rma<4#m}c6% zrYXeeDkVU%xJxEPumiVrbN4ces`&c;1m_?tVbP@N+Phd0`a&It|NW7S);|$(&}7!v zwRvWui-caZUdRV1lB{mVt*epZEG=tWIsG}YaWWwId&9t$>ZJ@mDF^-@^=S)qWXGPE z8T}e-ApOFRC!fr6E2U@i7u#<+$szea&NFISms!CfxeSP zg+cgU1GhVY+tsJ#z?a}4L?JYpdx&g?6@Tki9;t9^VFX*V%r}qxQKa!VcHkotSpyBz zVoIXMv081^;N0EyWzKL4$7(Dpuuk4K-YDu$|6VhJlG$OwI+z_}^n;dhd-$*Apr@~y zELA>|=yDmk=9{PM`gIMVv)i&^z~Rp-qa*x86Vf>}}9 zqe?B}!ZozB+8uAXn`-QUG`U;cbX{wtMV z*^W%p9y}<1yPiC0SjsvQ-SXrL<#CNxo76|8G(HLc#!4daUMJzDt!oK{TQh?DgN^TS@qRa`4Dz8_VQ|oc5jM<{t(`s@+2nuD_~L!p>B#^%0`V?3Rt@H%SU*WfAL-oCXk8=gYd>&Q` z^}4d>^Z=zi?#MEK%J4c}v&x2zL#Rnl#sNFdRY|;27xNTX=T`qZ!w#Eh1IFr=52f83 zY|+>h5~F+JncjG_z+di{kw0vI@_6yTX0M34sdnGSC=ReP$0+u#$bm843VdL$nFu8^ zB7U}4H{^u;FaP$;%*V;_z$UUab-{^TzUn}5IHI2{mP5)=Av7fPVr2s+)_m<;Y>b!G zj2^5jxEG7N(p~atswMA|1@DJt)fX!o=N`?7EA;E|+8rt?)+tDKp_trEZ@gBd&xfr# z$^M?V#f+`_+n5^iWSw$350HQ0$q&h#zYW54yzQ<7Wgg(HZ9VN8*xc}_aNagv(8OCY zdEnI%{#vs;6d^3*JSD#5NBEsbA1}Ug>6<|G$V=a7zH=>Wj|yg_HV~GiPwNCG4pSfh zE57^iBQnPmtCY&#&5go^o00EXc=k9NhmNBp`*WzAMy1e)mMy#JQbq-2(7I&-6^C|^ zX^-6`N={~}aV-j0K_x#j6WJH!gmi_XI8B&HQ#hW-ZF`TsZQ35O<}cRr5LSsTsYOz&Cz7hZW8=0$U^M z6C77u&esLDvd^}(3u!(18(H<)jObF}>;`YkT1Nqz6PY}xd)3Uf#-S)1*eW_%UHRy0 z`Np67bVmKFP@-TN^_V*+3oGqL1B-R+s2w1^lb2vDJo{X@xHY=Ev9mcC zJm*xf-)?&B9}k-p`|Z}o4uvC9kzE|J&am{CQ9R}6-;&k3mUR$8sVAyuj_72hFVl;w z3tEmn%QoWUt)3WAgu!d#2oke${ z2j`&1%L77pDUVDn*%>=~JpvEO*M!HVLPmOw6JWA7|JH_5g3k|wM&)k4(Hd(quBTEF zQHDY@d4>4|kUgp=Plx0ms?%`dJ2T^-{T9u6hy+9plVph#G1EmqE1a_5lD1)3#%E5M zy)dGY#uF=fSSq%VLq`8S?B5s%vIoZgH6yzPt$)ix--Z^8ue+EB%GEk+JGe32#-9Zg1Gn!Qu8JVuG zSYhu3T==Y9rz{J&Pl5S1k;NBM=^EynSL8Ti2*IvtFE6pDMi^fd3@q`bJc_6Nb1r<# z+zBkTnH5biAXN}!;jbJqwC%KkC3TT3HYvrKGo|q$M)5-od8PURXY=8!B2&?Yi3YE& z$%>IcFJaXcwf?Z{J$bt`}S^A1H?3qx}IoBpFi38%5 zPT*ye?8GSRTmr8x>r;+|fQC*Wr?A*el12!{tV4DvDxNUaub*MTs_`r96 zt->5C3}@uLUn@78@SrfiE*oFdKSk^DLPq+Z;Xut8FTj1n>ephmU^isI-0J&l zM|eU^3w;~WME+%B^?IuO9nlk#@|oPa=ey9 z)cGr%m_a>8EXb(RFqK)NrGjIfYz&=s^0f?I%5#Wh=`WV@N`L>4EXOhBebR&@FGD6dv)WE{s2eR2#wxDfU7XB_PSU?` z&T>3$udfc|H4rIWVyYVQ{@I|5^v#p99KZEl#JIDS`xv}YO$v1ld8GWze>cYSQK0XM8ILDc z0;Fr8QYT1$Q?P^$21rkv!qP|i3sHQxM6aJ4D`k$SpoMNz2Uh0rxPPy{1 z(Z*f`9mKzM$o0_E@b~*Os&lj2Z>)i+ML49nZ;+NhRBJm3*?%dik$L3frH>xFx3q?*u zT6W(s)oTBb9Vuj~PP)c=PL$tUDbdi;N8 z<3F_HBn@tC?XcxUEF&BX{rB$aH6u4Toewnlg6z=W&z0U33sYqTw}Oa*3}LC;#++$} zl&3HtzRcl>#+~fcf6b`Bpncq}23F2_Dfl1UqU z$0KOSA8PPF*+YMvQGZYSxF2F5C>-Dxfx$yqK$?wd_5>FI>SITTT(8l3{8C2!TGmi; zeY#wOg#hzlw?lhLJN_Yd&LJBh*wTu!9Fy0JM zXFOx)p4k!-J^dA=uLYOyd~d-=%fZWczQP(>zsq(4y}jzBtsskFJe2Rekte-5K_alljslNhsZjB7#PFK zWgz}p5+*K{d>>t&+GD^j4Voh_vX+O_+s8%wOOo#?KW6xO*~Cp)aZ)xE4g*PSA%G;l zY>44>z@;r8RLvnnUt=V}kT$gt^}~|(Gx5<+WRwpe@G%yhR@9VP^f1(Py7f6%1L(-` z^2sa45YTwfHstON`0kS#+289}jZdMo>pm5|$7T)GLYZw)qZPrnRRERWIS+~Hg7nKc zZE-gRYZdp=Q-^!hsg<02vqN$c+p&qmr$$;Rr`SU9YNY7YNAO?}rxpDn1I$>qd{u z`ZTJ3dg#M%@V<79M^C-c>Z$asBEPoTQ%Am7t-W9EVI6#W)_wmfGiOGr$~Q=!#)hC- zBbJMsc7~*hUoSYQT540H^(E28xcPKMQ_$^&MWY1W>&&IOe1#fkS@3oZCH-L%pPz@k zJ?DuT>F)@i_SP2AL4$2`dr+Vg|8B)bLxSh9C|+-)xtvr>PScIlj`uJ_@BA9R`>uy( zWB*2cGL6EMnC$oMvwiey3I>G}2+PERVT5+UZxOtaK*Sat0G@CbNd@iZy61kt=UEx8 zdm=oF*r<}dfUxdCtKJi#Z)@5u6re*OMAHqn$aCJ31|7#A^8ZBZyFSqQOF3Gef`G6_KvCb#5^ek zmz!S;G}(^&wJNlwro+xEHLR!n?QQV)ieCxBE!mSMK{ZFr@*2^kIB>Fe;3S$~j~a6R zPT;dz%u3%iYkr5?jMT7zN1_!0=GMNSVk1cW@Bu|9C{ z(Rl(>%U#v|p~xG!?kjI2mW0-8DH|TSuj%^Il$$RA$6{7;gVN3|G)#ki23=R)fvts( zD4S)|mJo8IpOc&~xu8gnzKWhEXxi*6jbMu7149d?%5>k>e76Q z$xLm_n4sn^S2K~nnDprjz9%F6s1qA&>P9^gSqG(o!)K7axviy%gU&{4US^uGTSWJf zx|0e}Qv@%IcFc-2J|3>vVUy_wxB?A*7M1Bo@H1K94wS#g8t^-uG>7b}h!))El zM^5I3Nk&j_BBs*BjpDfK7mE4>F9%)UlTo}BGn^H=ievyGFttf^jkH@qJ=m<)?2Bi| zxtgGBt`ch;l@%Mt(PZz^q2h40laanuhX&*8pv@9Hr6DM7emjc7T+kzT6|G3YayVpv zDM>fQE8m#e_&3n>S>4${OG3q>z{PT3E^lfDn z569nAqfeRojzXM}Xf0Be(;@q+%K3}N>*E>4GjMv$xr+^kMr301!8L*wvh+dKXFH&NfK!~re_m(m@S`N!Dsq#Eo z7hBFt9>)0%J=y5BsB7p5($!E$X&Yh6EKeTplM30urk3JUmGf*#A-}I!?vDFAcm4({ zI0VA*h_``N6>s0m8FUxR_$I;sDo+3Kfo$xuE^t!jb3U0VWU@t5x1cF2xhOURFz8tE z6m$4n&{IY*N4v2@marp`&^*b?U-NK8 z7q&x8a3%i=qB;`7tFV}s4HxgYyF6_i7urvyL&fJkFU(j^nWU>L#sq~-J(*V+U}=02 zyM|N_k)_p4L^=7M+-HzD(0Zl+DH+de<3Sq+`zD&iTeVUAvq3JG4D3aADm5%H6ObuP zfvv_QIM`Klh0}dj;GyF1)puvi4>6&Kb3%Ns0g8i6l?MQZ0i7rN%S(EH9rQnDHtTV3 zH_>hd$*^HSoy4^aO0Gl4)iVr2ISKLXnl}7KXtA7Q+;$7Cljx9md;p(+_pYqRU!}GS z7En(&z_D?GVV|5$Sbm`KFNkOya=l3Pso(y9jO~+&CU#Xq3aO`!(xry!LX6f9XNog@ zbLaX?v$H$Gdlt<#iF-&u#weeD0#OTBh^}En&r|;J?`G6DH+r|JDzNnB2fJ>C)UHFC+vhmW*uBgA9lnc_6FM5B*a^ZMqRYG*S z(@AB}>KAl_whpE`wz(wqd+6sVTt z9Ibeq(`S^IFZqOUIFa?bFD6uFjRaZDl8VnYK+%R-OcbC~oj;Mz#H-v$%L6u&G48Y< z@dHoHc>bJ1C9eg)u*$aWm$CF}wjHI6tY;d8bDAb<)jA@CTS2-#rR~+|0Z@Xu1ayZe z6w33ZL-NVz@VS#w|Mys4thgl>a9x9@>ynu81fm*msT?IULlf(^Z!_@uap3dF(;4#> zwp2sZ0c}zAAjLbJ?_#DxW$3MPV<&i0>MS*+Tj5+!CmtvD=^)DowM0Y3d7+YTXy5aL zcV;{fC0Q2FuAIK#m6j0u&rF4_wku`X;M=zesLo5DM06worQ(>4MAU zs=1MEK%h>M+M?XLx62VrJc5YDA?;F0@5k`nEg9`|D)dI7pN0g;myLcmbg3%am@Nm>gb9g;q(d-^vS?Q>e`OK86t7Ujm{UQ-5Eh`Y8=jdz#zEF?Wt_wWgsj~9&UIu+l) zwJ^gzF0$Rc1FQgy@pBWT89Hf<>V6iD<3G_qI8^#Sl=*nN-{~+-#qqL2XB%OazgZ<0 zbG=OK#uHhO_pIMU81gJFgXjJ27Sc7b!MhU}W6fpNac+v-YOZQ4CxAv-Cryqs(cR8^ zoE@~NV|?vIb9330=X*dG9g(KY3$`0DPwu~^ux*XXq`fb zq?6){zc=&oRH?9xqWW_xk@m48dj5?5!6E7TJA8gh*77+|RqA0Bn%b9-UG!@TNqRMZ zmk@%M-y`C1Nc#Q(pQ~AqTSP%}%%Y#tiE|Fvzc6ZIdftk^`!gS};9v{2>V;P_Ucb3t>af9f zUwN2y#8zu@oeoJa*-M$P*Osx4uOSY(vR6Z=Dr1cKIO(UPC@XCT#jS|{gb#0|hl$QN zWG%ls5$aeTnMjNLGK&7xLe~p3rwc^~u+m2K7CMn2+E!Vk*)-C!e)?gY*+;A?KWM~t&#^iwKvE-v&u z$_JxE(nIwEGM_h!yXA17nrtG71KleV?O-@*iL+8j)ZE8zZQ^-<&8Us(&Bf1Etoc4` z(KYJGX;n{1p|Vd4m$Q;7^LFLDK=k=p^QZdyNfuRqO()L6rjGzW(jn=2A3lF?*7~H> z-h{Qv68=VmUYcN#9HGcUE~wkv&^#H+QX84gHWp$l+q?{iZ?Bf5G3M z$$q>*k21+~y?Q7y7BP(K!pZT-#s9iiy3SQ!>&se?u9vH*Wq{=&3o$1bz-ZeXMz`KP zd`{>5Y<&tFO#E|?_@L7LQ(3PIt#70bt3fnd|64DzDM)qwFS7Qqw>;AqfqW&OFCbUZ$I|H9O=|jEhV&a3Hm80Y1m* zp(V5qrbFUM`2cr4@;LA`L)w!VnrEcoW)=`navQ6az(F!Y;B7d`^^BBLiidy6_;KJA z2Ye?HihoPN22tO-W=n#@0^&^=I9O4XJ!2d1+YSDq_~`F=?y=xPyJPUriXig1^aj^i zX%XbAYCqcrIM7peaALhRCUBAb@>$^WYYWGLiz{eWndsQa>b6Y^hp1>pRm}J_BD9Vk ztsKX}nV|8Jal9bsFY1d+htyBBFMHvbaFo%rNx5?dk*Zh?cEMQ)Ff~E4ik8#8FRN`5QpJ;tZhvX}=N2}+K1HWW2 zp@LnPVmM>~$w`i*3*(SM6E8kEiFfdbpXiYIP#l_^Sjgd|?{gUnIWAA?I<50~*M4eIChy5d>x0H`>ofquDf;iC!7E zD94}TX#OLkdhhAuKOYAVnKVZ~9gSWD6Y0_e+GPI>N${5b4CzHLK5`fyC7cK(n|{dzcFrz?Hr=}>Gwa5 zdEbcI=x*>4yV2$78@Cr^duAOn@&|oWru86Pc3u<_p;FFg_UNZBh*d`0oXd%3+E=GT z@;Uuo@{VJ?)$R2p$?C61qZ+{my5?l`$~+9I?`Yrozuj;gbSHM2lf)-ZIU)k)N*lDw zz6o;NX&?7TzLaG?yNl2HX0_gs$CQ9s~t9#Tb}`nJ#PWyO^1xT`Jedw_ixWAp0->e zZz}@DN2zimwMna1_E5}zGOYS$P9WFh+8NQ9Yxj{m7ua>4r1np|5aWq)zt+Bj-g+oi zg~E)orHU+;tD>kys2aN@`jePjglz<1OswgpUR&TP>#);)(`RnUNS?H}qa9g9d+rdx z*5H=t*Hj#5C+059&lkR{FnwWsLK=s_wH0>QJi(e0UX)M1wXohPw_1hqb{P6CRE58( zuvpy-Q1d=$XsPd7=u9fear3MdpM9?I3|90JaHsWpFEjY~LHPT}zL1f=mefl=E}_wZ z6>|E4^QW}Bv`f2WUHi2v3u~#OvK5)+^%&4(H?rAa7Yzx5eN+Q%_8<@wvboSk6>9vY z4{T2~5%nc-i^=Yd$W;)XD=+D9-luoHufA=2PSTq0g)JOhde1| zyj-XL3sm`goK(;W^oFaVY-_EsR&BP+wJLgY-E#7DfA8KY+|EN$q3v2wZsD!@YKbb$ z#CH}WHy#H2)byQ44~o($nF5-K(6>c&C(Q%|+k-s0PbG2K2M#^Q zfkRk6fVl6ln#a7C!?Sfpc+Qc9BFPAcKZIn0j)xd}gZzlIUnjV%lpz;|iLGiYBTSSB zFfi~B&0};(KKVR8PaOju#aZ&&jQUvHysj(lfY&8IB*D9 zisK5}b0`R0FO4}K-<^{i)z_1B--Yj&kAdz<)DEV=PB#2VELuPdw2p$n_2vQV^FTZ0 ztSO<_#DVg$j)O0zf?$g? zMQlG@Z(fL=0UD*>S<-zEzFRnk@t-au`xWim(BLeZF0VJ;(KA4!+*g!zQ{MXOanOzK zR`XOKK0~s_BS4|&nfCJE>oPhxKo|Lkz*M5`Jj!m z-wNT^Ys%v{_P)Z&jOe8O)#F$fEl?@@g90{dDLob1Pdp6>7 z-%;v?H{#psanMb@_~3=dzxSEtZO$?z#EAQIMmP20`|FkEkY&-qMXKy|a|ko@pLe13M`xWJuS-b8Eno9l(K0M%a6L=ig<3S(SvL~M^^ zFnB`(kM9?Ga6g5wU-G~kysus3(Nk}A?Fo-AU0N9`kf`|!^~`AUHQVA0w{_t-{ZtlGljnA)N7RdaE#11Fo0$~jled~({| zV|yxR=Qq!{FKxG5>wD6F+Wo_%mwFz3wW&i(!*@962Mye)kIbVdv+>KP~UbN`nMJG%jLf=*&Xptc3hT&be<8G*_Ennd$@ z>Nb!D=*Z6ag|&^D&E>Z2?q}h~E+2dpRO9{xQXf*CtTUU(f$IPO>_>TVtfTO0p&Eu* zS(N<^ zerJK&Y5TAzntV$U-0BEQE^6pn-MhJX@n1@HO?pT6U@pT6UTpT6T~@Kp(1 zHb#h@C}QPD6U$~NeM+7VRxZ!aU0uAmo-(T(^0clIl*T^V38S#qn~}lN>yF(1epQCPcO^ zP`nk|(xt!IQhr23mUaupc6VF0TS|-y!GstS4|-KRYDheDP&}!Bf+QY1pqxxRnRwvf zd)rRI=}wqEG`puR32)m^-n{+Jn>TMJjJoD)togz*TG4SBcW(vO4ixdVJo3U2d3A(;m4pU3k{tm7g{Fiv3UBWMT~xLlx` zTCL2AY2Ijc{-YcbrQ_He7_XoE-R6mU61s0#hYSyhOnAlAhM5+`VIw}n7sn{O4oKam z;@ArK-QI!QoKQSUdZ`A=6a;-#Thp=mAS91i?v|X^^Nqq-LXtQmKl2F=*a0e!pW-LO z{WHaFeyAd)Jcw4M1`S5BmM;#Ym<4Z0F%-3-ib8{)oil=*y?ICEu2S4i;Qm67_L1=G z4Ahmav<8b+r8X$dZd8+cf}VdfSe=@5#0U4y<3-*FRrvhyuFHNU3;~~@x?WP)BQcVw zX9U5>O{siu%(FHf5F+Qp5k4P**WXvYscYx<9|3dTnL6OH##{vR6zVd|l_IN?LnU)O z>o4x-|&8b-hRX_V~G>z872d=&ei`i`mj#F&YcYq2;c$w*BxEx-2{7 zMf=%%VAyx)wx6LIPsjzuT0Ft<4%rCijCyfVTNsSbF9dWxH6hqqcgT(Og(2f}8@TQ6 zxE;Sxox?(UZM9yZkM`_H{z6t%~&CFkbiD>vT(S|Jv&|9~9xI zNmbS$%oJB*d71Uc&qE(}>&tg#vpTOYJ(1gIjremWP!>xx`p39P*EFN(t5jxXBUy zPPjb<|N7mdewX|@0>yTC9f}l~37zU_CXv+!(<4zn{VtrEMmR&P(HjlBv3^=9h=3`Cf+XCpe8XbA#sQFGrtAns{c=4PwJa~>_0i)+5h?B zEqtltZCLtyceJ^Cw6%G(xp(wv>jrEFHfnX;?k<<<>ZMlWz$r+-RGL@?RT`KGK@pF- lTvpn9$Ae`^&cM0gc$WOMmcK_(bROEqb>4%?F~(zF&p$_77wZ53 literal 0 HcmV?d00001 diff --git a/.config/cmus/command-history b/.config/cmus/command-history new file mode 100644 index 0000000..5ef4cf4 --- /dev/null +++ b/.config/cmus/command-history @@ -0,0 +1,7 @@ +add ~/Music +clear +add Music/ +add /mnt/c/Users/mchalupi/Music/ +add ~/Music/ +add ./ +add ./* diff --git a/.config/cmus/lib.pl b/.config/cmus/lib.pl new file mode 100644 index 0000000..a53a05d --- /dev/null +++ b/.config/cmus/lib.pl @@ -0,0 +1,1355 @@ +/home/mikec/Music/Creed- Higher [sHcYaS3m1c4].opus +/home/mikec/Music/Green Day - Longview.mp3 +/home/mikec/Music/Tom Petty- Runnin' Down A Dream [QrNdBU_gb7o].opus +/home/mikec/Music/3 Doors Down - Kryptonite.wma +/home/mikec/Music/3 Doors Down/Unknown Album/3 Doors Down - Kryptonite.m4a +/home/mikec/Music/3 Doors Down - Loser.wma +/home/mikec/Music/3 Doors Down/Unknown Album/3 Doors Down - Loser.m4a +/home/mikec/Music/3 Doors Down - Loser.mp3 +/home/mikec/Music/3 Doors Down - Be Like That (acoustic).mp3 +/home/mikec/Music/3 Doors Down - Be Like That (acoustic).wma +/home/mikec/Music/ACDC - Love Song.wma +/home/mikec/Music/AC-DC/Unknown Album/ACDC - Love Song.m4a +/home/mikec/Music/ACDC - Rock ’n’ Roll Ain’t Noise Pollution.wma +/home/mikec/Music/AC-DC/Unknown Album/ACDC - Rock ’n’ Roll Ain’t Noise Pollution.m4a +/home/mikec/Music/ACDC - The Jack.wma +/home/mikec/Music/AC-DC/Unknown Album/ACDC - The Jack.m4a +/home/mikec/Music/ACDC - Live Wire - High Voltage.wma +/home/mikec/Music/AC-DC/Unknown Album/ACDC - Live Wire - High Voltage.m4a +/home/mikec/Music/ACDC - T.N.T..wma +/home/mikec/Music/AC-DC/Unknown Album/ACDC - T.N.T..m4a +/home/mikec/Music/ACDC - She’s Got Balls.wma +/home/mikec/Music/AC-DC/Unknown Album/ACDC - She’s Got Balls.m4a +/home/mikec/Music/ACDC - High Voltage.mp3 +/home/mikec/Music/ACDC - High Voltage.wma +/home/mikec/Music/AC-DC/Unknown Album/ACDC - High Voltage.m4a +/home/mikec/Music/ACDC - Can I Sit Next to You Girl.mp3 +/home/mikec/Music/ACDC - Can I Sit Next to You Girl.wma +/home/mikec/Music/AC-DC/Unknown Album/ACDC - Can I Sit Next to You Girl.m4a +/home/mikec/Music/AC-DC/Unknown Album/ACDC - Whole Lotta Rosie.m4a +/home/mikec/Music/ACDC - Whole Lotta Rosie.wma +/home/mikec/Music/ACDC - Hell's Bell.mp3 +/home/mikec/Music/ACDC - Live Wire.mp3 +/home/mikec/Music/ACDC - T.N.T..mp3 +/home/mikec/Music/ACDC - She’s Got Balls.mp3 +/home/mikec/Music/ACDC - Love Song.mp3 +/home/mikec/Music/Stereo MCs - Creation.mp3 +/home/mikec/Music/ACDC - The Jack.mp3 +/home/mikec/Music/Aerosmith - Janie's Got a Gun.mp3 +/home/mikec/Music/Aerosmith - Leaving On A Jet Plane.mp3 +/home/mikec/Music/Aerosmith - Livin’ on the Edge.mp3 +/home/mikec/Music/Aerosmith - Love in an Elevator.mp3 +/home/mikec/Music/Aerosmith - Pink.mp3 +/home/mikec/Music/Aerosmith - Walk This Way.mp3 +/home/mikec/Music/Aerosmith - Toys in the Attic (5.1 mix).mp3 +/home/mikec/Music/Aerosmith - Dream On.mp3 +/home/mikec/Music/Aerosmith - Back in the Saddle.mp3 +/home/mikec/Music/Aerosmith - Come Together.mp3 +/home/mikec/Music/Aerosmith - Dude (Looks Like a Lady).mp3 +/home/mikec/Music/Derek St. Holmes - Mama Kin.mp3 +/home/mikec/Music/Aerosmith - Dulcimer Stomp The Other Side.wma +/home/mikec/Music/Aerosmith/Pump/Aerosmith - Dulcimer Stomp The Other Side.m4a +/home/mikec/Music/Aerosmith - Crazy.mp3 +/home/mikec/Music/Aerosmith - Crying.mp3 +/home/mikec/Music/Aerosmith - Rag Doll.mp3 +/home/mikec/Music/Aerosmith - Train Kept a Rollin’.mp3 +/home/mikec/Music/Aerosmith - Sweet Emotion.mp3 +/home/mikec/Music/Aerosmith - Armageddon I Don’t Want to Miss a Thing.mp3 +/home/mikec/Music/Alabama - I'm In A Hurry (And I Don't Know Why).mp3 +/home/mikec/Music/Alabama - Mountain Music.mp3 +/home/mikec/Music/Dark Tranquillity - Away, Delight, Away (demo).mp3 +/home/mikec/Music/Alabama - Song of the South.mp3 +/home/mikec/Music/Alabama - Born Country.mp3 +/home/mikec/Music/Alabama - If You're Gonna to Play in Texas.mp3 +/home/mikec/Music/Alabama - Love in the First Degree.mp3 +/home/mikec/Music/Alan Jackson - Tall, Tall Trees.mp3 +/home/mikec/Music/Alan Jackson - Remember When.mp3 +/home/mikec/Music/Alan Jackson - Chattahoochee.mp3 +/home/mikec/Music/Alan Jackson - I’ll Go On Loving You.mp3 +/home/mikec/Music/Alan Jackson - Where Do I Go From Here (A Trucker's Song).mp3 +/home/mikec/Music/Alan Jackson - Work in Progress.mp3 +/home/mikec/Music/Alan Jackson - Designated Drinker.mp3 +/home/mikec/Music/Alan Jackson - Little Bitty.mp3 +/home/mikec/Music/Alan Jackson - Who's Cheatin' Who.mp3 +/home/mikec/Music/Alan Jackson - Little Man.mp3 +/home/mikec/Music/Alan Jackson - It’s Five O’Clock Somewhere.mp3 +/home/mikec/Music/Alan Jackson - Good Time.mp3 +/home/mikec/Music/Alice Cooper - No More Mr. Nice Guy.mp3 +/home/mikec/Music/Alice Cooper - Poison.wma +/home/mikec/Music/Alice Cooper/Unknown Album/Alice Cooper - Poison.m4a +/home/mikec/Music/Alice Cooper - Poison.mp3 +/home/mikec/Music/Alice in Chains - Them Bones.wma +/home/mikec/Music/Alice In Chains/Unknown Album/Alice in Chains - Them Bones.m4a +/home/mikec/Music/Alice in Chains - No Excuses.wma +/home/mikec/Music/Alice In Chains/Unknown Album/Alice in Chains - No Excuses.m4a +/home/mikec/Music/Alice in Chains - Rooster.wma +/home/mikec/Music/Alice In Chains/Unknown Album/Alice in Chains - Rooster.m4a +/home/mikec/Music/Alice In Chains/Unknown Album/Alice in Chains - Would.m4a +/home/mikec/Music/Alice in Chains - Would.wma +/home/mikec/Music/Alice in Chains - Down in a Hole.mp3 +/home/mikec/Music/Alice in Chains - Down in a Hole.wma +/home/mikec/Music/Alice In Chains/Unknown Album/Alice in Chains - Down in a Hole.m4a +/home/mikec/Music/Alice in Chains - Rooster.mp3 +/home/mikec/Music/Alice in Chains - Would.mp3 +/home/mikec/Music/Alice in Chains - Them Bones.mp3 +/home/mikec/Music/Alicia Keys - Fallin’.mp3 +/home/mikec/Music/Allman Brothers Band - One Way Out.mp3 +/home/mikec/Music/Amy Winehouse - Rehab.mp3 +/home/mikec/Music/Angel Voices - I Still Haven't Found What I'm Looking For.mp3 +/home/mikec/Music/Arctic Monkeys - R U Mine.mp3 +/home/mikec/Music/Arctic Monkeys - Do I Wanna Know.mp3 +/home/mikec/Music/Asobi Seksu - Thursday.mp3 +/home/mikec/Music/Assembly of Dust - Pedal Down.mp3 +/home/mikec/Music/Assembly of Dust - Second Song.mp3 +/home/mikec/Music/Assembly of Dust - Light Blue Lover.mp3 +/home/mikec/Music/Assembly of Dust - Leadbelly.mp3 +/home/mikec/Music/Assembly of Dust - Revelry.mp3 +/home/mikec/Music/Assembly of Dust - Straight.mp3 +/home/mikec/Music/Assembly of Dust - You Lay the Dust.mp3 +/home/mikec/Music/Ironsword - Valhalla.mp3 +/home/mikec/Music/Assembly of Dust - All That I Am Now.mp3 +/home/mikec/Music/Assembly of Dust - Cold Coffee.mp3 +/home/mikec/Music/Assembly of Dust - Arc of the Sun.mp3 +/home/mikec/Music/Assembly of Dust - Edges.mp3 +/home/mikec/Music/Assembly of Dust - Borrowed Feet (Live).mp3 +/home/mikec/Music/Assembly of Dust - Borrowed Feet.mp3 +/home/mikec/Music/Assembly of Dust - High Brow.mp3 +/home/mikec/Music/Audioslave - Show Me How to Live.wma +/home/mikec/Music/Audioslave/Unknown Album/Audioslave - Show Me How to Live.m4a +/home/mikec/Music/Audioslave - Like a Stone.wma +/home/mikec/Music/Audioslave/Unknown Album/Audioslave - Like a Stone.m4a +/home/mikec/Music/Audioslave - Set It Off.wma +/home/mikec/Music/Audioslave/Unknown Album/Audioslave - Set It Off.m4a +/home/mikec/Music/Audioslave - Show Me How to Live.mp3 +/home/mikec/Music/Audioslave - Like a Stone.mp3 +/home/mikec/Music/Audioslave - Set It Off.mp3 +/home/mikec/Music/Audioslave - Cochise.wma +/home/mikec/Music/Audioslave/Unknown Album/Audioslave - Cochise.m4a +/home/mikec/Music/Audioslave/Unknown Album/Audioslave - I Am a Highway.m4a +/home/mikec/Music/Audioslave - I Am the Highway.mp3 +/home/mikec/Music/Audioslave - I Am the Highway.wma +/home/mikec/Music/Audioslave - Doesn’t Remind Me.mp3 +/home/mikec/Music/Autograph - Turn Up the Radio.wma +/home/mikec/Music/Autograph/Unknown Album/Autograph - Turn Up the Radio.m4a +/home/mikec/Music/Autograph - Turn Up the Radio.mp3 +/home/mikec/Music/Avril Lavigne - Complicated (instrumental).mp3 +/home/mikec/Music/AWOLNATION - Sail.mp3 +/home/mikec/Music/Bad Religion - Infected.mp3 +/home/mikec/Music/Bad Religion - 21st Century (Digital Boy).mp3 +/home/mikec/Music/Yom Kippur war song - day of judgementשירי מלחמת יום הכיפורים יום הדין يوم الحساب حرب أكتوبر.mp3 +/home/mikec/Music/Beastie Boys - Sabotage (LP version).mp3 +/home/mikec/Music/Better Than Ezra - Good.mp3 +/home/mikec/Music/Better Than Ezra - Desperately Wanting.mp3 +/home/mikec/Music/The Black Keys - Countdown.mp3 +/home/mikec/Music/Big & Rich - Save a Horse (Ride a Cowboy).mp3 +/home/mikec/Music/Big & Rich - Lost in This Moment.mp3 +/home/mikec/Music/Bill Withers - Ain’t No Sunshine.mp3 +/home/mikec/Music/Must Be Doing Something Right.mp3 +/home/mikec/Music/Billy Currington - People Are Crazy.mp3 +/home/mikec/Music/Billy Currington - Walk a Little Straighter.mp3 +/home/mikec/Music/Black Sabbath - War Pigs Luke’s Wall.mp3 +/home/mikec/Music/Black Sabbath - Paranoid.mp3 +/home/mikec/Music/Black Sabbath - Iron Man.mp3 +/home/mikec/Music/Blind Melon - No Rain.mp3 +/home/mikec/Music/BloodKin - Never in Vain.mp3 +/home/mikec/Music/Blur - Song 2.wma +/home/mikec/Music/Blur/Unknown Album/Blur - Song 2.m4a +/home/mikec/Music/Bob Acri - Sleep Away.mp3 +/home/mikec/Music/Bob Carlisle - Butterfly Kisses.wma +/home/mikec/Music/Conway Twitty/Unknown Album/Bob Carlisle - Butterfly Kisses.m4a +/home/mikec/Music/Bob Dylan - Like a Rolling Stone.mp3 +/home/mikec/Music/Bon Jovi - You Give Love a Bad Name.mp3 +/home/mikec/Music/Bon Jovi - Livin’ on a Prayer.mp3 +/home/mikec/Music/Bon Jovi - Wanted Dead or Alive.mp3 +/home/mikec/Music/Bon Jovi - Never Say Goodbye.mp3 +/home/mikec/Music/3 Doors Down/Unknown Album/Bon Jovi - I Wish Everyday Could Be Like Christmas.m4a +/home/mikec/Music/Brad Paisley - Alcohol (radio version).wma +/home/mikec/Music/Brad Paisley/Top Hits USA T795/Brad Paisley - Alcohol (radio version).m4a +/home/mikec/Music/Brad Paisley - The World.mp3 +/home/mikec/Music/Bruno Mars - The Lazy Song.mp3 +/home/mikec/Music/Bruno Mars - Grenade.mp3 +/home/mikec/Music/Stone Temple Pilots - Wicked Garden.mp3 +/home/mikec/Music/Buckcherry - Sorry.mp3 +/home/mikec/Music/Bush - Little Things.mp3 +/home/mikec/Music/Bush - Comedown.mp3 +/home/mikec/Music/Bush - Glycerine.mp3 +/home/mikec/Music/Bush - Glycerine.wma +/home/mikec/Music/Bush/Unknown Album/Bush - Glycerine.m4a +/home/mikec/Music/Butthole Surfers - Pepper (Butcha' Bros. Remix).mp3 +/home/mikec/Music/Cage the Elephant - Come a Little Closer.mp3 +/home/mikec/Music/CAKE - Short SkirtLong Jacket.mp3 +/home/mikec/Music/CAKE - You Part the Waters.mp3 +/home/mikec/Music/Candlebox - You.mp3 +/home/mikec/Music/Candlebox - Far Behind.mp3 +/home/mikec/Music/Carrie Underwood - Last Name.mp3 +/home/mikec/Music/Céline Dion - It’s All Coming Back to Me Now.mp3 +/home/mikec/Music/Céline Dion - The Power of Love.mp3 +/home/mikec/Music/Chad Kroeger - Hero (radio version).mp3 +/home/mikec/Music/Charlie Daniels - Uneasy Rider.mp3 +/home/mikec/Music/The Charlie Daniels Band - The Legend of Wooley Swamp.mp3 +/home/mikec/Music/Cherry Poppin’ Daddies - Zoot Suit Riot.mp3 +/home/mikec/Music/Creed- Higher.mp3 +/home/mikec/Music/Creed- Higher.mp3_ +/home/mikec/Music/Christina Aguilera - Candyman.mp3 +/home/mikec/Music/ZZ Top - Esther Be The One.mp3 +/home/mikec/Music/Cinderella - Nobody’s Fool.wma +/home/mikec/Music/Cinderella/Unknown Album/Cinderella - Nobody’s Fool.m4a +/home/mikec/Music/Cinderella - Nobody’s Fool.mp3 +/home/mikec/Music/Clarence Carter - Strokin'.mp3 +/home/mikec/Music/Simple Man - Lynyrd Skynyrd - Lyrics HD.mp3 +/home/mikec/Music/Collective Soul - Shine (Official Audio).mp3 +/home/mikec/Music/Collective Soul - The World I Know.mp3 +/home/mikec/Music/Collective Soul - Why, Pt. 2.mp3 +/home/mikec/Music/Collective Soul - Where the River Flows.mp3 +/home/mikec/Music/Collective Soul - Heavy.mp3 +/home/mikec/Music/Corey Taylor - Bother.mp3 +/home/mikec/Music/Counting Crows - Round Here.mp3 +/home/mikec/Music/Counting Crows - Mr. Jones.mp3 +/home/mikec/Music/Counting Crows - Children in Bloom.mp3 +/home/mikec/Music/Counting Crows - Have You Seen Me Lately.mp3 +/home/mikec/Music/Counting Crows - Another Horsedreamer’s Blues.mp3 +/home/mikec/Music/Counting Crows - Daylight Fading.mp3 +/home/mikec/Music/Counting Crows - I’m Not Sleeping.mp3 +/home/mikec/Music/Counting Crows - Goodnight Elisabeth.mp3 +/home/mikec/Music/Counting Crows - Miller’s Angels.mp3 +/home/mikec/Music/Counting Crows - Recovering the Satellites.mp3 +/home/mikec/Music/Counting Crows - Monkey.mp3 +/home/mikec/Music/Counting Crows - Mercury.mp3 +/home/mikec/Music/Counting Crows - Walkaways.mp3 +/home/mikec/Music/Counting Crows - A Long December.mp3 +/home/mikec/Music/Counting Crows - Hanginaround.mp3 +/home/mikec/Music/Counting Crows - Hanging Around.mp3 +/home/mikec/Music/Dashboard Confessional - Angels of the Silences.mp3 +/home/mikec/Music/Counting Crows - Catapult.mp3 +/home/mikec/Music/Craig Morgan - That's What I Love About Sunday.mp3 +/home/mikec/Music/Cream - Sunshine of Your Love.wma +/home/mikec/Music/Cream/Unknown Album/Cream - Sunshine of Your Love.m4a +/home/mikec/Music/Cream/Unknown Album/Cream - White Room.m4a +/home/mikec/Music/Cream - White Room.wma +/home/mikec/Music/Cream - Crossroads.wma +/home/mikec/Music/Cream/Unknown Album/Cream - Crossroads.m4a +/home/mikec/Music/Eric Clapton - Crossroads.mp3 +/home/mikec/Music/Cream - Sunshine of Your Love.mp3 +/home/mikec/Music/Cream - White Room.mp3 +/home/mikec/Music/Creed - One Last Breath.wma +/home/mikec/Music/Creed/Weathered/Creed - One Last Breath.m4a +/home/mikec/Music/Creed - My Own Prison.mp3 +/home/mikec/Music/Creed - With Arms Wide Open.mp3 +/home/mikec/Music/Creedence Clearwater Revival - Have You Ever Seen The Rain.mp3 +/home/mikec/Music/Creedence Clearwater Revival - Up Around The Bend.mp3 +/home/mikec/Music/Creedence Clearwater Revival - Who'll Stop The Rain.mp3 +/home/mikec/Music/Creedence Clearwater Revival - Bad Moon Rising.mp3 +/home/mikec/Music/Creedence Clearwater Revival - Fortunate Son.mp3 +/home/mikec/Music/Lookin' Out My Back Door.mp3 +/home/mikec/Music/Factorio OST - 10 - The Search for Iron.mp3 +/home/mikec/Music/Factorio OST - 11 - Solar Intervention.mp3 +/home/mikec/Music/Factorio OST - 12 - Turbine Dynamics.mp3 +/home/mikec/Music/Factorio OST - 13 - Anomaly (Interlude).mp3 +/home/mikec/Music/Factorio OST - 14 - Beyond Factory Outskirts.mp3 +/home/mikec/Music/Factorio OST - 15 - The Oil Industry.mp3 +/home/mikec/Music/Factorio OST - 16 - Automation.mp3 +/home/mikec/Music/Factorio OST - 17 - Transmit (Interlude).mp3 +/home/mikec/Music/Factorio OST - 18 - cenSeq's Discrepancy.mp3 +/home/mikec/Music/Factorio OST - 19 - Efficiency Program.mp3 +/home/mikec/Music/Factorio OST - 1 - After the Crash.mp3 +/home/mikec/Music/Factorio OST - 20 - Sentient.mp3 +/home/mikec/Music/Factorio OST - 21 - World Ambience 1.mp3 +/home/mikec/Music/Factorio OST - 22 - World Ambience 2.mp3 +/home/mikec/Music/Factorio OST - 23 - World Ambience 3.mp3 +/home/mikec/Music/Factorio OST - 24 - World Ambience 4.mp3 +/home/mikec/Music/Factorio OST - 25 - Factorio Trailer _BONUS_.mp3 +/home/mikec/Music/Factorio OST - 26 - Factorio Gameplay Trailer _BONUS_.mp3 +/home/mikec/Music/Factorio OST - 2 - The Right Tools.mp3 +/home/mikec/Music/Factorio OST - 3 - Resource Deficiency (Interlude).mp3 +/home/mikec/Music/Factorio OST - 4 - Are We Alone.mp3 +/home/mikec/Music/Factorio OST - 5 - First Light (Interlude).mp3 +/home/mikec/Music/Factorio OST - 6 - Research and Minerals.mp3 +/home/mikec/Music/Factorio OST - 7 - Gathering Horizon.mp3 +/home/mikec/Music/Factorio OST - 8 - Expansion.mp3 +/home/mikec/Music/Factorio OST - 9 - Pollution (Interlude).mp3 +/home/mikec/Music/Cupid - Cupid Shuffle.mp3 +/home/mikec/Music/Cypress Hill - Insane in the Brain.mp3 +/home/mikec/Music/Dan Auerbach - Shine on Me.mp3 +/home/mikec/Music/Dan Auerbach - Trouble Weighs a Ton.mp3 +/home/mikec/Music/Dan Auerbach - I Want Some More.mp3 +/home/mikec/Music/Dan Auerbach - Heartbroken, in Disrepair.mp3 +/home/mikec/Music/Dan Auerbach - Because I Should.mp3 +/home/mikec/Music/Dan Auerbach - Whispered Words (Pretty Lies).mp3 +/home/mikec/Music/Dan Auerbach - Real Desire.mp3 +/home/mikec/Music/Dan Auerbach - When the Night Comes.mp3 +/home/mikec/Music/Dan Auerbach - Mean Monsoon.mp3 +/home/mikec/Music/Dan Auerbach - The Prowl.mp3 +/home/mikec/Music/Dan Auerbach - Keep It Hid.mp3 +/home/mikec/Music/Dan Auerbach - My Last Mistake.mp3 +/home/mikec/Music/Dan Auerbach - When I Left the Room.mp3 +/home/mikec/Music/Dan Auerbach - Street Walkin'.mp3 +/home/mikec/Music/Dan Auerbach - Goin’ Home.mp3 +/home/mikec/Music/Dan Auerbach - Waiting on a Song.mp3 +/home/mikec/Music/Dan Auerbach - Malibu Man.mp3 +/home/mikec/Music/Dan Auerbach - Livin’ in Sin.mp3 +/home/mikec/Music/Dan Auerbach - King of a One Horse Town.mp3 +/home/mikec/Music/Dan Auerbach - King Of A One Horse Town _Official Music Video_.mp3 +/home/mikec/Music/Dan Auerbach - Never in My Wildest Dreams.mp3 +/home/mikec/Music/Dan Auerbach - Cherrybomb.mp3 +/home/mikec/Music/Dan Auerbach - Stand by My Girl.mp3 +/home/mikec/Music/Dan Auerbach - Undertow.mp3 +/home/mikec/Music/Dan Auerbach - Show Me.mp3 +/home/mikec/Music/EL SHADDAI BY AMY GRANT.mp3 +/home/mikec/Music/Danzig - Mother.mp3 +/home/mikec/Music/Darryl Worley - Sounds Like Life to Me.mp3 +/home/mikec/Music/Daughtry - Over You.mp3 +/home/mikec/Music/Talking Heads - _Nothing But_ Flowers (Official Video).mp3 +/home/mikec/Music/Days of the New - Touch, Peel and Stand.mp3 +/home/mikec/Music/Default - Wasting My Time.mp3 +/home/mikec/Music/Derek and the Dominos - Layla (5.1 mix).wma +/home/mikec/Music/Derek And The Dominos/Unknown Album/Derek and the Dominos - Layla (5.1 mix).m4a +/home/mikec/Music/Derek and the Dominos - Layla.mp3 +/home/mikec/Music/Derek and the Dominos - Bell Bottom Blues.mp3 +/home/mikec/Music/Derek And The Dominos/Unknown Album/Eric Clapton - Bell Bottom Blues.m4a +/home/mikec/Music/Eric Clapton - Bell Bottom Blues.wma +/home/mikec/Music/Dierks Bentley - Am I the Only One.mp3 +/home/mikec/Music/Dio - Rainbow in the Dark.mp3 +/home/mikec/Music/3 Doors Down - Kryptonite.mp3 +/home/mikec/Music/Disturbed - Remember.wma +/home/mikec/Music/Disturbed/Unknown Album/Disturbed - Remember.m4a +/home/mikec/Music/Genesis - Land of Confusion.mp3 +/home/mikec/Music/Don Henley - The Boys of Summer.mp3 +/home/mikec/Music/Don Henley - Dirty Laundry.mp3 +/home/mikec/Music/Eagles - Lyin’ Eyes.mp3 +/home/mikec/Music/Eagles - Smugglers Blues.mp3 +/home/mikec/Music/Eagles - Take It to the Limit.mp3 +/home/mikec/Music/Eagles - Desperado.mp3 +/home/mikec/Music/Eagles - Already Gone.mp3 +/home/mikec/Music/Eagles - Tequila Sunrise.mp3 +/home/mikec/Music/Eddie Rabbitt - Drivin’ My Life Away.mp3 +/home/mikec/Music/Eddie Vedder - You’ve Got to Hide Your Love Away.mp3 +/home/mikec/Music/Elizabeth Cook - Times Are Tough in Rock 'n' Roll.mp3 +/home/mikec/Music/Eminem - Lose Yourself.mp3 +/home/mikec/Music/Audioslave/Unknown Album/Enter the Haggis - Gasoline.m4a +/home/mikec/Music/Enter the Haggis - Gasoline.mp3 +/home/mikec/Music/Enter the Haggis - Gasoline.wma +/home/mikec/Music/Eric Clapton - Tears in Heaven (live).mp3 +/home/mikec/Music/Eric Clapton - Let It Rain.wma +/home/mikec/Music/Eric Clapton/Unknown Album/Eric Clapton - Let It Rain.m4a +/home/mikec/Music/Eric Clapton/Unknown Album/Eric Clapton - I Shot the Sheriff (5.1 mix).m4a +/home/mikec/Music/Eric Clapton/Unknown Album/Eric Clapton - Wonderful Tonight.m4a +/home/mikec/Music/Eric Clapton - Wonderful Tonight.wma +/home/mikec/Music/Eric Clapton - Promises.wma +/home/mikec/Music/Eric Clapton/Unknown Album/Eric Clapton - Promises.m4a +/home/mikec/Music/Eric Clapton - Let It Rain.mp3 +/home/mikec/Music/Eric Clapton - I Shot the Sheriff.mp3 +/home/mikec/Music/Eric Clapton - Wonderful Tonight.mp3 +/home/mikec/Music/Eric Clapton - Promises.mp3 +/home/mikec/Music/Eric Clapton - After Midnight.mp3 +/home/mikec/Music/Eric Clapton/Unknown Album/Eric Clapton - After Midnight.m4a +/home/mikec/Music/Eric Clapton - I Shot the Sheriff (5.1 mix).wma +/home/mikec/Music/Eric Clapton - Cocaine.mp3 +/home/mikec/Music/Eric Clapton - Cocaine.wma +/home/mikec/Music/Eric Clapton/Unknown Album/Eric Clapton - Cocaine.m4a +/home/mikec/Music/Eric Clapton - I Can’t Stand It.mp3 +/home/mikec/Music/Eric Clapton - I Can’t Stand It.wma +/home/mikec/Music/Eric Clapton/Unknown Album/Eric Clapton - I Can’t Stand It.m4a +/home/mikec/Music/Eric Clapton - Change the World.mp3 +/home/mikec/Music/Europe - The Final Countdown (live).wma +/home/mikec/Music/Europe/Unknown Album/Europe - The Final Countdown (live).m4a +/home/mikec/Music/Europe - The Final Countdown.mp3 +/home/mikec/Music/Evanescence - Going Under.mp3 +/home/mikec/Music/Evanescence - Bring Me To Life (Instrumental).mp3 +/home/mikec/Music/Everclear - Santa Monica.mp3 +/home/mikec/Music/The Coasters Sh Boom Life Could Be A Dream.mp3 +/home/mikec/Music/Fatal Shore - Real World.wma +/home/mikec/Music/Matchbox 20/Unknown Album/Fatal Shore - Real World.m4a +/home/mikec/Music/Fatal Shore - Real World.mp3 +/home/mikec/Music/Fatboy Slim - The Rockafeller Skank.mp3 +/home/mikec/Music/Filter - Hey Man, Nice Shot (Bud Gets the Lead Out).mp3 +/home/mikec/Music/Finger Eleven - Paralyzer (Official Audio).mp3 +/home/mikec/Music/Finger Eleven - Paralyzer (Official Audio).mp3_ +/home/mikec/Music/Finger Eleven - One Thing.mp3 +/home/mikec/Music/Five for Fighting - 100 Years.mp3 +/home/mikec/Music/Flogging Molly/Swagger/Flogging Molly - The Worst Day Since Yesterday.m4a +/home/mikec/Music/Flogging Molly - The Worst Day Since Yesterday.wma +/home/mikec/Music/Flogging Molly - The Worst Day Since Yesterday.mp3 +/home/mikec/Music/Foo Fighters - Monkey Wrench.mp3 +/home/mikec/Music/Foo Fighters - The Pretender.mp3 +/home/mikec/Music/Foo Fighters - Baker Street.mp3 +/home/mikec/Music/Foo Fighters/Foo Fighters/Foo Fighters - I’ll Stick Around.m4a +/home/mikec/Music/Foo Fighters - I’ll Stick Around.wma +/home/mikec/Music/Foo Fighters - I’ll Stick Around.mp3 +/home/mikec/Music/Foo Fighters - Big Me.mp3 +/home/mikec/Music/Foo Fighters - My Hero.mp3 +/home/mikec/Music/Foo Fighters - Everlong.mp3 +/home/mikec/Music/Foo Fighters - Learn to Fly.mp3 +/home/mikec/Music/Foo Fighters - Weenie Beenie.mp3 +/home/mikec/Music/Foo Fighters - All My Life (edit).mp3 +/home/mikec/Music/Alablaster - Nicky Is Cool.mp3 +/home/mikec/Music/Foo Fighters - Best of You.mp3 +/home/mikec/Music/3 Doors Down/Unknown Album/Francis Lai - Live for Life Live for Life.m4a +/home/mikec/Music/Francis Lai - Live for Life Live for Life.mp3 +/home/mikec/Music/Francis Lai - Live for Life Live for Life.wma +/home/mikec/Music/Franz Ferdinand - Take Me Out.mp3 +/home/mikec/Music/Fuel - Shimmer.mp3 +/home/mikec/Music/Fuel - Hemorrhage (in My Hands).mp3 +/home/mikec/Music/Fugees - Killing Me Softly With His Song.mp3 +/home/mikec/Music/Garbage - Only Happy When It Rains.mp3 +/home/mikec/Music/Garth Brooks - If Tomorrow Never Comes.mp3 +/home/mikec/Music/Gary Allan - Watching Airplanes.mp3 +/home/mikec/Music/Gavin DeGraw - I Don't Want to Be.mp3 +/home/mikec/Music/Gin Blossoms/Unknown Album/Gin Blossoms - Until I Fall Away.m4a +/home/mikec/Music/Gin Blossoms - Until I Fall Away.wma +/home/mikec/Music/Gin Blossoms - Mrs. Rita.wma +/home/mikec/Music/Gin Blossoms/Unknown Album/Gin Blossoms - Mrs. Rita.m4a +/home/mikec/Music/Gin Blossoms - Til I Hear It From You.wma +/home/mikec/Music/Gin Blossoms/Unknown Album/Gin Blossoms - Til I Hear It From You.m4a +/home/mikec/Music/Gin Blossoms - Til I Hear It From You.mp3 +/home/mikec/Music/Gin Blossoms - Allison Road.mp3 +/home/mikec/Music/Gin Blossoms - Allison Road.wma +/home/mikec/Music/Gin Blossoms/Unknown Album/Gin Blossoms - Allison Road.m4a +/home/mikec/Music/Gin Blossoms - Found Out About You.mp3 +/home/mikec/Music/Gin Blossoms - Found Out About You.wma +/home/mikec/Music/Gin Blossoms/Unknown Album/Gin Blossoms - Found Out About You.m4a +/home/mikec/Music/Gin Blossoms - Hey Jealousy.mp3 +/home/mikec/Music/Gin Blossoms - Hey Jealousy.wma +/home/mikec/Music/Gin Blossoms/Unknown Album/Gin Blossoms - Hey Jealousy.m4a +/home/mikec/Music/Gin Blossoms - Follow You Down.wma +/home/mikec/Music/Gin Blossoms/Unknown Album/Gin Blossoms - Follow You Down.m4a +/home/mikec/Music/Gin Blossoms - Until I Fall Away.mp3 +/home/mikec/Music/Gin Blossoms - Mrs. Rita.mp3 +/home/mikec/Music/Glen Campbell - Rhinestone Cowboy.mp3 +/home/mikec/Music/Gnarls Barkley - Crazy.mp3 +/home/mikec/Music/Puddle of Mudd - Fear.mp3 +/home/mikec/Music/Godsmack - Whatever.mp3 +/home/mikec/Music/Godsmack - Awake.mp3 +/home/mikec/Music/Godsmack - I Stand Alone.mp3 +/home/mikec/Music/Godsmack - Serenity.mp3 +/home/mikec/Music/Golden Earring - Twilight Zone.mp3 +/home/mikec/Music/Gordon Lightfoot - The Wreck of the Edmund Fitzgerald.mp3 +/home/mikec/Music/Gordon Lightfoot - Sundown.mp3 +/home/mikec/Music/Graham Blvd - Wildwood Weed.mp3 +/home/mikec/Music/Great Lake Swimmers - Pulling on a Line.mp3 +/home/mikec/Music/Great White - Once Bitten Twice Shy.wma +/home/mikec/Music/Great White/Unknown Album/Great White - Once Bitten Twice Shy.m4a +/home/mikec/Music/Great White - Once Bitten Twice Shy.mp3 +/home/mikec/Music/Green Day - Minority.mp3 +/home/mikec/Music/Green Day - When I Come Around.mp3 +/home/mikec/Music/Green Day - Basket Case.mp3 +/home/mikec/Music/Green Day - Brain Stew.mp3 +/home/mikec/Music/Green Day - Geek Stink Breath.mp3 +/home/mikec/Music/Green Day - Hitchin’ a Ride.mp3 +/home/mikec/Music/Green Day - Good Riddance (Time of Your Life).mp3 +/home/mikec/Music/Green Day - Time of Your Life.mp3 +/home/mikec/Music/Green Day/International Superhits!/Green Day - Maria.m4a +/home/mikec/Music/Green Day - Maria.wma +/home/mikec/Music/Green Day - Maria.mp3 +/home/mikec/Music/Green Day - Boulevard of Broken Dreams.mp3 +/home/mikec/Music/Green Day - Wake Me Up When September Ends.mp3 +/home/mikec/Music/Green Day - Holiday.mp3 +/home/mikec/Music/Gretchen Wilson - Redneck Woman.mp3 +/home/mikec/Music/Gretchen Wilson - Here for the Party.mp3 +/home/mikec/Music/Gungor - Beautiful Things.mp3 +/home/mikec/Music/Guns N' Roses/Appetite for Destruction/Guns N’ Roses - Nightrain.m4a +/home/mikec/Music/Guns N’ Roses - Nightrain.wma +/home/mikec/Music/Guns N' Roses/Appetite for Destruction/Guns N’ Roses - Out Ta Get Me.m4a +/home/mikec/Music/Guns N’ Roses - Out Ta Get Me.wma +/home/mikec/Music/Guns N' Roses/Appetite for Destruction/Guns N’ Roses - Mr. Brownstone.m4a +/home/mikec/Music/Guns N’ Roses - Mr. Brownstone.wma +/home/mikec/Music/Guns N' Roses/Appetite for Destruction/Guns N’ Roses - Think About You.m4a +/home/mikec/Music/Guns N’ Roses - Think About You.wma +/home/mikec/Music/Guns N' Roses - Welcome To The Jungle_1.mp3 +/home/mikec/Music/Guns N’ Roses - It’s So Easy.mp3 +/home/mikec/Music/Guns N' Roses - Nightrain_1.mp3 +/home/mikec/Music/Guns N’ Roses - Nightrain.mp3 +/home/mikec/Music/Guns N' Roses - Out Ta Get Me_1.mp3 +/home/mikec/Music/Guns N’ Roses - Out Ta Get Me.mp3 +/home/mikec/Music/Guns N' Roses - Mr. Brownstone_1.mp3 +/home/mikec/Music/Guns N’ Roses - Mr. Brownstone.mp3 +/home/mikec/Music/Guns N' Roses - Paradise City_1.mp3 +/home/mikec/Music/Guns N’ Roses - My Michelle.mp3 +/home/mikec/Music/Guns N' Roses - Think About You_1.mp3 +/home/mikec/Music/Guns N’ Roses - Think About You.mp3 +/home/mikec/Music/Guns N’ Roses - Sweet Child o’ Mine.mp3 +/home/mikec/Music/Guns N’ Roses - You’re Crazy.mp3 +/home/mikec/Music/Guns N’ Roses - Anything Goes.mp3 +/home/mikec/Music/Guns N’ Roses - Rocket Queen.mp3 +/home/mikec/Music/Guns N’ Roses - Don’t Cry.wma +/home/mikec/Music/Guns N' Roses/Guns N' Roses_ Greatest Hits/Guns N’ Roses - Don’t Cry.m4a +/home/mikec/Music/Guns N’ Roses - Welcome to the Jungle.mp3 +/home/mikec/Music/Guns N’ Roses - Don’t Cry.mp3 +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - Welcome to the Jungle.m4a +/home/mikec/Music/Guns N’ Roses - Welcome to the Jungle.wma +/home/mikec/Music/Guns N’ Roses - Sweet Child o’ Mine.wma +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - Sweet Child o’ Mine.m4a +/home/mikec/Music/Guns N’ Roses - Patience.wma +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - Patience.m4a +/home/mikec/Music/Guns N’ Roses - Paradise City.wma +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - Paradise City.m4a +/home/mikec/Music/Guns N’ Roses - Knockin’ on Heaven’s Door.wma +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - Knockin’ on Heaven’s Door.m4a +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - You Could Be Mine.m4a +/home/mikec/Music/Guns N’ Roses - You Could Be Mine.wma +/home/mikec/Music/08 Guns 'N' Roses - Don't Cry.wma +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - Don’t Cry.m4a +/home/mikec/Music/Guns N’ Roses - November Rain.wma +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - November Rain.m4a +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - Yesterdays.m4a +/home/mikec/Music/Guns N’ Roses - Yesterdays.wma +/home/mikec/Music/Guns N’ Roses - Hair of the Dog.mp3 +/home/mikec/Music/Guns N’ Roses - Civil War.mp3 +/home/mikec/Music/Guns N’ Roses - The Civil War.wma +/home/mikec/Music/Guns N' Roses/Unknown Album/Guns N’ Roses - The Civil War.m4a +/home/mikec/Music/Guns N' Roses - Sweet Child O' Mine_1.mp3 +/home/mikec/Music/Guns N’ Roses - Patience.mp3 +/home/mikec/Music/Guns N’ Roses - Paradise City.mp3 +/home/mikec/Music/Guns N’ Roses - Knockin’ on Heaven’s Door.mp3 +/home/mikec/Music/Guns N’ Roses - You Could Be Mine.mp3 +/home/mikec/Music/Guns N' Roses - Don't Cry Tonight.mp3 +/home/mikec/Music/Guns N’ Roses - November Rain.mp3 +/home/mikec/Music/Guns N’ Roses - Yesterdays.mp3 +/home/mikec/Music/Hank Flamingo - The Dope Smokin’ Song.mp3 +/home/mikec/Music/Hank Williams, Jr. - If Heaven Ain't a Lot Like Dixie.mp3 +/home/mikec/Music/Hank Williams, Jr. - That's How They Do It in Dixie.mp3 +/home/mikec/Music/Hank Williams, Jr. - Family Tradition.mp3 +/home/mikec/Music/Headlights - Get Going.mp3 +/home/mikec/Music/Heaven 17 - With or Without You.wma +/home/mikec/Music/U2/Unknown Album/Heaven 17 - With or Without You.m4a +/home/mikec/Music/Heaven 17 - With or Without You.mp3 +/home/mikec/Music/Helloween - My Sacrifice.mp3 +/home/mikec/Music/Helmet - Unsung.mp3 +/home/mikec/Music/The Black Keys - Everywhere I Go.mp3 +/home/mikec/Music/We're Finally Landing.mp3 +/home/mikec/Music/Hoobastank - Crawling in the Dark.mp3 +/home/mikec/Music/Hootie & the Blowfish - Hannah Jane.mp3 +/home/mikec/Music/Hope Sandoval & the Warm Inventions - Trouble.mp3 +/home/mikec/Music/House of Pain - Jump Around.mp3 +/home/mikec/Music/Ice Cube - It Was a Good Day.mp3 +/home/mikec/Music/Ice Cube - Check Yo Self (remix).mp3 +/home/mikec/Music/The Who - Behind Blue Eyes (HQ).mp3 +/home/mikec/Music/Jet - Are You Gonna Be My Girl (live from Sessions @ AOL).mp3 +/home/mikec/Music/Jethro Tull - Living in the Past.wma +/home/mikec/Music/Jethro Tull/Unknown Album/Jethro Tull - Living in the Past.m4a +/home/mikec/Music/Jethro Tull - Locomotive Breath.wma +/home/mikec/Music/Jethro Tull/Unknown Album/Jethro Tull - Locomotive Breath.m4a +/home/mikec/Music/Jethro Tull - Skating Away on the Thin Ice of the New Day.wma +/home/mikec/Music/Jethro Tull/Unknown Album/Jethro Tull - Skating Away on the Thin Ice of the New Day.m4a +/home/mikec/Music/Jethro Tull - Thick as a Brick (extract).wma +/home/mikec/Music/Jethro Tull/Unknown Album/Jethro Tull - Thick as a Brick (extract).m4a +/home/mikec/Music/Jethro Tull - Aqualung.mp3 +/home/mikec/Music/Jethro Tull - Aqualung.wma +/home/mikec/Music/Jethro Tull/Unknown Album/Jethro Tull - Aqualung.m4a +/home/mikec/Music/Jethro Tull - Bungle in the Jungle.mp3 +/home/mikec/Music/Jethro Tull - Living in the Past.mp3 +/home/mikec/Music/Jethro Tull - Locomotive Breath.mp3 +/home/mikec/Music/Jethro Tull - Skating Away.mp3 +/home/mikec/Music/Jethro Tull - Thick as a Brick.mp3 +/home/mikec/Music/Jim Croce - You Don’t Mess Around With Jim.mp3 +/home/mikec/Music/Jim Croce - Operator.wma +/home/mikec/Music/Jim Croce/You Don't Mess Around With Jim/Jim Croce - Operator (That’s Not the Way It Feels).m4a +/home/mikec/Music/Jim Croce - Time In A Bottle.wma +/home/mikec/Music/Jim Croce/You Don't Mess Around With Jim/Jim Croce - Time In A Bottle.m4a +/home/mikec/Music/Jim Croce - Operator (That’s Not the Way It Feels).mp3 +/home/mikec/Music/Jim Croce - Time In A Bottle.mp3 +/home/mikec/Music/Jim Croce/I Got a Name/Jim Croce - I’ll Have to Say I Love You in a Song.m4a +/home/mikec/Music/Jim Croce - I’ll Have to Say I Love You in a Song.wma +/home/mikec/Music/Jim Croce - I’ll Have to Say I Love You in a Song.mp3 +/home/mikec/Music/Jim Croce - Bad, bad Leroy Brown.mp3 +/home/mikec/Music/Jim Croce - Bad, bad Leroy Brown.wma +/home/mikec/Music/Jim Croce/Life and Times/Jim Croce - Bad, bad Leroy Brown.m4a +/home/mikec/Music/Jimi Hendrix - Castles Made Of Sand.mp3 +/home/mikec/Music/Jimi Hendrix - The Star Spangled Banner.mp3 +/home/mikec/Music/Joe Cocker - The Letter.mp3 +/home/mikec/Music/Joe Cocker - With a Little Help From My Friends.mp3 +/home/mikec/Music/Joe Cocker - You Are So Beautiful.mp3 +/home/mikec/Music/Joe Cocker - The Letter (Live).mp3 +/home/mikec/Music/Joe Diffie - Pickup Man.mp3 +/home/mikec/Music/John Michael Montgomery - I Love the Way You Love Me.wma +/home/mikec/Music/Toby Keith/Shock'n Y'all [DualDisc] Disc 1/John Michael Montgomery - I Love the Way You Love Me.m4a +/home/mikec/Music/Johnny Cash - I’ve Been Everywhere.mp3 +/home/mikec/Music/Johnny Cash - Wanted Man.mp3 +/home/mikec/Music/Johnny Cash - A Boy Named Sue.mp3 +/home/mikec/Music/Johnny Cash - Folsom Prison Blues.mp3 +/home/mikec/Music/Johnny Cash - God's Gonna Cut You Down.mp3 +/home/mikec/Music/Judas Priest/Unknown Album/Judas Priest - You’ve Got Another Thing Comin’.m4a +/home/mikec/Music/Judas Priest - You’ve Got Another Thing Comin’.wma +/home/mikec/Music/Judas Priest - You’ve Got Another Thing Comin’.mp3 +/home/mikec/Music/Kelly Clarkson - Never Again.mp3 +/home/mikec/Music/Jesse McCartney - Because You Live.mp3 +/home/mikec/Music/Kenny Rogers - Just Dropped In.mp3 +/home/mikec/Music/Kenny Wayne Shepherd Band - Blue on Black.mp3 +/home/mikec/Music/Kid Rock - Only God Knows Why.mp3 +/home/mikec/Music/Kid Rock - Picture.mp3 +/home/mikec/Music/Kings of Leon - Be Somebody.wma +/home/mikec/Music/Kings of Leon/Only By the Night (Deluxe Version)/Kings of Leon - Be Somebody.m4a +/home/mikec/Music/Kings of Leon - Be Somebody.mp3 +/home/mikec/Music/_Official_ Celeste B-Sides - 01 - Maxo - Forsaken City (Sever the Skyline Mix).mp3 +/home/mikec/Music/_Official_ Celeste B-Sides - 02 - Ben Prunty - Old Site (Black Moonrise Mix).mp3 +/home/mikec/Music/_Official_ Celeste B-Sides - 03 - Christa Lee - Celestial Resort (Good Karma Mix).mp3 +/home/mikec/Music/_Official_ Celeste B-Sides - 04 - in love with a ghost - Golden Ridge (Golden Feather Mix).mp3 +/home/mikec/Music/_Official_ Celeste B-Sides - 05 - 2 Mello - Mirror Temple (Mirror Magic Mix).mp3 +/home/mikec/Music/_Official_ Celeste B-Sides - 06 - Jukio Kallio - Reflection (Center of the Earth Mix).mp3 +/home/mikec/Music/_Official_ Celeste B-Sides - 07 - Kuraine - Summit (No More Running Mix).mp3 +/home/mikec/Music/_Official_ Celeste B-Sides - 08 - Matthewせいじ - The Core (Say Goodbye Mix).mp3 +/home/mikec/Music/_Official_ Celeste B-Sides - 09 - (Bonus) Area 1 Demo.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 01 - Prologue.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 02 - First Steps.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 03 - Resurrections.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 04 - Awake.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 05 - Postcard from Celeste Mountain.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 06 - Checking In.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 07 - Spirit of Hospitality.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 08 - Scattered and Lost.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 09 - Golden.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 10 - Anxiety.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 11 - Quiet and Falling.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 12 - In the Mirror.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 13 - Madeline and Theo.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 14 - Starjump.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 15 - Reflection.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 16 - Confronting Myself.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 17 - Little Goth.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 18 - Reach for the Summit.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 19 - Exhale.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 20 - Heart of the Mountain.mp3 +/home/mikec/Music/_Official_ Celeste Original Soundtrack - 21 - My Dearest Friends.mp3 +/home/mikec/Music/Beyond the Heart.mp3 +/home/mikec/Music/Crash.mp3 +/home/mikec/Music/Farewell.mp3 +/home/mikec/Music/Fear of the Unknown.mp3 +/home/mikec/Music/Final Defiance.mp3 +/home/mikec/Music/Futility.mp3 +/home/mikec/Music/In Stasis.mp3 +/home/mikec/Music/Joy of Remembrance.mp3 +/home/mikec/Music/Reconciliation.mp3 +/home/mikec/Music/The Empty Space Above.mp3 +/home/mikec/Music/The Woman and the Bird.mp3 +/home/mikec/Music/Vovô e Vovó.mp3 +/home/mikec/Music/wavedash.ppt.mp3 +/home/mikec/Music/Lenny Kravitz - Are You Gonna Go My Way.mp3 +/home/mikec/Music/Lenny Kravitz - Are You Gonna Go My Way.wma +/home/mikec/Music/Lenny Kravitz/Unknown Album/Lenny Kravitz - Are You Gonna Go My Way.m4a +/home/mikec/Music/Lifehouse - Hanging by a Moment.mp3 +/home/mikec/Music/Lifehouse - First Time.mp3 +/home/mikec/Music/Linkin Park - Numb.mp3 +/home/mikec/Music/Linkin Park - What I’ve Done.mp3 +/home/mikec/Music/Linkin Park - In the End.mp3 +/home/mikec/Music/Linkin Park - One Step Closer.mp3 +/home/mikec/Music/Linkin Park - Crawling.mp3 +/home/mikec/Music/Linkin Park - Given Up (radio edit).mp3 +/home/mikec/Music/Lisa Heller - Hope (Official Music Video).mp3 +/home/mikec/Music/Lit - Down.wma +/home/mikec/Music/LĪVE - Lightning Crashes.mp3 +/home/mikec/Music/LĪVE - The Dolphin’s Cry.mp3 +/home/mikec/Music/LĪVE - I Alone.mp3 +/home/mikec/Music/Living Colour - Cult of Personality.mp3 +/home/mikec/Music/Living Colour - Cult of Personality.wma +/home/mikec/Music/Living Colour/Unknown Album/Living Colour - Cult of Personality.m4a +/home/mikec/Music/Loca People - Party Rock Anthem.mp3 +/home/mikec/Music/Audioslave/Unknown Album/Lunik - What You Are.m4a +/home/mikec/Music/Lunik - What You Are.wma +/home/mikec/Music/Lunik - What You Are.mp3 +/home/mikec/Music/Lykke Li - No Rest for the Wicked.mp3 +/home/mikec/Music/Madonna - Music.mp3 +/home/mikec/Music/Manfred Krug - The Mighty Quinn.mp3 +/home/mikec/Music/Mark Wills - 19 Somethin’.mp3 +/home/mikec/Music/Maroon 5 - Moves Like Jagger.mp3 +/home/mikec/Music/Mary J. Blige - Family Affair (remix).mp3 +/home/mikec/Music/03 Matchbox 20 - 3 am.wma +/home/mikec/Music/Matchbox 20/Unknown Album/Matchbox 20 - 3 A.M..m4a +/home/mikec/Music/Matchbox 20 - Push.wma +/home/mikec/Music/Matchbox 20/Unknown Album/Matchbox 20 - Push.m4a +/home/mikec/Music/Matchbox 20 - 3 A.M..wma +/home/mikec/Music/Matchbox 20 - Push.mp3 +/home/mikec/Music/Matchbox 20/Unknown Album/Matchbox Twenty - Long Day.m4a +/home/mikec/Music/Matchbox Twenty - Long Day.wma +/home/mikec/Music/Matchbox 20/Unknown Album/Matchbox Twenty - Back 2 Good.m4a +/home/mikec/Music/Matchbox Twenty - Back 2 Good.mp3 +/home/mikec/Music/Matchbox Twenty - Back 2 Good.wma +/home/mikec/Music/Matchbox Twenty - Long Day.mp3 +/home/mikec/Music/Matchbox Twenty - 3 am.mp3 +/home/mikec/Music/Meat Loaf - I’d Do Anything for Love.mp3 +/home/mikec/Music/Meat Loaf - Two Out of Three Ain’t Bad.mp3 +/home/mikec/Music/Meat Loaf - Paradise by the Dashboard Light (5.1 mix).mp3 +/home/mikec/Music/Meat Loaf - For Crying Out Loud.mp3 +/home/mikec/Music/Meat Loaf - Blind as a Bat.mp3 +/home/mikec/Music/Meat Puppets - Backwater.wma +/home/mikec/Music/Meat Puppets/Unknown Album/Meat Puppets - Backwater.m4a +/home/mikec/Music/The Black Keys - Work Me.mp3 +/home/mikec/Music/Metallica - Fade To Black.mp3 +/home/mikec/Music/- Metallica - The Unforgiven (Video)_1485478525661.mp3.mp3 +/home/mikec/Music/Metallica - Nothing Else Matters.mp3 +/home/mikec/Music/Metallica - One.mp3 +/home/mikec/Music/Metallica - The Unforgiven.mp3 +/home/mikec/Music/Metallica - Enter Sandman.mp3 +/home/mikec/Music/Metallica - Sad but True.mp3 +/home/mikec/Music/Metallica - Fade to Black.wma +/home/mikec/Music/Metallica/Unknown Album/Metallica - Fade to Black.m4a +/home/mikec/Music/Missy Elliott - Gossip Folks (TV).mp3 +/home/mikec/Music/Morrissey - Wide to Receive.mp3 +/home/mikec/Music/Mötley Crüe - Home Sweet Home.mp3 +/home/mikec/Music/Mötley Crüe - Girls, Girls, Girls.mp3 +/home/mikec/Music/Mötley Crüe - Kickstart My Heart.mp3 +/home/mikec/Music/Mötley Crüe - Dr. Feelgood.mp3 +/home/mikec/Music/Mötley Crüe - Same Ol’ Situation (S.O.S.).mp3 +/home/mikec/Music/Mr. Scruff - Kalimba.mp3 +/home/mikec/Music/Muse - Uprising.mp3 +/home/mikec/Music/Neal McCoy - Billy's Got His Beer Goggles On.mp3 +/home/mikec/Music/Nickelback - Photograph (pop edit).mp3 +/home/mikec/Music/Nickelback - Rockstar.mp3 +/home/mikec/Music/Nickelback - Feelin’ Way Too Damn Good.mp3 +/home/mikec/Music/Nickelback - If Everyone Cared.mp3 +/home/mikec/Music/Nick Mason - A Country Boy Can Survive.mp3 +/home/mikec/Music/Night Ranger - Sister Christian.wma +/home/mikec/Music/Night Ranger/Unknown Album/Night Ranger - Sister Christian.m4a +/home/mikec/Music/Nirvana - Drain You.mp3 +/home/mikec/Music/Nirvana - In Bloom (Devonshire mix).mp3 +/home/mikec/Music/Nirvana - Lithium.mp3 +/home/mikec/Music/Nirvana - Smells Like Teen Spirit.mp3 +/home/mikec/Music/Nirvana - Breed.mp3 +/home/mikec/Music/Nirvana - Come as You Are (Devonshire mix).mp3 +/home/mikec/Music/Nirvana - Heart-Shaped Box.mp3 +/home/mikec/Music/Nirvana - Rape Me.mp3 +/home/mikec/Music/Nirvana - Lake of Fire.mp3 +/home/mikec/Music/Nirvana - About a Girl.mp3 +/home/mikec/Music/Nirvana - All Apologies.mp3 +/home/mikec/Music/Novato - Top.wma +/home/mikec/Music/Novato - Top.mp3 +/home/mikec/Music/Oasis - Don’t Look Back in Anger.mp3 +/home/mikec/Music/Oleander - It's The Reason.mp3 +/home/mikec/Music/Orgy - Blue Monday (single mix).mp3 +/home/mikec/Music/Our Lady Of Peace - Superman Is Dead.mp3 +/home/mikec/Music/Our Lady Peace - Clumsy.mp3 +/home/mikec/Music/OutKast - The Way You Move (club mix).mp3 +/home/mikec/Music/Ozzy Osbourne - Road to Nowhere.mp3 +/home/mikec/Music/Ozzy Osbourne - Dreamer.mp3 +/home/mikec/Music/Papa Roach - Take Me.wma +/home/mikec/Music/Papa Roach/Unknown Album/Papa Roach - Take Me.m4a +/home/mikec/Music/Papa Roach - Getting Away With Murder.mp3 +/home/mikec/Music/Pearl Jam - Even Flow.mp3 +/home/mikec/Music/Pearl Jam - Jeremy.mp3 +/home/mikec/Music/Pearl Jam - Extemperaneous Wandering.mp3 +/home/mikec/Music/Pearl Jam - Off He Goes.mp3 +/home/mikec/Music/Pearl Jam - Release.mp3 +/home/mikec/Music/Pearl Jam - Alive.mp3 +/home/mikec/Music/Pearl Jam - Black.mp3 +/home/mikec/Music/Pearl Jam - Daughter.mp3 +/home/mikec/Music/Pearl Jam - Elderly Woman Behind the Counter in a Small Town.mp3 +/home/mikec/Music/Pearl Jam - Elderly Woman Behind the Counter in a Small Town.wma +/home/mikec/Music/Pearl Jam/Rearviewmirror - Greatest Hits 1991-2003/Pearl Jam - Elderly Woman Behind the Counter in a Small Town.m4a +/home/mikec/Music/Pearl Jam - Better Man.mp3 +/home/mikec/Music/Pearl Jam - Once.mp3 +/home/mikec/Music/Pearl Jam - Nothingman.wma +/home/mikec/Music/Pearl Jam/Rearviewmirror - Greatest Hits 1991-2003/Pearl Jam - Nothingman.m4a +/home/mikec/Music/Pearl Jam - Nothingman.mp3 +/home/mikec/Music/Pearl Jam - World Wide Suicide.mp3 +/home/mikec/Music/Phil Collins - In the Air Tonight.mp3 +/home/mikec/Music/Pickin' On Project - Midnight Rider.mp3 +/home/mikec/Music/Pitbull - Don't Stop the Party.mp3 +/home/mikec/Music/P.O.D. - Youth of the Nation.mp3 +/home/mikec/Music/Poison - Every Rose Has Its Thorn.mp3 +/home/mikec/Music/Poison - Every Rose Has Its Thorn.wma +/home/mikec/Music/Poison/Unknown Album/Poison - Every Rose Has Its Thorn.m4a +/home/mikec/Music/Portugal. The Man - Feel It Still.mp3 +/home/mikec/Music/PSY - Gangnam Style.mp3 +/home/mikec/Music/Puddle of Mudd - Drift & Die.mp3 +/home/mikec/Music/Puddle of Mudd - Away From Me.wma +/home/mikec/Music/Puddle Of Mudd/Unknown Album/Puddle of Mudd - Away From Me.m4a +/home/mikec/Music/Puddle of Mudd - Psycho.mp3 +/home/mikec/Music/Queens of the Stone Age - No One Knows (UNKLE Reconstruction) (radio edit).mp3 +/home/mikec/Music/Queens of the Stone Age - Go With the Flow.wma +/home/mikec/Music/Queens of the Stone Age - Go With the Flow.mp3 +/home/mikec/Music/Queens of the Stone Age/Songs for the Deaf/Queens of the Stone Age - Go With the Flow.m4a +/home/mikec/Music/Quiet Riot - Cum On Feel the Noize.mp3 +/home/mikec/Music/Quiet Riot - Cum On Feel the Noize.wma +/home/mikec/Music/Quiet Riot/Unknown Album/Quiet Riot - Cum On Feel the Noize.m4a +/home/mikec/Music/Radiohead - Creep.mp3 +/home/mikec/Music/Rainbow - Man on the Silver Mountain.mp3 +/home/mikec/Music/Randy Houser - Boots On.mp3 +/home/mikec/Music/Ratt - Round and Round.wma +/home/mikec/Music/Ratt/Unknown Album/Ratt - Round and Round.m4a +/home/mikec/Music/Ratt - Round and Round.mp3 +/home/mikec/Music/Ray Charles - Georgia on My Mind (live).mp3 +/home/mikec/Music/Reba McEntire - Fancy.mp3 +/home/mikec/Music/Red Hot Chili Peppers - Under the Bridge.mp3 +/home/mikec/Music/Red Hot Chili Peppers - My Friends.wma +/home/mikec/Music/Red Hot Chili Peppers/Unknown Album/Red Hot Chili Peppers - My Friends.m4a +/home/mikec/Music/Red Hot Chili Peppers - By the Way.mp3 +/home/mikec/Music/Red Hot Chili Peppers - My Friends.mp3 +/home/mikec/Music/Red Hot Chili Peppers - Higher Ground.mp3 +/home/mikec/Music/Red Hot Chili Peppers - Higher Ground.wma +/home/mikec/Music/Red Hot Chili Peppers/Unknown Album/Red Hot Chili Peppers - Higher Ground.m4a +/home/mikec/Music/The Black Keys - Stop Stop.mp3 +/home/mikec/Music/Red Hot Chili Peppers Revival - Otherside.mp3 +/home/mikec/Music/R.E.M. - What’s the Frequency, Kenneth (radio version).mp3 +/home/mikec/Music/Rhino Bucket - Beg for Your Love.mp3 +/home/mikec/Music/Slow Ride - Foghat.mp3 +/home/mikec/Music/Symfonický orchester Slovenského rozhlasu - Maid with the Flaxen Hair.mp3 +/home/mikec/Music/Rihanna - Umbrella.mp3 +/home/mikec/Music/Rihanna - Hard.wma +/home/mikec/Music/ZZ Top/Unknown Album/Rihanna - Hard.m4a +/home/mikec/Music/Robin Thicke - Blurred Lines.mp3 +/home/mikec/Music/Rob Zombie - Never Gonna Stop (The Red, Red Kroovy).mp3 +/home/mikec/Music/Rob Zombie - Dragula.mp3 +/home/mikec/Music/Rob Zombie - Feel So Numb.mp3 +/home/mikec/Music/Rosenstolz - Cleopatra.mp3 +/home/mikec/Music/Sammy Hagar - Your Love Is Driving Me Crazy.mp3 +/home/mikec/Music/Sammy Hagar - I Can’t Drive 55.mp3 +/home/mikec/Music/Scorpions - No One Like You.wma +/home/mikec/Music/Scorpions/Unknown Album/Scorpions - No One Like You.m4a +/home/mikec/Music/Scorpions - The Zoo.wma +/home/mikec/Music/Scorpions/Unknown Album/Scorpions - The Zoo.m4a +/home/mikec/Music/Scorpions - No One Like You.mp3 +/home/mikec/Music/Scorpions - The Zoo.mp3 +/home/mikec/Music/Scott H. Biram - Blood Sweat & Murder.mp3 +/home/mikec/Music/Scott H. Biram - Sinkin' Down.mp3 +/home/mikec/Music/Scott H. Biram - Judgement Day.mp3 +/home/mikec/Music/Scott H. Biram - Draggin’ Down the Line.mp3 +/home/mikec/Music/Scott H. Biram - Hard Time.mp3 +/home/mikec/Music/Scott H. Biram - Never Comin’ Home.mp3 +/home/mikec/Music/Seether - Remedy.mp3 +/home/mikec/Music/Seether - Fine Again.mp3 +/home/mikec/Music/Seven Mary Three - Cumbersome.mp3 +/home/mikec/Music/Shinedown - Sound of Madness.mp3 +/home/mikec/Music/Shinedown - 45.mp3 +/home/mikec/Music/Shinedown - 45.wma +/home/mikec/Music/Shinedown/Leave a Whisper/Shinedown - 45.m4a +/home/mikec/Music/Silverchair - Tomorrow.mp3 +/home/mikec/Music/Skillet - Monster.mp3 +/home/mikec/Music/Slash - Back From Cali.mp3 +/home/mikec/Music/Social Distortion - Machine Gun Blues.mp3 +/home/mikec/Music/Social Distortion - Ring of Fire.mp3 +/home/mikec/Music/Social Distortion - Story of My Life.mp3 +/home/mikec/Music/Social Distortion - Ball And Chain (Edit).mp3 +/home/mikec/Music/Soundgarden - Outshined (LP version).mp3 +/home/mikec/Music/Soundgarden - Spoonman.mp3 +/home/mikec/Music/Soundgarden - Black Hole Sun.mp3 +/home/mikec/Music/Soundgarden - Fell on Black Days.mp3 +/home/mikec/Music/Spacehog - In the Meantime.wma +/home/mikec/Music/Spacehog/Unknown Album/Spacehog - In the Meantime.m4a +/home/mikec/Music/Staind - It's Been Awhile (clean version).mp3 +/home/mikec/Music/Its_Been_Awhile_(getmp3.pro).mp3 +/home/mikec/Music/State Radio - Calling All Crows.mp3 +/home/mikec/Music/Stephen King - Track 1.mp3 +/home/mikec/Music/AC-DC/Unknown Album/Stereo MCs - Creation.m4a +/home/mikec/Music/Stereo MCs - Creation.wma +/home/mikec/Music/Stereo MCs - Move.mp3 +/home/mikec/Music/Steve Earle - Copperhead Road.wma +/home/mikec/Music/Steve Earl/Unknown Album/Steve Earle - Copperhead Road.m4a +/home/mikec/Music/Steve Young - Seven Bridges Road.mp3 +/home/mikec/Music/Stone Sour - Through Glass.mp3 +/home/mikec/Music/Stone Temple Pilots - Interstate Love Song.mp3 +/home/mikec/Music/Stone Temple Pilots - Trippin’ on a Hole in a Paper Heart.mp3 +/home/mikec/Music/Stone Temple Pilots - Sour Girl.wma +/home/mikec/Music/Stone Temple Pilots/Unknown Album/Stone Temple Pilots - Sour Girl.m4a +/home/mikec/Music/Stone Temple Pilots - MC5.wma +/home/mikec/Music/Stone Temple Pilots/Unknown Album/Stone Temple Pilots - MC5.m4a +/home/mikec/Music/Stone Temple Pilots - MC5.mp3 +/home/mikec/Music/Stone Temple Pilots - Dead & Bloated.mp3 +/home/mikec/Music/Stone Temple Pilots - Creep (new album version).mp3 +/home/mikec/Music/Wesley Willis - Stone Temple Pilots.mp3 +/home/mikec/Music/Stone Temple Pilots - Heaven & Hot Rods.mp3 +/home/mikec/Music/Stone Temple Pilots - Heaven & Hot Rods.wma +/home/mikec/Music/Stone Temple Pilots/Unknown Album/Stone Temple Pilots - Heaven & Hot Rods.m4a +/home/mikec/Music/Stone Temple Pilots - Atlanta.mp3 +/home/mikec/Music/Stone Temple Pilots - Atlanta.wma +/home/mikec/Music/Stone Temple Pilots/Unknown Album/Stone Temple Pilots - Atlanta.m4a +/home/mikec/Music/Stone Temple Pilots - Down.mp3 +/home/mikec/Music/Stone Temple Pilots/Unknown Album/Stone Temple Pilots - Down.m4a +/home/mikec/Music/Army Ants.mp3 +/home/mikec/Music/Army Ants.mp3_ +/home/mikec/Music/Big Empty.mp3 +/home/mikec/Music/Big Empty.mp3_ +/home/mikec/Music/Plush (2017 Remaster).mp3 +/home/mikec/Music/Plush (2017 Remaster).mp3_ +/home/mikec/Music/Sex Type Thing (2017 Remaster).mp3 +/home/mikec/Music/Where the River Goes (2017 Remaster).mp3 +/home/mikec/Music/Sublime - Wrong Way.mp3 +/home/mikec/Music/Scorpions/Unknown Album/Sudden Death - Pillagers.m4a +/home/mikec/Music/Sudden Death - Pillagers.wma +/home/mikec/Music/Sudden Death - Pillagers.mp3 +/home/mikec/Music/Sugarland - Hello.mp3 +/home/mikec/Music/Sugarland - Stay.mp3 +/home/mikec/Music/Sugarland - Everyday America.mp3 +/home/mikec/Music/Sugarland - Already Gone.mp3 +/home/mikec/Music/Superdrag - Everything'll Be Made Right.mp3 +/home/mikec/Music/Synkro - These Times.mp3 +/home/mikec/Music/Taddy Porter - Mean Bitch.mp3 +/home/mikec/Music/Talking Heads - Once in a Lifetime.mp3 +/home/mikec/Music/Talking Heads - Take Me to the River.mp3 +/home/mikec/Music/Talking Heads - Life During Wartime.mp3 +/home/mikec/Music/Talking Heads - Burning Down the House.mp3 +/home/mikec/Music/Psycho Killer (2003 Remaster).mp3 +/home/mikec/Music/Wild Wild Life (2005 Remaster).mp3 +/home/mikec/Music/Tamra Rosanes - Louisiana Saturday Night.mp3 +/home/mikec/Music/Team America World Police - America, Fuck Yeah.mp3 +/home/mikec/Music/Temple of the Dog - Say Hello 2 Heaven.wma +/home/mikec/Music/Temple of the Dog/Temple of the Dog/Temple of the Dog - Say Hello 2 Heaven.m4a +/home/mikec/Music/Temple of the Dog - Say Hello 2 Heaven.mp3 +/home/mikec/Music/Temple of the Dog - Hunger Strike.mp3 +/home/mikec/Music/The Allman Brothers Band - Jessica.mp3 +/home/mikec/Music/The Allman Brothers Band - Melissa.mp3 +/home/mikec/Music/The Allman Brothers Band - Ramblin’ Man.mp3 +/home/mikec/Music/The Allman Brothers Band - Soulshine.mp3 +/home/mikec/Music/The Allman Brothers Band - The Whipping Post.mp3 +/home/mikec/Music/House Of The Rising Sun.mp3 +/home/mikec/Music/The Ataris - The Boys of Summer (Rough Mix).wma +/home/mikec/Music/The Ataris/Unknown Album/The Ataris - The Boys of Summer (Rough Mix).m4a +/home/mikec/Music/The Black Crowes - Twice as Hard.mp3 +/home/mikec/Music/The Black Keys - Breaking Down.mp3 +/home/mikec/Music/The Black Keys - Eagle Birds.mp3 +/home/mikec/Music/The Black Keys - Every Little Thing.mp3 +/home/mikec/Music/The Black Keys - Fire Walk With Me.mp3 +/home/mikec/Music/The Black Keys - Get Yourself Together.mp3 +/home/mikec/Music/The Black Keys - Junior's Instrumental.mp3 +/home/mikec/Music/The Black Keys - LoHi.mp3 +/home/mikec/Music/The Black Keys - Next Girl.mp3 +/home/mikec/Music/The Black Keys - No Trust.mp3 +/home/mikec/Music/The Black Keys - Shine a Little Light.mp3 +/home/mikec/Music/The Black Keys - Sit Around and Miss You.mp3 +/home/mikec/Music/The Black Keys - Stack Shot Billy.mp3 +/home/mikec/Music/The Black Keys - Tell Me Lies.mp3 +/home/mikec/Music/The Black Keys - Ten Cent Pistol.mp3 +/home/mikec/Music/The Black Keys- Baby I'm Coming Home (Official Visualizer).mp3 +/home/mikec/Music/The Black Keys _Black Mud Part II_ Remastered 10th Anniversary Edition _Official Audio_.mp3 +/home/mikec/Music/The Black Keys - Burn the Damn Thing Down (Official Visualizer).mp3 +/home/mikec/Music/The Black Keys _Chop and Change_ Remastered 10th Anniversary Edition _Official Audio_.mp3 +/home/mikec/Music/The Black Keys - Crawling Kingsnake _Official Audio_.mp3 +/home/mikec/Music/The Black Keys - Didn't I Love You (Official Visualizer).mp3 +/home/mikec/Music/The Black Keys - For the Love of Money (Official Visualizer).mp3 +/home/mikec/Music/The Black Keys - Going Down South _Official Music Video_.mp3 +/home/mikec/Music/The Black Keys - Good Love (Official Visualizer).mp3 +/home/mikec/Music/The Black Keys - Happiness (Official Visualizer).mp3 +/home/mikec/Music/The Black Keys - How Long (Official Visualizer).mp3 +/home/mikec/Music/The Black Keys - It Ain't Over (Official Visualizer).mp3 +/home/mikec/Music/The Black Keys _Keep My Name Outta Your Mouth_ Remastered 10th Anniversary Edition _Official Audio_.mp3 +/home/mikec/Music/The Black Keys - Wild Child (Official Audio).mp3 +/home/mikec/Music/The Black Keys - Your Team Is Looking Good (Official Visualizer).mp3 +/home/mikec/Music/The Black Keys - Under the Gun.mp3 +/home/mikec/Music/The Black Keys - Walk Across the Water.mp3 +/home/mikec/Music/The Black Keys - When the Lights Go Out.mp3 +/home/mikec/Music/The Black Keys - If You See Me.mp3 +/home/mikec/Music/The Black Keys - The Breaks.mp3 +/home/mikec/Music/The Black Keys - Leavin’ Trunk.mp3 +/home/mikec/Music/The Black Keys - Oceans and Streams.mp3 +/home/mikec/Music/The Black Keys - Psychotic Girl.mp3 +/home/mikec/Music/The Black Keys - Remember When (Side B).mp3 +/home/mikec/Music/Same Old Thing.mp3 +/home/mikec/Music/The Black Keys - So He Won’t Break.mp3 +/home/mikec/Music/The Black Keys - Strange Times _Official Music Video_.mp3 +/home/mikec/Music/The Black Keys - Things Ain't Like They Used to Be.mp3 +/home/mikec/Music/The Black Keys - Next Girl _Official Music Video_.mp3 +/home/mikec/Music/The Black Keys - Sinister Kid.mp3 +/home/mikec/Music/Ten Cent Pistol.mp3 +/home/mikec/Music/The Black Keys - The Go Getter.mp3 +/home/mikec/Music/The Black Keys - Tighten Up _Official Music Video_.mp3 +/home/mikec/Music/The Black Keys - Too Afraid To Love You _Live_.mp3 +/home/mikec/Music/The Black Keys - Unknown Brother.mp3 +/home/mikec/Music/The Black Keys - Junior's Wife.mp3 +/home/mikec/Music/The Black Keys - Keep Your Hands Off Her.mp3 +/home/mikec/Music/Meet Me in the City.mp3 +/home/mikec/Music/The Black Keys - Nobody but You.mp3 +/home/mikec/Music/The Black Keys - My Mind Is Ramblin'.mp3 +/home/mikec/Music/The Black Keys - You're the One.mp3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Coal Black Mattie (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Come on and Go with Me (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Crawling Kingsnake [Official Audio]-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Crawling Kingsnake [Radio Edit]-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Do the Romp (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Going Down South [Official Music Video]-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Louise (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Mellow Peaches (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Poor Boy a Long Way From Home (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Sad Days, Lonely Nights (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Stay All Night (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Walk with Me (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys- Baby I'm Coming Home (Official Visualizer)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Burn the Damn Thing Down (Official Visualizer)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Didn't I Love You (Official Visualizer)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - For the Love of Money (Official Visualizer)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Good Love (Official Visualizer)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Happiness (Official Visualizer)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - How Long (Official Visualizer)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - It Ain't Over (Official Visualizer)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Wild Child (Official Audio)-320k.MP3 +/home/mikec/Music/[MP3DL.CC] The Black Keys - Your Team Is Looking Good (Official Visualizer)-320k.MP3 +/home/mikec/Music/The Black Keys - Little Black Submarines _Official Music Video_.mp3 +/home/mikec/Music/The Black Keys - Lonely Boy _Official Music Video_.mp3 +/home/mikec/Music/The Black Keys - Mind Eraser.mp3 +/home/mikec/Music/The Black Keys - Money Maker.mp3 +/home/mikec/Music/The Black Keys - Nova Baby.mp3 +/home/mikec/Music/The Black Keys - Run Right Back.mp3 +/home/mikec/Music/The Black Keys - Sister.mp3 +/home/mikec/Music/The Black Keys - Keep Me.mp3 +/home/mikec/Music/The Black Keys - The Only One.mp3 +/home/mikec/Music/The Black Keys - Yearnin’.mp3 +/home/mikec/Music/Lies.mp3 +/home/mikec/Music/The Black Keys - I’m Not the One.mp3 +/home/mikec/Music/The Black Keys - I’ll Be Your Man.mp3 +/home/mikec/Music/The Black Keys - She’s Long Gone.mp3 +/home/mikec/Music/The Black Keys - Just Got to Be _Official Video_.mp3 +/home/mikec/Music/The Black Keys - Modern Times.mp3 +/home/mikec/Music/The Black Keys - Strange Desire.mp3 +/home/mikec/Music/The Black Keys - Your Touch _Official Music Video_.mp3 +/home/mikec/Music/The Black Keys - Just a Little Heat.mp3 +/home/mikec/Music/The Black Keys - She Said, She Said.mp3 +/home/mikec/Music/The Black Keys - The Flame.mp3 +/home/mikec/Music/The Black Keys - Just Couldn’t Tie Me Down.mp3 +/home/mikec/Music/Stack Shot Billy.mp3 +/home/mikec/Music/The Black Keys - The Desperate Man.mp3 +/home/mikec/Music/The Black Keys - The Lengths.mp3 +/home/mikec/Music/The Black Keys - Till I Get My Way.mp3 +/home/mikec/Music/The Black Keys - Run Me Down.mp3 +/home/mikec/Music/The Black Keys - Them Eyes.mp3 +/home/mikec/Music/When the Lights Go Out.mp3 +/home/mikec/Music/The Black Keys - Midnight in Her Eyes.mp3 +/home/mikec/Music/No Trust.mp3 +/home/mikec/Music/The Black Keys - Set You Free.mp3 +/home/mikec/Music/Thickfreakness.mp3 +/home/mikec/Music/The Black Keys - In Our Prime.mp3 +/home/mikec/Music/The Black Keys - It’s Up to You Now.mp3 +/home/mikec/Music/The Black Keys - Turn Blue.mp3 +/home/mikec/Music/The Black Keys - Waiting on Words.mp3 +/home/mikec/Music/The Black Keys - Weight of Love.mp3 +/home/mikec/Music/The Black Keys - Year in Review.mp3 +/home/mikec/Music/The Black Keys - These Days.mp3 +/home/mikec/Music/The Black Keys - Never Gonna Give You Up.mp3 +/home/mikec/Music/The Black Keys - In Time.mp3 +/home/mikec/Music/The Black Keys - Busted.mp3 +/home/mikec/Music/Do The Rump.mp3 +/home/mikec/Music/The Black Keys - I'll Be Your Man.mp3 +/home/mikec/Music/The Black Keys - Heavy Soul.mp3 +/home/mikec/Music/The Black Keys - Brooklyn Bound.mp3 +/home/mikec/Music/The Black Keys - 240 Years Before Your Time.mp3 +/home/mikec/Music/The Black Keys - Elevator.mp3 +/home/mikec/Music/The Black Keys - Thickfreakness.mp3 +/home/mikec/Music/The Black Keys - Hard Row.mp3 +/home/mikec/Music/The Black Keys - Have Love Will Travel.mp3 +/home/mikec/Music/The Black Keys - Hurt Like Mine.mp3 +/home/mikec/Music/The Black Keys - Hold Me in Your Arms.mp3 +/home/mikec/Music/The Black Keys - I Cry Alone.mp3 +/home/mikec/Music/The Black Keys - 10am Automatic.mp3 +/home/mikec/Music/The Black Keys - 10 A.M. Automatic.mp3 +/home/mikec/Music/The Black Keys - All Hands Against His Own.mp3 +/home/mikec/Music/Girl Is on My Mind.mp3 +/home/mikec/Music/The Black Keys - Girl Is on My Mind.mp3 +/home/mikec/Music/The Black Keys - Girl Is on My Mind.wma +/home/mikec/Music/The Black Keys/Rubber Factory/The Black Keys - Girl Is on My Mind.m4a +/home/mikec/Music/The Black Keys - Grown So Ugly.mp3 +/home/mikec/Music/The Black Keys - Act Nice and Gentle.mp3 +/home/mikec/Music/The Black Keys - Aeroplane Blues.mp3 +/home/mikec/Music/The Black Keys/Chulahoma/The Black Keys - Meet Me in the City.m4a +/home/mikec/Music/The Black Keys - Meet Me in the City.wma +/home/mikec/Music/The Black Keys - Have Mercy on Me.mp3 +/home/mikec/Music/The Black Keys - Meet Me in the City.mp3 +/home/mikec/Music/The Black Keys - Just Got to Be.mp3 +/home/mikec/Music/The Black Keys - Your Touch.mp3 +/home/mikec/Music/The Black Keys - Give Your Heart Away.mp3 +/home/mikec/Music/Goodbye Babylon.mp3 +/home/mikec/Music/The Black Keys - Goodbye Babylon.mp3 +/home/mikec/Music/The Black Keys - Goodbye Babylon.wma +/home/mikec/Music/The Black Keys/Magic Potion/The Black Keys - Goodbye Babylon.m4a +/home/mikec/Music/The Black Keys - Black Door.mp3 +/home/mikec/Music/The Black Keys - Lies.mp3 +/home/mikec/Music/The Black Keys - Remember When.mp3 +/home/mikec/Music/The Black Keys - Same Old Thing.mp3 +/home/mikec/Music/The Black Keys - Things Ain’t Like They Used to Be.mp3 +/home/mikec/Music/The Black Keys - All You Ever Wanted.mp3 +/home/mikec/Music/I Got Mine.mp3 +/home/mikec/Music/The Black Keys - I Got Mine.mp3 +/home/mikec/Music/The Black Keys - Strange Times.mp3 +/home/mikec/Music/The Black Keys - Everlasting Light.mp3 +/home/mikec/Music/The Black Keys - Howlin’ for You.mp3 +/home/mikec/Music/The Black Keys - Howlin'.mp3 +/home/mikec/Music/The Black Keys - Black Mud.mp3 +/home/mikec/Music/The Black Keys - Tighten Up.mp3 +/home/mikec/Music/The Black Keys - Too Afraid to Love You.mp3 +/home/mikec/Music/The Black Keys/El Camino/The Black Keys - Lonely Boy.m4a +/home/mikec/Music/The Black Keys - Lonely Boy.wma +/home/mikec/Music/The Black Keys/El Camino/The Black Keys - Little Black Submarines.m4a +/home/mikec/Music/The Black Keys - Little Black Submarines.wma +/home/mikec/Music/The Black Keys - Lonely Boy.mp3 +/home/mikec/Music/The Black Keys - Dead and Gone.mp3 +/home/mikec/Music/The Black Keys/El Camino/The Black Keys - Gold on the Ceiling.m4a +/home/mikec/Music/The Black Keys - Gold on the Ceiling.mp3 +/home/mikec/Music/The Black Keys - Gold On The Ceiling _Official Music Video_.mp3 +/home/mikec/Music/The Black Keys - Gold on the Ceiling.wma +/home/mikec/Music/The Black Keys - Little Black Submarines.mp3 +/home/mikec/Music/The Black Keys - Hell of a Season.mp3 +/home/mikec/Music/The Black Keys - Fever.mp3 +/home/mikec/Music/Bullet In The Brain.mp3 +/home/mikec/Music/The Black Keys - Bullet in the Brain.mp3 +/home/mikec/Music/The Black Keys - 10 Lovers.mp3 +/home/mikec/Music/The Black Keys - Gotta Get Away.mp3 +/home/mikec/Music/The Black Keys - Go.mp3 +/home/mikec/Music/The_Black_Keys_-_It_Aint_Over_Off_(getmp3.pro).mp3 +/home/mikec/Music/The_Black_Keys_-_Wild_Child_Offici_(getmp3.pro).mp3 +/home/mikec/Music/The Black Keys - Black Mud _ Black Mud Part II.mp3 +/home/mikec/Music/Coal Black Mattie.mp3 +/home/mikec/Music/Come on and Go with Me.mp3 +/home/mikec/Music/Crawling Kingsnake (Edit).mp3 +/home/mikec/Music/Crawling Kingsnake.mp3 +/home/mikec/Music/Do the Romp.mp3 +/home/mikec/Music/Going Down South.mp3 +/home/mikec/Music/Louise.mp3 +/home/mikec/Music/Mellow Peaches.mp3 +/home/mikec/Music/Poor Boy a Long Way From Home.mp3 +/home/mikec/Music/Sad Days, Lonely Nights.mp3 +/home/mikec/Music/Stay All Night.mp3 +/home/mikec/Music/Walk with Me.mp3 +/home/mikec/Music/The Letter.mp3 +/home/mikec/Music/The Bravery - Believe.mp3 +/home/mikec/Music/The Chantays - Pipeline.mp3 +/home/mikec/Music/The Charlie Daniels Band - Long Haired Country Boy.mp3 +/home/mikec/Music/The Charlie Daniels Band - Big Bad John.mp3 +/home/mikec/Music/The Clarks - Born Too Late.mp3 +/home/mikec/Music/The Clarks - Shimmy Low.mp3 +/home/mikec/Music/The Clarks - Let It Go.mp3 +/home/mikec/Music/The Clarks - Snowman.mp3 +/home/mikec/Music/The Clarks - Mercury.mp3 +/home/mikec/Music/The Clarks - Better Off Without You.mp3 +/home/mikec/Music/WaveGroup Sound - Take It Off.mp3 +/home/mikec/Music/The Duke & The King - If You Ever Get Famous.mp3 +/home/mikec/Music/The Flamingos - You'll Never Walk Alone.mp3 +/home/mikec/Music/Country Joe and the Fish - Sing Sing Sing.mp3 +/home/mikec/Music/Gin Blossoms - Follow You Down.mp3 +/home/mikec/Music/The Heavy - How You Like Me Now (radio edit).mp3 +/home/mikec/Music/The Hives - Hate to Say I Told You So.mp3 +/home/mikec/Music/Marcus King - The Well (Official Audio).mp3 +/home/mikec/Music/The Moody Blues - Bless the Wings (That Bring You Back).mp3 +/home/mikec/Music/Moody Blues/Unknown Album/The Moody Blues - Tuesday Afternoon (Forever Afternoon).m4a +/home/mikec/Music/The Moody Blues - Tuesday Afternoon (Forever Afternoon).wma +/home/mikec/Music/Moody Blues/Unknown Album/The Moody Blues - Nights in White Satin.m4a +/home/mikec/Music/The Moody Blues - Nights in White Satin.wma +/home/mikec/Music/Moody Blues/Unknown Album/The Moody Blues - I'm Just a Singer.m4a +/home/mikec/Music/The Moody Blues - I'm Just a Singer.wma +/home/mikec/Music/Moody Blues/Unknown Album/The Moody Blues - Your Wildest Dreams.m4a +/home/mikec/Music/The Moody Blues - Your Wildest Dreams.wma +/home/mikec/Music/The Moody Blues - Tuesday Afternoon (Forever Afternoon).mp3 +/home/mikec/Music/The Moody Blues - Nights in White Satin.mp3 +/home/mikec/Music/The Moody Blues - I'm Just a Singer.mp3 +/home/mikec/Music/The Moody Blues - Your Wildest Dreams.mp3 +/home/mikec/Music/The Nixons - Sister (Album Version).mp3 +/home/mikec/Music/Theory of a Deadman - No Surprise.wma +/home/mikec/Music/Theory Of A Deadman/Unknown Album/Theory of a Deadman - No Surprise.m4a +/home/mikec/Music/Theory of a Deadman - Hate My Life.mp3 +/home/mikec/Music/The Presidents of the United States of America - Peaches.mp3 +/home/mikec/Music/The Raconteurs - Steady, as She Goes.mp3 +/home/mikec/Music/The Rolling Stones - Satisfaction.mp3 +/home/mikec/Music/The Rolling Stones - Paint It, Black (original 7″ mono mix).mp3 +/home/mikec/Music/The Rolling Stones - It’s Only Rock ’n’ Roll.mp3 +/home/mikec/Music/The Rolling Stones - She’s So Cold.mp3 +/home/mikec/Music/The Rolling Stones - I Got the Blues.mp3 +/home/mikec/Music/The Rolling Stones - Shattered.mp3 +/home/mikec/Music/The Rolling Stones - Doom and Gloom.mp3 +/home/mikec/Music/The Soggy Bottom Boys - I Am a Man of Constant Sorrow (with band).mp3 +/home/mikec/Music/The Ting Tings - That’s Not My Name.mp3 +/home/mikec/Music/Bitter Sweet Symphony.mp3 +/home/mikec/Music/The Wallflowers - One Headlight.mp3 +/home/mikec/Music/The Wannadies - You and Me Song.mp3 +/home/mikec/Music/The White Stripes - We're Going To Be Friends (Official Music Video).mp3 +/home/mikec/Music/The White Stripes - Fell in Love With a Girl.mp3 +/home/mikec/Music/The White Stripes - The Hardest Button to Button.mp3 +/home/mikec/Music/The White Stripes - Seven Nation Army.mp3 +/home/mikec/Music/The White Stripes - Blue Orchid.mp3 +/home/mikec/Music/Jethro Tull/Unknown Album/The Zombies - Time of the Season.m4a +/home/mikec/Music/The Zombies - Time of the Season.wma +/home/mikec/Music/Those Darlins - Wild One.mp3 +/home/mikec/Music/Three Days Grace - Just Like You.mp3 +/home/mikec/Music/Three Days Grace - Pain.mp3 +/home/mikec/Music/Three Days Grace - Never Too Late.mp3 +/home/mikec/Music/Toadies - Possum Kingdom.mp3 +/home/mikec/Music/Toadies - Possum Kingdom.wma +/home/mikec/Music/Toad The Wet Sprocket/Unknown Album/Toadies - Possum Kingdom.m4a +/home/mikec/Music/Toby Keith - Red Solo Cup.mp3 +/home/mikec/Music/Toby Keith - Should’ve Been a Cowboy.wma +/home/mikec/Music/Toby Keith/Toby Keith_ Greatest Hits, Vol.1/Toby Keith - Should’ve Been a Cowboy.m4a +/home/mikec/Music/Toby Keith/Toby Keith_ Greatest Hits, Vol.1/Toby Keith - You Ain't Much Fun.m4a +/home/mikec/Music/Toby Keith - You Ain't Much Fun.wma +/home/mikec/Music/Toby Keith - Should’ve Been a Cowboy.mp3 +/home/mikec/Music/Toby Keith - You Ain't Much Fun.mp3 +/home/mikec/Music/Toby Keith/Greatest Hits 2/Toby Keith - How Do You Like Me Now.m4a +/home/mikec/Music/Toby Keith - How Do You Like Me Now.mp3 +/home/mikec/Music/Toby Keith - How Do You Like Me Now.wma +/home/mikec/Music/Toby Keith/35 Biggest Hits/Toby Keith - Courtesy Of The Red, White, And Blue (The Angry American).m4a +/home/mikec/Music/Toby Keith - Courtesy Of The Red, White, And Blue (The Angry American).mp3 +/home/mikec/Music/Toby Keith - Courtesy Of The Red, White, And Blue (The Angry American).wma +/home/mikec/Music/John Michael Montgomery - I Love the Way You Love Me.mp3 +/home/mikec/Music/Toby Keith/Greatest Hits 2/Toby Keith - I Wanna Talk About Me.m4a +/home/mikec/Music/Toby Keith - I Wanna Talk About Me.wma +/home/mikec/Music/Toby Keith/Greatest Hits 2/Toby Keith - My List.m4a +/home/mikec/Music/Toby Keith - My List.wma +/home/mikec/Music/Toby Keith - I Wanna Talk About Me.mp3 +/home/mikec/Music/Toby Keith - My List.mp3 +/home/mikec/Music/Toby Keith/35 Biggest Hits/Toby Keith - As Good as I Once Was.m4a +/home/mikec/Music/Toby Keith - As Good as I Once Was.mp3 +/home/mikec/Music/Toby Keith - As Good as I Once Was.wma +/home/mikec/Music/Toby Keith - Beers Ago.mp3 +/home/mikec/Music/Toby Keith - Beers Ago.wma +/home/mikec/Music/Toby Keith/Clancy's Tavern (Deluxe Edition)/Toby Keith - Beers Ago.m4a +/home/mikec/Music/Tommy Lee - Hold Me Down.wma +/home/mikec/Music/Tommy Lee/Unknown Album/Tommy Lee - Hold Me Down.m4a +/home/mikec/Music/Tool - Schism.wma +/home/mikec/Music/Tool/Unknown Album/Tool - Schism.m4a +/home/mikec/Music/Trace Adkins - Honky Tonk Badonkadonk.mp3 +/home/mikec/Music/Traffic - Dear Mr. Fantasy.wma +/home/mikec/Music/Traffic/Unknown Album/Traffic - Dear Mr. Fantasy.m4a +/home/mikec/Music/Trapt - Headstrong.mp3 +/home/mikec/Music/Travis Tritt - Helping Me Get Over You.mp3 +/home/mikec/Music/Travis Tritt - T-R-O-U-B-L-E.mp3 +/home/mikec/Music/Travis Tritt - Love of a Woman.mp3 +/home/mikec/Music/Travis Tritt - It's a Great Day to Be Alive.mp3 +/home/mikec/Music/Travis Tritt - Strong Enough to Be Your Man.mp3 +/home/mikec/Music/Travis Tritt - Here's a Quarter (Call Someone Who Cares).mp3 +/home/mikec/Music/Twisted Sister - I Wanna Rock (Official Music Video).mp3 +/home/mikec/Music/Twisted Sister - I Wanna Rock (Official Music Video).mp3_ +/home/mikec/Music/Twisted Sister/Unknown Album/Twisted Sister - We're Not Gonna Take It.m4a +/home/mikec/Music/Twisted Sister - We’re Not Gonna Take It.wma +/home/mikec/Music/Twisted Sister - We're Not Gonna Take It.mp3 +/home/mikec/Music/I Wanna Rock.mp3 +/home/mikec/Music/I Wanna Rock.mp3_ +/home/mikec/Music/U2 - Pride (In the Name of Love).wma +/home/mikec/Music/U2/Unknown Album/U2 - Pride (In the Name of Love).m4a +/home/mikec/Music/U2/Unknown Album/U2 - New Year's Day.m4a +/home/mikec/Music/U2 - New Year’s Day.wma +/home/mikec/Music/U2 - I Still Haven't Found What I'm Looking For.wma +/home/mikec/Music/U2/Unknown Album/U2 - I Still Haven't Found What I'm Looking For.m4a +/home/mikec/Music/U2 - Sunday Bloody Sunday.wma +/home/mikec/Music/U2/Unknown Album/U2 - Sunday Bloody Sunday.m4a +/home/mikec/Music/U2/Unknown Album/U2 - Where the Streets Have No Name.m4a +/home/mikec/Music/U2 - Where the Streets Have No Name.wma +/home/mikec/Music/U2/Unknown Album/U2 - When Love Comes to Town.m4a +/home/mikec/Music/U2 - When Love Comes to Town.wma +/home/mikec/Music/U2 - Pride (In the Name of Love).mp3 +/home/mikec/Music/U2 - New Year’s Day.mp3 +/home/mikec/Music/U2 - Sunday Bloody Sunday.mp3 +/home/mikec/Music/U2 - Where the Streets Have No Name.mp3 +/home/mikec/Music/U2 - When Love Comes to Town.mp3 +/home/mikec/Music/U2 - Desire.mp3 +/home/mikec/Music/U2 - Desire.wma +/home/mikec/Music/U2/Unknown Album/U2 - Desire.m4a +/home/mikec/Music/Van Halen - Why Can’t This Be Love.mp3 +/home/mikec/Music/Commander Cody & His Lost Planet Airmen - Hot Rod Lincoln.mp3 +/home/mikec/Music/Creed - One Last Breath.mp3 +/home/mikec/Music/Audioslave - Cochise.mp3 +/home/mikec/Music/Gerry & the Pacemakers - How Do You Do It.mp3 +/home/mikec/Music/London Music Works - Pulp Fiction Misirlou.mp3 +/home/mikec/Music/Velvet Revolver - Fall to Pieces.mp3 +/home/mikec/Music/Matchbox 20/Yourself Or Someone Like You/Matchbox 20 - 3 A.M..m4a +/home/mikec/Music/Warrant - Cherry Pie.mp3 +/home/mikec/Music/Warrant - Cherry Pie.wma +/home/mikec/Music/Warrant/Unknown Album/Warrant - Cherry Pie.m4a +/home/mikec/Music/Weezer - Say It Ain’t So (remix).mp3 +/home/mikec/Music/Weezer - The Sweater Song.mp3 +/home/mikec/Music/Weezer - Buddy Holly.mp3 +/home/mikec/Music/Weezer - Hash Pipe.mp3 +/home/mikec/Music/Weezer - Beverly Hills.mp3 +/home/mikec/Music/Weezer - We Are All on Drugs.mp3 +/home/mikec/Music/Wheatus - Teenage Dirtbag.mp3 +/home/mikec/Music/Whitesnake - Here I go again 87.mp3 +/home/mikec/Music/Whitesnake - Here I go again 87.wma +/home/mikec/Music/Whitesnake/Unknown Album/Whitesnake - Here I go again 87.m4a +/home/mikec/Music/White Zombie - More Human Than Human.mp3 +/home/mikec/Music/White Zombie - Thunder Kiss ’65.mp3 +/home/mikec/Music/Willie Nelson - Always On My Mind.mp3 +/home/mikec/Music/Willie Nelson - She Loves My Automobile.wma +/home/mikec/Music/ZZ Top/Unknown Album/Willie Nelson - She Loves My Automobile.m4a +/home/mikec/Music/Willie Nelson - She Loves My Automobile.mp3 +/home/mikec/Music/Winger - Seventeen.wma +/home/mikec/Music/Winger/Unknown Album/Winger - Seventeen.m4a +/home/mikec/Music/Winger - Seventeen.mp3 +/home/mikec/Music/Psalms 104 sung in ancient Hebrew _ ברכי נפשי את ה' - תהלים קד.mp3 +/home/mikec/Music/Psalms 104 sung in ancient Hebrew _ ברכי נפשי את ה' - תהלים קד.mp3_ +/home/mikec/Music/Yamma Ensemble - King David - biblical Hebrew translated and pronunciation subtitles.mp3 +/home/mikec/Music/Yamma Ensemble - King David - biblical Hebrew translated and pronunciation subtitles.mp3_ +/home/mikec/Music/Zac Brown Band - Toes.mp3 +/home/mikec/Music/Zac Brown Band - Chicken Fried.mp3 +/home/mikec/Music/Zac Brown Band - Homegrown.mp3 +/home/mikec/Music/ZZ Top - I Thank You.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - I Thank You.m4a +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Waitin’ for the Bus.m4a +/home/mikec/Music/ZZ Top - Waitin’ for the Bus.wma +/home/mikec/Music/ZZ Top - Jesus Just Left Chicago.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Jesus Just Left Chicago.m4a +/home/mikec/Music/ZZ Top - Rough Boy.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Rough Boy.m4a +/home/mikec/Music/ZZ Top - Tush.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Tush.m4a +/home/mikec/Music/ZZ Top - Just Got Paid.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Just Got Paid.m4a +/home/mikec/Music/ZZ Top - My Head’s in Mississippi.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - My Head’s in Mississippi.m4a +/home/mikec/Music/ZZ Top - Pearl Necklace.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Pearl Necklace.m4a +/home/mikec/Music/ZZ Top - I’m Bad, I’m Nationwide.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - I’m Bad, I’m Nationwide.m4a +/home/mikec/Music/ZZ Top - Lowdown in the Street.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Lowdown in the Street.m4a +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Viva Las Vegas.m4a +/home/mikec/Music/ZZ Top - Viva Las Vegas.wma +/home/mikec/Music/ZZ Top - Sleeping Bag.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Sleeping Bag.m4a +/home/mikec/Music/ZZ Top - Planet of Women.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Planet of Women.m4a +/home/mikec/Music/ZZ Top - La Grange.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - La Grange.m4a +/home/mikec/Music/ZZ Top - Tube Snake Boogie.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Tube Snake Boogie.m4a +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Legs.m4a +/home/mikec/Music/ZZ Top - I Thank You.mp3 +/home/mikec/Music/ZZ Top - Sharp Dressed Man.mp3 +/home/mikec/Music/ZZ Top - Waitin’ for the Bus.mp3 +/home/mikec/Music/ZZ Top - Jesus Just Left Chicago.mp3 +/home/mikec/Music/ZZ Top - Rough Boy.mp3 +/home/mikec/Music/ZZ Top - Tush.mp3 +/home/mikec/Music/ZZ Top - Just Got Paid.mp3 +/home/mikec/Music/ZZ Top - My Head’s in Mississippi.mp3 +/home/mikec/Music/ZZ Top - Pearl Necklace.mp3 +/home/mikec/Music/ZZ Top - I’m Bad, I’m Nationwide.mp3 +/home/mikec/Music/ZZ Top - Lowdown in the Street.mp3 +/home/mikec/Music/ZZ Top - Viva Las Vegas.mp3 +/home/mikec/Music/ZZ Top - Sleeping Bag.mp3 +/home/mikec/Music/ZZ Top - I Gotsta Get Paid.mp3 +/home/mikec/Music/ZZ Top - La Grange.mp3 +/home/mikec/Music/ZZ Top - Tube Snake Boogie (digitally remixed).mp3 +/home/mikec/Music/ZZ Top - Beer Drinkers & Hell Raisers.mp3 +/home/mikec/Music/ZZ Top - Beer Drinkers & Hell Raisers.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Beer Drinkers & Hell Raisers.m4a +/home/mikec/Music/ZZ Top - Heard It on the X.mp3 +/home/mikec/Music/ZZ Top - Heard It on the X.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Heard It on the X.m4a +/home/mikec/Music/ZZ Top - A Fool for Your Stockings.mp3 +/home/mikec/Music/ZZ Top - A Fool for Your Stockings.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - A Fool for Your Stockings.m4a +/home/mikec/Music/ZZ Top - Dust My Broom.mp3 +/home/mikec/Music/ZZ Top - Dust My Broom.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Dust My Broom.m4a +/home/mikec/Music/ZZ Top - Got Me Under Pressure.mp3 +/home/mikec/Music/ZZ Top - Got Me Under Pressure.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Got Me Under Pressure.m4a +/home/mikec/Music/ZZ Top - Gimme All Your Lovin’.mp3 +/home/mikec/Music/ZZ Top - Gimme All Your Lovin’.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Gimme All Your Lovin’.m4a +/home/mikec/Music/ZZ Top - Give It Up.mp3 +/home/mikec/Music/ZZ Top - Give It Up.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Give It Up.m4a +/home/mikec/Music/ZZ Top - Doubleback.mp3 +/home/mikec/Music/ZZ Top - Doubleback.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Doubleback.m4a +/home/mikec/Music/ZZ Top - Cheap Sunglasses.mp3 +/home/mikec/Music/ZZ Top - Cheap Sunglasses.wma +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Cheap Sunglasses.m4a +/home/mikec/Music/Bad Girl (2008 Remaster).mp3 +/home/mikec/Music/Dirty Dog (2008 Remaster).mp3 +/home/mikec/Music/Have You Heard (2005 Remaster).mp3 +/home/mikec/Music/Hi Fi Mama.mp3 +/home/mikec/Music/Hot, Blue and Righteous (2006 Remaster).mp3 +/home/mikec/Music/If I Could Only Flag Her Down (2008 Remaster).mp3 +/home/mikec/Music/I Got the Six (2008 Remaster).mp3 +/home/mikec/Music/I Need You Tonight (2008 Remaster).mp3 +/home/mikec/Music/Manic Mechanic.mp3 +/home/mikec/Music/Master of Sparks (2006 Remaster).mp3 +/home/mikec/Music/Move Me on Down the Line (2005 Remaster).mp3 +/home/mikec/Music/Precious and Grace (2005 Remaster).mp3 +/home/mikec/Music/Sheik (2005 Remaster).mp3 +/home/mikec/Music/Thug (2008 Remaster).mp3 +/home/mikec/Music/TV Dinners (2008 Remaster).mp3 +/home/mikec/Music/Road to Eilat (Israeli Patriotic War Song) 🇮🇱.mp3 +/home/mikec/Music/Road to Eilat (Israeli Patriotic War Song) ������������.mp3 +/home/mikec/Music/上戸彩 - 愛のために。(instrumental).mp3 diff --git a/.config/cmus/playlists/default b/.config/cmus/playlists/default new file mode 100644 index 0000000..f642cec --- /dev/null +++ b/.config/cmus/playlists/default @@ -0,0 +1,9 @@ +/home/mikec/Music/Creed - One Last Breath.mp3 +/home/mikec/Music/TV Dinners (2008 Remaster).mp3 +/home/mikec/Music/Creed - My Own Prison.mp3 +/home/mikec/Music/Master of Sparks (2006 Remaster).mp3 +/home/mikec/Music/Creed- Higher [sHcYaS3m1c4].opus +/home/mikec/Music/ZZ Top/Unknown Album/ZZ Top - Legs.m4a +/home/mikec/Music/ZZ Top - Got Me Under Pressure.mp3 +/home/mikec/Music/The Black Keys _Black Mud Part II_ Remastered 10th Anniversary Edition _Official Audio_.mp3 +/home/mikec/Music/The Black Keys - Black Mud.mp3 diff --git a/.config/cmus/rc b/.config/cmus/rc new file mode 100644 index 0000000..a499bf4 --- /dev/null +++ b/.config/cmus/rc @@ -0,0 +1 @@ +set output_plugin=pulse diff --git a/.config/cmus/search-history b/.config/cmus/search-history new file mode 100644 index 0000000..76d246c --- /dev/null +++ b/.config/cmus/search-history @@ -0,0 +1,11 @@ +black mud +got me under +legs +higher +master of spa +my own +tv din +one las +master of sparks +tv dinner +one last diff --git a/.config/enchant/en_US.dic b/.config/enchant/en_US.dic new file mode 100644 index 0000000..e69de29 diff --git a/.config/enchant/en_US.exc b/.config/enchant/en_US.exc new file mode 100644 index 0000000..e69de29 diff --git a/.config/glib-2.0/settings/keyfile b/.config/glib-2.0/settings/keyfile new file mode 100644 index 0000000..e33e65f --- /dev/null +++ b/.config/glib-2.0/settings/keyfile @@ -0,0 +1,3 @@ +[com/github/lainsce/palaura] +window-x=26 +window-y=23 diff --git a/.config/goread/urls.yml b/.config/goread/urls.yml new file mode 100644 index 0000000..98d521d --- /dev/null +++ b/.config/goread/urls.yml @@ -0,0 +1,13 @@ +categories: + - name: All Feeds + desc: All feeds + subscriptions: + - name: BBC + desc: News from the BBC + url: http://feeds.bbci.co.uk/news/rss.xml + - name: Tech + desc: Tech news + subscriptions: + - name: strongly typed thoughts + desc: "" + url: https://phaazon.net/blog/feed diff --git a/.config/htop/htoprc b/.config/htop/htoprc new file mode 100644 index 0000000..f16ca62 --- /dev/null +++ b/.config/htop/htoprc @@ -0,0 +1,64 @@ +# Beware! This file is rewritten by htop when settings are changed in the interface. +# The parser is also very primitive, and not human-friendly. +htop_version=3.3.0 +config_reader_min_version=3 +fields=0 48 17 18 38 39 40 2 46 47 49 1 +hide_kernel_threads=1 +hide_userland_threads=0 +hide_running_in_container=0 +shadow_other_users=0 +show_thread_names=0 +show_program_path=1 +highlight_base_name=0 +highlight_deleted_exe=1 +shadow_distribution_path_prefix=0 +highlight_megabytes=1 +highlight_threads=1 +highlight_changes=0 +highlight_changes_delay_secs=5 +find_comm_in_cmdline=1 +strip_exe_from_cmdline=1 +show_merged_command=0 +header_margin=1 +screen_tabs=1 +detailed_cpu_time=0 +cpu_count_from_one=0 +show_cpu_usage=1 +show_cpu_frequency=0 +show_cpu_temperature=0 +degree_fahrenheit=0 +update_process_names=0 +account_guest_in_cpu_meter=0 +color_scheme=0 +enable_mouse=1 +delay=15 +hide_function_bar=0 +topology_affinity=0 +header_layout=two_50_50 +column_meters_0=LeftCPUs4 Memory Swap +column_meter_modes_0=1 1 1 +column_meters_1=RightCPUs4 Tasks LoadAverage Uptime +column_meter_modes_1=1 2 2 2 +tree_view=0 +sort_key=46 +tree_sort_key=0 +sort_direction=-1 +tree_sort_direction=1 +tree_view_always_by_pid=0 +all_branches_collapsed=0 +screen:Main=PID USER PRIORITY NICE M_VIRT M_RESIDENT M_SHARE STATE PERCENT_CPU PERCENT_MEM TIME Command +.sort_key=PERCENT_CPU +.tree_sort_key=PID +.tree_view_always_by_pid=0 +.tree_view=0 +.sort_direction=-1 +.tree_sort_direction=1 +.all_branches_collapsed=0 +screen:I/O=PID USER IO_PRIORITY IO_RATE IO_READ_RATE IO_WRITE_RATE PERCENT_SWAP_DELAY PERCENT_IO_DELAY Command +.sort_key=IO_RATE +.tree_sort_key=PID +.tree_view_always_by_pid=0 +.tree_view=0 +.sort_direction=-1 +.tree_sort_direction=1 +.all_branches_collapsed=0 diff --git a/.config/kak-tree-sitter/config.toml b/.config/kak-tree-sitter/config.toml new file mode 100644 index 0000000..c4108a2 --- /dev/null +++ b/.config/kak-tree-sitter/config.toml @@ -0,0 +1,1440 @@ +# kak-tree-sitter default configuration file. +# +# It is highly recommended for users to copy that file and edit it manually if they need to add support for languages +# not present yet. + +# List of features to be enabled/disabled. Most of those features can be +# overriden in the user configuration, or even on the CLI — see --with-* flags. +[features] +highlighting = true +text_objects = true + +[highlight] +# Top-level highlight capture group declarations. If your grammars uses a capture group that is not defined here, you +# have to add it to the list. +groups = [ + "attribute", + "comment", + "comment.block", + "comment.line", + "constant", + "constant.builtin", + "constant.builtin.boolean", + "constant.character", + "constant.character.escape", + "constant.macro", + "constant.numeric", + "constant.numeric.float", + "constant.numeric.integer", + "constructor", + "diff.plus", + "diff.minus", + "diff.delta", + "diff.delta.moved", + "embedded", + "error", + "function", + "function.builtin", + "function.macro", + "function.method", + "function.special", + "hint", + "include", + "info", + "keyword", + "keyword.conditional", + "keyword.control", + "keyword.control.conditional", + "keyword.control.except", + "keyword.control.exception", + "keyword.control.import", + "keyword.control.repeat", + "keyword.control.return", + "keyword.directive", + "keyword.function", + "keyword.operator", + "keyword.special", + "keyword.storage", + "keyword.storage.modifier", + "keyword.storage.modifier.mut", + "keyword.storage.modifier.ref", + "keyword.storage.type", + "label", + "load", + "markup.bold", + "markup.heading", + "markup.heading.1", + "markup.heading.2", + "markup.heading.3", + "markup.heading.4", + "markup.heading.5", + "markup.heading.6", + "markup.heading.marker", + "markup.italic", + "markup.link.label", + "markup.link.text", + "markup.link.url", + "markup.link.uri", + "markup.list.checked", + "markup.list.numbered", + "markup.list.unchecked", + "markup.list.unnumbered", + "markup.quote" , + "markup.raw", + "markup.raw.block", + "markup.raw.inline", + "markup.strikethrough", + "namespace", + "operator", + "punctuation", + "punctuation.bracket", + "punctuation.delimiter", + "punctuation.special", + "special", + "string", + "string.escape", + "string.regexp", + "string.special", + "string.special.path", + "string.special.symbol", + "string.symbol", + "tag", + "tag.error", + "text", + "type", + "type.builtin", + "type.enum.variant", + "variable", + "variable.builtin", + "variable.other.member", + "variable.parameter", + "warning", +] + +# astro +[language.astro.grammar.source.git] +url = "https://github.com/virchau13/tree-sitter-astro" +pin = "4be180759ec13651f72bacee65fa477c64222a1a" + +[language.astro.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "astro.so"] +link_flags = ["-O3"] + +[language.astro.queries.source.git] +url = "https://git.sr.ht/~hadronized/kak-tree-sitter" +pin = "862f6cd58b38d9d1b4abfb722b4a4b25bdae2586" + +[language.astro.queries] +path = "runtime/queries/astro" + +# awk +[language.awk.grammar.source.git] +url = "https://github.com/Beaglefoot/tree-sitter-awk" +pin = "8eaa762d05cc67c0e2cc53a0a71750b3c16733c2" + +[language.awk.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "awk.so"] +link_flags = ["-O3"] + +[language.awk.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.awk.queries] +path = "runtime/queries/awk" + +# bash +[language.bash.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-bash" +pin = "275effdfc0edce774acf7d481f9ea195c6c403cd" + +[language.bash.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.cc", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "bash.so"] +link_flags = ["-O3", "-lstdc++"] + +[language.bash.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.bash.queries] +path = "runtime/queries/bash" + +# bass +# TODO + +# beancount +# TODO + +# bibtex +[language.bibtex.grammar.source.git] +url = "https://github.com/latex-lsp/tree-sitter-bibtex" +pin = "ccfd77db0ed799b6c22c214fe9d2937f47bc8b34" + +[language.bibtex.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "bibtex.so"] +link_flags = ["-O3"] + +[language.bibtex.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.bibtex.queries] +path = "runtime/queries/bibtex" + +# bicep +# TODO + +# c +[language.c.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-c" +pin = "7175a6dd5fc1cee660dce6fe23f6043d75af424a" + +[language.c.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "c.so"] +link_flags = ["-O3"] + +[language.c.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.c.queries] +path = "runtime/queries/c" + +# cabal +# TODO + +# cairo +# TODO + +# capnp +# TODO + +# clojure +# TODO + +# cmake +[language.cmake.grammar.source.git] +url = "https://github.com/uyha/tree-sitter-cmake" +pin = "6e51463ef3052dd3b328322c22172eda093727ad" + +[language.cmake.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "../scanner.cc", "-I", ".."] +compile_flags = ["-O3", "-flto=auto", "-march=native"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "scanner.o", "-o", "cmake.so"] +link_flags = ["-O3", "-lstdc++", "-flto=auto"] + +[language.cmake.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.cmake.queries] +path = "runtime/queries/cmake" + +# comment +[language.comment.grammar.source.git] +url = "https://github.com/stsewd/tree-sitter-comment" +pin = "94c99a66bb5051d8321b5900aee92b76450c50ce" + +[language.comment.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "comment.so"] +link_flags = ["-O3"] + +[language.comment.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.comment.queries] +path = "runtime/queries/comment" + +# common-lisp +# TODO + +# cpon +# TODO + +# cpp +[language.cpp.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-cpp" +pin = "670404d7c689be1c868a46f919ba2a3912f2b7ef" + +[language.cpp.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.cc", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "cpp.so"] +link_flags = ["-O3", "-lstdc++"] + +[language.cpp.queries.source.git] +url = "https://git.sr.ht/~hadronized/kak-tree-sitter" +pin = "b0ecb0d376c94d2fa4814816b41986bf5d735384" + +[language.cpp.queries] +path = "runtime/queries/cpp" + +# crystal +# TODO + +# c-sharp +[language.csharp.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-c-sharp" +pin = "92c0a9431400cd8b6b6ee7503f81da3ae83fc830" + +[language.csharp.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "csharp.so"] +link_flags = ["-O3"] + +[language.csharp.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "be307a420480178c1bc443992c8336f6471b8b7b" + +[language.csharp.queries] +path = "runtime/queries/c-sharp" + +# css +[language.css.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-css" +pin = "769203d0f9abe1a9a691ac2b9fe4bb4397a73c51" + +[language.css.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "css.so"] +link_flags = ["-O3"] + +[language.css.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.css.queries] +path = "runtime/queries/css" + +# cue +# TODO + +# d +# TODO + +# dart +# TODO + +# devicetree +# TODO + +# dhall +# TODO + +# diff +[language.diff.grammar.source.git] +url = "https://github.com/the-mikedavis/tree-sitter-diff" +pin = "fd74c78fa88a20085dbc7bbeaba066f4d1692b63" + +[language.diff.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "diff.so"] +link_flags = ["-O3"] + +[language.diff.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.diff.queries] +path = "runtime/queries/diff" + +# dockerfile +# TODO + +# dot +# TODO + +# dtd +# TODO + +# ecma +# TODO + +# edoc +# TODO + +# eex +# TODO + +# ejs +# TODO + +# elixir +[language.elixir.grammar.source.git] +url = "https://github.com/elixir-lang/tree-sitter-elixir" +pin = "511ea5e0088779e4bdd76e12963ab9a5fe99983a" + +[language.elixir.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "elixir.so"] +link_flags = ["-O3"] + +[language.elixir.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "be307a420480178c1bc443992c8336f6471b8b7b" + +[language.elixir.queries] +path = "runtime/queries/elixir" + +# elm +# TODO + +# elvish +# TODO + +# env +# TODO + +# erb +# TODO + +# erlang +# TODO + +# esdl +# TODO + +# fish +[language.fish.grammar.source.git] +url = "https://github.com/ram02z/tree-sitter-fish" +pin = "84436cf24c2b3176bfbb220922a0fdbd0141e406" + +[language.fish.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "../scanner.c", "-I", ".."] +compile_flags = ["-O3", "-march=native", "-flto=auto"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "scanner.o", "-o", "fish.so"] +link_flags = ["-O3", "-flto=auto"] + +[language.fish.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.fish.queries] +path = "runtime/queries/fish" + +# fortran +# TODO + +# gdscript +# TODO + +# git-attributes +# TODO + +# git-commit +[language.git-commit.grammar.source.git] +url = "https://github.com/the-mikedavis/tree-sitter-git-commit" +pin = "db88cffa3952dd2328b741af5d0fc69bdb76704f" + +[language.git-commit.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "git-commit.so"] +link_flags = ["-O3"] + +[language.git-commit.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.git-commit.queries] +path = "runtime/queries/git-commit" + +# git-config +# TODO + +# git-ignore +# TODO + +# git-rebase +# TODO + +# gleam +# TODO + +# glsl +# TODO + +# go +[language.go.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-go" +pin = "64457ea6b73ef5422ed1687178d4545c3e91334a" + +[language.go.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "go.so"] +link_flags = ["-O3"] + +[language.go.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.go.queries] +path = "runtime/queries/go" + +# godot-resource +# TODO + +# gomod +# TODO + +# gotmpl +# TODO + +# gowork +# TODO + +# graphql +# TODO + +# hare +# TODO + +# haskell +[language.haskell.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-haskell" +pin = "98fc7f59049aeb713ab9b72a8ff25dcaaef81087" + +[language.haskell.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "../scanner.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "scanner.o", "-o", "haskell.so"] +link_flags = ["-O3"] + +[language.haskell.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.haskell.queries] +path = "runtime/queries/haskell" + +# hcl +# TODO + +# heex +# TODO + +# hosts +# TODO + +# html +[language.html.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-html" +pin = "86c253e675e7fdd1c0482efe0706f24bafbc3a7d" + +[language.html.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "../scanner.cc", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "html.so"] +link_flags = ["-O3", "-lstdc++"] + +[language.html.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.html.queries] +path = "runtime/queries/html" + +# hurl +# TODO + +# iex +# TODO + +# ini +# TODO + +# java +[language.java.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-java" +pin = "09d650def6cdf7f479f4b78f595e9ef5b58ce31e" + +[language.java.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "java.so"] +link_flags = ["-O3"] + +[language.java.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.java.queries] +path = "runtime/queries/java" + +# javascript +[language.javascript.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-javascript" +pin = "f1e5a09b8d02f8209a68249c93f0ad647b228e6e" + +[language.javascript.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "javascript.so"] +link_flags = ["-O3"] + +[language.javascript.queries.source.git] +url = "https://git.sr.ht/~hadronized/kak-tree-sitter" +pin = "834d348b85868fbe9033231e72f29be361346aeb" + +[language.javascript.queries] +path = "runtime/queries/javascript" + +# jsdoc +# TODO + +# json +[language.json.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-json" +pin = "73076754005a460947cafe8e03a8cf5fa4fa2938" + +[language.json.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "json.so"] +link_flags = ["-O3"] + +[language.json.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.json.queries] +path = "runtime/queries/json" + +# jsonnet +# TODO + +# jsx +[language.jsx.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-javascript" +pin = "f1e5a09b8d02f8209a68249c93f0ad647b228e6e" + +[language.jsx.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "jsx.so"] +link_flags = ["-O3"] + +[language.jsx.queries.source.git] +url = "https://git.sr.ht/~hadronized/kak-tree-sitter" +pin = "834d348b85868fbe9033231e72f29be361346aeb" + +[language.jsx.queries] +path = "runtime/queries/jsx" + +# julia +[language.julia.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-julia" +pin = "2f885efd38a6a6abfefc81d53ecdd99812dcde69" + +[language.julia.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "-flto=auto", "../parser.c", "../scanner.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "-flto=auto", "parser.o", "scanner.o", "-o", "julia.so"] +link_flags = ["-O3"] + +[language.julia.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.julia.queries] +path = "runtime/queries/julia" + +# just +# TODO + +# kdl +# TODO + +# kotlin +[language.kotlin.grammar.source.git] +url = "https://github.com/fwcd/tree-sitter-kotlin" +pin = "a4f71eb9b8c9b19ded3e0e9470be4b1b77c2b569" + +[language.kotlin.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "kotlin.so"] +link_flags = ["-O3"] + +[language.kotlin.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "f73e9a8d15fd5a87d472a49808baf42ba403f9bf" + +[language.kotlin.queries] +path = "runtime/queries/kotlin" + +# latex +[language.latex.grammar.source.git] +url = "https://github.com/latex-lsp/tree-sitter-latex" +pin = "dfe891922ccd2e7cef52eccb2775e1b576727165" + +[language.latex.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "latex.so"] +link_flags = ["-O3"] + +[language.latex.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.latex.queries] +path = "runtime/queries/latex" + +# lean +# TODO + +# ledger +# TODO + +# llvm +[language.llvm.grammar.source.git] +url = "https://github.com/benwilliamgraham/tree-sitter-llvm" +pin = "1b96e58faf558ce057d4dc664b904528aee743cb" + +[language.llvm.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "llvm.so"] +link_flags = ["-O3"] + +[language.llvm.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "e76020ddb93eeb051de606c24f92189c3fc55547" + +[language.llvm.queries] +path = "runtime/queries/llvm" + +# llvm-mir +# TODO + +# llvm-mir-yaml +# TODO + +# lua +# TODO + +# make +[language.make.grammar.source.git] +url = "https://github.com/alemuller/tree-sitter-make" +pin = "a4b9187417d6be349ee5fd4b6e77b4172c6827dd" + +[language.make.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "make.so"] +link_flags = ["-O3"] + +[language.make.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.make.queries] +path = "runtime/queries/make" + +# markdoc +# TODO + +# markdown +[language.markdown.grammar.source.git] +url = "https://github.com/MDeiml/tree-sitter-markdown" +pin = "aaf76797aa8ecd9a5e78e0ec3681941de6c945ee" + +[language.markdown.grammar] +path = "tree-sitter-markdown/src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "markdown.so"] +link_flags = ["-O3"] + +[language.markdown.queries.source.git] +url = "https://git.sr.ht/~hadronized/kak-tree-sitter" +pin = "d2d9761f309d6204a8f4480dc23f10558a165e29" + +[language.markdown.queries] +path = "runtime/queries/markdown" + +# markdown.inline +[language."markdown.inline".grammar.source.git] +url = "https://github.com/MDeiml/tree-sitter-markdown" +pin = "aaf76797aa8ecd9a5e78e0ec3681941de6c945ee" + +[language."markdown.inline".grammar] +path = "tree-sitter-markdown-inline/src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "markdown.inline.so"] +link_flags = ["-O3"] + +[language."markdown.inline".queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "56ccaedffbb8011e36012278e2a4861a8d435a60" + +[language."markdown.inline".queries] +path = "runtime/queries/markdown.inline" + +# matlab +# TODO + +# mermaid +# TODO + +# meson +# TODO + +# msbuild +# TODO + +# nasm +# TODO + +# nickel +# TODO + +# nim + +[language.nim.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "nim.so"] +link_flags = ["-O3"] + +[language.nim.grammar.source.git] +url = "https://github.com/alaviss/tree-sitter-nim" +pin = "961c2798cec9250c44f7d7225ddb33d47d25856a" + +[language.nim.queries] +path = "runtime/queries/nim" + +[language.nim.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "50c90cb47c9cdbb044d1a2de034285e0d198f43e" + +# nix + +[language.nix.grammar.source.git] +url = "https://github.com/nix-community/tree-sitter-nix" +pin = "763168fa916a333a459434f1424b5d30645f015d" + +[language.nix.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "nix.so"] +link_flags = ["-O3"] + +[language.nix.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "be307a420480178c1bc443992c8336f6471b8b7b" + +[language.nix.queries] +path = "runtime/queries/nix" + +# nu +[language.nu.grammar.source.git ] +url = "https://github.com/nushell/tree-sitter-nu" +pin = "786689b0562b9799ce53e824cb45a1a2a04dc673" + +[language.nu.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "nu.so"] +link_flags = ["-O3"] + +[language.nu.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "107763083405868f3679d8e12476ed0688896f87" + +[language.nu.queries] +path = "runtime/queries/nu" + +# ocaml +# TODO + +# ocaml-interface +# TODO + +# odin +# TODO + +# opencl +# TODO + +# openscad +# TODO + +# org +# TODO + +# pascal +# TODO + +# passwd +# TODO + +# pem +# TODO + +# perl +# TODO + +# php +# TODO + +# po +# TODO + +# ponylang +# TODO + +# prisma +# TODO + +# protobuf +# TODO + +# prql +# TODO + +# purescript +[language.purescript.grammar.source.git] +url = "https://github.com/postsolar/tree-sitter-purescript/" +pin = "1615ac3b9c3b572259bce7a30c14cb06d6c2f2ff" + +[language.purescript.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "../scanner.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "scanner.o", "-o", "purescript.so"] +link_flags = ["-O3"] + +[language.purescript.queries.source.git] +url = "https://github.com/postsolar/tree-sitter-purescript" +pin = "1615ac3b9c3b572259bce7a30c14cb06d6c2f2ff" + +[language.purescript.queries] +path = "queries" + +# python +[language.python.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-python" +pin = "de221eccf9a221f5b85474a553474a69b4b5784d" + +[language.python.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.cc", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "python.so"] +link_flags = ["-O3", "-lstdc++"] + +[language.python.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.python.queries] +path = "runtime/queries/python" + +# qml +# TODO + +# r +# TODO + +# racket +# TODO + +# regex +# TODO + +# rego +# TODO + +# rescript +# TODO + +# rmarkdown +# TODO + +# robot +# TODO + +# ron +# TODO + +# rst +# TODO + +# ruby +[language.ruby.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-ruby" +pin = "206c7077164372c596ffa8eaadb9435c28941364" + +[language.ruby.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.cc", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "c++" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "ruby.so"] +link_flags = ["-O3", "-lstdc++"] + +[language.ruby.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.ruby.queries] +path = "runtime/queries/ruby" + +# rust +[language.rust.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-rust" +pin = "0431a2c60828731f27491ee9fdefe25e250ce9c9" + +[language.rust.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "rust.so"] +link_flags = ["-O3"] + +[language.rust.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "3e963b3c1b5eb4b5cd7f33b8ef6d6642de210a9b" + +[language.rust.queries] +path = "runtime/queries/rust" + +# scss +[language.scss.grammar.source.git] +url = "https://github.com/serenadeai/tree-sitter-scss" +pin = "c478c6868648eff49eb04a4df90d703dc45b312a" + +[language.scss.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "scss.so"] +link_flags = ["-O3"] + +[language.scss.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "be307a420480178c1bc443992c8336f6471b8b7b" + +[language.scss.queries] +path = "runtime/queries/scss" + +# sage +# TODO + +# scala +# TODO + +# scheme +[language.scheme.grammar.source.git] +url = "https://github.com/6cdh/tree-sitter-scheme" +pin = "c0741320bfca6b7b5b7a13b5171275951e96a842" + +[language.scheme.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "scheme.so"] +link_flags = ["-O3"] + +[language.scheme.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.scheme.queries] +path = "runtime/queries/scheme" + +# scss +# TODO + +# slint +# TODO + +# smithy +# TODO + +# sml +# TODO + +# solidity +# TODO + +# sql +# TODO + +# sshclientconfig +# TODO + +# starlark +# TODO + +# svelte +# TODO + +# sway +# TODO + +# swift +# TODO + +# tablegen +# TODO + +# task +# TODO + +# tfvars +# TODO + +# toml +[language.toml.grammar.source.git] +url = "https://github.com/ikatyang/tree-sitter-toml" +pin = "8bd2056818b21860e3d756b5a58c4f6e05fb744e" + +[language.toml.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "toml.so"] +link_flags = ["-O3"] + +[language.toml.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.toml.queries] +path = "runtime/queries/toml" + +# tsq +# TODO + +# tsx +[language.tsx.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-typescript" +pin = "b1bf4825d9eaa0f3bdeb1e52f099533328acfbdf" + +[language.tsx.grammar] +path = "tsx/src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "tsx.so"] +link_flags = ["-O3"] + +[language.tsx.queries.source.git] +url = "https://git.sr.ht/~hadronized/kak-tree-sitter" +pin = "b0ecb0d376c94d2fa4814816b41986bf5d735384" + +[language.tsx.queries] +path = "runtime/queries/tsx" + +# twig +# TODO + +# typescript +[language.typescript.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-typescript" +pin = "b1bf4825d9eaa0f3bdeb1e52f099533328acfbdf" + +[language.typescript.grammar] +path = "typescript/src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "typescript.so"] +link_flags = ["-O3"] + +[language.typescript.queries.source.git] +url = "https://git.sr.ht/~hadronized/kak-tree-sitter" +pin = "b0ecb0d376c94d2fa4814816b41986bf5d735384" + +[language.typescript.queries] +path = "runtime/queries/typescript" + +# ungrammar +# TODO + +# unison +[language.unison.grammar.source.git] +url = "https://github.com/kylegoetz/tree-sitter-unison" +pin = "1f505e2447fa876a87aee47ff3d70b9e141c744f" + +[language.unison.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.c", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "unison.so"] +link_flags = ["-O3"] + +[language.unison.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "be307a420480178c1bc443992c8336f6471b8b7b" + +[language.unison.queries] +path = "runtime/queries/unison" + +# uxntal +# TODO + +# v +# TODO + +# vala +# TODO + +# verilog +[language.verilog.grammar.source.git] +url = "https://github.com/tree-sitter/tree-sitter-verilog" +pin = "902031343056bc0b11f3e47b33f036a9cf59f58d" + +[language.verilog.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "verilog.so"] +link_flags = ["-O3"] + +[language.verilog.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "cb286b7a5df247057602f3bba3254b4c58093375" + +[language.verilog.queries] +path = "runtime/queries/verilog" + +# vhdl +# TODO + +# vhs +# TODO + +# vue +[language.vue.grammar.source.git] +url = "https://github.com/ikatyang/tree-sitter-vue" +pin = "91fe2754796cd8fba5f229505a23fa08f3546c06" + +[language.vue.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.cc", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "vue.so"] +link_flags = ["-O3", "-lstdc++"] + +[language.vue.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "be307a420480178c1bc443992c8336f6471b8b7b" + +[language.vue.queries] +path = "runtime/queries/vue" + +# wast +# TODO + +# wat +# TODO + +# wgsl +# TODO + +# wit +# TODO + +# xit +# TODO + +# xml +[language.xml.grammar.source.git] +url = "https://github.com/RenjiSann/tree-sitter-xml" +pin = "48a7c2b6fb9d515577e115e6788937e837815651" + +[language.xml.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "xml.so"] +link_flags = ["-O3"] + +[language.xml.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.xml.queries] +path = "runtime/queries/xml" + +# yaml +[language.yaml.grammar.source.git] +url = "https://github.com/ikatyang/tree-sitter-yaml" +pin = "0e36bed171768908f331ff7dff9d956bae016efb" + +[language.yaml.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../scanner.cc", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "scanner.o", "parser.o", "-o", "yaml.so"] +link_flags = ["-O3", "-lstdc++"] + +[language.yaml.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "dbd248fdfa680373d94fbc10094a160aafa0f7a7" + +[language.yaml.queries] +path = "runtime/queries/yaml" + +# yuck +# TODO + +# zig +[language.zig.grammar.source.git] +url = "https://github.com/maxxnino/tree-sitter-zig" +pin = "0d08703e4c3f426ec61695d7617415fff97029bd" + +[language.zig.grammar] +path = "src" +compile = "cc" +compile_args = ["-c", "-fpic", "../parser.c", "-I", ".."] +compile_flags = ["-O3"] +link = "cc" +link_args = ["-shared", "-fpic", "parser.o", "-o", "zig.so"] +link_flags = ["-O3"] + +[language.zig.queries.source.git] +url = "https://github.com/helix-editor/helix" +pin = "bc737404e8ad462b4101987730f4a76658d132ad" + +[language.zig.queries] +path = "runtime/queries/zig" diff --git a/.config/kak/colors/base16-kakoune b/.config/kak/colors/base16-kakoune new file mode 120000 index 0000000..e4ac206 --- /dev/null +++ b/.config/kak/colors/base16-kakoune @@ -0,0 +1 @@ +/home/mikec/.config/kak/plugins/base16-kakoune \ No newline at end of file diff --git a/.config/kak/colors/catppuccin_macchiato.kak b/.config/kak/colors/catppuccin_macchiato.kak new file mode 100644 index 0000000..967279c --- /dev/null +++ b/.config/kak/colors/catppuccin_macchiato.kak @@ -0,0 +1,163 @@ +# Catppuccin Macchiato theme for Kakoune +# +# Taken and adapted from +# + +# Color palette +declare-option str rosewater "rgb:f4dbd6" +declare-option str red "rgb:ed8796" +declare-option str mauve "rgb:c6a0f6" +declare-option str maroon "rgb:ee99a0" +declare-option str pink "rgb:f5bde6" +declare-option str cyan "rgb:7dc4e4" +declare-option str yellow "rgb:eed49f" +declare-option str green "rgb:a6da95" +declare-option str white "rgb:cad3f5" +declare-option str blue "rgb:8aadf4" +declare-option str sky "rgb:91d7e3" +declare-option str lavender "rgb:b7bdf8" +declare-option str black1 "rgb:1e2030" +declare-option str black2 "rgb:24273a" +declare-option str black3 "rgb:363a4f" +declare-option str orange "rgb:f5a97f" +declare-option str teal "rgb:8bd5ca" +declare-option str flamingo "rgb:f0c6c6" +declare-option str gray0 "rgb:5b6078" +declare-option str gray1 "rgb:6e738d" +declare-option str bright_red "%opt{red}+b" +declare-option str bright_green "%opt{green}+b" +declare-option str bright_yellow "%opt{yellow}+b" +declare-option str bright_blue "%opt{blue}+b" +declare-option str bright_cyan "%opt{cyan}+b" +declare-option str bright_white "%opt{white}+b" +declare-option str foreground %opt{white} +declare-option str background %opt{black2} +declare-option str overlay0 "rgb:8087a2" +declare-option str overlay1 "rgb:939ab7" + +# Markup +set-face global title "%opt{rosewater}" +set-face global header "%opt{bright_red}" +set-face global bold "%opt{mauve}" +set-face global italic "%opt{lavender}" +set-face global mono "%opt{green}" +set-face global block "%opt{cyan}" +set-face global link "%opt{green}" +set-face global bullet "%opt{green}" +set-face global list "%opt{white}" + +# Builtins +set-face global Default "%opt{white},%opt{background}" +set-face global PrimarySelection "%opt{gray0},%opt{lavender}" +set-face global SecondarySelection "%opt{lavender},%opt{gray0}" +set-face global PrimaryCursor "%opt{background},%opt{rosewater}" +set-face global SecondaryCursor "%opt{black1},%opt{teal}" +set-face global PrimaryCursorEol "%opt{gray0},%opt{mauve}" +set-face global SecondaryCursorEol "%opt{gray0},%opt{maroon}" +set-face global LineNumbers "%opt{gray1},%opt{background}" +set-face global LineNumberCursor "%opt{lavender},%opt{gray0}+b" +set-face global LineNumbersWrapped "%opt{teal},%opt{black1}+i" +set-face global MenuForeground "%opt{white},%opt{gray0}+b" +set-face global MenuBackground "%opt{white},%opt{black3}" +set-face global MenuInfo "%opt{black1},%opt{blue}" +set-face global Information "%opt{black1},%opt{lavender}" +set-face global Error "%opt{red},%opt{black2}" +set-face global StatusLine "%opt{white},%opt{black1}" +set-face global StatusLineMode "%opt{black2},%opt{yellow}" +set-face global StatusLineInfo "%opt{background},%opt{green}" +set-face global StatusLineValue "%opt{orange},%opt{gray0}" +set-face global StatusCursor "%opt{black1},%opt{lavender}" +set-face global Prompt "%opt{green},%opt{black2}" +set-face global MatchingChar "%opt{maroon},%opt{black2}" +set-face global Whitespace "%opt{gray1},%opt{background}+f" +set-face global WrapMarker Whitespace +set-face global BufferPadding "%opt{background},%opt{background}" + +# Code +set-face global value "%opt{orange}" +set-face global type "%opt{rosewater}" +set-face global variable "%opt{white}" +set-face global module "%opt{maroon}" +set-face global function "%opt{sky}" +set-face global string "%opt{green}" +set-face global keyword "%opt{blue}" +set-face global operator "%opt{blue}" +set-face global attribute "%opt{green}" +set-face global comment "%opt{gray1}+i" +set-face global documentation comment +set-face global meta "%opt{pink}" +set-face global builtin "%opt{lavender}+b" + +# Tree-sitter () +set-face global ts_attribute "%opt{blue}" +set-face global ts_comment "%opt{overlay0}+i" +set-face global ts_conceal "%opt{mauve}+i" +set-face global ts_constant "%opt{orange}" +set-face global ts_constant_builtin_boolean "%opt{sky}" +set-face global ts_constant_character "%opt{yellow}" +set-face global ts_constant_macro "%opt{mauve}" +set-face global ts_constructor "%opt{cyan}" +set-face global ts_diff_plus "%opt{green}" +set-face global ts_diff_minus "%opt{red}" +set-face global ts_diff_delta "%opt{blue}" +set-face global ts_diff_delta_moved "%opt{mauve}" +set-face global ts_error "%opt{red}+b" +set-face global ts_function "%opt{blue}" +set-face global ts_function_builtin "%opt{blue}+i" +set-face global ts_function_macro "%opt{mauve}" +set-face global ts_hint "%opt{blue}+b" +set-face global ts_info "%opt{green}+b" +set-face global ts_keyword "%opt{mauve}" +set-face global ts_keyword_conditional "%opt{mauve}+i" +set-face global ts_keyword_control_conditional "%opt{mauve}+i" +set-face global ts_keyword_control_directive "%opt{mauve}+i" +set-face global ts_keyword_control_import "%opt{mauve}+i" +set-face global ts_keyword_directive "%opt{mauve}+i" +set-face global ts_label "%opt{cyan}+i" +set-face global ts_markup_bold "%opt{orange}+b" +set-face global ts_markup_heading "%opt{red}" +set-face global ts_markup_heading_1 "%opt{red}" +set-face global ts_markup_heading_2 "%opt{mauve}" +set-face global ts_markup_heading_3 "%opt{green}" +set-face global ts_markup_heading_4 "%opt{yellow}" +set-face global ts_markup_heading_5 "%opt{pink}" +set-face global ts_markup_heading_6 "%opt{teal}" +set-face global ts_markup_heading_marker "%opt{orange}+b" +set-face global ts_markup_italic "%opt{pink}+i" +set-face global ts_markup_list_checked "%opt{green}" +set-face global ts_markup_list_numbered "%opt{blue}+i" +set-face global ts_markup_list_unchecked "%opt{teal}" +set-face global ts_markup_list_unnumbered "%opt{mauve}" +set-face global ts_markup_link_label "%opt{blue}" +set-face global ts_markup_link_url "%opt{teal}+u" +set-face global ts_markup_link_uri "%opt{teal}+u" +set-face global ts_markup_link_text "%opt{blue}" +set-face global ts_markup_quote "%opt{gray1}" +set-face global ts_markup_raw "%opt{green}" +set-face global ts_markup_strikethrough "%opt{gray1}+s" +set-face global ts_namespace "%opt{blue}+i" +set-face global ts_operator "%opt{sky}" +set-face global ts_property "%opt{sky}" +set-face global ts_punctuation "%opt{overlay1}" +set-face global ts_punctuation_special "%opt{sky}" +set-face global ts_special "%opt{blue}" +set-face global ts_spell "%opt{mauve}" +set-face global ts_string "%opt{green}" +set-face global ts_string_regex "%opt{orange}" +set-face global ts_string_regexp "%opt{orange}" +set-face global ts_string_escape "%opt{mauve}" +set-face global ts_string_special "%opt{blue}" +set-face global ts_string_special_path "%opt{green}" +set-face global ts_string_special_symbol "%opt{mauve}" +set-face global ts_string_symbol "%opt{red}" +set-face global ts_tag "%opt{mauve}" +set-face global ts_tag_error "%opt{red}" +set-face global ts_text "%opt{white}" +set-face global ts_text_title "%opt{mauve}" +set-face global ts_type "%opt{yellow}" +set-face global ts_type_enum_variant "%opt{flamingo}" +set-face global ts_variable "%opt{white}" +set-face global ts_variable_builtin "%opt{red}" +set-face global ts_variable_other_member "%opt{teal}" +set-face global ts_variable_parameter "%opt{maroon}+i" +set-face global ts_warning "%opt{orange}+b" diff --git a/.config/kak/colors/catppuccin_mocha.kak b/.config/kak/colors/catppuccin_mocha.kak new file mode 100644 index 0000000..730bd73 --- /dev/null +++ b/.config/kak/colors/catppuccin_mocha.kak @@ -0,0 +1,166 @@ +# Catppuccint Mocha theme for Kakoune +# +# Taken and adapted from +# + +# Catppuccin theme for Kakoune + +# Color palette (see https://catppuccin.com/palette) +declare-option str rosewater "rgb:f5e0dc" +declare-option str flamingo "rgb:f2cdcd" +declare-option str pink "rgb:f5c2e7" +declare-option str mauve "rgb:cba6f7" +declare-option str red "rgb:f38ba8" +declare-option str maroon "rgb:eba0ac" +declare-option str peach "rgb:fab387" +declare-option str yellow "rgb:f9e2af" +declare-option str green "rgb:a6e3a1" +declare-option str teal "rgb:94e2d5" +declare-option str sky "rgb:89dceb" +declare-option str sapphire "rgb:74c7ec" +declare-option str blue "rgb:89b4fa" +declare-option str lavender "rgb:b4befe" +declare-option str text "rgb:cdd6f4" +declare-option str subtext1 "rgb:bac2de" +declare-option str subtext0 "rgb:a6adc8" +declare-option str overlay2 "rgb:9399b2" +declare-option str overlay1 "rgb:7f849c" +declare-option str overlay0 "rgb:6c7086" +declare-option str surface2 "rgb:585b70" +declare-option str surface1 "rgb:45475a" +declare-option str surface0 "rgb:313244" +declare-option str base "rgb:1e1e2e" +declare-option str mantle "rgb:181825" +declare-option str crust "rgb:11111b" + +# Markup +set-face global title "%opt{text}+b" +set-face global header "%opt{subtext0}+b" +set-face global bold "%opt{maroon}+b" +set-face global italic "%opt{maroon}+i" +set-face global mono "%opt{green}" +set-face global block "%opt{sapphire}" +set-face global link "%opt{blue}" +set-face global bullet "%opt{peach}" +set-face global list "%opt{peach}" + +# Builtins +set-face global Default "%opt{text},%opt{base}" +set-face global PrimarySelection "%opt{text},%opt{surface2}" +set-face global SecondarySelection "%opt{text},%opt{surface2}" +set-face global PrimaryCursor "%opt{crust},%opt{rosewater}" +set-face global SecondaryCursor "%opt{text},%opt{overlay0}" +set-face global PrimaryCursorEol "%opt{surface2},%opt{lavender}" +set-face global SecondaryCursorEol "%opt{surface2},%opt{overlay1}" +set-face global LineNumbers "%opt{overlay1},%opt{base}" +set-face global LineNumberCursor "%opt{rosewater},%opt{surface2}+b" +set-face global LineNumbersWrapped "%opt{rosewater},%opt{surface2}" +set-face global MenuForeground "%opt{text},%opt{surface1}+b" +set-face global MenuBackground "%opt{text},%opt{surface0}" +set-face global MenuInfo "%opt{crust},%opt{teal}" +set-face global Information "%opt{crust},%opt{teal}" +set-face global Error "%opt{crust},%opt{red}" +set-face global DiagnosticError Error +set-face global DiagnosticWarning "%opt{yellow}" +set-face global StatusLine "%opt{text},%opt{mantle}" +set-face global StatusLineMode "%opt{crust},%opt{yellow}" +set-face global StatusLineInfo "%opt{crust},%opt{teal}" +set-face global StatusLineValue "%opt{crust},%opt{yellow}" +set-face global StatusCursor "%opt{crust},%opt{rosewater}" +set-face global Prompt "%opt{teal},%opt{base}+b" +set-face global MatchingChar "%opt{maroon},%opt{base}" +set-face global Whitespace "%opt{overlay1},%opt{base}+f" +set-face global WrapMarker Whitespace +set-face global BufferPadding "%opt{base},%opt{base}" + + +# Code +set-face global value "%opt{peach}" +set-face global type "%opt{yellow}" +set-face global variable "%opt{text}" +set-face global module "%opt{maroon}" +set-face global function "%opt{blue}" +set-face global string "%opt{green}" +set-face global keyword "%opt{mauve}" +set-face global operator "%opt{sky}" +set-face global attribute "%opt{yellow}" +set-face global comment "%opt{overlay1}+i" +set-face global documentation comment +set-face global meta "%opt{yellow}" +set-face global builtin "%opt{red}" + +# Tree-sitter () +# Copied from catppuccin_macchiato.kak +# Adjusted with https://github.com/catppuccin/catppuccin/blob/main/docs/style-guide.md +set-face global ts_attribute attribute +set-face global ts_comment comment +set-face global ts_conceal "%opt{mauve}+i" +set-face global ts_constant "%opt{peach}" +set-face global ts_constant_builtin_boolean "%opt{sky}" +set-face global ts_constant_character "%opt{yellow}" +set-face global ts_constant_macro "%opt{mauve}" +set-face global ts_constructor "%opt{sky}" +set-face global ts_diff_plus "%opt{green}" +set-face global ts_diff_minus "%opt{red}" +set-face global ts_diff_delta "%opt{blue}" +set-face global ts_diff_delta_moved "%opt{mauve}" +set-face global ts_error "%opt{red}+b" +set-face global ts_function "%opt{blue}" +set-face global ts_function_builtin "%opt{blue}+i" +set-face global ts_function_macro "%opt{mauve}" +set-face global ts_hint "%opt{blue}+b" +set-face global ts_info "%opt{teal}+b" +set-face global ts_keyword "%opt{mauve}" +set-face global ts_keyword_conditional "%opt{mauve}+i" +set-face global ts_keyword_control_conditional "%opt{mauve}+i" +set-face global ts_keyword_control_directive "%opt{mauve}+i" +set-face global ts_keyword_control_import "%opt{mauve}+i" +set-face global ts_keyword_directive "%opt{mauve}+i" +set-face global ts_label "%opt{sky}+i" +set-face global ts_markup_bold "%opt{peach}+b" +set-face global ts_markup_heading "%opt{red}" +set-face global ts_markup_heading_1 "%opt{red}" +set-face global ts_markup_heading_2 "%opt{mauve}" +set-face global ts_markup_heading_3 "%opt{green}" +set-face global ts_markup_heading_4 "%opt{yellow}" +set-face global ts_markup_heading_5 "%opt{pink}" +set-face global ts_markup_heading_6 "%opt{teal}" +set-face global ts_markup_heading_marker "%opt{peach}+b" +set-face global ts_markup_italic "%opt{pink}+i" +set-face global ts_markup_list_checked "%opt{green}" +set-face global ts_markup_list_numbered "%opt{blue}+i" +set-face global ts_markup_list_unchecked "%opt{teal}" +set-face global ts_markup_list_unnumbered "%opt{mauve}" +set-face global ts_markup_link_label "%opt{blue}" +set-face global ts_markup_link_url "%opt{teal}+u" +set-face global ts_markup_link_uri "%opt{teal}+u" +set-face global ts_markup_link_text "%opt{blue}" +set-face global ts_markup_quote "%opt{overlay1}" +set-face global ts_markup_raw "%opt{green}" +set-face global ts_markup_strikethrough "%opt{overlay1}+s" +set-face global ts_namespace "%opt{blue}+i" +set-face global ts_operator "%opt{sky}" +set-face global ts_property "%opt{sky}" +set-face global ts_punctuation "%opt{overlay1}" +set-face global ts_punctuation_special "%opt{sky}" +set-face global ts_special "%opt{blue}" +set-face global ts_spell "%opt{mauve}" +set-face global ts_string string +set-face global ts_string_regex "%opt{pink}" +set-face global ts_string_regexp "%opt{pink}" +set-face global ts_string_escape "%opt{flamingo}" +set-face global ts_string_special "%opt{blue}" +set-face global ts_string_special_path "%opt{green}" +set-face global ts_string_special_symbol "%opt{mauve}" +set-face global ts_string_symbol "%opt{red}" +set-face global ts_tag "%opt{mauve}" +set-face global ts_tag_error "%opt{red}" +set-face global ts_text "%opt{text}" +set-face global ts_text_title "%opt{mauve}" +set-face global ts_type type +set-face global ts_type_enum_variant "%opt{teal}" +set-face global ts_variable variable +set-face global ts_variable_builtin builtin +set-face global ts_variable_other_member "%opt{teal}" +set-face global ts_variable_parameter "%opt{maroon}+i" +set-face global ts_warning "%opt{yellow}+b" diff --git a/.config/kak/default.mustache b/.config/kak/default.mustache new file mode 100644 index 0000000..bfeec06 --- /dev/null +++ b/.config/kak/default.mustache @@ -0,0 +1,169 @@ +# base16-{{scheme-slug}} +# +# Commentary: +# Tinted Theming: (https://github.com/tinted-theming) +# +# Authors: +# Scheme: {{scheme-author}} +# Template: Jamy Golden (https://github.com/JamyGolden) + +# palette + +declare-option str base00 'rgb:{{base00-hex}}'# black2 +declare-option str base01 'rgb:{{base01-hex}}'# black1 +declare-option str base02 'rgb:{{base02-hex}}'# black3 +declare-option str base03 'rgb:{{base03-hex}}'# flamingo +declare-option str base04 'rgb:{{base04-hex}}'# grey0 +declare-option str base05 'rgb:{{base05-hex}}'# white +declare-option str base06 'rgb:{{base06-hex}}'# rosewater +declare-option str base07 'rgb:{{base07-hex}}'# lavender +declare-option str base08 'rgb:{{base08-hex}}'# red +declare-option str base09 'rgb:{{base09-hex}}'# orange +declare-option str base0A 'rgb:{{base0A-hex}}'# yellow +declare-option str base0B 'rgb:{{base0B-hex}}'# green +declare-option str base0C 'rgb:{{base0C-hex}}'# teal +declare-option str base0D 'rgb:{{base0D-hex}}'# blue +declare-option str base0E 'rgb:{{base0E-hex}}'# mauve +declare-option str base0F 'rgb:{{base0F-hex}}'# flamingo + +# code + +set-face global value "%opt{base09}" +set-face global type "%opt{base08}" +set-face global variable "%opt{base08}" +set-face global module "%opt{base0D}" +set-face global function "%opt{base0D}" +set-face global identifier "%opt{base08}" +set-face global string "%opt{base0B}" +set-face global error "%opt{base08}" +set-face global keyword "%opt{base0E}" +set-face global operator "%opt{base05}" +set-face global attribute "%opt{base09}" +set-face global bracket "%opt{base05}+b" +set-face global arguement "%opt{base09}" +set-face global comma "%opt{base05}" +set-face global constant "%opt{base09}+b" +set-face global comment "%opt{base03}+i" +set-face global documentation "%opt{base03}+i" +set-face global docstring "%opt{base03}+i" +set-face global docstring "%opt{base0A}" +set-face global meta "%opt{base0C}" +set-face global builtin "%opt{base0C}+b" + +# text + +set-face global title "%opt{base0E}" +set-face global header "%opt{base0D}" +set-face global bold "%opt{base0E}" +set-face global italic "%opt{base0E}" +set-face global mono "%opt{base0B}" +set-face global block "%opt{base0D}" +set-face global link "%opt{base0B}" +set-face global bullet "%opt{base0B}" +set-face global list "%opt{base05}" + +# kakoune UI + +set-face global Default "%opt{base05},%opt{base00}" +set-face global PrimarySelection "%opt{base00},%opt{base0A}" +set-face global SecondarySelection "%opt{base03},%opt{base0A}" +set-face global PrimaryCursor "%opt{base00},%opt{base05}" +set-face global SecondaryCursor "%opt{base00},%opt{base0C}" +set-face global PrimaryCursorEol "%opt{base00},%opt{base0A}" +set-face global SecondaryCursorEol "%opt{base00},%opt{base0D}" +set-face global LineNumbers "%opt{base04},%opt{base00}" +set-face global LineNumberCursor "%opt{base0A},%opt{base00}+b" +set-face global LineNumbersWrapped "%opt{base04},%opt{base00}+i" +set-face global MenuForeground "%opt{base06},%opt{base01}+b" +set-face global MenuBackground "%opt{base0D},%opt{base07}" +set-face global MenuInfo "%opt{base0D},%opt{base07}" +set-face global Information "%opt{base01},%opt{base07}" +set-face global Error "%opt{base01},%opt{base08}" +set-face global DiagnosticError "%opt{base08}" +set-face global DiagnosticWarning "%opt{base0A}" +set-face global StatusLine "%opt{base04},%opt{base02}" +set-face global StatusLineMode "%opt{base0A},%opt{base02}" +set-face global StatusLineInfo "%opt{base06},%opt{base02}" +set-face global StatusLineValue "%opt{base04},%opt{base02}" +set-face global StatusCursor "%opt{base02},%opt{base05}" +set-face global Prompt "%opt{base0A},%opt{base02}" +set-face global MatchingChar "%opt{base0D},%opt{base00}" +set-face global Whitespace "%opt{base01},%opt{base00}+f" +set-face global WrapMarker Whitespace +set-face global BufferPadding "%opt{base04},%opt{base00}" +set-face global Search "%opt{base05},%opt{base01}" + + +# Tree-sitter () +set-face global ts_attribute "%opt{base0D}" +set-face global ts_comment "%opt{base04}+i" +set-face global ts_conceal "%opt{base0E}+i" +set-face global ts_constant "%opt{base09}" +set-face global ts_constant_builtin_boolean "%opt{base0C}" +set-face global ts_constant_character "%opt{base0A}" +set-face global ts_constant_macro "%opt{base0E}" +set-face global ts_constructor "%opt{base0D}" +set-face global ts_diff_plus "%opt{base0B}" +set-face global ts_diff_minus "%opt{base08}" +set-face global ts_diff_delta "%opt{base0D}" +set-face global ts_diff_delta_moved "%opt{base0E}" +set-face global ts_error "%opt{base08}+b" +set-face global ts_function "%opt{base0D}" +set-face global ts_function_builtin "%opt{base0D}+i" +set-face global ts_function_macro "%opt{base0E}" +set-face global ts_hint "%opt{base0D}+b" +set-face global ts_info "%opt{base0B}+b" +set-face global ts_keyword "%opt{base0E}" +set-face global ts_keyword_conditional "%opt{base0E}+i" +set-face global ts_keyword_control_conditional "%opt{base0E}+i" +set-face global ts_keyword_control_directive "%opt{base0E}+i" +set-face global ts_keyword_control_import "%opt{base0E}+i" +set-face global ts_keyword_directive "%opt{base0E}+i" +set-face global ts_label "%opt{base0E}+i" +set-face global ts_markup_bold "%opt{base09}+b" +set-face global ts_markup_heading "%opt{base08}" +set-face global ts_markup_heading_1 "%opt{base08}" +set-face global ts_markup_heading_2 "%opt{base0E}" +set-face global ts_markup_heading_3 "%opt{base0B}" +set-face global ts_markup_heading_4 "%opt{base0A}" +set-face global ts_markup_heading_5 "%opt{base07}" +set-face global ts_markup_heading_6 "%opt{base0C}" +set-face global ts_markup_heading_marker "%opt{base09}+b" +set-face global ts_markup_italic "%opt{base07}+i" +set-face global ts_markup_list_checked "%opt{base0B}" +set-face global ts_markup_list_numbered "%opt{base0D}+i" +set-face global ts_markup_list_unchecked "%opt{base0C}" +set-face global ts_markup_list_unnumbered "%opt{base0E}" +set-face global ts_markup_link_label "%opt{base0D}" +set-face global ts_markup_link_url "%opt{base0C}+u" +set-face global ts_markup_link_uri "%opt{base0C}+u" +set-face global ts_markup_link_text "%opt{base0D}" +set-face global ts_markup_quote "%opt{base04}" +set-face global ts_markup_raw "%opt{base0B}" +set-face global ts_markup_strikethrough "%opt{base04}+s" +set-face global ts_namespace "%opt{base0D}+i" +set-face global ts_operator "%opt{base0C}" +set-face global ts_property "%opt{base0C}" +set-face global ts_punctuation "%opt{base04}" +set-face global ts_punctuation_special "%opt{base0C}" +set-face global ts_special "%opt{base0D}" +set-face global ts_spell "%opt{base0E}" +set-face global ts_string "%opt{base0B}" +set-face global ts_string_regex "%opt{base09}" +set-face global ts_string_regexp "%opt{base09}" +set-face global ts_string_escape "%opt{base0E}" +set-face global ts_string_special "%opt{base0D}" +set-face global ts_string_special_path "%opt{base0B}" +set-face global ts_string_special_symbol "%opt{base0E}" +set-face global ts_string_symbol "%opt{base08}" +set-face global ts_tag "%opt{base0E}" +set-face global ts_tag_error "%opt{base08}" +set-face global ts_text "%opt{base05}" +set-face global ts_text_title "%opt{base0E}" +set-face global ts_type "%opt{base0A}" +set-face global ts_type_enum_variant "%opt{base03}" +set-face global ts_variable "%opt{base05}" +set-face global ts_variable_builtin "%opt{base08}" +set-face global ts_variable_other_member "%opt{base0C}" +set-face global ts_variable_parameter "%opt{base0F}+i" +set-face global ts_warning "%opt{base09}+b" diff --git a/.config/kak/kakrc b/.config/kak/kakrc new file mode 100644 index 0000000..3dc04f1 --- /dev/null +++ b/.config/kak/kakrc @@ -0,0 +1,358 @@ +### Plugins ### +evaluate-commands %sh{ + plugins="$kak_config/plugins" + mkdir -p "$plugins" + [ ! -e "$plugins/plug.kak" ] && \ + git clone -q https://github.com/andreyorst/plug.kak.git "$plugins/plug.kak" + printf "%s\n" "source '$plugins/plug.kak/rc/plug.kak'" +} + +plug "andreyorst/plug.kak" noload + +plug "andreyorst/smarttab.kak" defer smarttab %{ + set-option global softtabstop 4 +} + +plug "occivink/kakoune-sudo-write" + +plug "kak-lsp/kak-lsp" do %{ + cargo install --locked --force --path . +} + +# plug "gustavo-hms/luar" %{ +# plug "gustavo-hms/peneira" %{ +# require-module peneira +# } +# } + +# # Color Themes +plug "tinted-theming/base16-kakoune" + +### End Of Plugins ### + +# set-option global luar_interpreter luajit + +## Treesitter ## + +eval %sh{ kak-tree-sitter -dks --with-highlighting --with-text-objects --session $kak_session } +#eval %sh{ kak-tree-sitter -dks --with-text-objects --session $kak_session } +#eval %sh{ kak-tree-sitter -dks --with-highlighting --session $kak_session } + +evaluate-commands %sh{ + echo "colorscheme base16-$BASE16_THEME" +} + +## Highlighting ## +hook global WinCreate .* %{ add-highlighter window/number-lines number-lines -relative -hlcursor} +hook global WinCreate .* %{ add-highlighter window/ show-matching} +add-highlighter global/ column 80 MenuForeground +add-highlighter global/ show-whitespaces + +## Formatting ## +define-command enable-autofmt -docstring 'enable autoformatting of buffer' %{ + hook global -group autofmt BufSetOption filetype=(c|cpp) %{ + set-option buffer formatcmd 'clang-format -style=file:/home/mikec/.clang-format' + + hook -group autofmt buffer BufOpenFile .* %{ + format + } + + hook -group autofmt buffer BufWritePre .* { + format + ctags-update-tags + } + } +} + +define-command disable-autofmt -docstring 'disable autoformatting of buffer' %{ + remove-hooks global autofmt +} + +## Indentation ## +set global tabstop 4 +set global indentwidth 4 +hook global WinSetOption filetype=.* expandtab +hook global WinSetOption filetype=(makefile|gas) noexpandtab +hook global BufCreate .* %{ + editorconfig-load + autoconfigtab +} + +define-command sleuth -docstring 'Heuristically set buffer options' %{ + try %{ + evaluate-commands -draft %{ + # Search the first indent level + execute-keys 'gg' '/' '^\h+' '' + + # Tab vs. Space + # https://youtu.be/V7PLxL8jIl8 + try %{ + execute-keys '' '\t' '' + #set-option buffer indentwidth 0 + noexpandtab + } catch %{ + set-option buffer indentwidth %val{selection_length} + expandtab + } + } + } +} + +define-command git-status -docstring 'Show git diff' %{ + hook -group git-status global BufOpenFile .* %{ + git show-diff + } + + hook -group git-status global BufWritePost .* %{ + git show-diff + } +} + +define-command disable-git-status -docstring 'Disable git diff gutter' %{ + remove-hooks global git-status +} + +define-command sleuth-enable -docstring 'Enable sleuth' %{ + # Run sleuth when opening and saving files. + hook -group sleuth global BufOpenFile .* %{ + sleuth + } + + hook -group sleuth global BufWritePost .* %{ + sleuth + } +} + +define-command sleuth-disable -docstring 'Disable sleuth' %{ + remove-hooks global sleuth +} + +## LSP ## +lsp-enable +lsp-auto-hover-enable + +lsp-inlay-diagnostics-enable global +hook global WinSetOption filetype=(c|zig|rust|python|ruby|lua) %{ + hook window -group semantic-tokens BufReload .* lsp-semantic-tokens + hook window -group semantic-tokens NormalIdle .* lsp-semantic-tokens + hook window -group semantic-tokens InsertIdle .* lsp-semantic-tokens + hook -once -always window WinSetOption filetype=.* %{ + remove-hooks window semantic-tokens + } +} + +face global InfoDefault Information +face global InfoBlock Information +face global InfoBlockQuote Information +face global InfoBullet Information +face global InfoHeader Information +face global InfoLink Information +face global InfoLinkMono Information +face global InfoMono Information +face global InfoRule Information +face global InfoDiagnosticError Information +face global InfoDiagnosticHint Information +face global InfoDiagnosticInformation Information +face global InfoDiagnosticWarning Information + +set-option global lsp_config %{ +} + +define-command -docstring 'Invoke fzf to select a buffer' fzf-buffer %{ + evaluate-commands %sh{ + BUFFER=$( + ( + eval "set -- $kak_buflist" + while [ $# -gt 0 ]; do + printf "%s\0" "$1" + shift + done + ) | + fzf-tmux --cycle -p 175,45 --read0 --preview='bat --theme=base16-256 --color=always {} 2>/dev/null' + ) + BUFFER=${BUFFER/\'/\'\'} + if [ -n "$BUFFER" ]; then + printf "buffer %s" "${BUFFER}" + fi + } +} + +define-command -docstring 'live grep' live-grep %{ + evaluate-commands %sh{ + + if [ -z "${kak_client_env_TMUX}" ]; then + printf 'fail "client was not started under tmux"\n' + else + file="$(rfv.sh)" + if [ -n "$file" ]; then + printf "edit %s\n" "$file" + fi + fi + } +} + +define-command -docstring 'exact grep' exact-grep %{ + evaluate-commands %sh{ + + if [ -z "${kak_client_env_TMUX}" ]; then + printf 'fail "client was not started under tmux"\n' + else + file="$(rfve.sh)" + if [ -n "$file" ]; then + printf "edit %s\n" "$file" + fi + fi + } +} + +define-command -docstring 'search contents of current file' file-search %{ + evaluate-commands -save-regs '"' %{ + set-register dquote %sh{ mktemp } + execute-keys -draft '% cat > $kak_reg_dquote' + evaluate-commands %sh{ + if [ -z "${kak_client_env_TMUX}" ]; then + printf 'fail "client was not started under tmux"\n' + else + file="$(rfs.sh ${kak_reg_dquote} ${kak_buffile})" + if [ -n "$file" ]; then + printf "edit %s\n" "$file" + fi + rm $kak_reg_dquote + fi + } + } +} + +define-command -docstring 'search contents of current file with regex' regex-file-search %{ + evaluate-commands -save-regs '"' %{ + set-register dquote %sh{ mktemp } + execute-keys -draft '% cat > $kak_reg_dquote' + evaluate-commands %sh{ + if [ -z "${kak_client_env_TMUX}" ]; then + printf 'fail "client was not started under tmux"\n' + else + file="$(rgrs.sh ${kak_reg_dquote} ${kak_buffile})" + if [ -n "$file" ]; then + printf "edit %s\n" "$file" + fi + rm $kak_reg_dquote + fi + } + } +} + +define-command -docstring 'Invoke fzf to open a file' -params 0 fzf-edit %{ + evaluate-commands %sh{ + if [ -z "${kak_client_env_TMUX}" ]; then + printf 'fail "client was not started under tmux"\n' + else + file="$(fd -u -t f . |TMUX="${kak_client_env_TMUX}" fzf-tmux --cycle -p 175,45 --preview='bat --theme=base16-256 --color=always {} 2>/dev/null || cat {} 2>/dev/null')" + if [ -n "$file" ]; then + printf "edit %s\n" "$file" + fi + fi + } +} + +define-command -docstring 'Invoke fzf to open a file local to the current file' -params 0 fzf-edit-local %{ + evaluate-commands %sh{ + if [ -z "${kak_client_env_TMUX}" ]; then + printf 'fail "client was not started under tmux"\n' + else + dir="$(get_local_path ${kak_buffile})" + if [ -n "$dir" ]; then + file="$(fd -u -t f . $dir |TMUX="${kak_client_env_TMUX}" fzf-tmux --cycle -p 175,45 --preview='bat --theme=base16-256 --color=always {} 2>/dev/null || cat {} 2>/dev/null')" + fi + if [ -n "$file" ]; then + printf "edit %s\n" "$file" + fi + fi + } +} + +define-command -docstring 'Pick project' -params 0 switch-project %{ + evaluate-commands %sh{ + if [ -z "${kak_client_env_TMUX}" ]; then + printf 'fail "client was not started under tmux"\n' + else + proj="$(cat ~/.scripts/projects | TMUX="${kak_client_env_TMUX}" fzf-tmux --cycle -p 175,45 | cut -d' ' -f1)" + if [ -n "$proj" ]; then + printf "cd %s\n" "$proj" + printf 'fzf-edit\n' + fi + fi + } +} + +define-command -docstring 'Project wide search' project-search %{ + evaluate-commands %sh{ + + if [ -z "${kak_client_env_TMUX}" ]; then + printf 'fail "client was not started under tmux"\n' + else + file="$(rgfs.sh)" + if [ -n "$file" ]; then + printf "edit %s\n" "$file" + fi + fi + } +} + +define-command -docstring 'Print Working Directory' -params 0 pwd %{ + evaluate-commands echo %sh{ echo "$(pwd)"} +} + +declare-user-mode config +map -docstring 'enter config mode' global user e ':enter-user-mode config' +map -docstring 'edit kakoune config' global config k ':cd ~/.config/kak/:e ./kakrc' +map -docstring 'edit tmux config' global config t ':e ~/.tmux.conf' +map -docstring 'edit bash config' global config b ':e ~/.bashrc' +map -docstring 'edit scripts folder' global config s ':cd ~/.scripts:fzf-edit' +map -docstring 'edit .config folder' global config c ':cd ~/.config:fzf-edit' + +declare-user-mode buffer +map -docstring 'enter buffer mode' global user b ':enter-user-mode buffer' +map -docstring 'next buffer' global buffer n ':buffer-next' +map -docstring 'previous buffer' global buffer p ':buffer-previous' +map -docstring 'close current buffer' global buffer d ':delete-buffer!' +map -docstring 'write and close current buffer' global buffer w ':w:db' +map -docstring 'list and select a buffer' global buffer b ':fzf-buffer' + +declare-user-mode find +map -docstring 'enter find mode' global user f ':enter-user-mode find' +map -docstring 'find files' global find f ':fzf-edit' +map -docstring 'find tags for the current project' global find t ':ctags-search ' +map -docstring 'find line in current file' global find l ':file-search' +map -docstring 'find line in current file with regex' global find L ':regex-file-search' +map -docstring 'find files in current directory' global find F ':fzf-edit-local' +map -docstring "grep file contents recursively" global find g ':live-grep' +map -docstring "grep exact file contents recursively" global find e ':exact-grep' +map -docstring 'project wide search' global find p ':project-search' + +map -docstring 'enter lsp mode' global user l ':enter-user-mode lsp' +map -docstring 'goto definition (tag)' global lsp t 'w:ctags-search' + +map -docstring 'enter treesitter mode' global user t ':enter-user-mode tree-sitter' +map -docstring 'enter treesitter search mode' global user s ':enter-user-mode tree-sitter-search' + +declare-user-mode tmux +map -docstring 'enter tmux/window mode' global user w ':enter-user-mode tmux' +map -docstring 'vertical split' global tmux v ':tmux-terminal-horizontal kak -c %val{session}' +map -docstring 'horizontal split' global tmux h ':tmux-terminal-vertical kak -c %val{session}' +map -docstring 'new tab' global tmux t ':tmux-terminal-window kak -c %val{session}' +map -docstring 'vertical terminal split' global tmux V ':tmux-repl-horizontal bash' +map -docstring 'horizontal terminal split' global tmux H ':tmux-repl-vertical bash' +map -docstring 'new terminal tab' global tmux T ':tmux-repl-window' +map -docstring 'new git window' global tmux g ':tmux-terminal-window lazygit' + +declare-user-mode project +map -docstring 'enter project mode' global user P ':enter-user-mode project' +map -docstring 'open project' global project o ':switch-project' + +map -docstring 'enter man mode' global user m ':enter-user-mode man' + +map -docstring 'clipboard yank' global user y 'clip.exe' +map -docstring 'clipboard paste' global user p '|powershell.exe -C Get-Clipboard | tr -d "\r"' + +map -docstring 'quit kakoune' global user q ':q' +map -docstring 'toggle comments' global user c ':comment-line' diff --git a/.config/lazygit/config.yml b/.config/lazygit/config.yml new file mode 100644 index 0000000..e69de29 diff --git a/.config/mc/ini b/.config/mc/ini new file mode 100644 index 0000000..24aa848 --- /dev/null +++ b/.config/mc/ini @@ -0,0 +1,143 @@ +[Midnight-Commander] +verbose=true +shell_patterns=true +auto_save_setup=true +preallocate_space=false +auto_menu=false +use_internal_view=true +use_internal_edit=true +clear_before_exec=true +confirm_delete=true +confirm_overwrite=true +confirm_execute=false +confirm_history_cleanup=true +confirm_exit=false +confirm_directory_hotlist_delete=false +confirm_view_dir=false +safe_delete=false +safe_overwrite=false +use_8th_bit_as_meta=false +mouse_move_pages_viewer=true +mouse_close_dialog=false +fast_refresh=false +drop_menus=false +wrap_mode=true +old_esc_mode=true +cd_symlinks=true +show_all_if_ambiguous=false +use_file_to_guess_type=true +alternate_plus_minus=false +only_leading_plus_minus=true +show_output_starts_shell=false +xtree_mode=false +file_op_compute_totals=true +classic_progressbar=true +use_netrc=true +ftpfs_always_use_proxy=false +ftpfs_use_passive_connections=true +ftpfs_use_passive_connections_over_proxy=false +ftpfs_use_unix_list_options=true +ftpfs_first_cd_then_ls=true +ignore_ftp_chattr_errors=true +editor_fill_tabs_with_spaces=false +editor_return_does_auto_indent=true +editor_backspace_through_tabs=false +editor_fake_half_tabs=true +editor_option_save_position=true +editor_option_auto_para_formatting=false +editor_option_typewriter_wrap=false +editor_edit_confirm_save=true +editor_syntax_highlighting=true +editor_persistent_selections=true +editor_drop_selection_on_copy=true +editor_cursor_beyond_eol=false +editor_cursor_after_inserted_block=false +editor_visible_tabs=true +editor_visible_spaces=true +editor_line_state=false +editor_simple_statusbar=false +editor_check_new_line=false +editor_show_right_margin=false +editor_group_undo=false +editor_state_full_filename=false +editor_ask_filename_before_edit=false +nice_rotating_dash=true +shadows=true +mcview_remember_file_position=false +auto_fill_mkdir_name=true +copymove_persistent_attr=true +pause_after_run=1 +mouse_repeat_rate=100 +double_click_speed=250 +old_esc_mode_timeout=1000000 +max_dirt_limit=10 +num_history_items_recorded=60 +vfs_timeout=60 +ftpfs_directory_timeout=900 +ftpfs_retry_seconds=30 +shell_directory_timeout=900 +editor_tab_spacing=8 +editor_word_wrap_line_length=72 +editor_option_save_mode=0 +editor_backup_extension=~ +editor_filesize_threshold=64M +editor_stop_format_chars=-+*\\,.;:&> +mcview_eof= +skin=default + +[Layout] +output_lines=0 +left_panel_size=105 +top_panel_size=0 +message_visible=true +keybar_visible=true +xterm_title=true +command_prompt=true +menubar_visible=true +free_space=true +horizontal_split=false +vertical_equal=true +horizontal_equal=true + +[Misc] +timeformat_recent=%b %e %H:%M +timeformat_old=%b %e %Y +ftp_proxy_host=gate +ftpfs_password=anonymous@ +display_codepage=UTF-8 +source_codepage=Other_8_bit +autodetect_codeset= +clipboard_store= +clipboard_paste= + +[Colors] +base_color= +xterm-256color= +color_terminals= + +[Panels] +show_mini_info=true +kilobyte_si=false +mix_all_files=false +show_backups=true +show_dot_files=true +fast_reload=false +fast_reload_msg_shown=false +mark_moves_down=true +reverse_files_only=true +auto_save_setup_panels=false +navigate_with_arrows=false +panel_scroll_pages=true +panel_scroll_center=false +mouse_move_pages=true +filetype_mode=true +permission_mode=false +torben_fj_mode=false +quick_search_mode=2 +select_flags=6 + +[Panelize] +Find SUID and SGID programs=find . \\( \\( -perm -04000 -a -perm /011 \\) -o \\( -perm -02000 -a -perm /01 \\) \\) -print +Modified git files=git ls-files --modified +Find rejects after patching=find . -name \\*.rej -print +Find *.orig after patching=find . -name \\*.orig -print diff --git a/.config/mc/panels.ini b/.config/mc/panels.ini new file mode 100644 index 0000000..e69de29 diff --git a/.config/newsboat/config b/.config/newsboat/config new file mode 100644 index 0000000..abc2153 --- /dev/null +++ b/.config/newsboat/config @@ -0,0 +1,26 @@ +# unbind keys +# unbind-key ENTER +unbind-key j +unbind-key k +unbind-key h +unbind-key l +unbind-key g +unbind-key G + +# bind keys - vim style +bind-key j down +bind-key k up +bind-key l open +bind-key h quit +bind-key g home +bind-key G end + +podlist-format "%2i %b %> %S [%dMB / %tMB] [%p %%] [%K]" +download-filename-format "%t | %n [%F].%e" +download-path "~/podcasts/%n/" + +macro 1 set browser "curl %u --output /tmp/image && sxiv /tmp/image && rm /tmp/image"; one; set browser lynx; +macro 2 set browser "mpv --vid=no -- %u"; one; set browser lynx; +macro 3 set browser "curl %u --output /tmp/image && sxiv /tmp/image && rm /tmp/image"; +macro 4 set browser "mpv --vid=no -- %u"; +macro 5 set browser lynx; diff --git a/.config/newsboat/queue b/.config/newsboat/queue new file mode 100644 index 0000000..e69de29 diff --git a/.config/newsboat/urls b/.config/newsboat/urls new file mode 100644 index 0000000..ae0247f --- /dev/null +++ b/.config/newsboat/urls @@ -0,0 +1,9 @@ +https://phaazon.net/blog/feed +https://danielde.dev/rss.xml +https://sizeof.cat/index.xml +https://lukesmith.xyz/rss.xml +https://api.substack.com/feed/podcast/462466.rss +https://www.dailywire.com/feeds/rss.xml +https://feeds.simplecast.com/6c2VScgo +https://feeds.simplecast.com/pp_b9xO6 +https://notrelated.xyz/rss diff --git a/.config/nushell/config.nu b/.config/nushell/config.nu new file mode 100644 index 0000000..6d84d8d --- /dev/null +++ b/.config/nushell/config.nu @@ -0,0 +1,895 @@ +# Nushell Config File +# +# version = "0.94.2" + +# For more information on defining custom themes, see +# https://www.nushell.sh/book/coloring_and_theming.html +# And here is the theme collection +# https://github.com/nushell/nu_scripts/tree/main/themes +let dark_theme = { + # color for nushell primitives + separator: white + leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off + header: green_bold + empty: blue + # Closures can be used to choose colors for specific values. + # The value (in this case, a bool) is piped into the closure. + # eg) {|| if $in { 'light_cyan' } else { 'light_gray' } } + bool: light_cyan + int: white + filesize: cyan + duration: white + date: purple + range: white + float: white + string: white + nothing: white + binary: white + cell-path: white + row_index: green_bold + record: white + list: white + block: white + hints: dark_gray + search_result: { bg: red fg: white } + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_external_resolved: light_yellow_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + # shapes are used to change the cli syntax highlighting + shape_garbage: { fg: white bg: red attr: b} + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_keyword: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_matching_brackets: { attr: u } + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_string_interpolation: cyan_bold + shape_table: blue_bold + shape_variable: purple + shape_vardecl: purple + shape_raw_string: light_purple +} + +let light_theme = { + # color for nushell primitives + separator: dark_gray + leading_trailing_space_bg: { attr: n } # no fg, no bg, attr none effectively turns this off + header: green_bold + empty: blue + # Closures can be used to choose colors for specific values. + # The value (in this case, a bool) is piped into the closure. + # eg) {|| if $in { 'dark_cyan' } else { 'dark_gray' } } + bool: dark_cyan + int: dark_gray + filesize: cyan_bold + duration: dark_gray + date: purple + range: dark_gray + float: dark_gray + string: dark_gray + nothing: dark_gray + binary: dark_gray + cell-path: dark_gray + row_index: green_bold + record: dark_gray + list: dark_gray + block: dark_gray + hints: dark_gray + search_result: { fg: white bg: red } + shape_and: purple_bold + shape_binary: purple_bold + shape_block: blue_bold + shape_bool: light_cyan + shape_closure: green_bold + shape_custom: green + shape_datetime: cyan_bold + shape_directory: cyan + shape_external: cyan + shape_externalarg: green_bold + shape_external_resolved: light_purple_bold + shape_filepath: cyan + shape_flag: blue_bold + shape_float: purple_bold + # shapes are used to change the cli syntax highlighting + shape_garbage: { fg: white bg: red attr: b} + shape_globpattern: cyan_bold + shape_int: purple_bold + shape_internalcall: cyan_bold + shape_keyword: cyan_bold + shape_list: cyan_bold + shape_literal: blue + shape_match_pattern: green + shape_matching_brackets: { attr: u } + shape_nothing: light_cyan + shape_operator: yellow + shape_or: purple_bold + shape_pipe: purple_bold + shape_range: yellow_bold + shape_record: cyan_bold + shape_redirection: purple_bold + shape_signature: green_bold + shape_string: green + shape_string_interpolation: cyan_bold + shape_table: blue_bold + shape_variable: purple + shape_vardecl: purple + shape_raw_string: light_purple +} + +# External completer example +# let carapace_completer = {|spans| +# carapace $spans.0 nushell ...$spans | from json +# } + +# The default config record. This is where much of your global configuration is setup. +$env.config = { + show_banner: true # true or false to enable or disable the welcome banner at startup + + ls: { + use_ls_colors: true # use the LS_COLORS environment variable to colorize output + clickable_links: true # enable or disable clickable links. Your terminal has to support links. + } + + rm: { + always_trash: false # always act as if -t was given. Can be overridden with -p + } + + table: { + mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other + index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column + show_empty: true # show 'empty list' and 'empty record' placeholders for command output + padding: { left: 1, right: 1 } # a left right padding of each column in a table + trim: { + methodology: wrapping # wrapping or truncating + wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology + truncating_suffix: "..." # A suffix used by the 'truncating' methodology + } + header_on_separator: false # show header text on separator/border line + # abbreviated_row_count: 10 # limit data rows from top and bottom after reaching a set point + } + + error_style: "fancy" # "fancy" or "plain" for screen reader-friendly error messages + + # datetime_format determines what a datetime rendered in the shell would look like. + # Behavior without this configuration point will be to "humanize" the datetime display, + # showing something like "a day ago." + datetime_format: { + # normal: '%a, %d %b %Y %H:%M:%S %z' # shows up in displays of variables or other datetime's outside of tables + # table: '%m/%d/%y %I:%M:%S%p' # generally shows up in tabular outputs such as ls. commenting this out will change it to the default human readable datetime format + } + + explore: { + status_bar_background: { fg: "#1D1F21", bg: "#C4C9C6" }, + command_bar_text: { fg: "#C4C9C6" }, + highlight: { fg: "black", bg: "yellow" }, + status: { + error: { fg: "white", bg: "red" }, + warn: {} + info: {} + }, + table: { + split_line: { fg: "#404040" }, + selected_cell: { bg: light_blue }, + selected_row: {}, + selected_column: {}, + }, + } + + history: { + max_size: 100_000 # Session has to be reloaded for this to take effect + sync_on_enter: true # Enable to share history between multiple sessions, else you have to close the session to write history to file + file_format: "plaintext" # "sqlite" or "plaintext" + isolation: false # only available with sqlite file_format. true enables history isolation, false disables it. true will allow the history to be isolated to the current session using up/down arrows. false will allow the history to be shared across all sessions. + } + + completions: { + case_sensitive: false # set to true to enable case-sensitive completions + quick: true # set this to false to prevent auto-selecting completions when only one remains + partial: true # set this to false to prevent partial filling of the prompt + algorithm: "prefix" # prefix or fuzzy + external: { + enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow + max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options + completer: null # check 'carapace_completer' above as an example + } + use_ls_colors: true # set this to true to enable file/path/directory completions using LS_COLORS + } + + filesize: { + metric: false # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard) + format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, auto + } + + cursor_shape: { + emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (line is the default) + vi_insert: block # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (block is the default) + vi_normal: underscore # block, underscore, line, blink_block, blink_underscore, blink_line, inherit to skip setting cursor shape (underscore is the default) + } + + color_config: $dark_theme # if you want a more interesting theme, you can replace the empty record with `$dark_theme`, `$light_theme` or another custom record + use_grid_icons: true + footer_mode: "25" # always, never, number_of_rows, auto + float_precision: 2 # the precision for displaying floats in tables + buffer_editor: "" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL + use_ansi_coloring: true + bracketed_paste: true # enable bracketed paste, currently useless on windows + edit_mode: emacs # emacs, vi + shell_integration: { + # osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title + osc2: true + # osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory + osc7: true + # osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8 + osc8: true + # osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal + osc9_9: false + # osc133 is several escapes invented by Final Term which include the supported ones below. + # 133;A - Mark prompt start + # 133;B - Mark prompt end + # 133;C - Mark pre-execution + # 133;D;exit - Mark execution finished with exit code + # This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is + osc133: true + # osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features + # 633;A - Mark prompt start + # 633;B - Mark prompt end + # 633;C - Mark pre-execution + # 633;D;exit - Mark execution finished with exit code + # 633;E - NOT IMPLEMENTED - Explicitly set the command line with an optional nonce + # 633;P;Cwd= - Mark the current working directory and communicate it to the terminal + # and also helps with the run recent menu in vscode + osc633: true + # reset_application_mode is escape \x1b[?1l and was added to help ssh work better + reset_application_mode: true + } + render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt. + use_kitty_protocol: false # enables keyboard enhancement protocol implemented by kitty console, only if your terminal support this. + highlight_resolved_externals: false # true enables highlighting of external commands in the repl resolved by which. + recursion_limit: 50 # the maximum number of times nushell allows recursion before stopping it + + plugins: {} # Per-plugin configuration. See https://www.nushell.sh/contributor-book/plugins.html#configuration. + + plugin_gc: { + # Configuration for plugin garbage collection + default: { + enabled: true # true to enable stopping of inactive plugins + stop_after: 10sec # how long to wait after a plugin is inactive to stop it + } + plugins: { + # alternate configuration for specific plugins, by name, for example: + # + # gstat: { + # enabled: false + # } + } + } + + hooks: { + pre_prompt: [{ null }] # run before the prompt is shown + pre_execution: [{ null }] # run before the repl input is run + env_change: { + PWD: [{|before, after| null }] # run if the PWD environment is different since the last repl input + } + display_output: "if (term size).columns >= 100 { table -e } else { table }" # run to display the output of a pipeline + command_not_found: { null } # return an error message when a command is not found + } + + menus: [ + # Configuration for default nushell menus + # Note the lack of source parameter + { + name: completion_menu + only_buffer_difference: false + marker: "| " + type: { + layout: columnar + columns: 4 + col_width: 20 # Optional value. If missing all the screen width is used to calculate column width + col_padding: 2 + } + style: { + text: green + selected_text: { attr: r } + description_text: yellow + match_text: { attr: u } + selected_match_text: { attr: ur } + } + } + { + name: ide_completion_menu + only_buffer_difference: false + marker: "| " + type: { + layout: ide + min_completion_width: 0, + max_completion_width: 50, + max_completion_height: 10, # will be limited by the available lines in the terminal + padding: 0, + border: true, + cursor_offset: 0, + description_mode: "prefer_right" + min_description_width: 0 + max_description_width: 50 + max_description_height: 10 + description_offset: 1 + # If true, the cursor pos will be corrected, so the suggestions match up with the typed text + # + # C:\> str + # str join + # str trim + # str split + correct_cursor_pos: false + } + style: { + text: green + selected_text: { attr: r } + description_text: yellow + match_text: { attr: u } + selected_match_text: { attr: ur } + } + } + { + name: history_menu + only_buffer_difference: true + marker: "? " + type: { + layout: list + page_size: 10 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + { + name: help_menu + only_buffer_difference: true + marker: "? " + type: { + layout: description + columns: 4 + col_width: 20 # Optional value. If missing all the screen width is used to calculate column width + col_padding: 2 + selection_rows: 4 + description_rows: 10 + } + style: { + text: green + selected_text: green_reverse + description_text: yellow + } + } + ] + + keybindings: [ + { + name: completion_menu + modifier: none + keycode: tab + mode: [emacs vi_normal vi_insert] + event: { + until: [ + { send: menu name: completion_menu } + { send: menunext } + { edit: complete } + ] + } + } + { + name: ide_completion_menu + modifier: control + keycode: char_n + mode: [emacs vi_normal vi_insert] + event: { + until: [ + { send: menu name: ide_completion_menu } + { send: menunext } + { edit: complete } + ] + } + } + { + name: history_menu + modifier: control + keycode: char_r + mode: [emacs, vi_insert, vi_normal] + event: { send: menu name: history_menu } + } + { + name: help_menu + modifier: none + keycode: f1 + mode: [emacs, vi_insert, vi_normal] + event: { send: menu name: help_menu } + } + { + name: completion_previous_menu + modifier: shift + keycode: backtab + mode: [emacs, vi_normal, vi_insert] + event: { send: menuprevious } + } + { + name: next_page_menu + modifier: control + keycode: char_x + mode: emacs + event: { send: menupagenext } + } + { + name: undo_or_previous_page_menu + modifier: control + keycode: char_z + mode: emacs + event: { + until: [ + { send: menupageprevious } + { edit: undo } + ] + } + } + { + name: escape + modifier: none + keycode: escape + mode: [emacs, vi_normal, vi_insert] + event: { send: esc } # NOTE: does not appear to work + } + { + name: cancel_command + modifier: control + keycode: char_c + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrlc } + } + { + name: quit_shell + modifier: control + keycode: char_d + mode: [emacs, vi_normal, vi_insert] + event: { send: ctrld } + } + { + name: clear_screen + modifier: control + keycode: char_l + mode: [emacs, vi_normal, vi_insert] + event: { send: clearscreen } + } + { + name: search_history + modifier: control + keycode: char_q + mode: [emacs, vi_normal, vi_insert] + event: { send: searchhistory } + } + { + name: open_command_editor + modifier: control + keycode: char_o + mode: [emacs, vi_normal, vi_insert] + event: { send: openeditor } + } + { + name: move_up + modifier: none + keycode: up + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menuup } + { send: up } + ] + } + } + { + name: move_down + modifier: none + keycode: down + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menudown } + { send: down } + ] + } + } + { + name: move_left + modifier: none + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menuleft } + { send: left } + ] + } + } + { + name: move_right_or_take_history_hint + modifier: none + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: historyhintcomplete } + { send: menuright } + { send: right } + ] + } + } + { + name: move_one_word_left + modifier: control + keycode: left + mode: [emacs, vi_normal, vi_insert] + event: { edit: movewordleft } + } + { + name: move_one_word_right_or_take_history_hint + modifier: control + keycode: right + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: historyhintwordcomplete } + { edit: movewordright } + ] + } + } + { + name: move_to_line_start + modifier: none + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: { edit: movetolinestart } + } + { + name: move_to_line_start + modifier: control + keycode: char_a + mode: [emacs, vi_normal, vi_insert] + event: { edit: movetolinestart } + } + { + name: move_to_line_end_or_take_history_hint + modifier: none + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: historyhintcomplete } + { edit: movetolineend } + ] + } + } + { + name: move_to_line_end_or_take_history_hint + modifier: control + keycode: char_e + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: historyhintcomplete } + { edit: movetolineend } + ] + } + } + { + name: move_to_line_start + modifier: control + keycode: home + mode: [emacs, vi_normal, vi_insert] + event: { edit: movetolinestart } + } + { + name: move_to_line_end + modifier: control + keycode: end + mode: [emacs, vi_normal, vi_insert] + event: { edit: movetolineend } + } + { + name: move_up + modifier: control + keycode: char_p + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menuup } + { send: up } + ] + } + } + { + name: move_down + modifier: control + keycode: char_t + mode: [emacs, vi_normal, vi_insert] + event: { + until: [ + { send: menudown } + { send: down } + ] + } + } + { + name: delete_one_character_backward + modifier: none + keycode: backspace + mode: [emacs, vi_insert] + event: { edit: backspace } + } + { + name: delete_one_word_backward + modifier: control + keycode: backspace + mode: [emacs, vi_insert] + event: { edit: backspaceword } + } + { + name: delete_one_character_forward + modifier: none + keycode: delete + mode: [emacs, vi_insert] + event: { edit: delete } + } + { + name: delete_one_character_forward + modifier: control + keycode: delete + mode: [emacs, vi_insert] + event: { edit: delete } + } + { + name: delete_one_character_backward + modifier: control + keycode: char_h + mode: [emacs, vi_insert] + event: { edit: backspace } + } + { + name: delete_one_word_backward + modifier: control + keycode: char_w + mode: [emacs, vi_insert] + event: { edit: backspaceword } + } + { + name: move_left + modifier: none + keycode: backspace + mode: vi_normal + event: { edit: moveleft } + } + { + name: newline_or_run_command + modifier: none + keycode: enter + mode: emacs + event: { send: enter } + } + { + name: move_left + modifier: control + keycode: char_b + mode: emacs + event: { + until: [ + { send: menuleft } + { send: left } + ] + } + } + { + name: move_right_or_take_history_hint + modifier: control + keycode: char_f + mode: emacs + event: { + until: [ + { send: historyhintcomplete } + { send: menuright } + { send: right } + ] + } + } + { + name: redo_change + modifier: control + keycode: char_g + mode: emacs + event: { edit: redo } + } + { + name: undo_change + modifier: control + keycode: char_z + mode: emacs + event: { edit: undo } + } + { + name: paste_before + modifier: control + keycode: char_y + mode: emacs + event: { edit: pastecutbufferbefore } + } + { + name: cut_word_left + modifier: control + keycode: char_w + mode: emacs + event: { edit: cutwordleft } + } + { + name: cut_line_to_end + modifier: control + keycode: char_k + mode: emacs + event: { edit: cuttoend } + } + { + name: cut_line_from_start + modifier: control + keycode: char_u + mode: emacs + event: { edit: cutfromstart } + } + { + name: swap_graphemes + modifier: control + keycode: char_t + mode: emacs + event: { edit: swapgraphemes } + } + { + name: move_one_word_left + modifier: alt + keycode: left + mode: emacs + event: { edit: movewordleft } + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: right + mode: emacs + event: { + until: [ + { send: historyhintwordcomplete } + { edit: movewordright } + ] + } + } + { + name: move_one_word_left + modifier: alt + keycode: char_b + mode: emacs + event: { edit: movewordleft } + } + { + name: move_one_word_right_or_take_history_hint + modifier: alt + keycode: char_f + mode: emacs + event: { + until: [ + { send: historyhintwordcomplete } + { edit: movewordright } + ] + } + } + { + name: delete_one_word_forward + modifier: alt + keycode: delete + mode: emacs + event: { edit: deleteword } + } + { + name: delete_one_word_backward + modifier: alt + keycode: backspace + mode: emacs + event: { edit: backspaceword } + } + { + name: delete_one_word_backward + modifier: alt + keycode: char_m + mode: emacs + event: { edit: backspaceword } + } + { + name: cut_word_to_right + modifier: alt + keycode: char_d + mode: emacs + event: { edit: cutwordright } + } + { + name: upper_case_word + modifier: alt + keycode: char_u + mode: emacs + event: { edit: uppercaseword } + } + { + name: lower_case_word + modifier: alt + keycode: char_l + mode: emacs + event: { edit: lowercaseword } + } + { + name: capitalize_char + modifier: alt + keycode: char_c + mode: emacs + event: { edit: capitalizechar } + } + # The following bindings with `*system` events require that Nushell has + # been compiled with the `system-clipboard` feature. + # This should be the case for Windows, macOS, and most Linux distributions + # Not available for example on Android (termux) + # If you want to use the system clipboard for visual selection or to + # paste directly, uncomment the respective lines and replace the version + # using the internal clipboard. + { + name: copy_selection + modifier: control_shift + keycode: char_c + mode: emacs + event: { edit: copyselection } + # event: { edit: copyselectionsystem } + } + { + name: cut_selection + modifier: control_shift + keycode: char_x + mode: emacs + event: { edit: cutselection } + # event: { edit: cutselectionsystem } + } + # { + # name: paste_system + # modifier: control_shift + # keycode: char_v + # mode: emacs + # event: { edit: pastesystem } + # } + { + name: select_all + modifier: control_shift + keycode: char_a + mode: emacs + event: { edit: selectall } + } + ] +} \ No newline at end of file diff --git a/.config/nushell/env.nu b/.config/nushell/env.nu new file mode 100644 index 0000000..edf0830 --- /dev/null +++ b/.config/nushell/env.nu @@ -0,0 +1,100 @@ +# Nushell Environment Config File +# +# version = "0.94.2" + +def create_left_prompt [] { + let dir = match (do --ignore-shell-errors { $env.PWD | path relative-to $nu.home-path }) { + null => $env.PWD + '' => '~' + $relative_pwd => ([~ $relative_pwd] | path join) + } + + let path_color = (if (is-admin) { ansi red_bold } else { ansi green_bold }) + let separator_color = (if (is-admin) { ansi light_red_bold } else { ansi light_green_bold }) + let path_segment = $"($path_color)($dir)" + + $path_segment | str replace --all (char path_sep) $"($separator_color)(char path_sep)($path_color)" +} + +def create_right_prompt [] { + # create a right prompt in magenta with green separators and am/pm underlined + let time_segment = ([ + (ansi reset) + (ansi magenta) + (date now | format date '%x %X') # try to respect user's locale + ] | str join | str replace --regex --all "([/:])" $"(ansi green)${1}(ansi magenta)" | + str replace --regex --all "([AP]M)" $"(ansi magenta_underline)${1}") + + let last_exit_code = if ($env.LAST_EXIT_CODE != 0) {([ + (ansi rb) + ($env.LAST_EXIT_CODE) + ] | str join) + } else { "" } + + ([$last_exit_code, (char space), $time_segment] | str join) +} + +# Use nushell functions to define your right and left prompt +$env.PROMPT_COMMAND = {|| create_left_prompt } +# FIXME: This default is not implemented in rust code as of 2023-09-08. +$env.PROMPT_COMMAND_RIGHT = {|| create_right_prompt } + +# The prompt indicators are environmental variables that represent +# the state of the prompt +$env.PROMPT_INDICATOR = {|| "> " } +$env.PROMPT_INDICATOR_VI_INSERT = {|| ": " } +$env.PROMPT_INDICATOR_VI_NORMAL = {|| "> " } +$env.PROMPT_MULTILINE_INDICATOR = {|| "::: " } + +# If you want previously entered commands to have a different prompt from the usual one, +# you can uncomment one or more of the following lines. +# This can be useful if you have a 2-line prompt and it's taking up a lot of space +# because every command entered takes up 2 lines instead of 1. You can then uncomment +# the line below so that previously entered commands show with a single `🚀`. +# $env.TRANSIENT_PROMPT_COMMAND = {|| "🚀 " } +# $env.TRANSIENT_PROMPT_INDICATOR = {|| "" } +# $env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = {|| "" } +# $env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = {|| "" } +# $env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = {|| "" } +# $env.TRANSIENT_PROMPT_COMMAND_RIGHT = {|| "" } + +# Specifies how environment variables are: +# - converted from a string to a value on Nushell startup (from_string) +# - converted from a value back to a string when running external commands (to_string) +# Note: The conversions happen *after* config.nu is loaded +$env.ENV_CONVERSIONS = { + "PATH": { + from_string: { |s| $s | split row (char esep) | path expand --no-symlink } + to_string: { |v| $v | path expand --no-symlink | str join (char esep) } + } + "Path": { + from_string: { |s| $s | split row (char esep) | path expand --no-symlink } + to_string: { |v| $v | path expand --no-symlink | str join (char esep) } + } +} + +# Directories to search for scripts when calling source or use +# The default for this is $nu.default-config-dir/scripts +$env.NU_LIB_DIRS = [ + ($nu.default-config-dir | path join 'scripts') # add /scripts +] + +# Directories to search for plugin binaries when calling register +# The default for this is $nu.default-config-dir/plugins +$env.NU_PLUGIN_DIRS = [ + ($nu.default-config-dir | path join 'plugins') # add /plugins +] + +# To add entries to PATH (on Windows you might use Path), you can use the following pattern: +# $env.PATH = ($env.PATH | split row (char esep) | prepend '/some/path') +# An alternate way to add entries to $env.PATH is to use the custom command `path add` +# which is built into the nushell stdlib: +# use std "path add" +# $env.PATH = ($env.PATH | split row (char esep)) +# path add /some/path +# path add ($env.CARGO_HOME | path join "bin") +# path add ($env.HOME | path join ".local" "bin") +# $env.PATH = ($env.PATH | uniq) + +# To load from a custom file you can use: +# source ($nu.default-config-dir | path join 'custom.nu') \ No newline at end of file diff --git a/.config/nushell/history.txt b/.config/nushell/history.txt new file mode 100644 index 0000000..3cca868 --- /dev/null +++ b/.config/nushell/history.txt @@ -0,0 +1,13 @@ +ls +eza +eza -l +ls +exit +which ls +man nu +nu --help +exit +cat compile_commands.json +cat compile_commands.json | from json +clear +exit diff --git a/.config/nvim/after/plugin/colors.lua b/.config/nvim/after/plugin/colors.lua new file mode 100644 index 0000000..c4e5ba0 --- /dev/null +++ b/.config/nvim/after/plugin/colors.lua @@ -0,0 +1,14 @@ +function colors(color) + color = color or 'gruvbox' + -- Available values: `'hard'`, `'medium'`, `'soft'` + vim.g.gruvbox_material_background = 'medium' + -- Available values: `'material'`, `'mix'`, `'original'` + vim.g.gruvbox_material_foreground = 'mix' + -- Available values: `'hard'`, `'medium'`, `'soft'` + vim.g.everforest_background = 'hard' + vim.g.gruvbox_material_better_performance = 1 + vim.g.everforest_better_performance = 1 + vim.cmd.colorscheme(color) +end + +colors() diff --git a/.config/nvim/after/plugin/lsp.lua b/.config/nvim/after/plugin/lsp.lua new file mode 100644 index 0000000..40bff54 --- /dev/null +++ b/.config/nvim/after/plugin/lsp.lua @@ -0,0 +1,81 @@ +local lsp = require('lsp-zero') +local lsp_config = require("lspconfig") +local mason = require("mason") + +lsp.preset('recommended') + +--lsp.ensure_installed({ +--'lua_ls', +--}) + +--Enable (broadcasting) snippet capability for completion +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.textDocument.completion.completionItem.snippetSupport = true + +lsp_config.html.setup { + capabilities = capabilities, + filetypes = { "html", "etlua" }, +} + +local cmp = require("cmp") +local cmp_select = {behavior = cmp.SelectBehavior.Select} +local cmp_mappings = lsp.defaults.cmp_mappings({ + [''] = cmp.mapping.select_prev_item(cmp_select), + [''] = cmp.mapping.select_next_item(cmp_select), + [''] = cmp.mapping.confirm({select = true}), + [''] = cmp.mapping.complete(), +}) + +cmp.setup { + sources = { + -- { name = 'conjure' }, + { name = 'nvim_lsp_signature_help' }, + { name = 'nvim_lsp' }, + { name = 'luasnip' }, + } +} + +lsp.set_preferences({ + sign_icons = { } +}) + +-- lsp.setup_nvim_cmp({ +-- mapping = cmp_mappings +-- }) + +lsp.on_attach(function(client, bufnr) + local opts = {buffer = bufnr, remap = false} + + if client.name == "eslint" then + vim.cmd.LspStop('eslint') + return + end + if client.name == "html" or client.name == "cssls" then + capabilities = capabilities + end + + vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) + vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) + vim.keymap.set("n", "vws", vim.lsp.buf.workspace_symbol, opts) + vim.keymap.set("n", "vd", vim.diagnostic.open_float, opts) + vim.keymap.set("n", "[d", vim.diagnostic.goto_next, opts) + vim.keymap.set("n", "]d", vim.diagnostic.goto_prev, opts) + vim.keymap.set("n", "vca", vim.lsp.buf.code_action, opts) + vim.keymap.set("n", "vrr", vim.lsp.buf.references, opts) + vim.keymap.set("n", "vrn", vim.lsp.buf.rename, opts) + vim.keymap.set("i", "", vim.lsp.buf.signature_help, opts) +end) + +lsp_config.lua_ls.setup { + -- ... other configs + settings = { + Lua = { + diagnostics = { + globals = { 'vim' } + } + } + } +} +lsp_config.racket_langserver.setup{} +lsp.setup() +mason.setup() diff --git a/.config/nvim/after/plugin/telescope.lua b/.config/nvim/after/plugin/telescope.lua new file mode 100644 index 0000000..99cfc0e --- /dev/null +++ b/.config/nvim/after/plugin/telescope.lua @@ -0,0 +1,15 @@ +local builtin = require('telescope.builtin') +local telescope = require('telescope') +telescope.load_extension("workspaces") +telescope.load_extension("recent_files") +telescope.load_extension("telescope-tabs") +vim.keymap.set('n', 'ff', builtin.find_files, {}) +vim.keymap.set('n', 'fF', builtin.git_files, {}) +vim.keymap.set('n', 'fg', builtin.live_grep, {}) +vim.keymap.set('n', 'bb', builtin.buffers, {}) +vim.keymap.set('n', 'hh', builtin.help_tags, {}) +vim.keymap.set('n', 'cc', builtin.colorscheme, {}) +vim.keymap.set('n', 'wo', ":Telescope workspaces", {}) +vim.api.nvim_set_keymap("n", "fr", + [[lua require('telescope').extensions.recent_files.pick()]], + {noremap = true, silent = true}) diff --git a/.config/nvim/after/plugin/treesitter.lua b/.config/nvim/after/plugin/treesitter.lua new file mode 100644 index 0000000..a0b7388 --- /dev/null +++ b/.config/nvim/after/plugin/treesitter.lua @@ -0,0 +1,22 @@ +require'nvim-treesitter.configs'.setup { + -- A list of parser names, or "all" + ensure_installed = { "java", "c", "lua" }, + + -- Install parsers synchronously (only applied to `ensure_installed`) + sync_install = false, + + -- Automatically install missing parsers when entering buffer + -- Recommendation: set to false if you don't have `tree-sitter` CLI installed locally + auto_install = true, + + highlight = { + -- `false` will disable the whole extension + enable = true, + + -- Setting this to true will run `:h syntax` and tree-sitter at the same time. + -- Set this to `true` if you depend on 'syntax' being enabled (like for indentation). + -- Using this option may slow down your editor, and you may see some duplicate highlights. + -- Instead of true it can also be a list of languages + additional_vim_regex_highlighting = false, + }, +} diff --git a/.config/nvim/after/plugin/undotree.lua b/.config/nvim/after/plugin/undotree.lua new file mode 100644 index 0000000..97bb7ab --- /dev/null +++ b/.config/nvim/after/plugin/undotree.lua @@ -0,0 +1,2 @@ +vim.keymap.set("n", "u", vim.cmd.UndotreeToggle) + diff --git a/.config/nvim/db_ui/connections.json b/.config/nvim/db_ui/connections.json new file mode 100644 index 0000000..7780eff --- /dev/null +++ b/.config/nvim/db_ui/connections.json @@ -0,0 +1 @@ +[{"url": "sqlserver://chalupmc:MikeC00l@golem.csse.rose-hulman.edu/SodaBasechalupmc", "name": "SodaBasechalupmc"}, {"url": "sqlserver://chalupmc:MikeC00l@golem.csse.rose-hulman.edu/NWindchalupmc", "name": "NWindchalupmc"}] diff --git a/.config/nvim/ftplugin/java.lua b/.config/nvim/ftplugin/java.lua new file mode 100644 index 0000000..4684615 --- /dev/null +++ b/.config/nvim/ftplugin/java.lua @@ -0,0 +1,97 @@ +-- See `:help vim.lsp.start_client` for an overview of the supported `config` options. + +--local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ':p:h:t') +--local workspace_dir = '/path/to/workspace-root/' .. project_name +local workspace_dir = vim.fn.getcwd() +local config = { + -- The command that starts the language server + -- See: https://github.com/eclipse/eclipse.jdt.ls#running-from-the-command-line + cmd = { + + -- 💀 + '/usr/lib/jvm/java-19-openjdk/bin/java', -- or '/path/to/java17_or_newer/bin/java' + -- depends on if `java` is in your $PATH env variable and if it points to the right version. + + '-Declipse.application=org.eclipse.jdt.ls.core.id1', + '-Dosgi.bundles.defaultStartLevel=4', + '-Declipse.product=org.eclipse.jdt.ls.core.product', + '-Dlog.protocol=true', + '-Dlog.level=ALL', + '-Xms1g', + '--add-modules=ALL-SYSTEM', + '--add-opens', 'java.base/java.util=ALL-UNNAMED', + '--add-opens', 'java.base/java.lang=ALL-UNNAMED', + + -- 💀 + '-jar', '/usr/share/java/jdtls/plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar', + -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ + -- Must point to the Change this to + -- eclipse.jdt.ls installation the actual version + + + -- 💀 + '-configuration', '/usr/share/java/jdtls/config_linux', + -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^ + -- Must point to the Change to one of `linux`, `win` or `mac` + -- eclipse.jdt.ls installation Depending on your system. + + + -- 💀 + -- See `data directory configuration` section in the README + '-data', "/home/mikec/Documents/workspace" + }, + + -- 💀 + -- This is the default if not provided, you can remove it. Or adjust as needed. + -- One dedicated LSP server & client will be started per unique root_dir + root_dir = require('jdtls.setup').find_root({'.git', 'mvnw', 'gradlew'}), + + -- Here you can configure eclipse.jdt.ls specific settings + -- See https://github.com/eclipse/eclipse.jdt.ls/wiki/Running-the-JAVA-LS-server-from-the-command-line#initialize-request + -- for a list of options + settings = { + java = { + } + }, + + -- Language server `initializationOptions` + -- You need to extend the `bundles` with paths to jar files + -- if you want to use additional eclipse.jdt.ls plugins. + -- + -- See https://github.com/mfussenegger/nvim-jdtls#java-debug-installation + -- + -- If you don't plan on using the debugger or other eclipse.jdt.ls plugins you can remove this + --init_options = { + -- bundles = { + -- vim.fn.glob("/home/mikec/.local/share/nvim/mason/packages/java-debug-adapter/extension/server/com.microsoft.java.debug.plugin/target/com.microsoft.java.debug.plugin-*.jar", 1) + -- } + --}, +} + +-- This bundles definition is the same as in the previous section (java-debug installation) +local bundles = { + vim.fn.glob("/home/mikec/.local/share/nvim/mason/packages/java-debug-adapter/extension/server/com.microsoft.java.debug.plugin/target/com.microsoft.java.debug.plugin-*.jar", 1) +}; + +-- This is the new part +vim.list_extend(bundles, vim.split(vim.fn.glob("/path/to/microsoft/vscode-java-test/server/*.jar", 1), "\n")) +config['init_options'] = { + bundles = bundles; +} + +-- This starts a new client & server, +-- or attaches to an existing client & server depending on the `root_dir`. + +vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) +vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) +vim.keymap.set("n", "vws", vim.lsp.buf.workspace_symbol, opts) +vim.keymap.set("n", "vd", vim.diagnostic.open_float, opts) +vim.keymap.set("n", "[d", vim.diagnostic.goto_next, opts) +vim.keymap.set("n", "]d", vim.diagnostic.goto_prev, opts) +vim.keymap.set("n", "vca", vim.lsp.buf.code_action, opts) +vim.keymap.set("n", "vrr", vim.lsp.buf.references, opts) +vim.keymap.set("n", "vrn", vim.lsp.buf.rename, opts) +vim.keymap.set("i", "", vim.lsp.buf.signature_help, opts) +vim.keymap.set("n", "i", function() require('jdtls').organize_imports() end, opts) + +require('jdtls').start_or_attach(config) diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..dbc863e --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1 @@ +require("config") diff --git a/.config/nvim/lua/config/dadbod.lua b/.config/nvim/lua/config/dadbod.lua new file mode 100644 index 0000000..90c13fb --- /dev/null +++ b/.config/nvim/lua/config/dadbod.lua @@ -0,0 +1,29 @@ +local M = {} + +local function db_completion() + require("cmp").setup.buffer { sources = { { name = "vim-dadbod-completion" } } } +end + +function M.setup() + vim.g.db_ui_save_location = vim.fn.stdpath "config" .. require("plenary.path").path.sep .. "db_ui" + + vim.api.nvim_create_autocmd("FileType", { + pattern = { + "sql", + }, + command = [[setlocal omnifunc=vim_dadbod_completion#omni]], + }) + + vim.api.nvim_create_autocmd("FileType", { + pattern = { + "sql", + "mysql", + "plsql", + }, + callback = function() + vim.schedule(db_completion) + end, + }) +end + +return M diff --git a/.config/nvim/lua/config/init.lua b/.config/nvim/lua/config/init.lua new file mode 100644 index 0000000..208c9de --- /dev/null +++ b/.config/nvim/lua/config/init.lua @@ -0,0 +1,3 @@ +require("config.remap") +require("config.packer") +require("config.set") diff --git a/.config/nvim/lua/config/packer.lua b/.config/nvim/lua/config/packer.lua new file mode 100644 index 0000000..c007169 --- /dev/null +++ b/.config/nvim/lua/config/packer.lua @@ -0,0 +1,328 @@ +-- This file can be loaded by calling `lua require('plugins')` from your init.vim + +-- Only required if you have packer configured as `opt` +vim.cmd [[packadd packer.nvim]] + +return require('packer').startup(function(use) + -- Packer can manage itself + use 'wbthomason/packer.nvim' + + use { + 'nvim-telescope/telescope.nvim', + branch = '0.1.x', + requires = { { 'nvim-lua/plenary.nvim' } } + } + + use { + 'LukasPietzschmann/telescope-tabs', + requires = { 'nvim-telescope/telescope.nvim' }, + config = function() + require'telescope-tabs'.setup{ + -- Your custom config :^) + } + end + } + + use({ + 'rose-pine/neovim', + as = 'rose-pine', + -- config = function() + -- vim.cmd('colorscheme rose-pine') + -- end + }) + + use 'tanvirtin/monokai.nvim' + + use 'arzg/vim-colors-xcode' + + use 'shaunsingh/nord.nvim' + + use 'kvrohit/mellow.nvim' + + use 'Mofiqul/vscode.nvim' + + use 'Th3Whit3Wolf/one-nvim' + + use 'mhartington/oceanic-next' + + use 'folke/tokyonight.nvim' + + use 'sainnhe/gruvbox-material' + + use { "ellisonleao/gruvbox.nvim" } + + use 'sainnhe/everforest' + + use 'lourenci/github-colors' + + use 'navarasu/onedark.nvim' + + use 'shaunsingh/moonlight.nvim' + + use 'Mofiqul/dracula.nvim' + + use 'kdheepak/monochrome.nvim' + + use "savq/melange-nvim" + + use { "catppuccin/nvim", as = "catppuccin" } + + -- use 'RRethy/nvim-base16' + + use ({ 'projekt0n/github-nvim-theme' }) + + use { 'Everblush/nvim', as = 'everblush' } + + use "lewpoly/sherbet.nvim" + + use { + 'nvim-treesitter/nvim-treesitter', + run = ':TSUpdate', + } + + use { + 'numToStr/Comment.nvim', + config = function() + require('Comment').setup() + end + } + + use 'nvim-treesitter/playground' + + -- use 'mbbill/undotree' + + use { + 'VonHeikemen/lsp-zero.nvim', + requires = { + -- LSP Support + { 'neovim/nvim-lspconfig' }, + { 'williamboman/mason.nvim' }, + { 'williamboman/mason-lspconfig.nvim' }, + + -- Autocompletion + { 'hrsh7th/nvim-cmp' }, + { 'hrsh7th/cmp-buffer' }, + { 'hrsh7th/cmp-path' }, + { 'hrsh7th/cmp-nvim-lsp-signature-help' }, + { 'saadparwaiz1/cmp_luasnip' }, + { 'hrsh7th/cmp-nvim-lsp' }, + { 'hrsh7th/cmp-nvim-lua' }, + + -- Snippets + { 'L3MON4D3/LuaSnip' }, + { 'rafamadriz/friendly-snippets' }, + } + } + + use { + 'L3MON4D3/LuaSnip', + --after = 'nvim-cmp', + requires = { "rafamadriz/friendly-snippets" }, + config = function() + --require('config.snippets') + require("luasnip.loaders.from_vscode").lazy_load() + end, + run = "make install_jsregexp" + } + + use 'rafamadriz/friendly-snippets' + + use { + "folke/twilight.nvim", + config = function() + require("twilight").setup { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + } + end + } + + use 'winston0410/cmd-parser.nvim' + use { + 'winston0410/range-highlight.nvim', + config = function() require("range-highlight").setup {} end + } + + use 'RRethy/vim-illuminate' + + use 'mfussenegger/nvim-jdtls' + + use { + "samjwill/nvim-unception", + setup = function() + -- Optional settings go here! + end + } + + use { + "0oAstro/dim.lua", + requires = { "nvim-treesitter/nvim-treesitter", "neovim/nvim-lspconfig" }, + config = function() + require('dim').setup({}) + end + } + use 'mfussenegger/nvim-dap' + + use { "rcarriga/nvim-dap-ui", requires = { "mfussenegger/nvim-dap" } } + + use { 'stevearc/dressing.nvim' } + + use { + 'krady21/compiler-explorer.nvim', + config = function() + require("compiler-explorer").setup({ + autocmd = { + enable = true, + hl = "Cursorline" + } + }) + end + } + + -- use 'ggandor/lightspeed.nvim' + + use { + 'ggandor/leap.nvim', + config = function() + require('leap').add_default_mappings() + end + } + use 'ollykel/v-vim' + + use { + 'windwp/nvim-ts-autotag', + config = function() + require('nvim-ts-autotag').setup() + end + } + + use 'jbyuki/nabla.nvim' + + use { + 'ray-x/web-tools.nvim', + config = function() + require('web-tools').setup() + end + } + + use { + 'natecraddock/workspaces.nvim', + config = function() + require('workspaces').setup() + end + } + + use {"smartpde/telescope-recent-files"} + + use 'uga-rosa/ccc.nvim' + + use 'tveskag/nvim-blame-line' + + use { + 'lewis6991/gitsigns.nvim', + config = function() + require('gitsigns').setup() + end + } + + -- use 'Olical/conjure' + -- use 'PaterJason/cmp-conjure' + + use { + 'lukas-reineke/indent-blankline.nvim', + config = function() + require 'ibl'.setup{ scope = { enabled = false } } + end, + } + + use 'jaawerth/fennel.vim' + + use 'stefanos82/nelua.vim' + + use 'leafo/moonscript-vim' + + use 'teal-language/vim-teal' + + use 'https://github.com/VaiN474/vim-etlua' + + use 'folke/neodev.nvim' + + use { + "kylechui/nvim-surround", + tag = "*", -- Use for stability; omit to use `main` branch for the latest features + config = function() + require("nvim-surround").setup({ + -- Configuration here, or leave empty to use defaults + }) + end + } + + use { + "utilyre/barbecue.nvim", + tag = "*", + requires = { + "SmiteshP/nvim-navic", + "nvim-tree/nvim-web-devicons", -- optional dependency + }, + after = "nvim-web-devicons", -- keep this if you're using NvChad + config = function() + require("barbecue").setup() + end, + } + + use { + 'nvim-lualine/lualine.nvim', + requires = { 'nvim-tree/nvim-web-devicons', opt = true }, + config = function() + local function lspactive() + local names = {} + for i, server in pairs(vim.lsp.get_active_clients({ bufnr = 0 })) do + table.insert(names, server.name) + end + return " [" .. table.concat(names, " ") .. "]" + end + require('lualine').setup { + options = { + globalstatus = true, + icons_enabled = false, + section_separators = { left = '', right = '' }, + component_separators = { left = '', right = '' } + }, + sections = { + lualine_a = { { 'mode', separator = { left = '', right = '' } }, }, + lualine_b = {}, + lualine_c = {'filename'}, + lualine_x = {lspactive, { 'diagnostics', icons_enabled = true }, 'branch', 'diff'}, + lualine_y = {'encoding', 'fileformat', 'filetype'}, + lualine_z = {'location', { 'progress', separator = { left = '', right = '' } }, }, + }, + } + end, + } + + use { + 'goolord/alpha-nvim', + requires = { 'nvim-tree/nvim-web-devicons' }, + config = function () + require'alpha'.setup(require'alpha.themes.startify'.config) + end + } + + use 'aklt/plantuml-syntax' + + use { + "tpope/vim-dadbod", + opt = true, + requires = { + "kristijanhusak/vim-dadbod-ui", + "kristijanhusak/vim-dadbod-completion", + }, + config = function() + require("config.dadbod").setup() + end, + cmd = { "DBUIToggle", "DBUI", "DBUIAddConnection", "DBUIFindBuffer", "DBUIRenameBuffer", "DBUILastQueryInfo" }, + } + + use 'eandrju/cellular-automaton.nvim' +end) diff --git a/.config/nvim/lua/config/remap.lua b/.config/nvim/lua/config/remap.lua new file mode 100644 index 0000000..c77dc98 --- /dev/null +++ b/.config/nvim/lua/config/remap.lua @@ -0,0 +1,56 @@ +require('Comment').setup() +vim.g.mapleader = " " +vim.g.maplocalleader = "," + +vim.keymap.set("n", "op", vim.cmd.Ex) + +vim.keymap.set("n", "lp", ":lua require(\"nabla\").popup()") +vim.keymap.set("n", "ll", ":lua require(\"nabla\").toggle_virt()") + +-- vim.keymap.set("n", "", vim.cmd.nohlsearch) +vim.keymap.set("n", "x", vim.cmd.bdelete) +vim.keymap.set("n", "bd", ":bdelete!") +vim.keymap.set("n", "w", function() + vim.cmd.write(); + vim.cmd.bdelete(); +end) + +vim.keymap.set("v", "J", ":m '>+1gv=gv") +vim.keymap.set("v", "K", ":m '<-2gv=gv") + +vim.keymap.set("n", "J", "mzJ'z") +vim.keymap.set("n", "", "zz") +vim.keymap.set("n", "", "zz") +vim.keymap.set("n", "n", "nzzzv") +vim.keymap.set("n", "N", "Nzzzv") + +vim.keymap.set("n", "y", "\"+y") +vim.keymap.set("v", "y", "\"+y") +vim.keymap.set("n", "Y", "\"+Y") +vim.keymap.set("n", "p", "\"+p") +vim.keymap.set("v", "p", "\"+p") +vim.keymap.set("n", "P", "\"+P") + +vim.keymap.set("n", "f", function() + vim.lsp.buf.format() +end) + +vim.keymap.set("n", "tw", function() + vim.cmd.Twilight() +end) + + +vim.keymap.set("t", "", "") + +vim.keymap.set("n", "ec", ":e ~/.config/nvim") + +vim.keymap.set("n", "bn", ":bnext") +vim.keymap.set("n", "bp", ":bprevious") + +vim.keymap.set("n", "tn", ":tabnext") +vim.keymap.set("n", "tp", ":tabprevious") +vim.keymap.set("n", "to", ":tabnew") +vim.keymap.set("n", "td", ":tabclose") +vim.keymap.set("n", "tt", function() + require('telescope-tabs').list_tabs() +end) diff --git a/.config/nvim/lua/config/set.lua b/.config/nvim/lua/config/set.lua new file mode 100644 index 0000000..c24aa82 --- /dev/null +++ b/.config/nvim/lua/config/set.lua @@ -0,0 +1,53 @@ +vim.opt.nu = true +vim.opt.relativenumber = true + +vim.opt.tabstop = 4 +vim.opt.softtabstop = 4 +vim.opt.shiftwidth = 4 +vim.opt.expandtab = true + +vim.opt.showmode = false + +vim.opt.smartindent = true + +vim.opt.wrap = false + + +vim.opt.swapfile = false +vim.opt.backup = false +vim.opt.undodir = os.getenv("HOME") .. "/.vim/undodir" +vim.opt.undofile = true + +vim.opt.hlsearch = true +vim.opt.incsearch = true + +vim.opt.termguicolors = true + +vim.opt.scrolloff = 8 +vim.opt.signcolumn = "yes" +vim.opt.isfname:append("@-@") + +vim.opt.updatetime = 50 + +vim.opt.colorcolumn = "80" + +vim.opt.splitright = true +vim.opt.splitbelow = true + +vim.g.mapleader = " " + +vim.g.neovide_scale_factor = 1.0 +function ChangeScaleFactor(delta) + vim.g.neovide_scale_factor = vim.g.neovide_scale_factor * delta +end + +vim.keymap.set("n", "", function() + ChangeScaleFactor(1.25) +end) +vim.keymap.set("n", "", function() + ChangeScaleFactor(1 / 1.25) +end) + +vim.opt.guifont = { "Cascadia Code", ":h12" } + +vim.g.netrw_keepdir = 0 diff --git a/.config/nvim/plugin/packer_compiled.lua b/.config/nvim/plugin/packer_compiled.lua new file mode 100644 index 0000000..1d4433a --- /dev/null +++ b/.config/nvim/plugin/packer_compiled.lua @@ -0,0 +1,660 @@ +-- Automatically generated packer.nvim plugin loader code + +if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then + vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') + return +end + +vim.api.nvim_command('packadd packer.nvim') + +local no_errors, error_msg = pcall(function() + +_G._packer = _G._packer or {} +_G._packer.inside_compile = true + +local time +local profile_info +local should_profile = false +if should_profile then + local hrtime = vim.loop.hrtime + profile_info = {} + time = function(chunk, start) + if start then + profile_info[chunk] = hrtime() + else + profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 + end + end +else + time = function(chunk, start) end +end + +local function save_profiles(threshold) + local sorted_times = {} + for chunk_name, time_taken in pairs(profile_info) do + sorted_times[#sorted_times + 1] = {chunk_name, time_taken} + end + table.sort(sorted_times, function(a, b) return a[2] > b[2] end) + local results = {} + for i, elem in ipairs(sorted_times) do + if not threshold or threshold and elem[2] > threshold then + results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' + end + end + if threshold then + table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') + end + + _G._packer.profile_output = results +end + +time([[Luarocks path setup]], true) +local package_path_str = "/home/mikec/.cache/nvim/packer_hererocks/2.1.1707061634/share/lua/5.1/?.lua;/home/mikec/.cache/nvim/packer_hererocks/2.1.1707061634/share/lua/5.1/?/init.lua;/home/mikec/.cache/nvim/packer_hererocks/2.1.1707061634/lib/luarocks/rocks-5.1/?.lua;/home/mikec/.cache/nvim/packer_hererocks/2.1.1707061634/lib/luarocks/rocks-5.1/?/init.lua" +local install_cpath_pattern = "/home/mikec/.cache/nvim/packer_hererocks/2.1.1707061634/lib/lua/5.1/?.so" +if not string.find(package.path, package_path_str, 1, true) then + package.path = package.path .. ';' .. package_path_str +end + +if not string.find(package.cpath, install_cpath_pattern, 1, true) then + package.cpath = package.cpath .. ';' .. install_cpath_pattern +end + +time([[Luarocks path setup]], false) +time([[try_loadstring definition]], true) +local function try_loadstring(s, component, name) + local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) + if not success then + vim.schedule(function() + vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) + end) + end + return result +end + +time([[try_loadstring definition]], false) +time([[Defining packer_plugins]], true) +_G.packer_plugins = { + ["Comment.nvim"] = { + config = { "\27LJ\2\n5\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\fComment\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/Comment.nvim", + url = "https://github.com/numToStr/Comment.nvim" + }, + LuaSnip = { + config = { "\27LJ\2\nM\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\14lazy_load luasnip.loaders.from_vscode\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/LuaSnip", + url = "https://github.com/L3MON4D3/LuaSnip" + }, + ["alpha-nvim"] = { + config = { "\27LJ\2\n`\0\0\5\0\5\0\n6\0\0\0'\2\1\0B\0\2\0029\0\2\0006\2\0\0'\4\3\0B\2\2\0029\2\4\2B\0\2\1K\0\1\0\vconfig\26alpha.themes.startify\nsetup\nalpha\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/alpha-nvim", + url = "https://github.com/goolord/alpha-nvim" + }, + ["barbecue.nvim"] = { + config = { "\27LJ\2\n6\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\rbarbecue\frequire\0" }, + load_after = {}, + loaded = true, + needs_bufread = false, + path = "/home/mikec/.local/share/nvim/site/pack/packer/opt/barbecue.nvim", + url = "https://github.com/utilyre/barbecue.nvim" + }, + catppuccin = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/catppuccin", + url = "https://github.com/catppuccin/nvim" + }, + ["ccc.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/ccc.nvim", + url = "https://github.com/uga-rosa/ccc.nvim" + }, + ["cellular-automaton.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/cellular-automaton.nvim", + url = "https://github.com/eandrju/cellular-automaton.nvim" + }, + ["cmd-parser.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/cmd-parser.nvim", + url = "https://github.com/winston0410/cmd-parser.nvim" + }, + ["cmp-buffer"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/cmp-buffer", + url = "https://github.com/hrsh7th/cmp-buffer" + }, + ["cmp-nvim-lsp"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/cmp-nvim-lsp", + url = "https://github.com/hrsh7th/cmp-nvim-lsp" + }, + ["cmp-nvim-lsp-signature-help"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/cmp-nvim-lsp-signature-help", + url = "https://github.com/hrsh7th/cmp-nvim-lsp-signature-help" + }, + ["cmp-nvim-lua"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/cmp-nvim-lua", + url = "https://github.com/hrsh7th/cmp-nvim-lua" + }, + ["cmp-path"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/cmp-path", + url = "https://github.com/hrsh7th/cmp-path" + }, + cmp_luasnip = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/cmp_luasnip", + url = "https://github.com/saadparwaiz1/cmp_luasnip" + }, + ["compiler-explorer.nvim"] = { + config = { "\27LJ\2\nx\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\4\0005\3\3\0=\3\5\2B\0\2\1K\0\1\0\fautocmd\1\0\1\fautocmd\0\1\0\2\venable\2\ahl\15Cursorline\nsetup\22compiler-explorer\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/compiler-explorer.nvim", + url = "https://github.com/krady21/compiler-explorer.nvim" + }, + ["dim.lua"] = { + config = { "\27LJ\2\n5\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\bdim\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/dim.lua", + url = "https://github.com/0oAstro/dim.lua" + }, + ["dracula.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/dracula.nvim", + url = "https://github.com/Mofiqul/dracula.nvim" + }, + ["dressing.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/dressing.nvim", + url = "https://github.com/stevearc/dressing.nvim" + }, + everblush = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/everblush", + url = "https://github.com/Everblush/nvim" + }, + everforest = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/everforest", + url = "https://github.com/sainnhe/everforest" + }, + ["fennel.vim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/fennel.vim", + url = "https://github.com/jaawerth/fennel.vim" + }, + ["friendly-snippets"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/friendly-snippets", + url = "https://github.com/rafamadriz/friendly-snippets" + }, + ["github-colors"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/github-colors", + url = "https://github.com/lourenci/github-colors" + }, + ["github-nvim-theme"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/github-nvim-theme", + url = "https://github.com/projekt0n/github-nvim-theme" + }, + ["gitsigns.nvim"] = { + config = { "\27LJ\2\n6\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\rgitsigns\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/gitsigns.nvim", + url = "https://github.com/lewis6991/gitsigns.nvim" + }, + ["gruvbox-material"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/gruvbox-material", + url = "https://github.com/sainnhe/gruvbox-material" + }, + ["gruvbox.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/gruvbox.nvim", + url = "https://github.com/ellisonleao/gruvbox.nvim" + }, + ["indent-blankline.nvim"] = { + config = { "\27LJ\2\nY\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\4\0005\3\3\0=\3\5\2B\0\2\1K\0\1\0\nscope\1\0\1\nscope\0\1\0\1\fenabled\1\nsetup\bibl\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/indent-blankline.nvim", + url = "https://github.com/lukas-reineke/indent-blankline.nvim" + }, + ["leap.nvim"] = { + config = { "\27LJ\2\nA\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\25add_default_mappings\tleap\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/leap.nvim", + url = "https://github.com/ggandor/leap.nvim" + }, + ["lsp-zero.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/lsp-zero.nvim", + url = "https://github.com/VonHeikemen/lsp-zero.nvim" + }, + ["lualine.nvim"] = { + config = { "\27LJ\2\n\1\0\0\n\0\f\0\0254\0\0\0006\1\0\0006\3\1\0009\3\2\0039\3\3\0035\5\4\0B\3\2\0A\1\0\4H\4\56\6\5\0009\6\6\6\18\b\0\0009\t\a\5B\6\3\1F\4\3\3R\4\127'\1\b\0006\2\5\0009\2\t\2\18\4\0\0'\5\n\0B\2\3\2'\3\v\0&\1\3\1L\1\2\0\6]\6 \vconcat\n [\tname\vinsert\ntable\1\0\1\nbufnr\3\0\23get_active_clients\blsp\bvim\npairs\5\1\0\b\0\29\0'3\0\0\0006\1\1\0'\3\2\0B\1\2\0029\1\3\0015\3\t\0005\4\4\0005\5\5\0=\5\6\0045\5\a\0=\5\b\4=\4\n\0035\4\14\0004\5\3\0005\6\v\0005\a\f\0=\a\r\6>\6\1\5=\5\15\0044\5\0\0=\5\16\0045\5\17\0=\5\18\0045\5\20\0>\0\1\0055\6\19\0>\6\2\5=\5\21\0045\5\22\0=\5\23\0045\5\24\0005\6\25\0005\a\26\0=\a\r\6>\6\2\5=\5\27\4=\4\28\3B\1\2\1K\0\1\0\rsections\14lualine_z\1\0\2\nright\b\tleft\b\1\2\1\0\rprogress\14separator\0\1\2\0\0\rlocation\14lualine_y\1\4\0\0\rencoding\15fileformat\rfiletype\14lualine_x\1\5\0\0\0\0\vbranch\tdiff\1\2\1\0\16diagnostics\18icons_enabled\2\14lualine_c\1\2\0\0\rfilename\14lualine_b\14lualine_a\1\0\6\14lualine_a\0\14lualine_y\0\14lualine_z\0\14lualine_x\0\14lualine_c\0\14lualine_b\0\14separator\1\0\2\nright\b\tleft\b\1\2\1\0\tmode\14separator\0\foptions\1\0\2\foptions\0\rsections\0\25component_separators\1\0\2\nright\5\tleft\5\23section_separators\1\0\2\nright\b\tleft\b\1\0\4\25component_separators\0\23section_separators\0\18icons_enabled\1\17globalstatus\2\nsetup\flualine\frequire\0\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/lualine.nvim", + url = "https://github.com/nvim-lualine/lualine.nvim" + }, + ["mason-lspconfig.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/mason-lspconfig.nvim", + url = "https://github.com/williamboman/mason-lspconfig.nvim" + }, + ["mason.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/mason.nvim", + url = "https://github.com/williamboman/mason.nvim" + }, + ["melange-nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/melange-nvim", + url = "https://github.com/savq/melange-nvim" + }, + ["mellow.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/mellow.nvim", + url = "https://github.com/kvrohit/mellow.nvim" + }, + ["monochrome.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/monochrome.nvim", + url = "https://github.com/kdheepak/monochrome.nvim" + }, + ["monokai.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/monokai.nvim", + url = "https://github.com/tanvirtin/monokai.nvim" + }, + ["moonlight.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/moonlight.nvim", + url = "https://github.com/shaunsingh/moonlight.nvim" + }, + ["moonscript-vim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/moonscript-vim", + url = "https://github.com/leafo/moonscript-vim" + }, + ["nabla.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nabla.nvim", + url = "https://github.com/jbyuki/nabla.nvim" + }, + ["nelua.vim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nelua.vim", + url = "https://github.com/stefanos82/nelua.vim" + }, + ["neodev.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/neodev.nvim", + url = "https://github.com/folke/neodev.nvim" + }, + ["nord.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nord.nvim", + url = "https://github.com/shaunsingh/nord.nvim" + }, + ["nvim-blame-line"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-blame-line", + url = "https://github.com/tveskag/nvim-blame-line" + }, + ["nvim-cmp"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-cmp", + url = "https://github.com/hrsh7th/nvim-cmp" + }, + ["nvim-dap"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-dap", + url = "https://github.com/mfussenegger/nvim-dap" + }, + ["nvim-dap-ui"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-dap-ui", + url = "https://github.com/rcarriga/nvim-dap-ui" + }, + ["nvim-jdtls"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-jdtls", + url = "https://github.com/mfussenegger/nvim-jdtls" + }, + ["nvim-lspconfig"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-lspconfig", + url = "https://github.com/neovim/nvim-lspconfig" + }, + ["nvim-navic"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-navic", + url = "https://github.com/SmiteshP/nvim-navic" + }, + ["nvim-surround"] = { + config = { "\27LJ\2\n?\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\18nvim-surround\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-surround", + url = "https://github.com/kylechui/nvim-surround" + }, + ["nvim-treesitter"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-treesitter", + url = "https://github.com/nvim-treesitter/nvim-treesitter" + }, + ["nvim-ts-autotag"] = { + config = { "\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\20nvim-ts-autotag\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-ts-autotag", + url = "https://github.com/windwp/nvim-ts-autotag" + }, + ["nvim-unception"] = { + loaded = true, + needs_bufread = false, + path = "/home/mikec/.local/share/nvim/site/pack/packer/opt/nvim-unception", + url = "https://github.com/samjwill/nvim-unception" + }, + ["nvim-web-devicons"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/nvim-web-devicons", + url = "https://github.com/nvim-tree/nvim-web-devicons" + }, + ["oceanic-next"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/oceanic-next", + url = "https://github.com/mhartington/oceanic-next" + }, + ["one-nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/one-nvim", + url = "https://github.com/Th3Whit3Wolf/one-nvim" + }, + ["onedark.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/onedark.nvim", + url = "https://github.com/navarasu/onedark.nvim" + }, + ["packer.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/packer.nvim", + url = "https://github.com/wbthomason/packer.nvim" + }, + ["plantuml-syntax"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/plantuml-syntax", + url = "https://github.com/aklt/plantuml-syntax" + }, + playground = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/playground", + url = "https://github.com/nvim-treesitter/playground" + }, + ["plenary.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/plenary.nvim", + url = "https://github.com/nvim-lua/plenary.nvim" + }, + ["range-highlight.nvim"] = { + config = { "\27LJ\2\nA\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\20range-highlight\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/range-highlight.nvim", + url = "https://github.com/winston0410/range-highlight.nvim" + }, + ["rose-pine"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/rose-pine", + url = "https://github.com/rose-pine/neovim" + }, + ["sherbet.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/sherbet.nvim", + url = "https://github.com/lewpoly/sherbet.nvim" + }, + ["telescope-recent-files"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/telescope-recent-files", + url = "https://github.com/smartpde/telescope-recent-files" + }, + ["telescope-tabs"] = { + config = { "\27LJ\2\n@\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\19telescope-tabs\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/telescope-tabs", + url = "https://github.com/LukasPietzschmann/telescope-tabs" + }, + ["telescope.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/telescope.nvim", + url = "https://github.com/nvim-telescope/telescope.nvim" + }, + ["tokyonight.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/tokyonight.nvim", + url = "https://github.com/folke/tokyonight.nvim" + }, + ["twilight.nvim"] = { + config = { "\27LJ\2\n:\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\rtwilight\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/twilight.nvim", + url = "https://github.com/folke/twilight.nvim" + }, + ["v-vim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/v-vim", + url = "https://github.com/ollykel/v-vim" + }, + ["vim-colors-xcode"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/vim-colors-xcode", + url = "https://github.com/arzg/vim-colors-xcode" + }, + ["vim-dadbod"] = { + after = { "vim-dadbod-ui", "vim-dadbod-completion" }, + commands = { "DBUIToggle", "DBUI", "DBUIAddConnection", "DBUIFindBuffer", "DBUIRenameBuffer", "DBUILastQueryInfo" }, + config = { "\27LJ\2\n;\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\18config.dadbod\frequire\0" }, + loaded = false, + needs_bufread = false, + only_cond = false, + path = "/home/mikec/.local/share/nvim/site/pack/packer/opt/vim-dadbod", + url = "https://github.com/tpope/vim-dadbod" + }, + ["vim-dadbod-completion"] = { + after_files = { "/home/mikec/.local/share/nvim/site/pack/packer/opt/vim-dadbod-completion/after/plugin/vim_dadbod_completion.lua", "/home/mikec/.local/share/nvim/site/pack/packer/opt/vim-dadbod-completion/after/plugin/vim_dadbod_completion.vim" }, + load_after = { + ["vim-dadbod"] = true + }, + loaded = false, + needs_bufread = false, + path = "/home/mikec/.local/share/nvim/site/pack/packer/opt/vim-dadbod-completion", + url = "https://github.com/kristijanhusak/vim-dadbod-completion" + }, + ["vim-dadbod-ui"] = { + load_after = { + ["vim-dadbod"] = true + }, + loaded = false, + needs_bufread = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/opt/vim-dadbod-ui", + url = "https://github.com/kristijanhusak/vim-dadbod-ui" + }, + ["vim-etlua"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/vim-etlua", + url = "https://github.com/VaiN474/vim-etlua" + }, + ["vim-illuminate"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/vim-illuminate", + url = "https://github.com/RRethy/vim-illuminate" + }, + ["vim-teal"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/vim-teal", + url = "https://github.com/teal-language/vim-teal" + }, + ["vscode.nvim"] = { + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/vscode.nvim", + url = "https://github.com/Mofiqul/vscode.nvim" + }, + ["web-tools.nvim"] = { + config = { "\27LJ\2\n7\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\14web-tools\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/web-tools.nvim", + url = "https://github.com/ray-x/web-tools.nvim" + }, + ["workspaces.nvim"] = { + config = { "\27LJ\2\n8\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\15workspaces\frequire\0" }, + loaded = true, + path = "/home/mikec/.local/share/nvim/site/pack/packer/start/workspaces.nvim", + url = "https://github.com/natecraddock/workspaces.nvim" + } +} + +time([[Defining packer_plugins]], false) +-- Setup for: nvim-unception +time([[Setup for nvim-unception]], true) +try_loadstring("\27LJ\2\n\v\0\0\1\0\0\0\1K\0\1\0\0", "setup", "nvim-unception") +time([[Setup for nvim-unception]], false) +time([[packadd for nvim-unception]], true) +vim.cmd [[packadd nvim-unception]] +time([[packadd for nvim-unception]], false) +-- Config for: indent-blankline.nvim +time([[Config for indent-blankline.nvim]], true) +try_loadstring("\27LJ\2\nY\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\4\0005\3\3\0=\3\5\2B\0\2\1K\0\1\0\nscope\1\0\1\nscope\0\1\0\1\fenabled\1\nsetup\bibl\frequire\0", "config", "indent-blankline.nvim") +time([[Config for indent-blankline.nvim]], false) +-- Config for: lualine.nvim +time([[Config for lualine.nvim]], true) +try_loadstring("\27LJ\2\n\1\0\0\n\0\f\0\0254\0\0\0006\1\0\0006\3\1\0009\3\2\0039\3\3\0035\5\4\0B\3\2\0A\1\0\4H\4\56\6\5\0009\6\6\6\18\b\0\0009\t\a\5B\6\3\1F\4\3\3R\4\127'\1\b\0006\2\5\0009\2\t\2\18\4\0\0'\5\n\0B\2\3\2'\3\v\0&\1\3\1L\1\2\0\6]\6 \vconcat\n [\tname\vinsert\ntable\1\0\1\nbufnr\3\0\23get_active_clients\blsp\bvim\npairs\5\1\0\b\0\29\0'3\0\0\0006\1\1\0'\3\2\0B\1\2\0029\1\3\0015\3\t\0005\4\4\0005\5\5\0=\5\6\0045\5\a\0=\5\b\4=\4\n\0035\4\14\0004\5\3\0005\6\v\0005\a\f\0=\a\r\6>\6\1\5=\5\15\0044\5\0\0=\5\16\0045\5\17\0=\5\18\0045\5\20\0>\0\1\0055\6\19\0>\6\2\5=\5\21\0045\5\22\0=\5\23\0045\5\24\0005\6\25\0005\a\26\0=\a\r\6>\6\2\5=\5\27\4=\4\28\3B\1\2\1K\0\1\0\rsections\14lualine_z\1\0\2\nright\b\tleft\b\1\2\1\0\rprogress\14separator\0\1\2\0\0\rlocation\14lualine_y\1\4\0\0\rencoding\15fileformat\rfiletype\14lualine_x\1\5\0\0\0\0\vbranch\tdiff\1\2\1\0\16diagnostics\18icons_enabled\2\14lualine_c\1\2\0\0\rfilename\14lualine_b\14lualine_a\1\0\6\14lualine_a\0\14lualine_y\0\14lualine_z\0\14lualine_x\0\14lualine_c\0\14lualine_b\0\14separator\1\0\2\nright\b\tleft\b\1\2\1\0\tmode\14separator\0\foptions\1\0\2\foptions\0\rsections\0\25component_separators\1\0\2\nright\5\tleft\5\23section_separators\1\0\2\nright\b\tleft\b\1\0\4\25component_separators\0\23section_separators\0\18icons_enabled\1\17globalstatus\2\nsetup\flualine\frequire\0\0", "config", "lualine.nvim") +time([[Config for lualine.nvim]], false) +-- Config for: alpha-nvim +time([[Config for alpha-nvim]], true) +try_loadstring("\27LJ\2\n`\0\0\5\0\5\0\n6\0\0\0'\2\1\0B\0\2\0029\0\2\0006\2\0\0'\4\3\0B\2\2\0029\2\4\2B\0\2\1K\0\1\0\vconfig\26alpha.themes.startify\nsetup\nalpha\frequire\0", "config", "alpha-nvim") +time([[Config for alpha-nvim]], false) +-- Config for: web-tools.nvim +time([[Config for web-tools.nvim]], true) +try_loadstring("\27LJ\2\n7\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\14web-tools\frequire\0", "config", "web-tools.nvim") +time([[Config for web-tools.nvim]], false) +-- Config for: leap.nvim +time([[Config for leap.nvim]], true) +try_loadstring("\27LJ\2\nA\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\25add_default_mappings\tleap\frequire\0", "config", "leap.nvim") +time([[Config for leap.nvim]], false) +-- Config for: gitsigns.nvim +time([[Config for gitsigns.nvim]], true) +try_loadstring("\27LJ\2\n6\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\rgitsigns\frequire\0", "config", "gitsigns.nvim") +time([[Config for gitsigns.nvim]], false) +-- Config for: telescope-tabs +time([[Config for telescope-tabs]], true) +try_loadstring("\27LJ\2\n@\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\19telescope-tabs\frequire\0", "config", "telescope-tabs") +time([[Config for telescope-tabs]], false) +-- Config for: compiler-explorer.nvim +time([[Config for compiler-explorer.nvim]], true) +try_loadstring("\27LJ\2\nx\0\0\4\0\6\0\t6\0\0\0'\2\1\0B\0\2\0029\0\2\0005\2\4\0005\3\3\0=\3\5\2B\0\2\1K\0\1\0\fautocmd\1\0\1\fautocmd\0\1\0\2\venable\2\ahl\15Cursorline\nsetup\22compiler-explorer\frequire\0", "config", "compiler-explorer.nvim") +time([[Config for compiler-explorer.nvim]], false) +-- Config for: Comment.nvim +time([[Config for Comment.nvim]], true) +try_loadstring("\27LJ\2\n5\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\fComment\frequire\0", "config", "Comment.nvim") +time([[Config for Comment.nvim]], false) +-- Config for: nvim-ts-autotag +time([[Config for nvim-ts-autotag]], true) +try_loadstring("\27LJ\2\n=\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\20nvim-ts-autotag\frequire\0", "config", "nvim-ts-autotag") +time([[Config for nvim-ts-autotag]], false) +-- Config for: range-highlight.nvim +time([[Config for range-highlight.nvim]], true) +try_loadstring("\27LJ\2\nA\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\20range-highlight\frequire\0", "config", "range-highlight.nvim") +time([[Config for range-highlight.nvim]], false) +-- Config for: dim.lua +time([[Config for dim.lua]], true) +try_loadstring("\27LJ\2\n5\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\bdim\frequire\0", "config", "dim.lua") +time([[Config for dim.lua]], false) +-- Config for: LuaSnip +time([[Config for LuaSnip]], true) +try_loadstring("\27LJ\2\nM\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\14lazy_load luasnip.loaders.from_vscode\frequire\0", "config", "LuaSnip") +time([[Config for LuaSnip]], false) +-- Config for: nvim-surround +time([[Config for nvim-surround]], true) +try_loadstring("\27LJ\2\n?\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\18nvim-surround\frequire\0", "config", "nvim-surround") +time([[Config for nvim-surround]], false) +-- Config for: workspaces.nvim +time([[Config for workspaces.nvim]], true) +try_loadstring("\27LJ\2\n8\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\15workspaces\frequire\0", "config", "workspaces.nvim") +time([[Config for workspaces.nvim]], false) +-- Config for: twilight.nvim +time([[Config for twilight.nvim]], true) +try_loadstring("\27LJ\2\n:\0\0\3\0\3\0\a6\0\0\0'\2\1\0B\0\2\0029\0\2\0004\2\0\0B\0\2\1K\0\1\0\nsetup\rtwilight\frequire\0", "config", "twilight.nvim") +time([[Config for twilight.nvim]], false) +-- Load plugins in order defined by `after` +time([[Sequenced loading]], true) +vim.cmd [[ packadd nvim-web-devicons ]] +vim.cmd [[ packadd barbecue.nvim ]] + +-- Config for: barbecue.nvim +try_loadstring("\27LJ\2\n6\0\0\3\0\3\0\0066\0\0\0'\2\1\0B\0\2\0029\0\2\0B\0\1\1K\0\1\0\nsetup\rbarbecue\frequire\0", "config", "barbecue.nvim") + +time([[Sequenced loading]], false) + +-- Command lazy-loads +time([[Defining lazy-load commands]], true) +pcall(vim.api.nvim_create_user_command, 'DBUIRenameBuffer', function(cmdargs) + require('packer.load')({'vim-dadbod'}, { cmd = 'DBUIRenameBuffer', l1 = cmdargs.line1, l2 = cmdargs.line2, bang = cmdargs.bang, args = cmdargs.args, mods = cmdargs.mods }, _G.packer_plugins) + end, + {nargs = '*', range = true, bang = true, complete = function() + require('packer.load')({'vim-dadbod'}, {}, _G.packer_plugins) + return vim.fn.getcompletion('DBUIRenameBuffer ', 'cmdline') + end}) +pcall(vim.api.nvim_create_user_command, 'DBUILastQueryInfo', function(cmdargs) + require('packer.load')({'vim-dadbod'}, { cmd = 'DBUILastQueryInfo', l1 = cmdargs.line1, l2 = cmdargs.line2, bang = cmdargs.bang, args = cmdargs.args, mods = cmdargs.mods }, _G.packer_plugins) + end, + {nargs = '*', range = true, bang = true, complete = function() + require('packer.load')({'vim-dadbod'}, {}, _G.packer_plugins) + return vim.fn.getcompletion('DBUILastQueryInfo ', 'cmdline') + end}) +pcall(vim.api.nvim_create_user_command, 'DBUIToggle', function(cmdargs) + require('packer.load')({'vim-dadbod'}, { cmd = 'DBUIToggle', l1 = cmdargs.line1, l2 = cmdargs.line2, bang = cmdargs.bang, args = cmdargs.args, mods = cmdargs.mods }, _G.packer_plugins) + end, + {nargs = '*', range = true, bang = true, complete = function() + require('packer.load')({'vim-dadbod'}, {}, _G.packer_plugins) + return vim.fn.getcompletion('DBUIToggle ', 'cmdline') + end}) +pcall(vim.api.nvim_create_user_command, 'DBUI', function(cmdargs) + require('packer.load')({'vim-dadbod'}, { cmd = 'DBUI', l1 = cmdargs.line1, l2 = cmdargs.line2, bang = cmdargs.bang, args = cmdargs.args, mods = cmdargs.mods }, _G.packer_plugins) + end, + {nargs = '*', range = true, bang = true, complete = function() + require('packer.load')({'vim-dadbod'}, {}, _G.packer_plugins) + return vim.fn.getcompletion('DBUI ', 'cmdline') + end}) +pcall(vim.api.nvim_create_user_command, 'DBUIAddConnection', function(cmdargs) + require('packer.load')({'vim-dadbod'}, { cmd = 'DBUIAddConnection', l1 = cmdargs.line1, l2 = cmdargs.line2, bang = cmdargs.bang, args = cmdargs.args, mods = cmdargs.mods }, _G.packer_plugins) + end, + {nargs = '*', range = true, bang = true, complete = function() + require('packer.load')({'vim-dadbod'}, {}, _G.packer_plugins) + return vim.fn.getcompletion('DBUIAddConnection ', 'cmdline') + end}) +pcall(vim.api.nvim_create_user_command, 'DBUIFindBuffer', function(cmdargs) + require('packer.load')({'vim-dadbod'}, { cmd = 'DBUIFindBuffer', l1 = cmdargs.line1, l2 = cmdargs.line2, bang = cmdargs.bang, args = cmdargs.args, mods = cmdargs.mods }, _G.packer_plugins) + end, + {nargs = '*', range = true, bang = true, complete = function() + require('packer.load')({'vim-dadbod'}, {}, _G.packer_plugins) + return vim.fn.getcompletion('DBUIFindBuffer ', 'cmdline') + end}) +time([[Defining lazy-load commands]], false) + + +_G._packer.inside_compile = false +if _G._packer.needs_bufread == true then + vim.cmd("doautocmd BufRead") +end +_G._packer.needs_bufread = false + +if should_profile then save_profiles() end + +end) + +if not no_errors then + error_msg = error_msg:gsub('"', '\\"') + vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') +end diff --git a/.config/pavucontrol.ini b/.config/pavucontrol.ini new file mode 100644 index 0000000..46d646c --- /dev/null +++ b/.config/pavucontrol.ini @@ -0,0 +1,8 @@ +[window] +width=640 +height=400 +sinkInputType=1 +sourceOutputType=1 +sinkType=0 +sourceType=1 +showVolumeMeters=1 diff --git a/.config/pulse/cookie b/.config/pulse/cookie new file mode 100644 index 0000000000000000000000000000000000000000..51fcccea5066fa0f923ecc8cda9872902b2d9772 GIT binary patch literal 256 zcmV+b0ssDJ)#{#Onrn{PWz4qXCH5y94*!)b^ON%RKN{Vl-6DUqh`M5cSf$T0K6zfC*|ML1le@OYQj*(?$U-O2|b z02gi3++r!Oxiof9bEb0aFWr}H(}9&CItQ~0Rd+Zl<~ZDTqS?kg4FD8?7BHeXLx&mJ zaa}+|X?)b+@6XjLbA{1rB90KT%@3Ja_Y*} tables in database, set to 0 for no exhaustive preview (only the sqlite_master table is displayed). +SQLITE_ROW_LIMIT=5 # Display only the first and the last ( - 1) records in each table, set to 0 for no limits. + +handle_extension() { + case "${FILE_EXTENSION_LOWER}" in + ## Archive + a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\ + rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip) + atool --list -- "${FILE_PATH}" && exit 5 + bsdtar --list --file "${FILE_PATH}" && exit 5 + exit 1;; + rar) + ## Avoid password prompt by providing empty password + unrar lt -p- -- "${FILE_PATH}" && exit 5 + exit 1;; + 7z) + ## Avoid password prompt by providing empty password + 7z l -p -- "${FILE_PATH}" && exit 5 + exit 1;; + + ## PDF + pdf) + ## Preview as text conversion + pdftotext -l 10 -nopgbrk -q -- "${FILE_PATH}" - | \ + fmt -w "${PV_WIDTH}" && exit 5 + mutool draw -F txt -i -- "${FILE_PATH}" 1-10 | \ + fmt -w "${PV_WIDTH}" && exit 5 + exiftool "${FILE_PATH}" && exit 5 + exit 1;; + + ## BitTorrent + torrent) + transmission-show -- "${FILE_PATH}" && exit 5 + exit 1;; + + ## OpenDocument + odt|sxw) + ## Preview as text conversion + odt2txt "${FILE_PATH}" && exit 5 + ## Preview as markdown conversion + pandoc -s -t markdown -- "${FILE_PATH}" && exit 5 + exit 1;; + ods|odp) + ## Preview as text conversion (unsupported by pandoc for markdown) + odt2txt "${FILE_PATH}" && exit 5 + exit 1;; + + ## XLSX + xlsx) + ## Preview as csv conversion + ## Uses: https://github.com/dilshod/xlsx2csv + xlsx2csv -- "${FILE_PATH}" && exit 5 + exit 1;; + + ## HTML + htm|html|xhtml) + ## Preview as text conversion + w3m -dump "${FILE_PATH}" && exit 5 + lynx -dump -- "${FILE_PATH}" && exit 5 + elinks -dump "${FILE_PATH}" && exit 5 + pandoc -s -t markdown -- "${FILE_PATH}" && exit 5 + ;; + + ## JSON + json) + jq --color-output . "${FILE_PATH}" && exit 5 + python -m json.tool -- "${FILE_PATH}" && exit 5 + ;; + + ## Jupyter Notebooks + ipynb) + jupyter nbconvert --to markdown "${FILE_PATH}" --stdout | env COLORTERM=8bit bat --color=always --style=plain --language=markdown && exit 5 + jupyter nbconvert --to markdown "${FILE_PATH}" --stdout && exit 5 + jq --color-output . "${FILE_PATH}" && exit 5 + python -m json.tool -- "${FILE_PATH}" && exit 5 + ;; + + ## Direct Stream Digital/Transfer (DSDIFF) and wavpack aren't detected + ## by file(1). + dff|dsf|wv|wvc) + mediainfo "${FILE_PATH}" && exit 5 + exiftool "${FILE_PATH}" && exit 5 + ;; # Continue with next handler on failure + esac +} + +handle_image() { + ## Size of the preview if there are multiple options or it has to be + ## rendered from vector graphics. If the conversion program allows + ## specifying only one dimension while keeping the aspect ratio, the width + ## will be used. + local DEFAULT_SIZE="1920x1080" + + local mimetype="${1}" + case "${mimetype}" in + ## SVG + image/svg+xml|image/svg) + rsvg-convert --keep-aspect-ratio --width "${DEFAULT_SIZE%x*}" "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}.png" \ + && mv "${IMAGE_CACHE_PATH}.png" "${IMAGE_CACHE_PATH}" \ + && exit 6 + exit 1;; + + ## DjVu + image/vnd.djvu) + ddjvu -format=tiff -quality=90 -page=1 -size="${DEFAULT_SIZE}" \ + - "${IMAGE_CACHE_PATH}" < "${FILE_PATH}" \ + && exit 6 || exit 1;; + + ## Image + image/*) + local orientation + orientation="$( identify -format '%[EXIF:Orientation]\n' -- "${FILE_PATH}" )" + ## If orientation data is present and the image actually + ## needs rotating ("1" means no rotation)... + if [[ -n "$orientation" && "$orientation" != 1 ]]; then + ## ...auto-rotate the image according to the EXIF data. + convert -- "${FILE_PATH}" -auto-orient "${IMAGE_CACHE_PATH}" && exit 6 + fi + + ## `w3mimgdisplay` will be called for all images (unless overridden + ## as above), but might fail for unsupported types. + exit 7;; + + ## Video + # video/*) + # # Get embedded thumbnail + # ffmpeg -i "${FILE_PATH}" -map 0:v -map -0:V -c copy "${IMAGE_CACHE_PATH}" && exit 6 + # # Get frame 10% into video + # ffmpegthumbnailer -i "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" -s 0 && exit 6 + # exit 1;; + + ## Audio + # audio/*) + # # Get embedded thumbnail + # ffmpeg -i "${FILE_PATH}" -map 0:v -map -0:V -c copy \ + # "${IMAGE_CACHE_PATH}" && exit 6;; + + ## PDF + # application/pdf) + # pdftoppm -f 1 -l 1 \ + # -scale-to-x "${DEFAULT_SIZE%x*}" \ + # -scale-to-y -1 \ + # -singlefile \ + # -jpeg -tiffcompression jpeg \ + # -- "${FILE_PATH}" "${IMAGE_CACHE_PATH%.*}" \ + # && exit 6 || exit 1;; + + + ## ePub, MOBI, FB2 (using Calibre) + # application/epub+zip|application/x-mobipocket-ebook|\ + # application/x-fictionbook+xml) + # # ePub (using https://github.com/marianosimone/epub-thumbnailer) + # epub-thumbnailer "${FILE_PATH}" "${IMAGE_CACHE_PATH}" \ + # "${DEFAULT_SIZE%x*}" && exit 6 + # ebook-meta --get-cover="${IMAGE_CACHE_PATH}" -- "${FILE_PATH}" \ + # >/dev/null && exit 6 + # exit 1;; + + ## Font + application/font*|application/*opentype) + preview_png="/tmp/$(basename "${IMAGE_CACHE_PATH%.*}").png" + if fontimage -o "${preview_png}" \ + --pixelsize "120" \ + --fontname \ + --pixelsize "80" \ + --text " ABCDEFGHIJKLMNOPQRSTUVWXYZ " \ + --text " abcdefghijklmnopqrstuvwxyz " \ + --text " 0123456789.:,;(*!?') ff fl fi ffi ffl " \ + --text " The quick brown fox jumps over the lazy dog. " \ + "${FILE_PATH}"; + then + convert -- "${preview_png}" "${IMAGE_CACHE_PATH}" \ + && rm "${preview_png}" \ + && exit 6 + else + exit 1 + fi + ;; + + ## Preview archives using the first image inside. + ## (Very useful for comic book collections for example.) + # application/zip|application/x-rar|application/x-7z-compressed|\ + # application/x-xz|application/x-bzip2|application/x-gzip|application/x-tar) + # local fn=""; local fe="" + # local zip=""; local rar=""; local tar=""; local bsd="" + # case "${mimetype}" in + # application/zip) zip=1 ;; + # application/x-rar) rar=1 ;; + # application/x-7z-compressed) ;; + # *) tar=1 ;; + # esac + # { [ "$tar" ] && fn=$(tar --list --file "${FILE_PATH}"); } || \ + # { fn=$(bsdtar --list --file "${FILE_PATH}") && bsd=1 && tar=""; } || \ + # { [ "$rar" ] && fn=$(unrar lb -p- -- "${FILE_PATH}"); } || \ + # { [ "$zip" ] && fn=$(zipinfo -1 -- "${FILE_PATH}"); } || return + # + # fn=$(echo "$fn" | python -c "from __future__ import print_function; \ + # import sys; import mimetypes as m; \ + # [ print(l, end='') for l in sys.stdin if \ + # (m.guess_type(l[:-1])[0] or '').startswith('image/') ]" |\ + # sort -V | head -n 1) + # [ "$fn" = "" ] && return + # [ "$bsd" ] && fn=$(printf '%b' "$fn") + # + # [ "$tar" ] && tar --extract --to-stdout \ + # --file "${FILE_PATH}" -- "$fn" > "${IMAGE_CACHE_PATH}" && exit 6 + # fe=$(echo -n "$fn" | sed 's/[][*?\]/\\\0/g') + # [ "$bsd" ] && bsdtar --extract --to-stdout \ + # --file "${FILE_PATH}" -- "$fe" > "${IMAGE_CACHE_PATH}" && exit 6 + # [ "$bsd" ] || [ "$tar" ] && rm -- "${IMAGE_CACHE_PATH}" + # [ "$rar" ] && unrar p -p- -inul -- "${FILE_PATH}" "$fn" > \ + # "${IMAGE_CACHE_PATH}" && exit 6 + # [ "$zip" ] && unzip -pP "" -- "${FILE_PATH}" "$fe" > \ + # "${IMAGE_CACHE_PATH}" && exit 6 + # [ "$rar" ] || [ "$zip" ] && rm -- "${IMAGE_CACHE_PATH}" + # ;; + esac + + # openscad_image() { + # TMPPNG="$(mktemp -t XXXXXX.png)" + # openscad --colorscheme="${OPENSCAD_COLORSCHEME}" \ + # --imgsize="${OPENSCAD_IMGSIZE/x/,}" \ + # -o "${TMPPNG}" "${1}" + # mv "${TMPPNG}" "${IMAGE_CACHE_PATH}" + # } + + case "${FILE_EXTENSION_LOWER}" in + ## 3D models + ## OpenSCAD only supports png image output, and ${IMAGE_CACHE_PATH} + ## is hardcoded as jpeg. So we make a tempfile.png and just + ## move/rename it to jpg. This works because image libraries are + ## smart enough to handle it. + # csg|scad) + # openscad_image "${FILE_PATH}" && exit 6 + # ;; + # 3mf|amf|dxf|off|stl) + # openscad_image <(echo "import(\"${FILE_PATH}\");") && exit 6 + # ;; + drawio) + draw.io -x "${FILE_PATH}" -o "${IMAGE_CACHE_PATH}" \ + --width "${DEFAULT_SIZE%x*}" && exit 6 + exit 1;; + esac +} + +handle_mime() { + local mimetype="${1}" + case "${mimetype}" in + ## RTF and DOC + text/rtf|*msword) + ## Preview as text conversion + ## note: catdoc does not always work for .doc files + ## catdoc: http://www.wagner.pp.ru/~vitus/software/catdoc/ + catdoc -- "${FILE_PATH}" && exit 5 + exit 1;; + + ## DOCX, ePub, FB2 (using markdown) + ## You might want to remove "|epub" and/or "|fb2" below if you have + ## uncommented other methods to preview those formats + *wordprocessingml.document|*/epub+zip|*/x-fictionbook+xml) + ## Preview as markdown conversion + pandoc -s -t markdown -- "${FILE_PATH}" && exit 5 + exit 1;; + + ## E-mails + message/rfc822) + ## Parsing performed by mu: https://github.com/djcb/mu + mu view -- "${FILE_PATH}" && exit 5 + exit 1;; + + ## XLS + *ms-excel) + ## Preview as csv conversion + ## xls2csv comes with catdoc: + ## http://www.wagner.pp.ru/~vitus/software/catdoc/ + xls2csv -- "${FILE_PATH}" && exit 5 + exit 1;; + + ## SQLite + *sqlite3) + ## Preview as text conversion + sqlite_tables="$( sqlite3 "file:${FILE_PATH}?mode=ro" '.tables' )" \ + || exit 1 + [ -z "${sqlite_tables}" ] && + { echo "Empty SQLite database." && exit 5; } + sqlite_show_query() { + sqlite-utils query "${FILE_PATH}" "${1}" --table --fmt fancy_grid \ + || sqlite3 "file:${FILE_PATH}?mode=ro" "${1}" -header -column + } + ## Display basic table information + sqlite_rowcount_query="$( + sqlite3 "file:${FILE_PATH}?mode=ro" -noheader \ + 'SELECT group_concat( + "SELECT """ || name || """ AS tblname, + count(*) AS rowcount + FROM " || name, + " UNION ALL " + ) + FROM sqlite_master + WHERE type="table" AND name NOT LIKE "sqlite_%";' + )" + sqlite_show_query \ + "SELECT tblname AS 'table', rowcount AS 'count', + ( + SELECT '(' || group_concat(name, ', ') || ')' + FROM pragma_table_info(tblname) + ) AS 'columns', + ( + SELECT '(' || group_concat( + upper(type) || ( + CASE WHEN pk > 0 THEN ' PRIMARY KEY' ELSE '' END + ), + ', ' + ) || ')' + FROM pragma_table_info(tblname) + ) AS 'types' + FROM (${sqlite_rowcount_query});" + if [ "${SQLITE_TABLE_LIMIT}" -gt 0 ] && + [ "${SQLITE_ROW_LIMIT}" -ge 0 ]; then + ## Do exhaustive preview + echo && printf '>%.0s' $( seq "${PV_WIDTH}" ) && echo + sqlite3 "file:${FILE_PATH}?mode=ro" -noheader \ + "SELECT name FROM sqlite_master + WHERE type='table' AND name NOT LIKE 'sqlite_%' + LIMIT ${SQLITE_TABLE_LIMIT};" | + while read -r sqlite_table; do + sqlite_rowcount="$( + sqlite3 "file:${FILE_PATH}?mode=ro" -noheader \ + "SELECT count(*) FROM ${sqlite_table}" + )" + echo + if [ "${SQLITE_ROW_LIMIT}" -gt 0 ] && + [ "${SQLITE_ROW_LIMIT}" \ + -lt "${sqlite_rowcount}" ]; then + echo "${sqlite_table} [${SQLITE_ROW_LIMIT} of ${sqlite_rowcount}]:" + sqlite_ellipsis_query="$( + sqlite3 "file:${FILE_PATH}?mode=ro" -noheader \ + "SELECT 'SELECT ' || group_concat( + '''...''', ', ' + ) + FROM pragma_table_info( + '${sqlite_table}' + );" + )" + sqlite_show_query \ + "SELECT * FROM ( + SELECT * FROM ${sqlite_table} LIMIT 1 + ) + UNION ALL ${sqlite_ellipsis_query} UNION ALL + SELECT * FROM ( + SELECT * FROM ${sqlite_table} + LIMIT (${SQLITE_ROW_LIMIT} - 1) + OFFSET ( + ${sqlite_rowcount} + - (${SQLITE_ROW_LIMIT} - 1) + ) + );" + else + echo "${sqlite_table} [${sqlite_rowcount}]:" + sqlite_show_query "SELECT * FROM ${sqlite_table};" + fi + done + fi + exit 5;; + + ## Text + text/* | */xml) + ## Syntax highlight + if [[ "$( stat --printf='%s' -- "${FILE_PATH}" )" -gt "${HIGHLIGHT_SIZE_MAX}" ]]; then + exit 2 + fi + if [[ "$( tput colors )" -ge 256 ]]; then + local pygmentize_format='terminal' + local highlight_format='ansi' + else + local pygmentize_format='terminal' + local highlight_format='ansi' + fi + env HIGHLIGHT_OPTIONS="${HIGHLIGHT_OPTIONS}" highlight \ + --out-format="${highlight_format}" \ + --force -- "${FILE_PATH}" && exit 5 + env COLORTERM=8bit bat --color=always --style="${BAT_STYLE}" \ + -- "${FILE_PATH}" && exit 5 + pygmentize -f "${pygmentize_format}" -O "style=${PYGMENTIZE_STYLE}"\ + -- "${FILE_PATH}" && exit 5 + exit 2;; + + ## DjVu + image/vnd.djvu) + ## Preview as text conversion (requires djvulibre) + djvutxt "${FILE_PATH}" | fmt -w "${PV_WIDTH}" && exit 5 + exiftool "${FILE_PATH}" && exit 5 + exit 1;; + + ## Image + image/*) + ## Preview as text conversion + # img2txt --gamma=0.6 --width="${PV_WIDTH}" -- "${FILE_PATH}" && exit 4 + exiftool "${FILE_PATH}" && exit 5 + exit 1;; + + ## Video and audio + video/* | audio/*) + mediainfo "${FILE_PATH}" && exit 5 + exiftool "${FILE_PATH}" && exit 5 + exit 1;; + + ## ELF files (executables and shared objects) + application/x-executable | application/x-pie-executable | application/x-sharedlib) + readelf -WCa "${FILE_PATH}" && exit 5 + exit 1;; + esac +} + +handle_fallback() { + echo '----- File Type Classification -----' && file --dereference --brief -- "${FILE_PATH}" && exit 5 +} + + +MIMETYPE="$( file --dereference --brief --mime-type -- "${FILE_PATH}" )" +if [[ "${PV_IMAGE_ENABLED}" == 'True' ]]; then + handle_image "${MIMETYPE}" +fi +handle_extension +handle_mime "${MIMETYPE}" +handle_fallback + +exit 1 diff --git a/.config/tinted-theming/tinty/config.toml b/.config/tinted-theming/tinty/config.toml new file mode 100644 index 0000000..c32d48d --- /dev/null +++ b/.config/tinted-theming/tinty/config.toml @@ -0,0 +1,17 @@ +[[items]] +path = "https://github.com/tinted-theming/tinted-shell" +name = "base16-shell" +themes-dir = "scripts" +hook = ". %f" + +[[items]] +path = "https://github.com/tinted-theming/tinted-tmux" +name = "tinted-tmux" +# Check if tmux is in use and if it is, reload the config file +hook = "test -n \"$TMUX\" && tmux source-file ~/.tmux.conf" +themes-dir = "colors" + +[[items]] +path = "https://github.com/tinted-theming/tinted-fzf" +name = "tinted-fzf" +themes-dir = "sh" diff --git a/.doom.d_/config.el b/.doom.d_/config.el new file mode 100644 index 0000000..67a66bb --- /dev/null +++ b/.doom.d_/config.el @@ -0,0 +1,144 @@ +;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- + +;; Place your private configuration here! Remember, you do not need to run 'doom +;; sync' after modifying this file! + + +;; Some functionality uses this to identify you, e.g. GPG configuration, email +;; clients, file templates and snippets. It is optional. +;; (setq user-full-name "John Doe" +;; user-mail-address "john@doe.com") + +;; Doom exposes five (optional) variables for controlling fonts in Doom: +;; +;; - `doom-font' -- the primary font to use +;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable) +;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for +;; presentations or streaming. +;; - `doom-symbol-font' -- for symbols +;; - `doom-serif-font' -- for the `fixed-pitch-serif' face +;; +;; See 'C-h v doom-font' for documentation and more examples of what they +;; accept. For example: +;; +(setq doom-font (font-spec :family "Cascadia Code" :size 16) + doom-variable-pitch-font (font-spec :family "Cascadia Code" :size 16)) +;; +;; If you or Emacs can't find your font, use 'M-x describe-font' to look them +;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to +;; refresh your font settings. If Emacs still can't find your font, it likely +;; wasn't installed correctly. Font issues are rarely Doom issues! + +;; There are two ways to load a theme. Both assume the theme is installed and +;; available. You can either set `doom-theme' or manually load a theme with the +;; `load-theme' function. This is the default: +(setq doom-theme 'doom-monokai-classic) + +;; This determines the style of line numbers in effect. If set to `nil', line +;; numbers are disabled. For relative line numbers, set this to `relative'. +(setq display-line-numbers-type 'relative) + +;; If you use `org' and don't want your org files in the default location below, +;; change `org-directory'. It must be set before org loads! +(setq org-directory "~/org/") + + +;; Whenever you reconfigure a package, make sure to wrap your config in an +;; `after!' block, otherwise Doom's defaults may override your settings. E.g. +;; +;; (after! PACKAGE +;; (setq x y)) +;; +;; The exceptions to this rule: +;; +;; - Setting file/directory variables (like `org-directory') +;; - Setting variables which explicitly tell you to set them before their +;; package is loaded (see 'C-h v VARIABLE' to look up their documentation). +;; - Setting doom variables (which start with 'doom-' or '+'). +;; +;; Here are some additional functions/macros that will help you configure Doom. +;; +;; - `load!' for loading external *.el files relative to this one +;; - `use-package!' for configuring packages +;; - `after!' for running code after a package has loaded +;; - `add-load-path!' for adding directories to the `load-path', relative to +;; this file. Emacs searches the `load-path' when you load packages with +;; `require' or `use-package'. +;; - `map!' for binding new keys +;; +;; To get information about any of these functions/macros, move the cursor over +;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k'). +;; This will open documentation for it, including demos of how they are used. +;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces, +;; etc). +;; +;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how +;; they are implemented. +(setq elfeed-feeds + '(("https://phaazon.net/blog/feed") + ("https://danielde.dev/rss.xml") + ("https://sizeof.cat/index.xml") + ("https://lukesmith.xyz/rss.xml") + ("https://api.substack.com/feed/podcast/462466.rss") + ("https://www.dailywire.com/feeds/rss.xml") + ("https://feeds.simplecast.com/6c2VScgo") + ("https://feeds.simplecast.com/pp_b9xO6") + ("https://notrelated.xyz/rss"))) +(setq elfeed-summary-settings + '((group + (:title . "Feeds") + (:elements + (query . :all))))) + +(after! elfeed + (setq elfeed-search-filter "")) +(after! elfeed-summary + (setq elfeed-summary-default-filter "")) + +(add-hook 'elfeed-summary-mode-hook + (lambda () + (define-key elfeed-summary-mode-map + (kbd "RET") + 'elfeed-summary--action-show-read) + (define-key elfeed-summary-mode-map + (kbd "RET") + 'elfeed-summary--action-show-read) + (define-key elfeed-summary-mode-map + (kbd "h") + 'elfeed-summary-quit-window) + (define-key elfeed-summary-mode-map + (kbd "l") + 'elfeed-summary--action-show-read))) + +(add-hook 'elfeed-search-mode-hook + (lambda () + (define-key elfeed-search-mode-map + (kbd "h") + 'elfeed-kill-buffer) + (define-key elfeed-search-mode-map + (kbd "l") + 'elfeed-search-show-entry))) + +(add-hook 'elfeed-show-mode-hook + (lambda () + (define-key elfeed-show-mode-map + (kbd "h") + 'elfeed-kill-buffer) + (define-key elfeed-show-mode-map + (kbd "C-n") + 'View-scroll-line-forward) + (define-key elfeed-show-mode-map + (kbd "C-p") + 'View-scroll-line-backward))) + +(add-hook 'elfeed-show-mode-hook 'view-mode) + +(defun elfeed-podcast-tagger (entry) + (when (elfeed-entry-enclosures entry) + (elfeed-tag entry 'podcast))) + +;;(add-hook 'elfeed-new-entry-hook #'ime-elfeed-podcast-tagger) +(setq emms-source-file-default-directory "/mnt/c/Users/mchalupi/Music") +(global-tree-sitter-mode) +(add-hook 'tree-sitter-after-on-hook #'tree-sitter-hl-mode) +(require 'vlf-setup) diff --git a/.doom.d_/custom.el b/.doom.d_/custom.el new file mode 100644 index 0000000..214b773 --- /dev/null +++ b/.doom.d_/custom.el @@ -0,0 +1,14 @@ +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(custom-safe-themes + '("b54376ec363568656d54578d28b95382854f62b74c32077821fdfd604268616a" "8d8207a39e18e2cc95ebddf62f841442d36fcba01a2a9451773d4ed30b632443" "aec7b55f2a13307a55517fdf08438863d694550565dee23181d2ebd973ebd6b8" "56044c5a9cc45b6ec45c0eb28df100d3f0a576f18eef33ff8ff5d32bac2d9700" "e3daa8f18440301f3e54f2093fe15f4fe951986a8628e98dcd781efbec7a46f2" "f5f80dd6588e59cfc3ce2f11568ff8296717a938edd448a947f9823a4e282b66" "37b6695bae243145fa2dfb41440c204cd22833c25cd1993b0f258905b9e65577" "e4a702e262c3e3501dfe25091621fe12cd63c7845221687e36a79e17cf3a67e0" default)) + '(delete-selection-mode nil)) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(ts-fold-replacement-face ((t (:foreground unspecified :box nil :inherit font-lock-comment-face :weight light))))) diff --git a/.doom.d_/init.el b/.doom.d_/init.el new file mode 100644 index 0000000..66b15fa --- /dev/null +++ b/.doom.d_/init.el @@ -0,0 +1,195 @@ +;;; init.el -*- lexical-binding: t; -*- + +;; This file controls what Doom modules are enabled and what order they load +;; in. Remember to run 'doom sync' after modifying it! + +;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's +;; documentation. There you'll find a link to Doom's Module Index where all +;; of our modules are listed, including what flags they support. + +;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or +;; 'C-c c k' for non-vim users) to view its documentation. This works on +;; flags as well (those symbols that start with a plus). +;; +;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its +;; directory (for easy access to its source code). + +(doom! :input + ;;bidi ; (tfel ot) thgir etirw uoy gnipleh + ;;chinese + ;;japanese + ;;layout ; auie,ctsrnm is the superior home row + + :completion + company ; the ultimate code completion backend + ;;(corfu +orderless) ; complete with cap(f), cape and a flying feather! + ;;helm ; the *other* search engine for love and life + ;;ido ; the other *other* search engine... + ;;ivy ; a search engine for love and life + vertico ; the search engine of the future + + :ui + ;;deft ; notational velocity for Emacs + doom ; what makes DOOM look the way it does + doom-dashboard ; a nifty splash screen for Emacs + ;;doom-quit ; DOOM quit-message prompts when you quit Emacs + ;;(emoji +unicode) ; 🙂 + hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW + ;;hydra + indent-guides ; highlighted indent columns + ;;ligatures ; ligatures and symbols to make your code pretty again + ;;minimap ; show a map of the code on the side + modeline ; snazzy, Atom-inspired modeline, plus API + ;;nav-flash ; blink cursor line after big motions + ;;neotree ; a project drawer, like NERDTree for vim + ophints ; highlight the region an operation acts on + (popup +defaults) ; tame sudden yet inevitable temporary windows + ;;tabs ; a tab bar for Emacs + ;;treemacs ; a project drawer, like neotree but cooler + ;;unicode ; extended unicode support for various languages + (vc-gutter +pretty) ; vcs diff in the fringe + vi-tilde-fringe ; fringe tildes to mark beyond EOB + ;;window-select ; visually switch windows + workspaces ; tab emulation, persistence & separate workspaces + zen ; distraction-free coding or writing + + :editor + (evil +everywhere); come to the dark side, we have cookies + file-templates ; auto-snippets for empty files + fold ; (nigh) universal code folding + ;;(format +onsave) ; automated prettiness + ;;god ; run Emacs commands without modifier keys + ;;lispy ; vim for lisp, for people who don't like vim + ;;multiple-cursors ; editing in many places at once + ;;objed ; text object editing for the innocent + ;;parinfer ; turn lisp into python, sort of + ;;rotate-text ; cycle region at point between text candidates + snippets ; my elves. They type so I don't have to + ;;word-wrap ; soft wrapping with language-aware indent + + :emacs + dired ; making dired pretty [functional] + electric ; smarter, keyword-based electric-indent + ;;ibuffer ; interactive buffer management + undo ; persistent, smarter undo for your inevitable mistakes + vc ; version-control and Emacs, sitting in a tree + + :term + eshell ; the elisp shell that works everywhere + shell ; simple shell REPL for Emacs + ;;term ; basic terminal emulator for Emacs + vterm ; the best terminal emulation in Emacs + + :checkers + syntax ; tasing you for every semicolon you forget + ;;(spell +flyspell) ; tasing you for misspelling mispelling + ;;grammar ; tasing grammar mistake every you make + + :tools + ;;ansible + ;;biblio ; Writes a PhD for you (citation needed) + ;;collab ; buffers with friends + ;;debugger ; FIXME stepping through code, to help you add bugs + ;;direnv + ;;docker + ;;editorconfig ; let someone else argue about tabs vs spaces + ;;ein ; tame Jupyter notebooks with emacs + (eval +overlay) ; run code, run (also, repls) + lookup ; navigate your code and its documentation + lsp ; M-x vscode + magit ; a git porcelain for Emacs + ;;make ; run make tasks from Emacs + ;;pass ; password manager for nerds + ;;pdf ; pdf enhancements + ;;prodigy ; FIXME managing external services & code builders + ;;rgb ; creating color strings + ;;taskrunner ; taskrunner for all your projects + ;;terraform ; infrastructure as code + ;;tmux ; an API for interacting with tmux + tree-sitter ; syntax and parsing, sitting in a tree... + ;;upload ; map local to remote projects via ssh/ftp + + :os + (:if (featurep :system 'macos) macos) ; improve compatibility with macOS + tty ; improve the terminal Emacs experience + + :lang + ;;agda ; types of types of types of types... + ;;beancount ; mind the GAAP + (cc +lsp) ; C > C++ == 1 + ;;clojure ; java with a lisp + ;;common-lisp ; if you've seen one lisp, you've seen them all + ;;coq ; proofs-as-programs + ;;crystal ; ruby at the speed of c + ;;csharp ; unity, .NET, and mono shenanigans + ;;data ; config/data formats + ;;(dart +flutter) ; paint ui and not much else + ;;dhall + ;;elixir ; erlang done right + ;;elm ; care for a cup of TEA? + emacs-lisp ; drown in parentheses + ;;erlang ; an elegant language for a more civilized age + ;;ess ; emacs speaks statistics + ;;factor + ;;faust ; dsp, but you get to keep your soul + ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER) + ;;fsharp ; ML stands for Microsoft's Language + ;;fstar ; (dependent) types and (monadic) effects and Z3 + ;;gdscript ; the language you waited for + ;;(go +lsp) ; the hipster dialect + ;;(graphql +lsp) ; Give queries a REST + ;;(haskell +lsp) ; a language that's lazier than I am + ;;hy ; readability of scheme w/ speed of python + ;;idris ; a language you can depend on + ;;json ; At least it ain't XML + ;;(java +lsp) ; the poster child for carpal tunnel syndrome + ;;javascript ; all(hope(abandon(ye(who(enter(here)))))) + ;;julia ; a better, faster MATLAB + ;;kotlin ; a better, slicker Java(Script) + ;;latex ; writing papers in Emacs has never been so fun + ;;lean ; for folks with too much to prove + ;;ledger ; be audit you can be + ;;lua ; one-based indices? one-based indices + markdown ; writing docs for people to ignore + ;;nim ; python + lisp at the speed of c + ;;nix ; I hereby declare "nix geht mehr!" + ;;ocaml ; an objective camel + org ; organize your plain life in plain text + ;;php ; perl's insecure younger brother + ;;plantuml ; diagrams for confusing people more + ;;purescript ; javascript, but functional + ;;python ; beautiful is better than ugly + ;;qt ; the 'cutest' gui framework ever + ;;racket ; a DSL for DSLs + ;;raku ; the artist formerly known as perl6 + ;;rest ; Emacs as a REST client + ;;rst ; ReST in peace + ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"} + ;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap() + ;;scala ; java, but good + ;;(scheme +guile) ; a fully conniving family of lisps + sh ; she sells {ba,z,fi}sh shells on the C xor + ;;sml + ;;solidity ; do you need a blockchain? No. + ;;swift ; who asked for emoji variables? + ;;terra ; Earth and Moon in alignment for performance. + web ; the tubes + ;;yaml ; JSON, but readable + ;;zig ; C, but simpler + + :email + ;;(mu4e +org +gmail) + ;;notmuch + ;;(wanderlust +gmail) + + :app + ;;calendar + emms + ;;everywhere ; *leave* Emacs!? You must be joking + ;;irc ; how neckbeards socialize + (rss) ; emacs as an RSS reader + ;;twitter ; twitter client https://twitter.com/vnought + + :config + ;;literate + (default +bindings +smartparens)) diff --git a/.doom.d_/packages.el b/.doom.d_/packages.el new file mode 100644 index 0000000..1a2f46c --- /dev/null +++ b/.doom.d_/packages.el @@ -0,0 +1,55 @@ +;; -*- no-byte-compile: t; -*- +;;; $DOOMDIR/packages.el + +;; To install a package with Doom you must declare them here and run 'doom sync' +;; on the command line, then restart Emacs for the changes to take effect -- or +;; use 'M-x doom/reload'. + + +;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror: +;; (package! some-package) + +;; To install a package directly from a remote git repo, you must specify a +;; `:recipe'. You'll find documentation on what `:recipe' accepts here: +;; https://github.com/radian-software/straight.el#the-recipe-format +;; (package! another-package +;; :recipe (:host github :repo "username/repo")) + +;; If the package you are trying to install does not contain a PACKAGENAME.el +;; file, or is located in a subdirectory of the repo, you'll need to specify +;; `:files' in the `:recipe': +;; (package! this-package +;; :recipe (:host github :repo "username/repo" +;; :files ("some-file.el" "src/lisp/*.el"))) + +;; If you'd like to disable a package included with Doom, you can do so here +;; with the `:disable' property: +;; (package! builtin-package :disable t) + +;; You can override the recipe of a built in package without having to specify +;; all the properties for `:recipe'. These will inherit the rest of its recipe +;; from Doom or MELPA/ELPA/Emacsmirror: +;; (package! builtin-package :recipe (:nonrecursive t)) +;; (package! builtin-package-2 :recipe (:repo "myfork/package")) + +;; Specify a `:branch' to install a package from a particular branch or tag. +;; This is required for some packages whose default branch isn't 'master' (which +;; our package manager can't deal with; see radian-software/straight.el#279) +;; (package! builtin-package :recipe (:branch "develop")) + +;; Use `:pin' to specify a particular commit to install. +;; (package! builtin-package :pin "1a2b3c4d5e") + + +;; Doom's packages are pinned to a specific commit and updated from release to +;; release. The `unpin!' macro allows you to unpin single packages... +;; (unpin! pinned-package) +;; ...or multiple packages +;; (unpin! pinned-package another-pinned-package) +;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) +;; (unpin! t) +(package! elfeed-summary) +(package! vlf) +(package! eat) +(package! sam + :recipe (:local-repo "/home/mikec/doom-emacs/.local/straight/repos/sam.el/")) diff --git a/.scripts/add-project b/.scripts/add-project new file mode 100755 index 0000000..104d52e --- /dev/null +++ b/.scripts/add-project @@ -0,0 +1 @@ +echo "$(pwd) $1" >> ~/.scripts/projects diff --git a/.scripts/bar.sh b/.scripts/bar.sh new file mode 100755 index 0000000..66bf829 --- /dev/null +++ b/.scripts/bar.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +DATE=$(date +'%Y-%m-%d %I:%M:%S %p') +# BAT=$(cat /sys/class/power_supply/BAT1/capacity) +VOL=$(pactl get-sink-volume @DEFAULT_SINK@ | tr "," "\n" | grep \% | sed s/Volume\:// | sed 's/\%.*$//' | sed 's/^.*\///' | head -n1 | sed s/\ *//) +VOL="${VOL}%" +MUTED=$(pactl get-sink-mute @DEFAULT_SINK@ | cut -d\ -f2) +# BRIGHT=$(brightnessctl | tr "\n" " " | cut -d\ -f9 | tr -d "()%") +MEM=$(free -h | sed 's/[ ]\+/:/g' | cut -d\: -f4 | tr "\n" ":" | cut -d\: -f2) +USER=$(id -u -n) +HOST=$(cat /proc/sys/kernel/hostname) +# LAYOUT=$(swaymsg -t get_inputs | jq -r '.[] | select( .type == "keyboard") .xkb_active_layout_name' | tr "\n" ":" | cut -d\: -f1 | cut -d\ -f2| tr -d "()") +LAYOUT=$(setxkbmap -print -verbose 10 | grep layout | cut -d ":" -f 2 | tr -d " ") +# NETWORK_NAME=$(iwctl station wlan0 show | grep network | sed s/"Connected network"// | tr -d " ") +# IP=$(iwctl station wlan0 show | grep IPv4 | sed s/"IPv4 address"// | tr -d " ") + +if [ $MUTED == 'yes' ] +then + VOL='muted' +fi + +echo ${MEM} \| ${USER}\@${HOST} \| KB\: ${LAYOUT} \| ${NETWORK_NAME}\@${IP} \| V: ${VOL} \| ${BRIGHT}% Bl \| ${BAT}\% B \| ${DATE} diff --git a/.scripts/build.sh b/.scripts/build.sh new file mode 100755 index 0000000..8b602ed --- /dev/null +++ b/.scripts/build.sh @@ -0,0 +1 @@ +/usr/lib/jvm/java-11-openjdk/bin/javac -cp ./ $* diff --git a/.scripts/buildtest.sh b/.scripts/buildtest.sh new file mode 100755 index 0000000..2b6feda --- /dev/null +++ b/.scripts/buildtest.sh @@ -0,0 +1 @@ +/usr/lib/jvm/java-11-openjdk/bin/javac -cp .:/usr/share/java/junit.jar:/usr/share/java/hamcrest/core.jar $* diff --git a/.scripts/cloc b/.scripts/cloc new file mode 100755 index 0000000..619a59d --- /dev/null +++ b/.scripts/cloc @@ -0,0 +1,18206 @@ +#!/usr/bin/env perl +# cloc -- Count Lines of Code {{{1 +# Copyright (C) 2006-2024 Al Danial +# First release August 2006 +# +# Includes code from: +# - SLOCCount v2.26 +# http://www.dwheeler.com/sloccount/ +# by David Wheeler. +# - Regexp::Common v2017060201 +# https://metacpan.org/pod/Regexp::Common +# by Damian Conway and Abigail. +# - Win32::Autoglob 1.01 +# https://metacpan.org/pod/Win32::Autoglob +# by Sean M. Burke. +# - Algorithm::Diff 1.1902 +# https://metacpan.org/pod/Algorithm::Diff +# by Tye McQueen. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details: +# . +# +# 1}}} +my $VERSION = "2.01"; # odd number == beta; even number == stable +my $URL = "github.com/AlDanial/cloc"; # 'https://' pushes header too wide +require 5.10.0; +# use modules {{{1 +use warnings; +use strict; + +use Getopt::Long; +use File::Basename; +use File::Temp qw { tempfile tempdir }; +use File::Find; +use File::Path; +use File::Spec; +use IO::File; +use List::Util qw( min max ); +use Cwd; +use POSIX qw { strftime ceil}; +# Parallel::ForkManager isn't in the standard distribution. +# Use it only if installed, and only if --processes=N is given. +# The module load happens in get_max_processes(). +my $HAVE_Parallel_ForkManager = 0; + +# Digest::MD5 isn't in the standard distribution. Use it only if installed. +my $HAVE_Digest_MD5 = 0; +eval "use Digest::MD5;"; +if (defined $Digest::MD5::VERSION) { + $HAVE_Digest_MD5 = 1; +} else { + warn "Digest::MD5 not installed; will skip file uniqueness checks.\n"; +} + +# Time::HiRes became standard with Perl 5.8 +my $HAVE_Time_HiRes = 0; +eval "use Time::HiRes;"; +$HAVE_Time_HiRes = 1 if defined $Time::HiRes::VERSION; + +my $HAVE_Rexexp_Common; +# Regexp::Common isn't in the standard distribution. It will +# be installed in a temp directory if necessary. +eval "use Regexp::Common qw ( comment ) "; +if (defined $Regexp::Common::VERSION) { + $HAVE_Rexexp_Common = 1; +} else { + $HAVE_Rexexp_Common = 0; +} + +my $HAVE_Algorithm_Diff = 0; +# Algorithm::Diff isn't in the standard distribution. It will +# be installed in a temp directory if necessary. +eval "use Algorithm::Diff qw ( sdiff ) "; +if (defined $Algorithm::Diff::VERSION) { + $HAVE_Algorithm_Diff = 1; +} else { + Install_Algorithm_Diff(); +} + +# print "2 HAVE_Algorithm_Diff = $HAVE_Algorithm_Diff\n"; +# test_alg_diff($ARGV[$#ARGV - 1], $ARGV[$#ARGV]); die; +# die "Hre=$HAVE_Rexexp_Common Had=$HAVE_Algorithm_Diff"; + +# Uncomment next two lines when building Windows executable with perl2exe +# or if running on a system that already has Regexp::Common. +#use Regexp::Common; +#$HAVE_Rexexp_Common = 1; + +#perl2exe_include "Regexp/Common/whitespace.pm" +#perl2exe_include "Regexp/Common/URI.pm" +#perl2exe_include "Regexp/Common/URI/fax.pm" +#perl2exe_include "Regexp/Common/URI/file.pm" +#perl2exe_include "Regexp/Common/URI/ftp.pm" +#perl2exe_include "Regexp/Common/URI/gopher.pm" +#perl2exe_include "Regexp/Common/URI/http.pm" +#perl2exe_include "Regexp/Common/URI/pop.pm" +#perl2exe_include "Regexp/Common/URI/prospero.pm" +#perl2exe_include "Regexp/Common/URI/news.pm" +#perl2exe_include "Regexp/Common/URI/tel.pm" +#perl2exe_include "Regexp/Common/URI/telnet.pm" +#perl2exe_include "Regexp/Common/URI/tv.pm" +#perl2exe_include "Regexp/Common/URI/wais.pm" +#perl2exe_include "Regexp/Common/CC.pm" +#perl2exe_include "Regexp/Common/SEN.pm" +#perl2exe_include "Regexp/Common/number.pm" +#perl2exe_include "Regexp/Common/delimited.pm" +#perl2exe_include "Regexp/Common/profanity.pm" +#perl2exe_include "Regexp/Common/net.pm" +#perl2exe_include "Regexp/Common/zip.pm" +#perl2exe_include "Regexp/Common/comment.pm" +#perl2exe_include "Regexp/Common/balanced.pm" +#perl2exe_include "Regexp/Common/lingua.pm" +#perl2exe_include "Regexp/Common/list.pm" +#perl2exe_include "File/Glob.pm" + +use Text::Tabs qw { expand }; +use Cwd qw { cwd }; +use File::Glob; +# 1}}} +# Usage information, options processing. {{{1 +my $ON_WINDOWS = 0; + $ON_WINDOWS = 1 if ($^O =~ /^MSWin/) or ($^O eq "Windows_NT"); +if ($ON_WINDOWS and $ENV{'SHELL'}) { + if ($ENV{'SHELL'} =~ m{^/}) { + $ON_WINDOWS = 0; # make Cygwin look like Unix + } else { + $ON_WINDOWS = 1; # MKS defines $SHELL but still acts like Windows + } +} + +my $HAVE_Win32_Long_Path = 0; +# Win32::LongPath is an optional dependency that when available on +# Windows will be used to support reading files past the 255 char +# path length limit. +if ($ON_WINDOWS) { + eval "use Win32::LongPath;"; + if (defined $Win32::LongPath::VERSION) { + $HAVE_Win32_Long_Path = 1; + } +} +my $config_file = ''; +if ( $ENV{'HOME'} ) { + $config_file = File::Spec->catfile( $ENV{'HOME'}, '.config', 'cloc', 'options.txt'); +} elsif ( $ENV{'APPDATA'} and $ON_WINDOWS ) { + $config_file = File::Spec->catfile( $ENV{'APPDATA'}, 'cloc'); +} +# $config_file may be updated by check_alternate_config_files() + +my $NN = chr(27) . "[0m"; # normal + $NN = "" if $ON_WINDOWS or !(-t STDOUT); # -t STDOUT: is it a terminal? +my $BB = chr(27) . "[1m"; # bold + $BB = "" if $ON_WINDOWS or !(-t STDOUT); +my $script = basename $0; + +# Intended for v1.88: +# --git-diff-simindex Git diff strategy #3: use git's similarity index +# (git diff -M --name-status) to identify file pairs +# to compare. This is especially useful to compare +# files that were renamed between the commits. + +my $brief_usage = " + cloc -- Count Lines of Code + +Usage: + $script [options] + Count physical lines of source code and comments in the given files + (may be archives such as compressed tarballs or zip files) and/or + recursively below the given directories or git commit hashes. + Example: cloc src/ include/ main.c + + $script [options] --diff + Compute differences of physical lines of source code and comments + between any pairwise combination of directory names, archive + files or git commit hashes. + Example: cloc --diff Python-3.5.tar.xz python-3.6/ + +$script --help shows full documentation on the options. +https://$URL has numerous examples and more information. +"; +my $usage = " +Usage: $script [options] | | + + Count, or compute differences of, physical lines of source code in the + given files (may be archives such as compressed tarballs or zip files, + or git commit hashes or branch names) and/or recursively below the + given directories. + + ${BB}Input Options${NN} + --extract-with= This option is only needed if cloc is unable + to figure out how to extract the contents of + the input file(s) by itself. + Use to extract binary archive files (e.g.: + .tar.gz, .zip, .Z). Use the literal '>FILE<' as + a stand-in for the actual file(s) to be + extracted. For example, to count lines of code + in the input files + gcc-4.2.tar.gz perl-5.8.8.tar.gz + on Unix use + --extract-with='gzip -dc >FILE< | tar xf -' + or, if you have GNU tar, + --extract-with='tar zxf >FILE<' + and on Windows use, for example: + --extract-with=\"\\\"c:\\Program Files\\WinZip\\WinZip32.exe\\\" -e -o >FILE< .\" + (if WinZip is installed there). + --list-file= Take the list of file and/or directory names to + process from , which has one file/directory + name per line. Only exact matches are counted; + relative path names will be resolved starting from + the directory where cloc is invoked. Set + to - to read file names from a STDIN pipe. + See also --exclude-list-file, --config. + --diff-list-file= Take the pairs of file names to be diff'ed from + , whose format matches the output of + --diff-alignment. (Run with that option to + see a sample.) The language identifier at the + end of each line is ignored. This enables --diff + mode and bypasses file pair alignment logic. + Use --diff-list-files to define the file name + pairs in separate files. See also --config. + --diff-list-files + Compute differences in code and comments between + the files and directories listed in and + . Each input file should use the same + format as --list-file, where there is one file or + directory name per line. Only exact matches are + counted; relative path names will be resolved + starting from the directory where cloc is invoked. + This enables --diff mode. See also --list-file, + --diff-list-file, --diff. + --vcs= Invoke a system call to to obtain a list of + files to work on. If is 'git', then will + invoke 'git ls-files' to get a file list and + 'git submodule status' to get a list of submodules + whose contents will be ignored. See also --git + which accepts git commit hashes and branch names. + If is 'svn' then will invoke 'svn list -R'. + The primary benefit is that cloc will then skip + files explicitly excluded by the versioning tool + in question, ie, those in .gitignore or have the + svn:ignore property. + Alternatively may be any system command + that generates a list of files. + Note: cloc must be in a directory which can read + the files as they are returned by . cloc will + not download files from remote repositories. + 'svn list -R' may refer to a remote repository + to obtain file names (and therefore may require + authentication to the remote repository), but + the files themselves must be local. + Setting to 'auto' selects between 'git' + and 'svn' (or neither) depending on the presence + of a .git or .svn subdirectory below the directory + where cloc is invoked. + --unicode Check binary files to see if they contain Unicode + expanded ASCII text. This causes performance to + drop noticeably. + + ${BB}Processing Options${NN} + --autoconf Count .in files (as processed by GNU autoconf) of + recognized languages. See also --no-autogen. + --by-file Report results for every source file encountered. + See also --fmt under 'Output Options'. + --by-file-by-lang Report results for every source file encountered + in addition to reporting by language. + --config Read command line switches from instead of + the default location of $config_file. + The file should contain one switch, along with + arguments (if any), per line. Blank lines and lines + beginning with '#' are skipped. Options given on + the command line take priority over entries read from + the file. + If a directory is also given with any of these + switches: --list-file, --exclude-list-file, + --read-lang-def, --force-lang-def, --diff-list-file + and a config file exists in that directory, it will + take priority over $config_file. + --count-and-diff + First perform direct code counts of source file(s) + of and separately, then perform a diff + of these. Inputs may be pairs of files, directories, + or archives. If --out or --report-file is given, + three output files will be created, one for each + of the two counts and one for the diff. See also + --diff, --diff-alignment, --diff-timeout, + --ignore-case, --ignore-whitespace. + --diff Compute differences in code and comments between + source file(s) of and . The inputs + may be any mix of files, directories, archives, + or git commit hashes. Use --diff-alignment to + generate a list showing which file pairs where + compared. When comparing git branches, only files + which have changed in either commit are compared. + See also --git, --count-and-diff, --diff-alignment, + --diff-list-file, --diff-timeout, --ignore-case, + --ignore-whitespace. + --diff-timeout Ignore files which take more than seconds + to process. Default is 10 seconds. Setting + to 0 allows unlimited time. (Large files with many + repeated lines can cause Algorithm::Diff::sdiff() + to take hours.) See also --timeout. + --docstring-as-code cloc considers docstrings to be comments, but this is + not always correct as docstrings represent regular + strings when they appear on the right hand side of an + assignment or as function arguments. This switch + forces docstrings to be counted as code. + --follow-links [Unix only] Follow symbolic links to directories + (sym links to files are always followed). + See also --stat. + --force-lang=[,] + Process all files that have a extension + with the counter for language . For + example, to count all .f files with the + Fortran 90 counter (which expects files to + end with .f90) instead of the default Fortran 77 + counter, use + --force-lang=\"Fortran 90,f\" + If is omitted, every file will be counted + with the counter. This option can be + specified multiple times (but that is only + useful when is given each time). + See also --script-lang, --lang-no-ext. + --force-lang-def= Load language processing filters from , + then use these filters instead of the built-in + filters. Note: languages which map to the same + file extension (for example: + MATLAB/Mathematica/Objective-C/MUMPS/Mercury; + Pascal/PHP; Lisp/OpenCL; Lisp/Julia; Perl/Prolog) + will be ignored as these require additional + processing that is not expressed in language + definition files. Use --read-lang-def to define + new language filters without replacing built-in + filters (see also --write-lang-def, + --write-lang-def-incl-dup, --config). + --git Forces the inputs to be interpreted as git targets + (commit hashes, branch names, et cetera) if these + are not first identified as file or directory + names. This option overrides the --vcs=git logic + if this is given; in other words, --git gets its + list of files to work on directly from git using + the hash or branch name rather than from + 'git ls-files'. This option can be used with + --diff to perform line count diffs between git + commits, or between a git commit and a file, + directory, or archive. Use -v/--verbose to see + the git system commands cloc issues. + --git-diff-rel Same as --git --diff, or just --diff if the inputs + are recognized as git targets. Only files which + have changed in either commit are compared. + --git-diff-all Git diff strategy #2: compare all files in the + repository between the two commits. + --ignore-whitespace Ignore horizontal white space when comparing files + with --diff. See also --ignore-case. + --ignore-case Ignore changes in case within file contents; + consider upper- and lowercase letters equivalent + when comparing files with --diff. See also + --ignore-whitespace. + --ignore-case-ext Ignore case of file name extensions. This will + cause problems counting some languages + (specifically, .c and .C are associated with C and + C++; this switch would count .C files as C rather + than C++ on *nix operating systems). File name + case insensitivity is always true on Windows. + --lang-no-ext= Count files without extensions using the + counter. This option overrides internal logic + for files without extensions (where such files + are checked against known scripting languages + by examining the first line for #!). See also + --force-lang, --script-lang. + --max-file-size= Skip files larger than megabytes when + traversing directories. By default, =100. + cloc's memory requirement is roughly twenty times + larger than the largest file so running with + files larger than 100 MB on a computer with less + than 2 GB of memory will cause problems. + Note: this check does not apply to files + explicitly passed as command line arguments. + --no-autogen[=list] Ignore files generated by code-production systems + such as GNU autoconf. To see a list of these files + (then exit), run with --no-autogen list + See also --autoconf. + --no-recurse Count files in the given directories without + recursively descending below them. + --original-dir [Only effective in combination with + --strip-comments or --strip-code] Write the stripped + files to the same directory as the original files. + --only-count-files Only count files by language. Blank, comment, and + code counts will be zero. + --read-binary-files Process binary files in addition to text files. + This is usually a bad idea and should only be + attempted with text files that have embedded + binary data. + --read-lang-def= Load new language processing filters from + and merge them with those already known to cloc. + If defines a language cloc already knows + about, cloc's definition will take precedence. + Use --force-lang-def to over-ride cloc's + definitions (see also --write-lang-def, + --write-lang-def-incl-dup, --config). + --script-lang=, Process all files that invoke as a #! + scripting language with the counter for language + . For example, files that begin with + #!/usr/local/bin/perl5.8.8 + will be counted with the Perl counter by using + --script-lang=Perl,perl5.8.8 + The language name is case insensitive but the + name of the script language executable, , + must have the right case. This option can be + specified multiple times. See also --force-lang, + --lang-no-ext. + --sdir= Use as the scratch directory instead of + letting File::Temp chose the location. Files + written to this location are not removed at + the end of the run (as they are with File::Temp). + --skip-leading= Skip the first lines of each file. If a + comma separated list of extensions is also given, + only skip lines from those file types. Example: + --skip-leading=10,cpp,h + will skip the first ten lines of *.cpp and *.h + files. This is useful for ignoring boilerplate + text. + --skip-uniqueness Skip the file uniqueness check. This will give + a performance boost at the expense of counting + files with identical contents multiple times + (if such duplicates exist). + --stat Some file systems (AFS, CD-ROM, FAT, HPFS, SMB) + do not have directory 'nlink' counts that match + the number of its subdirectories. Consequently + cloc may undercount or completely skip the + contents of such file systems. This switch forces + File::Find to stat directories to obtain the + correct count. File search speed will decrease. + See also --follow-links. + --stdin-name= Give a file name to use to determine the language + for standard input. (Use - as the input name to + receive source code via STDIN.) + --strip-code= For each file processed, write to the current + directory a version of the file which has blank + and code lines, including code with (in-line + comments) removed. The name of each stripped file + is the original file name with . appended to + it. It is written to the current directory unless + --original-dir is on. + --strip-comments= For each file processed, write to the current + directory a version of the file which has blank + and commented lines removed (in-line comments + persist). The name of each stripped file is the + original file name with . appended to it. + It is written to the current directory unless + --original-dir is on. + --strip-str-comments Replace comment markers embedded in strings with + 'xx'. This attempts to work around a limitation + in Regexp::Common::Comment where comment markers + embedded in strings are seen as actual comment + markers and not strings, often resulting in a + 'Complex regular subexpression recursion limit' + warning and incorrect counts. There are two + disadvantages to using this switch: 1/code count + performance drops, and 2/code generated with + --strip-comments will contain different strings + where ever embedded comments are found. + --sum-reports Input arguments are report files previously + created with the --report-file option in plain + format (eg. not JSON, YAML, XML, or SQL). + Makes a cumulative set of results containing the + sum of data from the individual report files. + --timeout Ignore files which take more than seconds + to process at any of the language's filter stages. + The default maximum number of seconds spent on a + filter stage is the number of lines in the file + divided by one thousand. Setting to 0 allows + unlimited time. See also --diff-timeout. + --processes=NUM [Available only on systems with a recent version + of the Parallel::ForkManager module. Not + available on Windows.] Sets the maximum number of + cores that cloc uses. The default value of 0 + disables multiprocessing. + --unix Override the operating system autodetection + logic and run in UNIX mode. See also + --windows, --show-os. + --use-sloccount If SLOCCount is installed, use its compiled + executables c_count, java_count, pascal_count, + php_count, and xml_count instead of cloc's + counters. SLOCCount's compiled counters are + substantially faster than cloc's and may give + a performance improvement when counting projects + with large files. However, these cloc-specific + features will not be available: --diff, + --count-and-diff, --strip-code, --strip-comments, + --unicode. + --windows Override the operating system autodetection + logic and run in Microsoft Windows mode. + See also --unix, --show-os. + + ${BB}Filter Options${NN} + --include-content= Only count files containing text that matches the + given regular expression. + --exclude-content= Exclude files containing text that matches the given + regular expression. + --exclude-dir=[,D2,] Exclude the given comma separated directories + D1, D2, D3, et cetera, from being scanned. For + example --exclude-dir=.cache,test will skip + all files and subdirectories that have /.cache/ + or /test/ as their parent directory. + Directories named .bzr, .cvs, .hg, .git, .svn, + and .snapshot are always excluded. + This option only works with individual directory + names so including file path separators is not + allowed. Use --fullpath and --not-match-d= + to supply a regex matching multiple subdirectories. + --exclude-ext=[,[...]] + Do not count files having the given file name + extensions. + --exclude-lang=[,L2[...]] + Exclude the given comma separated languages + L1, L2, L3, et cetera, from being counted. + --exclude-list-file= Ignore files and/or directories whose names + appear in . should have one file + name per line. Only exact matches are ignored; + relative path names will be resolved starting from + the directory where cloc is invoked. + See also --list-file, --config. + --fullpath Modifies the behavior of --match-f, --not-match-f, + and --not-match-d to include the file's path-- + relative to the directory from which cloc is + invoked--in the regex, not just the file's basename. + (This does not expand each filename to include its + fully qualified absolute path; instead, it uses as + much of the path as is passed in to cloc.) + --include-ext=[,ext2[...]] + Count only languages having the given comma + separated file extensions. Use --show-ext to + see the recognized extensions. + --include-lang=[,L2[...]] + Count only the given comma separated, case- + insensitive languages L1, L2, L3, et cetera. Use + --show-lang to see the list of recognized languages. + --match-d= Only count files in directories matching the Perl + regex. For example + --match-d='/(src|include)/' + only counts files in directories containing + /src/ or /include/. Unlike --not-match-d, + --match-f, and --not-match-f, --match-d always + anchors the regex to the directory from which + cloc is invoked. + --not-match-d= Count all files except those in directories + matching the Perl regex. Only the trailing + directory name is compared, for example, when + counting in /usr/local/lib, only 'lib' is + compared to the regex. + Add --fullpath to compare parent directories, beginning + from the directory where cloc is invoked, to the regex. + Do not include file path separators at the beginning + or end of the regex. This option may be repeated. + --match-f= Only count files whose basenames match the Perl + regex. For example + --match-f='^[Ww]idget' + only counts files that start with Widget or widget. + Add --fullpath to include parent directories + in the regex instead of just the basename. + --not-match-f= Count all files except those whose basenames + match the Perl regex. Add --fullpath to include + parent directories in the regex instead of just + the basename. This option may be repeated. + --skip-archive= Ignore files that end with the given Perl regular + expression. For example, if given + --skip-archive='(zip|tar(\.(gz|Z|bz2|xz|7z))?)' + the code will skip files that end with .zip, + .tar, .tar.gz, .tar.Z, .tar.bz2, .tar.xz, and + .tar.7z. + --skip-win-hidden On Windows, ignore hidden files. + + ${BB}Debug Options${NN} + --categorized= Save file sizes in bytes, identified languages + and names of categorized files to . + --counted= Save names of processed source files to . + --diff-alignment= Write to a list of files and file pairs + showing which files were added, removed, and/or + compared during a run with --diff. This switch + forces the --diff mode on. + --explain= Print the filters used to remove comments for + language and exit. In some cases the + filters refer to Perl subroutines rather than + regular expressions. An examination of the + source code may be needed for further explanation. + --help Print this usage information and exit. + --found= Save names of every file found to . + --ignored= Save names of ignored files and the reason they + were ignored to . + --print-filter-stages Print processed source code before and after + each filter is applied. + --show-ext[=] Print information about all known (or just the + given) file extensions and exit. + --show-lang[=] Print information about all known (or just the + given) languages and exit. + --show-os Print the value of the operating system mode + and exit. See also --unix, --windows. + -v[=] Verbose switch (optional numeric value). + -verbose[=] Long form of -v. + --version Print the version of this program and exit. + --write-lang-def= Writes to the language processing filters + then exits. Useful as a first step to creating + custom language definitions. Note: languages which + map to the same file extension will be excluded. + (See also --force-lang-def, --read-lang-def). + --write-lang-def-incl-dup= + Same as --write-lang-def, but includes duplicated + extensions. This generates a problematic language + definition file because cloc will refuse to use + it until duplicates are removed. + + ${BB}Output Options${NN} + --3 Print third-generation language output. + (This option can cause report summation to fail + if some reports were produced with this option + while others were produced without it.) + --by-percent X Instead of comment and blank line counts, show + these values as percentages based on the value + of X in the denominator, where X is + c meaning lines of code + cm meaning lines of code + comments + cb meaning lines of code + blanks + cmb meaning lines of code + comments + blanks + For example, if using method 'c' and your code + has twice as many lines of comments as lines + of code, the value in the comment column will + be 200%. The code column remains a line count. + --csv Write the results as comma separated values. + --csv-delimiter= Use the character as the delimiter for comma + separated files instead of ,. This switch forces + --file-encoding= Write output files using the encoding instead of + the default ASCII ( = 'UTF-7'). Examples: 'UTF-16', + 'euc-kr', 'iso-8859-16'. Known encodings can be + printed with + perl -MEncode -e 'print join(\"\\n\", Encode->encodings(\":all\")), \"\\n\"' + --fmt= Alternate text output format where is a number + from 1 to 5, or -1 to -5. 'total lines' means the + sum of code, comment, and blank lines. Negative + values are the same as the positive values but retain, + instead of deleting, the intermediate JSON file that + is written. The JSON file name is randomly generated + unless --out/--report-file is given. The formats are: + 1: by language (same as cloc default output) + 2: by language with an extra column for total lines + 3: by file with language + 4: by file with a total lines column + 5: by file with language and a total lines column + --hide-rate Do not show elapsed time, line processing rate, or + file processing rates in the output header. This + makes output deterministic. + --json Write the results as JavaScript Object Notation + (JSON) formatted output. + --md Write the results as Markdown-formatted text. + --out= Synonym for --report-file=. + --progress-rate= Show progress update after every files are + processed (default =100). Set to 0 to + suppress progress output (useful when redirecting + output to STDOUT). + --quiet Suppress all information messages except for + the final report. + --report-file= Write the results to instead of STDOUT. + --summary-cutoff=X:N Aggregate to 'Other' results having X lines + below N where X is one of + c meaning lines of code + f meaning files + m meaning lines of comments + cm meaning lines of code + comments + Appending a percent sign to N changes + the calculation from straight count to + percentage. + Ignored with --diff or --by-file. + --sql= Write results as SQL create and insert statements + which can be read by a database program such as + SQLite. If is -, output is sent to STDOUT. + --sql-append Append SQL insert statements to the file specified + by --sql and do not generate table creation + statements. Only valid with the --sql option. + --sql-project= Use as the project identifier for the + current run. Only valid with the --sql option. + --sql-style= + + +

+';
+    print "<- html_header\n" if $opt_v > 2;
+} # 1}}}
+sub html_end {                               # {{{1
+return
+'
+ + +'; +} # 1}}} +sub die_unknown_lang { # {{{1 + my ($lang, $option_name) = @_; + die "Unknown language '$lang' used with $option_name option. " . + "The command\n $script --show-lang\n" . + "will print all recognized languages. Language names are " . + "case sensitive.\n" ; +} # 1}}} +sub unicode_file { # {{{1 + my $file = shift @_; + + print "-> unicode_file($file)\n" if $opt_v > 2; + return 0 if (get_size($file) > 2_000_000); + # don't bother trying to test binary files bigger than 2 MB + + my $IN = open_file('<', $file, 1); + if (!defined $IN) { + warn "Unable to read $file; ignoring.\n"; + return 0; + } + my @lines = <$IN>; + $IN->close; + + if (unicode_to_ascii( join('', @lines) )) { + print "<- unicode_file()\n" if $opt_v > 2; + return 1; + } else { + print "<- unicode_file()\n" if $opt_v > 2; + return 0; + } + +} # 1}}} +sub unicode_to_ascii { # {{{1 + my $string = shift @_; + + # A trivial attempt to convert UTF-16 little or big endian + # files into ASCII. These files exhibit the following byte + # sequence: + # byte 1: 255 + # byte 2: 254 + # byte 3: ord of ASCII character + # byte 4: 0 + # byte 3+i: ord of ASCII character + # byte 4+i: 0 + # or + # byte 1: 255 + # byte 2: 254 + # byte 3: 0 + # byte 4: ord of ASCII character + # byte 3+i: 0 + # byte 4+i: ord of ASCII character + # + print "-> unicode_to_ascii()\n" if $opt_v > 2; + + my $length = length $string; +#print "length=$length\n"; + return '' if $length <= 3; + my @unicode = split(//, $string); + + # check the first 100 characters (= 200 bytes) for big or + # little endian UTF-16 encoding + my $max_peek = $length < 200 ? $length : 200; + my $max_for_pass = $length < 200 ? 0.9*$max_peek/2 : 90; + my @view_1 = (); + for (my $i = 2; $i < $max_peek; $i += 2) { push @view_1, $unicode[$i] } + my @view_2 = (); + for (my $i = 3; $i < $max_peek; $i += 2) { push @view_2, $unicode[$i] } + + my $points_1 = 0; + foreach my $C (@view_1) { + ++$points_1 if (32 <= ord($C) and ord($C) <= 127) or ord($C) == 13 + or ord($C) == 10 + or ord($C) == 9; + } + + my $points_2 = 0; + foreach my $C (@view_2) { + ++$points_2 if (32 <= ord($C) and ord($C) <= 127) or ord($C) == 13 + or ord($C) == 10 + or ord($C) == 9; + } +#print "points 1: $points_1\n"; +#print "points 2: $points_2\n"; +#print "max_peek : $max_peek\n"; +#print "max_for_pass: $max_for_pass\n"; + + my $offset = undef; + if ($points_1 > $max_for_pass) { $offset = 2; } + elsif ($points_2 > $max_for_pass) { $offset = 3; } + else { + print "<- unicode_to_ascii() a p1=$points_1 p2=$points_2\n" if $opt_v > 2; + return ''; + } # neither big or little endian UTF-16 + + my @ascii = (); + for (my $i = $offset; $i < $length; $i += 2) { + # some compound characters are made of HT (9), LF (10), or CR (13) + # True HT, LF, CR are followed by 00; only add those. + my $L = $unicode[$i]; + if (ord($L) == 9 or ord($L) == 10 or ord($L) == 13) { + my $companion; + if ($points_1) { + last if $i+1 >= $length; + $companion = $unicode[$i+1]; + } else { + $companion = $unicode[$i-1]; + } + if (ord($companion) == 0) { + push @ascii, $L; + } else { + push @ascii, " "; # no clue what this letter is + } + } else { + push @ascii, $L; + } + } + print "<- unicode_to_ascii() b p1=$points_1 p2=$points_2\n" if $opt_v > 2; + return join("", @ascii); +} # 1}}} +sub uncompress_archive_cmd { # {{{1 + my ($archive_file, ) = @_; + + # Wrap $archive_file in single or double quotes in the system + # commands below to avoid filename chicanery (including + # spaces in the names). + + print "-> uncompress_archive_cmd($archive_file)\n" if $opt_v > 2; + my $extract_cmd = ""; + my $missing = ""; + if ($opt_extract_with) { + ( $extract_cmd = $opt_extract_with ) =~ s/>FILE -"; + } elsif ($archive_file =~ /\.tar$/ and $ON_WINDOWS) { + $extract_cmd = "tar -xf \"$archive_file\""; + } elsif (($archive_file =~ /\.tar\.(gz|Z)$/ or + $archive_file =~ /\.tgz$/ ) and !$ON_WINDOWS) { + if (external_utility_exists("gzip --version")) { + if (external_utility_exists("tar --version")) { + $extract_cmd = "gzip -dc '$archive_file' | tar xf -"; + } else { + $missing = "tar"; + } + } else { + $missing = "gzip"; + } + } elsif ($archive_file =~ /\.tar\.bz2$/ and !$ON_WINDOWS) { + if (external_utility_exists("bzip2 --help")) { + if (external_utility_exists("tar --version")) { + $extract_cmd = "bzip2 -dc '$archive_file' | tar xf -"; + } else { + $missing = "tar"; + } + } else { + $missing = "bzip2"; + } + } elsif ($archive_file =~ /\.tar\.xz$/ and !$ON_WINDOWS) { + if (external_utility_exists("unxz --version")) { + if (external_utility_exists("tar --version")) { + $extract_cmd = "unxz -dc '$archive_file' | tar xf -"; + } else { + $missing = "tar"; + } + } else { + $missing = "bzip2"; + } + } elsif ($archive_file =~ /\.tar$/ and !$ON_WINDOWS) { + $extract_cmd = "tar xf '$archive_file'"; + } elsif ($archive_file =~ /\.src\.rpm$/i and !$ON_WINDOWS) { + if (external_utility_exists("cpio --version")) { + if (external_utility_exists("rpm2cpio")) { + $extract_cmd = "rpm2cpio '$archive_file' | cpio -i"; + } else { + $missing = "rpm2cpio"; + } + } else { + $missing = "bzip2"; + } + } elsif ($archive_file =~ /\.(whl|zip)$/i and !$ON_WINDOWS) { + if (external_utility_exists("unzip")) { + $extract_cmd = "unzip -qq -d . '$archive_file'"; + } else { + $missing = "unzip"; + } + } elsif ($archive_file =~ /\.deb$/i and !$ON_WINDOWS) { + # only useful if the .deb contains source code--most + # .deb files just have compiled executables + if (external_utility_exists("dpkg-deb")) { + $extract_cmd = "dpkg-deb -x '$archive_file' ."; + } else { + $missing = "dpkg-deb"; + } + } elsif ($ON_WINDOWS and $archive_file =~ /\.(whl|zip)$/i) { + # use unzip on Windows (comes with git-for-Windows) + if (external_utility_exists("unzip")) { + $extract_cmd = "unzip -qq -d . \"$archive_file\" "; + } else { + $missing = "unzip"; + } + } + print "<- uncompress_archive_cmd\n" if $opt_v > 2; + if ($missing) { + die "Unable to expand $archive_file because external\n", + "utility '$missing' is not available.\n", + "Another possibility is to use the --extract-with option.\n"; + } else { + return $extract_cmd; + } +} +# 1}}} +sub read_list_file { # {{{1 + my ($file, ) = @_; + # reads filenames from a STDIN pipe if $file == "-" + + print "-> read_list_file($file)\n" if $opt_v > 2; + my @entry = (); + + if ($file eq "-") { + # read from a STDIN pipe + my $IN; + open($IN, $file); + if (!defined $IN) { + warn "Unable to read $file; ignoring.\n"; + return (); + } + while (<$IN>) { + next if /^\s*$/ or /^\s*#/; # skip empty or commented lines + s/\cM$//; # DOS to Unix + chomp; + push @entry, $_; + } + $IN->close; + } else { + # read from an actual file + foreach my $line (read_file($file)) { + next if $line =~ /^\s*$/ or $line =~ /^\s*#/; + $line =~ s/\cM$//; # DOS to Unix + chomp $line; + push @entry, $line; + } + } + + print "<- read_list_file\n" if $opt_v > 2; + return @entry; +} +# 1}}} +sub external_utility_exists { # {{{1 + my $exe = shift @_; + + my $success = 0; + if ($ON_WINDOWS) { + $success = 1 unless system $exe . ' > nul'; + } else { + $success = 1 unless system $exe . ' >/dev/null 2>&1'; + if (!$success) { + $success = 1 unless system "which" . " $exe" . ' >/dev/null 2>&1'; + } + } + + return $success; +} # 1}}} +sub write_xsl_file { # {{{1 + print "-> write_xsl_file\n" if $opt_v > 2; + my $XSL = # {{{2 +' + + + + + + + CLOC Results + + + +

+'; +# 2}}} + + if ($opt_by_file) { + $XSL .= #
{{{2 +' + + + + + + + +'; + $XSL .= +' + +' if $opt_3; + $XSL .= +' + + + + + + + + + +'; + $XSL .= +' + +' if $opt_3; + $XSL .= +' + + + + + + + +'; + $XSL .= +' + +' if $opt_3; + $XSL .= +' + +
FileBlankCommentCodeLanguage3rd Generation EquivalentScale
Total
+
+'; +# 2}}} + } + + if (!$opt_by_file or $opt_by_file_by_lang) { + $XSL .= #
{{{2 +' + + + + + + + +'; + $XSL .= +' + +' if $opt_3; + $XSL .= +' + + + + + + + + + +'; + $XSL .= +' + +' if $opt_3; + $XSL .= +' + + + + + + + +'; + $XSL .= +' + +' if $opt_3; + $XSL .= +' + +
LanguageFilesBlankCommentCodeScale3rd Generation Equivalent
Total
+'; +# 2}}} + } + + $XSL.= <<'EO_XSL'; # {{{2 + + +
+
+ +EO_XSL +# 2}}} + + my $XSL_DIFF = <<'EO_DIFF_XSL'; # {{{2 + + + + + + + + CLOC Results + + + +

+EO_DIFF_XSL +# 2}}} + + if ($opt_by_file) { + $XSL_DIFF.= <<'EO_DIFF_XSL'; # {{{2 + + + + + + + + + + + + + + + + + + + + + +
Same
FileBlankCommentCode
+ + + + + + + + + + + + + + + + + + + + + + +
Modified
FileBlankCommentCode
+ + + + + + + + + + + + + + + + + + + + + + +
Added
FileBlankCommentCode
+ + + + + + + + + + + + + + + + + + + + + + +
Removed
FileBlankCommentCode
+EO_DIFF_XSL +# 2}}} + } + + if (!$opt_by_file or $opt_by_file_by_lang) { + $XSL_DIFF.= <<'EO_DIFF_XSL'; # {{{2 + + + + + + + + + + + + + + + + + + + + + + + +
Same
LanguageFilesBlankCommentCode
+ + + + + + + + + + + + + + + + + + + + + + + + +
Modified
LanguageFilesBlankCommentCode
+ + + + + + + + + + + + + + + + + + + + + + + + +
Added
LanguageFilesBlankCommentCode
+ + + + + + + + + + + + + + + + + + + + + + + + +
Removed
LanguageFilesBlankCommentCode
+EO_DIFF_XSL +# 2}}} + + } + + $XSL_DIFF.= <<'EO_DIFF_XSL'; # {{{2 + + +
+
+EO_DIFF_XSL +# 2}}} + if ($opt_diff) { + write_file($CLOC_XSL, {}, ( $XSL_DIFF ) ); + } else { + write_file($CLOC_XSL, {}, ( $XSL ) ); + } + print "<- write_xsl_file\n" if $opt_v > 2; +} # 1}}} +sub normalize_file_names { # {{{1 + print "-> normalize_file_names\n" if $opt_v > 2; + my (@files, ) = @_; + + # Returns a hash of file names reduced to a canonical form + # (fully qualified file names, all path separators changed to /, + # Windows file names lowercased). Hash values are the original + # file name. + + my %normalized = (); + foreach my $F (@files) { + my $F_norm = $F; + if ($ON_WINDOWS) { + $F_norm = lc $F_norm; # for case insensitive file name comparisons + $F_norm =~ s{\\}{/}g; # Windows directory separators to Unix + $F_norm =~ s{^\./}{}g; # remove leading ./ + if (($F_norm !~ m{^/}) and ($F_norm !~ m{^\w:/})) { + # looks like a relative path; prefix with cwd + $F_norm = lc "$cwd/$F_norm"; + } + } else { + $F_norm =~ s{^\./}{}g; # remove leading ./ + if ($F_norm !~ m{^/}) { + # looks like a relative path; prefix with cwd + $F_norm = "$cwd/$F_norm"; + } + } + # Remove trailing / so it does not interfere with further regex code + # that does not expect it + $F_norm =~ s{/+$}{}; + $normalized{ $F_norm } = $F; + } + print "<- normalize_file_names\n" if $opt_v > 2; + return %normalized; +} # 1}}} +sub combine_diffs { # {{{1 + # subroutine by Andy (awalshe@sf.net) + # https://sourceforge.net/tracker/?func=detail&aid=3261017&group_id=174787&atid=870625 + my ($ra_files) = @_; + print "-> combine_diffs\n" if $opt_v > 2; + + my $res = "$URL v $VERSION\n"; + my $dl = '-'; + my $width = 79; + # columns are in this order + my @cols = ('files', 'blank', 'comment', 'code'); + my %HoH = (); + + foreach my $file (@{$ra_files}) { + my $IN = open_file('<', $file, 1); + if (!defined $IN) { + warn "Unable to read $file; ignoring.\n"; + next; + } + + my $sec; + while (<$IN>) { + chomp; + s/\cM$//; + next if /^(http|Language|-----)/; + if (/^[A-Za-z0-9]+/) { # section title + $sec = $_; + chomp($sec); + $HoH{$sec} = () if ! exists $HoH{$sec}; + next; + } + + if (/^\s(same|modified|added|removed)/) { # calculated totals row + my @ar = grep { $_ ne '' } split(/ /, $_); + chomp(@ar); + my $ttl = shift @ar; + my $i = 0; + foreach(@ar) { + my $t = "${ttl}${dl}${cols[$i]}"; + $HoH{$sec}{$t} = 0 if ! exists $HoH{$sec}{$t}; + $HoH{$sec}{$t} += $_; + $i++; + } + } + } + $IN->close; + } + + # rows are in this order + my @rows = ('same', 'modified', 'added', 'removed'); + + $res .= sprintf("%s\n", "-" x $width); + $res .= sprintf("%-19s %14s %14s %14s %14s\n", 'Language', + $cols[0], $cols[1], $cols[2], $cols[3]); + $res .= sprintf("%s\n", "-" x $width); + + # no inputs? %HoH will be empty + return $res unless %HoH; + + for my $sec ( keys %HoH ) { + next if $sec =~ /SUM:/; + next unless defined $HoH{$sec}; # eg, the header line + $res .= "$sec\n"; + foreach (@rows) { + $res .= sprintf(" %-18s %14s %14s %14s %14s\n", + $_, $HoH{$sec}{"${_}${dl}${cols[0]}"}, + $HoH{$sec}{"${_}${dl}${cols[1]}"}, + $HoH{$sec}{"${_}${dl}${cols[2]}"}, + $HoH{$sec}{"${_}${dl}${cols[3]}"}); + } + } + $res .= sprintf("%s\n", "-" x $width); + my $sec = 'SUM:'; + $res .= "$sec\n"; + foreach (@rows) { + $res .= sprintf(" %-18s %14s %14s %14s %14s\n", + $_, $HoH{$sec}{"${_}${dl}${cols[0]}"}, + $HoH{$sec}{"${_}${dl}${cols[1]}"}, + $HoH{$sec}{"${_}${dl}${cols[2]}"}, + $HoH{$sec}{"${_}${dl}${cols[3]}"}); + } + $res .= sprintf("%s\n", "-" x $width); + + print "<- combine_diffs\n" if $opt_v > 2; + return $res; +} # 1}}} +sub combine_csv_diffs { # {{{1 + my ($delimiter, $ra_files) = @_; + print "-> combine_csv_diffs\n" if $opt_v > 2; + + my %sum = (); # sum{ language } = array of 17 values + foreach my $file (@{$ra_files}) { + my $IN = open_file('<', $file, 1); + if (!defined $IN) { + warn "Unable to read $file; ignoring.\n"; + next; + } + + my $sec; + while (<$IN>) { + next if /^Language${delimiter}\s==\sfiles${delimiter}/; + chomp; + my @words = split(/$delimiter/); + my $n_col = scalar(@words); + if ($n_col != 18) { + warn "combine_csv_diffs(): Parse failure line $. of $file\n"; + warn "Expected 18 columns, got $n_col\n"; + die; + } + my $Lang = $words[0]; + my @count = map { int($_) } @words[1..16]; + if (defined $sum{$Lang}) { + for (my $i = 0; $i < 16; $i++) { + $sum{$Lang}[$i] += $count[$i]; + } + } else { + @{$sum{$Lang}} = @count; + } + } + $IN->close; + } + + my @header = ("Language", "== files", "!= files", "+ files", "- files", + "== blank", "!= blank", "+ blank", "- blank", "== comment", + "!= comment", "+ comment", "- comment", "== code", + "!= code", "+ code", "- code", "$URL v $VERSION" ); + + my $res = join("$delimiter ", @header) . "$delimiter\n"; + foreach my $Lang (sort keys %sum) { + $res .= $Lang . "$delimiter "; + for (my $i = 0; $i < 16; $i++) { + $res .= $sum{$Lang}[$i] . "$delimiter "; + } + $res .= "\n"; + } + + print "<- combine_csv_diffs\n" if $opt_v > 2; + return $res; +} # 1}}} +sub get_time { # {{{1 + if ($HAVE_Time_HiRes) { + return Time::HiRes::time(); + } else { + return time(); + } +} # 1}}} +sub really_is_D { # {{{1 + # Ref bug 131, files ending with .d could be init.d scripts + # instead of D language source files. + my ($file , # in + $rh_Err , # in hash of error codes + $raa_errors , # out + ) = @_; + print "-> really_is_D($file)\n" if $opt_v > 2; + my ($possible_script, $L) = peek_at_first_line($file, $rh_Err, $raa_errors); + + print "<- really_is_D($file)\n" if $opt_v > 2; + return $possible_script; # null string if D, otherwise a language +} # 1}}} +sub no_autogen_files { # {{{1 + # ref https://github.com/AlDanial/cloc/issues/151 + my ($print,) = @_; + print "-> no_autogen($print)\n" if $opt_v > 2; + + # These sometimes created manually? + # acinclude.m4 + # configure.ac + # Makefile.am + + my @files = qw ( + aclocal.m4 + announce-gen + autogen.sh + bootstrap + compile + config.guess + config.h.in + config.rpath + config.status + config.sub + configure + configure.in + depcomp + gendocs.sh + gitlog-to-changelog + git-version-gen + gnupload + gnu-web-doc-update + install-sh + libtool + libtool.m4 + link-warning.h + ltmain.sh + lt~obsolete.m4 + ltoptions.m4 + ltsugar.m4 + ltversion.in + ltversion.m4 + Makefile.in + mdate-sh + missing + mkinstalldirs + test-driver + texinfo.tex + update-copyright + useless-if-before-free + vc-list-files + ylwrap + ); + + if ($print) { + printf "cloc will ignore these %d files with --no-autogen:\n", scalar @files; + foreach my $F (@files) { + print " $F\n"; + } + print "Additionally, Go files with '// Code generated by .* DO NOT EDIT.'\n"; + print "on the first line are ignored.\n"; + } + print "<- no_autogen()\n" if $opt_v > 2; + return @files; +} # 1}}} +sub load_from_config_file { # {{{1 + # Supports all options except --config itself which would + # be pointless. + my ($config_file, + $rs_by_file , + $rs_by_file_by_lang , + $rs_categorized , + $rs_counted , + $rs_include_ext , + $rs_include_lang , + $rs_include_content , + $rs_exclude_content , + $rs_exclude_lang , + $rs_exclude_dir , + $rs_exclude_list_file , + $rs_explain , + $rs_extract_with , + $rs_found , + $rs_count_diff , + $rs_diff_list_files , + $rs_diff , + $rs_diff_alignment , + $rs_diff_timeout , + $rs_timeout , + $rs_html , + $rs_ignored , + $rs_quiet , + $rs_force_lang_def , + $rs_read_lang_def , + $rs_show_ext , + $rs_show_lang , + $rs_progress_rate , + $rs_print_filter_stages , + $rs_report_file , + $ra_script_lang , + $rs_sdir , + $rs_skip_uniqueness , + $rs_strip_code , + $rs_strip_comments , + $rs_original_dir , + $rs_sum_reports , + $rs_hide_rate , + $rs_processes , + $rs_unicode , + $rs_3 , + $rs_v , + $rs_vcs , + $rs_version , + $rs_write_lang_def , + $rs_write_lang_def_incl_dup, + $rs_xml , + $rs_xsl , + $ra_force_lang , + $rs_lang_no_ext , + $rs_yaml , + $rs_csv , + $rs_csv_delimiter , + $rs_json , + $rs_md , + $rs_fullpath , + $rs_match_f , + $ra_not_match_f , + $rs_match_d , + $ra_not_match_d , + $rs_list_file , + $rs_help , + $rs_skip_win_hidden , + $rs_read_binary_files , + $rs_sql , + $rs_sql_project , + $rs_sql_append , + $rs_sql_style , + $rs_inline , + $rs_exclude_ext , + $rs_ignore_whitespace , + $rs_ignore_case , + $rs_ignore_case_ext , + $rs_follow_links , + $rs_autoconf , + $rs_sum_one , + $rs_by_percent , + $rs_stdin_name , + $rs_force_on_windows , + $rs_force_on_unix , + $rs_show_os , + $rs_skip_archive , + $rs_max_file_size , + $rs_use_sloccount , + $rs_no_autogen , + $rs_force_git , + $rs_strip_str_comments , + $rs_file_encoding , + $rs_docstring_as_code , + $rs_stat , + ) = @_; + # look for runtime configuration file in + # $ENV{'HOME'}/.config/cloc/options.txt -> POSIX + # $ENV{'APPDATA'} . 'cloc' + + print "-> load_from_config_file($config_file)\n" if $opt_v and $opt_v > 2; + if (!is_file($config_file)) { + print "<- load_from_config_file() (no such file: $config_file)\n" if $opt_v and $opt_v > 2; + return; + } elsif (!can_read($config_file)) { + print "<- load_from_config_file() (unable to read $config_file)\n" if $opt_v and $opt_v > 2; + return; + } + print "Reading options from $config_file.\n" if defined $opt_v; + + my $has_force_lang = @{$ra_force_lang}; + my $has_script_lang = @{$ra_script_lang}; + my @lines = read_file($config_file); + foreach (@lines) { + next if /^\s*$/ or /^\s*#/; + s/\s*--//; + s/^\s+//; + if (!defined ${$rs_by_file} and /^(by_file|by-file)/) { ${$rs_by_file} = 1; + } elsif (!defined ${$rs_by_file_by_lang} and /^(by_file_by_lang|by-file-by-lang)/) { ${$rs_by_file_by_lang} = 1; + } elsif (!defined ${$rs_categorized} and /^categorized(=|\s+)(.*?)$/) { ${$rs_categorized} = $2; + } elsif (!defined ${$rs_counted} and /^counted(=|\s+)(.*?)$/) { ${$rs_counted} = $2; + } elsif (!defined ${$rs_include_ext} and /^(?:include_ext|include-ext)(=|\s+)(.*?)$/) { ${$rs_include_ext} = $2; + } elsif (!defined ${$rs_include_lang} and /^(?:include_lang|include-lang)(=|\s+)(.*?)$/) { ${$rs_include_lang} = $2; + } elsif (!defined ${$rs_include_content} and /^(?:include_content|include-content)(=|\s+)(.*?)$/) { ${$rs_include_content} = $2; + } elsif (!defined ${$rs_exclude_content} and /^(?:exclude_content|exclude-content)(=|\s+)(.*?)$/) { ${$rs_exclude_content} = $2; + } elsif (!defined ${$rs_exclude_lang} and /^(?:exclude_lang|exclude-lang)(=|\s+)(.*?)$/) { ${$rs_exclude_lang} = $2; + } elsif (!defined ${$rs_exclude_dir} and /^(?:exclude_dir|exclude-dir)(=|\s+)(.*?)$/) { ${$rs_exclude_dir} = $2; + } elsif (!defined ${$rs_explain} and /^explain(=|\s+)(.*?)$/) { ${$rs_explain} = $2; + } elsif (!defined ${$rs_extract_with} and /^(?:extract_with|extract-with)(=|\s+)(.*?)$/) { ${$rs_extract_with} = $2; + } elsif (!defined ${$rs_found} and /^found(=|\s+)(.*?)$/) { ${$rs_found} = $2; + } elsif (!defined ${$rs_count_diff} and /^(count_and_diff|count-and-diff)/) { ${$rs_count_diff} = 1; + } elsif (!defined ${$rs_diff_list_files} and /^(diff_list_files|diff-list-files)/) { ${$rs_diff_list_files} = 1; + } elsif (!defined ${$rs_diff} and /^diff/) { ${$rs_diff} = 1; + } elsif (!defined ${$rs_diff_alignment} and /^(?:diff-alignment|diff_alignment)(=|\s+)(.*?)$/) { ${$rs_diff_alignment} = $2; + } elsif (!defined ${$rs_diff_timeout} and /^(?:diff-timeout|diff_timeout)(=|\s+)i/) { ${$rs_diff_timeout} = $1; + } elsif (!defined ${$rs_timeout} and /^timeout(=|\s+)i/) { ${$rs_timeout} = $1; + } elsif (!defined ${$rs_html} and /^html/) { ${$rs_html} = 1; + } elsif (!defined ${$rs_ignored} and /^ignored(=|\s+)(.*?)$/) { ${$rs_ignored} = $2; + } elsif (!defined ${$rs_quiet} and /^quiet/) { ${$rs_quiet} = 1; + } elsif (!defined ${$rs_force_lang_def} and /^(?:force_lang_def|force-lang-def)(=|\s+)(.*?)$/) { ${$rs_force_lang_def} = $2; + } elsif (!defined ${$rs_read_lang_def} and /^(?:read_lang_def|read-lang-def)(=|\s+)(.*?)$/) { ${$rs_read_lang_def} = $2; + } elsif (!defined ${$rs_progress_rate} and /^(?:progress_rate|progress-rate)(=|\s+)(\d+)/) { ${$rs_progress_rate} = $2; + } elsif (!defined ${$rs_print_filter_stages} and /^(print_filter_stages|print-filter-stages)/) { ${$rs_print_filter_stages}= 1; + } elsif (!defined ${$rs_report_file} and /^(?:report_file|report-file)(=|\s+)(.*?)$/) { ${$rs_report_file} = $2; + } elsif (!defined ${$rs_report_file} and /^out(=|\s+)(.*?)$/) { ${$rs_report_file} = $2; + } elsif (!defined ${$rs_sdir} and /^sdir(=|\s+)(.*?)$/) { ${$rs_sdir} = $2; + } elsif (!defined ${$rs_skip_uniqueness} and /^(skip_uniqueness|skip-uniqueness)/) { ${$rs_skip_uniqueness} = 1; + } elsif (!defined ${$rs_strip_code} and /^(?:strip_code|strip-code)(=|\s+)(.*?)$/) { ${$rs_strip_code} = $2; + } elsif (!defined ${$rs_strip_comments} and /^(?:strip_comments|strip-comments)(=|\s+)(.*?)$/) { ${$rs_strip_comments} = $2; + } elsif (!defined ${$rs_original_dir} and /^(original_dir|original-dir)/) { ${$rs_original_dir} = 1; + } elsif (!defined ${$rs_sum_reports} and /^(sum_reports|sum-reports)/) { ${$rs_sum_reports} = 1; + } elsif (!defined ${$rs_hide_rate} and /^(hid_rate|hide-rate)/) { ${$rs_hide_rate} = 1; + } elsif (!defined ${$rs_processes} and /^processes(=|\s+)(\d+)/) { ${$rs_processes} = $2; + } elsif (!defined ${$rs_unicode} and /^unicode/) { ${$rs_unicode} = 1; + } elsif (!defined ${$rs_3} and /^3/) { ${$rs_3} = 1; + } elsif (!defined ${$rs_vcs} and /^vcs(=|\s+)(\S+)/) { ${$rs_vcs} = $2; + } elsif (!defined ${$rs_version} and /^version/) { ${$rs_version} = 1; + } elsif (!defined ${$rs_write_lang_def} and /^(?:write_lang_def|write-lang-def)(=|\s+)(.*?)$/) { ${$rs_write_lang_def} = $2; + } elsif (!defined ${$rs_write_lang_def_incl_dup} and /^(?:write_lang_def_incl_dup|write-lang-def-incl-dup)(=|\s+)(.*?)$/) { ${$rs_write_lang_def_incl_dup} = $2; + } elsif (!defined ${$rs_xml} and /^xml/) { ${$rs_xml} = 1; + } elsif (!defined ${$rs_xsl} and /^xsl(=|\s+)(.*?)$/) { ${$rs_xsl} = $2; + } elsif (!defined ${$rs_lang_no_ext} and /^(?:lang_no_ext|lang-no-ext)(=|\s+)(.*?)$/) { ${$rs_lang_no_ext} = $2; + } elsif (!defined ${$rs_yaml} and /^yaml/) { ${$rs_yaml} = 1; + } elsif (!defined ${$rs_csv} and /^csv/) { ${$rs_csv} = 1; + } elsif (!defined ${$rs_csv_delimiter} and /^(?:csv_delimiter|csv-delimiter)(=|\s+)(.*?)$/) { ${$rs_csv_delimiter} = $2; + } elsif (!defined ${$rs_json} and /^json/) { ${$rs_json} = 1; + } elsif (!defined ${$rs_md} and /^md/) { ${$rs_md} = 1; + } elsif (!defined ${$rs_fullpath} and /^fullpath/) { ${$rs_fullpath} = 1; + } elsif (!defined ${$rs_match_f} and /^(?:match_f|match-f)(=|\s+)(.*?)$/) { ${$rs_match_f} = $2; + } elsif (! @{$ra_not_match_f} and /^(?:not_match_f|not-match-f)(=|\s+)(.*?)$/) { push @{$ra_not_match_f} , $2; + } elsif (!defined ${$rs_match_d} and /^(?:match_d|match-d)(=|\s+)(.*?)$/) { ${$rs_match_d} = $2; + } elsif (! @{$ra_not_match_d} and /^(?:not_match_d|not-match-d)(=|\s+)(.*?)$/) { push @{$ra_not_match_d} , $2; + } elsif (!defined ${$rs_list_file} and /^(?:list_file|list-file)(=|\s+)(.*?)$/) { ${$rs_list_file} = $2; + } elsif (!defined ${$rs_help} and /^help/) { ${$rs_help} = 1; + } elsif (!defined ${$rs_skip_win_hidden} and /^(skip_win_hidden|skip-win-hidden)/) { ${$rs_skip_win_hidden} = 1; + } elsif (!defined ${$rs_read_binary_files} and /^(read_binary_files|read-binary-files)/) { ${$rs_read_binary_files} = 1; + } elsif (!defined ${$rs_sql} and /^sql(=|\s+)(.*?)$/) { ${$rs_sql} = $2; + } elsif (!defined ${$rs_sql_project} and /^(?:sql_project|sql-project)(=|\s+)(.*?)$/) { ${$rs_sql_project} = $2; + } elsif (!defined ${$rs_sql_append} and /^(sql_append|sql-append)/) { ${$rs_sql_append} = 1; + } elsif (!defined ${$rs_sql_style} and /^(?:sql_style|sql-style)(=|\s+)(.*?)$/) { ${$rs_sql_style} = $2; + } elsif (!defined ${$rs_inline} and /^inline/) { ${$rs_inline} = 1; + } elsif (!defined ${$rs_exclude_ext} and /^(?:exclude_ext|exclude-ext)(=|\s+)(.*?)$/) { ${$rs_exclude_ext} = $2; + } elsif (!defined ${$rs_ignore_whitespace} and /^(ignore_whitespace|ignore-whitespace)/) { ${$rs_ignore_whitespace} = 1; + } elsif (!defined ${$rs_ignore_case_ext} and /^(ignore_case_ext|ignore-case-ext)/) { ${$rs_ignore_case_ext} = 1; + } elsif (!defined ${$rs_ignore_case} and /^(ignore_case|ignore-case)/) { ${$rs_ignore_case} = 1; + } elsif (!defined ${$rs_follow_links} and /^(follow_links|follow-links)/) { ${$rs_follow_links} = 1; + } elsif (!defined ${$rs_autoconf} and /^autoconf/) { ${$rs_autoconf} = 1; + } elsif (!defined ${$rs_sum_one} and /^(sum_one|sum-one)/) { ${$rs_sum_one} = 1; + } elsif (!defined ${$rs_by_percent} and /^(?:by_percent|by-percent)(=|\s+)(.*?)$/) { ${$rs_by_percent} = $2; + } elsif (!defined ${$rs_stdin_name} and /^(?:stdin_name|stdin-name)(=|\s+)(.*?)$/) { ${$rs_stdin_name} = $2; + } elsif (!defined ${$rs_force_on_windows} and /^windows/) { ${$rs_force_on_windows} = 1; + } elsif (!defined ${$rs_force_on_unix} and /^unix/) { ${$rs_force_on_unix} = 1; + } elsif (!defined ${$rs_show_os} and /^(show_os|show-os)/) { ${$rs_show_os} = 1; + } elsif (!defined ${$rs_skip_archive} and /^(?:skip_archive|skip-archive)(=|\s+)(.*?)$/) { ${$rs_skip_archive} = $2; + } elsif (!defined ${$rs_max_file_size} and /^(?:max_file_size|max-file-size)(=|\s+)(\d+)/) { ${$rs_max_file_size} = $2; + } elsif (!defined ${$rs_use_sloccount} and /^(use_sloccount|use-sloccount)/) { ${$rs_use_sloccount} = 1; + } elsif (!defined ${$rs_no_autogen} and /^(no_autogen|no-autogen)/) { ${$rs_no_autogen} = 1; + } elsif (!defined ${$rs_force_git} and /^git/) { ${$rs_force_git} = 1; + } elsif (!defined ${$rs_exclude_list_file} and /^(?:exclude_list_file|exclude-list-file)(=|\s+)(.*?)$/) + { ${$rs_exclude_list_file} = $2; + } elsif (!defined ${$rs_v} and /^(verbose|v)((=|\s+)(\d+))?/) { + if (!defined $4) { ${$rs_v} = 0; } + else { ${$rs_v} = $4; } + } elsif (!$has_script_lang and /^(?:script_lang|script-lang)(=|\s+)(.*?)$/) { + push @{$ra_script_lang} , $2; + } elsif (!$has_force_lang and /^(?:force_lang|force-lang)(=|\s+)(.*?)$/) { + push @{$ra_force_lang} , $2; + } elsif (!defined ${$rs_show_ext} and /^(show_ext|show-ext)((=|\s+)(.*))?$/) { + if (!defined $4) { ${$rs_show_ext} = 0; } + else { ${$rs_show_ext} = $4; } + } elsif (!defined ${$rs_show_lang} and /^(show_lang|show-lang)((=|\s+)(.*))?s/){ + if (!defined $4) { ${$rs_show_lang} = 0; } + else { ${$rs_show_lang} = $4; } + } elsif (!defined ${$rs_strip_str_comments} and /^(strip_str_comments|strip-str-comments)/) { ${$rs_strip_str_comments} = 1; + } elsif (!defined ${$rs_file_encoding} and /^(?:file_encoding|file-encoding)(=|\s+)(\S+)/) { ${$rs_file_encoding} = $2; + } elsif (!defined ${$rs_docstring_as_code} and /^(docstring_as_code|docstring-as-code)/) { ${$rs_docstring_as_code} = 1; + } elsif (!defined ${$rs_stat} and /stat/) { ${$rs_stat} = 1; + } + + } +} # 1}}} +sub trick_pp_packer_encode { # {{{1 + use Encode; + # PAR::Packer gives 'Unknown PerlIO layer "encoding"' unless it is + # forced into using this module. + my ($OUT, $JunkFile) = tempfile(UNLINK => 1); # delete on exit + open($OUT, "> :encoding(utf8)", $JunkFile); + close($OUT); +} +# 1}}} +sub really_is_smarty { # {{{1 + # Given filename, returns TRUE if its contents look like Smarty template + my ($filename, ) = @_; + + print "-> really_is_smarty($filename)\n" if $opt_v > 2; + + my @lines = read_file($filename); + + my $points = 0; + foreach my $L (@lines) { + if (($L =~ /\{(if|include)\s/) or + ($L =~ /\{\/if\}/) or + ($L =~ /(\{\*|\*\})/) or + ($L =~ /\{\$\w/)) { + ++$points; + } + last if $points >= 2; + } + print "<- really_is_smarty(points=$points)\n" if $opt_v > 2; + return $points >= 2; +} # 1}}} +sub check_alternate_config_files { # {{{1 + my ($list_file, $exclude_list_file, $read_lang_def, + $force_lang_def, $diff_list_file, ) = @_; + my $found_it = ""; + foreach my $file ($list_file, + $exclude_list_file, + $read_lang_def, + $force_lang_def, + $diff_list_file ) { + next unless defined $file; + my $dir = dirname $file; + next unless can_read($dir) and is_dir($dir); + my $bn = basename $config_file; + if (can_read("$dir/$bn")) { + $found_it = "$dir/$bn"; + print "Using configuration file $found_it\n" if $opt_v; + last; + } + } + return $found_it; +} +# 1}}} +sub write_null_results { # {{{ + my ($json, $xml, $report_file,) = @_; + print "-> write_null_results\n" if $opt_v > 2; + if ((defined $json) or (defined $xml)) { + my $line = ""; + if (defined $json) { + $line = "{}"; + } else { + $line = ''; + } + if (defined $report_file) { + open OUT, ">$report_file" or die "Cannot write to $report_file $!\n"; + print OUT "$line\n"; + close OUT; + } else { + print "$line\n"; + } + } + print "<- write_null_results\n" if $opt_v > 2; +} # }}} +sub glob2regex { # {{{ + # convert simple xpath-style glob pattern to a regex + my $globstr = shift; + my $re = $globstr; + $re =~ s{^["']}{}; + $re =~ s{^\.\/}{}; + $re =~ s{["']$}{}; + $re =~ s{\.}{\\.}g; + $re =~ s{\*\*}{\cx}g; # ctrl x = .*? + $re =~ s{\*}{\cy}g; # ctrl y = [^/]* + $re =~ s{\cx}{.*?}g; + $re =~ s{\cy}{[^/]*}g; + return '^' . $re . '$'; +} # }}} +sub load_json { # {{{1 + # + # Load a cloc-generated JSON string into %contents + # $contents{filename}{blank|comment|code|language} = value + # then print in a variety of formats. + # + my ($json_string, ) = @_; + print "-> load_json()\n" if $opt_v > 2; + + my %contents = (); + my $heading = undef; + foreach (split /\n/, $json_string) { + if (/^{?"(.*?)"/) { + $heading = $1; + } else { + if (/^\s+"(.*?)"\s*:\s+(\d+(\.\d+)?)\b/) { + # numeric value + $contents{$heading}{$1} = $2; + } elsif (/^\s+"(.*?)"\s*:\s+"(.*?)"/) { + $contents{$heading}{$1} = $2; + } + } + } + my $url = $contents{'header'}{'cloc_url'}; + my $ver = $contents{'header'}{'cloc_version'}; + my $sec = $contents{'header'}{'elapsed_seconds'}; + my $n_file = $contents{'header'}{'n_files'}; + my $n_line = $contents{'header'}{'n_lines'}; + $sec = $sec == 0 ? 1.0e-3 : $sec; + my $header = sprintf "%s v %s T=%.2f s (%.1f files/s, %.1f lines/s)", + $url, $ver, $sec, $n_file/$sec, $n_line/$sec; + delete $contents{'header'}; + delete $contents{'SUM'}; + + my @file_list = (sort { $contents{$b}{'code'} <=> + $contents{$a}{'code'} } keys %contents ); +#die Dumper(\%contents); + # Determine column widths for output + my $file_len = 0; + my $lang_len = 0; + foreach my $file (keys %contents) { + my $flen = length $file; + my $llen = length $contents{$file}{'language'}; + $file_len = $file_len > $flen ? $file_len : $flen; + $lang_len = $lang_len > $llen ? $lang_len : $llen; + } + print "<- load_json()\n" if $opt_v > 2; + return $file_len, $lang_len, $header, %contents; +} +# 1}}} +sub print_format_n { # {{{1 + # by file with + # format 1 : Language | files | blank | comment | code + # format 2 : Language | files | blank | comment | code | total + # format 3 : File | Language | blank | comment | code + # format 4 : File | blank | comment | code | total + # format 5 : File | Language | blank | comment | code | total + my ($format, $file_len, $lang_len, $header, %contents) = @_; + print "-> print_format_n($format)\n" if $opt_v > 2; + my @prt_lines = (); + + # 8 = characters in "Language" + $lang_len = max(8, $lang_len); + my %str_fmt = ( + 1 => sprintf("%%-%ds %%7s %%7s %%7s %%7s\n", $lang_len), + 2 => sprintf("%%-%ds %%7s %%7s %%7s %%7s %%7s\n", $lang_len), + 3 => sprintf("%%-%ds %%-%ds %%7s %%7s %%7s\n", $file_len, $lang_len), + 4 => sprintf("%%-%ds %%7s %%7s %%7s %%7s\n", $file_len), + 5 => sprintf("%%-%ds %%-%ds %%7s %%7s %%7s %%7s\n", $file_len, $lang_len), + ); + my %val_fmt = ( + 1 => sprintf("%%-%ds %%7d %%7d %%7d %%7d\n", $lang_len), + 2 => sprintf("%%-%ds %%7d %%7d %%7d %%7d %%7d\n", $lang_len), + 3 => sprintf("%%-%ds %%-%ds %%7d %%7d %%7d\n", $file_len, $lang_len), + 4 => sprintf("%%-%ds %%7d %%7d %%7d %%7d\n", $file_len), + 5 => sprintf("%%-%ds %%-%ds %%7d %%7d %%7d %%7d\n", $file_len, $lang_len), + ); + my %language = (); + foreach my $file (keys %contents) { + my $lang = $contents{$file}{'language'}; + $language{$lang}{'files'} += 1; + foreach my $category ('blank', 'comment', 'code',) { + $language{$lang}{$category} += $contents{$file}{$category}; + $language{$lang}{'total'} += $contents{$file}{$category}; + } + } + my @file_list = (sort { $contents{$b}{'code'} <=> + $contents{$a}{'code'} } keys %contents ); + my @lang_list = (sort { $language{$b}{'code'} <=> + $language{$a}{'code'} } keys %language ); + + my %hyphens = ( + 1 => "-" x ($lang_len + 4*9), + 2 => "-" x ($lang_len + 5*9), + 3 => "-" x ($lang_len + $file_len + 2 + 3*9), + 4 => "-" x ($file_len + 4*9), + 5 => "-" x ($lang_len + $file_len + 2 + 4*9), + ); + my %col_headings = ( + 1 => ["Language", "files", "blank", "comment", "code"], + 2 => ["Language", "files", "blank", "comment", "code", "Total"], + 3 => ["File", "Language", "blank", "comment", "code"], + 4 => ["File", "blank", "comment", "code", "Total"], + 5 => ["File", "Language", "blank", "comment", "code", "Total"], + ); + + push @prt_lines, "$header\n"; + push @prt_lines, "$hyphens{$format}\n"; + push @prt_lines, sprintf $str_fmt{$format}, @{$col_headings{$format}}; + push @prt_lines, "$hyphens{$format}\n"; + my ($n_files, $n_blank, $n_comment, $n_code, $n_total) = (0, 0, 0, 0, 0); + my @out; + if ($format < 3) { + # by language + foreach my $lang (@lang_list) { + my ($nF, $nB, $nCm, $nCo) = ($language{$lang}{'files'}, + $language{$lang}{'blank'}, + $language{$lang}{'comment'}, + $language{$lang}{'code'}); + if ($format == 1) { + @out = ($lang, $nF, $nB, $nCm, $nCo); + } else { + @out = ($lang, $nF, $nB, $nCm, $nCo, $nB + $nCm + $nCo); + } + push @prt_lines, sprintf $val_fmt{$format}, @out; + $n_files += $nF; + $n_blank += $nB; + $n_comment += $nCm; + $n_code += $nCo; + $n_total += $nB + $nCm + $nCo; + } + } else { + # by file + foreach my $file (@file_list) { + my ($nB, $nCm, $nCo) = ($contents{$file}{'blank'}, + $contents{$file}{'comment'}, + $contents{$file}{'code'}); + my $lang = $contents{$file}{'language'}; + if ($format == 1) { + } elsif ($format == 3) { + @out = ($file, $lang, $nB, $nCm, $nCo); + } elsif ($format == 4) { + @out = ($file, $nB, $nCm, $nCo, $nB + $nCm + $nCo); + } else { + @out = ($file, $lang, $nB, $nCm, $nCo, $nB + $nCm + $nCo); + } + push @prt_lines, sprintf $val_fmt{$format}, @out; + $n_blank += $nB; + $n_comment += $nCm; + $n_code += $nCo; + $n_total += $nB + $nCm + $nCo; + } + } + push @prt_lines, "$hyphens{$format}\n"; + if (scalar @file_list > 1) { + if ($format == 1) { + @out = ( "SUM", $n_files, $n_blank, $n_comment, $n_code ); + } elsif ($format == 2) { + @out = ( "SUM", $n_files, $n_blank, $n_comment, $n_code, $n_total ); + } elsif ($format == 3) { + @out = ( "SUM", " ", $n_blank, $n_comment, $n_code ); + } elsif ($format == 4) { + @out = ( "SUM", $n_blank, $n_comment, $n_code, $n_total ); + } else { + @out = ( "SUM", " ", $n_blank, $n_comment, $n_code, $n_total ); + } + push @prt_lines, sprintf $val_fmt{$format}, @out; + push @prt_lines, "$hyphens{$format}\n"; + } + return @prt_lines; + print "<- print_format_n()\n" if $opt_v > 2; +} # 1}}} +# really_is_pascal, really_is_incpascal, really_is_php from SLOCCount +my %php_files = (); # really_is_php() +sub really_is_pascal { # {{{1 +# Given filename, returns TRUE if its contents really are Pascal. + +# This isn't as obvious as it seems. +# Many ".p" files are Perl files +# (such as /usr/src/redhat/BUILD/ispell-3.1/dicts/czech/glob.p), +# others are C extractions +# (such as /usr/src/redhat/BUILD/linux/include/linux/umsdos_fs.p +# and some files in linuxconf). +# However, test files in "p2c" really are Pascal, for example. + +# Note that /usr/src/redhat/BUILD/ucd-snmp-4.1.1/ov/bitmaps/UCD.20.p +# is actually C code. The heuristics determine that they're not Pascal, +# but because it ends in ".p" it's not counted as C code either. +# I believe this is actually correct behavior, because frankly it +# looks like it's automatically generated (it's a bitmap expressed as code). +# Rather than guess otherwise, we don't include it in a list of +# source files. Let's face it, someone who creates C files ending in ".p" +# and expects them to be counted by default as C files in SLOCCount needs +# their head examined. I suggest examining their head +# with a sucker rod (see syslogd(8) for more on sucker rods). + +# This heuristic counts as Pascal such files such as: +# /usr/src/redhat/BUILD/teTeX-1.0/texk/web2c/tangleboot.p +# Which is hand-generated. We don't count woven documents now anyway, +# so this is justifiable. + + my $filename = shift; + chomp($filename); + +# The heuristic is as follows: it's Pascal _IF_ it has all of the following +# (ignoring {...} and (*...*) comments): +# 1. "^..program NAME" or "^..unit NAME", +# 2. "procedure", "function", "^..interface", or "^..implementation", +# 3. a "begin", and +# 4. it ends with "end.", +# +# Or it has all of the following: +# 1. "^..module NAME" and +# 2. it ends with "end.". +# +# Or it has all of the following: +# 1. "^..program NAME", +# 2. a "begin", and +# 3. it ends with "end.". +# +# The "end." requirements in particular filter out non-Pascal. +# +# Note (jgb): this does not detect Pascal main files in fpc, like +# fpc-1.0.4/api/test/testterminfo.pas, which does not have "program" in +# it + + my $is_pascal = 0; # Value to determine. + + my $has_program = 0; + my $has_unit = 0; + my $has_module = 0; + my $has_procedure_or_function = 0; + my $found_begin = 0; + my $found_terminating_end = 0; + my $has_begin = 0; + + my $PASCAL_FILE = open_file('<', $filename, 0); + die "Can't open $filename to determine if it's pascal.\n" if !defined $PASCAL_FILE; + while(<$PASCAL_FILE>) { + s/\{.*?\}//g; # Ignore {...} comments on this line; imperfect, but effective. + s/\(\*.*?\*\)//g; # Ignore (*...*) comments on this line; imperfect, but effective. + if (m/\bprogram\s+[A-Za-z]/i) {$has_program=1;} + if (m/\bunit\s+[A-Za-z]/i) {$has_unit=1;} + if (m/\bmodule\s+[A-Za-z]/i) {$has_module=1;} + if (m/\bprocedure\b/i) { $has_procedure_or_function = 1; } + if (m/\bfunction\b/i) { $has_procedure_or_function = 1; } + if (m/^\s*interface\s+/i) { $has_procedure_or_function = 1; } + if (m/^\s*implementation\s+/i) { $has_procedure_or_function = 1; } + if (m/\bbegin\b/i) { $has_begin = 1; } + # Originally I said: + # "This heuristic fails if there are multi-line comments after + # "end."; I haven't seen that in real Pascal programs:" + # But jgb found there are a good quantity of them in Debian, specially in + # fpc (at the end of a lot of files there is a multiline comment + # with the changelog for the file). + # Therefore, assume Pascal if "end." appears anywhere in the file. + if (m/end\.\s*$/i) {$found_terminating_end = 1;} +# elsif (m/\S/) {$found_terminating_end = 0;} + } + close($PASCAL_FILE); + + # Okay, we've examined the entire file looking for clues; + # let's use those clues to determine if it's really Pascal: + + if ( ( ($has_unit || $has_program) && $has_procedure_or_function && + $has_begin && $found_terminating_end ) || + ( $has_module && $found_terminating_end ) || + ( $has_program && $has_begin && $found_terminating_end ) ) + {$is_pascal = 1;} + + return $is_pascal; +} # 1}}} +sub really_is_incpascal { # {{{1 +# Given filename, returns TRUE if its contents really are Pascal. +# For .inc files (mainly seen in fpc) + + my $filename = shift; + chomp($filename); + +# The heuristic is as follows: it is Pascal if any of the following: +# 1. really_is_pascal returns true +# 2. Any usual reserved word is found (program, unit, const, begin...) + + # If the general routine for Pascal files works, we have it + if (really_is_pascal($filename)) { + return 1; + } + + my $is_pascal = 0; # Value to determine. + my $found_begin = 0; + + my $PASCAL_FILE = open_file('<', $filename, 0); + die "Can't open $filename to determine if it's pascal.\n" if !defined $PASCAL_FILE; + while(<$PASCAL_FILE>) { + s/\{.*?\}//g; # Ignore {...} comments on this line; imperfect, but effective. + s/\(\*.*?\*\)//g; # Ignore (*...*) comments on this line; imperfect, but effective. + if (m/\bprogram\s+[A-Za-z]/i) {$is_pascal=1;} + if (m/\bunit\s+[A-Za-z]/i) {$is_pascal=1;} + if (m/\bmodule\s+[A-Za-z]/i) {$is_pascal=1;} + if (m/\bprocedure\b/i) {$is_pascal = 1; } + if (m/\bfunction\b/i) {$is_pascal = 1; } + if (m/^\s*interface\s+/i) {$is_pascal = 1; } + if (m/^\s*implementation\s+/i) {$is_pascal = 1; } + if (m/\bconstant\s+/i) {$is_pascal=1;} + if (m/\bbegin\b/i) { $found_begin = 1; } + if ((m/end\.\s*$/i) && ($found_begin = 1)) {$is_pascal = 1;} + if ($is_pascal) { + last; + } + } + + close($PASCAL_FILE); + return $is_pascal; +} # 1}}} +sub really_is_php { # {{{1 +# Given filename, returns TRUE if its contents really is php. + + my $filename = shift; + chomp($filename); + + my $is_php = 0; # Value to determine. + # Need to find a matching pair of surrounds, with ending after beginning: + my $normal_surround = 0; # + my $script_surround = 0; # ; bit 0 =