# bash completion for sdb-admin                            -*- shell-script -*-

__sdb-admin_debug()
{
    if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then
        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
    fi
}

# Homebrew on Macs have version 1.3 of bash-completion which doesn't include
# _init_completion. This is a very minimal version of that function.
__sdb-admin_init_completion()
{
    COMPREPLY=()
    _get_comp_words_by_ref "$@" cur prev words cword
}

__sdb-admin_index_of_word()
{
    local w word=$1
    shift
    index=0
    for w in "$@"; do
        [[ $w = "$word" ]] && return
        index=$((index+1))
    done
    index=-1
}

__sdb-admin_contains_word()
{
    local w word=$1; shift
    for w in "$@"; do
        [[ $w = "$word" ]] && return
    done
    return 1
}

__sdb-admin_handle_go_custom_completion()
{
    __sdb-admin_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"

    local out requestComp lastParam lastChar comp directive args

    # Prepare the command to request completions for the program.
    # Calling ${words[0]} instead of directly sdb-admin allows to handle aliases
    args=("${words[@]:1}")
    requestComp="${words[0]} __completeNoDesc ${args[*]}"

    lastParam=${words[$((${#words[@]}-1))]}
    lastChar=${lastParam:$((${#lastParam}-1)):1}
    __sdb-admin_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"

    if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
        # If the last parameter is complete (there is a space following it)
        # We add an extra empty parameter so we can indicate this to the go method.
        __sdb-admin_debug "${FUNCNAME[0]}: Adding extra empty parameter"
        requestComp="${requestComp} \"\""
    fi

    __sdb-admin_debug "${FUNCNAME[0]}: calling ${requestComp}"
    # Use eval to handle any environment variables and such
    out=$(eval "${requestComp}" 2>/dev/null)

    # Extract the directive integer at the very end of the output following a colon (:)
    directive=${out##*:}
    # Remove the directive
    out=${out%:*}
    if [ "${directive}" = "${out}" ]; then
        # There is not directive specified
        directive=0
    fi
    __sdb-admin_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
    __sdb-admin_debug "${FUNCNAME[0]}: the completions are: ${out[*]}"

    if [ $((directive & 1)) -ne 0 ]; then
        # Error code.  No completion.
        __sdb-admin_debug "${FUNCNAME[0]}: received error from custom completion go code"
        return
    else
        if [ $((directive & 2)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __sdb-admin_debug "${FUNCNAME[0]}: activating no space"
                compopt -o nospace
            fi
        fi
        if [ $((directive & 4)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __sdb-admin_debug "${FUNCNAME[0]}: activating no file completion"
                compopt +o default
            fi
        fi

        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${out[*]}" -- "$cur")
    fi
}

__sdb-admin_handle_reply()
{
    __sdb-admin_debug "${FUNCNAME[0]}"
    local comp
    case $cur in
        -*)
            if [[ $(type -t compopt) = "builtin" ]]; then
                compopt -o nospace
            fi
            local allflags
            if [ ${#must_have_one_flag[@]} -ne 0 ]; then
                allflags=("${must_have_one_flag[@]}")
            else
                allflags=("${flags[*]} ${two_word_flags[*]}")
            fi
            while IFS='' read -r comp; do
                COMPREPLY+=("$comp")
            done < <(compgen -W "${allflags[*]}" -- "$cur")
            if [[ $(type -t compopt) = "builtin" ]]; then
                [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
            fi

            # complete after --flag=abc
            if [[ $cur == *=* ]]; then
                if [[ $(type -t compopt) = "builtin" ]]; then
                    compopt +o nospace
                fi

                local index flag
                flag="${cur%=*}"
                __sdb-admin_index_of_word "${flag}" "${flags_with_completion[@]}"
                COMPREPLY=()
                if [[ ${index} -ge 0 ]]; then
                    PREFIX=""
                    cur="${cur#*=}"
                    ${flags_completion[${index}]}
                    if [ -n "${ZSH_VERSION}" ]; then
                        # zsh completion needs --flag= prefix
                        eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
                    fi
                fi
            fi
            return 0;
            ;;
    esac

    # check if we are handling a flag with special work handling
    local index
    __sdb-admin_index_of_word "${prev}" "${flags_with_completion[@]}"
    if [[ ${index} -ge 0 ]]; then
        ${flags_completion[${index}]}
        return
    fi

    # we are parsing a flag and don't have a special handler, no completion
    if [[ ${cur} != "${words[cword]}" ]]; then
        return
    fi

    local completions
    completions=("${commands[@]}")
    if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
        completions=("${must_have_one_noun[@]}")
    elif [[ -n "${has_completion_function}" ]]; then
        # if a go completion function is provided, defer to that function
        completions=()
        __sdb-admin_handle_go_custom_completion
    fi
    if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
        completions+=("${must_have_one_flag[@]}")
    fi
    while IFS='' read -r comp; do
        COMPREPLY+=("$comp")
    done < <(compgen -W "${completions[*]}" -- "$cur")

    if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
    fi

    if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
		if declare -F __sdb-admin_custom_func >/dev/null; then
			# try command name qualified custom func
			__sdb-admin_custom_func
		else
			# otherwise fall back to unqualified for compatibility
			declare -F __custom_func >/dev/null && __custom_func
		fi
    fi

    # available in bash-completion >= 2, not always present on macOS
    if declare -F __ltrim_colon_completions >/dev/null; then
        __ltrim_colon_completions "$cur"
    fi

    # If there is only 1 completion and it is a flag with an = it will be completed
    # but we don't want a space after the =
    if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
       compopt -o nospace
    fi
}

# The arguments should be in the form "ext1|ext2|extn"
__sdb-admin_handle_filename_extension_flag()
{
    local ext="$1"
    _filedir "@(${ext})"
}

__sdb-admin_handle_subdirs_in_dir_flag()
{
    local dir="$1"
    pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
}

__sdb-admin_handle_flag()
{
    __sdb-admin_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    # if a command required a flag, and we found it, unset must_have_one_flag()
    local flagname=${words[c]}
    local flagvalue
    # if the word contained an =
    if [[ ${words[c]} == *"="* ]]; then
        flagvalue=${flagname#*=} # take in as flagvalue after the =
        flagname=${flagname%=*} # strip everything after the =
        flagname="${flagname}=" # but put the = back
    fi
    __sdb-admin_debug "${FUNCNAME[0]}: looking for ${flagname}"
    if __sdb-admin_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
        must_have_one_flag=()
    fi

    # if you set a flag which only applies to this command, don't show subcommands
    if __sdb-admin_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
      commands=()
    fi

    # keep flag value with flagname as flaghash
    # flaghash variable is an associative array which is only supported in bash > 3.
    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
        if [ -n "${flagvalue}" ] ; then
            flaghash[${flagname}]=${flagvalue}
        elif [ -n "${words[ $((c+1)) ]}" ] ; then
            flaghash[${flagname}]=${words[ $((c+1)) ]}
        else
            flaghash[${flagname}]="true" # pad "true" for bool flag
        fi
    fi

    # skip the argument to a two word flag
    if [[ ${words[c]} != *"="* ]] && __sdb-admin_contains_word "${words[c]}" "${two_word_flags[@]}"; then
			  __sdb-admin_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument"
        c=$((c+1))
        # if we are looking for a flags value, don't show commands
        if [[ $c -eq $cword ]]; then
            commands=()
        fi
    fi

    c=$((c+1))

}

__sdb-admin_handle_noun()
{
    __sdb-admin_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    if __sdb-admin_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
        must_have_one_noun=()
    elif __sdb-admin_contains_word "${words[c]}" "${noun_aliases[@]}"; then
        must_have_one_noun=()
    fi

    nouns+=("${words[c]}")
    c=$((c+1))
}

__sdb-admin_handle_command()
{
    __sdb-admin_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    local next_command
    if [[ -n ${last_command} ]]; then
        next_command="_${last_command}_${words[c]//:/__}"
    else
        if [[ $c -eq 0 ]]; then
            next_command="_sdb-admin_root_command"
        else
            next_command="_${words[c]//:/__}"
        fi
    fi
    c=$((c+1))
    __sdb-admin_debug "${FUNCNAME[0]}: looking for ${next_command}"
    declare -F "$next_command" >/dev/null && $next_command
}

__sdb-admin_handle_word()
{
    if [[ $c -ge $cword ]]; then
        __sdb-admin_handle_reply
        return
    fi
    __sdb-admin_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
    if [[ "${words[c]}" == -* ]]; then
        __sdb-admin_handle_flag
    elif __sdb-admin_contains_word "${words[c]}" "${commands[@]}"; then
        __sdb-admin_handle_command
    elif [[ $c -eq 0 ]]; then
        __sdb-admin_handle_command
    elif __sdb-admin_contains_word "${words[c]}" "${command_aliases[@]}"; then
        # aliashash variable is an associative array which is only supported in bash > 3.
        if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
            words[c]=${aliashash[${words[c]}]}
            __sdb-admin_handle_command
        else
            __sdb-admin_handle_noun
        fi
    else
        __sdb-admin_handle_noun
    fi
    __sdb-admin_handle_word
}

_sdb-admin_add-aggregator()
{
    last_command="sdb-admin_add-aggregator"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password=")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--role=")
    two_word_flags+=("--role")
    local_nonpersistent_flags+=("--role=")
    flags+=("--skip-validate-env")
    local_nonpersistent_flags+=("--skip-validate-env")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_add-leaf()
{
    last_command="sdb-admin_add-leaf"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--availability-group=")
    two_word_flags+=("--availability-group")
    local_nonpersistent_flags+=("--availability-group=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password=")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--skip-validate-env")
    local_nonpersistent_flags+=("--skip-validate-env")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_bootstrap-aggregator()
{
    last_command="sdb-admin_bootstrap-aggregator"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--license=")
    two_word_flags+=("--license")
    local_nonpersistent_flags+=("--license=")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--skip-feature-flags-enabling")
    local_nonpersistent_flags+=("--skip-feature-flags-enabling")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--memsql-id=")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_change-root-password()
{
    last_command="sdb-admin_change-root-password"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--fix-secure-key")
    local_nonpersistent_flags+=("--fix-secure-key")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--password=")
    two_word_flags+=("--password")
    local_nonpersistent_flags+=("--password=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_configure-monitoring()
{
    last_command="sdb-admin_configure-monitoring"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--exporter-password=")
    two_word_flags+=("--exporter-password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--exporter-password=")
    flags+=("--exporter-port=")
    two_word_flags+=("--exporter-port")
    two_word_flags+=("-P")
    local_nonpersistent_flags+=("--exporter-port=")
    flags+=("--exporter-ssl-cert=")
    two_word_flags+=("--exporter-ssl-cert")
    local_nonpersistent_flags+=("--exporter-ssl-cert=")
    flags+=("--exporter-ssl-key=")
    two_word_flags+=("--exporter-ssl-key")
    local_nonpersistent_flags+=("--exporter-ssl-key=")
    flags+=("--exporter-ssl-passphrase=")
    two_word_flags+=("--exporter-ssl-passphrase")
    local_nonpersistent_flags+=("--exporter-ssl-passphrase=")
    flags+=("--exporter-use-https")
    local_nonpersistent_flags+=("--exporter-use-https")
    flags+=("--exporter-user=")
    two_word_flags+=("--exporter-user")
    two_word_flags+=("-u")
    local_nonpersistent_flags+=("--exporter-user=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--stop-exporter")
    local_nonpersistent_flags+=("--stop-exporter")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_create-backup()
{
    last_command="sdb-admin_create-backup"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--backup-suffix=")
    two_word_flags+=("--backup-suffix")
    local_nonpersistent_flags+=("--backup-suffix=")
    flags+=("--backup-type=")
    two_word_flags+=("--backup-type")
    local_nonpersistent_flags+=("--backup-type=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--include=")
    two_word_flags+=("--include")
    local_nonpersistent_flags+=("--include=")
    flags+=("--multipart-chunk-size-mb=")
    two_word_flags+=("--multipart-chunk-size-mb")
    local_nonpersistent_flags+=("--multipart-chunk-size-mb=")
    flags+=("--no-region")
    local_nonpersistent_flags+=("--no-region")
    flags+=("--repository=")
    two_word_flags+=("--repository")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--repository=")
    flags+=("--tags=")
    two_word_flags+=("--tags")
    local_nonpersistent_flags+=("--tags=")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    local_nonpersistent_flags+=("--timeout=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--repository=")
    must_have_one_flag+=("-r")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_create-node()
{
    last_command="sdb-admin_create-node"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--aggregator-role=")
    two_word_flags+=("--aggregator-role")
    local_nonpersistent_flags+=("--aggregator-role=")
    flags+=("--allow-ipv6")
    local_nonpersistent_flags+=("--allow-ipv6")
    flags+=("--auditlogsdir=")
    two_word_flags+=("--auditlogsdir")
    local_nonpersistent_flags+=("--auditlogsdir=")
    flags+=("--availability-group=")
    two_word_flags+=("--availability-group")
    local_nonpersistent_flags+=("--availability-group=")
    flags+=("--base-install-dir=")
    two_word_flags+=("--base-install-dir")
    local_nonpersistent_flags+=("--base-install-dir=")
    flags+=("--bind-address=")
    two_word_flags+=("--bind-address")
    local_nonpersistent_flags+=("--bind-address=")
    flags+=("--datadir=")
    two_word_flags+=("--datadir")
    local_nonpersistent_flags+=("--datadir=")
    flags+=("--disable-auto-restart")
    local_nonpersistent_flags+=("--disable-auto-restart")
    flags+=("--force-master")
    local_nonpersistent_flags+=("--force-master")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--license=")
    two_word_flags+=("--license")
    local_nonpersistent_flags+=("--license=")
    flags+=("--memsql-config=")
    two_word_flags+=("--memsql-config")
    local_nonpersistent_flags+=("--memsql-config=")
    flags+=("--no-start")
    local_nonpersistent_flags+=("--no-start")
    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password=")
    flags+=("--plancachedir=")
    two_word_flags+=("--plancachedir")
    local_nonpersistent_flags+=("--plancachedir=")
    flags+=("--port=")
    two_word_flags+=("--port")
    two_word_flags+=("-P")
    local_nonpersistent_flags+=("--port=")
    flags+=("--role=")
    two_word_flags+=("--role")
    local_nonpersistent_flags+=("--role=")
    flags+=("--set-configs=")
    two_word_flags+=("--set-configs")
    local_nonpersistent_flags+=("--set-configs=")
    flags+=("--skip-feature-flags-enabling")
    local_nonpersistent_flags+=("--skip-feature-flags-enabling")
    flags+=("--ssl-fips-mode=")
    two_word_flags+=("--ssl-fips-mode")
    local_nonpersistent_flags+=("--ssl-fips-mode=")
    flags+=("--tracelogsdir=")
    two_word_flags+=("--tracelogsdir")
    local_nonpersistent_flags+=("--tracelogsdir=")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--user-password=")
    two_word_flags+=("--user-password")
    local_nonpersistent_flags+=("--user-password=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_delete-backup()
{
    last_command="sdb-admin_delete-backup"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--no-region")
    local_nonpersistent_flags+=("--no-region")
    flags+=("--repository=")
    two_word_flags+=("--repository")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--repository=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--repository=")
    must_have_one_flag+=("-r")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_delete-node()
{
    last_command="sdb-admin_delete-node"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--skip-remove")
    local_nonpersistent_flags+=("--skip-remove")
    flags+=("--stop")
    local_nonpersistent_flags+=("--stop")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_describe-node()
{
    last_command="sdb-admin_describe-node"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--property=")
    two_word_flags+=("--property")
    local_nonpersistent_flags+=("--property=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_disable-nodes-autostart()
{
    last_command="sdb-admin_disable-nodes-autostart"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    local_nonpersistent_flags+=("--all")
    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_dump()
{
    last_command="sdb-admin_dump"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--databases=")
    two_word_flags+=("--databases")
    local_nonpersistent_flags+=("--databases=")
    flags+=("--exclude=")
    two_word_flags+=("--exclude")
    local_nonpersistent_flags+=("--exclude=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--only=")
    two_word_flags+=("--only")
    local_nonpersistent_flags+=("--only=")
    flags+=("--output-path=")
    two_word_flags+=("--output-path")
    local_nonpersistent_flags+=("--output-path=")
    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password=")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--ssl")
    local_nonpersistent_flags+=("--ssl")
    flags+=("--ssl-ca=")
    two_word_flags+=("--ssl-ca")
    local_nonpersistent_flags+=("--ssl-ca=")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_enable-high-availability()
{
    last_command="sdb-admin_enable-high-availability"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--load-balanced")
    local_nonpersistent_flags+=("--load-balanced")
    flags+=("--precheck-only")
    local_nonpersistent_flags+=("--precheck-only")
    flags+=("--skip-colocate-check")
    local_nonpersistent_flags+=("--skip-colocate-check")
    flags+=("--skip-disk-check")
    local_nonpersistent_flags+=("--skip-disk-check")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_enable-http-api()
{
    last_command="sdb-admin_enable-http-api"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all-aggregators")
    local_nonpersistent_flags+=("--all-aggregators")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--node-id=")
    two_word_flags+=("--node-id")
    local_nonpersistent_flags+=("--node-id=")
    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password=")
    flags+=("--pool-capacity=")
    two_word_flags+=("--pool-capacity")
    local_nonpersistent_flags+=("--pool-capacity=")
    flags+=("--pool-max-idle=")
    two_word_flags+=("--pool-max-idle")
    local_nonpersistent_flags+=("--pool-max-idle=")
    flags+=("--port=")
    two_word_flags+=("--port")
    two_word_flags+=("-P")
    local_nonpersistent_flags+=("--port=")
    flags+=("--ssl")
    local_nonpersistent_flags+=("--ssl")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_enable-nodes-autostart()
{
    last_command="sdb-admin_enable-nodes-autostart"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    local_nonpersistent_flags+=("--all")
    flags+=("--create-service-only")
    local_nonpersistent_flags+=("--create-service-only")
    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_enable-systemd-client()
{
    last_command="sdb-admin_enable-systemd-client"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    local_nonpersistent_flags+=("--all")
    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_env()
{
    last_command="sdb-admin_env"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_list-backups()
{
    last_command="sdb-admin_list-backups"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--after=")
    two_word_flags+=("--after")
    local_nonpersistent_flags+=("--after=")
    flags+=("--all")
    local_nonpersistent_flags+=("--all")
    flags+=("--backup-name=")
    two_word_flags+=("--backup-name")
    local_nonpersistent_flags+=("--backup-name=")
    flags+=("--before=")
    two_word_flags+=("--before")
    local_nonpersistent_flags+=("--before=")
    flags+=("--cluster-id=")
    two_word_flags+=("--cluster-id")
    local_nonpersistent_flags+=("--cluster-id=")
    flags+=("--cluster-name=")
    two_word_flags+=("--cluster-name")
    local_nonpersistent_flags+=("--cluster-name=")
    flags+=("--database=")
    two_word_flags+=("--database")
    local_nonpersistent_flags+=("--database=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--latest")
    flags+=("-l")
    local_nonpersistent_flags+=("--latest")
    flags+=("--no-cache")
    local_nonpersistent_flags+=("--no-cache")
    flags+=("--no-region")
    local_nonpersistent_flags+=("--no-region")
    flags+=("--quiet")
    flags+=("-q")
    local_nonpersistent_flags+=("--quiet")
    flags+=("--repository=")
    two_word_flags+=("--repository")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--repository=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--repository=")
    must_have_one_flag+=("-r")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_list-nodes()
{
    last_command="sdb-admin_list-nodes"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--availability-group=")
    two_word_flags+=("--availability-group")
    local_nonpersistent_flags+=("--availability-group=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--process-state=")
    two_word_flags+=("--process-state")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--process-state=")
    flags+=("--quiet")
    flags+=("-q")
    local_nonpersistent_flags+=("--quiet")
    flags+=("--role=")
    two_word_flags+=("--role")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--role=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_optimize()
{
    last_command="sdb-admin_optimize"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--bind-to-l3")
    local_nonpersistent_flags+=("--bind-to-l3")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memory-percentage=")
    two_word_flags+=("--memory-percentage")
    local_nonpersistent_flags+=("--memory-percentage=")
    flags+=("--no-numa")
    local_nonpersistent_flags+=("--no-numa")
    flags+=("--no-partition-change")
    local_nonpersistent_flags+=("--no-partition-change")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_put-file()
{
    last_command="sdb-admin_put-file"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    local_nonpersistent_flags+=("--all")
    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--source-path=")
    two_word_flags+=("--source-path")
    two_word_flags+=("-s")
    local_nonpersistent_flags+=("--source-path=")
    flags+=("--target-path=")
    two_word_flags+=("--target-path")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--target-path=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--source-path=")
    must_have_one_flag+=("-s")
    must_have_one_flag+=("--target-path=")
    must_have_one_flag+=("-t")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_query()
{
    last_command="sdb-admin_query"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--max-column-width=")
    two_word_flags+=("--max-column-width")
    local_nonpersistent_flags+=("--max-column-width=")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password=")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--row-timeout=")
    two_word_flags+=("--row-timeout")
    local_nonpersistent_flags+=("--row-timeout=")
    flags+=("--sql=")
    two_word_flags+=("--sql")
    local_nonpersistent_flags+=("--sql=")
    flags+=("--ssl")
    local_nonpersistent_flags+=("--ssl")
    flags+=("--ssl-ca=")
    two_word_flags+=("--ssl-ca")
    local_nonpersistent_flags+=("--ssl-ca=")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--sql=")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_register-node()
{
    last_command="sdb-admin_register-node"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--auditlogsdir=")
    two_word_flags+=("--auditlogsdir")
    local_nonpersistent_flags+=("--auditlogsdir=")
    flags+=("--datadir=")
    two_word_flags+=("--datadir")
    local_nonpersistent_flags+=("--datadir=")
    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--memsql-config=")
    two_word_flags+=("--memsql-config")
    local_nonpersistent_flags+=("--memsql-config=")
    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password=")
    flags+=("--pid-file=")
    two_word_flags+=("--pid-file")
    local_nonpersistent_flags+=("--pid-file=")
    flags+=("--plancachedir=")
    two_word_flags+=("--plancachedir")
    local_nonpersistent_flags+=("--plancachedir=")
    flags+=("--port=")
    two_word_flags+=("--port")
    two_word_flags+=("-P")
    local_nonpersistent_flags+=("--port=")
    flags+=("--ssl-fips-mode=")
    two_word_flags+=("--ssl-fips-mode")
    local_nonpersistent_flags+=("--ssl-fips-mode=")
    flags+=("--tracelogsdir=")
    two_word_flags+=("--tracelogsdir")
    local_nonpersistent_flags+=("--tracelogsdir=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--host=")
    must_have_one_flag+=("--memsql-config=")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_remove-aggregator()
{
    last_command="sdb-admin_remove-aggregator"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_remove-leaf()
{
    last_command="sdb-admin_remove-leaf"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_restart-node()
{
    last_command="sdb-admin_restart-node"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--disable-auto-restart")
    local_nonpersistent_flags+=("--disable-auto-restart")
    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--online")
    local_nonpersistent_flags+=("--online")
    flags+=("--skip-system-warnings")
    local_nonpersistent_flags+=("--skip-system-warnings")
    flags+=("--snapshot")
    local_nonpersistent_flags+=("--snapshot")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_restore-backup()
{
    last_command="sdb-admin_restore-backup"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--database-prefix=")
    two_word_flags+=("--database-prefix")
    local_nonpersistent_flags+=("--database-prefix=")
    flags+=("--database-suffix=")
    two_word_flags+=("--database-suffix")
    local_nonpersistent_flags+=("--database-suffix=")
    flags+=("--full-checksum")
    local_nonpersistent_flags+=("--full-checksum")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--incr-backup-id=")
    two_word_flags+=("--incr-backup-id")
    local_nonpersistent_flags+=("--incr-backup-id=")
    flags+=("--multipart-chunk-size-mb=")
    two_word_flags+=("--multipart-chunk-size-mb")
    local_nonpersistent_flags+=("--multipart-chunk-size-mb=")
    flags+=("--no-region")
    local_nonpersistent_flags+=("--no-region")
    flags+=("--rename-to=")
    two_word_flags+=("--rename-to")
    local_nonpersistent_flags+=("--rename-to=")
    flags+=("--repository=")
    two_word_flags+=("--repository")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--repository=")
    flags+=("--skip-validation")
    local_nonpersistent_flags+=("--skip-validation")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    local_nonpersistent_flags+=("--timeout=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--repository=")
    must_have_one_flag+=("-r")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_set-license()
{
    last_command="sdb-admin_set-license"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--file-path=")
    two_word_flags+=("--file-path")
    two_word_flags+=("-f")
    local_nonpersistent_flags+=("--file-path=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--license=")
    two_word_flags+=("--license")
    local_nonpersistent_flags+=("--license=")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_show-aggregators()
{
    last_command="sdb-admin_show-aggregators"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_show-cluster()
{
    last_command="sdb-admin_show-cluster"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_show-leaves()
{
    last_command="sdb-admin_show-leaves"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_show-license()
{
    last_command="sdb-admin_show-license"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_snapshot-database()
{
    last_command="sdb-admin_snapshot-database"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--database-names=")
    two_word_flags+=("--database-names")
    local_nonpersistent_flags+=("--database-names=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_start-monitoring()
{
    last_command="sdb-admin_start-monitoring"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--batch-interval=")
    two_word_flags+=("--batch-interval")
    local_nonpersistent_flags+=("--batch-interval=")
    flags+=("--collect-event-traces")
    local_nonpersistent_flags+=("--collect-event-traces")
    flags+=("--database-name=")
    two_word_flags+=("--database-name")
    local_nonpersistent_flags+=("--database-name=")
    flags+=("--disable-sample-queries")
    local_nonpersistent_flags+=("--disable-sample-queries")
    flags+=("--exporter-host=")
    two_word_flags+=("--exporter-host")
    local_nonpersistent_flags+=("--exporter-host=")
    flags+=("--exporter-port=")
    two_word_flags+=("--exporter-port")
    local_nonpersistent_flags+=("--exporter-port=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--high-cardinality-metrics")
    local_nonpersistent_flags+=("--high-cardinality-metrics")
    flags+=("--monitoring-version=")
    two_word_flags+=("--monitoring-version")
    local_nonpersistent_flags+=("--monitoring-version=")
    flags+=("--password=")
    two_word_flags+=("--password")
    local_nonpersistent_flags+=("--password=")
    flags+=("--purge-frequency=")
    two_word_flags+=("--purge-frequency")
    local_nonpersistent_flags+=("--purge-frequency=")
    flags+=("--purge-log-retention-period=")
    two_word_flags+=("--purge-log-retention-period")
    local_nonpersistent_flags+=("--purge-log-retention-period=")
    flags+=("--retention-period=")
    two_word_flags+=("--retention-period")
    local_nonpersistent_flags+=("--retention-period=")
    flags+=("--ssl-ca=")
    two_word_flags+=("--ssl-ca")
    local_nonpersistent_flags+=("--ssl-ca=")
    flags+=("--ssl-capath=")
    two_word_flags+=("--ssl-capath")
    local_nonpersistent_flags+=("--ssl-capath=")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--exporter-host=")
    must_have_one_flag+=("--password=")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_start-monitoring-kube()
{
    last_command="sdb-admin_start-monitoring-kube"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--batch-interval=")
    two_word_flags+=("--batch-interval")
    local_nonpersistent_flags+=("--batch-interval=")
    flags+=("--cluster-name=")
    two_word_flags+=("--cluster-name")
    local_nonpersistent_flags+=("--cluster-name=")
    flags+=("--collect-event-traces")
    local_nonpersistent_flags+=("--collect-event-traces")
    flags+=("--config-file=")
    two_word_flags+=("--config-file")
    local_nonpersistent_flags+=("--config-file=")
    flags+=("--container=")
    two_word_flags+=("--container")
    local_nonpersistent_flags+=("--container=")
    flags+=("--context=")
    two_word_flags+=("--context")
    local_nonpersistent_flags+=("--context=")
    flags+=("--database-name=")
    two_word_flags+=("--database-name")
    local_nonpersistent_flags+=("--database-name=")
    flags+=("--disable-sample-queries")
    local_nonpersistent_flags+=("--disable-sample-queries")
    flags+=("--exporter-host=")
    two_word_flags+=("--exporter-host")
    local_nonpersistent_flags+=("--exporter-host=")
    flags+=("--exporter-port=")
    two_word_flags+=("--exporter-port")
    local_nonpersistent_flags+=("--exporter-port=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--high-cardinality-metrics")
    local_nonpersistent_flags+=("--high-cardinality-metrics")
    flags+=("--monitoring-version=")
    two_word_flags+=("--monitoring-version")
    local_nonpersistent_flags+=("--monitoring-version=")
    flags+=("--namespace=")
    two_word_flags+=("--namespace")
    local_nonpersistent_flags+=("--namespace=")
    flags+=("--password=")
    two_word_flags+=("--password")
    local_nonpersistent_flags+=("--password=")
    flags+=("--purge-frequency=")
    two_word_flags+=("--purge-frequency")
    local_nonpersistent_flags+=("--purge-frequency=")
    flags+=("--purge-log-retention-period=")
    two_word_flags+=("--purge-log-retention-period")
    local_nonpersistent_flags+=("--purge-log-retention-period=")
    flags+=("--retention-period=")
    two_word_flags+=("--retention-period")
    local_nonpersistent_flags+=("--retention-period=")
    flags+=("--ssl-ca=")
    two_word_flags+=("--ssl-ca")
    local_nonpersistent_flags+=("--ssl-ca=")
    flags+=("--ssl-capath=")
    two_word_flags+=("--ssl-capath")
    local_nonpersistent_flags+=("--ssl-capath=")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--exporter-host=")
    must_have_one_flag+=("--password=")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_start-node()
{
    last_command="sdb-admin_start-node"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--disable-auto-restart")
    local_nonpersistent_flags+=("--disable-auto-restart")
    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--role=")
    two_word_flags+=("--role")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--role=")
    flags+=("--skip-system-warnings")
    local_nonpersistent_flags+=("--skip-system-warnings")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_state()
{
    last_command="sdb-admin_state"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_stop-monitoring()
{
    last_command="sdb-admin_stop-monitoring"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--database-name=")
    two_word_flags+=("--database-name")
    local_nonpersistent_flags+=("--database-name=")
    flags+=("--exporter-host=")
    two_word_flags+=("--exporter-host")
    local_nonpersistent_flags+=("--exporter-host=")
    flags+=("--exporter-port=")
    two_word_flags+=("--exporter-port")
    local_nonpersistent_flags+=("--exporter-port=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--password=")
    two_word_flags+=("--password")
    local_nonpersistent_flags+=("--password=")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--exporter-host=")
    must_have_one_flag+=("--password=")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_stop-node()
{
    last_command="sdb-admin_stop-node"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--role=")
    two_word_flags+=("--role")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--role=")
    flags+=("--snapshot")
    local_nonpersistent_flags+=("--snapshot")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_summarize-backups()
{
    last_command="sdb-admin_summarize-backups"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--after=")
    two_word_flags+=("--after")
    local_nonpersistent_flags+=("--after=")
    flags+=("--before=")
    two_word_flags+=("--before")
    local_nonpersistent_flags+=("--before=")
    flags+=("--cluster-id=")
    two_word_flags+=("--cluster-id")
    local_nonpersistent_flags+=("--cluster-id=")
    flags+=("--cluster-name=")
    two_word_flags+=("--cluster-name")
    local_nonpersistent_flags+=("--cluster-name=")
    flags+=("--database=")
    two_word_flags+=("--database")
    local_nonpersistent_flags+=("--database=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--no-cache")
    local_nonpersistent_flags+=("--no-cache")
    flags+=("--no-region")
    local_nonpersistent_flags+=("--no-region")
    flags+=("--repository=")
    two_word_flags+=("--repository")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--repository=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--repository=")
    must_have_one_flag+=("-r")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_sync-ldap()
{
    last_command="sdb-admin_sync-ldap"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--auth-method=")
    two_word_flags+=("--auth-method")
    local_nonpersistent_flags+=("--auth-method=")
    flags+=("--bind-credentials=")
    two_word_flags+=("--bind-credentials")
    local_nonpersistent_flags+=("--bind-credentials=")
    flags+=("--bind-user=")
    two_word_flags+=("--bind-user")
    local_nonpersistent_flags+=("--bind-user=")
    flags+=("--ca-paths=")
    two_word_flags+=("--ca-paths")
    local_nonpersistent_flags+=("--ca-paths=")
    flags+=("--config-file=")
    two_word_flags+=("--config-file")
    local_nonpersistent_flags+=("--config-file=")
    flags+=("--dial-with-tls-config")
    local_nonpersistent_flags+=("--dial-with-tls-config")
    flags+=("--drop-unmanaged-memsql-users")
    local_nonpersistent_flags+=("--drop-unmanaged-memsql-users")
    flags+=("--exclude-ldap-users=")
    two_word_flags+=("--exclude-ldap-users")
    local_nonpersistent_flags+=("--exclude-ldap-users=")
    flags+=("--exclude-ldap-users-file=")
    two_word_flags+=("--exclude-ldap-users-file")
    local_nonpersistent_flags+=("--exclude-ldap-users-file=")
    flags+=("--exclude-ldap-users-to-lower=")
    two_word_flags+=("--exclude-ldap-users-to-lower")
    local_nonpersistent_flags+=("--exclude-ldap-users-to-lower=")
    flags+=("--failed-login-attempts-limit=")
    two_word_flags+=("--failed-login-attempts-limit")
    local_nonpersistent_flags+=("--failed-login-attempts-limit=")
    flags+=("--group-attribute=")
    two_word_flags+=("--group-attribute")
    local_nonpersistent_flags+=("--group-attribute=")
    flags+=("--group-members-attribute=")
    two_word_flags+=("--group-members-attribute")
    local_nonpersistent_flags+=("--group-members-attribute=")
    flags+=("--group-object-class=")
    two_word_flags+=("--group-object-class")
    local_nonpersistent_flags+=("--group-object-class=")
    flags+=("--groups=")
    two_word_flags+=("--groups")
    local_nonpersistent_flags+=("--groups=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--insecure-skip-verify")
    local_nonpersistent_flags+=("--insecure-skip-verify")
    flags+=("--kerberos-realm=")
    two_word_flags+=("--kerberos-realm")
    local_nonpersistent_flags+=("--kerberos-realm=")
    flags+=("--ldap-users-to-lower")
    local_nonpersistent_flags+=("--ldap-users-to-lower")
    flags+=("--pam-auth-service=")
    two_word_flags+=("--pam-auth-service")
    local_nonpersistent_flags+=("--pam-auth-service=")
    flags+=("--password=")
    two_word_flags+=("--password")
    local_nonpersistent_flags+=("--password=")
    flags+=("--password-lock-time=")
    two_word_flags+=("--password-lock-time")
    local_nonpersistent_flags+=("--password-lock-time=")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--query-filter=")
    two_word_flags+=("--query-filter")
    local_nonpersistent_flags+=("--query-filter=")
    flags+=("--require-ssl")
    local_nonpersistent_flags+=("--require-ssl")
    flags+=("--resource-pool=")
    two_word_flags+=("--resource-pool")
    local_nonpersistent_flags+=("--resource-pool=")
    flags+=("--saml-user-domain-attribute=")
    two_word_flags+=("--saml-user-domain-attribute")
    local_nonpersistent_flags+=("--saml-user-domain-attribute=")
    flags+=("--schema=")
    two_word_flags+=("--schema")
    local_nonpersistent_flags+=("--schema=")
    flags+=("--search-base=")
    two_word_flags+=("--search-base")
    local_nonpersistent_flags+=("--search-base=")
    flags+=("--show-detail")
    local_nonpersistent_flags+=("--show-detail")
    flags+=("--ssl")
    local_nonpersistent_flags+=("--ssl")
    flags+=("--ssl-ca=")
    two_word_flags+=("--ssl-ca")
    local_nonpersistent_flags+=("--ssl-ca=")
    flags+=("--start-tls")
    local_nonpersistent_flags+=("--start-tls")
    flags+=("--uris=")
    two_word_flags+=("--uris")
    local_nonpersistent_flags+=("--uris=")
    flags+=("--user=")
    two_word_flags+=("--user")
    local_nonpersistent_flags+=("--user=")
    flags+=("--user-attribute=")
    two_word_flags+=("--user-attribute")
    local_nonpersistent_flags+=("--user-attribute=")
    flags+=("--user-member-of-attribute=")
    two_word_flags+=("--user-member-of-attribute")
    local_nonpersistent_flags+=("--user-member-of-attribute=")
    flags+=("--user-object-class=")
    two_word_flags+=("--user-object-class")
    local_nonpersistent_flags+=("--user-object-class=")
    flags+=("--user-principal-name-attribute=")
    two_word_flags+=("--user-principal-name-attribute")
    local_nonpersistent_flags+=("--user-principal-name-attribute=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_unregister-node()
{
    last_command="sdb-admin_unregister-node"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--all-on-host=")
    two_word_flags+=("--all-on-host")
    local_nonpersistent_flags+=("--all-on-host=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_update-config()
{
    last_command="sdb-admin_update-config"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--key=")
    two_word_flags+=("--key")
    local_nonpersistent_flags+=("--key=")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--reset")
    local_nonpersistent_flags+=("--reset")
    flags+=("--role=")
    two_word_flags+=("--role")
    local_nonpersistent_flags+=("--role=")
    flags+=("--set-global")
    local_nonpersistent_flags+=("--set-global")
    flags+=("--value=")
    two_word_flags+=("--value")
    local_nonpersistent_flags+=("--value=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--key=")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_update-node-base-install-dir()
{
    last_command="sdb-admin_update-node-base-install-dir"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--disable-auto-restart")
    local_nonpersistent_flags+=("--disable-auto-restart")
    flags+=("--force")
    local_nonpersistent_flags+=("--force")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--memsql-id=")
    two_word_flags+=("--memsql-id")
    local_nonpersistent_flags+=("--memsql-id=")
    flags+=("--rename-to=")
    two_word_flags+=("--rename-to")
    local_nonpersistent_flags+=("--rename-to=")
    flags+=("--target-path=")
    two_word_flags+=("--target-path")
    local_nonpersistent_flags+=("--target-path=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--memsql-id=")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_validate-backup()
{
    last_command="sdb-admin_validate-backup"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--full-checksum")
    local_nonpersistent_flags+=("--full-checksum")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--incr-backup-id=")
    two_word_flags+=("--incr-backup-id")
    local_nonpersistent_flags+=("--incr-backup-id=")
    flags+=("--no-region")
    local_nonpersistent_flags+=("--no-region")
    flags+=("--repository=")
    two_word_flags+=("--repository")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--repository=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--repository=")
    must_have_one_flag+=("-r")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_version()
{
    last_command="sdb-admin_version"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-admin_root_command()
{
    last_command="sdb-admin"

    command_aliases=()

    commands=()
    commands+=("add-aggregator")
    commands+=("add-leaf")
    commands+=("bootstrap-aggregator")
    commands+=("change-root-password")
    commands+=("configure-monitoring")
    commands+=("create-backup")
    commands+=("create-node")
    commands+=("delete-backup")
    commands+=("delete-node")
    commands+=("describe-node")
    commands+=("disable-nodes-autostart")
    commands+=("dump")
    commands+=("enable-high-availability")
    commands+=("enable-http-api")
    commands+=("enable-nodes-autostart")
    commands+=("enable-systemd-client")
    commands+=("env")
    commands+=("list-backups")
    commands+=("list-nodes")
    commands+=("optimize")
    commands+=("put-file")
    commands+=("query")
    commands+=("register-node")
    commands+=("remove-aggregator")
    commands+=("remove-leaf")
    commands+=("restart-node")
    commands+=("restore-backup")
    commands+=("set-license")
    commands+=("show-aggregators")
    commands+=("show-cluster")
    commands+=("show-leaves")
    commands+=("show-license")
    commands+=("snapshot-database")
    commands+=("start-monitoring")
    commands+=("start-monitoring-kube")
    commands+=("start-node")
    commands+=("state")
    commands+=("stop-monitoring")
    commands+=("stop-node")
    commands+=("summarize-backups")
    commands+=("sync-ldap")
    commands+=("unregister-node")
    commands+=("update-config")
    commands+=("update-node-base-install-dir")
    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
        command_aliases+=("update-node-basedir")
        aliashash["update-node-basedir"]="update-node-base-install-dir"
    fi
    commands+=("validate-backup")
    commands+=("version")

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

__start_sdb-admin()
{
    local cur prev words cword
    declare -A flaghash 2>/dev/null || :
    declare -A aliashash 2>/dev/null || :
    if declare -F _init_completion >/dev/null 2>&1; then
        _init_completion -s || return
    else
        __sdb-admin_init_completion -n "=" || return
    fi

    local c=0
    local flags=()
    local two_word_flags=()
    local local_nonpersistent_flags=()
    local flags_with_completion=()
    local flags_completion=()
    local commands=("sdb-admin")
    local must_have_one_flag=()
    local must_have_one_noun=()
    local has_completion_function
    local last_command
    local nouns=()

    __sdb-admin_handle_word
}

if [[ $(type -t compopt) = "builtin" ]]; then
    complete -o default -F __start_sdb-admin sdb-admin
else
    complete -o default -o nospace -F __start_sdb-admin sdb-admin
fi

# ex: ts=4 sw=4 et filetype=sh
# bash completion for sdb-deploy                           -*- shell-script -*-

__sdb-deploy_debug()
{
    if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then
        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
    fi
}

# Homebrew on Macs have version 1.3 of bash-completion which doesn't include
# _init_completion. This is a very minimal version of that function.
__sdb-deploy_init_completion()
{
    COMPREPLY=()
    _get_comp_words_by_ref "$@" cur prev words cword
}

__sdb-deploy_index_of_word()
{
    local w word=$1
    shift
    index=0
    for w in "$@"; do
        [[ $w = "$word" ]] && return
        index=$((index+1))
    done
    index=-1
}

__sdb-deploy_contains_word()
{
    local w word=$1; shift
    for w in "$@"; do
        [[ $w = "$word" ]] && return
    done
    return 1
}

__sdb-deploy_handle_go_custom_completion()
{
    __sdb-deploy_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"

    local out requestComp lastParam lastChar comp directive args

    # Prepare the command to request completions for the program.
    # Calling ${words[0]} instead of directly sdb-deploy allows to handle aliases
    args=("${words[@]:1}")
    requestComp="${words[0]} __completeNoDesc ${args[*]}"

    lastParam=${words[$((${#words[@]}-1))]}
    lastChar=${lastParam:$((${#lastParam}-1)):1}
    __sdb-deploy_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"

    if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
        # If the last parameter is complete (there is a space following it)
        # We add an extra empty parameter so we can indicate this to the go method.
        __sdb-deploy_debug "${FUNCNAME[0]}: Adding extra empty parameter"
        requestComp="${requestComp} \"\""
    fi

    __sdb-deploy_debug "${FUNCNAME[0]}: calling ${requestComp}"
    # Use eval to handle any environment variables and such
    out=$(eval "${requestComp}" 2>/dev/null)

    # Extract the directive integer at the very end of the output following a colon (:)
    directive=${out##*:}
    # Remove the directive
    out=${out%:*}
    if [ "${directive}" = "${out}" ]; then
        # There is not directive specified
        directive=0
    fi
    __sdb-deploy_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
    __sdb-deploy_debug "${FUNCNAME[0]}: the completions are: ${out[*]}"

    if [ $((directive & 1)) -ne 0 ]; then
        # Error code.  No completion.
        __sdb-deploy_debug "${FUNCNAME[0]}: received error from custom completion go code"
        return
    else
        if [ $((directive & 2)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __sdb-deploy_debug "${FUNCNAME[0]}: activating no space"
                compopt -o nospace
            fi
        fi
        if [ $((directive & 4)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __sdb-deploy_debug "${FUNCNAME[0]}: activating no file completion"
                compopt +o default
            fi
        fi

        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${out[*]}" -- "$cur")
    fi
}

__sdb-deploy_handle_reply()
{
    __sdb-deploy_debug "${FUNCNAME[0]}"
    local comp
    case $cur in
        -*)
            if [[ $(type -t compopt) = "builtin" ]]; then
                compopt -o nospace
            fi
            local allflags
            if [ ${#must_have_one_flag[@]} -ne 0 ]; then
                allflags=("${must_have_one_flag[@]}")
            else
                allflags=("${flags[*]} ${two_word_flags[*]}")
            fi
            while IFS='' read -r comp; do
                COMPREPLY+=("$comp")
            done < <(compgen -W "${allflags[*]}" -- "$cur")
            if [[ $(type -t compopt) = "builtin" ]]; then
                [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
            fi

            # complete after --flag=abc
            if [[ $cur == *=* ]]; then
                if [[ $(type -t compopt) = "builtin" ]]; then
                    compopt +o nospace
                fi

                local index flag
                flag="${cur%=*}"
                __sdb-deploy_index_of_word "${flag}" "${flags_with_completion[@]}"
                COMPREPLY=()
                if [[ ${index} -ge 0 ]]; then
                    PREFIX=""
                    cur="${cur#*=}"
                    ${flags_completion[${index}]}
                    if [ -n "${ZSH_VERSION}" ]; then
                        # zsh completion needs --flag= prefix
                        eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
                    fi
                fi
            fi
            return 0;
            ;;
    esac

    # check if we are handling a flag with special work handling
    local index
    __sdb-deploy_index_of_word "${prev}" "${flags_with_completion[@]}"
    if [[ ${index} -ge 0 ]]; then
        ${flags_completion[${index}]}
        return
    fi

    # we are parsing a flag and don't have a special handler, no completion
    if [[ ${cur} != "${words[cword]}" ]]; then
        return
    fi

    local completions
    completions=("${commands[@]}")
    if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
        completions=("${must_have_one_noun[@]}")
    elif [[ -n "${has_completion_function}" ]]; then
        # if a go completion function is provided, defer to that function
        completions=()
        __sdb-deploy_handle_go_custom_completion
    fi
    if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
        completions+=("${must_have_one_flag[@]}")
    fi
    while IFS='' read -r comp; do
        COMPREPLY+=("$comp")
    done < <(compgen -W "${completions[*]}" -- "$cur")

    if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
    fi

    if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
		if declare -F __sdb-deploy_custom_func >/dev/null; then
			# try command name qualified custom func
			__sdb-deploy_custom_func
		else
			# otherwise fall back to unqualified for compatibility
			declare -F __custom_func >/dev/null && __custom_func
		fi
    fi

    # available in bash-completion >= 2, not always present on macOS
    if declare -F __ltrim_colon_completions >/dev/null; then
        __ltrim_colon_completions "$cur"
    fi

    # If there is only 1 completion and it is a flag with an = it will be completed
    # but we don't want a space after the =
    if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
       compopt -o nospace
    fi
}

# The arguments should be in the form "ext1|ext2|extn"
__sdb-deploy_handle_filename_extension_flag()
{
    local ext="$1"
    _filedir "@(${ext})"
}

__sdb-deploy_handle_subdirs_in_dir_flag()
{
    local dir="$1"
    pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
}

__sdb-deploy_handle_flag()
{
    __sdb-deploy_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    # if a command required a flag, and we found it, unset must_have_one_flag()
    local flagname=${words[c]}
    local flagvalue
    # if the word contained an =
    if [[ ${words[c]} == *"="* ]]; then
        flagvalue=${flagname#*=} # take in as flagvalue after the =
        flagname=${flagname%=*} # strip everything after the =
        flagname="${flagname}=" # but put the = back
    fi
    __sdb-deploy_debug "${FUNCNAME[0]}: looking for ${flagname}"
    if __sdb-deploy_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
        must_have_one_flag=()
    fi

    # if you set a flag which only applies to this command, don't show subcommands
    if __sdb-deploy_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
      commands=()
    fi

    # keep flag value with flagname as flaghash
    # flaghash variable is an associative array which is only supported in bash > 3.
    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
        if [ -n "${flagvalue}" ] ; then
            flaghash[${flagname}]=${flagvalue}
        elif [ -n "${words[ $((c+1)) ]}" ] ; then
            flaghash[${flagname}]=${words[ $((c+1)) ]}
        else
            flaghash[${flagname}]="true" # pad "true" for bool flag
        fi
    fi

    # skip the argument to a two word flag
    if [[ ${words[c]} != *"="* ]] && __sdb-deploy_contains_word "${words[c]}" "${two_word_flags[@]}"; then
			  __sdb-deploy_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument"
        c=$((c+1))
        # if we are looking for a flags value, don't show commands
        if [[ $c -eq $cword ]]; then
            commands=()
        fi
    fi

    c=$((c+1))

}

__sdb-deploy_handle_noun()
{
    __sdb-deploy_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    if __sdb-deploy_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
        must_have_one_noun=()
    elif __sdb-deploy_contains_word "${words[c]}" "${noun_aliases[@]}"; then
        must_have_one_noun=()
    fi

    nouns+=("${words[c]}")
    c=$((c+1))
}

__sdb-deploy_handle_command()
{
    __sdb-deploy_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    local next_command
    if [[ -n ${last_command} ]]; then
        next_command="_${last_command}_${words[c]//:/__}"
    else
        if [[ $c -eq 0 ]]; then
            next_command="_sdb-deploy_root_command"
        else
            next_command="_${words[c]//:/__}"
        fi
    fi
    c=$((c+1))
    __sdb-deploy_debug "${FUNCNAME[0]}: looking for ${next_command}"
    declare -F "$next_command" >/dev/null && $next_command
}

__sdb-deploy_handle_word()
{
    if [[ $c -ge $cword ]]; then
        __sdb-deploy_handle_reply
        return
    fi
    __sdb-deploy_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
    if [[ "${words[c]}" == -* ]]; then
        __sdb-deploy_handle_flag
    elif __sdb-deploy_contains_word "${words[c]}" "${commands[@]}"; then
        __sdb-deploy_handle_command
    elif [[ $c -eq 0 ]]; then
        __sdb-deploy_handle_command
    elif __sdb-deploy_contains_word "${words[c]}" "${command_aliases[@]}"; then
        # aliashash variable is an associative array which is only supported in bash > 3.
        if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
            words[c]=${aliashash[${words[c]}]}
            __sdb-deploy_handle_command
        else
            __sdb-deploy_handle_noun
        fi
    else
        __sdb-deploy_handle_noun
    fi
    __sdb-deploy_handle_word
}

_sdb-deploy_destroy-cluster()
{
    last_command="sdb-deploy_destroy-cluster"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--force-package-format=")
    two_word_flags+=("--force-package-format")
    local_nonpersistent_flags+=("--force-package-format=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_env()
{
    last_command="sdb-deploy_env"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_generate-cluster-file()
{
    last_command="sdb-deploy_generate-cluster-file"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--output-path=")
    two_word_flags+=("--output-path")
    local_nonpersistent_flags+=("--output-path=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_install()
{
    last_command="sdb-deploy_install"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    local_nonpersistent_flags+=("--all")
    flags+=("--file-path=")
    two_word_flags+=("--file-path")
    local_nonpersistent_flags+=("--file-path=")
    flags+=("--force-package-format=")
    two_word_flags+=("--force-package-format")
    local_nonpersistent_flags+=("--force-package-format=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--preinstalled-path=")
    two_word_flags+=("--preinstalled-path")
    local_nonpersistent_flags+=("--preinstalled-path=")
    flags+=("--temp-dir=")
    two_word_flags+=("--temp-dir")
    local_nonpersistent_flags+=("--temp-dir=")
    flags+=("--version=")
    two_word_flags+=("--version")
    local_nonpersistent_flags+=("--version=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_list-versions()
{
    last_command="sdb-deploy_list-versions"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--force-package-format=")
    two_word_flags+=("--force-package-format")
    local_nonpersistent_flags+=("--force-package-format=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_setup-cluster()
{
    last_command="sdb-deploy_setup-cluster"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--aggregator-hosts=")
    two_word_flags+=("--aggregator-hosts")
    local_nonpersistent_flags+=("--aggregator-hosts=")
    flags+=("--allow-duplicate-host-fingerprints")
    local_nonpersistent_flags+=("--allow-duplicate-host-fingerprints")
    flags+=("--allow-ipv6")
    local_nonpersistent_flags+=("--allow-ipv6")
    flags+=("--base-install-dir=")
    two_word_flags+=("--base-install-dir")
    local_nonpersistent_flags+=("--base-install-dir=")
    flags+=("--cluster-file=")
    two_word_flags+=("--cluster-file")
    local_nonpersistent_flags+=("--cluster-file=")
    flags+=("--data-dir=")
    two_word_flags+=("--data-dir")
    local_nonpersistent_flags+=("--data-dir=")
    flags+=("--file-path=")
    two_word_flags+=("--file-path")
    local_nonpersistent_flags+=("--file-path=")
    flags+=("--force-package-format=")
    two_word_flags+=("--force-package-format")
    local_nonpersistent_flags+=("--force-package-format=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--high-availability")
    local_nonpersistent_flags+=("--high-availability")
    flags+=("--hosts-file=")
    two_word_flags+=("--hosts-file")
    local_nonpersistent_flags+=("--hosts-file=")
    flags+=("--identity-file=")
    two_word_flags+=("--identity-file")
    two_word_flags+=("-i")
    local_nonpersistent_flags+=("--identity-file=")
    flags+=("--leaf-hosts=")
    two_word_flags+=("--leaf-hosts")
    local_nonpersistent_flags+=("--leaf-hosts=")
    flags+=("--license=")
    two_word_flags+=("--license")
    local_nonpersistent_flags+=("--license=")
    flags+=("--load-balanced")
    local_nonpersistent_flags+=("--load-balanced")
    flags+=("--master-host=")
    two_word_flags+=("--master-host")
    local_nonpersistent_flags+=("--master-host=")
    flags+=("--memsql-port=")
    two_word_flags+=("--memsql-port")
    local_nonpersistent_flags+=("--memsql-port=")
    flags+=("--password=")
    two_word_flags+=("--password")
    local_nonpersistent_flags+=("--password=")
    flags+=("--preinstalled-path=")
    two_word_flags+=("--preinstalled-path")
    local_nonpersistent_flags+=("--preinstalled-path=")
    flags+=("--skip-auto-config")
    local_nonpersistent_flags+=("--skip-auto-config")
    flags+=("--skip-feature-flags-enabling")
    local_nonpersistent_flags+=("--skip-feature-flags-enabling")
    flags+=("--skip-validate-env")
    local_nonpersistent_flags+=("--skip-validate-env")
    flags+=("--ssl-fips-mode=")
    two_word_flags+=("--ssl-fips-mode")
    local_nonpersistent_flags+=("--ssl-fips-mode=")
    flags+=("--temp-dir=")
    two_word_flags+=("--temp-dir")
    local_nonpersistent_flags+=("--temp-dir=")
    flags+=("--version=")
    two_word_flags+=("--version")
    local_nonpersistent_flags+=("--version=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_state()
{
    last_command="sdb-deploy_state"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_ui()
{
    last_command="sdb-deploy_ui"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--cert=")
    two_word_flags+=("--cert")
    local_nonpersistent_flags+=("--cert=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--key=")
    two_word_flags+=("--key")
    local_nonpersistent_flags+=("--key=")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--studio-location=")
    two_word_flags+=("--studio-location")
    local_nonpersistent_flags+=("--studio-location=")
    flags+=("--success-shutdown=")
    two_word_flags+=("--success-shutdown")
    local_nonpersistent_flags+=("--success-shutdown=")
    flags+=("--time-to-live=")
    two_word_flags+=("--time-to-live")
    local_nonpersistent_flags+=("--time-to-live=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_uninstall()
{
    last_command="sdb-deploy_uninstall"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    local_nonpersistent_flags+=("--all")
    flags+=("--all-versions")
    local_nonpersistent_flags+=("--all-versions")
    flags+=("--force-package-format=")
    two_word_flags+=("--force-package-format")
    local_nonpersistent_flags+=("--force-package-format=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--version=")
    two_word_flags+=("--version")
    local_nonpersistent_flags+=("--version=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_upgrade()
{
    last_command="sdb-deploy_upgrade"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--disable-auto-restart")
    local_nonpersistent_flags+=("--disable-auto-restart")
    flags+=("--file-path=")
    two_word_flags+=("--file-path")
    local_nonpersistent_flags+=("--file-path=")
    flags+=("--force-package-format=")
    two_word_flags+=("--force-package-format")
    local_nonpersistent_flags+=("--force-package-format=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--online")
    local_nonpersistent_flags+=("--online")
    flags+=("--precheck-only")
    local_nonpersistent_flags+=("--precheck-only")
    flags+=("--preinstalled-path=")
    two_word_flags+=("--preinstalled-path")
    local_nonpersistent_flags+=("--preinstalled-path=")
    flags+=("--report-path=")
    two_word_flags+=("--report-path")
    local_nonpersistent_flags+=("--report-path=")
    flags+=("--set-configs=")
    two_word_flags+=("--set-configs")
    local_nonpersistent_flags+=("--set-configs=")
    flags+=("--skip-feature-flags-enabling")
    local_nonpersistent_flags+=("--skip-feature-flags-enabling")
    flags+=("--skip-report")
    local_nonpersistent_flags+=("--skip-report")
    flags+=("--skip-system-warnings")
    local_nonpersistent_flags+=("--skip-system-warnings")
    flags+=("--skip-uninstall")
    local_nonpersistent_flags+=("--skip-uninstall")
    flags+=("--skip-version-check")
    local_nonpersistent_flags+=("--skip-version-check")
    flags+=("--temp-dir=")
    two_word_flags+=("--temp-dir")
    local_nonpersistent_flags+=("--temp-dir=")
    flags+=("--upgrade-to-latest-patch")
    local_nonpersistent_flags+=("--upgrade-to-latest-patch")
    flags+=("--version=")
    two_word_flags+=("--version")
    local_nonpersistent_flags+=("--version=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_version()
{
    last_command="sdb-deploy_version"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-deploy_root_command()
{
    last_command="sdb-deploy"

    command_aliases=()

    commands=()
    commands+=("destroy-cluster")
    commands+=("env")
    commands+=("generate-cluster-file")
    commands+=("install")
    commands+=("list-versions")
    commands+=("setup-cluster")
    commands+=("state")
    commands+=("ui")
    commands+=("uninstall")
    commands+=("upgrade")
    commands+=("version")

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

__start_sdb-deploy()
{
    local cur prev words cword
    declare -A flaghash 2>/dev/null || :
    declare -A aliashash 2>/dev/null || :
    if declare -F _init_completion >/dev/null 2>&1; then
        _init_completion -s || return
    else
        __sdb-deploy_init_completion -n "=" || return
    fi

    local c=0
    local flags=()
    local two_word_flags=()
    local local_nonpersistent_flags=()
    local flags_with_completion=()
    local flags_completion=()
    local commands=("sdb-deploy")
    local must_have_one_flag=()
    local must_have_one_noun=()
    local has_completion_function
    local last_command
    local nouns=()

    __sdb-deploy_handle_word
}

if [[ $(type -t compopt) = "builtin" ]]; then
    complete -o default -F __start_sdb-deploy sdb-deploy
else
    complete -o default -o nospace -F __start_sdb-deploy sdb-deploy
fi

# ex: ts=4 sw=4 et filetype=sh
# bash completion for sdb-report                           -*- shell-script -*-

__sdb-report_debug()
{
    if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then
        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
    fi
}

# Homebrew on Macs have version 1.3 of bash-completion which doesn't include
# _init_completion. This is a very minimal version of that function.
__sdb-report_init_completion()
{
    COMPREPLY=()
    _get_comp_words_by_ref "$@" cur prev words cword
}

__sdb-report_index_of_word()
{
    local w word=$1
    shift
    index=0
    for w in "$@"; do
        [[ $w = "$word" ]] && return
        index=$((index+1))
    done
    index=-1
}

__sdb-report_contains_word()
{
    local w word=$1; shift
    for w in "$@"; do
        [[ $w = "$word" ]] && return
    done
    return 1
}

__sdb-report_handle_go_custom_completion()
{
    __sdb-report_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"

    local out requestComp lastParam lastChar comp directive args

    # Prepare the command to request completions for the program.
    # Calling ${words[0]} instead of directly sdb-report allows to handle aliases
    args=("${words[@]:1}")
    requestComp="${words[0]} __completeNoDesc ${args[*]}"

    lastParam=${words[$((${#words[@]}-1))]}
    lastChar=${lastParam:$((${#lastParam}-1)):1}
    __sdb-report_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"

    if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
        # If the last parameter is complete (there is a space following it)
        # We add an extra empty parameter so we can indicate this to the go method.
        __sdb-report_debug "${FUNCNAME[0]}: Adding extra empty parameter"
        requestComp="${requestComp} \"\""
    fi

    __sdb-report_debug "${FUNCNAME[0]}: calling ${requestComp}"
    # Use eval to handle any environment variables and such
    out=$(eval "${requestComp}" 2>/dev/null)

    # Extract the directive integer at the very end of the output following a colon (:)
    directive=${out##*:}
    # Remove the directive
    out=${out%:*}
    if [ "${directive}" = "${out}" ]; then
        # There is not directive specified
        directive=0
    fi
    __sdb-report_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
    __sdb-report_debug "${FUNCNAME[0]}: the completions are: ${out[*]}"

    if [ $((directive & 1)) -ne 0 ]; then
        # Error code.  No completion.
        __sdb-report_debug "${FUNCNAME[0]}: received error from custom completion go code"
        return
    else
        if [ $((directive & 2)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __sdb-report_debug "${FUNCNAME[0]}: activating no space"
                compopt -o nospace
            fi
        fi
        if [ $((directive & 4)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __sdb-report_debug "${FUNCNAME[0]}: activating no file completion"
                compopt +o default
            fi
        fi

        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${out[*]}" -- "$cur")
    fi
}

__sdb-report_handle_reply()
{
    __sdb-report_debug "${FUNCNAME[0]}"
    local comp
    case $cur in
        -*)
            if [[ $(type -t compopt) = "builtin" ]]; then
                compopt -o nospace
            fi
            local allflags
            if [ ${#must_have_one_flag[@]} -ne 0 ]; then
                allflags=("${must_have_one_flag[@]}")
            else
                allflags=("${flags[*]} ${two_word_flags[*]}")
            fi
            while IFS='' read -r comp; do
                COMPREPLY+=("$comp")
            done < <(compgen -W "${allflags[*]}" -- "$cur")
            if [[ $(type -t compopt) = "builtin" ]]; then
                [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
            fi

            # complete after --flag=abc
            if [[ $cur == *=* ]]; then
                if [[ $(type -t compopt) = "builtin" ]]; then
                    compopt +o nospace
                fi

                local index flag
                flag="${cur%=*}"
                __sdb-report_index_of_word "${flag}" "${flags_with_completion[@]}"
                COMPREPLY=()
                if [[ ${index} -ge 0 ]]; then
                    PREFIX=""
                    cur="${cur#*=}"
                    ${flags_completion[${index}]}
                    if [ -n "${ZSH_VERSION}" ]; then
                        # zsh completion needs --flag= prefix
                        eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
                    fi
                fi
            fi
            return 0;
            ;;
    esac

    # check if we are handling a flag with special work handling
    local index
    __sdb-report_index_of_word "${prev}" "${flags_with_completion[@]}"
    if [[ ${index} -ge 0 ]]; then
        ${flags_completion[${index}]}
        return
    fi

    # we are parsing a flag and don't have a special handler, no completion
    if [[ ${cur} != "${words[cword]}" ]]; then
        return
    fi

    local completions
    completions=("${commands[@]}")
    if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
        completions=("${must_have_one_noun[@]}")
    elif [[ -n "${has_completion_function}" ]]; then
        # if a go completion function is provided, defer to that function
        completions=()
        __sdb-report_handle_go_custom_completion
    fi
    if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
        completions+=("${must_have_one_flag[@]}")
    fi
    while IFS='' read -r comp; do
        COMPREPLY+=("$comp")
    done < <(compgen -W "${completions[*]}" -- "$cur")

    if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
    fi

    if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
		if declare -F __sdb-report_custom_func >/dev/null; then
			# try command name qualified custom func
			__sdb-report_custom_func
		else
			# otherwise fall back to unqualified for compatibility
			declare -F __custom_func >/dev/null && __custom_func
		fi
    fi

    # available in bash-completion >= 2, not always present on macOS
    if declare -F __ltrim_colon_completions >/dev/null; then
        __ltrim_colon_completions "$cur"
    fi

    # If there is only 1 completion and it is a flag with an = it will be completed
    # but we don't want a space after the =
    if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
       compopt -o nospace
    fi
}

# The arguments should be in the form "ext1|ext2|extn"
__sdb-report_handle_filename_extension_flag()
{
    local ext="$1"
    _filedir "@(${ext})"
}

__sdb-report_handle_subdirs_in_dir_flag()
{
    local dir="$1"
    pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
}

__sdb-report_handle_flag()
{
    __sdb-report_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    # if a command required a flag, and we found it, unset must_have_one_flag()
    local flagname=${words[c]}
    local flagvalue
    # if the word contained an =
    if [[ ${words[c]} == *"="* ]]; then
        flagvalue=${flagname#*=} # take in as flagvalue after the =
        flagname=${flagname%=*} # strip everything after the =
        flagname="${flagname}=" # but put the = back
    fi
    __sdb-report_debug "${FUNCNAME[0]}: looking for ${flagname}"
    if __sdb-report_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
        must_have_one_flag=()
    fi

    # if you set a flag which only applies to this command, don't show subcommands
    if __sdb-report_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
      commands=()
    fi

    # keep flag value with flagname as flaghash
    # flaghash variable is an associative array which is only supported in bash > 3.
    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
        if [ -n "${flagvalue}" ] ; then
            flaghash[${flagname}]=${flagvalue}
        elif [ -n "${words[ $((c+1)) ]}" ] ; then
            flaghash[${flagname}]=${words[ $((c+1)) ]}
        else
            flaghash[${flagname}]="true" # pad "true" for bool flag
        fi
    fi

    # skip the argument to a two word flag
    if [[ ${words[c]} != *"="* ]] && __sdb-report_contains_word "${words[c]}" "${two_word_flags[@]}"; then
			  __sdb-report_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument"
        c=$((c+1))
        # if we are looking for a flags value, don't show commands
        if [[ $c -eq $cword ]]; then
            commands=()
        fi
    fi

    c=$((c+1))

}

__sdb-report_handle_noun()
{
    __sdb-report_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    if __sdb-report_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
        must_have_one_noun=()
    elif __sdb-report_contains_word "${words[c]}" "${noun_aliases[@]}"; then
        must_have_one_noun=()
    fi

    nouns+=("${words[c]}")
    c=$((c+1))
}

__sdb-report_handle_command()
{
    __sdb-report_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    local next_command
    if [[ -n ${last_command} ]]; then
        next_command="_${last_command}_${words[c]//:/__}"
    else
        if [[ $c -eq 0 ]]; then
            next_command="_sdb-report_root_command"
        else
            next_command="_${words[c]//:/__}"
        fi
    fi
    c=$((c+1))
    __sdb-report_debug "${FUNCNAME[0]}: looking for ${next_command}"
    declare -F "$next_command" >/dev/null && $next_command
}

__sdb-report_handle_word()
{
    if [[ $c -ge $cword ]]; then
        __sdb-report_handle_reply
        return
    fi
    __sdb-report_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
    if [[ "${words[c]}" == -* ]]; then
        __sdb-report_handle_flag
    elif __sdb-report_contains_word "${words[c]}" "${commands[@]}"; then
        __sdb-report_handle_command
    elif [[ $c -eq 0 ]]; then
        __sdb-report_handle_command
    elif __sdb-report_contains_word "${words[c]}" "${command_aliases[@]}"; then
        # aliashash variable is an associative array which is only supported in bash > 3.
        if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
            words[c]=${aliashash[${words[c]}]}
            __sdb-report_handle_command
        else
            __sdb-report_handle_noun
        fi
    else
        __sdb-report_handle_noun
    fi
    __sdb-report_handle_word
}

_sdb-report_calibrate()
{
    last_command="sdb-report_calibrate"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--data-path=")
    two_word_flags+=("--data-path")
    local_nonpersistent_flags+=("--data-path=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--partition-ratio=")
    two_word_flags+=("--partition-ratio")
    local_nonpersistent_flags+=("--partition-ratio=")
    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password=")
    flags+=("--retain-database")
    local_nonpersistent_flags+=("--retain-database")
    flags+=("--temp-dir=")
    two_word_flags+=("--temp-dir")
    local_nonpersistent_flags+=("--temp-dir=")
    flags+=("--user=")
    two_word_flags+=("--user")
    two_word_flags+=("-u")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_calibrate-blob-storage()
{
    last_command="sdb-report_calibrate-blob-storage"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--blob-cache-eviction=")
    two_word_flags+=("--blob-cache-eviction")
    local_nonpersistent_flags+=("--blob-cache-eviction=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password=")
    flags+=("--repository=")
    two_word_flags+=("--repository")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--repository=")
    flags+=("--user=")
    two_word_flags+=("--user")
    two_word_flags+=("-u")
    local_nonpersistent_flags+=("--user=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--repository=")
    must_have_one_flag+=("-r")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_check()
{
    last_command="sdb-report_check"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--exclude=")
    two_word_flags+=("--exclude")
    local_nonpersistent_flags+=("--exclude=")
    flags+=("--exclude-global")
    local_nonpersistent_flags+=("--exclude-global")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--include=")
    two_word_flags+=("--include")
    local_nonpersistent_flags+=("--include=")
    flags+=("--include-performance")
    local_nonpersistent_flags+=("--include-performance")
    flags+=("--mask-ip")
    local_nonpersistent_flags+=("--mask-ip")
    flags+=("--only=")
    two_word_flags+=("--only")
    local_nonpersistent_flags+=("--only=")
    flags+=("--report-path=")
    two_word_flags+=("--report-path")
    two_word_flags+=("-i")
    local_nonpersistent_flags+=("--report-path=")
    flags+=("--security-recommendations")
    local_nonpersistent_flags+=("--security-recommendations")
    flags+=("--show-skips")
    local_nonpersistent_flags+=("--show-skips")
    flags+=("--temp-dir=")
    two_word_flags+=("--temp-dir")
    local_nonpersistent_flags+=("--temp-dir=")
    flags+=("--validate-env")
    local_nonpersistent_flags+=("--validate-env")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_flag+=("--report-path=")
    must_have_one_flag+=("-i")
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_collect()
{
    last_command="sdb-report_collect"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--exclude=")
    two_word_flags+=("--exclude")
    local_nonpersistent_flags+=("--exclude=")
    flags+=("--exclude-global")
    local_nonpersistent_flags+=("--exclude-global")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--include=")
    two_word_flags+=("--include")
    local_nonpersistent_flags+=("--include=")
    flags+=("--include-performance")
    local_nonpersistent_flags+=("--include-performance")
    flags+=("--mask-ip")
    local_nonpersistent_flags+=("--mask-ip")
    flags+=("--merge-path=")
    two_word_flags+=("--merge-path")
    local_nonpersistent_flags+=("--merge-path=")
    flags+=("--only=")
    two_word_flags+=("--only")
    local_nonpersistent_flags+=("--only=")
    flags+=("--opt=")
    two_word_flags+=("--opt")
    local_nonpersistent_flags+=("--opt=")
    flags+=("--output-path=")
    two_word_flags+=("--output-path")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output-path=")
    flags+=("--security-recommendations")
    local_nonpersistent_flags+=("--security-recommendations")
    flags+=("--shard-queries")
    local_nonpersistent_flags+=("--shard-queries")
    flags+=("--temp-dir=")
    two_word_flags+=("--temp-dir")
    local_nonpersistent_flags+=("--temp-dir=")
    flags+=("--validate-env")
    local_nonpersistent_flags+=("--validate-env")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_collect-and-check()
{
    last_command="sdb-report_collect-and-check"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--exclude=")
    two_word_flags+=("--exclude")
    local_nonpersistent_flags+=("--exclude=")
    flags+=("--exclude-global")
    local_nonpersistent_flags+=("--exclude-global")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--include=")
    two_word_flags+=("--include")
    local_nonpersistent_flags+=("--include=")
    flags+=("--include-performance")
    local_nonpersistent_flags+=("--include-performance")
    flags+=("--mask-ip")
    local_nonpersistent_flags+=("--mask-ip")
    flags+=("--only=")
    two_word_flags+=("--only")
    local_nonpersistent_flags+=("--only=")
    flags+=("--opt=")
    two_word_flags+=("--opt")
    local_nonpersistent_flags+=("--opt=")
    flags+=("--security-recommendations")
    local_nonpersistent_flags+=("--security-recommendations")
    flags+=("--shard-queries")
    local_nonpersistent_flags+=("--shard-queries")
    flags+=("--show-skips")
    local_nonpersistent_flags+=("--show-skips")
    flags+=("--temp-dir=")
    two_word_flags+=("--temp-dir")
    local_nonpersistent_flags+=("--temp-dir=")
    flags+=("--validate-env")
    local_nonpersistent_flags+=("--validate-env")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_collect-kube()
{
    last_command="sdb-report_collect-kube"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--cluster-name=")
    two_word_flags+=("--cluster-name")
    local_nonpersistent_flags+=("--cluster-name=")
    flags+=("--config-file=")
    two_word_flags+=("--config-file")
    local_nonpersistent_flags+=("--config-file=")
    flags+=("--container=")
    two_word_flags+=("--container")
    local_nonpersistent_flags+=("--container=")
    flags+=("--context=")
    two_word_flags+=("--context")
    local_nonpersistent_flags+=("--context=")
    flags+=("--exclude=")
    two_word_flags+=("--exclude")
    local_nonpersistent_flags+=("--exclude=")
    flags+=("--exclude-global")
    local_nonpersistent_flags+=("--exclude-global")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--include=")
    two_word_flags+=("--include")
    local_nonpersistent_flags+=("--include=")
    flags+=("--include-performance")
    local_nonpersistent_flags+=("--include-performance")
    flags+=("--mask-ip")
    local_nonpersistent_flags+=("--mask-ip")
    flags+=("--merge-path=")
    two_word_flags+=("--merge-path")
    local_nonpersistent_flags+=("--merge-path=")
    flags+=("--namespace=")
    two_word_flags+=("--namespace")
    local_nonpersistent_flags+=("--namespace=")
    flags+=("--only=")
    two_word_flags+=("--only")
    local_nonpersistent_flags+=("--only=")
    flags+=("--opt=")
    two_word_flags+=("--opt")
    local_nonpersistent_flags+=("--opt=")
    flags+=("--output-path=")
    two_word_flags+=("--output-path")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output-path=")
    flags+=("--security-recommendations")
    local_nonpersistent_flags+=("--security-recommendations")
    flags+=("--shard-queries")
    local_nonpersistent_flags+=("--shard-queries")
    flags+=("--temp-dir=")
    two_word_flags+=("--temp-dir")
    local_nonpersistent_flags+=("--temp-dir=")
    flags+=("--validate-env")
    local_nonpersistent_flags+=("--validate-env")
    flags+=("--version=")
    two_word_flags+=("--version")
    local_nonpersistent_flags+=("--version=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_collect-local()
{
    last_command="sdb-report_collect-local"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--exclude=")
    two_word_flags+=("--exclude")
    local_nonpersistent_flags+=("--exclude=")
    flags+=("--exclude-global")
    local_nonpersistent_flags+=("--exclude-global")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--hostname=")
    two_word_flags+=("--hostname")
    local_nonpersistent_flags+=("--hostname=")
    flags+=("--include=")
    two_word_flags+=("--include")
    local_nonpersistent_flags+=("--include=")
    flags+=("--include-performance")
    local_nonpersistent_flags+=("--include-performance")
    flags+=("--mask-ip")
    local_nonpersistent_flags+=("--mask-ip")
    flags+=("--memsqlctl-config-path=")
    two_word_flags+=("--memsqlctl-config-path")
    local_nonpersistent_flags+=("--memsqlctl-config-path=")
    flags+=("--memsqlctl-path=")
    two_word_flags+=("--memsqlctl-path")
    local_nonpersistent_flags+=("--memsqlctl-path=")
    flags+=("--only=")
    two_word_flags+=("--only")
    local_nonpersistent_flags+=("--only=")
    flags+=("--opt=")
    two_word_flags+=("--opt")
    local_nonpersistent_flags+=("--opt=")
    flags+=("--output-path=")
    two_word_flags+=("--output-path")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output-path=")
    flags+=("--security-recommendations")
    local_nonpersistent_flags+=("--security-recommendations")
    flags+=("--shard-queries")
    local_nonpersistent_flags+=("--shard-queries")
    flags+=("--validate-env")
    local_nonpersistent_flags+=("--validate-env")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_env()
{
    last_command="sdb-report_env"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_send-alert()
{
    last_command="sdb-report_send-alert"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--alert-location=")
    two_word_flags+=("--alert-location")
    local_nonpersistent_flags+=("--alert-location=")
    flags+=("--config-file=")
    two_word_flags+=("--config-file")
    local_nonpersistent_flags+=("--config-file=")
    flags+=("--fail-only")
    local_nonpersistent_flags+=("--fail-only")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--summary-only")
    local_nonpersistent_flags+=("--summary-only")
    flags+=("--thresholds=")
    two_word_flags+=("--thresholds")
    local_nonpersistent_flags+=("--thresholds=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_state()
{
    last_command="sdb-report_state"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_version()
{
    last_command="sdb-report_version"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-report_root_command()
{
    last_command="sdb-report"

    command_aliases=()

    commands=()
    commands+=("calibrate")
    commands+=("calibrate-blob-storage")
    commands+=("check")
    commands+=("collect")
    commands+=("collect-and-check")
    commands+=("collect-kube")
    commands+=("collect-local")
    commands+=("env")
    commands+=("send-alert")
    commands+=("state")
    commands+=("version")

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-control-persist=")
    two_word_flags+=("--ssh-control-persist")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

__start_sdb-report()
{
    local cur prev words cword
    declare -A flaghash 2>/dev/null || :
    declare -A aliashash 2>/dev/null || :
    if declare -F _init_completion >/dev/null 2>&1; then
        _init_completion -s || return
    else
        __sdb-report_init_completion -n "=" || return
    fi

    local c=0
    local flags=()
    local two_word_flags=()
    local local_nonpersistent_flags=()
    local flags_with_completion=()
    local flags_completion=()
    local commands=("sdb-report")
    local must_have_one_flag=()
    local must_have_one_noun=()
    local has_completion_function
    local last_command
    local nouns=()

    __sdb-report_handle_word
}

if [[ $(type -t compopt) = "builtin" ]]; then
    complete -o default -F __start_sdb-report sdb-report
else
    complete -o default -o nospace -F __start_sdb-report sdb-report
fi

# ex: ts=4 sw=4 et filetype=sh
# bash completion for sdb-toolbox-config                   -*- shell-script -*-

__sdb-toolbox-config_debug()
{
    if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then
        echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
    fi
}

# Homebrew on Macs have version 1.3 of bash-completion which doesn't include
# _init_completion. This is a very minimal version of that function.
__sdb-toolbox-config_init_completion()
{
    COMPREPLY=()
    _get_comp_words_by_ref "$@" cur prev words cword
}

__sdb-toolbox-config_index_of_word()
{
    local w word=$1
    shift
    index=0
    for w in "$@"; do
        [[ $w = "$word" ]] && return
        index=$((index+1))
    done
    index=-1
}

__sdb-toolbox-config_contains_word()
{
    local w word=$1; shift
    for w in "$@"; do
        [[ $w = "$word" ]] && return
    done
    return 1
}

__sdb-toolbox-config_handle_go_custom_completion()
{
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"

    local out requestComp lastParam lastChar comp directive args

    # Prepare the command to request completions for the program.
    # Calling ${words[0]} instead of directly sdb-toolbox-config allows to handle aliases
    args=("${words[@]:1}")
    requestComp="${words[0]} __completeNoDesc ${args[*]}"

    lastParam=${words[$((${#words[@]}-1))]}
    lastChar=${lastParam:$((${#lastParam}-1)):1}
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"

    if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
        # If the last parameter is complete (there is a space following it)
        # We add an extra empty parameter so we can indicate this to the go method.
        __sdb-toolbox-config_debug "${FUNCNAME[0]}: Adding extra empty parameter"
        requestComp="${requestComp} \"\""
    fi

    __sdb-toolbox-config_debug "${FUNCNAME[0]}: calling ${requestComp}"
    # Use eval to handle any environment variables and such
    out=$(eval "${requestComp}" 2>/dev/null)

    # Extract the directive integer at the very end of the output following a colon (:)
    directive=${out##*:}
    # Remove the directive
    out=${out%:*}
    if [ "${directive}" = "${out}" ]; then
        # There is not directive specified
        directive=0
    fi
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: the completions are: ${out[*]}"

    if [ $((directive & 1)) -ne 0 ]; then
        # Error code.  No completion.
        __sdb-toolbox-config_debug "${FUNCNAME[0]}: received error from custom completion go code"
        return
    else
        if [ $((directive & 2)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __sdb-toolbox-config_debug "${FUNCNAME[0]}: activating no space"
                compopt -o nospace
            fi
        fi
        if [ $((directive & 4)) -ne 0 ]; then
            if [[ $(type -t compopt) = "builtin" ]]; then
                __sdb-toolbox-config_debug "${FUNCNAME[0]}: activating no file completion"
                compopt +o default
            fi
        fi

        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${out[*]}" -- "$cur")
    fi
}

__sdb-toolbox-config_handle_reply()
{
    __sdb-toolbox-config_debug "${FUNCNAME[0]}"
    local comp
    case $cur in
        -*)
            if [[ $(type -t compopt) = "builtin" ]]; then
                compopt -o nospace
            fi
            local allflags
            if [ ${#must_have_one_flag[@]} -ne 0 ]; then
                allflags=("${must_have_one_flag[@]}")
            else
                allflags=("${flags[*]} ${two_word_flags[*]}")
            fi
            while IFS='' read -r comp; do
                COMPREPLY+=("$comp")
            done < <(compgen -W "${allflags[*]}" -- "$cur")
            if [[ $(type -t compopt) = "builtin" ]]; then
                [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
            fi

            # complete after --flag=abc
            if [[ $cur == *=* ]]; then
                if [[ $(type -t compopt) = "builtin" ]]; then
                    compopt +o nospace
                fi

                local index flag
                flag="${cur%=*}"
                __sdb-toolbox-config_index_of_word "${flag}" "${flags_with_completion[@]}"
                COMPREPLY=()
                if [[ ${index} -ge 0 ]]; then
                    PREFIX=""
                    cur="${cur#*=}"
                    ${flags_completion[${index}]}
                    if [ -n "${ZSH_VERSION}" ]; then
                        # zsh completion needs --flag= prefix
                        eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
                    fi
                fi
            fi
            return 0;
            ;;
    esac

    # check if we are handling a flag with special work handling
    local index
    __sdb-toolbox-config_index_of_word "${prev}" "${flags_with_completion[@]}"
    if [[ ${index} -ge 0 ]]; then
        ${flags_completion[${index}]}
        return
    fi

    # we are parsing a flag and don't have a special handler, no completion
    if [[ ${cur} != "${words[cword]}" ]]; then
        return
    fi

    local completions
    completions=("${commands[@]}")
    if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
        completions=("${must_have_one_noun[@]}")
    elif [[ -n "${has_completion_function}" ]]; then
        # if a go completion function is provided, defer to that function
        completions=()
        __sdb-toolbox-config_handle_go_custom_completion
    fi
    if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
        completions+=("${must_have_one_flag[@]}")
    fi
    while IFS='' read -r comp; do
        COMPREPLY+=("$comp")
    done < <(compgen -W "${completions[*]}" -- "$cur")

    if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
    fi

    if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
		if declare -F __sdb-toolbox-config_custom_func >/dev/null; then
			# try command name qualified custom func
			__sdb-toolbox-config_custom_func
		else
			# otherwise fall back to unqualified for compatibility
			declare -F __custom_func >/dev/null && __custom_func
		fi
    fi

    # available in bash-completion >= 2, not always present on macOS
    if declare -F __ltrim_colon_completions >/dev/null; then
        __ltrim_colon_completions "$cur"
    fi

    # If there is only 1 completion and it is a flag with an = it will be completed
    # but we don't want a space after the =
    if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
       compopt -o nospace
    fi
}

# The arguments should be in the form "ext1|ext2|extn"
__sdb-toolbox-config_handle_filename_extension_flag()
{
    local ext="$1"
    _filedir "@(${ext})"
}

__sdb-toolbox-config_handle_subdirs_in_dir_flag()
{
    local dir="$1"
    pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
}

__sdb-toolbox-config_handle_flag()
{
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    # if a command required a flag, and we found it, unset must_have_one_flag()
    local flagname=${words[c]}
    local flagvalue
    # if the word contained an =
    if [[ ${words[c]} == *"="* ]]; then
        flagvalue=${flagname#*=} # take in as flagvalue after the =
        flagname=${flagname%=*} # strip everything after the =
        flagname="${flagname}=" # but put the = back
    fi
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: looking for ${flagname}"
    if __sdb-toolbox-config_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
        must_have_one_flag=()
    fi

    # if you set a flag which only applies to this command, don't show subcommands
    if __sdb-toolbox-config_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
      commands=()
    fi

    # keep flag value with flagname as flaghash
    # flaghash variable is an associative array which is only supported in bash > 3.
    if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
        if [ -n "${flagvalue}" ] ; then
            flaghash[${flagname}]=${flagvalue}
        elif [ -n "${words[ $((c+1)) ]}" ] ; then
            flaghash[${flagname}]=${words[ $((c+1)) ]}
        else
            flaghash[${flagname}]="true" # pad "true" for bool flag
        fi
    fi

    # skip the argument to a two word flag
    if [[ ${words[c]} != *"="* ]] && __sdb-toolbox-config_contains_word "${words[c]}" "${two_word_flags[@]}"; then
			  __sdb-toolbox-config_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument"
        c=$((c+1))
        # if we are looking for a flags value, don't show commands
        if [[ $c -eq $cword ]]; then
            commands=()
        fi
    fi

    c=$((c+1))

}

__sdb-toolbox-config_handle_noun()
{
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    if __sdb-toolbox-config_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
        must_have_one_noun=()
    elif __sdb-toolbox-config_contains_word "${words[c]}" "${noun_aliases[@]}"; then
        must_have_one_noun=()
    fi

    nouns+=("${words[c]}")
    c=$((c+1))
}

__sdb-toolbox-config_handle_command()
{
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

    local next_command
    if [[ -n ${last_command} ]]; then
        next_command="_${last_command}_${words[c]//:/__}"
    else
        if [[ $c -eq 0 ]]; then
            next_command="_sdb-toolbox-config_root_command"
        else
            next_command="_${words[c]//:/__}"
        fi
    fi
    c=$((c+1))
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: looking for ${next_command}"
    declare -F "$next_command" >/dev/null && $next_command
}

__sdb-toolbox-config_handle_word()
{
    if [[ $c -ge $cword ]]; then
        __sdb-toolbox-config_handle_reply
        return
    fi
    __sdb-toolbox-config_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
    if [[ "${words[c]}" == -* ]]; then
        __sdb-toolbox-config_handle_flag
    elif __sdb-toolbox-config_contains_word "${words[c]}" "${commands[@]}"; then
        __sdb-toolbox-config_handle_command
    elif [[ $c -eq 0 ]]; then
        __sdb-toolbox-config_handle_command
    elif __sdb-toolbox-config_contains_word "${words[c]}" "${command_aliases[@]}"; then
        # aliashash variable is an associative array which is only supported in bash > 3.
        if [[ -z "${BASH_VERSION}" || "${BASH_VERSINFO[0]}" -gt 3 ]]; then
            words[c]=${aliashash[${words[c]}]}
            __sdb-toolbox-config_handle_command
        else
            __sdb-toolbox-config_handle_noun
        fi
    else
        __sdb-toolbox-config_handle_noun
    fi
    __sdb-toolbox-config_handle_word
}

_sdb-toolbox-config_describe-host()
{
    last_command="sdb-toolbox-config_describe-host"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-toolbox-config_env()
{
    last_command="sdb-toolbox-config_env"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-toolbox-config_list-hosts()
{
    last_command="sdb-toolbox-config_list-hosts"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--quiet")
    flags+=("-q")
    local_nonpersistent_flags+=("--quiet")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-toolbox-config_register-host()
{
    last_command="sdb-toolbox-config_register-host"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--allow-duplicate-host-fingerprints")
    local_nonpersistent_flags+=("--allow-duplicate-host-fingerprints")
    flags+=("--cluster-hostname=")
    two_word_flags+=("--cluster-hostname")
    local_nonpersistent_flags+=("--cluster-hostname=")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--identity-file=")
    two_word_flags+=("--identity-file")
    two_word_flags+=("-i")
    local_nonpersistent_flags+=("--identity-file=")
    flags+=("--localhost")
    local_nonpersistent_flags+=("--localhost")
    flags+=("--memsqlctl-config-path=")
    two_word_flags+=("--memsqlctl-config-path")
    local_nonpersistent_flags+=("--memsqlctl-config-path=")
    flags+=("--memsqlctl-path=")
    two_word_flags+=("--memsqlctl-path")
    local_nonpersistent_flags+=("--memsqlctl-path=")
    flags+=("--skip-auto-config")
    local_nonpersistent_flags+=("--skip-auto-config")
    flags+=("--skip-validation")
    local_nonpersistent_flags+=("--skip-validation")
    flags+=("--tar-install-dir=")
    two_word_flags+=("--tar-install-dir")
    local_nonpersistent_flags+=("--tar-install-dir=")
    flags+=("--tar-install-state=")
    two_word_flags+=("--tar-install-state")
    local_nonpersistent_flags+=("--tar-install-state=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-toolbox-config_state()
{
    last_command="sdb-toolbox-config_state"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-toolbox-config_unregister-host()
{
    last_command="sdb-toolbox-config_unregister-host"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--all")
    flags+=("-a")
    local_nonpersistent_flags+=("--all")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--host=")
    two_word_flags+=("--host")
    local_nonpersistent_flags+=("--host=")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-toolbox-config_version()
{
    last_command="sdb-toolbox-config_version"

    command_aliases=()

    commands=()

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

_sdb-toolbox-config_root_command()
{
    last_command="sdb-toolbox-config"

    command_aliases=()

    commands=()
    commands+=("describe-host")
    commands+=("env")
    commands+=("list-hosts")
    commands+=("register-host")
    commands+=("state")
    commands+=("unregister-host")
    commands+=("version")

    flags=()
    two_word_flags=()
    local_nonpersistent_flags=()
    flags_with_completion=()
    flags_completion=()

    flags+=("--backup-cache=")
    two_word_flags+=("--backup-cache")
    flags+=("--cache-file=")
    two_word_flags+=("--cache-file")
    flags+=("--config=")
    two_word_flags+=("--config")
    two_word_flags+=("-c")
    flags+=("--disable-colors")
    flags+=("--disable-spinner")
    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    flags+=("--json")
    flags+=("-j")
    flags+=("--parallelism=")
    two_word_flags+=("--parallelism")
    flags+=("--runtime-dir=")
    two_word_flags+=("--runtime-dir")
    flags+=("--ssh-max-sessions=")
    two_word_flags+=("--ssh-max-sessions")
    flags+=("--ssh-strict-host-key-checking")
    flags+=("--ssh-user-known-hosts-file=")
    two_word_flags+=("--ssh-user-known-hosts-file")
    flags+=("--state-file=")
    two_word_flags+=("--state-file")
    flags+=("--verbosity")
    flags+=("-v")
    flags+=("--yes")
    flags+=("-y")

    must_have_one_flag=()
    must_have_one_noun=()
    noun_aliases=()
}

__start_sdb-toolbox-config()
{
    local cur prev words cword
    declare -A flaghash 2>/dev/null || :
    declare -A aliashash 2>/dev/null || :
    if declare -F _init_completion >/dev/null 2>&1; then
        _init_completion -s || return
    else
        __sdb-toolbox-config_init_completion -n "=" || return
    fi

    local c=0
    local flags=()
    local two_word_flags=()
    local local_nonpersistent_flags=()
    local flags_with_completion=()
    local flags_completion=()
    local commands=("sdb-toolbox-config")
    local must_have_one_flag=()
    local must_have_one_noun=()
    local has_completion_function
    local last_command
    local nouns=()

    __sdb-toolbox-config_handle_word
}

if [[ $(type -t compopt) = "builtin" ]]; then
    complete -o default -F __start_sdb-toolbox-config sdb-toolbox-config
else
    complete -o default -o nospace -F __start_sdb-toolbox-config sdb-toolbox-config
fi

# ex: ts=4 sw=4 et filetype=sh
