# bash completion for jcli                                 -*- shell-script -*-

__jcli_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.
__jcli_init_completion()
{
    COMPREPLY=()
    _get_comp_words_by_ref "$@" cur prev words cword
}

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

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

__jcli_handle_go_custom_completion()
{
    __jcli_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"

    local shellCompDirectiveError=1
    local shellCompDirectiveNoSpace=2
    local shellCompDirectiveNoFileComp=4
    local shellCompDirectiveFilterFileExt=8
    local shellCompDirectiveFilterDirs=16

    local out requestComp lastParam lastChar comp directive args

    # Prepare the command to request completions for the program.
    # Calling ${words[0]} instead of directly jcli allows to handle aliases
    args=("${words[@]:1}")
    # Disable ActiveHelp which is not supported for bash completion v1
    requestComp="JCLI_ACTIVE_HELP=0 ${words[0]} __completeNoDesc ${args[*]}"

    lastParam=${words[$((${#words[@]}-1))]}
    lastChar=${lastParam:$((${#lastParam}-1)):1}
    __jcli_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.
        __jcli_debug "${FUNCNAME[0]}: Adding extra empty parameter"
        requestComp="${requestComp} \"\""
    fi

    __jcli_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
    __jcli_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
    __jcli_debug "${FUNCNAME[0]}: the completions are: ${out}"

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

    if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
        # File extension filtering
        local fullFilter filter filteringCmd
        # Do not use quotes around the $out variable or else newline
        # characters will be kept.
        for filter in ${out}; do
            fullFilter+="$filter|"
        done

        filteringCmd="_filedir $fullFilter"
        __jcli_debug "File filtering command: $filteringCmd"
        $filteringCmd
    elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
        # File completion for directories only
        local subdir
        # Use printf to strip any trailing newline
        subdir=$(printf "%s" "${out}")
        if [ -n "$subdir" ]; then
            __jcli_debug "Listing directories in $subdir"
            __jcli_handle_subdirs_in_dir_flag "$subdir"
        else
            __jcli_debug "Listing directories in ."
            _filedir -d
        fi
    else
        while IFS='' read -r comp; do
            COMPREPLY+=("$comp")
        done < <(compgen -W "${out}" -- "$cur")
    fi
}

__jcli_handle_reply()
{
    __jcli_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%=*}"
                __jcli_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

            if [[ -z "${flag_parsing_disabled}" ]]; then
                # If flag parsing is enabled, we have completed the flags and can return.
                # If flag parsing is disabled, we may not know all (or any) of the flags, so we fallthrough
                # to possibly call handle_go_custom_completion.
                return 0;
            fi
            ;;
    esac

    # check if we are handling a flag with special work handling
    local index
    __jcli_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
        __jcli_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 __jcli_custom_func >/dev/null; then
            # try command name qualified custom func
            __jcli_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"
__jcli_handle_filename_extension_flag()
{
    local ext="$1"
    _filedir "@(${ext})"
}

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

__jcli_handle_flag()
{
    __jcli_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
    __jcli_debug "${FUNCNAME[0]}: looking for ${flagname}"
    if __jcli_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 __jcli_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]} != *"="* ]] && __jcli_contains_word "${words[c]}" "${two_word_flags[@]}"; then
        __jcli_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))

}

__jcli_handle_noun()
{
    __jcli_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"

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

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

__jcli_handle_command()
{
    __jcli_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="_jcli_root_command"
        else
            next_command="_${words[c]//:/__}"
        fi
    fi
    c=$((c+1))
    __jcli_debug "${FUNCNAME[0]}: looking for ${next_command}"
    declare -F "$next_command" >/dev/null && $next_command
}

__jcli_handle_word()
{
    if [[ $c -ge $cword ]]; then
        __jcli_handle_reply
        return
    fi
    __jcli_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
    if [[ "${words[c]}" == -* ]]; then
        __jcli_handle_flag
    elif __jcli_contains_word "${words[c]}" "${commands[@]}"; then
        __jcli_handle_command
    elif [[ $c -eq 0 ]]; then
        __jcli_handle_command
    elif __jcli_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]}]}
            __jcli_handle_command
        else
            __jcli_handle_noun
        fi
    else
        __jcli_handle_noun
    fi
    __jcli_handle_word
}

__plugin_name_parse_get()
{
    local jcli_output out
    if jcli_output=$(jcli plugin list --filter HasUpdate=true --no-headers --filter ShortName="$1" 2>/dev/null); then
        out=($(echo "${jcli_output}" | awk '{print $1}'))
        COMPREPLY=( $( compgen -W "${out[*]}" -- "$cur" ) )
    fi
}

__jcli_get_plugin_name()
{
    __plugin_name_parse_get
    if [[ $? -eq 0 ]]; then
        return 0
    fi
}

__config_name_parse_get()
{
    local jcli_output out
    if jcli_output=$(jcli config list --no-headers 2>/dev/null); then
        out=($(echo "${jcli_output}" | awk '{print $1}'))
        COMPREPLY=( $( compgen -W "${out[*]}" -- "$cur" ) )
    fi
}

__jcli_get_config_name()
{
    __config_name_parse_get
    if [[ $? -eq 0 ]]; then
        return 0
    fi
}

__job_name_parse_get()
{
    local jcli_output out
    if jcli_output=$(jcli job search --columns URL --no-headers "$cur" 2>/dev/null); then
        out=($(echo "${jcli_output}"))
        COMPREPLY=( ${out} )
    fi
}

__jcli_get_job_name()
{
    __job_name_parse_get
    if [[ $? -eq 0 ]]; then
        return 0
    fi
}

__computer_name_parse_get()
{
    local jcli_output out
    if jcli_output=$(jcli computer list --no-headers --columns DisplayName 2>/dev/null); then
        out=($(echo "${jcli_output}"))
        COMPREPLY=( ${out} )
    fi
}

__jcli_get_computer_name()
{
    __computer_name_parse_get
    if [[ $? -eq 0 ]]; then
        return 0
    fi
}

__jcli_custom_func() {
    case ${last_command} in
        jcli_plugin_upgrade | jcli_plugin_uninstall)
            __jcli_get_plugin_name
            return
            ;;
        jcli_open | jcli_config_select | jcli_config_remove | jcli_shell)
            __jcli_get_config_name
            return
            ;;
        jcli_computer_delete | jcli_computer_delete | jcli_computer_launch)
            __jcli_get_computer_name
            return
            ;;
        jcli_job_build | jcli_job_stop | jcli_job_log | jcli_job_delete | jcli_job_history | jcli_job_artifact | jcli_job_input)
            __jcli_get_job_name
            return
            ;;
        *)
            ;;
    esac
}

