From 3f80ca6022d95edaaebae452838345c878bf06ac Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 02:55:18 +0200 Subject: [PATCH 01/27] oh-my-bash.sh : Replaced $OSTYPE with $(uname) --- oh-my-bash.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oh-my-bash.sh b/oh-my-bash.sh index 97f3b6b0d..4a15459b2 100644 --- a/oh-my-bash.sh +++ b/oh-my-bash.sh @@ -84,7 +84,7 @@ for alias in ${aliases[@]}; do done # Figure out the SHORT hostname -if [[ "$OSTYPE" = darwin* ]]; then +if [[ $(uname) == Darwin* ]]; then # macOS's $HOST changes with dhcp, etc. Use ComputerName if possible. SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST=${HOST/.*/} else From f51e361eb1a6a474404355df2543e74a1fb995a9 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 02:58:05 +0200 Subject: [PATCH 02/27] oh-my-bash.sh : Added error handling --- oh-my-bash.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/oh-my-bash.sh b/oh-my-bash.sh index 4a15459b2..f9f2daf40 100644 --- a/oh-my-bash.sh +++ b/oh-my-bash.sh @@ -1,5 +1,18 @@ #!/usr/bin/env bash +# Error handling +## if {einfo,warn,die}() are not set globally (so that end-user can customize the error) then sets script's definitions +if ! command -v einfo > /dev/null; then einfo() { printf "INFO: %s\n" "$1" 1>&2 ; } fi +if ! command -v warn > /dev/null; then warn() { printf "WARN: %s\n" "$1" 1>&2 ; } fi +if ! command -v die > /dev/null; then die() { + case $1 in + # FALSE + 1) printf "FATAL: %s\n" "$2" 1>&2 ; exit $1 ;; + # Custom + *) (printf "FATAL: Syntax error $([ -n "${FUNCNAME[0]}" ] && printf "in ${FUNCNAME[0]}")\n%s\n" "$2" 1>&2 ; exit "$1") || (printf "FATAL: %s\n" "$1" 1>&2 ; exit $1) + esac +} fi + # Bail out early if non-interactive case $- in *i*) ;; From f5c0018ccd5c9f76409758c995f294cd6e3c6203 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 03:00:45 +0200 Subject: [PATCH 03/27] oh-my-bash: Improved sanity for non-interactive shell --- oh-my-bash.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/oh-my-bash.sh b/oh-my-bash.sh index f9f2daf40..7491ed187 100644 --- a/oh-my-bash.sh +++ b/oh-my-bash.sh @@ -14,10 +14,7 @@ if ! command -v die > /dev/null; then die() { } fi # Bail out early if non-interactive -case $- in - *i*) ;; - *) return;; -esac +[[ $- != *i* ]] && die 1 "Shell is not interactive" # Check for updates on initial load... if [ "$DISABLE_AUTO_UPDATE" != "true" ]; then From 9dee040873c11e92abff6183d6bccee0b3dd5bad Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 03:01:01 +0200 Subject: [PATCH 04/27] oh-my-bash: Fixed this abomination --- oh-my-bash.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oh-my-bash.sh b/oh-my-bash.sh index 7491ed187..2a20b753d 100644 --- a/oh-my-bash.sh +++ b/oh-my-bash.sh @@ -17,7 +17,7 @@ if ! command -v die > /dev/null; then die() { [[ $- != *i* ]] && die 1 "Shell is not interactive" # Check for updates on initial load... -if [ "$DISABLE_AUTO_UPDATE" != "true" ]; then +if ! ((DISABLE_AUTO_UPDATE)) ; then env OSH=$OSH DISABLE_UPDATE_PROMPT=$DISABLE_UPDATE_PROMPT bash -f $OSH/tools/check_for_upgrade.sh fi From 016ff5732607354d3ab10385fd0df08780ba0fcc Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 03:01:26 +0200 Subject: [PATCH 05/27] oh-my-bash: code improvement --- oh-my-bash.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oh-my-bash.sh b/oh-my-bash.sh index 2a20b753d..df48641dc 100644 --- a/oh-my-bash.sh +++ b/oh-my-bash.sh @@ -149,7 +149,7 @@ if [ "$OSH_THEME" = "random" ]; then source "$RANDOM_THEME" echo "[oh-my-bash] Random theme '$RANDOM_THEME' loaded..." else - if [ ! "$OSH_THEME" = "" ]; then + if [ -n "$OSH_THEME" ]; then if [ -f "$OSH_CUSTOM/$OSH_THEME/$OSH_THEME.theme.sh" ]; then source "$OSH_CUSTOM/$OSH_THEME/$OSH_THEME.theme.sh" elif [ -f "$OSH_CUSTOM/themes/$OSH_THEME/$OSH_THEME.theme.sh" ]; then From acfdadfe0c17985ac9372a40d480d74aed234c3f Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 03:01:41 +0200 Subject: [PATCH 06/27] oh-my-bash: removed additional space --- oh-my-bash.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oh-my-bash.sh b/oh-my-bash.sh index df48641dc..ea93c2902 100644 --- a/oh-my-bash.sh +++ b/oh-my-bash.sh @@ -169,5 +169,5 @@ if ! type_exists '__git_ps1' ; then fi # Adding Support for other OSes -[ -s /usr/bin/gloobus-preview ] && PREVIEW="gloobus-preview" || +[ -s /usr/bin/gloobus-preview ] && PREVIEW="gloobus-preview" || [ -s /Applications/Preview.app ] && PREVIEW="/Applications/Preview.app" || PREVIEW="less" From 2f6c777d27d2016d2ea3a9ab417546b78edf38c1 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 03:14:52 +0200 Subject: [PATCH 07/27] oh-my-bash: changed extension on .bash --- oh-my-bash.sh => oh-my-bash.bash | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename oh-my-bash.sh => oh-my-bash.bash (100%) diff --git a/oh-my-bash.sh b/oh-my-bash.bash similarity index 100% rename from oh-my-bash.sh rename to oh-my-bash.bash From 68f95bef76daebca2e8904441fcc9084dd505b6c Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 03:33:12 +0200 Subject: [PATCH 08/27] oh-my-bash: Double quoting and variable sanitization --- oh-my-bash.bash | 107 ++++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/oh-my-bash.bash b/oh-my-bash.bash index ea93c2902..c5dc1163e 100644 --- a/oh-my-bash.bash +++ b/oh-my-bash.bash @@ -18,78 +18,77 @@ if ! command -v die > /dev/null; then die() { # Check for updates on initial load... if ! ((DISABLE_AUTO_UPDATE)) ; then - env OSH=$OSH DISABLE_UPDATE_PROMPT=$DISABLE_UPDATE_PROMPT bash -f $OSH/tools/check_for_upgrade.sh + env OSH="$OSH" DISABLE_UPDATE_PROMPT="$DISABLE_UPDATE_PROMPT" bash -f "${OSH}/tools/check_for_upgrade.sh" fi # Initializes Oh My Bash # add a function path -fpath=($OSH/functions $fpath) +fpath=("${OSH}/functions" "$fpath") # Set OSH_CUSTOM to the path where your custom config files # and plugins exists, or else we will use the default custom/ if [[ -z "$OSH_CUSTOM" ]]; then - OSH_CUSTOM="$OSH/custom" + OSH_CUSTOM="${OSH}/custom" fi # Set OSH_CACHE_DIR to the path where cache files should be created # or else we will use the default cache/ if [[ -z "$OSH_CACHE_DIR" ]]; then - OSH_CACHE_DIR="$OSH/cache" + OSH_CACHE_DIR="${OSH}/cache" fi # Load all of the config files in ~/.oh-my-bash/lib that end in .sh # TIP: Add files you don't want in git to .gitignore -for config_file in $OSH/lib/*.sh; do +for config_file in ${OSH}/lib/*.sh; do custom_config_file="${OSH_CUSTOM}/lib/${config_file:t}" - [ -f "${custom_config_file}" ] && config_file=${custom_config_file} - source $config_file + [ -f "${custom_config_file}" ] && config_file="${custom_config_file}" + source "$config_file" done is_plugin() { - local base_dir=$1 - local name=$2 - test -f $base_dir/plugins/$name/$name.plugin.sh \ - || test -f $base_dir/plugins/$name/_$name + local base_dir="$1" + local name="$2" + [[ -f "$base_dir/plugins/${name}/{${name}.plugin.sh,_${name}}" ]] } # Add all defined plugins to fpath. This must be done # before running compinit. for plugin in ${plugins[@]}; do - if is_plugin $OSH_CUSTOM $plugin; then - fpath=($OSH_CUSTOM/plugins/$plugin $fpath) + if is_plugin "$OSH_CUSTOM" "$plugin"; then + fpath=("${OSH_CUSTOM}/plugins/$plugin" "$fpath") elif is_plugin $OSH $plugin; then - fpath=($OSH/plugins/$plugin $fpath) + fpath=("${OSH}/plugins/$plugin" "$fpath") fi done is_completion() { - local base_dir=$1 - local name=$2 - test -f $base_dir/completions/$name/$name.completion.sh + local base_dir="$1" + local name="$2" + [ -f "${base_dir}/completions/${name}/${name}.completion.sh" ] } # Add all defined completions to fpath. This must be done # before running compinit. -for completion in ${completions[@]}; do - if is_completion $OSH_CUSTOM $completion; then - fpath=($OSH_CUSTOM/completions/$completion $fpath) - elif is_completion $OSH $completion; then - fpath=($OSH/completions/$completion $fpath) +for completion in "${completions[@]}"; do + if is_completion "$OSH_CUSTOM" "$completion"; then + fpath=(${OSH_CUSTOM}/completions/${completion} $fpath) + elif is_completion "$OSH" "$completion"; then + fpath=("${OSH}/completions/${completion}" "$fpath") fi done is_alias() { - local base_dir=$1 - local name=$2 - test -f $base_dir/aliases/$name/$name.aliases.sh + local base_dir="$1" + local name="$2" + [ -f "${base_dir}/aliases/${name}/${name}.aliases.sh" ] } # Add all defined completions to fpath. This must be done # before running compinit. -for alias in ${aliases[@]}; do - if is_alias $OSH_CUSTOM $alias; then - fpath=($OSH_CUSTOM/aliases/$alias $fpath) - elif is_alias $OSH $alias; then - fpath=($OSH/aliases/$alias $fpath) +for alias in "${aliases[@]}"; do + if is_alias "$OSH_CUSTOM" "$alias"; then + fpath=("${OSH_CUSTOM}/aliases/$alias" "$fpath") + elif is_alias "$OSH" "$alias"; then + fpath=("${OSH}/aliases/$alias" "$fpath") fi done @@ -103,35 +102,35 @@ fi # Load all of the plugins that were defined in ~/.bashrc for plugin in ${plugins[@]}; do - if [ -f $OSH_CUSTOM/plugins/$plugin/$plugin.plugin.sh ]; then - source $OSH_CUSTOM/plugins/$plugin/$plugin.plugin.sh - elif [ -f $OSH/plugins/$plugin/$plugin.plugin.sh ]; then - source $OSH/plugins/$plugin/$plugin.plugin.sh + if [ -f "${OSH_CUSTOM}/plugins/${plugin}/${plugin}.plugin.sh" ]; then + source "${OSH_CUSTOM}/plugins/${plugin}/${plugin}.plugin.sh" + elif [ -f "${OSH}/plugins/${plugin}/${plugin}.plugin.sh" ]; then + source "${OSH}/plugins/${plugin}/${plugin}.plugin.sh" fi done # Load all of the aliases that were defined in ~/.bashrc -for alias in ${aliases[@]}; do - if [ -f $OSH_CUSTOM/aliases/$alias.aliases.sh ]; then - source $OSH_CUSTOM/aliases/$alias.aliases.sh - elif [ -f $OSH/aliases/$alias.aliases.sh ]; then - source $OSH/aliases/$alias.aliases.sh +for alias in "${aliases[@]}"; do + if [ -f "${OSH_CUSTOM}/aliases/${alias}.aliases.sh" ]; then + source "${OSH_CUSTOM}/aliases/${alias}.aliases.sh" + elif [ -f "${OSH}/aliases/${alias}.aliases.sh" ]; then + source "${OSH}/aliases/${alias}.aliases.sh" fi done # Load all of the completions that were defined in ~/.bashrc for completion in ${completions[@]}; do - if [ -f $OSH_CUSTOM/completions/$completion.completion.sh ]; then - source $OSH_CUSTOM/completions/$completion.completion.sh - elif [ -f $OSH/completions/$completion.completion.sh ]; then - source $OSH/completions/$completion.completion.sh + if [ -f "${OSH_CUSTOM}/completions/$completion.completion.sh" ]; then + source "${OSH_CUSTOM}/completions/$completion.completion.sh" + elif [ -f "${OSH}/completions/$completion.completion.sh" ]; then + source "${OSH}/completions/$completion.completion.sh" fi done # Load all of your custom configurations from custom/ -for config_file in $OSH_CUSTOM/*.sh; do - if [ -f $config_file ]; then - source $config_file +for config_file in "${OSH_CUSTOM}/*.sh"; do + if [ -f "$config_file" ]; then + source "$config_file" fi done unset config_file @@ -142,20 +141,20 @@ source "${OSH}/themes/base.theme.sh" # Load the theme if [ "$OSH_THEME" = "random" ]; then - themes=($OSH/themes/*/*theme.sh) + themes=("${OSH}/themes/*/*theme.sh") N=${#themes[@]} ((N=(RANDOM%N))) - RANDOM_THEME=${themes[$N]} + RANDOM_THEME="${themes[$N]}" source "$RANDOM_THEME" echo "[oh-my-bash] Random theme '$RANDOM_THEME' loaded..." else if [ -n "$OSH_THEME" ]; then - if [ -f "$OSH_CUSTOM/$OSH_THEME/$OSH_THEME.theme.sh" ]; then - source "$OSH_CUSTOM/$OSH_THEME/$OSH_THEME.theme.sh" - elif [ -f "$OSH_CUSTOM/themes/$OSH_THEME/$OSH_THEME.theme.sh" ]; then - source "$OSH_CUSTOM/themes/$OSH_THEME/$OSH_THEME.theme.sh" + if [ -f "${OSH_CUSTOM}/$OSH_THEME/$OSH_THEME.theme.sh" ]; then + source "${OSH_CUSTOM}/$OSH_THEME/$OSH_THEME.theme.sh" + elif [ -f "${OSH_CUSTOM}/themes/$OSH_THEME/$OSH_THEME.theme.sh" ]; then + source "${OSH_CUSTOM}/themes/$OSH_THEME/$OSH_THEME.theme.sh" else - source "$OSH/themes/$OSH_THEME/$OSH_THEME.theme.sh" + source "${OSH}/themes/$OSH_THEME/$OSH_THEME.theme.sh" fi fi fi @@ -165,7 +164,7 @@ if [[ $PROMPT ]]; then fi if ! type_exists '__git_ps1' ; then - source "$OSH/tools/git-prompt.sh" + source "${OSH}/tools/git-prompt.sh" fi # Adding Support for other OSes From a99d2ef249291f9f9441d47d3dbebafc75928e1d Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 03:37:46 +0200 Subject: [PATCH 09/27] oh-my-bash: Sanitization for i$, not paying for dev licence --- oh-my-bash.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oh-my-bash.bash b/oh-my-bash.bash index c5dc1163e..4025e3274 100644 --- a/oh-my-bash.bash +++ b/oh-my-bash.bash @@ -95,9 +95,9 @@ done # Figure out the SHORT hostname if [[ $(uname) == Darwin* ]]; then # macOS's $HOST changes with dhcp, etc. Use ComputerName if possible. - SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST=${HOST/.*/} + SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST="${HOST/.*/}" else - SHORT_HOST=${HOST/.*/} + SHORT_HOST="${HOST/.*/}" fi # Load all of the plugins that were defined in ~/.bashrc From 5a5488e7bc7e830805ab7b74339a20ae9c3a531e Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 04:10:11 +0200 Subject: [PATCH 10/27] templates/bashrc.osh-template: reaction on #42 --- templates/bashrc.osh-template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/bashrc.osh-template b/templates/bashrc.osh-template index 21f510b56..ce4ca9586 100644 --- a/templates/bashrc.osh-template +++ b/templates/bashrc.osh-template @@ -6,7 +6,7 @@ export OSH=$HOME/.oh-my-bash OSH_THEME="font" # Uncomment the following line to use case-sensitive completion. -# CASE_SENSITIVE="true" +# OSH_CASE_SENSITIVE="true" # Uncomment the following line to use hyphen-insensitive completion. Case # sensitive completion must be off. _ and - will be interchangeable. From c324ecef1fff03b81e89f6be48f51fb25e2d33bd Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 12:55:25 +0200 Subject: [PATCH 11/27] Fixes for bash syntax --- README.md | 4 +- .../{chmod.aliases.sh => chmod.aliases.bash} | 0 ...eneral.aliases.sh => general.aliases.bash} | 0 aliases/{ls.aliases.sh => ls.aliases.bash} | 0 .../{misc.aliases.sh => misc.aliases.bash} | 0 ...{apm.completion.sh => apm.completion.bash} | 0 ...i.completion.sh => awscli.completion.bash} | 1 + ...rew.completion.sh => brew.completion.bash} | 1 + ....completion.sh => bundler.completion.bash} | 2 +- ...mpletion.sh => capistrano.completion.bash} | 0 ...completion.sh => composer.completion.bash} | 0 ...da.completion.sh => conda.completion.bash} | 0 ...completion.sh => defaults.completion.bash} | 1 + ...irs.completion.sh => dirs.completion.bash} | 0 ...o.completion.sh => django.completion.bash} | 2 +- ...tion.sh => docker-compose.completion.bash} | 2 +- ...tion.sh => docker-machine.completion.bash} | 2 +- ...r.completion.sh => docker.completion.bash} | 2 +- ...sh.completion.sh => drush.completion.bash} | 0 ...c-completion.sh => fabric-completion.bash} | 0 ...{gem.completion.sh => gem.completion.bash} | 0 .../{gh.completion.sh => gh.completion.bash} | 2 +- ...{git.completion.sh => git.completion.bash} | 1 + ...completion.sh => git_flow.completion.bash} | 42 ++++++------- ...letion.sh => git_flow_avh.completion.bash} | 2 +- .../{go.completion.sh => go.completion.bash} | 0 ...e.completion.sh => gradle.completion.bash} | 1 + ...nt.completion.sh => grunt.completion.bash} | 2 +- ...ulp.completion.sh => gulp.completion.bash} | 2 +- ...completion.sh => homesick.completion.bash} | 2 +- ...{hub.completion.sh => hub.completion.bash} | 0 ...7.completion.sh => jboss7.completion.bash} | 41 ++++++------ ...e.completion.sh => jungle.completion.bash} | 1 + ....completion.sh => kontena.completion.bash} | 1 + ....completion.sh => kubectl.completion.bash} | 0 ...completion.sh => makefile.completion.bash} | 1 + ...en.completion.sh => maven.completion.bash} | 0 ...{npm.completion.sh => npm.completion.bash} | 0 ...{nvm.completion.sh => nvm.completion.bash} | 0 ...r.completion.sh => packer.completion.bash} | 0 ...{pip.completion.sh => pip.completion.bash} | 3 +- ...ip3.completion.sh => pip3.completion.bash} | 3 +- ...completion.sh => projects.completion.bash} | 2 +- ...ake.completion.sh => rake.completion.bash} | 0 ...alt.completion.sh => salt.completion.bash} | 62 +++++++++---------- ...n.completion.sh => sdkman.completion.bash} | 1 + ...{ssh.completion.sh => ssh.completion.bash} | 0 ...{svn.completion.sh => svn.completion.bash} | 1 + ...m.completion.sh => system.completion.bash} | 0 ...ompletion.sh => terraform.completion.bash} | 0 ...letion.sh => test_kitchen.completion.bash} | 2 +- ...mux.completion.sh => tmux.completion.bash} | 0 ...odo.completion.sh => todo.completion.bash} | 1 + ....completion.sh => vagrant.completion.bash} | 2 +- ...lt.completion.sh => vault.completion.bash} | 1 + ...mpletion.sh => virtualbox.completion.bash} | 0 custom/aliases/example.aliases.sh | 2 - custom/completion/example.completion.sh | 2 - custom/example.sh | 10 --- custom/plugins/example/example.plugin.sh | 2 - custom/themes/example/example.theme.sh | 2 - lib/{base.sh => base.bash} | 0 lib/{bourne-shell.sh => bourne-shell.bash} | 0 lib/{directories.sh => directories.bash} | 0 lib/{functions.sh => functions.bash} | 0 lib/{git.sh => git.bash} | 0 lib/{grep.sh => grep.bash} | 0 lib/{history.sh => history.bash} | 0 lib/{misc.sh => misc.bash} | 0 lib/{mo.sh => mo.bash} | 0 lib/{nvm.sh => nvm.bash} | 0 lib/{shopt.sh => shopt.bash} | 0 lib/{spectrum.sh => spectrum.bash} | 0 lib/{spinner.sh => spinner.bash} | 0 ...ppearance.sh => theme-and-appearance.bash} | 0 lib/{utils.sh => utils.bash} | 0 .../aws/{aws.plugin.sh => aws.plugin.bash} | 1 + ...hmarks.plugin.sh => bashmarks.plugin.bash} | 0 ...{battery.plugin.sh => battery.plugin.bash} | 0 plugins/bu/{bu.plugin.sh => bu.plugin.bash} | 0 .../git/{git.plugin.sh => git.plugin.bash} | 0 ...rogress.plugin.sh => progress.plugin.bash} | 0 ....osh-template => bashrc.osh-template.bash} | 1 + .../{90210.theme.sh => 90210.theme.bash} | 0 .../{agnoster.base.sh => agnoster.base.bash} | 0 .../axin/{axin.theme.sh => axin.theme.bash} | 0 .../{bakke.theme.sh => bakke.theme.bash} | 0 themes/{base.theme.sh => base.theme.bash} | 0 ...maly.theme.sh => binaryanomaly.theme.bash} | 0 ...ython.theme.sh => bobby-python.theme.bash} | 0 .../{bobby.theme.sh => bobby.theme.bash} | 0 .../{brainy.theme.sh => brainy.theme.bash} | 0 .../{brunton.theme.sh => brunton.theme.bash} | 0 .../{candy.theme.sh => candy.theme.bash} | 0 .../{clean.theme.sh => clean.theme.bash} | 1 + .../{colours.theme.sh => colours.theme.bash} | 0 ...ooperkid.theme.sh => cooperkid.theme.bash} | 1 + .../{cupcake.theme.sh => cupcake.theme.bash} | 0 .../{demula.theme.sh => demula.theme.bash} | 0 themes/dos/dos.theme.bash | 2 + themes/dos/dos.theme.sh | 1 - ...bletime.theme.sh => doubletime.theme.bash} | 0 ...eme.sh => doubletime_multiline.theme.bash} | 0 ...=> doubletime_multiline_pyonly.theme.bash} | 0 .../{dulcie.theme.sh => dulcie.theme.bash} | 0 .../duru/{duru.theme.sh => duru.theme.bash} | 0 .../{emperor.theme.sh => emperor.theme.bash} | 0 .../envy/{envy.theme.sh => envy.theme.bash} | 0 .../font/{font.theme.sh => font.theme.bash} | 0 ...allifrey.theme.sh => gallifrey.theme.bash} | 1 + ...{hawaii50.theme.sh => hawaii50.theme.bash} | 0 .../{iterate.theme.sh => iterate.theme.bash} | 0 .../{kitsune.theme.sh => kitsune.theme.bash} | 1 + .../luan/{luan.theme.sh => luan.theme.bash} | 0 .../{mairan.theme.sh => mairan.theme.bash} | 1 + .../{mbriggs.theme.sh => mbriggs.theme.bash} | 3 +- .../{minimal.theme.sh => minimal.theme.bash} | 0 ...{modern-t.theme.sh => modern-t.theme.bash} | 1 + .../{modern.theme.sh => modern.theme.bash} | 1 + .../{morris.theme.sh => morris.theme.bash} | 2 +- .../{n0qorg.theme.sh => n0qorg.theme.bash} | 0 ...{nwinkler.theme.sh => nwinkler.theme.bash} | 0 ...e.sh => nwinkler_random_colors.theme.bash} | 2 +- .../pete/{pete.theme.sh => pete.theme.bash} | 0 ....base.sh => powerline-multiline.base.bash} | 0 ...heme.sh => powerline-multiline.theme.bash} | 0 ...aked.base.sh => powerline-naked.base.bash} | 0 ...ed.theme.sh => powerline-naked.theme.bash} | 0 ...lain.base.sh => powerline-plain.base.bash} | 0 ...in.theme.sh => powerline-plain.theme.bash} | 0 ...{powerline.base.sh => powerline.base.bash} | 0 ...owerline.theme.sh => powerline.theme.bash} | 0 .../{primer.theme.sh => primer.theme.bash} | 0 themes/pro/{pro.theme.sh => pro.theme.bash} | 0 .../pure/{pure.theme.sh => pure.theme.bash} | 11 ++-- .../{purity.theme.sh => purity.theme.bash} | 0 ...brite.theme.sh => rainbowbrite.theme.bash} | 0 .../rana/{rana.theme.sh => rana.theme.bash} | 0 ...rgenson.theme.sh => rjorgenson.theme.bash} | 1 + .../{roderik.theme.sh => roderik.theme.bash} | 0 .../sexy/{sexy.theme.sh => sexy.theme.bash} | 1 + .../{simple.theme.sh => simple.theme.bash} | 0 .../{sirup.theme.sh => sirup.theme.bash} | 3 +- .../{slick.theme.sh => slick.theme.bash} | 1 + ...{standard.theme.sh => standard.theme.bash} | 1 + .../{tonka.theme.sh => tonka.theme.bash} | 0 .../{tonotdo.theme.sh => tonotdo.theme.bash} | 0 .../{tylenol.theme.sh => tylenol.theme.bash} | 0 .../{wanelo.theme.sh => wanelo.theme.bash} | 0 .../{zitron.theme.sh => zitron.theme.bash} | 0 .../zork/{zork.theme.sh => zork.theme.bash} | 7 ++- ..._for_upgrade.sh => check_for_upgrade.bash} | 0 tools/{git-prompt.sh => git-prompt.bash} | 1 + tools/{install.sh => install.bash} | 0 tools/{uninstall.sh => uninstall.bash} | 0 tools/{upgrade.sh => upgrade.bash} | 0 156 files changed, 134 insertions(+), 122 deletions(-) rename aliases/{chmod.aliases.sh => chmod.aliases.bash} (100%) rename aliases/{general.aliases.sh => general.aliases.bash} (100%) rename aliases/{ls.aliases.sh => ls.aliases.bash} (100%) rename aliases/{misc.aliases.sh => misc.aliases.bash} (100%) rename completions/{apm.completion.sh => apm.completion.bash} (100%) rename completions/{awscli.completion.sh => awscli.completion.bash} (81%) rename completions/{brew.completion.sh => brew.completion.bash} (93%) rename completions/{bundler.completion.sh => bundler.completion.bash} (98%) rename completions/{capistrano.completion.sh => capistrano.completion.bash} (100%) rename completions/{composer.completion.sh => composer.completion.bash} (100%) rename completions/{conda.completion.sh => conda.completion.bash} (100%) rename completions/{defaults.completion.sh => defaults.completion.bash} (99%) rename completions/{dirs.completion.sh => dirs.completion.bash} (100%) rename completions/{django.completion.sh => django.completion.bash} (99%) rename completions/{docker-compose.completion.sh => docker-compose.completion.bash} (99%) rename completions/{docker-machine.completion.sh => docker-machine.completion.bash} (99%) rename completions/{docker.completion.sh => docker.completion.bash} (99%) rename completions/{drush.completion.sh => drush.completion.bash} (100%) rename completions/{fabric-completion.sh => fabric-completion.bash} (100%) rename completions/{gem.completion.sh => gem.completion.bash} (100%) rename completions/{gh.completion.sh => gh.completion.bash} (99%) rename completions/{git.completion.sh => git.completion.bash} (99%) rename completions/{git_flow.completion.sh => git_flow.completion.bash} (98%) rename completions/{git_flow_avh.completion.sh => git_flow_avh.completion.bash} (99%) rename completions/{go.completion.sh => go.completion.bash} (100%) rename completions/{gradle.completion.sh => gradle.completion.bash} (98%) rename completions/{grunt.completion.sh => grunt.completion.bash} (98%) rename completions/{gulp.completion.sh => gulp.completion.bash} (97%) rename completions/{homesick.completion.sh => homesick.completion.bash} (98%) rename completions/{hub.completion.sh => hub.completion.bash} (100%) rename completions/{jboss7.completion.sh => jboss7.completion.bash} (95%) rename completions/{jungle.completion.sh => jungle.completion.bash} (80%) rename completions/{kontena.completion.sh => kontena.completion.bash} (79%) rename completions/{kubectl.completion.sh => kubectl.completion.bash} (100%) rename completions/{makefile.completion.sh => makefile.completion.bash} (89%) rename completions/{maven.completion.sh => maven.completion.bash} (100%) rename completions/{npm.completion.sh => npm.completion.bash} (100%) rename completions/{nvm.completion.sh => nvm.completion.bash} (100%) rename completions/{packer.completion.sh => packer.completion.bash} (100%) rename completions/{pip.completion.sh => pip.completion.bash} (92%) rename completions/{pip3.completion.sh => pip3.completion.bash} (92%) rename completions/{projects.completion.sh => projects.completion.bash} (97%) rename completions/{rake.completion.sh => rake.completion.bash} (100%) rename completions/{salt.completion.sh => salt.completion.bash} (96%) rename completions/{sdkman.completion.sh => sdkman.completion.bash} (98%) rename completions/{ssh.completion.sh => ssh.completion.bash} (100%) rename completions/{svn.completion.sh => svn.completion.bash} (99%) rename completions/{system.completion.sh => system.completion.bash} (100%) rename completions/{terraform.completion.sh => terraform.completion.bash} (100%) rename completions/{test_kitchen.completion.sh => test_kitchen.completion.bash} (97%) rename completions/{tmux.completion.sh => tmux.completion.bash} (100%) rename completions/{todo.completion.sh => todo.completion.bash} (99%) rename completions/{vagrant.completion.sh => vagrant.completion.bash} (99%) rename completions/{vault.completion.sh => vault.completion.bash} (98%) rename completions/{virtualbox.completion.sh => virtualbox.completion.bash} (100%) delete mode 100644 custom/aliases/example.aliases.sh delete mode 100644 custom/completion/example.completion.sh delete mode 100644 custom/example.sh delete mode 100644 custom/plugins/example/example.plugin.sh delete mode 100644 custom/themes/example/example.theme.sh rename lib/{base.sh => base.bash} (100%) rename lib/{bourne-shell.sh => bourne-shell.bash} (100%) rename lib/{directories.sh => directories.bash} (100%) rename lib/{functions.sh => functions.bash} (100%) rename lib/{git.sh => git.bash} (100%) rename lib/{grep.sh => grep.bash} (100%) rename lib/{history.sh => history.bash} (100%) rename lib/{misc.sh => misc.bash} (100%) rename lib/{mo.sh => mo.bash} (100%) rename lib/{nvm.sh => nvm.bash} (100%) rename lib/{shopt.sh => shopt.bash} (100%) rename lib/{spectrum.sh => spectrum.bash} (100%) rename lib/{spinner.sh => spinner.bash} (100%) rename lib/{theme-and-appearance.sh => theme-and-appearance.bash} (100%) rename lib/{utils.sh => utils.bash} (100%) rename plugins/aws/{aws.plugin.sh => aws.plugin.bash} (95%) rename plugins/bashmarks/{bashmarks.plugin.sh => bashmarks.plugin.bash} (100%) rename plugins/battery/{battery.plugin.sh => battery.plugin.bash} (100%) rename plugins/bu/{bu.plugin.sh => bu.plugin.bash} (100%) rename plugins/git/{git.plugin.sh => git.plugin.bash} (100%) rename plugins/progress/{progress.plugin.sh => progress.plugin.bash} (100%) rename templates/{bashrc.osh-template => bashrc.osh-template.bash} (99%) rename themes/90210/{90210.theme.sh => 90210.theme.bash} (100%) rename themes/agnoster/{agnoster.base.sh => agnoster.base.bash} (100%) rename themes/axin/{axin.theme.sh => axin.theme.bash} (100%) rename themes/bakke/{bakke.theme.sh => bakke.theme.bash} (100%) rename themes/{base.theme.sh => base.theme.bash} (100%) rename themes/binaryanomaly/{binaryanomaly.theme.sh => binaryanomaly.theme.bash} (100%) rename themes/bobby-python/{bobby-python.theme.sh => bobby-python.theme.bash} (100%) rename themes/bobby/{bobby.theme.sh => bobby.theme.bash} (100%) rename themes/brainy/{brainy.theme.sh => brainy.theme.bash} (100%) rename themes/brunton/{brunton.theme.sh => brunton.theme.bash} (100%) rename themes/candy/{candy.theme.sh => candy.theme.bash} (100%) rename themes/clean/{clean.theme.sh => clean.theme.bash} (98%) rename themes/{colours.theme.sh => colours.theme.bash} (100%) rename themes/cooperkid/{cooperkid.theme.sh => cooperkid.theme.bash} (98%) rename themes/cupcake/{cupcake.theme.sh => cupcake.theme.bash} (100%) rename themes/demula/{demula.theme.sh => demula.theme.bash} (100%) create mode 100644 themes/dos/dos.theme.bash delete mode 100644 themes/dos/dos.theme.sh rename themes/doubletime/{doubletime.theme.sh => doubletime.theme.bash} (100%) rename themes/doubletime_multiline/{doubletime_multiline.theme.sh => doubletime_multiline.theme.bash} (100%) rename themes/doubletime_multiline_pyonly/{doubletime_multiline_pyonly.theme.sh => doubletime_multiline_pyonly.theme.bash} (100%) rename themes/dulcie/{dulcie.theme.sh => dulcie.theme.bash} (100%) rename themes/duru/{duru.theme.sh => duru.theme.bash} (100%) rename themes/emperor/{emperor.theme.sh => emperor.theme.bash} (100%) rename themes/envy/{envy.theme.sh => envy.theme.bash} (100%) rename themes/font/{font.theme.sh => font.theme.bash} (100%) rename themes/gallifrey/{gallifrey.theme.sh => gallifrey.theme.bash} (98%) rename themes/hawaii50/{hawaii50.theme.sh => hawaii50.theme.bash} (100%) rename themes/iterate/{iterate.theme.sh => iterate.theme.bash} (100%) rename themes/kitsune/{kitsune.theme.sh => kitsune.theme.bash} (98%) rename themes/luan/{luan.theme.sh => luan.theme.bash} (100%) rename themes/mairan/{mairan.theme.sh => mairan.theme.bash} (99%) rename themes/mbriggs/{mbriggs.theme.sh => mbriggs.theme.bash} (95%) rename themes/minimal/{minimal.theme.sh => minimal.theme.bash} (100%) rename themes/modern-t/{modern-t.theme.sh => modern-t.theme.bash} (98%) rename themes/modern/{modern.theme.sh => modern.theme.bash} (98%) rename themes/morris/{morris.theme.sh => morris.theme.bash} (96%) rename themes/n0qorg/{n0qorg.theme.sh => n0qorg.theme.bash} (100%) rename themes/nwinkler/{nwinkler.theme.sh => nwinkler.theme.bash} (100%) rename themes/nwinkler_random_colors/{nwinkler_random_colors.theme.sh => nwinkler_random_colors.theme.bash} (99%) rename themes/pete/{pete.theme.sh => pete.theme.bash} (100%) rename themes/powerline-multiline/{powerline-multiline.base.sh => powerline-multiline.base.bash} (100%) rename themes/powerline-multiline/{powerline-multiline.theme.sh => powerline-multiline.theme.bash} (100%) rename themes/powerline-naked/{powerline-naked.base.sh => powerline-naked.base.bash} (100%) rename themes/powerline-naked/{powerline-naked.theme.sh => powerline-naked.theme.bash} (100%) rename themes/powerline-plain/{powerline-plain.base.sh => powerline-plain.base.bash} (100%) rename themes/powerline-plain/{powerline-plain.theme.sh => powerline-plain.theme.bash} (100%) rename themes/powerline/{powerline.base.sh => powerline.base.bash} (100%) rename themes/powerline/{powerline.theme.sh => powerline.theme.bash} (100%) rename themes/primer/{primer.theme.sh => primer.theme.bash} (100%) rename themes/pro/{pro.theme.sh => pro.theme.bash} (100%) rename themes/pure/{pure.theme.sh => pure.theme.bash} (94%) rename themes/purity/{purity.theme.sh => purity.theme.bash} (100%) rename themes/rainbowbrite/{rainbowbrite.theme.sh => rainbowbrite.theme.bash} (100%) rename themes/rana/{rana.theme.sh => rana.theme.bash} (100%) rename themes/rjorgenson/{rjorgenson.theme.sh => rjorgenson.theme.bash} (99%) rename themes/roderik/{roderik.theme.sh => roderik.theme.bash} (100%) rename themes/sexy/{sexy.theme.sh => sexy.theme.bash} (98%) rename themes/simple/{simple.theme.sh => simple.theme.bash} (100%) rename themes/sirup/{sirup.theme.sh => sirup.theme.bash} (96%) rename themes/slick/{slick.theme.sh => slick.theme.bash} (98%) rename themes/standard/{standard.theme.sh => standard.theme.bash} (96%) rename themes/tonka/{tonka.theme.sh => tonka.theme.bash} (100%) rename themes/tonotdo/{tonotdo.theme.sh => tonotdo.theme.bash} (100%) rename themes/tylenol/{tylenol.theme.sh => tylenol.theme.bash} (100%) rename themes/wanelo/{wanelo.theme.sh => wanelo.theme.bash} (100%) rename themes/zitron/{zitron.theme.sh => zitron.theme.bash} (100%) rename themes/zork/{zork.theme.sh => zork.theme.bash} (98%) rename tools/{check_for_upgrade.sh => check_for_upgrade.bash} (100%) rename tools/{git-prompt.sh => git-prompt.bash} (99%) rename tools/{install.sh => install.bash} (100%) rename tools/{uninstall.sh => uninstall.bash} (100%) rename tools/{upgrade.sh => upgrade.bash} (100%) diff --git a/README.md b/README.md index 9e089bed7..b56606eea 100644 --- a/README.md +++ b/README.md @@ -25,13 +25,13 @@ Oh My Bash is installed by running one of the following commands in your termina #### via curl ```shell -sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)" +sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.bash)" ``` #### via wget ```shell -sh -c "$(wget https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh -O -)" +sh -c "$(wget https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.bash -O -)" ``` ## Using Oh My Bash diff --git a/aliases/chmod.aliases.sh b/aliases/chmod.aliases.bash similarity index 100% rename from aliases/chmod.aliases.sh rename to aliases/chmod.aliases.bash diff --git a/aliases/general.aliases.sh b/aliases/general.aliases.bash similarity index 100% rename from aliases/general.aliases.sh rename to aliases/general.aliases.bash diff --git a/aliases/ls.aliases.sh b/aliases/ls.aliases.bash similarity index 100% rename from aliases/ls.aliases.sh rename to aliases/ls.aliases.bash diff --git a/aliases/misc.aliases.sh b/aliases/misc.aliases.bash similarity index 100% rename from aliases/misc.aliases.sh rename to aliases/misc.aliases.bash diff --git a/completions/apm.completion.sh b/completions/apm.completion.bash similarity index 100% rename from completions/apm.completion.sh rename to completions/apm.completion.bash diff --git a/completions/awscli.completion.sh b/completions/awscli.completion.bash similarity index 81% rename from completions/awscli.completion.sh rename to completions/awscli.completion.bash index e144cf1f1..e824dfafd 100644 --- a/completions/awscli.completion.sh +++ b/completions/awscli.completion.bash @@ -1 +1,2 @@ +#!/usr/bin/env bash [[ -x "$(which aws_completer)" ]] &>/dev/null && complete -C "$(which aws_completer)" aws diff --git a/completions/brew.completion.sh b/completions/brew.completion.bash similarity index 93% rename from completions/brew.completion.sh rename to completions/brew.completion.bash index 50f6c08d4..6018aa1e7 100644 --- a/completions/brew.completion.sh +++ b/completions/brew.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash if which brew >/dev/null 2>&1; then if [ -f `brew --prefix`/etc/bash_completion ]; then . `brew --prefix`/etc/bash_completion diff --git a/completions/bundler.completion.sh b/completions/bundler.completion.bash similarity index 98% rename from completions/bundler.completion.sh rename to completions/bundler.completion.bash index 274a4a36a..79b86116e 100644 --- a/completions/bundler.completion.sh +++ b/completions/bundler.completion.bash @@ -1,4 +1,4 @@ -#! bash +#!/usr/bin/env bash # bash completion for the `bundle` command. # # Copyright (c) 2011-2013 Daniel Luz . diff --git a/completions/capistrano.completion.sh b/completions/capistrano.completion.bash similarity index 100% rename from completions/capistrano.completion.sh rename to completions/capistrano.completion.bash diff --git a/completions/composer.completion.sh b/completions/composer.completion.bash similarity index 100% rename from completions/composer.completion.sh rename to completions/composer.completion.bash diff --git a/completions/conda.completion.sh b/completions/conda.completion.bash similarity index 100% rename from completions/conda.completion.sh rename to completions/conda.completion.bash diff --git a/completions/defaults.completion.sh b/completions/defaults.completion.bash similarity index 99% rename from completions/defaults.completion.sh rename to completions/defaults.completion.bash index 5a8d0340d..032b0fe4f 100644 --- a/completions/defaults.completion.sh +++ b/completions/defaults.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # defaults # Bash command line completion for defaults # diff --git a/completions/dirs.completion.sh b/completions/dirs.completion.bash similarity index 100% rename from completions/dirs.completion.sh rename to completions/dirs.completion.bash diff --git a/completions/django.completion.sh b/completions/django.completion.bash similarity index 99% rename from completions/django.completion.sh rename to completions/django.completion.bash index 1c3887eba..5e06664e8 100644 --- a/completions/django.completion.sh +++ b/completions/django.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # ######################################################################### # This bash script adds tab-completion feature to django-admin.py and # manage.py. @@ -69,4 +70,3 @@ else fi complete -F _python_django_completion -o default $pythons - diff --git a/completions/docker-compose.completion.sh b/completions/docker-compose.completion.bash similarity index 99% rename from completions/docker-compose.completion.sh rename to completions/docker-compose.completion.bash index 0201bcb28..9904aac93 100644 --- a/completions/docker-compose.completion.sh +++ b/completions/docker-compose.completion.bash @@ -1,4 +1,4 @@ -#!bash +#!/usr/bin/env bash # # bash completion for docker-compose # diff --git a/completions/docker-machine.completion.sh b/completions/docker-machine.completion.bash similarity index 99% rename from completions/docker-machine.completion.sh rename to completions/docker-machine.completion.bash index a1ed9f87e..adf00791c 100644 --- a/completions/docker-machine.completion.sh +++ b/completions/docker-machine.completion.bash @@ -1,4 +1,4 @@ -# +#!/usr/bin/env bash # bash completion file for docker-machine commands # # This script provides completion of: diff --git a/completions/docker.completion.sh b/completions/docker.completion.bash similarity index 99% rename from completions/docker.completion.sh rename to completions/docker.completion.bash index 1495b8541..b84b7ae53 100644 --- a/completions/docker.completion.sh +++ b/completions/docker.completion.bash @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # bash completion file for core docker commands # diff --git a/completions/drush.completion.sh b/completions/drush.completion.bash similarity index 100% rename from completions/drush.completion.sh rename to completions/drush.completion.bash diff --git a/completions/fabric-completion.sh b/completions/fabric-completion.bash similarity index 100% rename from completions/fabric-completion.sh rename to completions/fabric-completion.bash diff --git a/completions/gem.completion.sh b/completions/gem.completion.bash similarity index 100% rename from completions/gem.completion.sh rename to completions/gem.completion.bash diff --git a/completions/gh.completion.sh b/completions/gh.completion.bash similarity index 99% rename from completions/gh.completion.sh rename to completions/gh.completion.bash index c29493822..6689b8b55 100644 --- a/completions/gh.completion.sh +++ b/completions/gh.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # hub tab-completion script for bash. # This script complements the completion script that ships with git. @@ -363,4 +364,3 @@ EOF complete -o bashdefault -o default -o nospace -F _git gh 2>/dev/null \ || complete -o default -o nospace -F _git gh fi - diff --git a/completions/git.completion.sh b/completions/git.completion.bash similarity index 99% rename from completions/git.completion.sh rename to completions/git.completion.bash index e83de0452..1e05c4a79 100644 --- a/completions/git.completion.sh +++ b/completions/git.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # bash/zsh completion support for core Git. # # Copyright (C) 2006,2007 Shawn O. Pearce diff --git a/completions/git_flow.completion.sh b/completions/git_flow.completion.bash similarity index 98% rename from completions/git_flow.completion.sh rename to completions/git_flow.completion.bash index c76d323b5..c0ec7ba3e 100644 --- a/completions/git_flow.completion.sh +++ b/completions/git_flow.completion.bash @@ -1,48 +1,48 @@ -#!bash +#!/usr/bin/env bash # # git-flow-completion # =================== -# +# # Bash completion support for [git-flow](http://github.com/nvie/gitflow) -# +# # The contained completion routines provide support for completing: -# +# # * git-flow init and version # * feature, hotfix and release branches # * remote feature branch names (for `git-flow feature track`) -# -# +# +# # Installation # ------------ -# +# # To achieve git-flow completion nirvana: -# +# # 0. Install git-completion. -# +# # 1. Install this file. Either: -# +# # a. Place it in a `bash-completion.d` folder: -# +# # * /etc/bash-completion.d # * /usr/local/etc/bash-completion.d # * ~/bash-completion.d -# +# # b. Or, copy it somewhere (e.g. ~/.git-flow-completion.sh) and put the following line in # your .bashrc: -# +# # source ~/.git-flow-completion.sh -# +# # 2. If you are using Git < 1.7.1: Edit git-completion.sh and add the following line to the giant # $command case in _git: -# +# # flow) _git_flow ;; -# -# +# +# # The Fine Print # -------------- -# +# # Copyright (c) 2010 [Justin Hileman](http://justinhileman.com) -# +# # Distributed under the [MIT License](http://creativecommons.org/licenses/MIT/) _git_flow () @@ -128,7 +128,7 @@ __git_flow_release () __gitcomp "$subcommands" return fi - + case "$subcommand" in finish) __gitcomp "$(__git_flow_list_releases)" @@ -174,4 +174,4 @@ __git_flow_list_hotfixes () # temporarily wrap __git_find_on_cmdline() for backwards compatibility if [ -z "`type -t __git_find_subcommand`" ]; then alias __git_find_subcommand=__git_find_on_cmdline -fi \ No newline at end of file +fi diff --git a/completions/git_flow_avh.completion.sh b/completions/git_flow_avh.completion.bash similarity index 99% rename from completions/git_flow_avh.completion.sh rename to completions/git_flow_avh.completion.bash index 0b73a0bed..f51ca4cf4 100644 --- a/completions/git_flow_avh.completion.sh +++ b/completions/git_flow_avh.completion.bash @@ -1,4 +1,4 @@ -#!bash +#!/usr/bin/env bash # # git-flow-completion # =================== diff --git a/completions/go.completion.sh b/completions/go.completion.bash similarity index 100% rename from completions/go.completion.sh rename to completions/go.completion.bash diff --git a/completions/gradle.completion.sh b/completions/gradle.completion.bash similarity index 98% rename from completions/gradle.completion.sh rename to completions/gradle.completion.bash index 2f55cadee..b7577c9eb 100644 --- a/completions/gradle.completion.sh +++ b/completions/gradle.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash function __gradle { local cur=${COMP_WORDS[COMP_CWORD]} local tasks='' diff --git a/completions/grunt.completion.sh b/completions/grunt.completion.bash similarity index 98% rename from completions/grunt.completion.sh rename to completions/grunt.completion.bash index 99a96b5b2..2986738a6 100644 --- a/completions/grunt.completion.sh +++ b/completions/grunt.completion.bash @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # grunt-cli # http://gruntjs.com/ diff --git a/completions/gulp.completion.sh b/completions/gulp.completion.bash similarity index 97% rename from completions/gulp.completion.sh rename to completions/gulp.completion.bash index 17e917657..f5559c8e3 100644 --- a/completions/gulp.completion.sh +++ b/completions/gulp.completion.bash @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Borrowed from grunt-cli # http://gruntjs.com/ # diff --git a/completions/homesick.completion.sh b/completions/homesick.completion.bash similarity index 98% rename from completions/homesick.completion.sh rename to completions/homesick.completion.bash index d0ebbba4f..e42bcfb92 100644 --- a/completions/homesick.completion.sh +++ b/completions/homesick.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Bash completion script for homesick # # The homebrew bash completion script was used as inspiration. @@ -57,4 +58,3 @@ _homesick_complete() } complete -o bashdefault -o default -F _homesick_complete homesick - diff --git a/completions/hub.completion.sh b/completions/hub.completion.bash similarity index 100% rename from completions/hub.completion.sh rename to completions/hub.completion.bash diff --git a/completions/jboss7.completion.sh b/completions/jboss7.completion.bash similarity index 95% rename from completions/jboss7.completion.sh rename to completions/jboss7.completion.bash index 66d07179f..106f504ac 100644 --- a/completions/jboss7.completion.sh +++ b/completions/jboss7.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Completions for JBoss Application Server 7 (EAP 6) # VERSION: 0.6 # DATE: 2012-10-30 @@ -14,17 +15,17 @@ _serverProfiles(){ # assume is domain.sh serverdir="../domain/configuration/" fi - + for i in ${!COMP_WORDS[*]} do if [[ "${COMP_WORDS[i]}" == "-Djboss.server.base.dir" || "${COMP_WORDS[i]}" == "-Djboss.domain.base.dir" ]]; then serverdir="${COMP_WORDS[i+2]}/configuration" - fi - + fi + done if [ -d "${serverdir}" ] then - + IFS=$'\n' tmp="$(ls "${serverdir}" | grep xml)" local fls="${tmp[@]// /\ }" unset IFS @@ -42,13 +43,13 @@ _bindingAddress(){ } _jboss(){ - + local cur prev words cword COMPREPLY=() _get_comp_words_by_ref -n = cur prev words cword - + case $cur in - + -Djboss.socket.binding.port-offset=*) cur=${cur#*=} #static list of common bindings sets @@ -70,13 +71,13 @@ _jboss(){ COMPREPLY=( $(compgen -W "${booleans}" -- ${cur}) ) return 0 ;; - + -Djboss.server.base.dir=*|-Djboss.home.dir=*|-Djboss.domain.base.dir=*) cur=${cur#*=} _filedir -d return 0 ;; - + -Djboss.domain.master.address=*|-Djboss.bind.address*=*) cur=${cur#*=} _bindingAddress @@ -85,8 +86,8 @@ _jboss(){ --server-config=*|-c=|--host-config=*) cur=${cur#*=} _serverProfiles - return 0 - + return 0 + esac @@ -110,14 +111,14 @@ _jboss(){ ;; esac # *** from jboss5 ******************** - # *** -modulepath -c -m -g -l -d -p -n -B -L -C -Djboss.platform.mbeanserver -Djboss.server.base.directory + # *** -modulepath -c -m -g -l -d -p -n -B -L -C -Djboss.platform.mbeanserver -Djboss.server.base.directory # *** -Djboss.Domain -Djboss.modcluster.proxyList -Djboss.jvmRoute -Djboss.default.jgroups.stack -Dorg.jboss.ejb3.remoting.IsLocalInterceptor.passByRef -Djboss.platform.mbeanserver -Dcom.sun.management.jmxremote.port -Dcom.sun.management.jmxremote.ssl # ************************************* - + # standard commands for standalone and domain mode local commandsWithoutEqualSign='-b -bmanagement -bunsecure -bpublic --admin-only -h -help -u -version -V -v' local commandsWithEqualSign='-P -Djboss.node.name -Djboss.home.dir -Djboss.socket.binding.port-offset -Djboss.bind.address.management -Djboss.bind.address -Djboss.bind.address.unsecure' - + if [[ $COMP_WORDS == *standalone.sh* ]] then commandsWithoutEqualSign="${commandsWithoutEqualSign} -c" @@ -127,15 +128,15 @@ _jboss(){ commandsWithoutEqualSign="${commandsWithoutEqualSign} --backup --cached-dc" commandsWithEqualSign="${commandsWithEqualSign} -Djboss.domain.master.address --host-config -Djboss.domain.master.port -Djboss.domain.base.dir " fi - - - - COMPREPLY=( $( compgen -W "$commandsWithoutEqualSign" -- "$cur" ) - $( compgen -W "$commandsWithEqualSign" -S '=' -- "$cur" ) ) + + + + COMPREPLY=( $( compgen -W "$commandsWithoutEqualSign" -- "$cur" ) + $( compgen -W "$commandsWithEqualSign" -S '=' -- "$cur" ) ) return 0 - + } complete -o nospace -F _jboss standalone.sh complete -o nospace -F _jboss domain.sh diff --git a/completions/jungle.completion.sh b/completions/jungle.completion.bash similarity index 80% rename from completions/jungle.completion.sh rename to completions/jungle.completion.bash index c7a92b415..d11c5ad73 100644 --- a/completions/jungle.completion.sh +++ b/completions/jungle.completion.bash @@ -1 +1,2 @@ +#!/usr/bin/env bash [[ -x "$(which jungle)" ]] &>/dev/null && eval "$(_JUNGLE_COMPLETE=source jungle)" diff --git a/completions/kontena.completion.sh b/completions/kontena.completion.bash similarity index 79% rename from completions/kontena.completion.sh rename to completions/kontena.completion.bash index 6626b02cd..faa0e1f81 100644 --- a/completions/kontena.completion.sh +++ b/completions/kontena.completion.bash @@ -1 +1,2 @@ +#!/usr/bin/env bash which kontena &> /dev/null && . "$( kontena whoami --bash-completion-path )" diff --git a/completions/kubectl.completion.sh b/completions/kubectl.completion.bash similarity index 100% rename from completions/kubectl.completion.sh rename to completions/kubectl.completion.bash diff --git a/completions/makefile.completion.sh b/completions/makefile.completion.bash similarity index 89% rename from completions/makefile.completion.sh rename to completions/makefile.completion.bash index c2a833ac8..20950ba35 100644 --- a/completions/makefile.completion.sh +++ b/completions/makefile.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Add completion for Makefile # see http://stackoverflow.com/a/38415982/1472048 complete -W "\`grep -oE '^[a-zA-Z0-9_-]+:([^=]|$)' Makefile | sed 's/[^a-zA-Z0-9_-]*$//'\`" make diff --git a/completions/maven.completion.sh b/completions/maven.completion.bash similarity index 100% rename from completions/maven.completion.sh rename to completions/maven.completion.bash diff --git a/completions/npm.completion.sh b/completions/npm.completion.bash similarity index 100% rename from completions/npm.completion.sh rename to completions/npm.completion.bash diff --git a/completions/nvm.completion.sh b/completions/nvm.completion.bash similarity index 100% rename from completions/nvm.completion.sh rename to completions/nvm.completion.bash diff --git a/completions/packer.completion.sh b/completions/packer.completion.bash similarity index 100% rename from completions/packer.completion.sh rename to completions/packer.completion.bash diff --git a/completions/pip.completion.sh b/completions/pip.completion.bash similarity index 92% rename from completions/pip.completion.sh rename to completions/pip.completion.bash index ad3abb7e7..58b1aebaf 100644 --- a/completions/pip.completion.sh +++ b/completions/pip.completion.bash @@ -1,4 +1,4 @@ - +#!/usr/bin/env bash # pip bash completion start _pip_completion() { @@ -8,4 +8,3 @@ _pip_completion() } complete -o default -F _pip_completion pip # pip bash completion end - diff --git a/completions/pip3.completion.sh b/completions/pip3.completion.bash similarity index 92% rename from completions/pip3.completion.sh rename to completions/pip3.completion.bash index 1800756b0..ced4ffb0d 100644 --- a/completions/pip3.completion.sh +++ b/completions/pip3.completion.bash @@ -1,4 +1,4 @@ - +#!/usr/bin/env bash # pip bash completion start _pip_completion() { @@ -8,4 +8,3 @@ _pip_completion() } complete -o default -F _pip_completion pip3 # pip bash completion end - diff --git a/completions/projects.completion.sh b/completions/projects.completion.bash similarity index 97% rename from completions/projects.completion.sh rename to completions/projects.completion.bash index 71d740cdf..a99dff5b6 100644 --- a/completions/projects.completion.sh +++ b/completions/projects.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash _pj() { [ -z "$PROJECT_PATHS" ] && return shift @@ -36,4 +37,3 @@ _pj() { complete -F _pj -o nospace pj complete -F _pj -o nospace pjo - diff --git a/completions/rake.completion.sh b/completions/rake.completion.bash similarity index 100% rename from completions/rake.completion.sh rename to completions/rake.completion.bash diff --git a/completions/salt.completion.sh b/completions/salt.completion.bash similarity index 96% rename from completions/salt.completion.sh rename to completions/salt.completion.bash index e8cb5b255..e3b34df7f 100644 --- a/completions/salt.completion.sh +++ b/completions/salt.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # written by David Pravec # - feel free to /msg alekibango on IRC if you want to talk about this file @@ -13,7 +14,7 @@ _salt_get_grains(){ - if [ "$1" = 'local' ] ; then + if [ "$1" = 'local' ] ; then salt-call --out=txt -- grains.ls | sed 's/^.*\[//' | tr -d ",']" |sed 's:\([a-z0-9]\) :\1\: :g' else salt '*' --timeout 2 --out=txt -- grains.ls | sed 's/^.*\[//' | tr -d ",']" |sed 's:\([a-z0-9]\) :\1\: :g' @@ -22,15 +23,15 @@ _salt_get_grains(){ _salt_get_grain_values(){ if [ "$1" = 'local' ] ; then - salt-call --out=txt -- grains.item $1 |sed 's/^\S*:\s//' |grep -v '^\s*$' + salt-call --out=txt -- grains.item $1 |sed 's/^\S*:\s//' |grep -v '^\s*$' else - salt '*' --timeout 2 --out=txt -- grains.item $1 |sed 's/^\S*:\s//' |grep -v '^\s*$' + salt '*' --timeout 2 --out=txt -- grains.item $1 |sed 's/^\S*:\s//' |grep -v '^\s*$' fi } _salt(){ - local cur prev opts _salt_grains _salt_coms pprev ppprev + local cur prev opts _salt_grains _salt_coms pprev ppprev COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" @@ -58,11 +59,11 @@ _salt(){ case "${pprev}" in -G|--grain|--grain-pcre) if [ "${cur}" = ":" ]; then - COMPREPLY=($(compgen -W "`_salt_get_grain_values ${prev}`" )) + COMPREPLY=($(compgen -W "`_salt_get_grain_values ${prev}`" )) return 0 fi ;; - esac + esac case "${ppprev}" in -G|--grain|--grain-pcre) if [ "${prev}" = ":" ]; then @@ -70,17 +71,17 @@ _salt(){ return 0 fi ;; - esac - + esac + if [ "${cur}" = "=" ] && [[ "${prev}" == --* ]]; then - cur="" + cur="" fi if [ "${prev}" = "=" ] && [[ "${pprev}" == --* ]]; then prev="${pprev}" fi - + case "${prev}" in - + -c|--config) COMPREPLY=($(compgen -f -- ${cur})) return 0 @@ -89,12 +90,12 @@ _salt(){ COMPREPLY=($(compgen -W "\'*\' ${opts} `salt-key --no-color -l acc`" -- ${cur})) return 0 ;; - -E|--pcre) + -E|--pcre) COMPREPLY=($(compgen -W "`salt-key --no-color -l acc`" -- ${cur})) return 0 ;; -G|--grain|--grain-pcre) - COMPREPLY=($(compgen -W "$(_salt_get_grains)" -- ${cur})) + COMPREPLY=($(compgen -W "$(_salt_get_grains)" -- ${cur})) return 0 ;; -C|--compound) @@ -109,10 +110,10 @@ _salt(){ COMPREPLY=($(compgen -W "1 2 3 4 5 6 7 8 9 10 15 20 30 40 50 60 70 80 90 100 120 150 200")) return 0 ;; - -N|--nodegroup) + -N|--nodegroup) MASTER_CONFIG='/etc/salt/master' - COMPREPLY=($(compgen -W "`awk -F ':' 'BEGIN {print_line = 0}; /^nodegroups/ {print_line = 1;getline } print_line && /^ */ {print $1} /^[^ ]/ {print_line = 0}' <${MASTER_CONFIG}`" -- ${cur})) - return 0 + COMPREPLY=($(compgen -W "`awk -F ':' 'BEGIN {print_line = 0}; /^nodegroups/ {print_line = 1;getline } print_line && /^ */ {print $1} /^[^ ]/ {print_line = 0}' <${MASTER_CONFIG}`" -- ${cur})) + return 0 ;; esac @@ -133,8 +134,8 @@ _saltkey(){ prev="${COMP_WORDS[COMP_CWORD-1]}" opts="-c --config-dir= -h --help --version --versions-report -q --quiet \ -y --yes --gen-keys= --gen-keys-dir= --keysize= --key-logfile= \ - -l --list= -L --list-all -a --accept= -A --accept-all \ - -r --reject= -R --reject-all -p --print= -P --print-all \ + -l --list= -L --list-all -a --accept= -A --accept-all \ + -r --reject= -R --reject-all -p --print= -P --print-all \ -d --delete= -D --delete-all -f --finger= -F --finger-all \ --out=pprint --out=yaml --out=overstatestage --out=json --out=raw \ --out=highstate --out=key --out=txt --no-color --out-indent= " @@ -150,13 +151,13 @@ _saltkey(){ fi if [ "${cur}" = "=" ] && [[ "${prev}" == --* ]]; then - cur="" + cur="" fi if [ "${prev}" = "=" ] && [[ "${pprev}" == --* ]]; then prev="${pprev}" fi - case "${prev}" in + case "${prev}" in -a|--accept) COMPREPLY=($(compgen -W "$(salt-key -l un --no-color; salt-key -l rej --no-color)" -- ${cur})) return 0 @@ -177,7 +178,7 @@ _saltkey(){ COMPREPLY=($(compgen -W "2048 3072 4096 5120 6144" -- ${cur})) return 0 ;; - --gen-keys) + --gen-keys) return 0 ;; --gen-keys-dir) @@ -221,14 +222,14 @@ _saltcall(){ COMPREPLY=($(compgen -W "${opts}" -- ${cur})) return 0 fi - + if [ "${cur}" = "=" ] && [[ ${prev} == --* ]]; then cur="" fi if [ "${prev}" = "=" ] && [[ ${pprev} == --* ]]; then prev="${pprev}" fi - + case ${prev} in -m|--module-dirs) COMPREPLY=( $(compgen -d ${cur} )) @@ -262,7 +263,7 @@ _saltcp(){ prev="${COMP_WORDS[COMP_CWORD-1]}" opts="-t --timeout= -s --static -b --batch= --batch-size= \ -h --help --version --versions-report -c --config-dir= \ - -E --pcre -L --list -G --grain --grain-pcre -N --nodegroup \ + -E --pcre -L --list -G --grain --grain-pcre -N --nodegroup \ -R --range -C --compound -I --pillar \ --out=pprint --out=yaml --out=overstatestage --out=json --out=raw \ --out=highstate --out=key --out=txt --no-color --out-indent= " @@ -270,19 +271,19 @@ _saltcp(){ COMPREPLY=($(compgen -W "${opts}" -- ${cur})) return 0 fi - + if [ "${cur}" = "=" ] && [[ "${prev}" == --* ]]; then - cur="" + cur="" fi if [ "${prev}" = "=" ] && [[ "${pprev}" == --* ]]; then prev=${pprev} fi - + case ${prev} in salt-cp) COMPREPLY=($(compgen -W "${opts} `salt-key -l acc --no-color`" -- ${cur})) return 0 - ;; + ;; -t|--timeout) # those numbers are just a hint COMPREPLY=($(compgen -W "2 3 4 8 10 15 20 25 30 40 60 90 120 180 240 300" -- ${cur} )) @@ -303,7 +304,7 @@ _saltcp(){ return 0 ;; -G|--grain|--grain-pcre) - COMPREPLY=($(compgen -W "$(_salt_get_grains)" -- ${cur})) + COMPREPLY=($(compgen -W "$(_salt_get_grains)" -- ${cur})) return 0 ;; # FIXME @@ -320,10 +321,9 @@ _saltcp(){ return 0 ;; esac - + # default is using opts: COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) } complete -F _saltcp salt-cp - diff --git a/completions/sdkman.completion.sh b/completions/sdkman.completion.bash similarity index 98% rename from completions/sdkman.completion.sh rename to completions/sdkman.completion.bash index 95545b87c..92793ce06 100644 --- a/completions/sdkman.completion.sh +++ b/completions/sdkman.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash _sdkman_complete() { local CANDIDATES diff --git a/completions/ssh.completion.sh b/completions/ssh.completion.bash similarity index 100% rename from completions/ssh.completion.sh rename to completions/ssh.completion.bash diff --git a/completions/svn.completion.sh b/completions/svn.completion.bash similarity index 99% rename from completions/svn.completion.sh rename to completions/svn.completion.bash index eabc15c96..2b3d7589b 100644 --- a/completions/svn.completion.sh +++ b/completions/svn.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # ------------------------------------------------------------ # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file diff --git a/completions/system.completion.sh b/completions/system.completion.bash similarity index 100% rename from completions/system.completion.sh rename to completions/system.completion.bash diff --git a/completions/terraform.completion.sh b/completions/terraform.completion.bash similarity index 100% rename from completions/terraform.completion.sh rename to completions/terraform.completion.bash diff --git a/completions/test_kitchen.completion.sh b/completions/test_kitchen.completion.bash similarity index 97% rename from completions/test_kitchen.completion.sh rename to completions/test_kitchen.completion.bash index 2420aab00..4bf2ecea0 100644 --- a/completions/test_kitchen.completion.sh +++ b/completions/test_kitchen.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash __kitchen_instance_list () { # cache to .kitchen.list.yml if [[ .kitchen.yml -nt .kitchen.list.yml || .kitchen.local.yml -nt .kitchen.list.yml ]]; then @@ -28,4 +29,3 @@ __kitchen_options () { esac } complete -F __kitchen_options kitchen - diff --git a/completions/tmux.completion.sh b/completions/tmux.completion.bash similarity index 100% rename from completions/tmux.completion.sh rename to completions/tmux.completion.bash diff --git a/completions/todo.completion.sh b/completions/todo.completion.bash similarity index 99% rename from completions/todo.completion.sh rename to completions/todo.completion.bash index 6e38c6f51..bee4d0b6b 100644 --- a/completions/todo.completion.sh +++ b/completions/todo.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # link: https://github.com/ginatrapani/todo.txt-cli/blob/master/todo_completion _todo() diff --git a/completions/vagrant.completion.sh b/completions/vagrant.completion.bash similarity index 99% rename from completions/vagrant.completion.sh rename to completions/vagrant.completion.bash index e0abb7afd..70edabc68 100644 --- a/completions/vagrant.completion.sh +++ b/completions/vagrant.completion.bash @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # (The MIT License) # diff --git a/completions/vault.completion.sh b/completions/vault.completion.bash similarity index 98% rename from completions/vault.completion.sh rename to completions/vault.completion.bash index f0c747c1d..78e5a34a4 100644 --- a/completions/vault.completion.sh +++ b/completions/vault.completion.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # --------------------------------------------------------------------------- # vault-bash-completion # diff --git a/completions/virtualbox.completion.sh b/completions/virtualbox.completion.bash similarity index 100% rename from completions/virtualbox.completion.sh rename to completions/virtualbox.completion.bash diff --git a/custom/aliases/example.aliases.sh b/custom/aliases/example.aliases.sh deleted file mode 100644 index f980ab709..000000000 --- a/custom/aliases/example.aliases.sh +++ /dev/null @@ -1,2 +0,0 @@ -# Add your own custom alias in the custom/aliases directory. Aliases placed -# here will override ones with the same name in the main alias directory. diff --git a/custom/completion/example.completion.sh b/custom/completion/example.completion.sh deleted file mode 100644 index 8d6989880..000000000 --- a/custom/completion/example.completion.sh +++ /dev/null @@ -1,2 +0,0 @@ -# Add your own custom completion in the custom/completion directory. Completions placed -# here will override ones with the same name in the main completion directory. diff --git a/custom/example.sh b/custom/example.sh deleted file mode 100644 index 841484978..000000000 --- a/custom/example.sh +++ /dev/null @@ -1,10 +0,0 @@ -# You can put files here to add functionality separated per file, which -# will be ignored by git. -# Files on the custom/ directory will be automatically loaded by the init -# script, in alphabetical order. - -# For example: add yourself some shortcuts to projects you often work on. -# -# brainstormr=~/workspace/projects/m2/brainstormr -# cd $brainstormr -# diff --git a/custom/plugins/example/example.plugin.sh b/custom/plugins/example/example.plugin.sh deleted file mode 100644 index 406f27445..000000000 --- a/custom/plugins/example/example.plugin.sh +++ /dev/null @@ -1,2 +0,0 @@ -# Add your own custom plugins in the custom/plugins directory. Plugins placed -# here will override ones with the same name in the main plugins directory. diff --git a/custom/themes/example/example.theme.sh b/custom/themes/example/example.theme.sh deleted file mode 100644 index 553df97bb..000000000 --- a/custom/themes/example/example.theme.sh +++ /dev/null @@ -1,2 +0,0 @@ -# Add your own custom themes in the custom/themes directory. Themes placed -# here will override ones with the same name in the main themes directory. diff --git a/lib/base.sh b/lib/base.bash similarity index 100% rename from lib/base.sh rename to lib/base.bash diff --git a/lib/bourne-shell.sh b/lib/bourne-shell.bash similarity index 100% rename from lib/bourne-shell.sh rename to lib/bourne-shell.bash diff --git a/lib/directories.sh b/lib/directories.bash similarity index 100% rename from lib/directories.sh rename to lib/directories.bash diff --git a/lib/functions.sh b/lib/functions.bash similarity index 100% rename from lib/functions.sh rename to lib/functions.bash diff --git a/lib/git.sh b/lib/git.bash similarity index 100% rename from lib/git.sh rename to lib/git.bash diff --git a/lib/grep.sh b/lib/grep.bash similarity index 100% rename from lib/grep.sh rename to lib/grep.bash diff --git a/lib/history.sh b/lib/history.bash similarity index 100% rename from lib/history.sh rename to lib/history.bash diff --git a/lib/misc.sh b/lib/misc.bash similarity index 100% rename from lib/misc.sh rename to lib/misc.bash diff --git a/lib/mo.sh b/lib/mo.bash similarity index 100% rename from lib/mo.sh rename to lib/mo.bash diff --git a/lib/nvm.sh b/lib/nvm.bash similarity index 100% rename from lib/nvm.sh rename to lib/nvm.bash diff --git a/lib/shopt.sh b/lib/shopt.bash similarity index 100% rename from lib/shopt.sh rename to lib/shopt.bash diff --git a/lib/spectrum.sh b/lib/spectrum.bash similarity index 100% rename from lib/spectrum.sh rename to lib/spectrum.bash diff --git a/lib/spinner.sh b/lib/spinner.bash similarity index 100% rename from lib/spinner.sh rename to lib/spinner.bash diff --git a/lib/theme-and-appearance.sh b/lib/theme-and-appearance.bash similarity index 100% rename from lib/theme-and-appearance.sh rename to lib/theme-and-appearance.bash diff --git a/lib/utils.sh b/lib/utils.bash similarity index 100% rename from lib/utils.sh rename to lib/utils.bash diff --git a/plugins/aws/aws.plugin.sh b/plugins/aws/aws.plugin.bash similarity index 95% rename from plugins/aws/aws.plugin.sh rename to plugins/aws/aws.plugin.bash index a74ed8618..b1f4cb430 100644 --- a/plugins/aws/aws.plugin.sh +++ b/plugins/aws/aws.plugin.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # aws.plugin.sh # Author: Michael Anckaert # Based on oh-my-zsh AWS plugin diff --git a/plugins/bashmarks/bashmarks.plugin.sh b/plugins/bashmarks/bashmarks.plugin.bash similarity index 100% rename from plugins/bashmarks/bashmarks.plugin.sh rename to plugins/bashmarks/bashmarks.plugin.bash diff --git a/plugins/battery/battery.plugin.sh b/plugins/battery/battery.plugin.bash similarity index 100% rename from plugins/battery/battery.plugin.sh rename to plugins/battery/battery.plugin.bash diff --git a/plugins/bu/bu.plugin.sh b/plugins/bu/bu.plugin.bash similarity index 100% rename from plugins/bu/bu.plugin.sh rename to plugins/bu/bu.plugin.bash diff --git a/plugins/git/git.plugin.sh b/plugins/git/git.plugin.bash similarity index 100% rename from plugins/git/git.plugin.sh rename to plugins/git/git.plugin.bash diff --git a/plugins/progress/progress.plugin.sh b/plugins/progress/progress.plugin.bash similarity index 100% rename from plugins/progress/progress.plugin.sh rename to plugins/progress/progress.plugin.bash diff --git a/templates/bashrc.osh-template b/templates/bashrc.osh-template.bash similarity index 99% rename from templates/bashrc.osh-template rename to templates/bashrc.osh-template.bash index ce4ca9586..0352ea6f4 100644 --- a/templates/bashrc.osh-template +++ b/templates/bashrc.osh-template.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Path to your oh-my-bash installation. export OSH=$HOME/.oh-my-bash diff --git a/themes/90210/90210.theme.sh b/themes/90210/90210.theme.bash similarity index 100% rename from themes/90210/90210.theme.sh rename to themes/90210/90210.theme.bash diff --git a/themes/agnoster/agnoster.base.sh b/themes/agnoster/agnoster.base.bash similarity index 100% rename from themes/agnoster/agnoster.base.sh rename to themes/agnoster/agnoster.base.bash diff --git a/themes/axin/axin.theme.sh b/themes/axin/axin.theme.bash similarity index 100% rename from themes/axin/axin.theme.sh rename to themes/axin/axin.theme.bash diff --git a/themes/bakke/bakke.theme.sh b/themes/bakke/bakke.theme.bash similarity index 100% rename from themes/bakke/bakke.theme.sh rename to themes/bakke/bakke.theme.bash diff --git a/themes/base.theme.sh b/themes/base.theme.bash similarity index 100% rename from themes/base.theme.sh rename to themes/base.theme.bash diff --git a/themes/binaryanomaly/binaryanomaly.theme.sh b/themes/binaryanomaly/binaryanomaly.theme.bash similarity index 100% rename from themes/binaryanomaly/binaryanomaly.theme.sh rename to themes/binaryanomaly/binaryanomaly.theme.bash diff --git a/themes/bobby-python/bobby-python.theme.sh b/themes/bobby-python/bobby-python.theme.bash similarity index 100% rename from themes/bobby-python/bobby-python.theme.sh rename to themes/bobby-python/bobby-python.theme.bash diff --git a/themes/bobby/bobby.theme.sh b/themes/bobby/bobby.theme.bash similarity index 100% rename from themes/bobby/bobby.theme.sh rename to themes/bobby/bobby.theme.bash diff --git a/themes/brainy/brainy.theme.sh b/themes/brainy/brainy.theme.bash similarity index 100% rename from themes/brainy/brainy.theme.sh rename to themes/brainy/brainy.theme.bash diff --git a/themes/brunton/brunton.theme.sh b/themes/brunton/brunton.theme.bash similarity index 100% rename from themes/brunton/brunton.theme.sh rename to themes/brunton/brunton.theme.bash diff --git a/themes/candy/candy.theme.sh b/themes/candy/candy.theme.bash similarity index 100% rename from themes/candy/candy.theme.sh rename to themes/candy/candy.theme.bash diff --git a/themes/clean/clean.theme.sh b/themes/clean/clean.theme.bash similarity index 98% rename from themes/clean/clean.theme.sh rename to themes/clean/clean.theme.bash index b4cd7b583..7eb5d07b2 100644 --- a/themes/clean/clean.theme.sh +++ b/themes/clean/clean.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # git theming ZSH_THEME_GIT_PROMPT_PREFIX="${bold_blue}(${yellow}%B" ZSH_THEME_GIT_PROMPT_SUFFIX="%b${bold_blue})${reset_color} " diff --git a/themes/colours.theme.sh b/themes/colours.theme.bash similarity index 100% rename from themes/colours.theme.sh rename to themes/colours.theme.bash diff --git a/themes/cooperkid/cooperkid.theme.sh b/themes/cooperkid/cooperkid.theme.bash similarity index 98% rename from themes/cooperkid/cooperkid.theme.sh rename to themes/cooperkid/cooperkid.theme.bash index 1ffb95aa4..2b832038e 100644 --- a/themes/cooperkid/cooperkid.theme.sh +++ b/themes/cooperkid/cooperkid.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # ------------------------------------------------------------------# # FILE: cooperkid.zsh-theme # # BY: Alfredo Bejarano # diff --git a/themes/cupcake/cupcake.theme.sh b/themes/cupcake/cupcake.theme.bash similarity index 100% rename from themes/cupcake/cupcake.theme.sh rename to themes/cupcake/cupcake.theme.bash diff --git a/themes/demula/demula.theme.sh b/themes/demula/demula.theme.bash similarity index 100% rename from themes/demula/demula.theme.sh rename to themes/demula/demula.theme.bash diff --git a/themes/dos/dos.theme.bash b/themes/dos/dos.theme.bash new file mode 100644 index 000000000..ff52da824 --- /dev/null +++ b/themes/dos/dos.theme.bash @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +PROMPT="\w>>" diff --git a/themes/dos/dos.theme.sh b/themes/dos/dos.theme.sh deleted file mode 100644 index 17f0cff64..000000000 --- a/themes/dos/dos.theme.sh +++ /dev/null @@ -1 +0,0 @@ -PROMPT="\w>>" diff --git a/themes/doubletime/doubletime.theme.sh b/themes/doubletime/doubletime.theme.bash similarity index 100% rename from themes/doubletime/doubletime.theme.sh rename to themes/doubletime/doubletime.theme.bash diff --git a/themes/doubletime_multiline/doubletime_multiline.theme.sh b/themes/doubletime_multiline/doubletime_multiline.theme.bash similarity index 100% rename from themes/doubletime_multiline/doubletime_multiline.theme.sh rename to themes/doubletime_multiline/doubletime_multiline.theme.bash diff --git a/themes/doubletime_multiline_pyonly/doubletime_multiline_pyonly.theme.sh b/themes/doubletime_multiline_pyonly/doubletime_multiline_pyonly.theme.bash similarity index 100% rename from themes/doubletime_multiline_pyonly/doubletime_multiline_pyonly.theme.sh rename to themes/doubletime_multiline_pyonly/doubletime_multiline_pyonly.theme.bash diff --git a/themes/dulcie/dulcie.theme.sh b/themes/dulcie/dulcie.theme.bash similarity index 100% rename from themes/dulcie/dulcie.theme.sh rename to themes/dulcie/dulcie.theme.bash diff --git a/themes/duru/duru.theme.sh b/themes/duru/duru.theme.bash similarity index 100% rename from themes/duru/duru.theme.sh rename to themes/duru/duru.theme.bash diff --git a/themes/emperor/emperor.theme.sh b/themes/emperor/emperor.theme.bash similarity index 100% rename from themes/emperor/emperor.theme.sh rename to themes/emperor/emperor.theme.bash diff --git a/themes/envy/envy.theme.sh b/themes/envy/envy.theme.bash similarity index 100% rename from themes/envy/envy.theme.sh rename to themes/envy/envy.theme.bash diff --git a/themes/font/font.theme.sh b/themes/font/font.theme.bash similarity index 100% rename from themes/font/font.theme.sh rename to themes/font/font.theme.bash diff --git a/themes/gallifrey/gallifrey.theme.sh b/themes/gallifrey/gallifrey.theme.bash similarity index 98% rename from themes/gallifrey/gallifrey.theme.sh rename to themes/gallifrey/gallifrey.theme.bash index ddb89778c..3544ec0ae 100644 --- a/themes/gallifrey/gallifrey.theme.sh +++ b/themes/gallifrey/gallifrey.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # scm theming SCM_THEME_PROMPT_PREFIX="${yellow}(" SCM_THEME_PROMPT_SUFFIX=")${normal}" diff --git a/themes/hawaii50/hawaii50.theme.sh b/themes/hawaii50/hawaii50.theme.bash similarity index 100% rename from themes/hawaii50/hawaii50.theme.sh rename to themes/hawaii50/hawaii50.theme.bash diff --git a/themes/iterate/iterate.theme.sh b/themes/iterate/iterate.theme.bash similarity index 100% rename from themes/iterate/iterate.theme.sh rename to themes/iterate/iterate.theme.bash diff --git a/themes/kitsune/kitsune.theme.sh b/themes/kitsune/kitsune.theme.bash similarity index 98% rename from themes/kitsune/kitsune.theme.sh rename to themes/kitsune/kitsune.theme.bash index c339f54c4..235e153ae 100644 --- a/themes/kitsune/kitsune.theme.sh +++ b/themes/kitsune/kitsune.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # This is combination of works from two different people which I combined for my requirement. # Original PS1 was from reddit user /u/Allevil669 which I found in thread: https://www.reddit.com/r/linux/comments/1z33lj/linux_users_whats_your_favourite_bash_prompt/ # I used that PS1 to the bash-it theme 'morris', and customized it to my liking. All credits to /u/Allevil669 and morris. diff --git a/themes/luan/luan.theme.sh b/themes/luan/luan.theme.bash similarity index 100% rename from themes/luan/luan.theme.sh rename to themes/luan/luan.theme.bash diff --git a/themes/mairan/mairan.theme.sh b/themes/mairan/mairan.theme.bash similarity index 99% rename from themes/mairan/mairan.theme.sh rename to themes/mairan/mairan.theme.bash index 5c5dfef17..22e788b3c 100644 --- a/themes/mairan/mairan.theme.sh +++ b/themes/mairan/mairan.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Mairan Bash Prompt, inspired by "Zork" if tput setaf 1 &> /dev/null; then diff --git a/themes/mbriggs/mbriggs.theme.sh b/themes/mbriggs/mbriggs.theme.bash similarity index 95% rename from themes/mbriggs/mbriggs.theme.sh rename to themes/mbriggs/mbriggs.theme.bash index 169f8d7c4..c055040c3 100644 --- a/themes/mbriggs/mbriggs.theme.sh +++ b/themes/mbriggs/mbriggs.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # ------------------------------------------------------------------# # FILE: mbriggs.zsh-theme # # BY: Matt Briggs (matt@mattbriggs.net) # @@ -31,4 +32,4 @@ function prompt() { PS1="\n${n_commands} ${user_host} ${prompt_symbol} ${ruby} ${open}${current_path}${git_branch}${close}${return_status}\n${prompt_char}" } -safe_append_prompt_command prompt \ No newline at end of file +safe_append_prompt_command prompt diff --git a/themes/minimal/minimal.theme.sh b/themes/minimal/minimal.theme.bash similarity index 100% rename from themes/minimal/minimal.theme.sh rename to themes/minimal/minimal.theme.bash diff --git a/themes/modern-t/modern-t.theme.sh b/themes/modern-t/modern-t.theme.bash similarity index 98% rename from themes/modern-t/modern-t.theme.sh rename to themes/modern-t/modern-t.theme.bash index da5f9446a..fa3a4cad2 100644 --- a/themes/modern-t/modern-t.theme.sh +++ b/themes/modern-t/modern-t.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash SCM_THEME_PROMPT_PREFIX="" SCM_THEME_PROMPT_SUFFIX="" diff --git a/themes/modern/modern.theme.sh b/themes/modern/modern.theme.bash similarity index 98% rename from themes/modern/modern.theme.sh rename to themes/modern/modern.theme.bash index 583764e29..6e78b6d2d 100644 --- a/themes/modern/modern.theme.sh +++ b/themes/modern/modern.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash SCM_THEME_PROMPT_PREFIX="" SCM_THEME_PROMPT_SUFFIX="" diff --git a/themes/morris/morris.theme.sh b/themes/morris/morris.theme.bash similarity index 96% rename from themes/morris/morris.theme.sh rename to themes/morris/morris.theme.bash index d6b0258dc..046672436 100644 --- a/themes/morris/morris.theme.sh +++ b/themes/morris/morris.theme.bash @@ -1,4 +1,4 @@ - +#!/usr/bin/env bash # prompt theming # added TITLEBAR for updating the tab and window titles with the pwd diff --git a/themes/n0qorg/n0qorg.theme.sh b/themes/n0qorg/n0qorg.theme.bash similarity index 100% rename from themes/n0qorg/n0qorg.theme.sh rename to themes/n0qorg/n0qorg.theme.bash diff --git a/themes/nwinkler/nwinkler.theme.sh b/themes/nwinkler/nwinkler.theme.bash similarity index 100% rename from themes/nwinkler/nwinkler.theme.sh rename to themes/nwinkler/nwinkler.theme.bash diff --git a/themes/nwinkler_random_colors/nwinkler_random_colors.theme.sh b/themes/nwinkler_random_colors/nwinkler_random_colors.theme.bash similarity index 99% rename from themes/nwinkler_random_colors/nwinkler_random_colors.theme.sh rename to themes/nwinkler_random_colors/nwinkler_random_colors.theme.bash index 9e0d177b3..3c15e4bd7 100644 --- a/themes/nwinkler_random_colors/nwinkler_random_colors.theme.sh +++ b/themes/nwinkler_random_colors/nwinkler_random_colors.theme.bash @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # Two line prompt showing the following information: # (time) SCM [username@hostname] pwd (SCM branch SCM status) diff --git a/themes/pete/pete.theme.sh b/themes/pete/pete.theme.bash similarity index 100% rename from themes/pete/pete.theme.sh rename to themes/pete/pete.theme.bash diff --git a/themes/powerline-multiline/powerline-multiline.base.sh b/themes/powerline-multiline/powerline-multiline.base.bash similarity index 100% rename from themes/powerline-multiline/powerline-multiline.base.sh rename to themes/powerline-multiline/powerline-multiline.base.bash diff --git a/themes/powerline-multiline/powerline-multiline.theme.sh b/themes/powerline-multiline/powerline-multiline.theme.bash similarity index 100% rename from themes/powerline-multiline/powerline-multiline.theme.sh rename to themes/powerline-multiline/powerline-multiline.theme.bash diff --git a/themes/powerline-naked/powerline-naked.base.sh b/themes/powerline-naked/powerline-naked.base.bash similarity index 100% rename from themes/powerline-naked/powerline-naked.base.sh rename to themes/powerline-naked/powerline-naked.base.bash diff --git a/themes/powerline-naked/powerline-naked.theme.sh b/themes/powerline-naked/powerline-naked.theme.bash similarity index 100% rename from themes/powerline-naked/powerline-naked.theme.sh rename to themes/powerline-naked/powerline-naked.theme.bash diff --git a/themes/powerline-plain/powerline-plain.base.sh b/themes/powerline-plain/powerline-plain.base.bash similarity index 100% rename from themes/powerline-plain/powerline-plain.base.sh rename to themes/powerline-plain/powerline-plain.base.bash diff --git a/themes/powerline-plain/powerline-plain.theme.sh b/themes/powerline-plain/powerline-plain.theme.bash similarity index 100% rename from themes/powerline-plain/powerline-plain.theme.sh rename to themes/powerline-plain/powerline-plain.theme.bash diff --git a/themes/powerline/powerline.base.sh b/themes/powerline/powerline.base.bash similarity index 100% rename from themes/powerline/powerline.base.sh rename to themes/powerline/powerline.base.bash diff --git a/themes/powerline/powerline.theme.sh b/themes/powerline/powerline.theme.bash similarity index 100% rename from themes/powerline/powerline.theme.sh rename to themes/powerline/powerline.theme.bash diff --git a/themes/primer/primer.theme.sh b/themes/primer/primer.theme.bash similarity index 100% rename from themes/primer/primer.theme.sh rename to themes/primer/primer.theme.bash diff --git a/themes/pro/pro.theme.sh b/themes/pro/pro.theme.bash similarity index 100% rename from themes/pro/pro.theme.sh rename to themes/pro/pro.theme.bash diff --git a/themes/pure/pure.theme.sh b/themes/pure/pure.theme.bash similarity index 94% rename from themes/pure/pure.theme.sh rename to themes/pure/pure.theme.bash index b75d3f8f3..d59f9177a 100644 --- a/themes/pure/pure.theme.sh +++ b/themes/pure/pure.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # scm theming SCM_THEME_PROMPT_PREFIX="|" SCM_THEME_PROMPT_SUFFIX="" @@ -14,13 +15,13 @@ SCM_HG_CHAR="${bold_red}☿${normal}" # export LS_COLORS='no=00:fi=00:di=01;34:ln=00;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=41;33;01:ex=00;32:*.cmd=00;32:*.exe=01;32:*.com=01;32:*.bat=01;32:*.btm=01;32:*.dll=01;32:*.tar=00;31:*.tbz=00;31:*.tgz=00;31:*.rpm=00;31:*.deb=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.lzma=00;31:*.zip=00;31:*.zoo=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.tb2=00;31:*.tz2=00;31:*.tbz2=00;31:*.avi=01;35:*.bmp=01;35:*.fli=01;35:*.gif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mng=01;35:*.mov=01;35:*.mpg=01;35:*.pcx=01;35:*.pbm=01;35:*.pgm=01;35:*.png=01;35:*.ppm=01;35:*.tga=01;35:*.tif=01;35:*.xbm=01;35:*.xpm=01;35:*.dl=01;35:*.gl=01;35:*.wmv=01;35:*.aiff=00;32:*.au=00;32:*.mid=00;32:*.mp3=00;32:*.ogg=00;32:*.voc=00;32:*.wav=00;32:' scm_prompt() { - CHAR=$(scm_char) - if [ $CHAR = $SCM_NONE_CHAR ] - then + CHAR=$(scm_char) + if [ $CHAR = $SCM_NONE_CHAR ] + then return - else + else echo "[$(scm_char)$(scm_prompt_info)]" - fi + fi } pure_prompt() { diff --git a/themes/purity/purity.theme.sh b/themes/purity/purity.theme.bash similarity index 100% rename from themes/purity/purity.theme.sh rename to themes/purity/purity.theme.bash diff --git a/themes/rainbowbrite/rainbowbrite.theme.sh b/themes/rainbowbrite/rainbowbrite.theme.bash similarity index 100% rename from themes/rainbowbrite/rainbowbrite.theme.sh rename to themes/rainbowbrite/rainbowbrite.theme.bash diff --git a/themes/rana/rana.theme.sh b/themes/rana/rana.theme.bash similarity index 100% rename from themes/rana/rana.theme.sh rename to themes/rana/rana.theme.bash diff --git a/themes/rjorgenson/rjorgenson.theme.sh b/themes/rjorgenson/rjorgenson.theme.bash similarity index 99% rename from themes/rjorgenson/rjorgenson.theme.sh rename to themes/rjorgenson/rjorgenson.theme.bash index e866f0ea4..463e53835 100644 --- a/themes/rjorgenson/rjorgenson.theme.sh +++ b/themes/rjorgenson/rjorgenson.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # port of zork theme # set colors for use throughout the prompt diff --git a/themes/roderik/roderik.theme.sh b/themes/roderik/roderik.theme.bash similarity index 100% rename from themes/roderik/roderik.theme.sh rename to themes/roderik/roderik.theme.bash diff --git a/themes/sexy/sexy.theme.sh b/themes/sexy/sexy.theme.bash similarity index 98% rename from themes/sexy/sexy.theme.sh rename to themes/sexy/sexy.theme.bash index 60e00ec70..a1e78d70c 100644 --- a/themes/sexy/sexy.theme.sh +++ b/themes/sexy/sexy.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # Sexy Bash Prompt, inspired by "Extravagant Zsh Prompt" # Screenshot: http://cloud.gf3.ca/M5rG # A big thanks to \amethyst on Freenode diff --git a/themes/simple/simple.theme.sh b/themes/simple/simple.theme.bash similarity index 100% rename from themes/simple/simple.theme.sh rename to themes/simple/simple.theme.bash diff --git a/themes/sirup/sirup.theme.sh b/themes/sirup/sirup.theme.bash similarity index 96% rename from themes/sirup/sirup.theme.sh rename to themes/sirup/sirup.theme.bash index 38fcab415..d95bc731b 100644 --- a/themes/sirup/sirup.theme.sh +++ b/themes/sirup/sirup.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # For unstaged(*) and staged(+) values next to branch name in __git_ps1 GIT_PS1_SHOWDIRTYSTATE="enabled" @@ -13,7 +14,7 @@ function rvm_version_prompt { [ "$full" != "" ] && echo "$full" } - + function prompt_command() { # Check http://github.com/Sirupsen/dotfiles for screenshot PS1="$blue\W/$bold_blue$(rvm_version_prompt)$bold_green$(__git_ps1 " (%s)") ${normal}$ " diff --git a/themes/slick/slick.theme.sh b/themes/slick/slick.theme.bash similarity index 98% rename from themes/slick/slick.theme.sh rename to themes/slick/slick.theme.bash index aafdc25d1..45acded2f 100644 --- a/themes/slick/slick.theme.sh +++ b/themes/slick/slick.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash SCM_THEME_PROMPT_PREFIX="" SCM_THEME_PROMPT_SUFFIX="" diff --git a/themes/standard/standard.theme.sh b/themes/standard/standard.theme.bash similarity index 96% rename from themes/standard/standard.theme.sh rename to themes/standard/standard.theme.bash index 561a97cbe..9e428aa29 100644 --- a/themes/standard/standard.theme.sh +++ b/themes/standard/standard.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # scm themeing SCM_THEME_PROMPT_DIRTY="×" SCM_THEME_PROMPT_CLEAN="✓" diff --git a/themes/tonka/tonka.theme.sh b/themes/tonka/tonka.theme.bash similarity index 100% rename from themes/tonka/tonka.theme.sh rename to themes/tonka/tonka.theme.bash diff --git a/themes/tonotdo/tonotdo.theme.sh b/themes/tonotdo/tonotdo.theme.bash similarity index 100% rename from themes/tonotdo/tonotdo.theme.sh rename to themes/tonotdo/tonotdo.theme.bash diff --git a/themes/tylenol/tylenol.theme.sh b/themes/tylenol/tylenol.theme.bash similarity index 100% rename from themes/tylenol/tylenol.theme.sh rename to themes/tylenol/tylenol.theme.bash diff --git a/themes/wanelo/wanelo.theme.sh b/themes/wanelo/wanelo.theme.bash similarity index 100% rename from themes/wanelo/wanelo.theme.sh rename to themes/wanelo/wanelo.theme.bash diff --git a/themes/zitron/zitron.theme.sh b/themes/zitron/zitron.theme.bash similarity index 100% rename from themes/zitron/zitron.theme.sh rename to themes/zitron/zitron.theme.bash diff --git a/themes/zork/zork.theme.sh b/themes/zork/zork.theme.bash similarity index 98% rename from themes/zork/zork.theme.sh rename to themes/zork/zork.theme.bash index 75bc17d6c..adf5980dd 100644 --- a/themes/zork/zork.theme.sh +++ b/themes/zork/zork.theme.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash SCM_THEME_PROMPT_PREFIX="" SCM_THEME_PROMPT_SUFFIX="" @@ -49,7 +50,7 @@ modern_scm_prompt() { # show chroot if exist chroot(){ if [ -n "$debian_chroot" ] - then + then my_ps_chroot="${bold_cyan}$debian_chroot${normal}"; echo "($my_ps_chroot)"; fi @@ -58,7 +59,7 @@ chroot(){ # show virtualenvwrapper my_ve(){ if [ -n "$VIRTUAL_ENV" ] - then + then my_ps_ve="${bold_purple}$ve${normal}"; echo "($my_ps_ve)"; fi @@ -70,7 +71,7 @@ prompt() { my_ps_host="${green}\h${normal}"; # yes, these are the the same for now ... my_ps_host_root="${green}\h${normal}"; - + my_ps_user="${bold_green}\u${normal}" my_ps_root="${bold_red}\u${normal}"; diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.bash similarity index 100% rename from tools/check_for_upgrade.sh rename to tools/check_for_upgrade.bash diff --git a/tools/git-prompt.sh b/tools/git-prompt.bash similarity index 99% rename from tools/git-prompt.sh rename to tools/git-prompt.bash index c6cbef38c..3ecfd6ce9 100644 --- a/tools/git-prompt.sh +++ b/tools/git-prompt.bash @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # bash/zsh git prompt support # # Copyright (C) 2006,2007 Shawn O. Pearce diff --git a/tools/install.sh b/tools/install.bash similarity index 100% rename from tools/install.sh rename to tools/install.bash diff --git a/tools/uninstall.sh b/tools/uninstall.bash similarity index 100% rename from tools/uninstall.sh rename to tools/uninstall.bash diff --git a/tools/upgrade.sh b/tools/upgrade.bash similarity index 100% rename from tools/upgrade.sh rename to tools/upgrade.bash From 161854de3d7939c80e62e7665c8fde14e2a95858 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Wed, 24 Jul 2019 12:57:28 +0200 Subject: [PATCH 12/27] Replace .sh with .bash in all files --- .gitignore | 6 +- README.md | 6 +- completions/brew.completion.bash | 4 +- completions/docker-compose.completion.bash | 4 +- completions/docker-machine.completion.bash | 4 +- completions/docker.completion.bash | 4 +- completions/drush.completion.bash | 2 +- completions/git.completion.bash | 12 ++-- completions/git_flow.completion.bash | 6 +- completions/git_flow_avh.completion.bash | 6 +- completions/jboss7.completion.bash | 12 ++-- completions/system.completion.bash | 4 +- completions/tmux.completion.bash | 2 +- completions/todo.completion.bash | 4 +- lib/base.bash | 2 +- lib/functions.bash | 4 +- lib/nvm.bash | 2 +- lib/utils.bash | 2 +- oh-my-bash.bash | 56 +++++++++---------- plugins/aws/aws.plugin.bash | 2 +- plugins/bu/bu.plugin.bash | 2 +- plugins/git/README.md | 2 +- templates/bashrc.osh-template.bash | 2 +- themes/agnoster/README.md | 2 +- themes/agnoster/agnoster.base.bash | 2 +- themes/brainy/brainy.theme.bash | 6 +- themes/demula/demula.theme.bash | 2 +- .../doubletime_multiline.theme.bash | 2 +- .../doubletime_multiline_pyonly.theme.bash | 2 +- themes/powerline-multiline/README.md | 2 +- .../powerline-multiline.base.bash | 2 +- .../powerline-multiline.theme.bash | 2 +- themes/powerline-naked/README.md | 2 +- .../powerline-naked/powerline-naked.base.bash | 2 +- .../powerline-naked.theme.bash | 2 +- themes/powerline-plain/README.md | 2 +- .../powerline-plain/powerline-plain.base.bash | 2 +- .../powerline-plain.theme.bash | 2 +- themes/powerline/README.md | 2 +- themes/powerline/powerline.theme.bash | 2 +- themes/rana/rana.theme.bash | 2 +- themes/rjorgenson/rjorgenson.theme.bash | 4 +- tools/check_for_upgrade.bash | 2 +- tools/git-prompt.bash | 18 +++--- 44 files changed, 107 insertions(+), 107 deletions(-) diff --git a/.gitignore b/.gitignore index c30b09cb1..8915c1a8f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,9 @@ # custom files -!/custom/aliases/example.aliases.sh -!/custom/completion/example.completion.sh +!/custom/aliases/example.aliases.bash +!/custom/completion/example.completion.bash !/custom/plugins/example/ !/custom/themes/example/ -!/custom/example.sh +!/custom/example.bash /custom/ # temp files directories diff --git a/README.md b/README.md index b56606eea..c2d044392 100644 --- a/README.md +++ b/README.md @@ -104,7 +104,7 @@ The default location is `~/.oh-my-bash` (hidden in your home directory) If you'd like to change the install directory with the `OSH` environment variable, either by running `export OSH=/your/path` before installing, or by setting it before the end of the install pipeline like this: ```shell -export OSH="$HOME/.dotfiles/oh-my-bash"; sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)" +export OSH="$HOME/.dotfiles/oh-my-bash"; sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.bash)" ``` #### Manual Installation @@ -148,9 +148,9 @@ If you have any hiccups installing, here are a few common fixes. ### Custom Plugins and Themes -If you want to override any of the default behaviors, just add a new file (ending in `.sh`) in the `custom/` directory. +If you want to override any of the default behaviors, just add a new file (ending in `.bash`) in the `custom/` directory. -If you have many functions that go well together, you can put them as a `XYZ.plugin.sh` file in the `custom/plugins/` directory and then enable this plugin. +If you have many functions that go well together, you can put them as a `XYZ.plugin.bash` file in the `custom/plugins/` directory and then enable this plugin. If you would like to override the functionality of a plugin distributed with Oh My Bash, create a plugin of the same name in the `custom/plugins/` directory and it will be loaded instead of the one in `plugins/`. diff --git a/completions/brew.completion.bash b/completions/brew.completion.bash index 6018aa1e7..9ee46c996 100644 --- a/completions/brew.completion.bash +++ b/completions/brew.completion.bash @@ -4,7 +4,7 @@ if which brew >/dev/null 2>&1; then . `brew --prefix`/etc/bash_completion fi - if [ -f `brew --prefix`/Library/Contributions/brew_bash_completion.sh ]; then - . `brew --prefix`/Library/Contributions/brew_bash_completion.sh + if [ -f `brew --prefix`/Library/Contributions/brew_bash_completion.bash ]; then + . `brew --prefix`/Library/Contributions/brew_bash_completion.bash fi fi diff --git a/completions/docker-compose.completion.bash b/completions/docker-compose.completion.bash index 9904aac93..0fc261153 100644 --- a/completions/docker-compose.completion.bash +++ b/completions/docker-compose.completion.bash @@ -12,9 +12,9 @@ # To enable the completions either: # - place this file in /etc/bash_completion.d # or -# - copy this file to e.g. ~/.docker-compose-completion.sh and add the line +# - copy this file to e.g. ~/.docker-compose-completion.bash and add the line # below to your .bashrc after bash completion features are loaded -# . ~/.docker-compose-completion.sh +# . ~/.docker-compose-completion.bash __docker_compose_q() { diff --git a/completions/docker-machine.completion.bash b/completions/docker-machine.completion.bash index adf00791c..f617a8326 100644 --- a/completions/docker-machine.completion.bash +++ b/completions/docker-machine.completion.bash @@ -9,9 +9,9 @@ # To enable the completions either: # - place this file in /etc/bash_completion.d # or -# - copy this file to e.g. ~/.docker-machine-completion.sh and add the line +# - copy this file to e.g. ~/.docker-machine-completion.bash and add the line # below to your .bashrc after bash completion features are loaded -# . ~/.docker-machine-completion.sh +# . ~/.docker-machine-completion.bash # _docker_machine_active() { diff --git a/completions/docker.completion.bash b/completions/docker.completion.bash index b84b7ae53..f33f4eafe 100644 --- a/completions/docker.completion.bash +++ b/completions/docker.completion.bash @@ -11,9 +11,9 @@ # To enable the completions either: # - place this file in /etc/bash_completion.d # or -# - copy this file to e.g. ~/.docker-completion.sh and add the line +# - copy this file to e.g. ~/.docker-completion.bash and add the line # below to your .bashrc after bash completion features are loaded -# . ~/.docker-completion.sh +# . ~/.docker-completion.bash # # Configuration: # diff --git a/completions/drush.completion.bash b/completions/drush.completion.bash index 4f3f784fe..8cf1de8af 100644 --- a/completions/drush.completion.bash +++ b/completions/drush.completion.bash @@ -4,7 +4,7 @@ # https://github.com/drush-ops/drush # # Originally from: -# http://github.com/drush-ops/drush/blob/master/drush.complete.sh +# http://github.com/drush-ops/drush/blob/master/drush.complete.bash # Ensure drush is available. which drush &> /dev/null || alias drush &> /dev/null || return diff --git a/completions/git.completion.bash b/completions/git.completion.bash index 1e05c4a79..2804573f1 100644 --- a/completions/git.completion.bash +++ b/completions/git.completion.bash @@ -22,7 +22,7 @@ # 2) Add the following line to your .bashrc/.zshrc: # source ~/.git-completion.bash # 3) Consider changing your PS1 to also show the current branch, -# see git-prompt.sh for details. +# see git-prompt.bash for details. # # If you use complex aliases of form '!f() { ... }; f', you can use the null # command ':' as the first command in the function body to declare the desired @@ -1845,7 +1845,7 @@ _git_config () return ;; color.branch|color.diff|color.interactive|\ - color.showbranch|color.status|color.ui) + color.bashowbranch|color.status|color.ui) __gitcomp "always never auto" return ;; @@ -2017,7 +2017,7 @@ _git_config () color.interactive.help color.interactive.prompt color.pager - color.showbranch + color.bashowbranch color.status color.status.added color.status.changed @@ -2057,7 +2057,7 @@ _git_config () core.quotepath core.repositoryFormatVersion core.safecrlf - core.sharedRepository + core.basharedRepository core.sparseCheckout core.symlinks core.trustctime @@ -2165,7 +2165,7 @@ _git_config () interactive.singlekey log.date log.decorate - log.showroot + log.bashowroot mailmap.file man. man.viewer @@ -2244,7 +2244,7 @@ _git_config () sendemail.validate showbranch.default status.relativePaths - status.showUntrackedFiles + status.bashowUntrackedFiles status.submodulesummary submodule. tar.umask diff --git a/completions/git_flow.completion.bash b/completions/git_flow.completion.bash index c0ec7ba3e..269d5c037 100644 --- a/completions/git_flow.completion.bash +++ b/completions/git_flow.completion.bash @@ -27,12 +27,12 @@ # * /usr/local/etc/bash-completion.d # * ~/bash-completion.d # -# b. Or, copy it somewhere (e.g. ~/.git-flow-completion.sh) and put the following line in +# b. Or, copy it somewhere (e.g. ~/.git-flow-completion.bash) and put the following line in # your .bashrc: # -# source ~/.git-flow-completion.sh +# source ~/.git-flow-completion.bash # -# 2. If you are using Git < 1.7.1: Edit git-completion.sh and add the following line to the giant +# 2. If you are using Git < 1.7.1: Edit git-completion.bash and add the following line to the giant # $command case in _git: # # flow) _git_flow ;; diff --git a/completions/git_flow_avh.completion.bash b/completions/git_flow_avh.completion.bash index f51ca4cf4..be00ed9c2 100644 --- a/completions/git_flow_avh.completion.bash +++ b/completions/git_flow_avh.completion.bash @@ -27,12 +27,12 @@ # * /usr/local/etc/bash-completion.d # * ~/bash-completion.d # -# b. Or, copy it somewhere (e.g. ~/.git-flow-completion.sh) and put the following line in +# b. Or, copy it somewhere (e.g. ~/.git-flow-completion.bash) and put the following line in # your .bashrc: # -# source ~/.git-flow-completion.sh +# source ~/.git-flow-completion.bash # -# 2. If you are using Git < 1.7.1: Edit git-completion.sh and add the following line to the giant +# 2. If you are using Git < 1.7.1: Edit git-completion.bash and add the following line to the giant # $command case in _git: # # flow) _git_flow ;; diff --git a/completions/jboss7.completion.bash b/completions/jboss7.completion.bash index 106f504ac..85bbae47f 100644 --- a/completions/jboss7.completion.bash +++ b/completions/jboss7.completion.bash @@ -8,11 +8,11 @@ _serverProfiles(){ - if [[ $COMP_WORDS == *standalone.sh* ]] + if [[ $COMP_WORDS == *standalone.bash* ]] then serverdir="../standalone/configuration/" else - # assume is domain.sh + # assume is domain.bash serverdir="../domain/configuration/" fi @@ -119,12 +119,12 @@ _jboss(){ local commandsWithoutEqualSign='-b -bmanagement -bunsecure -bpublic --admin-only -h -help -u -version -V -v' local commandsWithEqualSign='-P -Djboss.node.name -Djboss.home.dir -Djboss.socket.binding.port-offset -Djboss.bind.address.management -Djboss.bind.address -Djboss.bind.address.unsecure' - if [[ $COMP_WORDS == *standalone.sh* ]] + if [[ $COMP_WORDS == *standalone.bash* ]] then commandsWithoutEqualSign="${commandsWithoutEqualSign} -c" commandsWithEqualSign="${commandsWithEqualSign} --server-config -Djboss.server.base.dir -c" else - # assume is domain.sh + # assume is domain.bash commandsWithoutEqualSign="${commandsWithoutEqualSign} --backup --cached-dc" commandsWithEqualSign="${commandsWithEqualSign} -Djboss.domain.master.address --host-config -Djboss.domain.master.port -Djboss.domain.base.dir " fi @@ -138,5 +138,5 @@ _jboss(){ } -complete -o nospace -F _jboss standalone.sh -complete -o nospace -F _jboss domain.sh +complete -o nospace -F _jboss standalone.bash +complete -o nospace -F _jboss domain.bash diff --git a/completions/system.completion.bash b/completions/system.completion.bash index b044627ca..984a032c3 100644 --- a/completions/system.completion.bash +++ b/completions/system.completion.bash @@ -8,8 +8,8 @@ if [ -f /etc/bash_completion ]; then fi # Some distribution makes use of a profile.d script to import completion. -if [ -f /etc/profile.d/bash_completion.sh ]; then - . /etc/profile.d/bash_completion.sh +if [ -f /etc/profile.d/bash_completion.bash ]; then + . /etc/profile.d/bash_completion.bash fi diff --git a/completions/tmux.completion.bash b/completions/tmux.completion.bash index ddadcbd8d..0b83436b7 100644 --- a/completions/tmux.completion.bash +++ b/completions/tmux.completion.bash @@ -2,7 +2,7 @@ # tmux completion # See: http://www.debian-administration.org/articles/317 for how to write more. -# Usage: Put "source bash_completion_tmux.sh" into your .bashrc +# Usage: Put "source bash_completion_tmux.bash" into your .bashrc # Based upon the example at http://paste-it.appspot.com/Pj4mLycDE _tmux_expand () diff --git a/completions/todo.completion.bash b/completions/todo.completion.bash index bee4d0b6b..6cece302f 100644 --- a/completions/todo.completion.bash +++ b/completions/todo.completion.bash @@ -16,7 +16,7 @@ _todo() mv prepend prep pri p replace report shorthelp" local -r MOVE_COMMAND_PATTERN='^(move|mv)$' - local _todo_sh=${_todo_sh:-todo.sh} + local _todo_sh=${_todo_sh:-todo.bash} local completions if [ $COMP_CWORD -eq 1 ]; then completions="$COMMANDS $(eval TODOTXT_VERBOSE=0 $_todo_sh command listaddons) $OPTS" @@ -67,5 +67,5 @@ _todo() return 0 } -complete -F _todo todo.sh +complete -F _todo todo.bash complete -F _todo t diff --git a/lib/base.bash b/lib/base.bash index 94032338d..722678424 100644 --- a/lib/base.bash +++ b/lib/base.bash @@ -326,7 +326,7 @@ httpHeaders () { /usr/bin/curl -I -L "$@" ; } # httpHeaders: Gr # to mount a read-only disk image as read-write: # --------------------------------------- -# hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify +# hdiutil attach example.dmg -shadow /tmp/example.bashadow -noverify # mounting a removable drive (of type msdos or hfs) # --------------------------------------- diff --git a/lib/functions.bash b/lib/functions.bash index f7964588e..9ac20ba76 100644 --- a/lib/functions.bash +++ b/lib/functions.bash @@ -4,11 +4,11 @@ function bash_stats() { } function uninstall_oh_my_bash() { - env OSH=$OSH sh $OSH/tools/uninstall.sh + env OSH=$OSH sh $OSH/tools/uninstall.bash } function upgrade_oh_my_bash() { - env OSH=$OSH sh $OSH/tools/upgrade.sh + env OSH=$OSH sh $OSH/tools/upgrade.bash } function take() { diff --git a/lib/nvm.bash b/lib/nvm.bash index c34e59642..597eff90d 100644 --- a/lib/nvm.bash +++ b/lib/nvm.bash @@ -1,7 +1,7 @@ #!/usr/bin/env bash # get the node.js version function nvm_prompt_info() { - [[ -f "$NVM_DIR/nvm.sh" ]] || return + [[ -f "$NVM_DIR/nvm.bash" ]] || return local nvm_prompt nvm_prompt=$(node -v 2>/dev/null) [[ "${nvm_prompt}x" == "x" ]] && return diff --git a/lib/utils.bash b/lib/utils.bash index d8c7d4265..bc6d9de58 100644 --- a/lib/utils.bash +++ b/lib/utils.bash @@ -10,7 +10,7 @@ ############################---Usage---######################################### -# source ~/path/to/directory/utils.sh +# source ~/path/to/directory/utils.bash ########################## Styled text output ################################## diff --git a/oh-my-bash.bash b/oh-my-bash.bash index 4025e3274..dd7e8c5bc 100644 --- a/oh-my-bash.bash +++ b/oh-my-bash.bash @@ -18,7 +18,7 @@ if ! command -v die > /dev/null; then die() { # Check for updates on initial load... if ! ((DISABLE_AUTO_UPDATE)) ; then - env OSH="$OSH" DISABLE_UPDATE_PROMPT="$DISABLE_UPDATE_PROMPT" bash -f "${OSH}/tools/check_for_upgrade.sh" + env OSH="$OSH" DISABLE_UPDATE_PROMPT="$DISABLE_UPDATE_PROMPT" bash -f "${OSH}/tools/check_for_upgrade.bash" fi # Initializes Oh My Bash @@ -38,9 +38,9 @@ if [[ -z "$OSH_CACHE_DIR" ]]; then OSH_CACHE_DIR="${OSH}/cache" fi -# Load all of the config files in ~/.oh-my-bash/lib that end in .sh +# Load all of the config files in ~/.oh-my-bash/lib that end in .bash # TIP: Add files you don't want in git to .gitignore -for config_file in ${OSH}/lib/*.sh; do +for config_file in ${OSH}/lib/*.bash; do custom_config_file="${OSH_CUSTOM}/lib/${config_file:t}" [ -f "${custom_config_file}" ] && config_file="${custom_config_file}" source "$config_file" @@ -50,7 +50,7 @@ done is_plugin() { local base_dir="$1" local name="$2" - [[ -f "$base_dir/plugins/${name}/{${name}.plugin.sh,_${name}}" ]] + [[ -f "$base_dir/plugins/${name}/{${name}.plugin.bash,_${name}}" ]] } # Add all defined plugins to fpath. This must be done # before running compinit. @@ -65,7 +65,7 @@ done is_completion() { local base_dir="$1" local name="$2" - [ -f "${base_dir}/completions/${name}/${name}.completion.sh" ] + [ -f "${base_dir}/completions/${name}/${name}.completion.bash" ] } # Add all defined completions to fpath. This must be done # before running compinit. @@ -80,7 +80,7 @@ done is_alias() { local base_dir="$1" local name="$2" - [ -f "${base_dir}/aliases/${name}/${name}.aliases.sh" ] + [ -f "${base_dir}/aliases/${name}/${name}.aliases.bash" ] } # Add all defined completions to fpath. This must be done # before running compinit. @@ -102,33 +102,33 @@ fi # Load all of the plugins that were defined in ~/.bashrc for plugin in ${plugins[@]}; do - if [ -f "${OSH_CUSTOM}/plugins/${plugin}/${plugin}.plugin.sh" ]; then - source "${OSH_CUSTOM}/plugins/${plugin}/${plugin}.plugin.sh" - elif [ -f "${OSH}/plugins/${plugin}/${plugin}.plugin.sh" ]; then - source "${OSH}/plugins/${plugin}/${plugin}.plugin.sh" + if [ -f "${OSH_CUSTOM}/plugins/${plugin}/${plugin}.plugin.bash" ]; then + source "${OSH_CUSTOM}/plugins/${plugin}/${plugin}.plugin.bash" + elif [ -f "${OSH}/plugins/${plugin}/${plugin}.plugin.bash" ]; then + source "${OSH}/plugins/${plugin}/${plugin}.plugin.bash" fi done # Load all of the aliases that were defined in ~/.bashrc for alias in "${aliases[@]}"; do - if [ -f "${OSH_CUSTOM}/aliases/${alias}.aliases.sh" ]; then - source "${OSH_CUSTOM}/aliases/${alias}.aliases.sh" - elif [ -f "${OSH}/aliases/${alias}.aliases.sh" ]; then - source "${OSH}/aliases/${alias}.aliases.sh" + if [ -f "${OSH_CUSTOM}/aliases/${alias}.aliases.bash" ]; then + source "${OSH_CUSTOM}/aliases/${alias}.aliases.bash" + elif [ -f "${OSH}/aliases/${alias}.aliases.bash" ]; then + source "${OSH}/aliases/${alias}.aliases.bash" fi done # Load all of the completions that were defined in ~/.bashrc for completion in ${completions[@]}; do - if [ -f "${OSH_CUSTOM}/completions/$completion.completion.sh" ]; then - source "${OSH_CUSTOM}/completions/$completion.completion.sh" - elif [ -f "${OSH}/completions/$completion.completion.sh" ]; then - source "${OSH}/completions/$completion.completion.sh" + if [ -f "${OSH_CUSTOM}/completions/$completion.completion.bash" ]; then + source "${OSH_CUSTOM}/completions/$completion.completion.bash" + elif [ -f "${OSH}/completions/$completion.completion.bash" ]; then + source "${OSH}/completions/$completion.completion.bash" fi done # Load all of your custom configurations from custom/ -for config_file in "${OSH_CUSTOM}/*.sh"; do +for config_file in "${OSH_CUSTOM}/*.bash"; do if [ -f "$config_file" ]; then source "$config_file" fi @@ -136,12 +136,12 @@ done unset config_file # Load colors first so they can be use in base theme -source "${OSH}/themes/colours.theme.sh" -source "${OSH}/themes/base.theme.sh" +source "${OSH}/themes/colours.theme.bash" +source "${OSH}/themes/base.theme.bash" # Load the theme if [ "$OSH_THEME" = "random" ]; then - themes=("${OSH}/themes/*/*theme.sh") + themes=("${OSH}/themes/*/*theme.bash") N=${#themes[@]} ((N=(RANDOM%N))) RANDOM_THEME="${themes[$N]}" @@ -149,12 +149,12 @@ if [ "$OSH_THEME" = "random" ]; then echo "[oh-my-bash] Random theme '$RANDOM_THEME' loaded..." else if [ -n "$OSH_THEME" ]; then - if [ -f "${OSH_CUSTOM}/$OSH_THEME/$OSH_THEME.theme.sh" ]; then - source "${OSH_CUSTOM}/$OSH_THEME/$OSH_THEME.theme.sh" - elif [ -f "${OSH_CUSTOM}/themes/$OSH_THEME/$OSH_THEME.theme.sh" ]; then - source "${OSH_CUSTOM}/themes/$OSH_THEME/$OSH_THEME.theme.sh" + if [ -f "${OSH_CUSTOM}/$OSH_THEME/$OSH_THEME.theme.bash" ]; then + source "${OSH_CUSTOM}/$OSH_THEME/$OSH_THEME.theme.bash" + elif [ -f "${OSH_CUSTOM}/themes/$OSH_THEME/$OSH_THEME.theme.bash" ]; then + source "${OSH_CUSTOM}/themes/$OSH_THEME/$OSH_THEME.theme.bash" else - source "${OSH}/themes/$OSH_THEME/$OSH_THEME.theme.sh" + source "${OSH}/themes/$OSH_THEME/$OSH_THEME.theme.bash" fi fi fi @@ -164,7 +164,7 @@ if [[ $PROMPT ]]; then fi if ! type_exists '__git_ps1' ; then - source "${OSH}/tools/git-prompt.sh" + source "${OSH}/tools/git-prompt.bash" fi # Adding Support for other OSes diff --git a/plugins/aws/aws.plugin.bash b/plugins/aws/aws.plugin.bash index b1f4cb430..8b72eadca 100644 --- a/plugins/aws/aws.plugin.bash +++ b/plugins/aws/aws.plugin.bash @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# aws.plugin.sh +# aws.plugin.bash # Author: Michael Anckaert # Based on oh-my-zsh AWS plugin # diff --git a/plugins/bu/bu.plugin.bash b/plugins/bu/bu.plugin.bash index 2566e7cc8..faaea436d 100644 --- a/plugins/bu/bu.plugin.bash +++ b/plugins/bu/bu.plugin.bash @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# bu.plugin.sh +# bu.plugin.bash # Author: Taleeb Midi # Based on oh-my-zsh AWS plugin # diff --git a/plugins/git/README.md b/plugins/git/README.md index ce43db213..6b979efa8 100644 --- a/plugins/git/README.md +++ b/plugins/git/README.md @@ -1,3 +1,3 @@ # Git Plugin -The git plugin defines a number of useful aliases for you. [Consult the complete list](git.plugin.sh#L34) +The git plugin defines a number of useful aliases for you. [Consult the complete list](git.plugin.bash#L34) diff --git a/templates/bashrc.osh-template.bash b/templates/bashrc.osh-template.bash index 0352ea6f4..cfba049ee 100644 --- a/templates/bashrc.osh-template.bash +++ b/templates/bashrc.osh-template.bash @@ -71,7 +71,7 @@ plugins=( bashmarks ) -source $OSH/oh-my-bash.sh +source $OSH/oh-my-bash.bash # User configuration # export MANPATH="/usr/local/man:$MANPATH" diff --git a/themes/agnoster/README.md b/themes/agnoster/README.md index fe1aeb9c8..3dcfea2a4 100644 --- a/themes/agnoster/README.md +++ b/themes/agnoster/README.md @@ -6,7 +6,7 @@ I recommend: https://github.com/powerline/fonts.git ``` git clone https://github.com/powerline/fonts.git fonts cd fonts -install.sh +install.bash ``` The aim of this theme is to only show you *relevant* information. Like most diff --git a/themes/agnoster/agnoster.base.bash b/themes/agnoster/agnoster.base.bash index dae991cf0..ec3782c6d 100755 --- a/themes/agnoster/agnoster.base.bash +++ b/themes/agnoster/agnoster.base.bash @@ -18,7 +18,7 @@ # I recommend: https://github.com/powerline/fonts.git # > git clone https://github.com/powerline/fonts.git fonts # > cd fonts -# > install.sh +# > install.bash # In addition, I recommend the # [Solarized theme](https://github.com/altercation/solarized/) and, if you're diff --git a/themes/brainy/brainy.theme.bash b/themes/brainy/brainy.theme.bash index 856264606..819c91104 100644 --- a/themes/brainy/brainy.theme.bash +++ b/themes/brainy/brainy.theme.bash @@ -136,10 +136,10 @@ ___brainy_prompt_ruby() { ___brainy_prompt_todo() { [ "${THEME_SHOW_TODO}" != "true" ] || - [ -z "$(which todo.sh)" ] && return + [ -z "$(which todo.bash)" ] && return color=$bold_white box="[|]" - info="t:$(todo.sh ls | egrep "TODO: [0-9]+ of ([0-9]+)" | awk '{ print $4 }' )" + info="t:$(todo.bash ls | egrep "TODO: [0-9]+ of ([0-9]+)" | awk '{ print $4 }' )" printf "%s|%s|%s|%s" "${color}" "${info}" "${bold_green}" "${box}" } @@ -152,7 +152,7 @@ ___brainy_prompt_clock() { } ___brainy_prompt_battery() { - [ ! -e $OSH/plugins/battery/battery.plugin.sh ] || + [ ! -e $OSH/plugins/battery/battery.plugin.bash ] || [ "${THEME_SHOW_BATTERY}" != "true" ] && return info=$(battery_percentage) color=$bold_green diff --git a/themes/demula/demula.theme.bash b/themes/demula/demula.theme.bash index ce79be7b8..db750040d 100644 --- a/themes/demula/demula.theme.bash +++ b/themes/demula/demula.theme.bash @@ -84,7 +84,7 @@ ${D_BRANCH_COLOR}%b %r ${D_CHANGES_COLOR}%m%u ${D_DEFAULT_COLOR}" # checks if the plugin is installed before calling battery_charge safe_battery_charge() { - if [ -e "${OSH}/plugins/battery/battery.plugin.sh" ]; + if [ -e "${OSH}/plugins/battery/battery.plugin.bash" ]; then battery_charge fi diff --git a/themes/doubletime_multiline/doubletime_multiline.theme.bash b/themes/doubletime_multiline/doubletime_multiline.theme.bash index 68a0c0cd7..57aedb8f8 100644 --- a/themes/doubletime_multiline/doubletime_multiline.theme.bash +++ b/themes/doubletime_multiline/doubletime_multiline.theme.bash @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source "$OSH/themes/doubletime/doubletime.theme.sh" +source "$OSH/themes/doubletime/doubletime.theme.bash" function prompt_setter() { # Save history diff --git a/themes/doubletime_multiline_pyonly/doubletime_multiline_pyonly.theme.bash b/themes/doubletime_multiline_pyonly/doubletime_multiline_pyonly.theme.bash index df379bd26..2ed85bcb4 100644 --- a/themes/doubletime_multiline_pyonly/doubletime_multiline_pyonly.theme.bash +++ b/themes/doubletime_multiline_pyonly/doubletime_multiline_pyonly.theme.bash @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source "$OSH/themes/doubletime/doubletime.theme.sh" +source "$OSH/themes/doubletime/doubletime.theme.bash" function prompt_setter() { # Save history diff --git a/themes/powerline-multiline/README.md b/themes/powerline-multiline/README.md index 768e4971d..974ffecd8 100644 --- a/themes/powerline-multiline/README.md +++ b/themes/powerline-multiline/README.md @@ -12,7 +12,7 @@ A colorful multiline theme, where the first line shows information about your sh * An indicator when connected by SSH * An indicator when `sudo` has the credentials cached (see the `sudo` manpage for more info about this) * An indicator when the current shell is inside the Vim editor -* Battery charging status (depends on the [../../plugins/battery/battery.plugin.sh](battery plugin)) +* Battery charging status (depends on the [../../plugins/battery/battery.plugin.bash](battery plugin)) * SCM Repository status (e.g. Git, SVN) * The current Python environment (Virtualenv, venv, and Conda are supported) in use * The current Ruby environment (rvm and rbenv are supported) in use diff --git a/themes/powerline-multiline/powerline-multiline.base.bash b/themes/powerline-multiline/powerline-multiline.base.bash index cd8492eb4..c7c93f2e9 100644 --- a/themes/powerline-multiline/powerline-multiline.base.bash +++ b/themes/powerline-multiline/powerline-multiline.base.bash @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source "$OSH/themes/powerline/powerline.base.sh" +source "$OSH/themes/powerline/powerline.base.bash" function __powerline_last_status_prompt { [[ "$1" -ne 0 ]] && echo "$(set_color ${LAST_STATUS_THEME_PROMPT_COLOR} -) ${1} ${normal}" diff --git a/themes/powerline-multiline/powerline-multiline.theme.bash b/themes/powerline-multiline/powerline-multiline.theme.bash index fc9f2b17d..c9131fb9b 100644 --- a/themes/powerline-multiline/powerline-multiline.theme.bash +++ b/themes/powerline-multiline/powerline-multiline.theme.bash @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source "$OSH/themes/powerline-multiline/powerline-multiline.base.sh" +source "$OSH/themes/powerline-multiline/powerline-multiline.base.bash" PROMPT_CHAR=${POWERLINE_PROMPT_CHAR:="❯"} POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""} diff --git a/themes/powerline-naked/README.md b/themes/powerline-naked/README.md index 7a4445372..35457baa3 100644 --- a/themes/powerline-naked/README.md +++ b/themes/powerline-naked/README.md @@ -12,7 +12,7 @@ A colorful theme, where shows a lot information about your shell session. * An indicator when connected by SSH * An indicator when `sudo` has the credentials cached (see the `sudo` manpage for more info about this) * An indicator when the current shell is inside the Vim editor -* Battery charging status (depends on the [../../plugins/battery/battery.plugin.sh](battery plugin)) +* Battery charging status (depends on the [../../plugins/battery/battery.plugin.bash](battery plugin)) * SCM Repository status (e.g. Git, SVN) * The current Python environment (Virtualenv, venv, and Conda are supported) in use * The current Ruby environment (rvm and rbenv are supported) in use diff --git a/themes/powerline-naked/powerline-naked.base.bash b/themes/powerline-naked/powerline-naked.base.bash index 25a0181e5..e97d287a6 100644 --- a/themes/powerline-naked/powerline-naked.base.bash +++ b/themes/powerline-naked/powerline-naked.base.bash @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source "$OSH/themes/powerline/powerline.base.sh" +source "$OSH/themes/powerline/powerline.base.bash" function __powerline_left_segment { local OLD_IFS="${IFS}"; IFS="|" diff --git a/themes/powerline-naked/powerline-naked.theme.bash b/themes/powerline-naked/powerline-naked.theme.bash index 9d25b4406..8fca3a642 100644 --- a/themes/powerline-naked/powerline-naked.theme.bash +++ b/themes/powerline-naked/powerline-naked.theme.bash @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source "$OSH/themes/powerline-naked/powerline-naked.base.sh" +source "$OSH/themes/powerline-naked/powerline-naked.base.bash" PROMPT_CHAR=${POWERLINE_PROMPT_CHAR:=""} POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""} diff --git a/themes/powerline-plain/README.md b/themes/powerline-plain/README.md index d880b7bd8..11b10b737 100644 --- a/themes/powerline-plain/README.md +++ b/themes/powerline-plain/README.md @@ -10,7 +10,7 @@ A colorful theme, where shows a lot information about your shell session. * An indicator when connected by SSH * An indicator when `sudo` has the credentials cached (see the `sudo` manpage for more info about this) * An indicator when the current shell is inside the Vim editor -* Battery charging status (depends on the [../../plugins/battery/battery.plugin.sh](battery plugin)) +* Battery charging status (depends on the [../../plugins/battery/battery.plugin.bash](battery plugin)) * SCM Repository status (e.g. Git, SVN) * The current Python environment (Virtualenv, venv, and Conda are supported) in use * The current Ruby environment (rvm and rbenv are supported) in use diff --git a/themes/powerline-plain/powerline-plain.base.bash b/themes/powerline-plain/powerline-plain.base.bash index 467bd49a9..2394f3f39 100644 --- a/themes/powerline-plain/powerline-plain.base.bash +++ b/themes/powerline-plain/powerline-plain.base.bash @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source "$OSH/themes/powerline/powerline.base.sh" +source "$OSH/themes/powerline/powerline.base.bash" function __powerline_left_segment { local OLD_IFS="${IFS}"; IFS="|" diff --git a/themes/powerline-plain/powerline-plain.theme.bash b/themes/powerline-plain/powerline-plain.theme.bash index 7da07e1b6..369d6545f 100644 --- a/themes/powerline-plain/powerline-plain.theme.bash +++ b/themes/powerline-plain/powerline-plain.theme.bash @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source "$OSH/themes/powerline-plain/powerline-plain.base.sh" +source "$OSH/themes/powerline-plain/powerline-plain.base.bash" USER_INFO_SSH_CHAR=${POWERLINE_USER_INFO_SSH_CHAR:="⌁ "} USER_INFO_THEME_PROMPT_COLOR=32 diff --git a/themes/powerline/README.md b/themes/powerline/README.md index b2f244d4f..20476ee00 100644 --- a/themes/powerline/README.md +++ b/themes/powerline/README.md @@ -14,7 +14,7 @@ A colorful theme, where shows a lot information about your shell session. * An indicator when connected by SSH * An indicator when `sudo` has the credentials cached (see the `sudo` manpage for more info about this) * An indicator when the current shell is inside the Vim editor -* Battery charging status (depends on the [../../plugins/battery/battery.plugin.sh](battery plugin)) +* Battery charging status (depends on the [../../plugins/battery/battery.plugin.bash](battery plugin)) * SCM Repository status (e.g. Git, SVN) * The current Python environment (Virtualenv, venv, and Conda are supported) in use * The current Ruby environment (rvm and rbenv are supported) in use diff --git a/themes/powerline/powerline.theme.bash b/themes/powerline/powerline.theme.bash index d396c0443..8442e0143 100644 --- a/themes/powerline/powerline.theme.bash +++ b/themes/powerline/powerline.theme.bash @@ -1,6 +1,6 @@ #!/usr/bin/env bash -source "$OSH/themes/powerline/powerline.base.sh" +source "$OSH/themes/powerline/powerline.base.bash" PROMPT_CHAR=${POWERLINE_PROMPT_CHAR:=""} POWERLINE_LEFT_SEPARATOR=${POWERLINE_LEFT_SEPARATOR:=""} diff --git a/themes/rana/rana.theme.bash b/themes/rana/rana.theme.bash index 79fadfbc0..72bbf503f 100644 --- a/themes/rana/rana.theme.bash +++ b/themes/rana/rana.theme.bash @@ -117,7 +117,7 @@ ${D_BRANCH_COLOR}%b %r ${D_CHANGES_COLOR}%m%u ${D_DEFAULT_COLOR}" # checks if the plugin is installed before calling battery_charge safe_battery_charge() { - if [ -e "${OSH}/plugins/battery/battery.plugin.sh" ]; + if [ -e "${OSH}/plugins/battery/battery.plugin.bash" ]; then battery_charge fi diff --git a/themes/rjorgenson/rjorgenson.theme.bash b/themes/rjorgenson/rjorgenson.theme.bash index 463e53835..06b48372c 100644 --- a/themes/rjorgenson/rjorgenson.theme.bash +++ b/themes/rjorgenson/rjorgenson.theme.bash @@ -50,8 +50,8 @@ function is_integer() { # helper function for todo-txt-count } todo_txt_count() { - if `hash todo.sh 2>&-`; then # is todo.sh installed - count=`todo.sh ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }'` + if `hash todo.bash 2>&-`; then # is todo.bash installed + count=`todo.bash ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }'` if is_integer $count; then # did we get a sane answer back echo "${BRACKET_COLOR}[${STRING_COLOR}T:$count${BRACKET_COLOR}]$normal" fi diff --git a/tools/check_for_upgrade.bash b/tools/check_for_upgrade.bash index 31a0033f5..16546a824 100644 --- a/tools/check_for_upgrade.bash +++ b/tools/check_for_upgrade.bash @@ -11,7 +11,7 @@ function _update_osh_update() { } function _upgrade_osh() { - env BASH=$OSH sh $OSH/tools/upgrade.sh + env BASH=$OSH sh $OSH/tools/upgrade.bash # update the osh file _update_osh_update } diff --git a/tools/git-prompt.bash b/tools/git-prompt.bash index 3ecfd6ce9..e5ca3a8c8 100644 --- a/tools/git-prompt.bash +++ b/tools/git-prompt.bash @@ -8,9 +8,9 @@ # # To enable: # -# 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh). +# 1) Copy this file to somewhere (e.g. ~/.git-prompt.bash). # 2) Add the following line to your .bashrc/.zshrc: -# source ~/.git-prompt.sh +# source ~/.git-prompt.bash # 3a) Change your PS1 to call __git_ps1 as # command-substitution: # Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' @@ -39,7 +39,7 @@ # In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value, # unstaged (*) and staged (+) changes will be shown next to the branch # name. You can configure this per-repository with the -# bash.showDirtyState variable, which defaults to true once +# bash.bashowDirtyState variable, which defaults to true once # GIT_PS1_SHOWDIRTYSTATE is enabled. # # You can also see if currently something is stashed, by setting @@ -49,7 +49,7 @@ # If you would like to see if there're untracked files, then you can set # GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked # files, then a '%' will be shown next to the branch name. You can -# configure this per-repository with the bash.showUntrackedFiles +# configure this per-repository with the bash.bashowUntrackedFiles # variable, which defaults to true once GIT_PS1_SHOWUNTRACKEDFILES is # enabled. # @@ -74,7 +74,7 @@ # By default, __git_ps1 will compare HEAD to your SVN upstream if it can # find one, or @{upstream} otherwise. Once you have set # GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by -# setting the bash.showUpstream config variable. +# setting the bash.bashowUpstream config variable. # # If you would like to see more information about the identity of # commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE @@ -110,10 +110,10 @@ __git_ps1_show_upstream () svn_remote=() # get some config options from git-config - local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')" + local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.bashowupstream)$' 2>/dev/null | tr '\0\n' '\n ')" while read -r key value; do case "$key" in - bash.showupstream) + bash.bashowupstream) GIT_PS1_SHOWUPSTREAM="$value" if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then p="" @@ -478,7 +478,7 @@ __git_ps1 () fi elif [ "true" = "$inside_worktree" ]; then if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] && - [ "$(git config --bool bash.showDirtyState)" != "false" ] + [ "$(git config --bool bash.bashowDirtyState)" != "false" ] then git diff --no-ext-diff --quiet || w="*" git diff --no-ext-diff --cached --quiet || i="+" @@ -493,7 +493,7 @@ __git_ps1 () fi if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] && - [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] && + [ "$(git config --bool bash.bashowUntrackedFiles)" != "false" ] && git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null then u="%${ZSH_VERSION+%}" From d3748c48cd36320dd3b1910f67d005fb4998206d Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 09:53:37 +0000 Subject: [PATCH 13/27] sync --- completions/maven.completion.bash | 292 ++++++++++++++-- img/example_powerline.png | Bin 0 -> 82148 bytes oh-my-bash.sh | 163 +++++++++ plugins/bashmarks/README.md | 6 +- plugins/bashmarks/bashmarks.plugin.bash | 35 +- themes/agnoster/agnoster-bash.theme.sh | 1 - themes/agnoster/agnoster.theme.sh | 423 ++++++++++++++++++++++++ 7 files changed, 878 insertions(+), 42 deletions(-) create mode 100644 img/example_powerline.png create mode 100644 oh-my-bash.sh delete mode 120000 themes/agnoster/agnoster-bash.theme.sh create mode 100755 themes/agnoster/agnoster.theme.sh diff --git a/completions/maven.completion.bash b/completions/maven.completion.bash index 75892f139..880ba827e 100644 --- a/completions/maven.completion.bash +++ b/completions/maven.completion.bash @@ -1,36 +1,264 @@ #!/usr/bin/env bash -# Bash Maven completion +# Bash completion support for maven +# inspired from : +# - https://github.com/juven/maven-bash-completion +# - https://github.com/parisjug/maven-bash-completion + +function_exists() +{ + declare -F $1 > /dev/null + return $? +} + +function_exists _get_comp_words_by_ref || +_get_comp_words_by_ref () +{ + local exclude cur_ words_ cword_; + if [ "$1" = "-n" ]; then + exclude=$2; + shift 2; + fi; + __git_reassemble_comp_words_by_ref "$exclude"; + cur_=${words_[cword_]}; + while [ $# -gt 0 ]; do + case "$1" in + cur) + cur=$cur_ + ;; + prev) + prev=${words_[$cword_-1]} + ;; + words) + words=("${words_[@]}") + ;; + cword) + cword=$cword_ + ;; + esac; + shift; + done +} + +function_exists __ltrim_colon_completions || +__ltrim_colon_completions() +{ + if [[ "$1" == *:* && "$COMP_WORDBREAKS" == *:* ]]; then + # Remove colon-word prefix from COMPREPLY items + local colon_word=${1%${1##*:}} + local i=${#COMPREPLY[*]} + while [[ $((--i)) -ge 0 ]]; do + COMPREPLY[$i]=${COMPREPLY[$i]#"$colon_word"} + done + fi +} + +function_exists __find_mvn_projects || +__find_mvn_projects() +{ + find . -name 'pom.xml' -not -path '*/target/*' -prune | while read LINE ; do + local withoutPom=${LINE%/pom.xml} + local module=${withoutPom#./} + if [[ -z ${module} ]]; then + echo "." + else + echo ${module} + fi + done +} + +function_exists _realpath || +_realpath () +{ + if [[ -f "$1" ]] + then + # file *must* exist + if cd "$(echo "${1%/*}")" &>/dev/null + then + # file *may* not be local + # exception is ./file.ext + # try 'cd .; cd -;' *works!* + local tmppwd="$PWD" + cd - &>/dev/null + else + # file *must* be local + local tmppwd="$PWD" + fi + else + # file *cannot* exist + return 1 # failure + fi + + # reassemble realpath + echo "$tmppwd"/"${1##*/}" + return 1 #success +} + +function_exists __pom_hierarchy || +__pom_hierarchy() +{ + local pom=`_realpath "pom.xml"` + POM_HIERARCHY+=("$pom") + while [ -n "$pom" ] && grep -q "" "$pom"; do + ## look for a new relativePath for parent pom.xml + local parent_pom_relative=`grep -e ".*" "$pom" | sed 's/.*//' | sed 's/<\/relativePath>.*//g'` + + ## is present but not defined, assume ../pom.xml + if [ -z "$parent_pom_relative" ]; then + parent_pom_relative="../pom.xml" + fi + + ## if pom exists continue else break + parent_pom=`_realpath "${pom%/*}/$parent_pom_relative"` + if [ -n "$parent_pom" ]; then + pom=$parent_pom + else + break + fi + POM_HIERARCHY+=("$pom") + done +} _mvn() { - local cmds cur colonprefixes - cmds="clean validate compile test package integration-test \ - verify install deploy test-compile site generate-sources \ - process-sources generate-resources process-resources \ - eclipse:eclipse eclipse:add-maven-repo eclipse:clean \ - idea:idea -DartifactId= -DgroupId= -Dmaven.test.skip=true \ - -Declipse.workspace= -DarchetypeArtifactId= \ - netbeans-freeform:generate-netbeans-project \ - tomcat:run tomcat:run-war tomcat:deploy jboss-as:deploy \ - versions:display-dependency-updates \ - versions:display-plugin-updates dependency:analyze \ - dependency:analyze-dep-mgt dependency:resolve \ - dependency:sources dependency:tree release:prepare \ - release:rollback release:perform --batch-mode" - - COMPREPLY=() - cur=${COMP_WORDS[COMP_CWORD]} - # Work-around bash_completion issue where bash interprets a colon - # as a separator. - # Work-around borrowed from the darcs work-around for the same - # issue. - colonprefixes=${cur%"${cur##*:}"} - COMPREPLY=( $(compgen -W '$cmds' -- $cur)) - local i=${#COMPREPLY[*]} - while [ $((--i)) -ge 0 ]; do - COMPREPLY[$i]=${COMPREPLY[$i]#"$colonprefixes"} - done - - return 0 -} && -complete -F _mvn mvn \ No newline at end of file + local cur prev + COMPREPLY=() + POM_HIERARCHY=() + __pom_hierarchy + _get_comp_words_by_ref -n : cur prev + + local opts="-am|-amd|-B|-C|-c|-cpu|-D|-e|-emp|-ep|-f|-fae|-ff|-fn|-gs|-h|-l|-N|-npr|-npu|-nsu|-o|-P|-pl|-q|-rf|-s|-T|-t|-U|-up|-V|-v|-X" + local long_opts="--also-make|--also-make-dependents|--batch-mode|--strict-checksums|--lax-checksums|--check-plugin-updates|--define|--errors|--encrypt-master-password|--encrypt-password|--file|--fail-at-end|--fail-fast|--fail-never|--global-settings|--help|--log-file|--non-recursive|--no-plugin-registry|--no-plugin-updates|--no-snapshot-updates|--offline|--activate-profiles|--projects|--quiet|--resume-from|--settings|--threads|--toolchains|--update-snapshots|--update-plugins|--show-version|--version|--debug" + + local common_clean_lifecycle="pre-clean|clean|post-clean" + local common_default_lifecycle="validate|initialize|generate-sources|process-sources|generate-resources|process-resources|compile|process-classes|generate-test-sources|process-test-sources|generate-test-resources|process-test-resources|test-compile|process-test-classes|test|prepare-package|package|pre-integration-test|integration-test|post-integration-test|verify|install|deploy" + local common_site_lifecycle="pre-site|site|post-site|site-deploy" + local common_lifecycle_phases="${common_clean_lifecycle}|${common_default_lifecycle}|${common_site_lifecycle}" + + local plugin_goals_appengine="appengine:backends_configure|appengine:backends_delete|appengine:backends_rollback|appengine:backends_start|appengine:backends_stop|appengine:backends_update|appengine:debug|appengine:devserver|appengine:devserver_start|appengine:devserver_stop|appengine:endpoints_get_client_lib|appengine:endpoints_get_discovery_doc|appengine:enhance|appengine:rollback|appengine:set_default_version|appengine:start_module_version|appengine:stop_module_version|appengine:update|appengine:update_cron|appengine:update_dos|appengine:update_indexes|appengine:update_queues|appengine:vacuum_indexes" + local plugin_goals_android="android:apk|android:apklib|android:clean|android:deploy|android:deploy-dependencies|android:dex|android:emulator-start|android:emulator-stop|android:emulator-stop-all|android:generate-sources|android:help|android:instrument|android:manifest-update|android:pull|android:push|android:redeploy|android:run|android:undeploy|android:unpack|android:version-update|android:zipalign|android:devices" + local plugin_goals_ant="ant:ant|ant:clean" + local plugin_goals_antrun="antrun:run" + local plugin_goals_archetype="archetype:generate|archetype:create-from-project|archetype:crawl" + local plugin_goals_assembly="assembly:single|assembly:assembly" + local plugin_goals_build_helper="build-helper:add-resource|build-helper:add-source|build-helper:add-test-resource|build-helper:add-test-source|build-helper:attach-artifact|build-helper:bsh-property|build-helper:cpu-count|build-helper:help|build-helper:local-ip|build-helper:maven-version|build-helper:parse-version|build-helper:regex-properties|build-helper:regex-property|build-helper:released-version|build-helper:remove-project-artifact|build-helper:reserve-network-port|build-helper:timestamp-property" + local plugin_goals_buildnumber="buildnumber:create|buildnumber:create-timestamp|buildnumber:help|buildnumber:hgchangeset" + local plugin_goals_cargo="cargo:start|cargo:run|cargo:stop|cargo:deploy|cargo:undeploy|cargo:help" + local plugin_goals_checkstyle="checkstyle:checkstyle|checkstyle:check" + local plugin_goals_cobertura="cobertura:cobertura" + local plugin_goals_findbugs="findbugs:findbugs|findbugs:gui|findbugs:help" + local plugin_goals_dependency="dependency:analyze|dependency:analyze-dep-mgt|dependency:analyze-duplicate|dependency:analyze-only|dependency:analyze-report|dependency:build-classpath|dependency:copy|dependency:copy-dependencies|dependency:get|dependency:go-offline|dependency:help|dependency:list|dependency:list-repositories|dependency:properties|dependency:purge-local-repository|dependency:resolve|dependency:resolve-plugins|dependency:sources|dependency:tree|dependency:unpack|dependency:unpack-dependencies" + local plugin_goals_deploy="deploy:deploy-file" + local plugin_goals_ear="ear:ear|ear:generate-application-xml" + local plugin_goals_eclipse="eclipse:clean|eclipse:eclipse" + local plugin_goals_ejb="ejb:ejb" + local plugin_goals_enforcer="enforcer:enforce|enforcer:display-info" + local plugin_goals_exec="exec:exec|exec:java" + local plugin_goals_failsafe="failsafe:integration-test|failsafe:verify" + local plugin_goals_flyway="flyway:migrate|flyway:clean|flyway:info|flyway:validate|flyway:baseline|flyway:repair" + local plugin_goals_gpg="gpg:sign|gpg:sign-and-deploy-file" + local plugin_goals_grails="grails:clean|grails:config-directories|grails:console|grails:create-controller|grails:create-domain-class|grails:create-integration-test|grails:create-pom|grails:create-script|grails:create-service|grails:create-tag-lib|grails:create-unit-test|grails:exec|grails:generate-all|grails:generate-controller|grails:generate-views|grails:help|grails:init|grails:init-plugin|grails:install-templates|grails:list-plugins|grails:maven-clean|grails:maven-compile|grails:maven-functional-test|grails:maven-grails-app-war|grails:maven-test|grails:maven-war|grails:package|grails:package-plugin|grails:run-app|grails:run-app-https|grails:run-war|grails:set-version|grails:test-app|grails:upgrade|grails:validate|grails:validate-plugin|grails:war" + local plugin_goals_gwt="gwt:browser|gwt:clean|gwt:compile|gwt:compile-report|gwt:css|gwt:debug|gwt:eclipse|gwt:eclipseTest|gwt:generateAsync|gwt:help|gwt:i18n|gwt:mergewebxml|gwt:resources|gwt:run|gwt:run-codeserver|gwt:sdkInstall|gwt:source-jar|gwt:soyc|gwt:test" + local plugin_goals_help="help:active-profiles|help:all-profiles|help:describe|help:effective-pom|help:effective-settings|help:evaluate|help:expressions|help:help|help:system" + local plugin_goals_hibernate3="hibernate3:hbm2ddl|hibernate3:help" + local plugin_goals_idea="idea:clean|idea:idea" + local plugin_goals_install="install:install-file" + local plugin_goals_jacoco="jacoco:check|jacoco:dump|jacoco:help|jacoco:instrument|jacoco:merge|jacoco:prepare-agent|jacoco:prepare-agent-integration|jacoco:report|jacoco:report-integration|jacoco:restore-instrumented-classes" + local plugin_goals_javadoc="javadoc:javadoc|javadoc:jar|javadoc:aggregate" + local plugin_goals_jboss="jboss:start|jboss:stop|jboss:deploy|jboss:undeploy|jboss:redeploy" + local plugin_goals_jboss_as="jboss-as:add-resource|jboss-as:deploy|jboss-as:deploy-only|jboss-as:deploy-artifact|jboss-as:redeploy|jboss-as:redeploy-only|jboss-as:undeploy|jboss-as:undeploy-artifact|jboss-as:run|jboss-as:start|jboss-as:shutdown|jboss-as:execute-commands" + local plugin_goals_jetty="jetty:run|jetty:run-exploded|jetty:run-forked" + local plugin_goals_jetty="jetty:run|jetty:run-exploded|jetty:run-forked" + #mvn help:describe -Dplugin=com.google.cloud.tools:jib-maven-plugin:1.2.0 + local plugin_goals_jib="jib:_skaffold-files|jib:_skaffold-files-v2|jib:_skaffold-package-goals|jib:build|jib:buildTar|jib:dockerBuild" + local plugin_goals_jxr="jxr:jxr" + local plugin_goals_license="license:format|license:check" + local plugin_goals_liquibase="liquibase:changelogSync|liquibase:changelogSyncSQL|liquibase:clearCheckSums|liquibase:dbDoc|liquibase:diff|liquibase:dropAll|liquibase:help|liquibase:migrate|liquibase:listLocks|liquibase:migrateSQL|liquibase:releaseLocks|liquibase:rollback|liquibase:rollbackSQL|liquibase:status|liquibase:tag|liquibase:update|liquibase:updateSQL|liquibase:updateTestingRollback" + local plugin_goals_nexus_staging="nexus-staging:close|nexus-staging:deploy|nexus-staging:deploy-staged|nexus-staging:deploy-staged-repository|nexus-staging:drop|nexus-staging:help|nexus-staging:promote|nexus-staging:rc-close|nexus-staging:rc-drop|nexus-staging:rc-list|nexus-staging:rc-list-profiles|nexus-staging:rc-promote|nexus-staging:rc-release|nexus-staging:release" + #mvn help:describe -Dplugin=io.quarkus:quarkus-maven-plugin:0.15.0 + local plugin_goals_quarkus="quarkus:add-extension|quarkus:add-extensions|quarkus:analyze-call-tree|quarkus:build|quarkus:create|quarkus:create-example-config|quarkus:dev|quarkus:help|quarkus:list-extensions|quarkus:native-image|quarkus:remote-dev" + local plugin_goals_pmd="pmd:pmd|pmd:cpd|pmd:check|pmd:cpd-check" + local plugin_goals_properties="properties:read-project-properties|properties:write-project-properties|properties:write-active-profile-properties|properties:set-system-properties" + local plugin_goals_release="release:clean|release:prepare|release:rollback|release:perform|release:stage|release:branch|release:update-versions" + local plugin_goals_repository="repository:bundle-create|repository:bundle-pack|repository:help" + local plugin_goals_scala="scala:add-source|scala:cc|scala:cctest|scala:compile|scala:console|scala:doc|scala:doc-jar|scala:help|scala:run|scala:script|scala:testCompile" + local plugin_goals_scm="scm:add|scm:checkin|scm:checkout|scm:update|scm:status" + local plugin_goals_site="site:site|site:deploy|site:run|site:stage|site:stage-deploy" + local plugin_goals_sonar="sonar:sonar|sonar:help" + local plugin_goals_source="source:aggregate|source:jar|source:jar-no-fork" + local plugin_goals_surefire="surefire:test" + local plugin_goals_tomcat6="tomcat6:help|tomcat6:run|tomcat6:run-war|tomcat6:run-war-only|tomcat6:stop|tomcat6:deploy|tomcat6:undeploy" + local plugin_goals_tomcat7="tomcat7:help|tomcat7:run|tomcat7:run-war|tomcat7:run-war-only|tomcat7:deploy" + local plugin_goals_tomcat="tomcat:help|tomcat:start|tomcat:stop|tomcat:deploy|tomcat:undeploy" + local plugin_goals_liberty="liberty:create-server|liberty:start-server|liberty:stop-server|liberty:run-server|liberty:deploy|liberty:undeploy|liberty:java-dump-server|liberty:dump-server|liberty:package-server" + local plugin_goals_versions="versions:display-dependency-updates|versions:display-plugin-updates|versions:display-property-updates|versions:update-parent|versions:update-properties|versions:update-child-modules|versions:lock-snapshots|versions:unlock-snapshots|versions:resolve-ranges|versions:set|versions:use-releases|versions:use-next-releases|versions:use-latest-releases|versions:use-next-snapshots|versions:use-latest-snapshots|versions:use-next-versions|versions:use-latest-versions|versions:commit|versions:revert" + local plugin_goals_vertx="vertx:init|vertx:runMod|vertx:pullInDeps|vertx:fatJar" + local plugin_goals_war="war:war|war:exploded|war:inplace|war:manifest" + local plugin_goals_spring_boot="spring-boot:run|spring-boot:repackage" + local plugin_goals_jgitflow="jgitflow:feature-start|jgitflow:feature-finish|jgitflow:release-start|jgitflow:release-finish|jgitflow:hotfix-start|jgitflow:hotfix-finish|jgitflow:build-number" + local plugin_goals_wildfly="wildfly:add-resource|wildfly:deploy|wildfly:deploy-only|wildfly:deploy-artifact|wildfly:redeploy|wildfly:redeploy-only|wildfly:undeploy|wildfly:undeploy-artifact|wildfly:run|wildfly:start|wildfly:shutdown|wildfly:execute-commands" + + ## some plugin (like jboss-as) has '-' which is not allowed in shell var name, to use '_' then replace + local common_plugins=`compgen -v | grep "^plugin_goals_.*" | sed 's/plugin_goals_//g' | tr '_' '-' | tr '\n' '|'` + + local options="-Dmaven.test.skip=true|-DskipTests|-DskipITs|-Dtest|-Dit.test|-DfailIfNoTests|-Dmaven.surefire.debug|-DenableCiProfile|-Dpmd.skip=true|-Dcheckstyle.skip=true|-Dtycho.mode=maven|-Dmaven.javadoc.skip=true|-Dgwt.compiler.skip|-Dcobertura.skip=true|-Dfindbugs.skip=true||-DperformRelease=true|-Dgpg.skip=true|-DforkCount" + + local profile_settings=`[ -e ~/.m2/settings.xml ] && grep -e "" -A 1 ~/.m2/settings.xml | grep -e ".*" | sed 's/.*//' | sed 's/<\/id>.*//g' | tr '\n' '|' ` + + local profiles="${profile_settings}|" + for item in ${POM_HIERARCHY[*]} + do + local profile_pom=`[ -e $item ] && grep -e "" -A 1 $item | grep -e ".*" | sed 's/.*//' | sed 's/<\/id>.*//g' | tr '\n' '|' ` + local profiles="${profiles}|${profile_pom}" + done + + local IFS=$'|\n' + + if [[ ${cur} == -D* ]] ; then + COMPREPLY=( $(compgen -S ' ' -W "${options}" -- ${cur}) ) + + elif [[ ${prev} == -P ]] ; then + if [[ ${cur} == *,* ]] ; then + COMPREPLY=( $(compgen -S ',' -W "${profiles}" -P "${cur%,*}," -- ${cur##*,}) ) + else + COMPREPLY=( $(compgen -S ',' -W "${profiles}" -- ${cur}) ) + fi + + elif [[ ${cur} == --* ]] ; then + COMPREPLY=( $(compgen -W "${long_opts}" -S ' ' -- ${cur}) ) + + elif [[ ${cur} == -* ]] ; then + COMPREPLY=( $(compgen -W "${opts}" -S ' ' -- ${cur}) ) + + elif [[ ${prev} == -pl ]] ; then + if [[ ${cur} == *,* ]] ; then + COMPREPLY=( $(compgen -W "$(__find_mvn_projects)" -S ',' -P "${cur%,*}," -- ${cur##*,}) ) + else + COMPREPLY=( $(compgen -W "$(__find_mvn_projects)" -S ',' -- ${cur}) ) + fi + + elif [[ ${prev} == -rf || ${prev} == --resume-from ]] ; then + COMPREPLY=( $(compgen -d -S ' ' -- ${cur}) ) + + elif [[ ${cur} == *:* ]] ; then + local plugin + for plugin in $common_plugins; do + if [[ ${cur} == ${plugin}:* ]]; then + ## note that here is an 'unreplace', see the comment at common_plugins + var_name="plugin_goals_${plugin//-/_}" + COMPREPLY=( $(compgen -W "${!var_name}" -S ' ' -- ${cur}) ) + fi + done + + else + if echo "${common_lifecycle_phases}" | tr '|' '\n' | grep -q -e "^${cur}" ; then + COMPREPLY=( $(compgen -S ' ' -W "${common_lifecycle_phases}" -- ${cur}) ) + elif echo "${common_plugins}" | tr '|' '\n' | grep -q -e "^${cur}"; then + COMPREPLY=( $(compgen -S ':' -W "${common_plugins}" -- ${cur}) ) + fi + fi + + __ltrim_colon_completions "$cur" +} + +complete -o default -F _mvn -o nospace mvn +complete -o default -F _mvn -o nospace mvnDebug \ No newline at end of file diff --git a/img/example_powerline.png b/img/example_powerline.png new file mode 100644 index 0000000000000000000000000000000000000000..5d28e2d9fe2e4d0a4fda0315ad97bdafa399425c GIT binary patch literal 82148 zcmb@tbChLWuQyt@tuEWPZC7=v%eHOXwr$&Xb=kJ$p z^$ZKU_V&)ZglRy9zL4|)n7tx5(b2Qb^^CyZ$8{`#`1<<}cKOxc2~XeFxlgxIPhbG` z{uy1K`CUSK8&ClC^IU|KU;xYtcsicaAc*MwskBh62*Xao7vJD6NOjA2+#eYRCI!$A z#(?-kh!6^20P>Z6_SNh*K5Fo|-~hp-lVtQTSHqwNu-5?o@Bq}=^kUS^%$cG0dejGx zc|lYa%@t0=0b$ss^JA7Hfanmwk^#}_f!q17cg8^{26WTd zAixQ3Fo#55TR=Ynd4jXWVhT*=YQDyIvcb6#AUt(H#Fl*?LJphpAw2_|-uzE`3i8zC zvB*^tF+CUkR&)bUbw{_%?oi@V89+J=)a{clB_`^gfjKyyV6#^YMJO z$bjwqxB&d_fhn6%oKWoWdH?1zh~yQ8Hwa|tg&=B(V~YbG#XZ2U$6f_&jeU;I8r3`a zLC9NseoYRdCinm~H!#7z&qG0QlGyLz%CKz!poXDufM?TdSBW5u+;`F|EnqHKjY0jKkC8wLfaw{yFT=A=nlBZ=q&|R_&(RNT)Mqig za91H<>fFE_DC1s0S3iUcM9f?OWk0l8aME6+6+n|6xSCx61Sm}$c(?%OSkOCu0&-9j z0hU$(TEB`NuoHmITySoXm_Bk0aGPFgS9sMv&J`do1dup>6a<<<7(2m_SaM=u3IVKG zUPG`|{^?k<1Nb0;x>-GP;PHU)yasvL1&CiE)&e}U_{?Bk{zth+C(sYbe!@Elju6g) z0D?$)fwQ8igck@Q2w$P%!bpV3c1U($3K6aTreY8HxJ1K<4WTN7q)7Nys~2h{ekZBhNXrV3i*cI@$@eFSf|Nu!3=Hkb?qS(J z+tt|WP>_>@kT;TRk?WJoDl#i_=ceYp_>~Mv?L^)3zMy!5cK`T>`3{SZjL%Wb_?^WV zRv&psdZ;wcLdi%8NcoErXi=dYs$5e!K{;cgapCtu@w?Tez=9MrF*6YJ8#6C+ z8Z){n?kx2zp_!YRlUbJ;lj*tXyV>@<-U-NQF5&`gXbff{p%AQ(<5Uh(=MskjN2C8jNT+)0AKSTz#rS7AfPy) z(a??%)R2sjSkR=9+Gv?b`3S#J!codm-3cNQRgvJ(s*!L}1wuz7Kth#6xlu(zDMP`+ zRl}mg@`e(J`UlO2NQdn9*7of7QihI+F^DILf0J+$^Ge)Fw2Pxjz=?mw$EQHWl_$6p z$q-o)X3=hve2Rz)4{H_+9tBYcRr*9PhobRcJ)>$Z&Y{Jm-;6rFfOo9zy#QN@Llj&@N?9xXtAh>Xu|Nt@YZnD@HuHX zshISev|Vv?v5Cy_l<;K!WcwuI5$RFMWC`^PO+Pg!wO>))A;p9ll|Y4f#rhJ41=Ts! zIXvrc)(|T&OEW7T%M8nw3&#tni>(#t)seMlPI=B&4rWeImjwrE=S-(~N6x*6m9!y_ z*|zzh!J)pQEu(pr?WTptu8dC2e%434_ z;YD1AXZ!Hl2I>UsM)Z&OnD;36ya%}kx21DsA*3*5Q6wfMw4@ou+fySYpJcCiCcW4% zZ#EDwiCDz)3be&Mlw6ek&lTyP?G^3?DIJxpNwrGaOLZr?C&DFAha9`ZnyN za-z~CStfBLZC7}fXJ^fGE^AF`XZ`%V_uP3+VF_lrYyxUBLZ?UHqxCFxD8+6qb*!t) zF5<26t|6$@dy1bb>J}Xu9wu!r_MZrys7pzyY5j%SRqoQ%px)V59F#|Ljn#_gVRhJk z{1}E^%;s)GxoK&AXj5fbU^QVCvWC3A%mu`0%$3D8Vx6{ecBy!2-a%v6k(bfYu?P2= z<=?T=k>>JzO|rS(iD&0iHPT~}w_NZ%1zZA7_g48X`X=*^$HVOUqRa2GvqkhMwi!Sf z&=Q;&%!y0IZH|UkG5}s z{De$Lwn=KD^VX^5j(TUl@3e8A#a5?W*Qw<3 z8CwDSUFWWc(Z}kA^tsAq-rT{M%F*K3;|l%=FQqxD8Qh!mOKT%+n`D)zfvj`+apGZl z!TaRP8-yVI=3Ns2QU}r78^F`d_ny!Mz*G#dcklZ^v_Qn+RKby9i~vT~zJUHQx+ z<)Rn!Aal2=v+0kerMbS-&c&{ZXV-TB%*8T0TX3O>ymE-}MiuixuuuM>NsP+|}S4p{Lz)p=lXxO-nLI^3bh z@3$ilC%n-mY2Wq?_iTALFhAP2n;iA8N2-5wyt_q!-n%4U)9|HIQ_?ZePSGA$k5)}q zYimfonLdO)DD9gJ%s`)`vm$l3`ZRqQcVjj#zVE-xMDuigeg?cq5h;usEl|4yHpqq( zEA@iK{@gRZB}}|khBr$!Lq64}AEhs5l4%%iFs_TTueIg0L$!0cm%g>Wv%0N;;707k zMlYa`8$Gfs@~52>@L=`N3c4-2&w9KpnY3-1!cz> zN+;9?b1Dldi=0K9Ikf5ZN#wcq^2G8pi#$^y>xb@wm6kb@$(hBG5w0$xHKzHYk(F72 zIhFp1d5jA`yCnxLrwluvt(kL`?F3Ka0q)7}L77; z8n&L}`V;l8D7KET1Rf@z;kZrDElz4&)!1z>6n^V2$WQKP?p`4Vmxzg$W+}@g%4wK8667KvHojtBrKPLM>Iu_wg+27123@R2Z6!8xEAU%seJ`6qw zh7VHmYFfG%EsHHVJkdY89}7IVPD{?HM|8etkBHlh6Dq!45#cI*Se9Js%A%R7lnUeXCnXECsk)x5ziP}l~ z6zt^ceDO>ZGZvGZp4*bxq)}hXV$XQokW)|9+}c9GjKMTbugLsys(pxbMRoQm>sQn# z0l0ApdNio4sOJ?af*?lVKAP<)Nel8_^4^`IHm0K_>q*B1U`?wu`x~1W9S&PHnfUN zeU7GIj0)}r7Z0b%CgBqn(_59UYOnR?ha1yw;aJrgtI(oO*60K0F{}q#<2KS(gj%Yd z{ylexXCp_K7Om$vY=+hvO{6VN&EF@=-KcXa-tQVN$64zx;MZ197*AVg4VT+E zk)Z)lK>=JO0t)uR%(~gGl{m0Wj2Ix7q=j>XeuXv)4y3)S7&wjw(ZNIe>zL$Kw zb%?n`vk$%V6S)_95^4)&9PJ5d4hC(s?awSsj-pzVJ2J?OiIxT zS!L|(?Mj-`f{xT*Jx&y@w-bl`6>l^P%dFO(roYT}F10Q+PPSS{RtnyGyS5#Ao#pTA z4v=?CpbYe8e5CWW6J%6+in2Q1aeEwHRo)FIj-ZIW3UVNl z_?L4LPl)`H2qJ6+4Dqe;w}?36a7Q^0up|MK!mz}k3+88)Y%i$90VDv%*voj$$kK?_ zkySA~g0!MPaHpYK_~U%Z22vF5m9zuym)RC>nPHfJG{QCFokq_ZoX*gPGQlteGcho3 zn!p+68MMt{O%IQ-4rx#C4vr1JhF65Ihlquv-*oSEOy*GRkdlKR+f(%q5VGyIsQI}D z59*C!P}rE!U}jE+T2^P4aTk09_fri47C9ekBzZ0pH?cqBM9EHFuhnz%w!67MzFmT~ zz}jGMGT<_&F$twcsIjZzHk{RJHyk$H*Vfpl+U?oF*_*i#aU7g@FBNP%M9!Wso@8Aj zpIGdh99-kX;=1ys5)M)|a%GYbQrL59kQFmTGx8Gd+9A2vZ|u$$+)+50Ri2Whtr(1{ zTdW3VzIGNOD}sjhpYENL*csWE^d#!kgjOkXJl}hIRZRw!w-34Z1^Y@Zr(@9l)K;MqVc)Cz*p8^@aBw~TMdm-H&TsUk}xP|~% zL5{8?gUgP)Bzzg>DYH6rGLlEs24Kjblf3X=(JdeOd)auIfmxYFc30 zp*pu3@~Zwy7yAV}P3vUal-s21)T`wS4@f?!90Us_ACfv+0m9G3n*?qu7J>o7bE0L! zo&wXN2VoMiDRtl~_0pyagYpbOvD$&$^_%Ls(A(&;GWCw2z(Z6E$P8z$U+<73@+OrN zsBGXa=5qFQ@OVGBUB1cz-Td(UtptMyCI@mv+C^!Gh)3)OXNY;FyL}2Nhj<@N++~V| z(2j2(Gr8Pe$v&W9B2pvpQeKj*v!=;Qcr`W4G6@!tO0eJSwD(Bm@i@bWk=S(=&53E+D9v7R;0RnSq`q0s@^vFwua-1?mP9R3{q z^yDq^efR40w!E*?^HlWg^*nO{kGzj}Nk%2)=>Y&y0-Sz5dR-6jut$GYBKWpLN@kB_$;&xw2XwjQ26-x-1dgXoQlGt{}TW6 zi-*wE(b1NZj?Tr!h1P|M*2dn1j)8-NgN~k&j**e(4+o8do3*2!D~+`S(LX2o_dLQz z4hHsSwvJ{t*7$$TtEX?{cJo9-_M z{^rm>(E7`g|3UvhIqGO;{Qu$TUnBq9(Z8si>WW4VHkM9*0m;k8$W8aZh=23%A7er` zR<`y=4*x)fSuhb<#~VBjQh8U`c6FbEI`Cg>ochzQkExKLGd)2Gh*_19(1WmisD z*K&<^*N+QJo37t$icR6@7@8H=U9fZ5aJ-jKuCaLzQX*3_=qpk1iEk1>O@g-|DFD)%HS9} zuw(^SFhc!X5#;0WltGCMRpRfWu@EanwqD$B*%ZCWK20@Y+zJ1E3JfNYYWOka#pmp| zFr=djO>o)@dv>bB)2>?3xe%E97Es^tw`2J^GJry(Z9pyYkt$bsJ28tr5c4EUep4kwS>x#4bmW zruEVo-FMBnYUGQ{n;f3%F2uu{JzP$vJRv6DPSaVL12YapD{LPcQjq^bFBZa+6d`rT z7Aol$*L4?y(*m@1ADq9VKzPIsQ6j6=z>A}ww3z~vI*Wn5hYPDiQsU&p{bpxLaZnb? ztk2Zqd_ef9f`<{F4(G|XQa(aPQYV;(Dt`3p#PER-zFA{-9@^DC&F*9IXI+c7;lpt7 zV~g(Bf-U)#dtPb5`_YClLM8;_}$HNR@)8R0-o=Cw#{!rySIM9^4Nv~XeV&IH+1oC4IxTfx{DvPm8%^f4=Ox}$YLijy&(nOd z=&hr$AC}?qA^+K0u@I3QKu~;`aZ79ay=^UiqEXC|;$cy-6mYGdnE11#(~EkFT)6FA zIUw+*UGzVWr)7gypDFhesuJt>y1{42L28OTv1n1=sX%6uIM*Aei#3#!Rr2f0!_rT5 zEz3oXL@+5amJ9DBEZ02Q>cwxUWl%@?euWNe^9`C*4;9=8psHA~Rw_VfYdS$rXHSc% zS79a)5+RN$8+>X*+&l~L3&ZqxVwHXquDN?5^xU9XO5mEVKRrD9xrhT9$L%;N|IDqd zge&fq4@64fYS}19;C2uKrA5^diCGpdtl9LH(MvDdq-oVqkG{iV`tbBbKsl%(Ddi%1 zN9X~Fv799A12zwbwrkD>G0qtajmbF(_Hq^(L;lak5eFFt^owIzPVNE2`R1>h4%*~@ zit$quuwL2Hm_Aj=H<`O+@n1{NAC>)rUb+93JKgkA6;Yuch)3JQ15B5*l&=45NZ1!M zVs{xzGby?L&+MD-u#i(_)Y-h*KGh zJ2Z!JiC*_fhnK5dm}%DQay=t(&}fLyhR)kv{!HVu40v&gh8Z0mg%$b0l=53-dM)(R zXC+KXuzWTWZ;J_A!oe7TE*55u#kEe zAR;UAns(%A^MUjCFd5!haEb<#(|NELHltE#4{Fi1)kw2vRhHK`BJt}(ZgIyni+8ip zn8Du>0`)_bufs~(5!r%1C7BAPZ^AKNgVUwpu}6H$CTOvkDOM;V%9Qfs z9Tc7oSjq6+=j>Culj}ugij6l_WjD5>2unqyRRL+0xpTyPaV3|@C6&{g02q_XLMwqyXcxwl1wf5o( zG>r`r^I=R}Tigw#=~GhV!M9IaPk*~#QeNnbG<0=aA7@H)!axBwc=t!d7Pa)K*-MqZ zNsM=wFGtX*QX_hQvmk^2TMWjq01@TC6ZB0xKWWn(ZI8vRe8IgrlJj*r^+G0yH6tQ% z} zs()jvEsDxY1ggp#rPnD?!QhJ8q8uvAYVys>F&lToN=!8kbxnwo9?S<2HM@E~^Ae}> zt-_UpXJQ3u)wU~M{XQ^5*wiSFkRBe`>9t(r;~J<4zG3R%I9+O>mX$OZ*DHlLU&U{@ z4ITdhV3&&un|gdsLKLO~3DXLka?DUi<86L8H{yRkEC9oLF^K4a;*WE|vh(=YNWmek zMV*f9pptUh)6}P&&m2J*mr#ieq&T?YL~`>lv5HNWdwYoC=x`pytmrhQN|N`#P?hAR zuECMbvDb{|7}$Hw-q$-?OloOoKr45Bw~I3a$doz&V=jB?ls)V zRPt{;WYN9m4-O-rMh&2sUTGtOeYT?I_jG33OJa7Kr^@uW3SQ#Ip-Jtp4v8bCPoNOl zjUaa0{Negq#Iy2txF{YjH*)s{)NWVy>+#L$(Op;Hld(QOzUg;mDTfP4ht>N5$6`&` zL%oj9pkrmX%H{L2^DD;JJIp)b6L|X}j{6ZO`^_!{?zcW%zp>#iTJ$0UQMASMkHHC& z0JWnXUiWZogLlb$c-^15;7c^p{BQ9_;y(|lTN6$8ADQdr;^MIX9wLDK&bj2Y2LN@S zr3xA+!qp{IT_0unMS{T1FB{bva?DQX30j;}t+JfmGjoK4gNUND?%cUF?TWqSui0|| z3T5F0eN#ZAGPefZ2Cj5J`&=L9xDd5HV7|Neff)CRIIbmOWtZRyO#_B-GE0WVh_HIX>VG6-1ph3E{w&cjd=?u8{?96V-a&ZU6W5ePTC{hAF|R2?N26I;AvAbIDq+}sS}U*j zBUadWLbLze6Fu5B#tiaW!h9Jr4a*)l3(oDP?9&@3!^8BSE~YraYGS zFS}nBcu?_j>{csS+eGl4#8ir5hXPsK|+9 zHRS!+w4{WAj%E~54{1S3!XOz8K_Y2al1d=^ObfZHkjKd|^EA!er_W))Y zkX?E_d)K4F00x{f+=B`L>X>Cl6OL)$T7EmV`W8cL7gfxu zOWgek)YoH!rxQa4i8d0Tb#znFJzTD+`&4QYN1Jsp@^wqg=!hAs`x zF;wZmsg2H*us76WeyW2MeC7Tj^D5eetMUnx81wWNsk)Wx&Zzzus60S9lf4lWnaFa1 zX=!KOujDsw@O%B~6^SB2-Sh}S-Q<-=?BlgC?mkT;J#c;I!?GM;mdi}*5XTPPSBTSGs70I3} z4g;$Uc&j%pkPdAOUPa71x2f@udE?cr*aPsJuRo$;gyz|-sA8qx-vZ*iCRfIaw~!xv zm)Ob``yzZro&k99I{b8e1ct$hO?s*~BWy$~#X{BS4FmH|J(;6V>tzH+YoJCxPB?jr zeQe6ILVj=w$q!BdXbDYAGil7c?^DOvtgHEQ*e#w^riKKBkP@_v6^@DoIvPBl=}SkI zEjE2)FlvQG9z|0r}hAlo}b`80s5wiP`oj@Gt(8%Go-C-f`j z&G5?#X$8riJ+bO5ZYmlL#Y;`7{klNHDLw1Y2a&tj#4A0J3bh&-UXM12*PyAQ1>-{M z%D^R)coTxzYWY<=n3Spm-`(DXqLAR4Lx3UUQu~EAnS)hb83yy8JVyMVsZZjf8i+`wRwL&2%mG_g3g(E87plj(-((O~ow+PG zkmrI}Y*Pm;dd!dBCnn%$seh#*{XmP{XbwcvUH9;v>cxwLR46T8uiDaZh%js6Z~g-> zi{4+xi94O%lJ$9B=~zEI6cTMrze~^2qiHgJ5|T(#C)4<&(ipkDoKI`L#N55LI(QAm z%&dOqEtxc~+iti#V@XFKEN}UzPb}UBf|#=GAKl92q9!~?O5W&;m)2jC zL3YA;zMw$H9HElC3y`=fUF*LIEr>9xP9NzY!aUCR%xVlB87%c!03Ke0ez+;Y#tf$j23WcLWZu>p_#te}+2~+ns|>a{`H>LFvZU z9_L7cgUl9hcyglzq2p@6tRN!Yfq>MW?Kh?-8`yZneV=8JvtWS4jj`@1!+ox@7FDc) zZ~o>%P4bUnTF6PyL+HHVkXdQ(M$0gM+8Z6>7g;*k_KTcUH7s-?@OM*+UyqBM^CwBO zx|!#tri?M%>yfw-ENoh?bw9}-lEj)J! zC%q7wOxtdDzd1_S*TAfT|LsVC( z1>mxjoL1Po50zGu36WyLdZ^g6D)0r=)zAP95|<3eB)b7ri)+n%14)2k9zNl7 zU16}XSsS_kck+&`%$CY$Z+z5+60}|250%#sYe%#1lk*ni0jxi^sif>&oO&iMrZZ45 zD&D$AKfSdQU1Ry6x3;G_9&ff#g3M@X`V&6EhDk>b5cdGQyq{$Qv!RYzBKgg*1928% zWv3n10FLm<8_`~nO1v>3P;F^@@}wlpip*COS#;O`oMOw+Cg*t>zMq=#`BRg(DPX417%E4>lV5qImUj-iH6u3Jj66p6T4JnIrkNlUSO|#o=E)&D zZ%jUr2(;~%aqi*Y6Z^y*Gtcb)C3sijgVdtF-5;PtXN%% z+)Arx)m3r1@M^QJ#t{Af4Y1-X=|Js1pZGu?FXmOyF)YW+>?-G1MBlYJ+)l+V6=D(U zX?N`?W@x*l3uskpN)|MHjM0h?7a&uE{prfD=w~@O`S3^$Zv?(Z3T{$z=n-d-yn0%w zy4%GEjWAEI)P@%nLg`KviB3y*?;a^}H>n zBZ?Mt{S9WvPXb&r+CW%>k{0XH5zk}_LD41ObUnPZ^4b>#D$g%QP!CEi@ewD&=#(F-sof&6*PDWU!shQo zV5hcjCfJv&Pma*cOw=HMO3G~Jsy}#1&(0yIkoAi19&c~3fof7!?bk8~`2^hjaPqD~} zx4iLzCNJK;(MU&sMD(8O(z74GUI#~tKE-j2KF@acsQ}JIzp8;(sBn|mDOt@+DRCAb z%Q(#OZESsfpE_VfUtEOacW$ptM@N`y%AIL6?6|DQQZE#%q!S@LaS>IvMY zM9hcZdh87;zpaF#ZkFmcb}+8W-luE;8Hg?TU2@!*+_?KnLquj`mI( zZVzq=AY+BkK;#aT{FBK-g=OLW?9LQos<;atI8R;&w`RLR+z~32Hyr&-Mxp&p3dEOr zF!(a42Y54e{UmNm^gxl@*Gh=KKQS)Kl!LmwDuc0v+34s?+?%|T{(_aSB~N!6IA_oRg+^VJEmn~H!RtE-Q0m4D^KGa!Cg z+3|M&RsV=5-3h;OeA800PN-f2q&KH~r&M!w$L=s!DhZ@GTn>e&q|s_$Tadd`EEy{8 zS?WDqd3$l>iD-upQx@%v->bvLmE@5g*QN4^XY+7|TcVa78uX(qzw_E_2P0yQe0tIz zV#wN|DB~elfr$8xG$~W#+E1R>*qxRbI|H(XEBZK*ozF{}xyI&$X+1%#?uaz~b?Kxq z89E_XRN4al4tvX1xs9i=K8Q^~iLr_klsUH$x|FPO;A0CCvT|R@7y0sLij_Hvy-RoT z^D5>mdd7PcqVZAp*Q-(;B9bY1wC;m>FP**N&V~{A&>wIYrx<2+*f>YHq zM);h}vizf(5^t0_Xy>-^4S&0K!-Q64eq;0O1OFZpKXD8AQ)@JXxjyvo2NWzXt+E;FT%$L$n@OB>A%YtgXQU{fV z+TYUXH&r+53=)TC))8ojA_d}3FQ$xMqv>vQYT2x^Fhu(V1xV!3-uWQs%$=Xl^qH_1 z{mD^H5YUYG6+B=)TU4EjoyQoYMV_JG$ccUt=>GEFbMPLt3IlT_FGmJ=go7t<7Av$m zzoI8ka39w6FXyc8+XV1C--EZ%Bwh4X-_f)L&R;T=M&ro={byHqw>18seO`bu;v&K4a zsA}hWw762nWsy`3cxwu5a~?s{=8h)%!HVbWeCV>T$WyyU8%;Jq-V^)8XJ+`V`^kEI zwNT^ueSTu45y?S((5IJx_@n=Oklgia*9m7fv_4AmUC5<6rYrC>4e+ZPB3s_jR7VIw zF?B|tm2t3JgbVvPR1(lnb<9LV}qwmwrJ5{V|$M(aP8OwFK! zz@tuBD~EzaxM(1@UhDRNaOd*{Z29Ds{#`^_ro2fHj1=&APGRYO3ZKlW(#+Q%6=2M| zdba=eVz1;sE}#Y7VW30YBT1K|*T7u&ZpcMo~uwtr;n zq>#u|e3jU`xsR(688UU00=uS<&!|_^D8pnjh6}mwI7QF8%3r~86+Ri~jbsm${!C0% zt+fgk7bk)VQ6Y{-JOWxwA!vW?EeHuFs~+r$Vw<=9ez`6XOH-}NeF%sskWK0_NhG-T zQx!Vs@UfOU(oe@1luYU+g9!?4*9a3L4stGBh2?^{=aOw>XSHlfasvkdCcXow+c z?d|?@K=q$uoOH~UIYUienJ0+XH`{KuAKVTtAETI@>zWdVKb{^H9-nQ%$FTRd=}r!MA-?IoH<&;IK_01Y;=FF(>SDo>05$)r zWLge28O+Ex=UUgxm43&1Ib$TbMR;`d~$1uW)1ck*V}aT`&)J)`dMZ- zFnPjU6q1U$;SPHrxMDkquU?=yu)YNid@(azRxu7>R?;QwSrDqd9(5$HuJ$kE!0~uq zV|!lCR`c()W-=ye=^I%GPN9Q#-Yj`as-L5Kx$O=pgP1Za^imBR{uNlWtztMLy0;j! zk2tu}ro=V3eiSoNBDkBT9{7s0$(7uS`6aW# zS0t8*^7B;|=MO)ar@Dz1MYtFt#8P~{tn6RF-|_67wzKFzU!#&R)O|;+rAEr)Ek-qd z7P=Bg$dwk(8S#wM<`uJLW#?FOH>Pgec-g6C8w**M-`TZ!u@(;Vqn-=3u> zE|v~r`L_D_+Hd!M%IQ^k(DcOu$9I^yMQE9om zU9m}#>&0NaxY?Vzu8Wb(qd?;F9g(kdDDl0{p@Hze2qTnO5Y&p2@DYQ)fhU=2*+&aT z?=WITpTiz!-g`*ZzGUgz%092)#LCL;e4iuJ4HLil8H;{TH`*845!{m)ADT7ueVT=Q zltyqi0AWxm^#$`S?|TWk1?yBZ*|4~#0OVJAG#;-%ZXBp zKAir*Qv1x7-$L}k$8-<9IbYn+I`88o!jt60n^~dL(_uHyHs{~LZT6fX9zY3p4ziHH zlN}B!6|4@h`54t-P}oe)ILsB#G&LwAAVx4B(BOjmxuhTX50}+Y})A}5^yFG-}%Ok(-Rw+ zi5WL~WH?6HxX4O~FLlNj7Zzdh9(CiQO~+GIu?&p7pAd&ykaLyz@K1WcBRBvjs0yMpevT{1BDxtK*T|JqQWCEw?cf_k^^OADSeNj~GUu$L zPajM$WP*1EzvZXjczP3%RG}Y=oDD-?DiF0HzVhZQ%QqYV#j=9j&5GvqiCXXBaji8QYU|j57vlQ?-+QubOX)rF zD@$gtPUN1ZTVibT*s(v!C^rz18y!}_9v_}sTz|1Nc;T?x8gB?&*dV_3a*hB2?=;f8 z0|%eH=x-?hlm7J+Ee)AlvNmj_mwrl)$vM9+ev+<4!W*L#`qp|m#9Xhhg4#K~yob8C z%U*P{&sm8xSfoo8SRc)qjUDr}^qtF*@4njscDC2rNIP2q$E1?owjL;VmipNGMz|J} z$K1Vs;zkcgLY}V3XC?0NONi`QtNv9*F&%XCHj$!&*D#kI!!!f?5=|8)9X89oqKW(_ zI5I09sZYpe@E`03^5E+m0Wp7})7|$L>~U4^DfBL;&gZ@WRiUNBm-2+MG*i?VfAZVg zz%Br1utc~ahKhpY8x^B8?k^zdfePG!*+Ygh22JXT?)J3~kmV5RoMRAOuQtlbGm2>E z6ILfDvp;@kequmgo0f)Z2DN9IC2v;{yYks{^%O*s!b2;rq;0QT0HMF;mZ$`KgS3y& zOWcSaJ6)RJ1rMD=A(^O9xYJlcvOhiBKEFRcE{o!dgYd#bJox1-$Y-4M!9Pi2lK@>2 z(DP0;T_w>t{2~MK#$dVUO!{~wf7;F&d-KGgtV;an3m$&hSb!3D)+ZB8vPn#b`&@`F zQSR-DcIBHUIy7VqTle#}EyYT&7Xbt`{}#9v{@dCXmkc=FBAzr_XEh# zv-zvquM<;ml=iRp25#B}dVzNtP*h(FKc)vN~S&z0Q8KFG=f*z`yW=TcAfg0A^@Y8HU zPpdpa!P(#i_u+^SgpVfcqxv05kq{hRcv&{y|NVTd3^LqAV7tR!RnUpuh4Tg{Zv<6t)H%gx0&e2A@ zgmoML^hL5e_fj}8c7dHJQM#6RhP2==DRP}NJtg<6bXo=uwXruCa1FTsG#{M6ycIg2 zX@tn;?9ArWNSBU8_r*IEskQQe$B`a(h3D)wpfl1j9;7&>Pjz*ved6m zqgh!Njyaszn%fP@e9q&oOSN%B|LI?_!*5UBXGL1NPt#dDz#PJY*;Bb5WD~p{9BX%53`b*+PYS|fSwx6 zM3pkn*fgM&L%zxyH4oB}%qH2QbhIp;UcC4q^rCH$cXtjjHzQ z0MB@eZ2b?gGNO0ohG)EK;V}0 zT*^N^sr)=8))qdX30xuJ`GR-$R{1OQ=XG+8+5O%em)$9Bb>^)f<$f9jwWqI?dru*P<&Bq-gUB=)l{&`Hc@Z%q&WJ}^?3&hpg|8_`ls=1E$@DzR!rEx$=N z`?`5x?hamqU4CC6mE;rthugdT^a>YXLys-4L;m?nbcSzdm&A%w5OFM(g5k&-5+;#b zMBdkQxEs5xDUy9gp!Zz-Ruw{X8R8;0(<~kbXg~&SCx^vd%d= z(xuV*GqG*k6Wf{?6HRPelceK`ZQHhOdt!THcI`r8w6=H_Df2jd_mmrA3pX@Y-*yxX3Kb#wh$_te$pY1^gq z`Z>AT1Oz-QIdx+*&^qT(S(IbU__5+tS!@Wh`co6zO_hByMT8SP z1thnO={@g0pvs+!&W*3sW#PuaO;B-|QF*%>I{Vxdf=q>q6~D=A8^*UcozA@fK$T9e z+g}4oiz<^Ylu#SW3#8WAV*-5~&@6b~avxOYL+|UKlBs<>pOWlm)t@C>`2njsADkn1 zY=iq-ma(=f?rFmEjSq>T7<635`vqG3^T6 z4Bj8eg<-*(V}7@DenR5-w&$*^C|9wh%ZE2De87^CX9iXL-39#Zm7}crMFW9ec{vuK zzsTr&L}TNYk5c9rVLX1TmDb3Lr%FpnE$w>C>c4Z0Ua6~zKezKl;!@|;T8Xswj;ceauTR+YTkTsZV_ zOA`Koq_SztE1{Y4lvWzA^a5)C@wxfa^sSJ!iZ6$^SE5F}-$cHy85OFprrIAQYNC7Y z2f}F4bV|KYl6am$Si#^@&8WYMgtQQ}s&CE(oY+m(9+9=fbKXFFK(8MmQAxfj9IEBP zH@4ymLeN!F(E8@mcBb`6-+`DP&csuat1uo$F4ko20#GD8PBc?ueZs-}C+KGm>rPyC zGC*P>%LEs^1fQ)orJ9RvJ<%|_?iKXKG`I2gFnCt6L zm3JwJ)0|QAzbK7tc^K`>skGz!sRo>vs^ceJc-;`His77IVyYF)s73rpjLSjq_bEl* zyCr@9lt3wj{(4f9Jv0)e;7mtYg}GIqhz z(bNn5EeoH;qtMGYss&-0Zy1qhP{PLAXa>7w+M}9jJ4a2Rq5KG9qE?jbU(Q8<(;)yS zahUUsnGkGZ5+|@8<$!@GjgLGi^^(%IR%c^xlI85v)g9yRyH^`X#A6)rN}T;CWE#_# zcKC%>G~WAMw@tC}+y2E5$Cz;ecAF0H`=S?{?BP4bv~-;XWD`BcSpOrC#|(nc9d&Mr zFGb=Kb;$FWcV~gK{rZ{;&rn9#5TvvA1%{+B=GESnEs2;LU+KZ|q=erm>ugx5wsP4H z(E$b2s=u^(gE8wfe+eESW)}c${>5c}B;(c$MqFfC-)aoKUJG{p zz^;THwT>jVnmGKVWdW4qOKKtDtF%0jbdnM)CFbRf3#LQ6*rGZXEx?d{_BE-pua}Ai z;q4XlK|W<13pObU)$%s>lwA1>6aMPe;|B8I%;_%+ zD8j09Tl3q^pd2jz`fbbX{A=EVm<>4y2N(z`kt-Wb59;fQ!;FO08#w13%ho>O<)d@5 zInPr1Biv@~PFQt{Y^n#{V+ARb<7I%E%Gzf#df)0J20P-y&LxF+)h+n9)xcDP%>R!H z9a?KL3epFJv%HeXf>lW#>sWQ5V?u7~YGlNtDO4GQg2{)V;(n1w3P~pbX<&FJ&~&9Z zcKUT4(vjl{eM58wPH8s_ok_v~l^H>zeXsXoRSWlQ=L_y}-v*V**u*I>Ct>}y+8RH@ z)HpONky{AZe5me@^O8W(-vCWEqX89pyc09Qm)p;ixM-Yygn6XhP-lNw!HB1n8U{(G zSKHwgd7IY$G?yw~zw^eB`RNFQxzIHGRvwu%kp2>#>AVpw zsb;<2-sNW0Vse z+D=tIAGzn*g5(BgZpD2{{rgUed`ci`!##~$O$oCTP;4!cdN_L5t|a*0*bHjN@9m80FRMz8VSU7|6c6gmmjYe`imD<{ZvS%gzRiFZ8J_IU zT8HoHOOPodhc7Y43hGoDe(*4d+iYdt+S{$0CwHp*IkU>BvS)Dyo%4^y1@hP8BKF9Q z@#v>FdVMTa1M;C%WL1}3wUzSu$S6S($d@6O%BH1A&$GHTwek>OL-Wf#I#p%Cy2goN zpc3en_2IeQJ&!Sgfm-ePuSPMKVM5F|ZmgeOvb z!oxexhN#xSoJo6P(qK02?vE;pA+jX0s6`J&OoH|^7-7%nVf{yv+e4ogD{g1i#+|XU z$q2YNWM!9rk_B_X^MyVq?oz-P+~p|7VVNpvIIj*>0CV6>7V+N04NX72u~b;C>WpV= zf}v2p7+&kH{nkA)XD)IH^2s#VbE~yC6b*3J38Axt#Gvhzy1t^A{

E@0=S0y9DFY zSwKa3hu>kEd%>I*r(fvaEOHVnXqbte2Eo;KqOW5%VU$kyF6WH?^=Gr9THK`6JjO4^ z%mxQj;F_@sNNg_bt-dnV3%V*ltn|toh7#?I`+MaQnit`YH@|CwDyfm}Bzk_fr0)uK z(Kusk_FP!w`u%hmmD9rw1Al6JBTGJw6Smdwb;h-(W(OxO#j|Dmtkqbb7wxsa*ViF{ zuk6CQIJEb=n@xvJj@+yRwe;q(Ru0-hO}&F$2#)$pZ0!+>I4BanWe?L~E@ftz)%wb- zk~dYzS<7AL>gtxEedVbghfO+O zS&i3+O9hZD&A=Y~XOiU`$CRpcdV@2|?CBIw2m|L40@KTk%P%(NzSEK6nlM{uEL#Og zZXQa;g=glc<2dEry68?Z2M;83W-y}ZJ-02sweu!cGtC@P#zopG~po8MinxGibtHUb zDMXrQwboW;;mPgWqO2dvi$epiEX9>q$|QDt$XK689KUJHvuhSw|A#Bl{NYMp_Z{)j@`R8ldz6gN}DBuv`Fc zq3WO}+J8Sbe}af>!d-oWKVV3#Cyq>c?&8XJDgDWsAP%3vRUtvjC?njL=Z?Ip&}*mm z0$gtd^P#fvqQH#u`LhlFipS|Vf1aD!5ppJ_z4y{}$Y z3_6w%pLh{bX43*1g28gjCey4Fm90``-j5IH1nJ?gw;6LJp`{J3bmm8cl$+>(=_f$*M#_^Zsdbhri>P-GT4*#neVQ-|0JKsvMN4mC)D+{mJVVrR z*@4g#UiU4VAdGKud^a%qOwjfPzeuW**it)Yrosg^OD0;v;fNsqsOPut(1& z%%DAUUv@xqQ>uNVpDUmmx+$uV462ljU30 zVx?{I2{B31c{P5bV{^Tv6CoCV8PsWF(1tJNA~JFahUU9ft>#%Iyk_aA`UYD{f6X!=D}p`Q z#>ENjk1wg-?~2&;)(Tp4G)^AikF2xl!X+Tg5XKfaEi#%6c;9<{sF1zx=sVeTGnc8H z8onTO5lnO?12Odb%WY5Wq+gWF(uU0wW^2}2kO3}#*ECF)f}E!+@DkiY0gCG-D%>YN zTTAGeiW*z&i}_eZOB6DT9f&zbMFdT=F#B+&aarvdSElru8m>zcGN=1kl`-Yvt5WT` ze0|IOt3q;&%=s@yWimt%`|E>I0drq2940vs(>!?Vxg8K&^>r_q@2vArxAD{I_sR?7 z9%M{2ZuE?@GN%Ukd!88^WxRfvNjJcz)W}?YzihCTGU5@~-$3>~?)thru^!?)@CZ1p zmyK|y6Cm1QT>lqXMTYM24M+3M!d<&ooLLLvA?&3Pw7rn9H^>jAiIdv@E~bgDYes?H zrM1qFK>QLhTm6dIbIeLHxP0cw`n=@`9O6mBmYr@fqs;fuMi% zs1`@x|MJb3YH{$+1FpGHJnh$|cSiO7RH_$K#O$69$$ zgs?kej)>zFw6!K3+LxBS336rOk?`aJ;7w=zzC&Hfe%09O&BlSjb-DX%LhV|;2j9Kz zbiAdr1Rb;O^)Du0gFOMHJ1CBJo8bUL6(BwkHMm-_$Q`=*q zQZxDI4f$9+e>6yiw5vsH?8wnA;p?r!P1M6%4X9G)N5~A_2U=pRl|A3TVl_|{o;LT9 z4`G;yD`n)(joJna`pRdykFWvD{g-rmEO%g0P7wt-LkFw9Q5;m8y0R3C?#B44!dVE(wH`5j7<*snh6!SNh04h07M^eV zxKwR#nG1+`gj=}1cFUmWYPq-@PvP&chDs`~RLEG!AiKLG*I9_=68cJopo%PO7H)Cv@H@`0G-x}! zbTtA=*PsPiQAEM??Gcj&^Jw0&ZNxtP<-Zxly>CGhp68YM%kdyo@2ElQr@YbFx#{Bh zzjxt3?Bo-2OLi#arfm@x-=*Lt;kc^wc_;T<+3~f5(q?RA`dzPNy8MS>J+XD>6wl4e zulcXRx^04+-ZE}ml_(IH)`|h~In|x{hP6K}ROy75)YL%j-r7=g^3a3HtLdukvl}vl zSjx;QVO9?9bG=b9P>ZyQlbK8g|GqATzzkAZ2X=X}-8w<^SAd#|*&{}rK6yCYPbKU8 zC^>Zu`B}!%J^UF+0Zcg!ehJswOO}56mN%4LIL}1uKOvlSG-6dKEYFTQ;T7)havHKC zQN}ZNp@Py*7@@2+8iC?ddG!OOz2Br zeU1x4QbSk5xFCAneSUf%i-$GPvbxUE+{x4EB8==KK1|Yt? zm@S;9#4xwWSfsn2<|*ep5>-Ts1jek zgD?vd*RfjQ^b%(1VpT;?1*(p{A;|BV^16=7PWnhjPj`e&-Z+1O1IixC{_qskpvWI= zi>BMK?utxYx%ezEkcE`6UngnpN7Nkofs^E~|HVn`TbTy* zL3e21#>^E5Nk2ea({VZcIaU-CL0+RRM5CHZ1h5{<#%Ct0B%cw-n?)1oU2AdqvO_}$ zk1cgMH-4-t$dIH^_cu#xY{kRpNw`Q4DRLg#ZDA%<2ErEPu3&Zz!|(dH`T3ILO=QT4 zeMcPS{yo`|Aj=1uMy?U7>ZC1kxa5ENe2XJ81l2zT99f0}voiY-Wb= zJHGEO=SB;Hpu=boH|=E0Xq(>Mr^hrC9dIa}{`D|{>Lny{l?l}O(9`n=C=7moK&7eJoYz;=btJQ@EBqTJ0`KK*2w%h+PQE0FW^ zRRKq{14M^634j6wmT)Up=PBL!=55dVAQaQ|D-Eb_l{w;7mg6<<@xkg<-hmpzqNGL9 zo7=YcwgrxKR}Y0sT8S=wM?Wh&gLqTv2kkNFU0~XTKtWV^V^7p2Gf;o|6LhhF6SCTT z#4j?RzL8y(;y328&5rS$TmC2MLi3dffULUG98|IPk#)(U+1X&nMpV0xJ**()nm&;d zYiYnxddYCzv9d(*6$vsmG!27x4LzZSdVjfd(0PYei*qEf>^tU!v<12IO!hx0l>})i z@4?qErIepHAhTtf+tgw~T$PjW6Eq2R6s&DJT;3CZn0iQ@BwT!!TEA)HJy0+sIFDaYTSl)UM{T8 z3AN{5d;mL3Y6HrUdcFDvpjZ4q**AVAsPJ}qoiqE&4$sKnwBZbJJ-^byCxyJC9S6bd zvUFEizo2$NW~Lu`p-^(~uS5lF!}pJGt+^@vv_l~V@=rZOo1zrBPzL(bWc)5X@yhZFZ{>9L=TePPp3{+95@HJ4aG?Xkkeb+zxlm(~;IAe8uMLtJ%09BETA zNDWN!xL>~Kvl-6D6Wq*$?Wkgk)DS%~_wvFYA21=?qC@Blc_1>l!enyBg!k<+LBTf0 z{%*|au&0Pr>Cdi=XpRRXO46wXR0b=qV-2wB`5|$Y)OcGfsB*3r$eQ(?)>~duBM93> zX@~B{heT9WE0fK%ZsS;@vv<-@kMTpmP8&iN08+GaVpHRc}8&#>t( zm+hy?k`zL20_a@^|4VB>mev{}fuKcGWjfb!tNd4Nk1eMSFKVg`6O{#Qn#9}$yC|OW zvSlsd94$J!)yi2)W{W~0g8ikoi~UJNT(LsqK&L^`;q*$Y%3Z9)2Q}+de7C`pJaO+Y zNH#Z*=Lnb?R7s7XM4x_(;JHgUHE>30|B%~#%h~KHqr*eV*JS?E+n-=@&V}Fz8VS0q zWNDe!OU$5>up@_}B;f)fY&{(B6<>gneaQwmsoY4jk@@{f5(c1!Ek?xr^*{6`Zj?Yb zDl1c#BwwWqRd#aJ+q1CVf(rl->0VJ-!z^9WuQFMgu1L@R24C{QOtvHZgs7}Sg)M$G zNI!Ni0PgyB9mXDeBw$YZ@0p+MUe-ikx*(M<^BOXOOX2#W!s;yx5AO%%&f6n$^SW6r$)M;nfQ!85_(Gm`%B`4*Wq z{vKZDMZptbw+}R*NNyxof1YD0BeHse)e0_QaGrZd2l%}=<`gEI(s6JGx*vO8YyJ?4 zE)N*b#Q_XPm|0NFZ>qvkCUFE+ zi$VgJ?jp}9hp(g&NXVe*7M+XOy#(dK&+nitfCqrz%=Kqg4 zEUwJO(eywXCB7NFkXqu3hrKXR@gWZX{y|qohMnKUF*!IU-gg=3O4Q_F^tUwZ4!HA) z&%D>7eX|^ZE~r{BeSn+02|`XH6RHsVF=93m{GJ)Z_X`Vu}4PEmop|49jF!T;$f zAS0}S4f!NF6nYV3R%3p#w<$=;H}`7*ctNNS7e)5uTU9Fegs3p5v(;KHJceW z=moU`$q<<$I1&U;Q~t+ezfOV8?$(33fy63t^_N6yt#g*Flj8FskwO^Y6CC{`k?LcU zhPMAql5G;nYm;NWOojZh{g_rsG}(rT;fBE{%V$=R8JRWTxI+m$1>Z$IBPqFyVVx1E z+l3kU>ZJ{MD%9wQOx8CK=>Zi#+Hfek+vph0y_P1?fCx_e5Oa|_bj(qB*?u`L@Z{nu zF0xi%gbamMeciI<167cV8Z4G5dNTI?bKG0Igo4Xq8)PfwAUEz4WLKiA22yYB5Dx-5 z12$O6>+OH_dl5{J6|(-VH&STU_QMI?7=`>AIVP`8Sx|>c6GtR|KM?3P*(`dTniTU@ zMsR-k(4J0C&{G=p^pz4ON(j#W=#6wM(iwQejLn9+zdtU0|1qkw{W=`y2W5Kx&GNBd zgyELy)f>*of;_l#EQdf+ENm}}wiP31J;<`wQM-^-vc~-QS}GfCedfn-96X;_Z1)zI0{F*Tc4OLhK?onpBjs;I{$7ciA>OIzGbVF z#u5IUH<3s!W99uXcfiO=2i@H*kpE-+Ch?U1Tc8u9Ni!vVxMBc=WP~Pju*Yn$cV?HC zCUdORVA@uDz4BRYm+>c&SwoDNZ;Zv8CifcVZAqfg9J@SnSjoMzM?Kc^Uggpx40B_H zyPQhv$iDU)Z^E9Y-+`kn@*}V=k33obk2)u5b@#?F`)Y#{gmeHs*r|%ty>nxM05IXN_FYrY{vzI-) zJBC+=TrCDIibF~SXs|6~6@1hKT*ES!O0X4e%x&QZC0ul;jnrp|;s>}T+ZEe&YG7U< z(8{bT|*AG;lE38u0F` zl6?)NDQ!~8y#)U073emF{@WXkr0+hHvL2rCRZ$q^kPcAm?oBZ=E*V>axV#4AR>l4j z>>o&HupGrT0WGQgc|^&l@+aA(=Jk_nO*lwwwgF$nL@6vmqpgEescsxlnk?pt_Pyac zMZOxQk-GP@O&ZQLs!mfZ!6hhb!PG#0!34uL?cJ|_!dYqkxB10x4g)VWen@>-0MnB~#0Lf4=x<*Za!UkG zBb^pPKe^gb9Oryh>*vF%N&hNUqm#|5=$Obq=K?em#?R*Ji-B|QCym4keW7Om;}MoR ztriV3IyX0Dq0v3fB-8bMS%#nu(UC9W-kHnV;A;XkzT=k!ky1<&s?wt5DRGBTdMEPT zkK`w&1t}V~Tf+Pnp1&?h!kPAuLwMjHhp;9{DOsdNol!6U%a}hU1ai4T37+9LQYD5^ z8XpfbZ?P*t2BuatrzOY}renEjvd&YKW+J2Ju->78e^crhD+Z=Wc>f9QWwtVe$|C<5CE9eVz;lQ+Y{>{?&F)0)UfI zesYGhYr=pCzp>d#Rrw_!O3IfH7j6W~y1$-x!_->y+;AOEPu>go!=vh56f(gWccW^- z_6I~56fA%?mCiusjO8gZH~dzwO#G)cViDa(p>rpFZvBrhmhAmD7^5PSfb?>$MMagp zPN$HvE+vI;xu5%)31y>((!xe%K&WsYRfoLCu&x=7gAC+M<%kSmc+${844;q?`^Ud( z|5eW;)pDp|RPoUadC4@DO9Nfe3lCZCSwMZaSi3aw&tp@te+fG*!c%|spPA=rF?*&X zsliH;3_@#^eE(Nq;D7^}baxay-X?$OGV(j`bjLuTat)~YsdJ#Z8p${>D8E=g|*KI4f!pUF! z+F#K#KjE+ya*jvv=8$_iGd|sSt8inKTD%_V_^-kjl+WUSf3Oa!&`qaI?7?tM!2$ME z$I%LXsAq<`; zJtvuVkCe^q(F*rg&R%2@WNEaS(`J;kOWv{qoXKQutF&GhN zv>{@~iO=ER*0#Tf+>H#fnDskE13LG<;Qf>Hi=Z~lgo12P|Lyj9mDWIbGR~I)#4kyx zz){-IIO;4?MainT?7TC9(IfD@KoLGwnum1)rl!!7XjXUfMmpKRrrwEivl8o{E~1=l zY6?K0&CC6eQ#!s2H$fLeTG)c7-Wf}emKR>vino2RLCx=kvMnk;r@Q|$&@st}L2WcU zUgJxo&H1{#H)9&SBK@r-`rbp$7y$NovlELUCG=QV-gB#;~hBW+Y*zc z{@s>d2});mzJ$|-1l*X-CmC%Wx>B?ZEbj+ZnIYTX#-~ZSubNfZ`gQb%sAc+S9=x9D zzKh>o!Ea4aDPp#63N#4u| z80pJEdOF;Tfhzzij7w)&WyHO{YdXDVz**Ze!AV@`N1K;@J6NSXain84^n;=`g~?Yk zeUT+(4DTl9@Q&jb=4@}Z57+%j{o!7%E9!`$14x-xidhwN2k}TC`Vm!GWKRnE(rDil<|Dnzdq~; z=@(?ieV?!j)%13ix(7tUckM@ged@RIoH8JF9;db?wwACLvy;%1A~cnw z$Kq4*>YPgig#X)*_)~PtG5GJZTs*IcPrWPx%3ApG_%0fafD=nys`XhCP0apTR2b&# zuW9422BIvezSBi9F?ly)^>Y}8Rm_CprK%sUpMT$&4<4k9 z>}0mASdDhIQ5@bpR`Bb5-(_Uz24AqW=MWo;c5B4#_#pCr4Ad-e^i29txGjdz`<#Qj z9kw>4OPTWDP1OMx3jQKN-*a3n3cERt7{Yd$0!AgS>gT^$TnTiC{9cVt!1B9kVGVpe zo{amAZc(aT=z_UpVTqvV`?KueiVeEuzvf4fd9O3a-$g;_z*ug0$URT4V70^o7aluevf#w{Tz=)RQBJ+P@Er~of4U3fV}qdiH8e; zH~V<*{O14KMzV~-@a{*R=``uA|JRr=xdip__*^$6U<`to$Zv9$%Y%viM7NZJyGQ47 zW6EvnFW^Dif%y&3w9FPWQP%#F@u0Dly~7fQZDRVR1q9yp;&`i3~C!u zja*CiiZo4tluqpo^!Yuxh14@l3hO>nTk#yb?X2IXH4*VhscuG~db_Ku8#=9h!I=dC ziRLn7=B|v-`<6v-On1Z6J8cTnxWSHCjJDLcJuQAAYSah)vbxC?wACD7Ut87H`B|-w z6?J6$vss4&&Z=YClhPb$-i^>QWX5D>hTr^kQFs4GP&lnhZ*wvaL2~KzaV(nU3slCQ zYvBD^Hp$OwF12)wNpoANz{ALJxdCfh6H?Y+s0%jq)~f2heLgP9;^cjcFM|3vhyyf8na6Jatk=(0C!vcm57%yW$r9g zpz<48@KK|N0JotQ;(hHbC|kPJ44-gp=w!6Rp}kKPW*r*gpzcwKJxj)~!SAXe-eACs zvvV;^C*+Ma7dds$!2&Js+_GnRI2(=7oBnSPc2=q`(x8)g+&^7P*B;ew2S*FIBr=$> z-?SFKEiEc2g(Er>HfhET-oEmrUIqB%#SrG5%tl@R0$sd-v@O?dLkamz;Z!2|HJv5R zIsW=-zs1utWA`M|Gp|R!$t8bkQI8|*z4BbQyX6)1*74P2;hJl;jeavF-W_POC9tyD zm3B3`LAb}JJ)Dvn+HgI!d*8CMW_^x*AF@BAz9g8#FBBXK69k>^VQrU;7uXzZmz?Ga zSp>&5#dk%}O7Zr7+5u~)Jk&z@R;QD9uZh!vMMj)21ob&K`jfsDwjXj27Nm^KI9rQc zyUylLR;luFVpIEa{K>hEMO~Hhx|4PiZOG!Oldp*Hw!uLEQZg1D>@^ai--bl?{oyNt zBunZ`7r*JGnF;Gb4mR+-@K?HH>+?yK_j=JYkFJZiE*A4brC$$d2^aSH5G0W6VKQ+Z ztN90>lS&8dkiICHB9yp5^d%AW7;=qTzumpzlvqIR>Ha-NrIw47OR1N#oIY?CPzYcm zGn|F?`TZ~REVE#fK5*eHhdoStF~$z6zRt_!Lh)nE z(+f|Oo$G4jU5lNNQ^i<2li2{lE;2%fH%1u3w>w8`-%Ne@jkOqt8wRmH24D+keI|pKSj)`vG9pKn>%Tl7+~En!6x2FtP=SiCARP`-@8wM5QQ{HES1%kkphrUahsK9sV) zmEGzNJfV79JQmOlzdohvMpoWvp?eczis*W3Tn_~)54GL$ zs1D<{M0iOf$C}TOB$d;n7TPPcGcrcOm%#ECRHa%fY@` znHEyCk9^4rivQdTYvt(Rw11Rhq@^yNI}?uq@9PmmV0fC8cp+3g=a($3Ycv(us9lt=vm&19?7_m4H^L?&*)+vLAlNJ)8ZbS8TSG(xA z4mJNhY%+pW+uhPI6lR>XOeApL*@QU20j&bns#Ygxm^n!;65pM{H{FJQ1?mMD~K&@(O6$KJID8H!Ll_0%pO4yHmi;Y z*ySuT$1}CIBUdYOVy|gMl$qzb!7hER*H#o%S*K<)Kn`@@Mv^lrB?a_jics?cUh$0g zEq~$#={xK%{?Q8Y&Q6v6AZ&I)4Vj0Bbr`K&puBt&#e`w@=)0H*J_}+^}MG=2znbJ3@oDFYJ&-aFX)l7lbUvoBr8+zTS5LGLVtpo0n>SD;+T^fr`ccdrF ztm=y37?ec8ZHeaYlS&!&y2zGGN0+2CDI+EeQFgkfRtp=WkE*{0>EZbmh1 zbRft}y$AV=Tjh>7o=OSB_TAkDSr&bGo{m=eMNkgoXJmzO-1^XHaoxo*!(x3b{Gi8d z`}A2NywF=pF4+=qF)?WAdMsQNFy2H{iKj`&C;B+EiPwz5Ws8q!UVR-y94uQ?VEv=zB@nTACzgnY(% z$pfy}7VHE;@WH}0O1n!8x@3}BZ>o{27C>D-06qzYONPZ~Jg7GcV!gkX znZ)2O_{p#UoB1dG!3yrX&rWYu}Py>M7o4Xa> zOHoa_z5g_LCnuOYu1fUAz@Ad={H=;FFn4)>`??sfyZWMk zOpx7#6D%it12^Y+Ip;@#cz9I67C0x-Z%Q9nKZBDX_8gwvZ-`4=F(~Dcbf%gEee>($ z)IGcMcDINjNjNJ((!FX9^64yqt3KaYWDGM%;+l+JXj_?_`Nt30F(q|-v{hX{U4l{+ zy_ti=58o|wOdUTW8Lv|H&dT(Z{yNZ8G2toa{NW&Ztp-s(U*Vp@TB;K9C8hP)F1qtB zd#o?5iXyw~jdq3ZB47L4Hsa9P3cQb_?i<|pTvgOA9jO9GU{*&nPT*d?zLi-}b^12P z?v8sBxuXJW^&Z9ORAL%4gkO!fCk)Cgs$QvL31ME}ibe!KxdQxMVS;QC#szU+<{dpV z{E488z?VGh+zuZ0Id4yV^OI}*mDbuTN+fwoW{XZv&^Vg{aiLjI^F{HyhF=OnI70;1 z-ux_m7$%Z&W{f-3hUuT)Zm>Wjg}2D)v&@B8*h#MzaTV;>3XJ<%ao#G|l|S7r&pJKk zhOsN~Sz;onM90hOR@k<4tH#m%PC6nyto=A*u}0$Yhdih@5xc&!zW`DQ4J3~(-k(tM z@<Ke>*wgj#k0`J>4G4!F-Wb-F)NzrB#1Vr)ceOeYY@#JH;%Lu zNJ;qam)-~MFZ03xCwnCNI}%Fp?8%!Lf1xGoyb$M&WbR3 zs)s}f@D)#14R2+Nouc3F78hSC{SQ|8J0rVNyV?YbkEz6^V(rU?Jb1&d8?*kQY#K(*!#jYEgu9b(JHSgQy&W?ADLBxq`@#rqb zrX_Jtr}lFpm?+_mZvUl`om!0P#X(M)*Uu6XBSMK?kzj2?U?v4nadf>&2Jb!vl~zNC z;IgUL1_72J&X^I(Gnd^nA+}_nG$Q~j-BsdkkU7R; zzqq9Wph>`?iD!B(q&JZUikhW-YHv}yz{oXrs%SkIo7>z?Q`6Dzqyj(wH$W->ONvdw zNRnK6XG`XhFI9A6b9}w-zGlJ>KXit6ckEsBc-;Dy-ol%sILpyMq~xfu9Q$)%(be-x zF^A$MY`@_3K`|i{$xw9EL?DjPC(~C+_YbE9g8ASPU&+&;W2S~bYioMQX;wJ3(y#TF>r^RFJy z+qU-pjX&nri+fAn?7+ksgf~VDf;Aez-FXnVqcz?G93C%VRu$HyojUK?-s!&Bt_&Ss zKkzIrxj)|VQAtJ(9PgOT7)a)=&}B`kmhSo~8BE$_hwTt8 zCY5*Spn;LujGeV{RcVXZlFw%nUv!oP@B(m`fm!<^O;(dl*Ckz!oo((FtX{=in`f)f zRoq@O5EJfi$sgrYE-`mhzZ>djuBgmCnV0(67Q)AFdzM=Hk(pS_)Q^f&$OY%p5a+!7 zMicG*xs_@nThb%bc+{(56sHz`hFWVR)1L(g`zFBhlKo~&9;^P@?jOL#V%HaC*OeG|Y=%69%xt=*a6{GJG!2^?-BpJ-yKxU*b_bth9#^syEEug*L{K)XU zba$cUd`O_%CtuU}V3FLN%)nNoSp2zHAfFZZtN94b9ELJurZ$w`)99C(*|C)Jw8vdrg91lcBqC1nFnM~k!#LxI< zB7G)O%qxmxd9bKWM7sF~*LLI+sjd|$_O)lK0Fd%RZ_c|$MoAnQSbP*o3%HLjX5;d- zgs_b@VepZYTYS9*p&3f?npaBBEwFmNj?qcIS-!G@<;T4m(wsw7tW`9xkZpON>BJhi z+D5uEIzF)U;(69-n&KVQox1MR(&7muJ4>unCR6fG01D;OYYM}F_ED?QXFkc+wz(F>^7JhxiH7ok^=`(fNWk1am6y^q%yEgiu zH%Dk?6VAy+>d0&cTxVvi8&JmiXsB~NRL`ln(ymN2Y}cF} zwO+&!^Kj^2JvpA(KMs1v=|YMoANOkrfjgO-TVYX5j675c3B_cfz=T87&E^z7>KCRw zjdi=Dg8xmf?XS?^{hW02g$x_?O)__@(Pk8l%SS;0FsRL|#IizL$Rz0!a80-7`%~0u zF9j+qPG_m2u-=tir!H`6Fq0&By}tVkQ|d6mT6AzP3vZvHk#qG>8^nGL+=Y~YCtanZ zj?LM2-egE}R~9MjfCM~T;kPLm=#3dDH48gqL~&6}A?NVaBqz@Pc#8D8PO6)2ulHZ& z_*s%elccZn^!nFXGiemWHu&d6vFP=GP~pzwVFQ491_wFNSlJ`Z(yp`1Y1j@ z1-eaJ|1(g?%;x>uq3)0B-RD&YbJ!uI6?c%B#8w;uuUgFamqqr)E93JeuxF9PP3E5r zn*zu72JzP3+-H+3jK1|NbwVhZ`MQGa?^YDY8jjDVVlvH_3XFWD*Xp7gw^N7j9=;oI z`ddStSYq+dwqi1g4v%-fd&fniT~b~cXVTAe6NWFhyaG$uKc1lDO-h&d6Kr+SJ?4*# z(7PPxRiYcS6KB8YponnhE;U6yf7)g5JjSG)B^FARW_StsPSjrkF7}F3w6emWGUWYz zVePGKp-T(qDt_X_^+ zize8kdHX%fQcTo2g**v#Ceg9{WEiqKnwyfEVJ+l(yJOvVa4O zD)G$%b-U8Me`F1b5n1J+&li?vz!>3xF)J}rlB}wwd4p;?qjrjOYZ|1tTnn#G?Y)dV zB*ESBp&pcM(!~6ty|rk7KvaA>!JQKffP%83*D_54cO=no;WzZHWyi88^qFp%5sU56 zMnv#aAtVOSt=S7jx*= z5C;Ov-*$^DY)CI?tN}$mA=LV|#?aR69f2-1>34OUcF6A(xbd-RiXiS1E&H8o4P+3>&VeC#+RmKbe6*B#ZK9cv12Qru#Q*?-ddCZ$FLP z-UBTeCKGA*Ful~r0=k>e%*o_p8x?vjS}}`8^!^`PXBigPvaRdj5Fog_ySuwvfDqgv zxVyW%yL*7(E{#iYw*+@@wDC*UT6^tt?!ABenccIyW_8sV?RrNk;}2 zmTQikbW&X$B>&gu6h+n&LA6kI4Jg=#+!M8Ob4)5hm?Zifr`HO}U#FUJY7uh4q_b~2 z*34vXT_E3d-t1r|IJEm`=bB${t1Pm{s=)=}(F`#8-Do4a9kQEl$&j!M!qANy%MIXU z3=D_IM3ffn7(6@{qRp>s;?a*4j&F#IU%TaBv@F@Ln3D3&c5W(s_E}y%vxzdvfN>qE z@F16)7*ci$G)b-RrZDQOxPw7-;OUOfb7r-u-QREL{PiDVbw?0!g?*f`hNxVmmGaY4 ziuo#|Sc7~hz0!ru8(!IM1ZHa(#U7T`G%T#?H6^@&zk*IdHH&^~$5ZYqIC)TCO@IsO z8(o62UMWB^#J37en+re@e+zsHu&AU!?)o_a5Iss-RNlc`329Gvmb>AJc_kfwi1#hC z8Hd-DmUUx62ugs4y*+E-32FTe@=1R+7=cxE%z7X^AeDAVr%A6gldU!Vfj-jQ*qKpP zYVNfVk9>DwA$w?e>ou_V*RNZ=1Ulr}MC9SCxuLO0S$y{&=)e_;<;)3E8)n@%I>G#y zDHG2)a0}{UCdxZXX(SN)v)RX-r>D%6SCN z2kWL7jW_ler1c~@;nE_M`&$^dyR57OqcDj+^E9`XEH~Oz*bB)56HU*^Qq&XLf})vK zd@0wX?+~U9P~fxFzTCpYP)Vok@$WOI7rO`KTfcnZcog*w5n>sQiWjjthYgq+(LhDC zTK*s`8mGlSW`=R6T~Fr)(IDql&izQUt+&2E|5kqC1H|&?BrUOjEa_r7^;)tRcZ~ef zjxS~E!dK5(YDkfTD|Api!RK(Jbh*KJcT!k(dP~kGst^+-T{@R8vZ#5gZTWp#MczH0 znfCj_{HhRwX=TP|=14kMJa0!G$&$n+*aK;8W>V=9IR<)^U<0Wy?zpn$gn^j_O``l7 z1=B*wt8YLC?NL(_xO_yj)3DM~;5reYS18deCcCV~$R@~rd04sm3F-_j89LX0U~t5d zH@%cBj<^=yL-x!s`jhWKcPA7yD{Ci>F1>%3(8ZUDj~=oQDNh?}&kypfxofrP79JEg z`o%))%0Y38v^6@gG!|K-H_@>O{CG!z^t2cP-6g<~*B#pI&zBZu)rYIwYZk!NS&`54 zEw|8oQ;#HcaZ-cR5r9CbH+V5m7eRS!Den^}bqrF1<%<#lKqgAa2ht>QDMOww$lCY2 zc*r$~jH`QAYC9xUK6%!)Jdr^=_}TjTQxR~Df;#%`{T>Q!uV2Eoe22nN-+Re+%nu$( zj)4m9UM)P{aw4;xcxs*$jN znjTC2a6q`ZQcAb4n9?*c_Ey&UMov$*>u8~v&APE_biwXpqeER{1d>V`U>3*4w|fjj zwP9h5Zv4X3hddpDv>~unzwss9>>KO01#r-Mh~gMUc6u!!?qU+BY^EH1~?u=u>xt zYd6scxg9KIdFc;rM1#!5gHe6ix!kX9S$tD~YLy8eecPF_jmbiQUjD1 z;@&Y<@tu|`JGTII$n3{KP=F83rm38GN;6J& zQ*^y(cD6GYAMD@j`Bh-4EjWm1h}}(j!2jp#^03ljzX*GHWkPXrPHcx9iF#J;Q~$YS z(@?~JN(o6$PVn$H9^-1!);&`(R(@xD*vwv$Rjq!rsU%5kr4AdQ0Bw4pDfw{TMJ_F*(;L{3ROUMS=JkjQ>vZL~>mHLf>Rlb=u? z;fQ^!&-}ZlNgnZ+$d1g0{n7^t*@6zex6W4e38(3MWGvZ=qX*p z{;|dLZC)kT&EkCZd6&QoK6&iv!OIZ4b!m@Dp5dGw!_QInDYZ=WD~3>PRWWunhaQv% zN*f!AFO;5-Ekxod*2%-&0|u+?D>&6^$5vXrq-2)OVW%%5;x$=8wPL$Ce;q5LZ_#gV zRVsqc#ngq$FNRUddhO^5hr=1TEmtF;lLjl+0=$!+C9cu+U;Lu{IN3k7(E}oWQ0kn1 zhOu1A?V|n}E@nS%oSyrL*H>7Ck|plCm|63y?Ui^T>=dc%DrX_k9}C2V_Z%pOj8iGK z9?9*jZyQQHmgKj}m8Tz+{+WP~tjPb>(8NZN5#8qCgk4_6`9|=~qO+DI>Ufy4omhN` zf^-TyU`^dFDP=^%dZP|AqM#S~C(=g|?gtaSW>z?e1%=E*IW@yjb^Z0Wk1PZF;ytjF zzlcSon)_>pax>u5Zh3tKTMZs|tq;QXN8~ruW75 zdwYg9As-|mWd)yUXQ?}{GDo~o<8~HLv-ur4PL21F-W8j*8&g(Y5`&--rS}0p;`~lx z+{oL^hO@AIz3M#nZEFjbb*^KLJwG}Q7l3=IIzWW7d~>7a*mXRhO@6CX@8f>0k_7Ul z0p`C~{(-Wl@D9f>+SPvFF}I8ZJ2-_NM#_{{e9{3vwCX>-YsS(*ty6v!YRmYXW~cfE zCa?FCAu|@ei7yCkI2m@#E=>XQ2PFRVWO$?(n~Qx3C!oPKH<2JJFlNWBPQ&9;nsqZ zH!gS%4IBG(V4}gyzA$A)PripvX!(;E$S8R?G=b#I;nagaP8{dzMC%D^U2u>+*H9x1 zuTuE~yx3^wVDfNiX%Y-jL=4;a<~T|^N+)u5+{xU6aA={1j%DUcm|UPuBlD?`1(%~y zVtgJ>u$4)?w$<{j4vGUMbk=T?lGuxPAyEbc_R+wyjW;#u2(j;nfLASP0z&P#uPQHJ zK=5fBBlLrlc8I=DB={7Nl`phy>cntU%j#nr6UVS#%C1;zcHDIoKBXJ8Mgpl zU8;-l(W+HWeU2{5-{cGK0?qF~qYz0cX22tYDrT^vOV|KY7m3=!xMb-fE@&}mnSojl zH@!bVuippP5GBX13ReLTYENbKXHb!?R@Zajz!MA{qJ6uXpH5TGHDhiE2ZCK`7+3Qk z271PRRXRl2xd?J=)gtrfefCefNs#f7r@wVWv&lytco0F=>cFR+1=xw-;ay6Juwpxc zS>?A@ZaWjAsLS9Jt@a>h#c|^mjvjr*9^*Z`!mBgYDg%}m@=tP7Wfn4f9F7yo_@kh_ zK4Ab3$yR`Q^)q(ZGO<|q?H{-WxB77nL9@xWL%1*4B%KrC=}r(vY!e&Wtgj%B#JH8c z;C8`xFFBM@0vEW06^X1!$j|r&q*gR%Ew$`z&A1AMoFm!>=mC@+@whgaZ7uD!a!&^nBIgvz zlYdfq>v@Xe4_VJ}2Q-M%o#XElbG zf40n$(2!3Z>YarHCzRueb+Swf`l4t8ov4u%^J~BiasKTO9%N=$4Dhcxr%dxw;}3F4w5I%y5gg+&tY3}t7gp^wUyL<tO)8wU?AV?!X04Shr&!N)n3%>!>*%RbCF5 zDFujIq?v@`BuE0-ztx&qfL1D>M)2~5+NWOde2wqr>)X7s76(2Rb@O45jang|ge=x6 zdV3r~PAZPZA>lljE_VcsGuI*n=C8)(4?sGSnu-0zVmsM~>fEP#B@7A~h(fVtxn=|5 z@9Gp#h^ENR@+^Cl@Lq6GEKtvXEh2myyK*l1>KpU(sS>kh_VxQqhf>+9kbs(;XX*MY zTIMj<-oxnib9prbYOUSWw=2wkXjVG;mUfh?xZa)==mD(io`D#q%h-+<{LDGu=b+nS z9uV%E_f_-Nvk1|mo9*i&tKZKlCLDNbA!(ae=C_ai>0B7{id0}o#^wOcu*}spY$~eD zKPbnnUfSmWVLx4ZAfs&TQxZ1|g2O}HV#B2DW+d05qOO#xJ~w|IO-AYECbul&&5WnD z8RrJHxd4=r-}MB1J2)Phx#NXu^?Bsa|p6hzJk{wd>N@ z4cCK9qL%3`ia2p7NtCEy5sSn~xG#fV+)sLtfY<8x2JbzrL6L*7+gAf06l`Zewks-O z!0{e~j>cg}HapB+ z${vA_u0KdiyY$=bCE8czBuwo6UvUIb6?(1LWuY5w*YZ7N^+4XOIq~WbZjV2Y7!HpP zg|)3(e%oxId#>?K%e-}j(Z^PS&8LbqI=2Txb^^~`8xz&R0hinZGj3(GpnP~(Ovuie z*tJ8prv%DGZ^oAOp`K)-*{@i=htwi#gR2}ofntw8+VMUaT6TlVQ+8wXC?EfCM%bux zVq?#=krP`3oV;ngv1@uglAn6f>U!}Z+DP7)a`WZ?eX-i0fP6VFFi{TR0r%mx(Ju6$ zoZmo@Gx%^5WnmSgZ7^j-Gs($Y%fnBxy0mQBtKMww7qV)Vb*+yeA4GR7+)gNewU)5~I^i9>n zPeOlE(_ud2$?9@U%&6`07po&iN<{XpM^6Yc{YR>;`X^Ff7oA3L-DV%8TQhDqHj5+rl^|@ zP3etG4gIv9C7-Z+$RfbiOpw-fsr{rstx_b&Cwu9GYoZZdTc_8!UQZnGy!)+sBh<&3 zX!feoQGb?-0v2~S;M}+BcO%@RFy1ksJGSxmp<$KNXrnP9j*o}(y9?B+1n49hdR_0`*`@|OPB@c zn;L$7)!}>Osp9Ka>TY}a?Dp&=f4&?>HJc7%&Wra?$vEw|g5@~KfL>>C?~{@u!tyLF z03y@xlEw_Fo7u#X`sN<8)w8E+{2_#{e+VJ@$Ty?8ZgY*-J?cpYlZP+Kq<*>E3qRG5 zHncYEpo6?W+xl&F-57eSW)tmYpc*efOYRgf0|+n=TAGvuMB>RrnE*X_ zkJH`ReHTgbWu+z_TT#+dSLr|e`)>RxfDsB)jl#>~a6%2{ylOtD98FmNN4(oA;J&WssyBLy| zeN2nE#;}Vt6^d^06_YI~=vcp-;iIMskCrbCr8vS)Jtj%CJM{is^P-KL4MhlUcYF6hDf(x$kT7ORTmZEz0sf;P`Vb!8_#z zb+zNEaW4?XZXQaEXt$v&S2i2i9gyHB-ZhRkFljj+OPq zv?-ojo+QFL*X(||Y~eQ2zq|beAbH+z0l1K8D-yL)9Mx&);>VD@h0y882q^)NZ{O4h zU#o9lT)}$!V=SMZn7b`9i3Bdm`3rfXV+t9s*FLN*O$KvsVz%k)pkRr4Em)Y+hBdm~ zbk*`dppHirf2ZjE&Lv{=49yNa=znJDlwiFsQ#SQA&U7|pi$U6h7ZxD(>qNVf?ojKV z2}d47KAzeT_S#?uSNXaXp+>&D?6#5pA8>_;Nk9~}i~X3F8|<%7)N3Kq(83H$7lF`h zaS%9w)!+7o)0;^HI};f)EF^zvme$gUwcdj7MuUxU3C8&3QG5Woe{qXN1AM?GC1BO= z^9pP1=Yy|}v4-5;<|NC)@C>F6Z}f+3a=>@-K_aV+>Ifv(N5{PeEc>8%(O*t9dWxdy zOlMO~&xdSFTO|zEG%m0yVbWyO98`uAtG1r`#;#MF)8*743ljN<3~T~anIO_NZ{KWg z$}@6!d3yWc1ieRULnF(-5#BphOiYo@9Kn=ARl*t~?;RGt4>d^tIX{J_TxOL$H8seEy$HTxih>}alB8$ir zl!eI`x|*u*bL^2gz&qCMqdJfU*?cj|4HCI~e!YYJXQqT{pyO zVSC3>>zJA)J_Ej)^mv`C`dUbr4ug|l6u19N^Bt`~#tUM^xBhw`(b6tyYjCr$=i}8! z0|rGA9a@X<)Am+KR=^gE{6x6iH{378jPGqEhd3wwYQo10(jAVFr1t4=J?P^E@N@F< z3;j(9&4=6Y3fwbOH95XNN^3?iBtjow3ZnC7EB3WgnSSTi+Lbt1UoI} zc`S4le7=c<8-16B6I!{l$jd^`riheARXO-TK82k1!MBwG3oI4P`{7l22?>HXW}^MG zcra+sl4)E~-d4kf*2+ZukkR_tibtUg{)o$uhYwK}LVv?wwQohv$6tDBYU3y+!D6F= z1WjIGen}ej*0?L|u9A{mvS-RjlF0{|WgX*$3gZOA=T0>H^_YFRkP<%5ZiQ^VrpxfF z7sHVIYvss>_hr$27*y8UQ<3xrn;iV>7h7+8Mrmw}{TaKQ>-uU!xfRZ!3Rj)fMgSw+ z;Sidjk1ij;@p#O-^ zSul3pT8Rz5ELwiW9pWl^kg@Si-kW073>^$7dWu%ot({BMvf_ibZj+uQ%fY(sii+Vy z-`flH;k;>bnE{>E@cY4Xz)bw^p4g~=UOVb|ldj2leBMr-gL&wUnHBS(>slqG9d@Q5 zVYcNQ zUDtUbo}t#;1VyvZ|18{49HE_|`8$DF;fYj|E?rwvCioo|tn*fS#WweAcG-dxKr>0W`qx)~6$ zE@K64agIyF$%E;0@Z;fJx@bE8+W)o%iQt9To0$o~bX*r4m$K-H|cp6(Kh zA|JGPSYYn<$j#HrxA0Bgsi}ecy-$jr`0;Wz6ix>}d{}kR`Z+NW?zgi6b87eZvM1Z3 zLSA$zkMWN|7`iRy-lw?AH~_CEpwuAEv?$T3S|Tw5K^yBE*_zhEvn93s2mcK{n(Zdn#wh>>q+i5n zv!F*#^mhcf*ce;|QXHRV*HKaxahDCSo^edu9%V{ACGAYX? zE8t@B*$PB~eaq6PaFnI5RTEb4axh{v%E+_#YKq7RMDkOM)|&~Uk;^Gj9apU!orSp{ z;!f7D=VDXef(45a^b0gyOt|}1?lj5v#yrOSrSDEW>T*-qi&tnu}PA2_etP~)h&G;PSjYP7e!mIrR`ukfN*Su z1ZFjO~%ktYlABCc_M9@EOVWUr4?bEUT7ruvRSaHg=oNZv0L$a4VDMzR)rvs?Et_De3BPd@UcP1{|-cUrU5 ze_$W?A7jK+>=`@uu;jKfb}mln;4dgA?RmxA-8nIV0I~ z?RX|uGzu@dwM`xEmihU>a%K0`;&z(86WC`7a?>4RQsm?T(QZ8Q%ibi~bHzjrzanCo z)GK_n1gh}n`Sx>xX}dm(_mz#$aRrFI?V`cuX8ijz;%LDW(Si1hLbMPY9;`?Z>Ox|_ zQ$mC&EOhEo_Xah?jeby%V6K-}!1=w7E%1aYE%e-$L5|<1IF)x_a!~e*B`9lr_%^&K z@JEw>f9!jTZXZ~@W2T3UfZ`?5pC&IN=bt7$@iIka_Q9*tKempCi ziBt1-eMf5y=6HAXzu)hTe7!g14Gp@9lMn6UA~9gO1c&n!xi59sqy6vje}U{=+{O4o zJ*4VU0Sk{Rvs^kn?OyRQ4EGe5jaBJtwShu9)&Mw%jm=C(&X4@37>-=scjo2Fh7hoW z-54T5gduNXeQ3oU*HTHIWjV9l(S*+9*`cI)f^FH&8`a-3e5%m^azST$FljPu?Scjf zsYOjwNGx~wCJ?7HuL$dF#Bzc#0LcC(L!yMMOO?j+4Pp4QY^Re zqqjjtLFqR{M{ISAKn@NkByr=dRw`|AZJgXfV0k9Q}l26GP~(GeCI2o4E^9| z%JWOLlf{d`HI2OREK8MpnRpAsUspS?w|)f0+ZRMXDFbExU>c|g1(&s^m+7LGPq86d zVi>r7|4L_nBLuGEf*HwK_BSqnpQiy~=wPOBq6M>~(5ROq0N!8SyasrElJF!@E)7`{{wXyQ>)KQ_ zbs9#EdRe+QYH`!}UaV91|0S8UWy<#G^)xMHB&MOkTv(J|bQ%KZvU{<(jTIcNGn11p z%)zeOGiT>%;tQTTkeD*ir?gH*qwbl1wdMrYstCgkjcK0oiwV*FHLb_`x}3SE=wDU9 zr8(JV6J^czl$7#TaE?POI@1psk*h*;&&*JXT{-JjXAA%@1*2H%Lt0XtS_{tVVjKYf zQ52b%HPmGpKnWK?58xrxtOKh>WZz69N~%%$_!w){*=@+;7+LSHs<8W-G+H)S&f}uD z%n2QS6g=><+i}OvqYOXZm$eZm_BJ8Mt+CT+f|nViBX9&7(zZWbmYDgib%yNwD2j4} zQw&yBfiWWO*KV$~(Ge@)v*mtv@ze0EJz$PpMBo;voMeQ9a)~OKZI(C_|3L3{W)2P%?I}NK-}8 z9Ln5+8FY4VCl01@gTY8{p{YS|qb+*`Jc@51o7?qr6`P9c(uZ*kd0%mfy`4+unK`L~ z-6tkuJ9lKV{+IHHeb&iU4i|7u*)f%;2et^4uOn=wCxZ-nhB(Urq5jE$7b;%8>Ba@P z7J4@!MqWsMmYB=N7tEVRdRz&eCGSTw{PWV*&;|FC4CgQ>TLKx|q(HP&8Uz*R;MyD7 zFQ3T=UZJ5Ud4J^j9A7V}FRj&Xk0R{umgE;YLbe?hgEzVETuo@=chZvk2OHPHnbglY za-m(`Y{1B-f$2X}ZD#3%Db1-=-qJ<#eY7Ty(JA!7(F=_{HO8wzZL&l&jktvUuSDe; z)}3lM;jY447gMyVzr4m){ArUK{ATP@oDk096N=O_Y8gQ<%5`?z8mGWsvOfBAF^pNI zVjpWKDjnNRcx;S_Bl-&$Iq~K_l|$yIU|Q%7R-61SR@ya6WLlafjnWLbvbj3)iFjh# z6CW;r(_+=8M0(ynNNOs$@ZiqSZU^f^22=7!;?UPAF7AeXni`$XBUggeGPd~C+<>Mt zH0jb*LR<454khtML1Rj_-1Q@s!8Xl`)UnZYM@tq76gQ<;n9XHB2tledJoqj2gKGa_ z`S17-R3aqQs5^fD{=Iro;>CLCNR;vtg~MQ_?c2Pe!%oNYhd?V(!|jtI8t{q8Y4V~Q zEefJ5a4hs;j`pZ=!NDXm#Xf<$c-W|<;Yyrks<{W2KelyZq#LqRMdfDukO$Gl`?uMK zH*hGuC!iw$@zXdumU#=Dlck>lALAl|jy#Fp`;*2494L4ve}y_2W12R$!&U}%|LiiF z+?AQ5I=suK+ea7Tm&F}3(RxZn(b?M>mbT&wZ#1P@ek3Q8?mJPVwDiO&Y=KZp@Gr%c zo=X$6DA`Q=cW7}xhB{=es?ZSM?LCLN3;n5}y9sMYH9$JfIJwl&1uay=<1q!Vma9A^ z)yu}bdnVZGMWL0W8$r`T0yJ7Gtz&^JY%fng+c0Zb`G$H?KUY(4h+0&H+;S*TN(r-za^=V)v6Rv$aNDv8}XaE zYW0y@)DFq$o973q?z6_U5`4d-D+T_xD%kfEOPek@6}g#A`KZlX!~F=CLCK-PtTN!` zcJyS3`7MUqv@1WKHrDs|AN~ou{K+n*NjFpC!y=${%vtl<>A)zIC}DeI5;Nj!-L<}> z^Mdmeo)L3*Q}^NoBh(QNF@;Vd zXhqS?3WWn_Ub;%_Joe=to7c-QiRX1YNLSp)XVN3=h05uol166nlvKkVBk{(Cw zmrYwT-j`)_%YX)S9E%la=03&1R*Ovg#YYsWXqq&GL9;YlvXjw4_hx$dx1E~EB;79t1cD2~!UPpYiy57G~mKAu%;ci84;U@|{k z@@Sp=n1R7Ls{D6`u_IqjRBKYB*@7G3;Pf@YDT5M&CR(>;IyI2P?C4@Qr2#tM+oob< zfF|EVKK0$*Pq-*xVj~!vaQA^%7y5H>bsVGld|{uJ1~sM+LvAT?1PS!sDVPLOFrYWj z*nZLfE^)F|keSLn#BKiu&D90%LJ2oHF7Axbd2BmQ`e&Ens0 zlHlu7@bbw?JMW6czvgUDQAiKL+^&EYv!F@S%lTVd3kGlN+j{Dh+`+$>i23`QkzA0J zW7mNH8yEle6>$RinsuJ2gC6bYbG$bsWt)*0%yAq9VJ0lgG2iU-d#tt?z&riiqwuGO z|N32+AHgt4n83VTtHdP1S70(ShCudA$4oiHX4NLt=K-*W)Z?*(pfk>S9=<92eF0V^ zyG|YOw^+N&sG_AD$-8I}9=zCk1*VW_s%lt8V{)tu2LI$C>#&PC`$~pG7WcX(tGCz2oV|>TlV}0ER zsBV7Eh{XiWHQz~`h3%XPm6NDthH3wgC%^5ghrS$J6+ORSxVlXc^J5fbcHZ}QP*2v5` zDu>nphLB*xjrTSHu=xF(^4vFp8(MgemVmysGF*-Uwm^|(y>1LBxsh(dj;4$m&jeIgoy zYd)3E{0Z?S8?HL5G70Ma<=Q)$CB4@2D8tVG_HEbp%YhP#{*-e`*T-JZId3o=)gy54LVH$ph-`pYjq4PBXf7UXFU z^8)t@(75SZx`a0+&R&cncE^?$-+}|t-$veJPA#*0JI`YxQsoOEmH_kEl2X3X%Z}8% z(Cq1pv2*lMrNy$yviJ^D zKG&fJgaBB0B$3Z1;5P-v0GdDgL^)=Le*f1 zN4+=X-CQ8py^Ge_&a_?J(x&aNiVEpP4vFX`bZ&IbFS7c4Da$Fa920x@wQ;VYSDA&c zbZFY{SmLc#VUvTGa-NXn74%gIOU22y@v=CD7FZ z-^7n@r_o#(&dOH(A{2$+Q!|#Ry8nn^h`#+1!N@pLlmPMPPs+Y@W4;Qco!orcdU2Aa z@H&EjjV@PtS(c(aA(HRGJ2w}9sdf-w7J@Xz*+%($ogfkKX`q~XC9!Q_foUKFw^^Ku zg!iuoKm+){P>@gm*KN+d&iJkVcAE(x$S8k|6V$s55QK_2Y83i0c0RAh=*th)Cc|q` zg%alL2F(z?+T{Cuv!`;{z#4FDY0Wea=HQ>o^l8f=CTB}EWn@~RpM4=J2xIrRT3Q&F zzJjpdi#oT)nXg7Md>E~{fQs1wUQKGE#wNP=k38MAUGdq6*?G0H@jS~1t<<#YR@WOR z4L5HhCG6*aL>5xMo)j^mqAxiaxBHo?{#l+M>quE3)^_MZAn@X9CQuu{Go;m66l(k> zy-~r18H~9et$HISh>~v2JMRwHCjihE)2?;HC>3|eNY%f{)y(?Uh+&O)`;~sa23lkz zH(DAAVSQA!0i=9?QO`Gin{zqhUawX;XPZ1CSgOBO_4Sj#dADK{#j5b@QFr+fvb`HA zrU4khxG%jeV}8wk_!v*a`)5pr>;mH%@V*m&Z4-o^ko@o-Dov&){5^TEGrnCjD=!|U zcY5gw5k17p;mGxq8s@#~2n;@A;WSk#ZadA+ZsW6-EGrE&bo`q{w|xecc{pyaMyhivYX zt;F6zn$a~c8L3XOovgUe&sOSONblLrKel&WfyRs3_ijqZ`dW_{m-#rvN|b+zM1ml& zan401GGwy}5@d_@GwxI`0FAdI#Ql(?dOA0vJ*waH_ODDqZr=;WONQ>1C|hbkl?yc{ zC>Amm)(5XM^E@LV{3~~xe`ab=f8_fH9cN=wgp4eEj2dE)<(gV9-Yd@eFdb|UE2`R= zQ~5X0S7hwZcGMg;4@4M1%f-sfL4EXX%fG!2%<)LMh!BMHKrCgkEp^Xj|DLJF|R{Bon0X; zmDUWQ`Z^;Om^A64r+p-FBShgnmCFl0w#i#nj1+qa(jXt6e!C%ue13#gM6g| zr$H+)YZ&qIeLv{JyZCexFnK$t)6Ev}prdMR>HW6*2tzla{oL{8mmWqV|ia{MrkrxFq4;w9-)s$+P~GP_dai2C-1z>4=u3{Nmq zeeqqeR==^$sy)R1rbhV$lHdBcvc3d@>i`5GKOu)tkw3XNs=P}EAV zu0d+?&U!hJT<8Pd<1MG@`0h)AA-9FiMGe7vgc8tbEVfR?iI}|(|EyDL&(~|3^^&=Q zzb&O7e*9x8rOU}3qtOYO)-Jn@ox8%CyE{DU8PX#l7$5C(p8;wP9zx!;jl6^LjYek}ppc*pwjc}S~|4v5@9 zmv3LSD|Gx&uTHf%R3~tB#=S8mjv6!a7}93D+uzNT5neydaWrUrzkkXhD;XgPqsdva z5~s|5)e3nDJPpVZp^3F`n-&gjX}F~(FK)ywFS?{BFGuP7c!STHtLB;-K`uS= z+pHpqb(5e5V6v@72+f41VnL0Xw9VZn(JTT%dTAF11C>#bov*8(4qv>0Kmh)5$-^u$ z8h^;l{GHfKE9bD=4>}fOplhc_w!dB6vp&AEcDLKl@8L`tCM-jer1aB~V61kml>leb ze8-A)KQ&kow$H)X{n^VkhTq;}U0qZ+v-xT3uEXgiicW6M-;3k{tU2=4`8BTn-MJWK z-{)=%g4E(t(%co=_a18i-o2P`a(xbC2OifN1PN^?x}oRWzw+8BIHE4?E!S4DTAy93}sXQB)0E4kWSKl4?Big^1n3ceYpKyA^EMY?uh0Ud$W=kJvZF|my}fhIP3n( zQ~x;T^1;AH8&gAz;nT^9VV0k+p~y#M9R6FK{bQ(m?+$7g%s(VDo%kd>J*K%9me=Kg zBBWJmFxQ8}^G|s3&*yClN^Y*hc_5%u9(LU*jeE`cAdAbf`sQNQUO>EZ!~Zo0{^QbX zeE--G{vop-qscf!mzTf$`ENA7whr~~kWDfN7 z!XO=kYnp&f;G$n@db1YcTQd?b5x1(OYQGzr#6-?AGzNfM?&v_^ktyV3+`s)NIq~d8 z^$M7^mp~25WWp^ ziD^H7L40y2i7FpUnf+FD zdQ$;7^~01ft&bmm!nEx9pDPFLb|YXof1WNN-W$K-zvys z($mE*&yMcXqb_tX$=qcWvV?Id^3KNx-yVG48&?gL{>H4*HezC5jjjq-UiNgl6xu*L zqWtl(2jI0&>G*RT1VSP)B60L{nW3H^E3VTRebHia?v?M(6`dF^a}d2`(Wa1!5&E|j z@@Ez@+d+0BUzvL(!?{0RK$ML6Grgi+PSp69SyU`MVhj>MaXzC;oAf1N^?sw^J$?v% zk_neR5(UOFk=hYMkp&r+zwm!daUIqn_k@EPwaq{N7mOLQfEMx%OHP={NAMOu79J@ES`L>*gU!OQEV6SlfgfN zV^?ubytuzp$$w^MJ`NaDa3{9G16y$$U8$&avgei1hv8SeOCF024cIbnJE+d1teylv zRP;bnmIpveUU45Uas_E9lFxH^Dr7(7sOaWnN0ho|gi(B9R!mwk}4h9ZtnCl5P^TcGRIKBGXpnbG}U+P%tm$)p;$ zIzuV#Mja9b^s4#@C~qthmxk~^tJ7a&)&uoEV*F{(+X}+?wbo@}urYCzKfwK-H*nFS zMw`8BAjSekXO^)8fiifrXe+!n?BC3_iP3&RONqv38uYQPi7E>j^k&X}Wg&Z7LyaU% z+(=Aq+}fkU+A4JckE^jq{TUiKBXht!d)oxMpW5Gcyx#bHBi~g!;B`&PfW{ zCIV4zcTW2H-XCEaWr0Qm>J=;hgJR%+hc7@1Hy{M%$~(XwgwJr_&1Uyeb&gZKctczy zGMNKXKpg=z&`ou*eB^9$ULmm^iCYU%S5%4)dC1q>{LDgf37RooZt1`bO(el4N4=3d zAf*Ov1qtnKZTMaAZaZ1k@}vnE-=uAS?(bWk%lb=J6;W6$FPR;PSbCCDzUg%(&JEK4 z7x~yjdW-(qDl@$j4cpNZXz=>IpM3Bu<2gDTs2K5`m4iZN~1FiAs z#a=vE*`Ur$6vu3#~La#Z);c*00UE@f&G$D7fr=g}5SfGN1 zkdOS1Jcv!*kD1{#lbJmrRXRCgev3_FRzb7G`18Hu#r}x6Oe4KHTQC@UjC+lC4 zTUbLFml+xJKhHV~UUrM3#JdR!+IA?T?mo<~eO5-DjYu`Ep8r_qbXqrm=W(pvV%~96 zHliBHe?lD~=6p`_rpe1@JuLW^V12Q&eIqm!gKh?;^Qb@=K+5g&b}mmoq$>tkQt69_ z;icgJ2GLTX5u}k=p%E33tzBq-*^_3UfZ#U2xZ>Y&!WC>Nzx_ZShKSvJf-fXjfzhK9 zZR`Rm)gvvpBNWM(_O?yVF_^2M7QHF{uXlH51Cr(n5NVMS@uHzbQ1k&0F`}S~fxvT} zvS~xwMP;Wn6(LXz!|!gUsCovlj)3|u%qaRvqYo=AaCz$`go1he+;MX1+SrEuEL19b zIT)i2oyVgjM?P=uDna1<@f5bvu?^BSQ^2TH&Cg*tX6xcMuA7|%$S!2#rj8{mGDk{c zM;`(jrt`au^!uad)FO(pJs{$_w^|ejjY)*jKGgI~P^D%5=cv@^hiKDlS-R&MkahnW zpmsniZe&0t6oQmukEQhk3Ek(v_i)XAt^#L z`*hxB;9_+&G&mXFc+7{Chq%J>=ov*B7Ks1IgiT|^j zT7ZBSNG7tn)=r;n6{KXUB3ELu>0nDjX9$?>bB?Z2Sxj3taCzbH#=`P_iH^A)o#9WL z6}?Y(Oex~CgQ2qDdL^7YTEN96zK=Yopz)+(h9-etnKml>Gk()S1M?$cFiQoI+rnzL zoL<4&?PGJrOgIP~5@0@Z{?FES(IeE!I@H79AAnx36?&mSD&k{HKbFjIs9GeEJ*^Bq zK;Tq-O(L5Rny6a#GyK_^(|3srriQ2B!2$Mw!I*$5ZvGOEb;Gg_r70N`BENX~@r!E& zg8wiIp?xXp_A@SCo^5TZie0R*7K zZEPm~YbR|qM6{6t_;PK(#|q+W^)OglR!ur`KgPjRvL9+aq`5H$KEigME$aGOMWG0Ca-+kK ze_2R+wyvt_A0=8M1&CC4R29Ky;_*b8%#Vt@%Q9|RL1Bb%r3sCYwqJDng7E)Kl5E%s zZQ!TvtYsEAvTSxJTJ;Ys2l~Ehelz|~0V|+kiU8~$evox4J^Hak#o-K4Mw*_H*C*~% z7IHenlKXA8vU)~}7!znPq@WMy%&p??Q|&1$A{6w{gi(R{RPDPc}%=RUp4kN;K`E& zS!Lh=k?$bFbw)(PsCxn`&Z}beZH{{igjL69K=)f%f8*kZ{4AE542@ya}**B(Y z?-8$Le@A4rQAVP|1?W>|1PtfP9Po=?fSW?A9vnc?G-|+teR9L5C0&vwMs@d3unR-P z;E=(C&zlkDR2eb+iIuJreFaMDLMzk|OaY^!XS}Y!_TbX`;El!cXN7QfS(%TA8jeyx z<0KVIz9P;VH|-4`7~E@&6+8#?kQ3U)HT{Qm$l@rBPCtv`N|Lu*W@?9dDVo$oZ-GZ% zLly}HoS0w?w2%PuKcnv+g^+|4n}|CT(iVj?kP{tZ-Ne3|1gBUFgJeD%WwliuF4h|3 zgooJ9G;5)#uud(U1mMxpr3&OQtf!Hlgv?%f$NVf&fQ-=3{aI{K?!SSBWH1&WM1#Q?34c{`(iHXRCE%YW7Qa>Ion)Y(85|~Wm=$;|X$cYZAF7AVVY0O&ZEPh;T+~96> z-#`pYEgRekvbk;JWMFI9RUzAJ*4P;T8my1say1liko=Ijrf_bLMqfSryOvK>;xi{Y zsq4_(tT*ePDhy(@BH?cb^eF03H5IY5FHk|@j<;0(zyXBQsw>Zw;SPh(#^}ZBFiEZ4r6$yH&YB)F)ACNPQQIWCnKk zjGP~w2QnBshMHKdTfPou9jOIQcycK{^^Hyi?HDb}>S8 zmT-Q`u4WwblV3A%R${HbPUsvpgnGp!9(^1CZEWxk29Yy_kg+yf29XDE(~Y`u2zIn9YlcP@?2DSg9Sany8_*k0hMc1b!p@&~p=@LEsPVpwq{!%Bwf zQfqkOnK1~KS+ML9ahk@nB@5s#Y)k3hn-a*$C)4Qmd^C9R%4baohy(wQBeM8*{X&k^ za6Do1t+3)s{d$v(9VJ%aIFTa&ID>EvmKDNg!T%;I-g`N6kMQZTNVC3M-;wUQeC$h( zsR6ulWNgP0I{Nk9&D~ChR?%ML?KG9H66b6twZg}F_N&Y9 z5z*aWk=K$`ec~yIlDV*HEQcF;Su;M~GDfYfe-MdJ&v(UI;}u@x|6YCu4)BuHp`F(# z)|A5=FKj}-f{-Hexp|W{x+?I79#FIJ!*_fQfr*FRNJzw*RKN>OFQ9o5{z3s3jkESq zNt4R+#b@w{c+X|qT17|vC>F^5wWb_*u>zJx< zbAWnmR`$EMINq4pE_tacs#+ZdsNcef&5vZ*>#N>>f+C+5Y@pPFl6}~sQ@CzMKqafg z03pdGi;ngKEnJyZy>8=%3Qnp`X86Z?5V=A-X^iI6!}?bv zVABKS_{a~KC8_Xg#7Qico`-NX4K>gnUuY3{@tGDJstX+%{^%BX6CQ*?)m8{Y$L%6y zOw`eg&dq=gk5=5jU0@5$igi}fD20n+eIg2w|5~Q7#SphU6V)+7>6ga9?LrBKs=apc zxnAE6%VjFKQ=!Dui0 zjpxN>GdLL5qjrX(&w&~MJpozay;#!4?ik4rh4cg>lgw-s@M1*TWunZUE&DXDo`!UL zXwwMg*|7Wc8fqOfte*eFyjl=^AY)pE>cHNJ3m_BeP-fg4AVX~6<^(8j zXb01$SnHp5Uv+Q4TGpj4F3>JKu*G7M%bUz@W}5kW!jEC{=;C@i#+F4|i*7D)oHWMx zn;=hY&&_?8B9s?xfVM8C>b_LT4e$ohQxO84_N{g9CkN>;eD0BX%;5n}RWe5q+r7r6 zYVASuQ7k@<_DL_E!MfZM0J$biS4(u18BCoF11MxUANm(VCA1E8+XFtxvfRwL*Ym#) z_?t8DYxcI$E^ZVMd^+ojIIk_rd;F&sfKlVDBs6odGCFuOSP05yxj{8 zHa&aG35kQ+4Y4jr`bE!4-c9$*lquQtc*In0bv`U6C)H|$1FcX;i2(Q<3sZ~;l1$qv z$9^l*#Q!cLv;#WtiFGEsgWt$aK6vqPV0TQp?(o?{40eOiP8%_~YhwDlwjkYYl%S!W zMOg`?RYNw}%0R>qDrlyMWonrS7oP#fy2BOkA6HS9-6}8^c_@g)}yh%OynAvh#YU2e*`frYbkUX75NMNHvpP!V2`XGT>u& ztt6mOrM?M+(<}?*_GV`g3huFidlHd!0OmhXPsrqmAiOK3b=m@sZXHPESD&mfjYd`T z#e(oEHv2{h%rWf?KgCylKE$3Z&01HkLd2oNG6=v-?*1dr^WDNckd}#<8CH2WIRji( z%x3T>2>}CND9=Y(Q#aGOuM#MV5p^63qhCG%{=J?1xJ74J@FUVh-@-KsD`qRojo_Ph znI+Q8a$ICIjX2GRCz`cH%qc`*oXPZM(g$pR>p%w!2l1PNCI_Qg<2I?|ZTs4L>mZ)} zon*VL?Q-ws-tuTTTn$&Rn_vu-hX*k|WC9p^Zv~=ttl(7K)T@2{$$i;3{y_3)y*QmV@LuPUNmaWXYAm^k+&XmmH_9G@D z7q{bSp3|k|73H4QD`TUk(2d{zobo^M1M{oNtz8Rq%V6Q9Zs0T)F_{c}FN*Em{a5M% zLj*)Psmn}Zc-Y=Q(aA46vJFg8bv2&G_QYyhVc}|9a>z8}Jh-Fr8$Ea<)Ka+Ex(U%_JH!SSYA|DsZK{0$gnO z$4QSXV8;Zu6(czPN-qdOM5yI}QS`1er~1mG<1o^&P*b-U`FrU+J^i6amIYh;H%zTs zN@LD34f*h#9fIqHMEwEDddx6-l`=Ko-VY(h;;hYLQ@D>umxtL*rW9{$rJsz(WwYvs zKpuX|EZFXBU^4sQW_pIY6fGh#(#z%bUM@~j0${;68<4kdF{j&nPPpwCd^a8^n}K*R*-cJ5sV zSq?kg3toLN`X6-m*ZAACAlk?PM&~73msC(yV$l;Y#6c!RQtupzlUg0fTAY>U$(-FH z3=P*~%(W@F6?|VU5;(|VF2VF>W}=8$Ns!bf+Z)w-y3<3I~o>0KeSFr_bFX5L7w(Dvw{jIy@}F$tS6 zAU{VjE7Q;l1I>)`y?K=HfVq?E*6BJv3o?&mHmpfWulyIEuJBRU{LHzX|9)9|sJD1V z>r{UxmxoyEkNE1PuQPGJ6huBkU|z;V-)77xz8~yF471ggQ6aJ=jjbL<&iic8^ymFNq#2dWbs~hC|G8=AQau05TvsMnj1f$fk7 z8hB;^7szUE#}}KR8w%^wjICSrZ1N{e4r^L`D_#$T(2%}j{<8`ET9r;{z)mzn!cN$* z71f(d8t!w40qiOygj}3pX6aN6xoyZ-mygg7EJ|`jt>T~fJYRDqPF|zSqU+=$(ow*r zCFV&Rihls}v=IfEJLMQH@Zr>~;|K1Yan47jXt-@YVASqp=| z0yfDxm{K+(%md3_71W>qZSK6kEhHf57hAKmA=69$kUnLFWM}y#dUOisDH6n@#cC>? z$6Jd|1kIPq#U-P!{A0>oIT* z`mKg1`j5(Q=L-{vN9^Wq8~Ew|ELg?H(CkMgL(CFx$5v#%1Go3gN3IAp_K+DjM7QE2 zcAE5=y{~6RiH}w+S4#gKaT;K}7#=TUn(7?yu(2)o`shNALgd`C2!MhBuQZUM060N3 zk1iEHSO7mZULASxyp-(tweTdow3*))%VR@4W6lEr(p`T1whlYtht6oGiMG4o%@WwK zLJjl5y4L)pAAnd_ujBg~xB?37mGOBn2#I*o`lR5pBADqw(Yi+Z|MBDv5gNe{n;O#8 zj zv5uBc&_tby#LAQjCNqy_7|uAEId6VsuVWCgQ3irWy&kP8hWGyYPMoKu!8%UcsU>B%1h22P zQ{~yr3DU}B9Qp4bF$(gJwDBNd9Qo7_Fqr3VexT8f_xo}2!G68fTRU%z?H2xTVbiGH z4AZNp{D~XqUS*_!IK3sbNuPJB-1_NYMr&Z|#RR7uXZ%012A=h|tU*$Ulygq;xp~~& zU&~|CGFg$-gPbT{3@moeobO?H%0EG>sHZXkyCDkXY;YPz(A0z zPrSUuR^S3SnwcBLgZ)_H(5A-H=^;adUwb!yg>M0H%<6~Y$pA}@rj;z8*(}~y=XrPI z0{MGBU%ZHS-q@5WfMh+aqB}pu#SwQ5+5zx7k5|}oOm(1g400H$li8+fWPa8;Ti@ZO z6=5Tkr}Qm;PwKkT8%<6G`J4m{#D{b*@iFVuXt$xJDxpQ~=UQ99a5qXJk#cYtF%toa zS8s`7c8+6Beb^h7NKr0gHy|NdO@Rl$DkeL}UH!x9UE;e^@_Msmzj9nd?|MPdZ&^`X z)(56z>z0tKc)dprIXhzUnb|V6;^f9uDivxz;Am=(9?C#Y54oZ1w+%B^nb;2rdFWZ$ zx`GPoSNco-W>Sncxn5EZw)(%fiD9tEe3T#nBj>gNDcW5e^5%Nm?WPQXw6Az?S;7@u+H$yI34$7Tkz zjBm=8)j{!Qn?YQrjoSvqeESvznvv(^$Ds$#w`=7g>IO5H8;LZ7=EdFP?A zEVP=49=S1pr*M4vWyBSSx~x`VE{K}lK?Kl^SO^1VPH~M%`bX7~0M{%MR_4J4Jw&IZ zu?7v`dQPNkuWe<|Y-wfY;yeL9&@f+&n#PD<3}=_LAqMgX5(!vi1E&K-{9DRlycSiZ z>JiL-UPEjJSsOGM^P!BzJP*Y|Pbz%-z&*TVQ+WKCn(2w65aCO(XxtVIk%EIiar!EaoO#uW0m<8#w#1ZH?ty8m zFSpR1?R$`D;IOniANfclVRup{%d^#5zwan^lTVd35MRcf>(v`q|=nSxqti?vVrLU8?PGz=NB$< z0@Ye6AlSqQk<}F3F1RWGaFlp3Z4pyxZ zCtY2J=`m@IA3_HUU9Wg8u`kUkEc2{6RqEuUO|!=ulZ*1=3aVIw*^!%c9RM+C7$nMB zyM47?usmpg8K%WUpstUG!j^Ykv|csC(})RZHwFT#MfOj}nCEh!w4 zyDkj#lcxrV0+FAFLiG&A>W81qPlO>du1!&9| zMV}Ank1q;S(2iBO{2uub#XBTfwSjY4k5>20b0#{}b>r}wP`QXPgBP+QI1ZWZyEL9x zkbO}3weGNE=bu>I%6zM}N33tZY3oKGbcMO(n93Er*p%isA#vZvk*lPHEHnh>wjFUe z##ie**?mjox5r%2uq&LHQ_H16+#;oKXIH;~n$PGkjoEs}h!5FeuufVYx!j|x(*2An zeX*S4Gwe;F6ap zAu<|(Q&SxE6B$!gK*97j#6mctB+T>0deA~=L+;kR)@9#{S+S!tF+v|)pwhUkFms5% zF}Gk~o6b?dSaCcTAhqag7d%=8XQd;hvTJhzqN2&EypHV#XC1OyN>F#jrENw(DT>2; zRu43v`ps*52+my)z|y3~sX&u)4URyY4NU>-`|yBj*5|271rH#g($WO)p^=!^ zrT^g9&_g$~m8wjYRdTZXaaKq66Jp4YoS#23P*!^uAMt22BoiN72wx`XFm_h@;yNND zii>Do^z{iHdx2!Wh&#j3jO zHVTZx>gO=mIV4>~|UEPt%WiXHr_+=dAH`!jp14KRk6Fm5cIFs*f-=G5y z1?dsjh{^Ez-xNq3z3y+4PT8=yVZQ{-FNOSy9c18LAr;bNwRaGadA_naa!y5I-L-_` za<_tmX#-V<*iil#Q-}(P)Tk{Y>Jc^g(!NpNo|nPFF|r2Rt*0Nd$DNk3fYN`)>S9 z6y+zHHfkd7*C|8IiQCm54Q=`&TLwc;3mxCTokhYuB~r;GxF3j0=EvYmoYAB-yQ|)- z*K$~NkY?ilzG3V98QHmmXDiHnLCPl-IjEGM)z&yDKI@XZ)~e`e@G~2L=0S|)x&`lG zo@JIdg+s)OblVsQLc~K9&E|(EkXmmstK*ZyhYub41s(c7;STWSH{;|oPt{$^E7^pM z-Xg`z;o`c~7<_thhE#v{ZrD%61%yyn@`Vu}8g7Ox*kgT(5DXj#l;6stW>We0TaOKux#u1~qH&%@COF72Oe0hiam5BE(ejCd z*M;BqG#N^9jGp&C9KrQ|>EG%?EfvG3nwX6$Iy&9Zn=tn;f0%M zCEFwZ_=lJH(bWF%H)_siFR@|HI62Vi194_oDa^;0ZH|Xf?<&jh9Ma&BRIX5m^ zOt{W+Q_O?a1uV~O@e@c?veA#^M@H$y4fR`r>;n7a-MGc|^b^I7h%W^NCG+Ltf!5%~ z<|$L`6ru(kV==kn)r}wWkehXo4SI4eH>xd_k9Gz}YSxQJ9Xx6@LZB?zP>Am>sTI-3 zke6p{5(3pyVc$Dd2JGAuJsVj;&?%d5qUVbk9ML2Vcl6%Q1jcNN1pQQeXGVm9t>#eiav|)=9on6or;zle8#w3Q|y# zTH}De%H~mh*nh86_c}_Xe;HPF^El`($F2hOb74}#v50uja3xeft!*=)mGs)rhf0UK zBujPqTffYkhJ9l-{P<&H@Ll{MIdS#0Suh@NA&s424sE~e#zCdW*Gt2mtN65f-O;^@ zzfQ$Z-rnLQ6S|mTr4$V_8)+UuJQo-^7l2H(j)Tu zc^9*|)FY94)@|@C8E{ifb1X3V_}{0&`pmAatNMcXM#wLGaygY)?t(bwgY!c|j#Ax? zf>UHfjO!m#D*O7-yGh(Y{zS7YG&J$`lS1#E3vW`5m+-(~bs)m!a%{9D_eRJ}>1Ig0 zuF_h0NsT2mq*EvJ_o1l2x@mChg+l}cl(v-6Ly%685-C=m5ZbP3PehzwWVlF2r{m*w zelJKA#LXl;@gc)v^tWgmJ>DgzgCS5YJpIIeD}Z+6v^C?me>s}+P)pQ+acN+@IY;oE zbl_+4;PLfn1;XBCIVg4-j0Amv=v`Pcu};U1>3W7jIa1)Vgo+u!72|$Jig%5K2vnni-%^VrH6qBxP{-GH!PZER2-Ijfx4WX*iCgP5oLP9 zkj6bZWu4_{%GG;3@w)HVdYoM_$MK+_-c17Q{GE|@39;&Ty{b80`bo1guvcUqmJ| z*0rJFMah5)z5BO*l7)C18%>2^@KU8NLCs#~hsgcK9tLk^x7NxehBBu2N5$1TBlC^cqKBwJl{X1YE7wLSj zqvCSxe(jubJMC6+<^~wy{RL2s=M=SKkPi=ZE59>TVOPb7o6?uF1mZ1hpl=UW5VC5~ zFeg1*NmK{}!V*-X^ph!f`_(%W*Hw26Hqnd6!{q)EDb_8V?X{BcJrMw}5;|?%RzQ1J z;D%TzQY2f&_maUnYAjI@c&CKw3UIKZ4TsHwsXmCw-Cy^`rtVY7Dum?qaspP`2zxcn8WxD1qyDILA{DOZc!Fbuhc*_b(q6kH=p}knG?6`?2VtLwSywQ`;Y28x$A2_2ejW{2yO z$Fkg%X9=#19dD#onTW^!u;Bu!5AXkK_No=nzl7f)o<>SUBRUYgZ{G%#hEP@ zS-75I7K-I(si3ji&94|`kI(0RY*nh-*Z}u62cFXCZ4#?#H(kZL4e80d0)u^3#{1w~ ziTnMhid=yu3Mj_@&BbJr=jth>hHe*6$5ynC!7}t<_^a-sn&As|uuBAMPQEuP(DN*8 zdSm4&vi3vgV*!+Q1eRXCZQo;OwjwO4YbhQikNVcv^k7u?77gbXpFQ;^_87p zyw>Lb7ha3-RfU-X3mdWR<@&<&z%1PVsB$dx%ueh&;~9M;&g(;x(ri!d$&}a*g>mDu zsYw4Sm;Sbup&W2K_kKh`-@+!fjU8q)i+*%5)`oa|OBD(1+i@ePl1V6VrOOO)@ZDj+ zS2eiL5G~N3CRK0-R)R{#61uAnFO4N4j5JY|kccvHy3a~fV(GtdxEbFh%6p($CXpgH z9}QmwdF0h*8hv16eCc7Ya&ro49CDDy@&xPv+sET{Mt)NWqT<7rqe%zP(>k%+767O7 zx&h@YLniGehk@sRK@q}Twx-*@K=7uW;0fhOhHnkfUsikGo*zRQ?1iQ+;OlXtVG3pe zU18gg%M%MNkXE2Qnpo5`L_InswfDX09!#d6FLgzL{t^&|ou3LO@AQhn$03=?o$Uo`&1+Jw_ZR01T??2O{_+E42dr*ek zP5U(Apl`VzC1R_r6&D>ldCy3uZ+G0m0$w8tLhIVNeOj4xpSKe)8hZS;$(PG=K#SY6 z!W>RSaXkZJ+LC}1NwJ23{1i^;cfm=7Q<)rS#>F8B9SQn1uLC4FK1WE4_)!Z%kpx~l z53p$29_5~&+4qg1%h0$?bGJIMCb!@YpaS$}J*_C%-2}&|%iDQ(13IzaafCtO1q(|@ z`m0hn58`KY3HFgZ`;}!#Fe$$s`@n-<@fNSSf;B#qPX3!Y8xm{dmDOS5br-gXmISG& zphR?FHz0&O5h@&|KxoZ)Br$ygNB9I{eISNpFZ?lh==cNelTDmE0zqOIdobJ8&AI4j zQCL?PB#Ig6Dn6;wX3rVncS6n7y0h+BX7UMy$gmHqRH+%!YFwxNOOwEbtA@GFp%CYh zMshk;&A=GApdizrkdS|4g8?cf@DC=C;jy^wEp!9wu>>U~os{E*MiDkR31LKhd>S+p z#+?H?SO-Fg&&m;w`Bhi+8*i&sXAZpRU`+TC( zKlTkphx{-9MrgIH6BTcn%fi&+@|aBVvQRao#KosrTZQ?~z&@jEMb^KVv8 z-ZE{53g$(p5CwnB+JhP2T3s}&a>bv0?=!)B5&8VDLfTRw=Qx#7F4wPMJGbxUc-|n= zIH~q@f5Pv)AqDG~3sAmaN8^pNVU7kwbN)%jk;^EbKO@ww-V-> z${q272)G=gqmjiCn;Xc+aIO9rwmra@-Z>k{-_Zgu;*~xBpf9b@LWET0^`tBTcNJLF zhGTukMVXX4tmcbPFC%2GPX_D7P9Wab>IH}7l7yYILU3bvH-j+D&+qFeT$)BPplFyB z!!lHvY@}X39R+rEn3AUaNUJY&%HA?qV}d8ds|8#apH5A{F`2fsu5V+p-qj;65lK(G zaZlYl4Ie2C9u*Fix)84YlzJGXfu-|PLu4v+AjY>k29c7q!iv@L<+YIF&VbwV@e`u* zkmU8l4|s}yGA9^FAwC5o&N_l`Vz>-`p?pM)b;hb71Fkrlx$JMJIPU%!w1;R|bObzo zDE%sekH}}BaN^Q%Oq}(Vk0ETd>4>t+FsjuEr;^m!cU-f3(n=2hkfC6i%}bwTazWgE zkXdSjO1E&2cKGrZDWefh!8fa`{~#pTt}a#1;O`N zBVW>&YwJ7WH`-7m5dauXPTCSY;I&WRtV?t?l`FVm{87*LM21Me=)OAA2b4ysVf*2P z31Oj9t|tS*>WRwnyw&VmT4DED^-Y8r$uEd6$9^OA4aoftdjkl|oE5L2RnA*P-1dx2~Iue@l;X!sH)z(7|ygH8u9<@gYWWmY={}@eSf%{S4H!M8V|*Q5UbN)x6rnN@M|%%6mz9Ocbpk-{;n^S#`+q%jRbUd1Km$WQIU z>KbFS6~v&!ZeJ)fs@I2D6#+WA*h%O?l4@dkoGhzg6k`4h6ow%2)aMOn=!P5S(JC+= zc|kwt0I^l{`W2@dtHsi+=@hZ4Z}Xj=;P>##xH9J=`G@pIrK_l93QFR)4B+MwY7ql} zc5{Y@X$Cez-c+CvMnn~Q3yHb#bb^nJR`W4hR#p`aTq%{wej2@t z+WyGPFgbY+h=&pxP<$E*p=grPxd(hfnl2n)N2~0vHO=)^gC=zlsbFv@yJe!SWq>C} z4~)zQ6;hbcMX~VC6Pa8kBibrbo{uFFxn5`&v^>Jl&c2!r_?~u&3tkcZ1X%A^9q^mp z8O7!&{6^$-txcd*=~;>@4So;ZI?~%LxDsA*u&&MZ*%hf^lsK+r{;Qa0D^Az-Q=lht zQk>ZiiwL4#lf(d<>3h>7QGb0|lo+YIV*h61TQ}3p2%-Ig+Okla{Uy&zODQLZ8TclQ zCS2Q!(uM9MbXaw7#C`M8`=!}Gq&9=Y`?j=$TFiQn&nd%V)|#|e5}^bFD^2J^jPPkK za<0DDS7NC^3JsPKIIN=fu4cRLugWR=p#(6tG%~UXbjKb zAcp(8#2#Ls+X%j2@^MnOdhW7}f(JVYmnHjcsrSm+p)OAmLV4=6JGD5}rghE~6Az}d z)F0{xsM%$>9E9fpj_22D^j*ZoG(|rKs)BR*P24L6YpbB}K(L{}TCr9R1RxIy^7%Y% zJK{0X`d=($Q5f*o>OU-G;*^fd8{^dSjN-(Wk3st`W6={9mYZFO<-|ZeY7d87544Lk z6A1WRU3Dm9AFj4qog*)kJGcDjnecW&N~E4VWlIRL+ZKPY5QjFh-aygqF5{)b*`b)k zf@)+X*CseSGq{aaarVyRS(g;JjeyxSmx~Ttj1FEi3``*h(~fkK1?#lUtVp>ooD@~| z6KrC*U9bVY&u9;hZ9z79waY>twslR=Bh#o!4PQ~8Eow35EvokIIlo?iA>?d_;8(}? zg-+1851@=m;)2cx&{w@&bC4M|vt{o8zO(ni=K5>KC zUW=22lgG5d-N0V+QtCpq@&+doK|yMnf%KeAVAGyuOlfVABmS3DkU3;f+oR5F->LT` zkMo#KeQ0Cb3R$&#J*FjEcRhnoVvap``U9^>mTo^FhL@V0ZP?;WeD?qii|WLcERJ2q zSS-$j41ADHF_L@VNE@~A+?9-SeUfA=NnyYZu0^-n2=mP7mxGmeE z{tnrD7X_VKhNz3-LyeQ?ix2fYZQ-6Y#vARoQjMTrGezbCia^D(0^W zLbz8*uGw!rs|A8-GL=JUrmEeLY>)Bxg+Y^)q7S%y=?;Tljz*sH=V*#V(?T(@D_Z9; zZlvUU5+z{%DU)qB`jt~aGvXK8*=YJN@TZ?&YlIOQVNtWZTPKCR;ggvFgH^-Uu>Cd+^udP!Hk4e0|FPMc{2#uoeFEZQbNSr({80$Em(AqM zkoWRe6Xd%-q~{x1Veh;3^m*b{yuYrQ*@@mMn)tgEUjxtb0&mT~4H~}=Dk^L_1%gLC zX5E>Lm7oT>01p&-?5r~5hbL~)Jkqf42=s9O6|gmKSW1C;r^v19`Q)KI7C243;rvNt<3-zQPc9a@>`{E1HyOgv`kZOB(%$}VHI~dp zztg<$dbY~lLoXJZPLJbeH-HoQ>z}3gZ^H+N%%ReMk*P|d-T{!Gisb3S5uzn5g%o69 zVgf|3f;TXyw0`+9=m*VHtYQc&FEUKkFJ(#E8UR?ZkCg3nr#|A`maFY37y;^+Q{DZY zR2?`(F65#=eX@hY6a=@B;Z`q6CSVretKRZYW%Zwgrag|VF6lH;-)}a`nr58yKlL4< zUQG$|r%_pXameIK(WU%mB3HkHa15og^~$^_oyE?g7ZbjK+%iB57(qBhWdp6iXWCjC z-x)t2S(SiKC`!y|!7n$%u9-mx?}WgsNw3x7-Sh}u>o_V&c7HMSn3X&s}!rxy_rCJLHUHm>|@ zHU6YfzjMzOOGExjJ~v$(TlZ-B_}jcFaIW}^q$oD5BUpou3n7uUvot*nS2RQs2GAxT@eOD;zzAU*_iLV@m3xK(r6JMAJr zED90v5x4Pq4*kAXHXb6Af#>;J3F2LLn!8`+>4l%4i>S4Ox%C zyG5JCf6R*{iuyBw7ffu+QlYlCG(;ZVQuP}Gv{5MZN7Q_v*>wIuc*{0Ra;330k5gIuQh^hCq-`0=^n3d)yD*pO)K~6#r;=uXvA#69&CY=!uks*vEX+V z7B6S#x+a+uOb=~~_8l6*-@Cipi_Sc7D)uMgi86uGmfEnv1I%EN2lnlgfm}fUp+nlE z-2X*~K!jd(|HX|p(n4?;0{x#9d&k|x!5)OYee!n$p+9vJPU77_kkfTS#uY~D9iI?g z4qo~z)xI-LeOrPLB6?&48wD=Gi@uo3e9|ylAX!HugHU1gQ3f6o#5$`DXrY{4@Ekcf z9Mz&y_AohR*Wx=gNJT+j;MV!~+;WExT~rAOLZJZxP*AagXh^`&pd=~*ABtdnzFpZU zJquapHGPwU;>>T-36VD1_GUr3yhMpgB<->#6fQ)5>Ju8*fi<@V9P~S-qBgE?z z35t;7mPF^SD+$KU*;SL%J@E^-U-9lNv|g{mN;MlFc1-1@e#dncN-9&Ei!W! zZAJY4AA!il+$oQ4pA24BN>%Eb{FoDag zifG^^6?kfpSWPpcxBVWur#OB2J95|2vS|b{r{q=@u*u@A>FC**Z}$tL+(92ZaPvIY zB~+OX{2jWx&Ao^2W;n_zfvOE?h_txkP{U$ipo!wv|2J|MD4M%s+kCyk?0v{xKzNeJ zs)m}W^vVR~td1jFX*uceFbv8RZ}=+q6m^EbAQ{D-_lC2~Df=w$^@=-O+lG-K7^7k8 z|C<((OpdN`9}`0%O=&ypMx8icXM8+-_4qmVa(r}EglV3;*pqO*G}L>n*)yf%fWs|i zB~&Z}#CNP|$G|Qm!*4@@$LIovzMe`mI#I^!HHAj$`IngG;{u_RL?LFgrTq%0=OseO zVW1F4gR*kN1?a^tEb;b!S4Fs#UaQX_-}jBz|48G9`*&=8sngBm=YyC3`P2Uit%G5> zBop~u@ynWl2o!yu%O(hw7JSaiRpRk!yBM#ct9d^g`v!{crx7UmV34w|P5PhHfXFqL ziUwxsdOA{_X8eX$LMzp-Ex3}v_fxEP z>O26pnpD=i)ImtTM*s@@<~EIB{H|4VHQ)!y2?O3JOzl|KE@$?WX?qZ5$3;KMb#%H_Uz-kd)#0dhW`*$lwg9dNj^4X!gj)07?#=YJ}0-p0EpLG;_qWjcfw5BBq|bVa4J7z z!v9W5m(v?@4QIOAT>l}fNSCD4oKbT5CndG*oPqIRkIe#7+rGZOJZ}LP6%!T6tt>{n zQGq6hTe~Itu)e~yKi5cGu;j?jfNA65mOR7?jLp_AR{!5FjCbabpH~*^XpRLZ7Us$r zvXnnYzKc%6|3)!XH7o4n2wsg8q3Zv;&-iMR#lASou2A28zFH? zncsQKcSoLhtENh4u1{A-cIF~)7YHLJVg^F!wCH{+d6jG`yMW&Pir|{o=zvb&f!H@6&0xH%Qq-F{MzY$hFTBk_?s?@U zxPBoj<78rO@RXOTK1${1hJUn;SKEXIZ8tW5x;atcPQ0&upG}9v%L) z3^wFvPNcmiD#WUbrsVyfu>;9$cyHZ&;SQ(Ui;TB$oTxdupew$>a9)z?(Ns1n8S2@6 z?fv2kby%qj^@7I${HAlxtsjTqq5WEn>{VO@Zi^IS`5ViSmrMqKdX%+o`W#0&f_@^{ zV{TGkFyY7L-AZ&?47&)tdG5P75v1F9w@?l2%5I-=IIR*k9VVIb6v$x!D-SnyBHjpT z9GUyRwusB^;2!YO`s}N7r1s^TGOdndy|fH`>G6?@JdM{{2~4gF6`f;%d18&{*s{0Z zte~^x>XhPd#oSjfXXP`I0ed&ca-U%5oJNjX4Eho{~ zS|3lTkZQC>CayF&IS^8(Z6iOe_l(7BW9uh=-nz$bc_m`xi{?z0JPxJhmqBiqliXBV zgdlBmB$|>#_qqAP>LQQ@F#kFCG5kRCs%0IX?iMXUSxXLHS&Ma72lo~Z)ZOqTVjOP} zN)tcdI8!MzHX><{Kvr@{9xv|iMBkCG@QEymYW$?o`0l2VEAx)o8ND!(g-It3+x5Ve z!QI~zOgG0s!i+2gYf>w8TFJe-L(}x}iRx?ek?cc(wrv%IVB~5$SJ^@TBVHhZuZ|I#{c+W+Di=Pkcn_X3cxrflx zS#!ylPSgb(Z&X}FP6`rnXcF7=X?iWn(BwD7r4S)97*pHCW3hkdD|12J{8CdL?+Ak( z!pG}D)HOl#0;@loW<_}T)#-odb<_o7Z|#uT+_#f@i723YrZ?iEb>QFQGVpq$f`tz~Ik)i6&J|%i^{|%>pB+ovsA8cuuwy^%P z3*D%oAi#Fm)iLM!>f~<9H9Hi{D{3zhe+G?~kAAFdEpzOYuVH31X!X+ela z6H#&=!6Wq?Fw`Fqm9+=(Hl;tm9UOK_y_}|Aix!59av*?F)$H1fVEcMw_x{@D@7j6* z%~jkcKDCwG^ckbkP6fX7<6+l4 z?OfG(sGS{Vp9n5iF&>YaNV$w_d25iPP0L9N?@2#lY>3)KhFQ}v_YH0KbqlXHIUbVRfmOM;CTA1|Rd#VTjsDkmvFp$&ZkDaJk@oe@HfBe;X&igxroa)atd7 z>p;wAeO$|I0WAqGqn|HA6F(kA5#zaiUt)l6ejRDY_faEZ%7obzLYL{}j%QQ_W4)cV zi+UY)rx{iJLlUz6HojX6JDFDs_)t?-64D#tX6iA_XM1&0s-&Yy3dwj%ECjh{MHElJ z**oU-PKz)AJtZ~jS|ug?kgpRd!f1wxdYK+ye^btQsMm7n=ZkZti7Q9K`!V>VBMXQ;VdlF$vi`mZKjl*E)}YCIb?I zarn|n+CB>mw7#W3oGqbi|G%6qHknx~UGdC%nHy0zx453gizb&0?d~t?^hsmaJJi)?^r+1>MGe1PX>Kd%4#9{ae=1-4UDqH|+d(?4irfjb2TAS*RUUFHoR;Vz5ID zLdh?A$r)>r3j?uNUtyPf*N+Icq5NPbX+v;UG9avGqlqIQ>fc*Qs5+t4j@0z&fdPmmoF|#1nxAsb>5c36pW>y5~}-j;SQ2~Yngj0 zf`~0I<8b^b`yz`QAm$UfjflSEb#CK5s-n^aGVlK66l#%;hY-RCLL z0Xj#`+X2E=>(w!D89!=z;@@TPJ;v>hf7NrxLlpzjo&}@e8wzLiLixR-;1Evs*4L8h zi`b#;06<%UeDPQ)+F~lpchyB3LQ*Zf)zH*8eOFk*wN45Z%y&Nj@Wp_B@x`b^!bJ{u zvQ$IRD2sh?LvN-?qbGy1UmfD}4tRrN<(6@3<#~_b^`h0`$yuhhw(U# zT2mA6v{OSSWyQ(5n3)iPs4^wK@Cra{>C-}8#feJoTD7;{=o09xo%gh}nb522o6)uO zD@^yDI}nqYNER`LJ~Fwv#(LfI-R(!tEG0X2f82(pUPlAk`~3WDQ1=Qx=XZ1p#Kg3Y zVTYn9qmFs`tSD-kVwBf%gIPCxq|PK5>XaXlEiJrSZd&`r_lxilm=Xn3uK14o##hR_5C)qJ(7zR$3_@w!(&K!+1y|00j6 zu^`u{Ki^)+#F}VsM`Q=|sPaScN$kftwO#s)3SvcUyAhPOzer0utIM;em%W@!`I$7k z176igcESRa<273)@060S$~0AVEmxRRbFR^qpuGk551qX@T*~ET@=f`^NPg5DiMCzo zZF|q06l==N!NJi_uRsDR15<=Ro;5AKW)<$d%FEdyukf}0wTy2!H)q9E+Hqox<}50M ztPLwIZ;1ubhZmzA<6&EK-FXS$_?~6z-m2Et)((p!^vEhv!0+;VdzT{j&j&9~spGzB zBVrxAQzd^=Vo|uW6HS`!u|dc*FmxjbIUy3GZ&Y3;VoldCXXR2kF&U5MP;m$_1$_!< z*S&NtJD|yH7`$_eIq|()y@lh^S?P*=DTB`_v4Bq)>|hwmF%{8=6Ypjj!fI$!zfKkM zx#NBU@4)Aw9N}fPjT|IdrmtI-X&UFjEWvb$Ifg zOQ{@HWf&6mtZ1Yz=-XCpEle<=@K*W*6AIQ?La**MpkuD)A{E1r_Zqd5IlmqyDwxMq zbV+)nlf>Dypssu1{esf$5eHX(gL z{fQr#)Fk3ap&k`5+8Gp6`o7GQVVaq0N^NeNzOQ#j8jz)5{}U?_!yL1d7Co)uj*6?>fGvYdfZ<=oKyb5!Dk>9pAmCxo#Ta`Kf& zD+9Z_jLR1FxSwW;C}%hqcFMtVN2U505ytyE=LfiE9r5w846zDnybdr_3R9{z<|dwT zphFj67eK|5DB|=MJI*Z#c4|#L<+$lyiOYtV(MKkXdtq)RB5-BBtNqCDDSDPwE${?V zj1^pA>-{S|7xjah!UA&x@1re02!cHH=1s(DSJL^&Qp0X!6tXHD#lZdC<9Pj3w( zO2ip&`@T(keUF?X1ozX*mI*+Wrl9`0I!6yVcGgjQlMhX9XBXtr!YKjG?+B_#@nB1< zbXDyf*`y0o$BF0`wZRtVKqLK3At|n#%H3A!>LStks_KET%t3FH0z;?_q_$7?fCmgs z*OR{Q{4Xeb3^96?AffhNfRNj7d{Ab4frh0B+fRkJSK%7G>N_Cs3TbtXlvyJeYQ(u& zmYGfv~148KOMR!ki{I9}z`w^4{X%k;i8WxY`mI%2eEiFn$`hLHp*2cJNx zXT1sKm9D1hJc^#4()sEJl5&pxhmiM$FXq%pt|M2KWh$$9WH>J$@q@e6BnmnN@Q4p5 zdM-ypuEkVHKh&9ATU9}XnOB>WE*plEzu+CW6<&)k(aU}9s!iA=lvYlOAfHfH5xTuD zi?Q5KUAMqGOg3B{#`AU%w(y~!06!DbbYXX1CGey)R(vB{H*TQtAdVgRQ#8P}c_l5B zQ4Cs2DL|Yw$J41}7~2Kw9YAU!=4x`~O1dL*z8_CVdyVERH2YZc;pIRh3A;HA8CI#; z-8*k#1;d`JX&oLe;Gq`KJO6|L)~isman_D!Qyktr7=X%2g=H+v>Z*RQv-jG8R%)~? z)3gF+@#i5pum)*IC=&9bj-^t4OC$0uagO*XIL%(oh@6#8;%!d1p*97&&!uPRYn|qa zxwF2y4>rR1-exQ$883VUtb0>(ya7^)^ItT+986Y{Jv5ohr{44T#d7mJt5GN!V#t8^ z98c#k&3S`Gp{vFp=W=YLY`q71Jha*9fGDRdhvXWO-Z;A)4CmDPkU6_d+srDMM6?;Ud0qbSE7J-SWp`lIk++kQ%eG*}-8w|h*3+{{n6$<;OgbxOf09dl8(r8fO;^1kA7a&im2oh{m~7Qh|bDw0E|}|G0W&=-H*$oQ_DV&6~o+46RS1#RQi#uNpdBa7q%r zm`PejY`5Lg&TMEkx0_;*0axV^s^Ic9NiA*V+}@AXQoNS!ho36x ztNhC6|83?N$g~K*l6l(tY=vFfvp5dJp7n&{!{oMl78vVWbvq>?nl=8%-FMSKXo%;W z5KIH3C69+@T%WNLlD@+%7KtZkv1rx!pc~QLw9;J<`lNWe_RVSGQLw1*eF&*y+K>MM zZ<=2e^(`c1y3I!vH#t;(tCY8zn2_#{uR$vr_bu+h0x1rPcn)&GJgO3`?xFVT6^vbz z2tYACVnKTZqlbO*@&s`qi`@39N^o=Ko&uKt?P}BKfX4=v5Vwlt8UJha50l%lZ^<1# zRrgjzPZU3~oj*|}#syfaUab^A%l9BNj{ez!5gNpzcusAC7;P365ABVJDL{Jr#Oik4 z9;8~YP@N0XqNlO@=&Kp4u%U%ZDz5H?NPA&l2LHoiDzB>m1ABnf47ZX07K1%%MJnoB z_X2*Qg_@l|Kpn$VWZ|P9LH?}*%X(0Dmzx{}~3@2S(%yfi^2RvOe^ z%jIXu4}5qhu&f`j*0uyNbJo3qV%L1EQj(VAAKb8aH3OX8Ag7jbHSgkc5RY42k3-)c znz)1oFuF%pnEpB5M$+Aki5A*I&GwbF{pqUMSK=X9Oy@dq*n^UTobSKYX|&;t%?0ml zwIiogYSihFBkjynjHQS9QMaxL1DJ3+Wq4>WfY*A{p^{fh5mXs6GNkcKy^c2(;_qB< zK2!ThizyMf%(u#3mv-qaZUwi0;SeiUdU_7lvahXpnt>ZK_=NtY#x6{Uk4-+JsQe>e zSgOkLFvC5#p64Y$0VcPn(bMWsjio{jj&i6!*g~q}jywyRRoUfCLuM^k4g7mo>%K?N zlr+U9-FTNDO$j-u@W{%!@FJavM5H~vpIXZ%CVKE&`iIz%+8Rrf!4`!TEpCzK^}2K8 zQt$~=j2{}QP{fZe++&9GRXpeX_;q9zGH;8DD*MZ!loP!0I{m#fkd*wNxsVL(f@FUl zeHy%fCVhRMw#ZY+@rj#$(Tu=LaP7q>TT63z7NajaL>R;`1ef~gz^KS6HbsDIGvXV8 zy8I9Dd2f}oeGnWDbrif%;J*CTa>txN)%?b47pNe~SX%zeL80u84%~UzA*JIye8kQb zeJp=)sYtkizG&72LPgP9*8&^$Pr}>a`C3f?ykmx;{5d=5eD+TBduH2>Z}H0=E^l+T zzMvuNa#NEts&H|N#y6H!&FFk?6wI)DR1c73J1sv`TACJqH``KA7+Y3RDZ#LDcFeNB z37W?$O6s0-n=b&#(5!}cNSjp+B4a_NRU~`Q)Y?Q@@`*uISJz@KEHESthoI~qP{6h4 zv}RfoCMXqg;D|18&InKoi#gNQiy(${%%@`2yPc30dWD0-3AbmA>$e~6U?Zd`GL6dE z=UHe$y!WN#m_s!R4jWA97G<)oPAzEOr~FCYIc>%t7yCir+w(|`=^Cx_w%bBV;pcMX zPUq6+k1SlgUl)j8I2?TRFg)MbHIy|Q#FKg$l7BXckL@J@|CuaxxCg5(h4bO7-JS1f zWIR>DEKwgv6nWjha>fk$^g8WHR#kG!9T^^OF($pX5v)g=wND~Et@rNZ9h_h;&%8mM z!?6ahApBOramI*u6~U159^7_{O{yr(Od+Tu+44ruu{43gt@zB2D$xbrAgE3nW&q&h z0|qpFfN{+@#X+Zh62uTm&u zk}kBVb6KOaik2I9&u%to^YDkt(@A4b#+{khF15l;3C9!gSkLV zda-uj-a08Yfyo{XGb_14U#hF7`g+Q9(|=R)|vZ)al8oJ&+$B1!$c?~ zb`e5GL{L(JNeqxV@6qe8aGHQ&T00~>#|umHD4vwigIOO&$RA=n`Z-yahMDEaX?1yN zPI1f`b3W8##G700@cL)vj;2kFJQqvOPQO#16`PSvR-gB1mfKH1?I(W@ihz-W_J*{E zwkfyE=W?Q7=cl)fT?hP>u(1ofx(~}8UUp61O8@KAW4ryRZe*erqIYf60A8J^6k2%1 zfl+ufmb~f(QVD}ad&R^>$q7jj zxu`jDhQ1aYn?AByq`Zr#Jo39{Y7J#3Y**u_T(ldJY;S2y*!(k-rB{a#A5s%yzV(7e zKw@jMlY4USiCJogi_aRavLVC$mrb~1#RYbf#5NmB49t?fu?`8~-b^a!S_lq6$4bm} zHE8R2B6}3jH$~)VViy_1*ZPu13i+6OtR5StvM$We#&n*A(-SufgJL}_T^+w;iShFb zyb1UlI59&(d_?QMwuVMbB<$cGJ@CXtN@b2F6C!kkm!*-I*H$;xqd9Z5GXYPTM=?%p zmS$OA2`w?76~yRIf=Q&yV8SBUmCY1J&I^N#JWy=<^v(la+%!)D#dFJ#4}5mV{c%Z` zcn2gFCKqOXUxQS{1{cmu)wgwM~qyyS8f4gvh{-5NJ+7@EDS^G+?lqtluG%0Va`um zow7HzL|=}2)LHyyLi75FAcIN#;AQFXhslrDMIun>fQYPULvL?vhI15xN|7}$EME@= zVPzO;>vTA5;RQf7rQ^sQNt zcNFflGVs<|#6(le_fxdiGLZ@WJZ7=sg3lFPssb=A@f7j~2v0m2-%t}rb~{IX-$cxu z?)nNh|E)xXFeygALNY<~09c~|+uidEh*g0>2PiWGK z|LmOoTfA3Bs5P?tKd8wPFyPQofZ7^S(^6%op*!yiTiy!sQ-Sel^O8jIA&(M=f)N{o zX4yYjjh?sO&pz&PsqMv4`h;7Cm001}S@tJ$P%q93CNuG{W8@5E4giOfPO3l(F4du6 zF)UJ4AF(- zV)$WvKuDhi=v2r{OImZq9%aZ81>MmLQ>*5m5=1<}s8G8Oe^9s-dACapzkeTQQ>(?J z77xZS=SGI7taF|(SH{q$-c+*UA!K>YAfjxRgyR@0$pOV`@dAKq} z9ZIgZ&)wcK-9^DSSAq{U3)MypTz934gE=t9Qq8yOEihfn)?D9$_Q9*#>xjb%QB6D+ zk8gNsS9`@MZh>vQ6MKahqJ!sd7LqpB@4gnlPd|UGypN9~j4trAE4#$DD7(~IEs&Jh zII*#=;qqn#69n~`LvrR0bp^P_`WC%({>&VfJi=L4jCNuDok)gAbe9jKPg*Sif8uM{ zAl>tlV9<{$lUGNIB@_Zqg?&)gx88;Y3h#efy}7!1i?Q**MfJ%arntU3 zeeckgdq{T|O>Wztj9HHCECj1>>pt`4oawi?)`=l)#csaFE7YXAqa`GjEG71)(M0RM zS$~Ww%{t>>vAzxO&IU}S9x;&qZ26jDLAFdvK{Oc5$!P{W2 zUaR!Rt>LVQO62FaeQZYwYHw^G2F4qv7});J3Efda(9wMSi($wBmpc@=w!j$k*}YO+ zx8 zY#{sfewS(1LLNsWQAUA)Q@Wq2(IIp^309F)O~}aMsidqm2aR9YYQ5Rc($ffp)%Xy#l9Je{vuu32f!HfPT1DJ@n8eJVn zvB#;FJwkc=f^Je{EX)?gM73>^LK)z&H-NcRBgZ(D$-RR!&u$uCf&@+kgp&jU5_R(i zyVO^wruM@@jQS9K&j{m^b}`afK;)k~+l4QPcM77q>yUrW&+E3agLwP&+%XH~I-i!? zp1EM#g|m1%W=Vsn*mrigVH~;up8-KjD|qp}z!t|_E6Gsot6egvg6^}67)gT$=r^-? zd|Apdxj*r;>OO96?1g**GJj}*j4X9Wbe)pWHszARgP8GzUv9ag6hH2D5<>BeGC22X z2b1K)H0nr-+b@{o7R%ok2=vr31lL;)WKCp13 zSF#OGAxRnyobLy17$24N(b`{!n$}&9?nvuegyb-|86z^Y^0S;e>jE8UWx;*m>*a*y zuV%Xg4O<`zPKa|NH(0`iST4D79M@qLHZ1o#3`RjRA@lQca`?K=#Z{ophe^O6qO4M7 z#{!d*fj9UCdp$V6guPw<=rhsqq&N(0=d87$m{>}}OOFXLYhjyIDEPNnfnkSlLTvis z<6nCrM){v(f_WcH+nE~aYG`YS1g{Z$bBK)29?hMO?`1x9X}#oBC)G-}v$mVLpVj&p z!|sYmo4IS%)C`;6s(7G+LJ!3Ro)y7h52P!BKo6#A=4zuQ=fFG7K*#(hwZ;+z7{B3` zh&(fnnjeBvwgOC9fkS_xkU-dRX7J>nPQ$UI_JUajFuHyoqeYwe{c;ZRXmx%26NQjHgymif_gKkzH_{t-hu)#^!XgXrhVwL< zlFX9#=3x>2v+$$jsj!ryka|tl$6emb@DnVS?6%5~uL>Breu=kF(SRF+pmzt3A^}B_+ zZb~$d;6~n;w?bUJjZf^wPgEWEnH4S|5k)}C^VENK$p?PaE5UEzNx_*_@cs?gl^9~X z+YE?LGpr8jTljq7W-PP_Rb!&DY=a4k?MH6AV%@{+D;_PQLbx>k$~=_`2z3sP4PICt8VGqFg&ow_1>RY7oN44N1D{V_ z#>U}F2)cSNFwu+at_S>E#MCF*&KgE1P<97c3{W66P@3MuhJ`>(xhwt$PMNxCR@6N? z#FC&NDA=h27{R2x@5C^r8zMU)q~^Vh9>3F(xdRF`zcp4f%VR?|T=4AKu)_jc9pBG1 zqlJo3FWb}_!>s7Ngksx+&durT)eggPMSzZf5tZHfhEWk6OJf3wNd%07VAUEh9&l4k zSoTbbM1j}=D_k_RQ+)R~2c>1?uXxJZXX9RkrYLIPA8WA5Aj*F&4l^5M7MfT3Ddi(y zF%gvJ7t78}Rdu<|wO0hgvft6zi0FGU<6t6iZMg>YrI}FIfP3P+^dAU=!5XV5nI|8w z>kdZb^=$y{dW@p@3zc!!66OZv-!%tzThhinjk7-`K$O>TT#IT;Gk>2?2P(c#L)V9> zG^ERM)7-Wr-L~k9!w5I>Sx1Ca?#y?`G+?uD&|LY7xT8{8**6)4f8+0FVX=}we^rtWv2)j-J5l6?agHx+o*!LWtY*mr`$x~cD zKAX|vvs`d)wob6$SeJy^IMgGvL^FfrdoMHtYYed^di)a+|1aQ%zMf=Ax|ZMUC3+EC zg;AR`%-RhSBGh!)ZvtzxztNMtSa>%<(oJQ!cLPyDmZDK+> z%Aq6kUBH~|H_V>le~bYA9Agh}-X}12Xb8)?$xHY@#r7Y3Omns!r^dc)Y#0KNC|%76 z!~5WA0f2CX^v4C~`t{}aSGoFXxSDY&rI^lRG365hS`jW!E1#n~gs{~s zVu*+6;s2!`;Y{R=dA6cw3qDwR`BK8?WX6{(8-Efht-vEWrSZNK$%iv1REHJY2T45r zevd8n`(k4A{2taTFaDuiCd(9fbkf9v{Db(K6UkAfmBUATvp*%mZpd>oN5yEqht_Sq zs{gIiD~$d^uYfRc}bN!LP!wX2Xy=>~^0zho;tTg^* zYZ+_RU$p^4Z^nltAg=1bHy9Vn4v$jj61zS8lG1lodZEF$Zf|O-#3LR=<+{&NZ!8{h zmo!H?1%H(>2DKS4y*)4i#$uWrOPt)z%kFaFGWM_Y2-JrpT9(Sucl|mbm-)<9XK=B_ zQg`8U_TL-6VtDa>UsInxk>goK{#xDT+zPtbh1VFHlyP*%N2zFV2K=iLuV?}jL_OI$ zd*-i@jGc3I;%`Xx8l7yvHmE%T6t~ZW*Ai-`eQG+b)^-1a0&+$=u;Veq=&jVhBBnUt zzwzcT)Yg$DC>`BPM6zh6yGi@F1(fdW_U{tG(DMoj%vT}v?~z|5x#ojo|CpIyWrS{V z$SicPiTd7#E4I9jxp($bfIuq4_xVS78G7*lS$9^%{z5x)mVYLa*#x-4BS9G(YzHY1 zeq&%9v`bR?FP{@=L^bBZ^6!HGflt`L-;#OBcZVeho?02r(FuVqxI7~Zal*ELpZoAV z_iodnYJCTupGM3=yr3`E>EGb=b?Lq?uw0&>(;?EjpkWlr0QTK~OsDUrkd%TIslen6 zUMrF>h*iit@&D|{$QqIW!>fKP()`IXI?2(f&pz)FW24X}Hn~)OofcyA>B6$Zci>+w zctv=aDIk!d+F@6dpuw;4sibOdH39^#o-Z%P$5(#$5&Xe{&Pkcw5-k+zk`GRPW&nL& z__S%aEdD*xueUlTb&p53H|_~d>MFEO4E&!Te@0EiO6hfQ#Sy6{YZ-| Kh*gOg1^*AH^cq$G literal 0 HcmV?d00001 diff --git a/oh-my-bash.sh b/oh-my-bash.sh new file mode 100644 index 000000000..9e3d77cd1 --- /dev/null +++ b/oh-my-bash.sh @@ -0,0 +1,163 @@ +#!/usr/bin/env bash + +# Bail out early if non-interactive +case $- in + *i*) ;; + *) return;; +esac + +# Check for updates on initial load... +if [ "$DISABLE_AUTO_UPDATE" != "true" ]; then + env OSH=$OSH DISABLE_UPDATE_PROMPT=$DISABLE_UPDATE_PROMPT bash -f $OSH/tools/check_for_upgrade.sh +fi + +# Initializes Oh My Bash + +# add a function path +fpath=($OSH/functions $fpath) + +# Set OSH_CUSTOM to the path where your custom config files +# and plugins exists, or else we will use the default custom/ +if [[ -z "$OSH_CUSTOM" ]]; then + OSH_CUSTOM="$OSH/custom" +fi + +# Set OSH_CACHE_DIR to the path where cache files should be created +# or else we will use the default cache/ +if [[ -z "$OSH_CACHE_DIR" ]]; then + OSH_CACHE_DIR="$OSH/cache" +fi + +# Load all of the config files in ~/.oh-my-bash/lib that end in .sh +# TIP: Add files you don't want in git to .gitignore +for config_file in $OSH/lib/*.sh; do + custom_config_file="${OSH_CUSTOM}/lib/${config_file:t}" + [ -f "${custom_config_file}" ] && config_file=${custom_config_file} + source $config_file +done + + +is_plugin() { + local base_dir=$1 + local name=$2 + test -f $base_dir/plugins/$name/$name.plugin.sh \ + || test -f $base_dir/plugins/$name/_$name +} +# Add all defined plugins to fpath. This must be done +# before running compinit. +for plugin in ${plugins[@]}; do + if is_plugin $OSH_CUSTOM $plugin; then + fpath=($OSH_CUSTOM/plugins/$plugin $fpath) + elif is_plugin $OSH $plugin; then + fpath=($OSH/plugins/$plugin $fpath) + fi +done + +is_completion() { + local base_dir=$1 + local name=$2 + test -f $base_dir/completions/$name/$name.completion.sh +} +# Add all defined completions to fpath. This must be done +# before running compinit. +for completion in ${completions[@]}; do + if is_completion $OSH_CUSTOM $completion; then + fpath=($OSH_CUSTOM/completions/$completion $fpath) + elif is_completion $OSH $completion; then + fpath=($OSH/completions/$completion $fpath) + fi +done + +is_alias() { + local base_dir=$1 + local name=$2 + test -f $base_dir/aliases/$name/$name.aliases.sh +} +# Add all defined completions to fpath. This must be done +# before running compinit. +for alias in ${aliases[@]}; do + if is_alias $OSH_CUSTOM $alias; then + fpath=($OSH_CUSTOM/aliases/$alias $fpath) + elif is_alias $OSH $alias; then + fpath=($OSH/aliases/$alias $fpath) + fi +done + +# Figure out the SHORT hostname +if [[ "$OSTYPE" = darwin* ]]; then + # macOS's $HOST changes with dhcp, etc. Use ComputerName if possible. + SHORT_HOST=$(scutil --get ComputerName 2>/dev/null) || SHORT_HOST=${HOST/.*/} +else + SHORT_HOST=${HOST/.*/} +fi + +# Load all of the plugins that were defined in ~/.bashrc +for plugin in ${plugins[@]}; do + if [ -f $OSH_CUSTOM/plugins/$plugin/$plugin.plugin.sh ]; then + source $OSH_CUSTOM/plugins/$plugin/$plugin.plugin.sh + elif [ -f $OSH/plugins/$plugin/$plugin.plugin.sh ]; then + source $OSH/plugins/$plugin/$plugin.plugin.sh + fi +done + +# Load all of the aliases that were defined in ~/.bashrc +for alias in ${aliases[@]}; do + if [ -f $OSH_CUSTOM/aliases/$alias.aliases.sh ]; then + source $OSH_CUSTOM/aliases/$alias.aliases.sh + elif [ -f $OSH/aliases/$alias.aliases.sh ]; then + source $OSH/aliases/$alias.aliases.sh + fi +done + +# Load all of the completions that were defined in ~/.bashrc +for completion in ${completions[@]}; do + if [ -f $OSH_CUSTOM/completions/$completion.completion.sh ]; then + source $OSH_CUSTOM/completions/$completion.completion.sh + elif [ -f $OSH/completions/$completion.completion.sh ]; then + source $OSH/completions/$completion.completion.sh + fi +done + +# Load all of your custom configurations from custom/ +for config_file in $OSH_CUSTOM/*.sh; do + if [ -f $config_file ]; then + source $config_file + fi +done +unset config_file + +# Load colors first so they can be use in base theme +source "${OSH}/themes/colours.theme.sh" +source "${OSH}/themes/base.theme.sh" + +# Load the theme +if [ "$OSH_THEME" = "random" ]; then + themes=($OSH/themes/*/*theme.sh) + N=${#themes[@]} + ((N=(RANDOM%N))) + RANDOM_THEME=${themes[$N]} + source "$RANDOM_THEME" + echo "[oh-my-bash] Random theme '$RANDOM_THEME' loaded..." +else + if [ ! "$OSH_THEME" = "" ]; then + if [ -f "$OSH_CUSTOM/$OSH_THEME/$OSH_THEME.theme.sh" ]; then + source "$OSH_CUSTOM/$OSH_THEME/$OSH_THEME.theme.sh" + elif [ -f "$OSH_CUSTOM/themes/$OSH_THEME/$OSH_THEME.theme.sh" ]; then + source "$OSH_CUSTOM/themes/$OSH_THEME/$OSH_THEME.theme.sh" + else + source "$OSH/themes/$OSH_THEME/$OSH_THEME.theme.sh" + fi + fi +fi + +if [[ $PROMPT ]]; then + export PS1="\["$PROMPT"\]" +fi + +if ! type_exists '__git_ps1' ; then + source "$OSH/tools/git-prompt.sh" +fi + +# Adding Support for other OSes +[ -s /usr/bin/gloobus-preview ] && PREVIEW="gloobus-preview" || +[ -s /Applications/Preview.app ] && PREVIEW="/Applications/Preview.app" || PREVIEW="less" diff --git a/plugins/bashmarks/README.md b/plugins/bashmarks/README.md index 83dd996ba..67ee1d451 100644 --- a/plugins/bashmarks/README.md +++ b/plugins/bashmarks/README.md @@ -14,6 +14,10 @@ You can navigate to the location of a bookmark using the *bm -g* command: `$ bm -g mydir` +You can also supply just any bookmark name and the *-g* option will be assumed: + +`$ bm mydir` + Tab completion is available when you need to enter a bookmark name in a command, such as when using *bm -g* Easily list all bookmarks you have setup using the *bm -l* command. @@ -24,7 +28,7 @@ Easily list all bookmarks you have setup using the *bm -l* command. **bm -a bookmarkname** Save the current directory as bookmarkname -**bm -g bookmarkname** Go to the specified bookmark +**bm [-g] bookmarkname** Go to the specified bookmark **bm -p bookmarkname** Print the bookmark diff --git a/plugins/bashmarks/bashmarks.plugin.bash b/plugins/bashmarks/bashmarks.plugin.bash index 520cc2295..e53fc6f9b 100644 --- a/plugins/bashmarks/bashmarks.plugin.bash +++ b/plugins/bashmarks/bashmarks.plugin.bash @@ -67,19 +67,38 @@ function bm { _list_bookmark ;; # help [ bm -h ] + -h) + _echo_usage + ;; *) - echo 'USAGE:' - echo 'bm -a - Saves the current directory as "bookmark_name"' - echo 'bm -g - Goes (cd) to the directory associated with "bookmark_name"' - echo 'bm -p - Prints the directory associated with "bookmark_name"' - echo 'bm -d - Deletes the bookmark' - echo 'bm -l - Lists all available bookmarks' - kill -SIGINT $$ - exit 1 + if [[ $1 == -* ]]; then + # unrecognized option. echo error message and usage [ bm -X ] + echo "Unknown option '$1'" + _echo_usage + kill -SIGINT $$ + exit 1 + elif [[ $1 == "" ]]; then + # no args supplied - echo usage [ bm ] + _echo_usage + else + # non-option supplied as first arg. assume goto [ bm BOOKMARK_NAME ] + _goto_bookmark "$1" + fi ;; esac } +# print usage information +function _echo_usage { + echo 'USAGE:' + echo "bm -h - Prints this usage info" + echo 'bm -a - Saves the current directory as "bookmark_name"' + echo 'bm [-g] - Goes (cd) to the directory associated with "bookmark_name"' + echo 'bm -p - Prints the directory associated with "bookmark_name"' + echo 'bm -d - Deletes the bookmark' + echo 'bm -l - Lists all available bookmarks' +} + # save current directory to bookmarks function _save_bookmark { _bookmark_name_valid "$@" diff --git a/themes/agnoster/agnoster-bash.theme.sh b/themes/agnoster/agnoster-bash.theme.sh deleted file mode 120000 index acfd55f51..000000000 --- a/themes/agnoster/agnoster-bash.theme.sh +++ /dev/null @@ -1 +0,0 @@ -agnoster.bash \ No newline at end of file diff --git a/themes/agnoster/agnoster.theme.sh b/themes/agnoster/agnoster.theme.sh new file mode 100755 index 000000000..dae991cf0 --- /dev/null +++ b/themes/agnoster/agnoster.theme.sh @@ -0,0 +1,423 @@ +#!/usr/bin/env bash +# vim: ft=bash ts=2 sw=2 sts=2 +# +# agnoster's Theme - https://gist.github.com/3712874 +# A Powerline-inspired theme for BASH +# +# (Converted from ZSH theme by Kenny Root) +# https://gist.github.com/kruton/8345450 +# +# Updated & fixed by Erik Selberg erik@selberg.org 1/14/17 +# Tested on MacOSX, Ubuntu, Amazon Linux +# Bash v3 and v4 +# +# # README +# +# In order for this theme to render correctly, you will need a +# [Powerline-patched font](https://gist.github.com/1595572). +# I recommend: https://github.com/powerline/fonts.git +# > git clone https://github.com/powerline/fonts.git fonts +# > cd fonts +# > install.sh + +# In addition, I recommend the +# [Solarized theme](https://github.com/altercation/solarized/) and, if you're +# using it on Mac OS X, [iTerm 2](http://www.iterm2.com/) over Terminal.app - +# it has significantly better color fidelity. + +# Install: + +# I recommend the following: +# $ cd home +# $ mkdir -p .bash/themes/agnoster-bash +# $ git clone https://github.com/speedenator/agnoster-bash.git .bash/themes/agnoster-bash + +# then add the following to your .bashrc: + +# export THEME=$HOME/.bash/themes/agnoster-bash/agnoster.bash +# if [[ -f $THEME ]]; then +# export DEFAULT_USER=`whoami` +# source $THEME +# fi + +# +# # Goals +# +# The aim of this theme is to only show you *relevant* information. Like most +# prompts, it will only show git information when in a git working directory. +# However, it goes a step further: everything from the current user and +# hostname to whether the last call exited with an error to whether background +# jobs are running in this shell will all be displayed automatically when +# appropriate. + +# Generally speaking, this script has limited support for right +# prompts (ala powerlevel9k on zsh), but it's pretty problematic in Bash. +# The general pattern is to write out the right prompt, hit \r, then +# write the left. This is problematic for the following reasons: +# - Doesn't properly resize dynamically when you resize the terminal +# - Changes to the prompt (like clearing and re-typing, super common) deletes the prompt +# - Getting the right alignment via columns / tput cols is pretty problematic (and is a bug in this version) +# - Bash prompt escapes (like \h or \w) don't get interpolated +# +# all in all, if you really, really want right-side prompts without a +# ton of work, recommend going to zsh for now. If you know how to fix this, +# would appreciate it! + +# note: requires bash v4+... Mac users - you often have bash3. +# 'brew install bash' will set you free +PROMPT_DIRTRIM=2 # bash4 and above + +###################################################################### +DEBUG=0 +debug() { + if [[ ${DEBUG} -ne 0 ]]; then + >&2 echo -e $* + fi +} + +###################################################################### +### Segment drawing +# A few utility functions to make it easy and re-usable to draw segmented prompts + +CURRENT_BG='NONE' +CURRENT_RBG='NONE' +SEGMENT_SEPARATOR='' +RIGHT_SEPARATOR='' +LEFT_SUBSEG='' +RIGHT_SUBSEG='' + +text_effect() { + case "$1" in + reset) echo 0;; + bold) echo 1;; + underline) echo 4;; + esac +} + +# to add colors, see +# http://bitmote.com/index.php?post/2012/11/19/Using-ANSI-Color-Codes-to-Colorize-Your-Bash-Prompt-on-Linux +# under the "256 (8-bit) Colors" section, and follow the example for orange below +fg_color() { + case "$1" in + black) echo 30;; + red) echo 31;; + green) echo 32;; + yellow) echo 33;; + blue) echo 34;; + magenta) echo 35;; + cyan) echo 36;; + white) echo 37;; + orange) echo 38\;5\;166;; + esac +} + +bg_color() { + case "$1" in + black) echo 40;; + red) echo 41;; + green) echo 42;; + yellow) echo 43;; + blue) echo 44;; + magenta) echo 45;; + cyan) echo 46;; + white) echo 47;; + orange) echo 48\;5\;166;; + esac; +} + +# TIL: declare is global not local, so best use a different name +# for codes (mycodes) as otherwise it'll clobber the original. +# this changes from BASH v3 to BASH v4. +ansi() { + local seq + declare -a mycodes=("${!1}") + + debug "ansi: ${!1} all: $* aka ${mycodes[@]}" + + seq="" + for ((i = 0; i < ${#mycodes[@]}; i++)); do + if [[ -n $seq ]]; then + seq="${seq};" + fi + seq="${seq}${mycodes[$i]}" + done + debug "ansi debug:" '\\[\\033['${seq}'m\\]' + echo -ne '\[\033['${seq}'m\]' + # PR="$PR\[\033[${seq}m\]" +} + +ansi_single() { + echo -ne '\[\033['$1'm\]' +} + +# Begin a segment +# Takes two arguments, background and foreground. Both can be omitted, +# rendering default background/foreground. +prompt_segment() { + local bg fg + declare -a codes + + debug "Prompting $1 $2 $3" + + # if commented out from kruton's original... I'm not clear + # if it did anything, but it messed up things like + # prompt_status - Erik 1/14/17 + + # if [[ -z $1 || ( -z $2 && $2 != default ) ]]; then + codes=("${codes[@]}" $(text_effect reset)) + # fi + if [[ -n $1 ]]; then + bg=$(bg_color $1) + codes=("${codes[@]}" $bg) + debug "Added $bg as background to codes" + fi + if [[ -n $2 ]]; then + fg=$(fg_color $2) + codes=("${codes[@]}" $fg) + debug "Added $fg as foreground to codes" + fi + + debug "Codes: " + # declare -p codes + + if [[ $CURRENT_BG != NONE && $1 != $CURRENT_BG ]]; then + declare -a intermediate=($(fg_color $CURRENT_BG) $(bg_color $1)) + debug "pre prompt " $(ansi intermediate[@]) + PR="$PR $(ansi intermediate[@])$SEGMENT_SEPARATOR" + debug "post prompt " $(ansi codes[@]) + PR="$PR$(ansi codes[@]) " + else + debug "no current BG, codes is $codes[@]" + PR="$PR$(ansi codes[@]) " + fi + CURRENT_BG=$1 + [[ -n $3 ]] && PR="$PR$3" +} + +# End the prompt, closing any open segments +prompt_end() { + if [[ -n $CURRENT_BG ]]; then + declare -a codes=($(text_effect reset) $(fg_color $CURRENT_BG)) + PR="$PR $(ansi codes[@])$SEGMENT_SEPARATOR" + fi + declare -a reset=($(text_effect reset)) + PR="$PR $(ansi reset[@])" + CURRENT_BG='' +} + +### virtualenv prompt +prompt_virtualenv() { + if [[ -n $VIRTUAL_ENV ]]; then + color=cyan + prompt_segment $color $PRIMARY_FG + prompt_segment $color white "$(basename $VIRTUAL_ENV)" + fi +} + + +### Prompt components +# Each component will draw itself, and hide itself if no information needs to be shown + +# Context: user@hostname (who am I and where am I) +prompt_context() { + local user=`whoami` + + if [[ $user != $DEFAULT_USER || -n $SSH_CLIENT ]]; then + prompt_segment black default "$user@\h" + fi +} + +# prints history followed by HH:MM, useful for remembering what +# we did previously +prompt_histdt() { + prompt_segment black default "\! [\A]" +} + + +git_status_dirty() { + dirty=$(git status -s 2> /dev/null | tail -n 1) + [[ -n $dirty ]] && echo " ●" +} + +# Git: branch/detached head, dirty status +prompt_git() { + local ref dirty + if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then + ZSH_THEME_GIT_PROMPT_DIRTY='±' + dirty=$(git_status_dirty) + ref=$(git symbolic-ref HEAD 2> /dev/null) || ref="➦ $(git show-ref --head -s --abbrev |head -n1 2> /dev/null)" + if [[ -n $dirty ]]; then + prompt_segment yellow black + else + prompt_segment green black + fi + PR="$PR${ref/refs\/heads\// }$dirty" + fi +} + +# Dir: current working directory +prompt_dir() { + prompt_segment blue black '\w' +} + +# Status: +# - was there an error +# - am I root +# - are there background jobs? +prompt_status() { + local symbols + symbols=() + [[ $RETVAL -ne 0 ]] && symbols+="$(ansi_single $(fg_color red))✘" + [[ $UID -eq 0 ]] && symbols+="$(ansi_single $(fg_color yellow))⚡" + [[ $(jobs -l | wc -l) -gt 0 ]] && symbols+="$(ansi_single $(fg_color cyan))⚙" + + [[ -n "$symbols" ]] && prompt_segment black default "$symbols" +} + +###################################################################### +# +# experimental right prompt stuff +# requires setting prompt_foo to use PRIGHT vs PR +# doesn't quite work per above + +rightprompt() { + printf "%*s" $COLUMNS "$PRIGHT" +} + +# quick right prompt I grabbed to test things. +__command_rprompt() { + local times= n=$COLUMNS tz + for tz in ZRH:Europe/Zurich PIT:US/Eastern \ + MTV:US/Pacific TOK:Asia/Tokyo; do + [ $n -gt 40 ] || break + times="$times ${tz%%:*}\e[30;1m:\e[0;36;1m" + times="$times$(TZ=${tz#*:} date +%H:%M)\e[0m" + n=$(( $n - 10 )) + done + [ -z "$times" ] || printf "%${n}s$times\\r" '' +} +# PROMPT_COMMAND=__command_rprompt + +# this doens't wrap code in \[ \] +ansi_r() { + local seq + declare -a mycodes2=("${!1}") + + debug "ansi: ${!1} all: $* aka ${mycodes2[@]}" + + seq="" + for ((i = 0; i < ${#mycodes2[@]}; i++)); do + if [[ -n $seq ]]; then + seq="${seq};" + fi + seq="${seq}${mycodes2[$i]}" + done + debug "ansi debug:" '\\[\\033['${seq}'m\\]' + echo -ne '\033['${seq}'m' + # PR="$PR\[\033[${seq}m\]" +} + +# Begin a segment on the right +# Takes two arguments, background and foreground. Both can be omitted, +# rendering default background/foreground. +prompt_right_segment() { + local bg fg + declare -a codes + + debug "Prompt right" + debug "Prompting $1 $2 $3" + + # if commented out from kruton's original... I'm not clear + # if it did anything, but it messed up things like + # prompt_status - Erik 1/14/17 + + # if [[ -z $1 || ( -z $2 && $2 != default ) ]]; then + codes=("${codes[@]}" $(text_effect reset)) + # fi + if [[ -n $1 ]]; then + bg=$(bg_color $1) + codes=("${codes[@]}" $bg) + debug "Added $bg as background to codes" + fi + if [[ -n $2 ]]; then + fg=$(fg_color $2) + codes=("${codes[@]}" $fg) + debug "Added $fg as foreground to codes" + fi + + debug "Right Codes: " + # declare -p codes + + # right always has a separator + # if [[ $CURRENT_RBG != NONE && $1 != $CURRENT_RBG ]]; then + # $CURRENT_RBG= + # fi + declare -a intermediate2=($(fg_color $1) $(bg_color $CURRENT_RBG) ) + # PRIGHT="$PRIGHT---" + debug "pre prompt " $(ansi_r intermediate2[@]) + PRIGHT="$PRIGHT$(ansi_r intermediate2[@])$RIGHT_SEPARATOR" + debug "post prompt " $(ansi_r codes[@]) + PRIGHT="$PRIGHT$(ansi_r codes[@]) " + # else + # debug "no current BG, codes is $codes[@]" + # PRIGHT="$PRIGHT$(ansi codes[@]) " + # fi + CURRENT_RBG=$1 + [[ -n $3 ]] && PRIGHT="$PRIGHT$3" +} + +###################################################################### +## Emacs prompt --- for dir tracking +# stick the following in your .emacs if you use this: + +# (setq dirtrack-list '(".*DIR *\\([^ ]*\\) DIR" 1 nil)) +# (defun dirtrack-filter-out-pwd-prompt (string) +# "dirtrack-mode doesn't remove the PWD match from the prompt. This does." +# ;; TODO: support dirtrack-mode's multiline regexp. +# (if (and (stringp string) (string-match (first dirtrack-list) string)) +# (replace-match "" t t string 0) +# string)) +# (add-hook 'shell-mode-hook +# #'(lambda () +# (dirtrack-mode 1) +# (add-hook 'comint-preoutput-filter-functions +# 'dirtrack-filter-out-pwd-prompt t t))) + +prompt_emacsdir() { + # no color or other setting... this will be deleted per above + PR="DIR \w DIR$PR" +} + +###################################################################### +## Main prompt + +build_prompt() { + [[ ! -z ${AG_EMACS_DIR+x} ]] && prompt_emacsdir + prompt_status + #[[ -z ${AG_NO_HIST+x} ]] && prompt_histdt + [[ -z ${AG_NO_CONTEXT+x} ]] && prompt_context + prompt_virtualenv + prompt_dir + prompt_git + prompt_end +} + +# from orig... +# export PS1='$(ansi_single $(text_effect reset)) $(build_prompt) ' +# this doesn't work... new model: create a prompt via a PR variable and +# use that. + +set_bash_prompt() { + RETVAL=$? + PR="" + PRIGHT="" + CURRENT_BG=NONE + PR="$(ansi_single $(text_effect reset))" + build_prompt + + # uncomment below to use right prompt + # PS1='\[$(tput sc; printf "%*s" $COLUMNS "$PRIGHT"; tput rc)\]'$PR + PS1=$PR +} + +PROMPT_COMMAND=set_bash_prompt From 688de578aa539f8837e9de2424b5455fcb569bf8 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 09:59:04 +0000 Subject: [PATCH 14/27] Attempts to fix brew.completion.bash --- completions/brew.completion.bash | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/completions/brew.completion.bash b/completions/brew.completion.bash index 9ee46c996..163c200f5 100644 --- a/completions/brew.completion.bash +++ b/completions/brew.completion.bash @@ -1,10 +1,10 @@ #!/usr/bin/env bash if which brew >/dev/null 2>&1; then - if [ -f `brew --prefix`/etc/bash_completion ]; then - . `brew --prefix`/etc/bash_completion + if [ -f $(brew --prefix`/etc/bash_completion) ]; then + brew --prefix '/etc/bash_completion' fi - if [ -f `brew --prefix`/Library/Contributions/brew_bash_completion.bash ]; then - . `brew --prefix`/Library/Contributions/brew_bash_completion.bash + if [ -f $(brew --prefix`/Library/Contributions/brew_bash_completion.bash) ]; then + brew --prefix '/Library/Contributions/brew_bash_completion.bash' fi fi From 15b9c953ee3b725f5bacdac37e03f03cdbabebce Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 10:00:36 +0000 Subject: [PATCH 15/27] Attempt to fix salt.completetion --- completions/salt.completion.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/completions/salt.completion.bash b/completions/salt.completion.bash index e3b34df7f..1d141da28 100644 --- a/completions/salt.completion.bash +++ b/completions/salt.completion.bash @@ -59,7 +59,7 @@ _salt(){ case "${pprev}" in -G|--grain|--grain-pcre) if [ "${cur}" = ":" ]; then - COMPREPLY=($(compgen -W "`_salt_get_grain_values ${prev}`" )) + COMPREPLY="$(compgen -W "`_salt_get_grain_values ${prev}`" )" return 0 fi ;; @@ -112,7 +112,7 @@ _salt(){ ;; -N|--nodegroup) MASTER_CONFIG='/etc/salt/master' - COMPREPLY=($(compgen -W "`awk -F ':' 'BEGIN {print_line = 0}; /^nodegroups/ {print_line = 1;getline } print_line && /^ */ {print $1} /^[^ ]/ {print_line = 0}' <${MASTER_CONFIG}`" -- ${cur})) + COMPREPLY="$(compgen -W "`awk -F ':' 'BEGIN {print_line = 0}; /^nodegroups/ {print_line = 1;getline } print_line && /^ */ {print $1} /^[^ ]/ {print_line = 0}' <${MASTER_CONFIG}`" -- ${cur})" return 0 ;; esac From 234567815eac898a02f22884b14acb91bf2154e1 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 10:03:08 +0000 Subject: [PATCH 16/27] themes/agnoster/agnoster.base.bash : QA fix --- themes/agnoster/agnoster.base.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/agnoster/agnoster.base.bash b/themes/agnoster/agnoster.base.bash index ec3782c6d..e94a02c09 100755 --- a/themes/agnoster/agnoster.base.bash +++ b/themes/agnoster/agnoster.base.bash @@ -220,7 +220,7 @@ prompt_virtualenv() { # Context: user@hostname (who am I and where am I) prompt_context() { - local user=`whoami` + local user="$(whoami)" if [[ $user != $DEFAULT_USER || -n $SSH_CLIENT ]]; then prompt_segment black default "$user@\h" From 0c36bbfe2725cf4b79353e9e0ad2c7a54590592d Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 10:04:38 +0000 Subject: [PATCH 17/27] themes/rjorgenson/rjorgenson.theme.bash : QA fix --- themes/rjorgenson/rjorgenson.theme.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/themes/rjorgenson/rjorgenson.theme.bash b/themes/rjorgenson/rjorgenson.theme.bash index 06b48372c..e3667fee9 100644 --- a/themes/rjorgenson/rjorgenson.theme.bash +++ b/themes/rjorgenson/rjorgenson.theme.bash @@ -50,8 +50,8 @@ function is_integer() { # helper function for todo-txt-count } todo_txt_count() { - if `hash todo.bash 2>&-`; then # is todo.bash installed - count=`todo.bash ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }'` + if "$(hash todo.bash 2>&-)"; then # is todo.bash installed + count="$(todo.bash ls | egrep "TODO: [0-9]+ of ([0-9]+) tasks shown" | awk '{ print $4 }')" if is_integer $count; then # did we get a sane answer back echo "${BRACKET_COLOR}[${STRING_COLOR}T:$count${BRACKET_COLOR}]$normal" fi From 8ba2e512cc84505e5959bcd6305c7198bfc73c3c Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 10:09:12 +0000 Subject: [PATCH 18/27] fixing syntax err --- completions/brew.completion.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/completions/brew.completion.bash b/completions/brew.completion.bash index 163c200f5..b130c7e72 100644 --- a/completions/brew.completion.bash +++ b/completions/brew.completion.bash @@ -1,10 +1,10 @@ #!/usr/bin/env bash if which brew >/dev/null 2>&1; then - if [ -f $(brew --prefix`/etc/bash_completion) ]; then + if [ -f $(brew --prefix '/etc/bash_completion') ]; then brew --prefix '/etc/bash_completion' fi - if [ -f $(brew --prefix`/Library/Contributions/brew_bash_completion.bash) ]; then + if [ -f $(brew --prefix '/Library/Contributions/brew_bash_completion.bash') ]; then brew --prefix '/Library/Contributions/brew_bash_completion.bash' fi fi From aaa88d29a5f2b573e1dd5efacc4d879c9a80de18 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 10:11:02 +0000 Subject: [PATCH 19/27] Attempt to fix QA for salt.completion --- completions/salt.completion.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/completions/salt.completion.bash b/completions/salt.completion.bash index 1d141da28..c557444b5 100644 --- a/completions/salt.completion.bash +++ b/completions/salt.completion.bash @@ -59,7 +59,7 @@ _salt(){ case "${pprev}" in -G|--grain|--grain-pcre) if [ "${cur}" = ":" ]; then - COMPREPLY="$(compgen -W "`_salt_get_grain_values ${prev}`" )" + COMPREPLY="$(compgen -W "$(_salt_get_grain_values ${prev})" )" return 0 fi ;; @@ -67,7 +67,7 @@ _salt(){ case "${ppprev}" in -G|--grain|--grain-pcre) if [ "${prev}" = ":" ]; then - COMPREPLY=( $(compgen -W "`_salt_get_grain_values ${pprev}`" -- ${cur}) ) + COMPREPLY=( $(compgen -W "$(_salt_get_grain_values ${pprev})" -- ${cur}) ) return 0 fi ;; From ab795023c6eb8b754ccc77222529519e98de4a90 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 10:12:35 +0000 Subject: [PATCH 20/27] themes/agnoster.base : attempt to fix QA --- themes/agnoster/agnoster.base.bash | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/themes/agnoster/agnoster.base.bash b/themes/agnoster/agnoster.base.bash index e94a02c09..6efb87268 100755 --- a/themes/agnoster/agnoster.base.bash +++ b/themes/agnoster/agnoster.base.bash @@ -129,7 +129,7 @@ bg_color() { # for codes (mycodes) as otherwise it'll clobber the original. # this changes from BASH v3 to BASH v4. ansi() { - local seq + local seq| declare -a mycodes=("${!1}") debug "ansi: ${!1} all: $* aka ${mycodes[@]}" @@ -292,7 +292,7 @@ __command_rprompt() { [ $n -gt 40 ] || break times="$times ${tz%%:*}\e[30;1m:\e[0;36;1m" times="$times$(TZ=${tz#*:} date +%H:%M)\e[0m" - n=$(( $n - 10 )) + n="$( $n - 10 )" done [ -z "$times" ] || printf "%${n}s$times\\r" '' } From 26cf9fdf1ca57d967a514d9296e6ba82b1bdf848 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 10:17:14 +0000 Subject: [PATCH 21/27] Fixing https://app.codacy.com/app/OhMyBash/oh-my-bash/file/37180390922/issues/source?bid=8509045&fileBranchId=13883871#l115 --- completions/salt.completion.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/completions/salt.completion.bash b/completions/salt.completion.bash index c557444b5..d9214e16c 100644 --- a/completions/salt.completion.bash +++ b/completions/salt.completion.bash @@ -112,7 +112,7 @@ _salt(){ ;; -N|--nodegroup) MASTER_CONFIG='/etc/salt/master' - COMPREPLY="$(compgen -W "`awk -F ':' 'BEGIN {print_line = 0}; /^nodegroups/ {print_line = 1;getline } print_line && /^ */ {print $1} /^[^ ]/ {print_line = 0}' <${MASTER_CONFIG}`" -- ${cur})" + COMPREPLY="$(compgen -W "$(awk -F ':' 'BEGIN {print_line = 0}; /^nodegroups/ {print_line = 1;getline } print_line && /^ */ {print $1} /^[^ ]/ {print_line = 0}' <${MASTER_CONFIG})" -- ${cur})" return 0 ;; esac From 7e6e9b6ff658cb66961bce0b548d9963f05d32f4 Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 10:19:07 +0000 Subject: [PATCH 22/27] QA fix --- completions/bundler.completion.bash | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/completions/bundler.completion.bash b/completions/bundler.completion.bash index 79b86116e..c8640b2bb 100644 --- a/completions/bundler.completion.bash +++ b/completions/bundler.completion.bash @@ -9,8 +9,8 @@ # . completion-bundle __bundle() { - local cur=$2 - local prev=$3 + local cur="$2" + local prev="$3" local bundle_command __bundle_get_command COMPREPLY=() @@ -32,7 +32,7 @@ __bundle() { __bundle_get_command() { local i - for ((i=1; i < $COMP_CWORD; ++i)); do + for (i=1; i < $COMP_CWORD; ++i); do local arg=${COMP_WORDS[$i]} case $arg in From 7970c31619b2066cd18775aed96c5dbc0ac00ceb Mon Sep 17 00:00:00 2001 From: Jacob Hrbek Date: Thu, 15 Aug 2019 10:19:41 +0000 Subject: [PATCH 23/27] QA: https://app.codacy.com/app/OhMyBash/oh-my-bash/file/37180391040/issues/source?bid=8509045&fileBranchId=13883871#l234 --- completions/docker-machine.completion.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/completions/docker-machine.completion.bash b/completions/docker-machine.completion.bash index f617a8326..8fb80c198 100644 --- a/completions/docker-machine.completion.bash +++ b/completions/docker-machine.completion.bash @@ -231,7 +231,7 @@ _docker_machine() { local i local command=docker-machine - for (( i=1; i < ${cword}; ++i)); do + for ( i=1; i < ${cword}; ++i); do local word=${words[i]} if [[ " ${wants_file[*]} ${wants_dir[*]} " =~ " ${word} " ]]; then # skip the next option From 384d4964151c6505cf2219baf55295c23bd41481 Mon Sep 17 00:00:00 2001 From: Kreyren Date: Sat, 1 Jan 2022 11:42:01 +0000 Subject: [PATCH 24/27] Update git-prompt.bash --- tools/git-prompt.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/git-prompt.bash b/tools/git-prompt.bash index e5ca3a8c8..f14400ed3 100644 --- a/tools/git-prompt.bash +++ b/tools/git-prompt.bash @@ -113,7 +113,7 @@ __git_ps1_show_upstream () local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.bashowupstream)$' 2>/dev/null | tr '\0\n' '\n ')" while read -r key value; do case "$key" in - bash.bashowupstream) + bash.showupstream) GIT_PS1_SHOWUPSTREAM="$value" if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then p="" From 6cab3b826d26fbe3c4cdcc9de713f61b19c777f7 Mon Sep 17 00:00:00 2001 From: Kreyren Date: Sat, 1 Jan 2022 11:42:54 +0000 Subject: [PATCH 25/27] Update git-prompt.bash --- tools/git-prompt.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/git-prompt.bash b/tools/git-prompt.bash index f14400ed3..51ad2cb2f 100644 --- a/tools/git-prompt.bash +++ b/tools/git-prompt.bash @@ -478,7 +478,7 @@ __git_ps1 () fi elif [ "true" = "$inside_worktree" ]; then if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] && - [ "$(git config --bool bash.bashowDirtyState)" != "false" ] + [ "$(git config --bool bash.showDirtyState)" != "false" ] then git diff --no-ext-diff --quiet || w="*" git diff --no-ext-diff --cached --quiet || i="+" From 879609e82809cc419ad57c97d43f686ed2bf4d72 Mon Sep 17 00:00:00 2001 From: Kreyren Date: Sat, 1 Jan 2022 11:44:24 +0000 Subject: [PATCH 26/27] Update git-prompt.bash --- tools/git-prompt.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/git-prompt.bash b/tools/git-prompt.bash index 51ad2cb2f..895f26827 100644 --- a/tools/git-prompt.bash +++ b/tools/git-prompt.bash @@ -110,7 +110,7 @@ __git_ps1_show_upstream () svn_remote=() # get some config options from git-config - local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.bashowupstream)$' 2>/dev/null | tr '\0\n' '\n ')" + local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')" while read -r key value; do case "$key" in bash.showupstream) From 1b698445bbc3b7a18df0b37d0b399e3feb9bd486 Mon Sep 17 00:00:00 2001 From: Kreyren Date: Sat, 1 Jan 2022 11:45:12 +0000 Subject: [PATCH 27/27] Update git-prompt.bash --- tools/git-prompt.bash | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/git-prompt.bash b/tools/git-prompt.bash index 895f26827..881ee7b28 100644 --- a/tools/git-prompt.bash +++ b/tools/git-prompt.bash @@ -493,7 +493,7 @@ __git_ps1 () fi if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] && - [ "$(git config --bool bash.bashowUntrackedFiles)" != "false" ] && + [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] && git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null then u="%${ZSH_VERSION+%}"