_jcli_alias_delete()
{
    last_command="jcli_alias_delete"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_alias_init()
{
    last_command="jcli_alias_init"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_alias_list()
{
    last_command="jcli_alias_list"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_alias_set()
{
    last_command="jcli_alias_set"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_alias()
{
    last_command="jcli_alias"

    command_aliases=()

    commands=()
    commands+=("delete")
    commands+=("init")
    commands+=("list")
    commands+=("set")

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_backup()
{
    last_command="jcli_backup"

    command_aliases=()

    commands=()

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

    flags+=("--backup-dir=")
    two_word_flags+=("--backup-dir")
    local_nonpersistent_flags+=("--backup-dir")
    local_nonpersistent_flags+=("--backup-dir=")
    flags+=("--check")
    local_nonpersistent_flags+=("--check")
    flags+=("--wait-time=")
    two_word_flags+=("--wait-time")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--wait-time")
    local_nonpersistent_flags+=("--wait-time=")
    local_nonpersistent_flags+=("-t")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_center_convert()
{
    last_command="jcli_center_convert"

    command_aliases=()

    commands=()

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

    flags+=("--input=")
    two_word_flags+=("--input")
    two_word_flags+=("-i")
    local_nonpersistent_flags+=("--input")
    local_nonpersistent_flags+=("--input=")
    local_nonpersistent_flags+=("-i")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_center_download()
{
    last_command="jcli_center_download"

    command_aliases=()

    commands=()

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

    flags+=("--formula=")
    two_word_flags+=("--formula")
    local_nonpersistent_flags+=("--formula")
    local_nonpersistent_flags+=("--formula=")
    flags+=("--lts")
    local_nonpersistent_flags+=("--lts")
    flags+=("--mirror=")
    two_word_flags+=("--mirror")
    two_word_flags+=("-m")
    local_nonpersistent_flags+=("--mirror")
    local_nonpersistent_flags+=("--mirror=")
    local_nonpersistent_flags+=("-m")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--progress")
    flags+=("-p")
    local_nonpersistent_flags+=("--progress")
    local_nonpersistent_flags+=("-p")
    flags+=("--thread=")
    two_word_flags+=("--thread")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--thread")
    local_nonpersistent_flags+=("--thread=")
    local_nonpersistent_flags+=("-t")
    flags+=("--war-version=")
    two_word_flags+=("--war-version")
    local_nonpersistent_flags+=("--war-version")
    local_nonpersistent_flags+=("--war-version=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_center_identity()
{
    last_command="jcli_center_identity"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_center_labels()
{
    last_command="jcli_center_labels"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_center_list()
{
    last_command="jcli_center_list"

    command_aliases=()

    commands=()

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

    flags+=("--amount=")
    two_word_flags+=("--amount")
    local_nonpersistent_flags+=("--amount")
    local_nonpersistent_flags+=("--amount=")
    flags+=("--version=")
    two_word_flags+=("--version")
    two_word_flags+=("-v")
    local_nonpersistent_flags+=("--version")
    local_nonpersistent_flags+=("--version=")
    local_nonpersistent_flags+=("-v")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_center_login()
{
    last_command="jcli_center_login"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_center_mirror()
{
    last_command="jcli_center_mirror"

    command_aliases=()

    commands=()

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

    flags+=("--enable")
    local_nonpersistent_flags+=("--enable")
    flags+=("--mirror-url=")
    two_word_flags+=("--mirror-url")
    local_nonpersistent_flags+=("--mirror-url")
    local_nonpersistent_flags+=("--mirror-url=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_center_start()
{
    last_command="jcli_center_start"

    command_aliases=()

    commands=()

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

    flags+=("--admin-can-generate-new-tokens")
    local_nonpersistent_flags+=("--admin-can-generate-new-tokens")
    flags+=("--agent-port=")
    two_word_flags+=("--agent-port")
    local_nonpersistent_flags+=("--agent-port")
    local_nonpersistent_flags+=("--agent-port=")
    flags+=("--c-user=")
    two_word_flags+=("--c-user")
    local_nonpersistent_flags+=("--c-user")
    local_nonpersistent_flags+=("--c-user=")
    flags+=("--clean-home")
    local_nonpersistent_flags+=("--clean-home")
    flags+=("--concurrent-indexing=")
    two_word_flags+=("--concurrent-indexing")
    local_nonpersistent_flags+=("--concurrent-indexing")
    local_nonpersistent_flags+=("--concurrent-indexing=")
    flags+=("--context=")
    two_word_flags+=("--context")
    local_nonpersistent_flags+=("--context")
    local_nonpersistent_flags+=("--context=")
    flags+=("--crumb-exclude-sessionId")
    local_nonpersistent_flags+=("--crumb-exclude-sessionId")
    flags+=("--download")
    local_nonpersistent_flags+=("--download")
    flags+=("--dry-run")
    local_nonpersistent_flags+=("--dry-run")
    flags+=("--env=")
    two_word_flags+=("--env")
    local_nonpersistent_flags+=("--env")
    local_nonpersistent_flags+=("--env=")
    flags+=("--force-pull")
    local_nonpersistent_flags+=("--force-pull")
    flags+=("--formula=")
    two_word_flags+=("--formula")
    local_nonpersistent_flags+=("--formula")
    local_nonpersistent_flags+=("--formula=")
    flags+=("--https-cert=")
    two_word_flags+=("--https-cert")
    local_nonpersistent_flags+=("--https-cert")
    local_nonpersistent_flags+=("--https-cert=")
    flags+=("--https-enable")
    local_nonpersistent_flags+=("--https-enable")
    flags+=("--https-port=")
    two_word_flags+=("--https-port")
    local_nonpersistent_flags+=("--https-port")
    local_nonpersistent_flags+=("--https-port=")
    flags+=("--https-private=")
    two_word_flags+=("--https-private")
    local_nonpersistent_flags+=("--https-private")
    local_nonpersistent_flags+=("--https-private=")
    flags+=("--image=")
    two_word_flags+=("--image")
    local_nonpersistent_flags+=("--image")
    local_nonpersistent_flags+=("--image=")
    flags+=("--lts")
    local_nonpersistent_flags+=("--lts")
    flags+=("--mirror=")
    two_word_flags+=("--mirror")
    local_nonpersistent_flags+=("--mirror")
    local_nonpersistent_flags+=("--mirror=")
    flags+=("--mode=")
    two_word_flags+=("--mode")
    two_word_flags+=("-m")
    local_nonpersistent_flags+=("--mode")
    local_nonpersistent_flags+=("--mode=")
    local_nonpersistent_flags+=("-m")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--random-web-dir")
    local_nonpersistent_flags+=("--random-web-dir")
    flags+=("--setup-wizard")
    local_nonpersistent_flags+=("--setup-wizard")
    flags+=("--sys=")
    two_word_flags+=("--sys")
    local_nonpersistent_flags+=("--sys")
    local_nonpersistent_flags+=("--sys=")
    flags+=("--thread=")
    two_word_flags+=("--thread")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--thread")
    local_nonpersistent_flags+=("--thread=")
    local_nonpersistent_flags+=("-t")
    flags+=("--version=")
    two_word_flags+=("--version")
    flags_with_completion+=("--version")
    flags_completion+=("__jcli_handle_go_custom_completion")
    local_nonpersistent_flags+=("--version")
    local_nonpersistent_flags+=("--version=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_center_upgrade()
{
    last_command="jcli_center_upgrade"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_center_watch()
{
    last_command="jcli_center_watch"

    command_aliases=()

    commands=()

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

    flags+=("--count=")
    two_word_flags+=("--count")
    local_nonpersistent_flags+=("--count")
    local_nonpersistent_flags+=("--count=")
    flags+=("--interval=")
    two_word_flags+=("--interval")
    two_word_flags+=("-i")
    local_nonpersistent_flags+=("--interval")
    local_nonpersistent_flags+=("--interval=")
    local_nonpersistent_flags+=("-i")
    flags+=("--util-install-complete")
    local_nonpersistent_flags+=("--util-install-complete")
    flags+=("--util-need-restart")
    local_nonpersistent_flags+=("--util-need-restart")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_center()
{
    last_command="jcli_center"

    command_aliases=()

    commands=()
    commands+=("convert")
    commands+=("download")
    commands+=("identity")
    commands+=("labels")
    commands+=("list")
    commands+=("login")
    commands+=("mirror")
    commands+=("start")
    commands+=("upgrade")
    commands+=("watch")

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_completion()
{
    last_command="jcli_completion"

    command_aliases=()

    commands=()

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

    flags+=("--help")
    flags+=("-h")
    local_nonpersistent_flags+=("--help")
    local_nonpersistent_flags+=("-h")
    flags+=("--type=")
    two_word_flags+=("--type")
    flags_with_completion+=("--type")
    flags_completion+=("__jcli_handle_go_custom_completion")
    local_nonpersistent_flags+=("--type")
    local_nonpersistent_flags+=("--type=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_computer_create()
{
    last_command="jcli_computer_create"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_computer_delete()
{
    last_command="jcli_computer_delete"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_computer_launch()
{
    last_command="jcli_computer_launch"

    command_aliases=()

    commands=()

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

    flags+=("--agent-image-tag=")
    two_word_flags+=("--agent-image-tag")
    local_nonpersistent_flags+=("--agent-image-tag")
    local_nonpersistent_flags+=("--agent-image-tag=")
    flags+=("--agent-type=")
    two_word_flags+=("--agent-type")
    flags_with_completion+=("--agent-type")
    flags_completion+=("__jcli_handle_go_custom_completion")
    local_nonpersistent_flags+=("--agent-type")
    local_nonpersistent_flags+=("--agent-type=")
    flags+=("--custom-image=")
    two_word_flags+=("--custom-image")
    local_nonpersistent_flags+=("--custom-image")
    local_nonpersistent_flags+=("--custom-image=")
    flags+=("--detach")
    flags+=("-d")
    local_nonpersistent_flags+=("--detach")
    local_nonpersistent_flags+=("-d")
    flags+=("--general-agent-image-tag=")
    two_word_flags+=("--general-agent-image-tag")
    local_nonpersistent_flags+=("--general-agent-image-tag")
    local_nonpersistent_flags+=("--general-agent-image-tag=")
    flags+=("--mode=")
    two_word_flags+=("--mode")
    flags_with_completion+=("--mode")
    flags_completion+=("__jcli_handle_go_custom_completion")
    two_word_flags+=("-m")
    flags_with_completion+=("-m")
    flags_completion+=("__jcli_handle_go_custom_completion")
    local_nonpersistent_flags+=("--mode")
    local_nonpersistent_flags+=("--mode=")
    local_nonpersistent_flags+=("-m")
    flags+=("--remove")
    local_nonpersistent_flags+=("--remove")
    flags+=("--restart=")
    two_word_flags+=("--restart")
    flags_with_completion+=("--restart")
    flags_completion+=("__jcli_handle_go_custom_completion")
    local_nonpersistent_flags+=("--restart")
    local_nonpersistent_flags+=("--restart=")
    flags+=("--show-progress")
    local_nonpersistent_flags+=("--show-progress")
    flags+=("--type=")
    two_word_flags+=("--type")
    local_nonpersistent_flags+=("--type")
    local_nonpersistent_flags+=("--type=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_computer_list()
{
    last_command="jcli_computer_list"

    command_aliases=()

    commands=()

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_computer_log()
{
    last_command="jcli_computer_log"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_computer()
{
    last_command="jcli_computer"

    command_aliases=()

    commands=()
    commands+=("create")
    commands+=("delete")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("del")
        aliashash["del"]="delete"
        command_aliases+=("remove")
        aliashash["remove"]="delete"
    fi
    commands+=("launch")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("start")
        aliashash["start"]="launch"
    fi
    commands+=("list")
    commands+=("log")

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_config_add()
{
    last_command="jcli_config_add"

    command_aliases=()

    commands=()

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

    flags+=("--description=")
    two_word_flags+=("--description")
    two_word_flags+=("-d")
    local_nonpersistent_flags+=("--description")
    local_nonpersistent_flags+=("--description=")
    local_nonpersistent_flags+=("-d")
    flags+=("--name=")
    two_word_flags+=("--name")
    two_word_flags+=("-n")
    local_nonpersistent_flags+=("--name")
    local_nonpersistent_flags+=("--name=")
    local_nonpersistent_flags+=("-n")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--proxy")
    local_nonpersistent_flags+=("--proxy=")
    local_nonpersistent_flags+=("-p")
    flags+=("--proxyAuth=")
    two_word_flags+=("--proxyAuth")
    two_word_flags+=("-a")
    local_nonpersistent_flags+=("--proxyAuth")
    local_nonpersistent_flags+=("--proxyAuth=")
    local_nonpersistent_flags+=("-a")
    flags+=("--token=")
    two_word_flags+=("--token")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--token")
    local_nonpersistent_flags+=("--token=")
    local_nonpersistent_flags+=("-t")
    flags+=("--url=")
    two_word_flags+=("--url")
    local_nonpersistent_flags+=("--url")
    local_nonpersistent_flags+=("--url=")
    flags+=("--username=")
    two_word_flags+=("--username")
    two_word_flags+=("-u")
    local_nonpersistent_flags+=("--username")
    local_nonpersistent_flags+=("--username=")
    local_nonpersistent_flags+=("-u")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")

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

_jcli_config_clean()
{
    last_command="jcli_config_clean"

    command_aliases=()

    commands=()

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

    flags+=("--clean-timeout")
    local_nonpersistent_flags+=("--clean-timeout")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--timeout")
    local_nonpersistent_flags+=("--timeout=")
    local_nonpersistent_flags+=("-t")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_config_data()
{
    last_command="jcli_config_data"

    command_aliases=()

    commands=()

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

    flags+=("--key=")
    two_word_flags+=("--key")
    two_word_flags+=("-k")
    local_nonpersistent_flags+=("--key")
    local_nonpersistent_flags+=("--key=")
    local_nonpersistent_flags+=("-k")
    flags+=("--value=")
    two_word_flags+=("--value")
    two_word_flags+=("-v")
    local_nonpersistent_flags+=("--value")
    local_nonpersistent_flags+=("--value=")
    local_nonpersistent_flags+=("-v")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_flag+=("--key=")
    must_have_one_flag+=("-k")
    must_have_one_flag+=("--value=")
    must_have_one_flag+=("-v")
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_config_edit()
{
    last_command="jcli_config_edit"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_config_generate()
{
    last_command="jcli_config_generate"

    command_aliases=()

    commands=()

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

    flags+=("--copy")
    flags+=("-c")
    local_nonpersistent_flags+=("--copy")
    local_nonpersistent_flags+=("-c")
    flags+=("--interactive")
    flags+=("-i")
    local_nonpersistent_flags+=("--interactive")
    local_nonpersistent_flags+=("-i")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_config_list()
{
    last_command="jcli_config_list"

    command_aliases=()

    commands=()

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--config=")
    two_word_flags+=("--config")
    local_nonpersistent_flags+=("--config")
    local_nonpersistent_flags+=("--config=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_config_plugin_fetch()
{
    last_command="jcli_config_plugin_fetch"

    command_aliases=()

    commands=()

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

    flags+=("--password=")
    two_word_flags+=("--password")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--password")
    local_nonpersistent_flags+=("--password=")
    local_nonpersistent_flags+=("-p")
    flags+=("--plugin-repo=")
    two_word_flags+=("--plugin-repo")
    local_nonpersistent_flags+=("--plugin-repo")
    local_nonpersistent_flags+=("--plugin-repo=")
    flags+=("--reset")
    local_nonpersistent_flags+=("--reset")
    flags+=("--ssh-key-file=")
    two_word_flags+=("--ssh-key-file")
    local_nonpersistent_flags+=("--ssh-key-file")
    local_nonpersistent_flags+=("--ssh-key-file=")
    flags+=("--username=")
    two_word_flags+=("--username")
    two_word_flags+=("-u")
    local_nonpersistent_flags+=("--username")
    local_nonpersistent_flags+=("--username=")
    local_nonpersistent_flags+=("-u")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_config_plugin_install()
{
    last_command="jcli_config_plugin_install"

    command_aliases=()

    commands=()

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

    flags+=("--show-progress")
    local_nonpersistent_flags+=("--show-progress")
    flags+=("--thread=")
    two_word_flags+=("--thread")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--thread")
    local_nonpersistent_flags+=("--thread=")
    local_nonpersistent_flags+=("-t")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_config_plugin_list()
{
    last_command="jcli_config_plugin_list"

    command_aliases=()

    commands=()

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_config_plugin_uninstall()
{
    last_command="jcli_config_plugin_uninstall"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_config_plugin()
{
    last_command="jcli_config_plugin"

    command_aliases=()

    commands=()
    commands+=("fetch")
    commands+=("install")
    commands+=("list")
    commands+=("uninstall")

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_config_remove()
{
    last_command="jcli_config_remove"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_config_select()
{
    last_command="jcli_config_select"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_config_update()
{
    last_command="jcli_config_update"

    command_aliases=()

    commands=()

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

    flags+=("--token=")
    two_word_flags+=("--token")
    local_nonpersistent_flags+=("--token")
    local_nonpersistent_flags+=("--token=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_config()
{
    last_command="jcli_config"

    command_aliases=()

    commands=()
    commands+=("add")
    commands+=("clean")
    commands+=("data")
    commands+=("edit")
    commands+=("generate")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("gen")
        aliashash["gen"]="generate"
    fi
    commands+=("list")
    commands+=("plugin")
    commands+=("remove")
    commands+=("select")
    commands+=("update")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("up")
        aliashash["up"]="update"
    fi

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

    flags+=("--decrypt")
    local_nonpersistent_flags+=("--decrypt")
    flags+=("--detail")
    flags+=("-d")
    local_nonpersistent_flags+=("--detail")
    local_nonpersistent_flags+=("-d")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_credential_create()
{
    last_command="jcli_credential_create"

    command_aliases=()

    commands=()

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

    flags+=("--credential-id=")
    two_word_flags+=("--credential-id")
    local_nonpersistent_flags+=("--credential-id")
    local_nonpersistent_flags+=("--credential-id=")
    flags+=("--credential-password=")
    two_word_flags+=("--credential-password")
    local_nonpersistent_flags+=("--credential-password")
    local_nonpersistent_flags+=("--credential-password=")
    flags+=("--credential-username=")
    two_word_flags+=("--credential-username")
    local_nonpersistent_flags+=("--credential-username")
    local_nonpersistent_flags+=("--credential-username=")
    flags+=("--desc=")
    two_word_flags+=("--desc")
    local_nonpersistent_flags+=("--desc")
    local_nonpersistent_flags+=("--desc=")
    flags+=("--scope=")
    two_word_flags+=("--scope")
    local_nonpersistent_flags+=("--scope")
    local_nonpersistent_flags+=("--scope=")
    flags+=("--secret=")
    two_word_flags+=("--secret")
    local_nonpersistent_flags+=("--secret")
    local_nonpersistent_flags+=("--secret=")
    flags+=("--store=")
    two_word_flags+=("--store")
    local_nonpersistent_flags+=("--store")
    local_nonpersistent_flags+=("--store=")
    flags+=("--type=")
    two_word_flags+=("--type")
    local_nonpersistent_flags+=("--type")
    local_nonpersistent_flags+=("--type=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_credential_delete()
{
    last_command="jcli_credential_delete"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--id=")
    two_word_flags+=("--id")
    local_nonpersistent_flags+=("--id")
    local_nonpersistent_flags+=("--id=")
    flags+=("--store=")
    two_word_flags+=("--store")
    local_nonpersistent_flags+=("--store")
    local_nonpersistent_flags+=("--store=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_credential_list()
{
    last_command="jcli_credential_list"

    command_aliases=()

    commands=()

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--store=")
    two_word_flags+=("--store")
    local_nonpersistent_flags+=("--store")
    local_nonpersistent_flags+=("--store=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_credential()
{
    last_command="jcli_credential"

    command_aliases=()

    commands=()
    commands+=("create")
    commands+=("delete")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("del")
        aliashash["del"]="delete"
        command_aliases+=("remove")
        aliashash["remove"]="delete"
    fi
    commands+=("list")

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_crumb()
{
    last_command="jcli_crumb"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_cwp()
{
    last_command="jcli_cwp"

    command_aliases=()

    commands=()

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

    flags+=("--batch-mode")
    local_nonpersistent_flags+=("--batch-mode")
    flags+=("--bom-path=")
    two_word_flags+=("--bom-path")
    local_nonpersistent_flags+=("--bom-path")
    local_nonpersistent_flags+=("--bom-path=")
    flags+=("--config-path=")
    two_word_flags+=("--config-path")
    local_nonpersistent_flags+=("--config-path")
    local_nonpersistent_flags+=("--config-path=")
    flags+=("--demo")
    local_nonpersistent_flags+=("--demo")
    flags+=("--environment=")
    two_word_flags+=("--environment")
    local_nonpersistent_flags+=("--environment")
    local_nonpersistent_flags+=("--environment=")
    flags+=("--install-artifacts")
    local_nonpersistent_flags+=("--install-artifacts")
    flags+=("--local-cache=")
    two_word_flags+=("--local-cache")
    local_nonpersistent_flags+=("--local-cache")
    local_nonpersistent_flags+=("--local-cache=")
    flags+=("--metadata-url=")
    two_word_flags+=("--metadata-url")
    local_nonpersistent_flags+=("--metadata-url")
    local_nonpersistent_flags+=("--metadata-url=")
    flags+=("--mvn-settings-file=")
    two_word_flags+=("--mvn-settings-file")
    local_nonpersistent_flags+=("--mvn-settings-file")
    local_nonpersistent_flags+=("--mvn-settings-file=")
    flags+=("--print-version")
    local_nonpersistent_flags+=("--print-version")
    flags+=("--show-progress")
    local_nonpersistent_flags+=("--show-progress")
    flags+=("--tmp-dir=")
    two_word_flags+=("--tmp-dir")
    local_nonpersistent_flags+=("--tmp-dir")
    local_nonpersistent_flags+=("--tmp-dir=")
    flags+=("--value-set=")
    two_word_flags+=("--value-set")
    local_nonpersistent_flags+=("--value-set")
    local_nonpersistent_flags+=("--value-set=")
    flags+=("--version=")
    two_word_flags+=("--version")
    local_nonpersistent_flags+=("--version")
    local_nonpersistent_flags+=("--version=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_help()
{
    last_command="jcli_help"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_job_artifact_download()
{
    last_command="jcli_job_artifact_download"

    command_aliases=()

    commands=()

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

    flags+=("--download-dir=")
    two_word_flags+=("--download-dir")
    local_nonpersistent_flags+=("--download-dir")
    local_nonpersistent_flags+=("--download-dir=")
    flags+=("--id=")
    two_word_flags+=("--id")
    two_word_flags+=("-i")
    local_nonpersistent_flags+=("--id")
    local_nonpersistent_flags+=("--id=")
    local_nonpersistent_flags+=("-i")
    flags+=("--progress")
    local_nonpersistent_flags+=("--progress")
    flags+=("--thread=")
    two_word_flags+=("--thread")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--thread")
    local_nonpersistent_flags+=("--thread=")
    local_nonpersistent_flags+=("-t")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_artifact()
{
    last_command="jcli_job_artifact"

    command_aliases=()

    commands=()
    commands+=("download")

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_build()
{
    last_command="jcli_job_build"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--cause=")
    two_word_flags+=("--cause")
    local_nonpersistent_flags+=("--cause")
    local_nonpersistent_flags+=("--cause=")
    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--delay=")
    two_word_flags+=("--delay")
    local_nonpersistent_flags+=("--delay")
    local_nonpersistent_flags+=("--delay=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--param=")
    two_word_flags+=("--param")
    local_nonpersistent_flags+=("--param")
    local_nonpersistent_flags+=("--param=")
    flags+=("--param-entry=")
    two_word_flags+=("--param-entry")
    local_nonpersistent_flags+=("--param-entry")
    local_nonpersistent_flags+=("--param-entry=")
    flags+=("--param-file=")
    two_word_flags+=("--param-file")
    local_nonpersistent_flags+=("--param-file")
    local_nonpersistent_flags+=("--param-file=")
    flags+=("--wait")
    local_nonpersistent_flags+=("--wait")
    flags+=("--wait-timeout=")
    two_word_flags+=("--wait-timeout")
    local_nonpersistent_flags+=("--wait-timeout")
    local_nonpersistent_flags+=("--wait-timeout=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_create()
{
    last_command="jcli_job_create"

    command_aliases=()

    commands=()

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

    flags+=("--copy=")
    two_word_flags+=("--copy")
    local_nonpersistent_flags+=("--copy")
    local_nonpersistent_flags+=("--copy=")
    flags+=("--type=")
    two_word_flags+=("--type")
    local_nonpersistent_flags+=("--type")
    local_nonpersistent_flags+=("--type=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_delete()
{
    last_command="jcli_job_delete"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_disable()
{
    last_command="jcli_job_disable"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_edit()
{
    last_command="jcli_job_edit"

    command_aliases=()

    commands=()

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

    flags+=("--build")
    flags+=("-b")
    local_nonpersistent_flags+=("--build")
    local_nonpersistent_flags+=("-b")
    flags+=("--filename=")
    two_word_flags+=("--filename")
    two_word_flags+=("-f")
    local_nonpersistent_flags+=("--filename")
    local_nonpersistent_flags+=("--filename=")
    local_nonpersistent_flags+=("-f")
    flags+=("--sample")
    local_nonpersistent_flags+=("--sample")
    flags+=("--script=")
    two_word_flags+=("--script")
    two_word_flags+=("-s")
    local_nonpersistent_flags+=("--script")
    local_nonpersistent_flags+=("--script=")
    local_nonpersistent_flags+=("-s")
    flags+=("--trim")
    local_nonpersistent_flags+=("--trim")
    flags+=("--url=")
    two_word_flags+=("--url")
    local_nonpersistent_flags+=("--url")
    local_nonpersistent_flags+=("--url=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_enable()
{
    last_command="jcli_job_enable"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_history_edit()
{
    last_command="jcli_job_history_edit"

    command_aliases=()

    commands=()

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

    flags+=("--description=")
    two_word_flags+=("--description")
    two_word_flags+=("-m")
    local_nonpersistent_flags+=("--description")
    local_nonpersistent_flags+=("--description=")
    local_nonpersistent_flags+=("-m")
    flags+=("--displayName=")
    two_word_flags+=("--displayName")
    two_word_flags+=("-d")
    local_nonpersistent_flags+=("--displayName")
    local_nonpersistent_flags+=("--displayName=")
    local_nonpersistent_flags+=("-d")
    flags+=("--id=")
    two_word_flags+=("--id")
    two_word_flags+=("-i")
    local_nonpersistent_flags+=("--id")
    local_nonpersistent_flags+=("--id=")
    local_nonpersistent_flags+=("-i")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_history()
{
    last_command="jcli_job_history"

    command_aliases=()

    commands=()
    commands+=("edit")

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--delete=")
    two_word_flags+=("--delete")
    two_word_flags+=("-d")
    local_nonpersistent_flags+=("--delete")
    local_nonpersistent_flags+=("--delete=")
    local_nonpersistent_flags+=("-d")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_input()
{
    last_command="jcli_job_input"

    command_aliases=()

    commands=()

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

    flags+=("--action=")
    two_word_flags+=("--action")
    local_nonpersistent_flags+=("--action")
    local_nonpersistent_flags+=("--action=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_log()
{
    last_command="jcli_job_log"

    command_aliases=()

    commands=()

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

    flags+=("--history=")
    two_word_flags+=("--history")
    two_word_flags+=("-s")
    local_nonpersistent_flags+=("--history")
    local_nonpersistent_flags+=("--history=")
    local_nonpersistent_flags+=("-s")
    flags+=("--interval=")
    two_word_flags+=("--interval")
    two_word_flags+=("-i")
    local_nonpersistent_flags+=("--interval")
    local_nonpersistent_flags+=("--interval=")
    local_nonpersistent_flags+=("-i")
    flags+=("--tail=")
    two_word_flags+=("--tail")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--tail")
    local_nonpersistent_flags+=("--tail=")
    local_nonpersistent_flags+=("-t")
    flags+=("--watch")
    flags+=("-w")
    local_nonpersistent_flags+=("--watch")
    local_nonpersistent_flags+=("-w")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_param()
{
    last_command="jcli_job_param"

    command_aliases=()

    commands=()

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

    flags+=("--add=")
    two_word_flags+=("--add")
    local_nonpersistent_flags+=("--add")
    local_nonpersistent_flags+=("--add=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--indent")
    local_nonpersistent_flags+=("--indent")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--remove=")
    two_word_flags+=("--remove")
    local_nonpersistent_flags+=("--remove")
    local_nonpersistent_flags+=("--remove=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_search()
{
    last_command="jcli_job_search"

    command_aliases=()

    commands=()

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--limit=")
    two_word_flags+=("--limit")
    local_nonpersistent_flags+=("--limit")
    local_nonpersistent_flags+=("--limit=")
    flags+=("--name=")
    two_word_flags+=("--name")
    local_nonpersistent_flags+=("--name")
    local_nonpersistent_flags+=("--name=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--parent=")
    two_word_flags+=("--parent")
    local_nonpersistent_flags+=("--parent")
    local_nonpersistent_flags+=("--parent=")
    flags+=("--plugin=")
    two_word_flags+=("--plugin")
    flags_with_completion+=("--plugin")
    flags_completion+=("__jcli_handle_go_custom_completion")
    two_word_flags+=("-p")
    flags_with_completion+=("-p")
    flags_completion+=("__jcli_handle_go_custom_completion")
    local_nonpersistent_flags+=("--plugin")
    local_nonpersistent_flags+=("--plugin=")
    local_nonpersistent_flags+=("-p")
    flags+=("--start=")
    two_word_flags+=("--start")
    local_nonpersistent_flags+=("--start")
    local_nonpersistent_flags+=("--start=")
    flags+=("--type=")
    two_word_flags+=("--type")
    local_nonpersistent_flags+=("--type")
    local_nonpersistent_flags+=("--type=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_stop()
{
    last_command="jcli_job_stop"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job_type()
{
    last_command="jcli_job_type"

    command_aliases=()

    commands=()

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_job()
{
    last_command="jcli_job"

    command_aliases=()

    commands=()
    commands+=("artifact")
    commands+=("build")
    commands+=("create")
    commands+=("delete")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("del")
        aliashash["del"]="delete"
        command_aliases+=("remove")
        aliashash["remove"]="delete"
    fi
    commands+=("disable")
    commands+=("edit")
    commands+=("enable")
    commands+=("history")
    commands+=("input")
    commands+=("log")
    commands+=("param")
    commands+=("search")
    commands+=("stop")
    commands+=("type")

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

    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_open()
{
    last_command="jcli_open"

    command_aliases=()

    commands=()

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

    flags+=("--browser=")
    two_word_flags+=("--browser")
    flags_with_completion+=("--browser")
    flags_completion+=("__jcli_handle_go_custom_completion")
    two_word_flags+=("-b")
    flags_with_completion+=("-b")
    flags_completion+=("__jcli_handle_go_custom_completion")
    local_nonpersistent_flags+=("--browser")
    local_nonpersistent_flags+=("--browser=")
    local_nonpersistent_flags+=("-b")
    flags+=("--config")
    flags+=("-c")
    local_nonpersistent_flags+=("--config")
    local_nonpersistent_flags+=("-c")
    flags+=("--interactive")
    flags+=("-i")
    local_nonpersistent_flags+=("--interactive")
    local_nonpersistent_flags+=("-i")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_plugin_api()
{
    last_command="jcli_plugin_api"

    command_aliases=()

    commands=()

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

    flags+=("--custom-yaml=")
    two_word_flags+=("--custom-yaml")
    local_nonpersistent_flags+=("--custom-yaml")
    local_nonpersistent_flags+=("--custom-yaml=")
    flags+=("--ip=")
    two_word_flags+=("--ip")
    local_nonpersistent_flags+=("--ip")
    local_nonpersistent_flags+=("--ip=")
    flags+=("--port=")
    two_word_flags+=("--port")
    local_nonpersistent_flags+=("--port")
    local_nonpersistent_flags+=("--port=")
    flags+=("--yaml=")
    two_word_flags+=("--yaml")
    local_nonpersistent_flags+=("--yaml")
    local_nonpersistent_flags+=("--yaml=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_build()
{
    last_command="jcli_plugin_build"

    command_aliases=()

    commands=()

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

    flags+=("--debug-output")
    local_nonpersistent_flags+=("--debug-output")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_center()
{
    last_command="jcli_plugin_center"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_check()
{
    last_command="jcli_plugin_check"

    command_aliases=()

    commands=()

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

    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    local_nonpersistent_flags+=("--timeout")
    local_nonpersistent_flags+=("--timeout=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_create()
{
    last_command="jcli_plugin_create"

    command_aliases=()

    commands=()

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

    flags+=("--debug-output")
    local_nonpersistent_flags+=("--debug-output")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_download()
{
    last_command="jcli_plugin_download"

    command_aliases=()

    commands=()

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

    flags+=("--download-dir=")
    two_word_flags+=("--download-dir")
    local_nonpersistent_flags+=("--download-dir")
    local_nonpersistent_flags+=("--download-dir=")
    flags+=("--mirror=")
    two_word_flags+=("--mirror")
    local_nonpersistent_flags+=("--mirror")
    local_nonpersistent_flags+=("--mirror=")
    flags+=("--show-progress")
    local_nonpersistent_flags+=("--show-progress")
    flags+=("--skip-dependency")
    local_nonpersistent_flags+=("--skip-dependency")
    flags+=("--skip-optional")
    local_nonpersistent_flags+=("--skip-optional")
    flags+=("--use-mirror")
    local_nonpersistent_flags+=("--use-mirror")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_formula()
{
    last_command="jcli_plugin_formula"

    command_aliases=()

    commands=()

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

    flags+=("--docker-build")
    local_nonpersistent_flags+=("--docker-build")
    flags+=("--only-release")
    local_nonpersistent_flags+=("--only-release")
    flags+=("--sort-plugins")
    local_nonpersistent_flags+=("--sort-plugins")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_install()
{
    last_command="jcli_plugin_install"

    command_aliases=()

    commands=()

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

    flags+=("--formula=")
    two_word_flags+=("--formula")
    local_nonpersistent_flags+=("--formula")
    local_nonpersistent_flags+=("--formula=")
    flags+=("--show-progress")
    local_nonpersistent_flags+=("--show-progress")
    flags+=("--suite=")
    two_word_flags+=("--suite")
    local_nonpersistent_flags+=("--suite")
    local_nonpersistent_flags+=("--suite=")
    flags+=("--use-mirror")
    local_nonpersistent_flags+=("--use-mirror")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_list()
{
    last_command="jcli_plugin_list"

    command_aliases=()

    commands=()

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_open()
{
    last_command="jcli_plugin_open"

    command_aliases=()

    commands=()

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

    flags+=("--browser=")
    two_word_flags+=("--browser")
    two_word_flags+=("-b")
    local_nonpersistent_flags+=("--browser")
    local_nonpersistent_flags+=("--browser=")
    local_nonpersistent_flags+=("-b")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_release()
{
    last_command="jcli_plugin_release"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    local_nonpersistent_flags+=("--batch")
    flags+=("--debug-output")
    local_nonpersistent_flags+=("--debug-output")
    flags+=("--perform")
    local_nonpersistent_flags+=("--perform")
    flags+=("--prepare")
    local_nonpersistent_flags+=("--prepare")
    flags+=("--skip-tests")
    local_nonpersistent_flags+=("--skip-tests")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_run()
{
    last_command="jcli_plugin_run"

    command_aliases=()

    commands=()

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

    flags+=("--clean-home")
    local_nonpersistent_flags+=("--clean-home")
    flags+=("--debug-output")
    local_nonpersistent_flags+=("--debug-output")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_search()
{
    last_command="jcli_plugin_search"

    command_aliases=()

    commands=()

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

    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_trend()
{
    last_command="jcli_plugin_trend"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_uninstall()
{
    last_command="jcli_plugin_uninstall"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_upgrade()
{
    last_command="jcli_plugin_upgrade"

    command_aliases=()

    commands=()

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

    flags+=("--all")
    local_nonpersistent_flags+=("--all")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_plugin_upload()
{
    last_command="jcli_plugin_upload"

    command_aliases=()

    commands=()

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

    flags+=("--file=")
    two_word_flags+=("--file")
    flags_with_completion+=("--file")
    flags_completion+=("__jcli_handle_go_custom_completion")
    two_word_flags+=("-f")
    flags_with_completion+=("-f")
    flags_completion+=("__jcli_handle_go_custom_completion")
    local_nonpersistent_flags+=("--file")
    local_nonpersistent_flags+=("--file=")
    local_nonpersistent_flags+=("-f")
    flags+=("--remote=")
    two_word_flags+=("--remote")
    two_word_flags+=("-r")
    local_nonpersistent_flags+=("--remote")
    local_nonpersistent_flags+=("--remote=")
    local_nonpersistent_flags+=("-r")
    flags+=("--remote-jenkins=")
    two_word_flags+=("--remote-jenkins")
    local_nonpersistent_flags+=("--remote-jenkins")
    local_nonpersistent_flags+=("--remote-jenkins=")
    flags+=("--remote-password=")
    two_word_flags+=("--remote-password")
    local_nonpersistent_flags+=("--remote-password")
    local_nonpersistent_flags+=("--remote-password=")
    flags+=("--remote-user=")
    two_word_flags+=("--remote-user")
    local_nonpersistent_flags+=("--remote-user")
    local_nonpersistent_flags+=("--remote-user=")
    flags+=("--show-progress")
    local_nonpersistent_flags+=("--show-progress")
    flags+=("--skip-posthook")
    local_nonpersistent_flags+=("--skip-posthook")
    flags+=("--skip-prehook")
    local_nonpersistent_flags+=("--skip-prehook")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    local_nonpersistent_flags+=("--timeout")
    local_nonpersistent_flags+=("--timeout=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

    must_have_one_flag=()
    must_have_one_noun=()
    has_completion_function=1
    noun_aliases=()
}

_jcli_plugin()
{
    last_command="jcli_plugin"

    command_aliases=()

    commands=()
    commands+=("api")
    commands+=("build")
    commands+=("center")
    commands+=("check")
    commands+=("create")
    commands+=("download")
    commands+=("formula")
    commands+=("install")
    commands+=("list")
    commands+=("open")
    commands+=("release")
    commands+=("run")
    commands+=("search")
    commands+=("trend")
    commands+=("uninstall")
    commands+=("upgrade")
    commands+=("upload")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("up")
        aliashash["up"]="upload"
    fi

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_queue_cancel()
{
    last_command="jcli_queue_cancel"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_queue_list()
{
    last_command="jcli_queue_list"

    command_aliases=()

    commands=()

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

    flags+=("--columns=")
    two_word_flags+=("--columns")
    local_nonpersistent_flags+=("--columns")
    local_nonpersistent_flags+=("--columns=")
    flags+=("--filter=")
    two_word_flags+=("--filter")
    local_nonpersistent_flags+=("--filter")
    local_nonpersistent_flags+=("--filter=")
    flags+=("--no-headers")
    local_nonpersistent_flags+=("--no-headers")
    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_queue()
{
    last_command="jcli_queue"

    command_aliases=()

    commands=()
    commands+=("cancel")
    commands+=("list")

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_restart()
{
    last_command="jcli_restart"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--safe")
    flags+=("-s")
    local_nonpersistent_flags+=("--safe")
    local_nonpersistent_flags+=("-s")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_runner()
{
    last_command="jcli_runner"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--jenkinsfile-path=")
    two_word_flags+=("--jenkinsfile-path")
    two_word_flags+=("-z")
    local_nonpersistent_flags+=("--jenkinsfile-path")
    local_nonpersistent_flags+=("--jenkinsfile-path=")
    local_nonpersistent_flags+=("-z")
    flags+=("--jfr-version=")
    two_word_flags+=("--jfr-version")
    two_word_flags+=("-f")
    local_nonpersistent_flags+=("--jfr-version")
    local_nonpersistent_flags+=("--jfr-version=")
    local_nonpersistent_flags+=("-f")
    flags+=("--lts")
    local_nonpersistent_flags+=("--lts")
    flags+=("--path=")
    two_word_flags+=("--path")
    two_word_flags+=("-w")
    local_nonpersistent_flags+=("--path")
    local_nonpersistent_flags+=("--path=")
    local_nonpersistent_flags+=("-w")
    flags+=("--plugin-path=")
    two_word_flags+=("--plugin-path")
    two_word_flags+=("-p")
    local_nonpersistent_flags+=("--plugin-path")
    local_nonpersistent_flags+=("--plugin-path=")
    local_nonpersistent_flags+=("-p")
    flags+=("--safe")
    flags+=("-s")
    local_nonpersistent_flags+=("--safe")
    local_nonpersistent_flags+=("-s")
    flags+=("--war-version=")
    two_word_flags+=("--war-version")
    two_word_flags+=("-v")
    local_nonpersistent_flags+=("--war-version")
    local_nonpersistent_flags+=("--war-version=")
    local_nonpersistent_flags+=("-v")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_shell()
{
    last_command="jcli_shell"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_shutdown()
{
    last_command="jcli_shutdown"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--prepare")
    local_nonpersistent_flags+=("--prepare")
    flags+=("--prepare-cancel")
    local_nonpersistent_flags+=("--prepare-cancel")
    flags+=("--safe")
    flags+=("-s")
    local_nonpersistent_flags+=("--safe")
    local_nonpersistent_flags+=("-s")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_upgrade()
{
    last_command="jcli_upgrade"

    command_aliases=()

    commands=()

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

    flags+=("--Jenkins-port=")
    two_word_flags+=("--Jenkins-port")
    local_nonpersistent_flags+=("--Jenkins-port")
    local_nonpersistent_flags+=("--Jenkins-port=")
    flags+=("--all")
    local_nonpersistent_flags+=("--all")
    flags+=("--bundle-artifactId=")
    two_word_flags+=("--bundle-artifactId")
    local_nonpersistent_flags+=("--bundle-artifactId")
    local_nonpersistent_flags+=("--bundle-artifactId=")
    flags+=("--bundle-description=")
    two_word_flags+=("--bundle-description")
    local_nonpersistent_flags+=("--bundle-description")
    local_nonpersistent_flags+=("--bundle-description=")
    flags+=("--bundle-groupId=")
    two_word_flags+=("--bundle-groupId")
    local_nonpersistent_flags+=("--bundle-groupId")
    local_nonpersistent_flags+=("--bundle-groupId=")
    flags+=("--bundle-vendor=")
    two_word_flags+=("--bundle-vendor")
    local_nonpersistent_flags+=("--bundle-vendor")
    local_nonpersistent_flags+=("--bundle-vendor=")
    flags+=("--custom-yaml=")
    two_word_flags+=("--custom-yaml")
    local_nonpersistent_flags+=("--custom-yaml")
    local_nonpersistent_flags+=("--custom-yaml=")
    flags+=("--docker-port=")
    two_word_flags+=("--docker-port")
    local_nonpersistent_flags+=("--docker-port")
    local_nonpersistent_flags+=("--docker-port=")
    flags+=("--ip=")
    two_word_flags+=("--ip")
    local_nonpersistent_flags+=("--ip")
    local_nonpersistent_flags+=("--ip=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_user_create()
{
    last_command="jcli_user_create"

    command_aliases=()

    commands=()

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_user_delete()
{
    last_command="jcli_user_delete"

    command_aliases=()

    commands=()

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

    flags+=("--batch")
    flags+=("-b")
    local_nonpersistent_flags+=("--batch")
    local_nonpersistent_flags+=("-b")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_user_edit()
{
    last_command="jcli_user_edit"

    command_aliases=()

    commands=()

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

    flags+=("--desc=")
    two_word_flags+=("--desc")
    two_word_flags+=("-d")
    local_nonpersistent_flags+=("--desc")
    local_nonpersistent_flags+=("--desc=")
    local_nonpersistent_flags+=("-d")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_user_token()
{
    last_command="jcli_user_token"

    command_aliases=()

    commands=()

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

    flags+=("--generate")
    flags+=("-g")
    local_nonpersistent_flags+=("--generate")
    local_nonpersistent_flags+=("-g")
    flags+=("--name=")
    two_word_flags+=("--name")
    two_word_flags+=("-n")
    local_nonpersistent_flags+=("--name")
    local_nonpersistent_flags+=("--name=")
    local_nonpersistent_flags+=("-n")
    flags+=("--target-user=")
    two_word_flags+=("--target-user")
    local_nonpersistent_flags+=("--target-user")
    local_nonpersistent_flags+=("--target-user=")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_user()
{
    last_command="jcli_user"

    command_aliases=()

    commands=()
    commands+=("create")
    commands+=("delete")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("del")
        aliashash["del"]="delete"
        command_aliases+=("remove")
        aliashash["remove"]="delete"
    fi
    commands+=("edit")
    commands+=("token")

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

    flags+=("--output=")
    two_word_flags+=("--output")
    two_word_flags+=("-o")
    local_nonpersistent_flags+=("--output")
    local_nonpersistent_flags+=("--output=")
    local_nonpersistent_flags+=("-o")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_version_upgrade()
{
    last_command="jcli_version_upgrade"

    command_aliases=()

    commands=()

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

    flags+=("--privilege")
    local_nonpersistent_flags+=("--privilege")
    flags+=("--show-progress")
    local_nonpersistent_flags+=("--show-progress")
    flags+=("--thread=")
    two_word_flags+=("--thread")
    two_word_flags+=("-t")
    local_nonpersistent_flags+=("--thread")
    local_nonpersistent_flags+=("--thread=")
    local_nonpersistent_flags+=("-t")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_version()
{
    last_command="jcli_version"

    command_aliases=()

    commands=()
    commands+=("upgrade")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("up")
        aliashash["up"]="upgrade"
    fi

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

    flags+=("--changelog")
    flags+=("-c")
    local_nonpersistent_flags+=("--changelog")
    local_nonpersistent_flags+=("-c")
    flags+=("--show-latest")
    flags+=("-s")
    local_nonpersistent_flags+=("--show-latest")
    local_nonpersistent_flags+=("-s")
    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

_jcli_root_command()
{
    last_command="jcli"

    command_aliases=()

    commands=()
    commands+=("alias")
    commands+=("backup")
    commands+=("center")
    commands+=("completion")
    commands+=("computer")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("agent")
        aliashash["agent"]="computer"
        command_aliases+=("cpu")
        aliashash["cpu"]="computer"
    fi
    commands+=("config")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("cfg")
        aliashash["cfg"]="config"
    fi
    commands+=("credential")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("cred")
        aliashash["cred"]="credential"
        command_aliases+=("secret")
        aliashash["secret"]="credential"
    fi
    commands+=("crumb")
    commands+=("cwp")
    commands+=("help")
    commands+=("job")
    commands+=("open")
    commands+=("plugin")
    commands+=("queue")
    commands+=("restart")
    commands+=("runner")
    commands+=("shell")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("sh")
        aliashash["sh"]="shell"
    fi
    commands+=("shutdown")
    commands+=("upgrade")
    commands+=("user")
    commands+=("version")
    if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
        command_aliases+=("ver")
        aliashash["ver"]="version"
    fi

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

    flags+=("--config-load")
    flags+=("--configFile=")
    two_word_flags+=("--configFile")
    flags+=("--debug")
    flags+=("--doctor")
    flags+=("--insecureSkipVerify=")
    two_word_flags+=("--insecureSkipVerify")
    flags+=("--jenkins=")
    two_word_flags+=("--jenkins")
    two_word_flags+=("-j")
    flags+=("--logger-level=")
    two_word_flags+=("--logger-level")
    flags+=("--proxy=")
    two_word_flags+=("--proxy")
    flags+=("--proxy-auth=")
    two_word_flags+=("--proxy-auth")
    flags+=("--proxy-disable")
    flags+=("--timeout=")
    two_word_flags+=("--timeout")
    flags+=("--token=")
    two_word_flags+=("--token")
    flags+=("--url=")
    two_word_flags+=("--url")
    flags+=("--username=")
    two_word_flags+=("--username")

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

__start_jcli()
{
    local cur prev words cword split
    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
        __jcli_init_completion -n "=" || return
    fi

    local c=0
    local flag_parsing_disabled=
    local flags=()
    local two_word_flags=()
    local local_nonpersistent_flags=()
    local flags_with_completion=()
    local flags_completion=()
    local commands=("jcli")
    local command_aliases=()
    local must_have_one_flag=()
    local must_have_one_noun=()
    local has_completion_function=""
    local last_command=""
    local nouns=()
    local noun_aliases=()

    __jcli_handle_word
}

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

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