_bb-imager-cli() {
    local i cur prev opts cmd
    COMPREPLY=()
    if [[ "${BASH_VERSINFO[0]}" -ge 4 ]]; then
        cur="$2"
    else
        cur="${COMP_WORDS[COMP_CWORD]}"
    fi
    prev="$3"
    cmd=""
    opts=""

    for i in "${COMP_WORDS[@]:0:COMP_CWORD}"
    do
        case "${cmd},${i}" in
            ",$1")
                cmd="bb__imager__cli"
                ;;
            bb__imager__cli,flash)
                cmd="bb__imager__cli__subcmd__flash"
                ;;
            bb__imager__cli,format)
                cmd="bb__imager__cli__subcmd__format"
                ;;
            bb__imager__cli,generate-completion)
                cmd="bb__imager__cli__subcmd__generate__subcmd__completion"
                ;;
            bb__imager__cli,help)
                cmd="bb__imager__cli__subcmd__help"
                ;;
            bb__imager__cli,list-destinations)
                cmd="bb__imager__cli__subcmd__list__subcmd__destinations"
                ;;
            bb__imager__cli__subcmd__flash,bcf)
                cmd="bb__imager__cli__subcmd__flash__subcmd__bcf"
                ;;
            bb__imager__cli__subcmd__flash,dfu)
                cmd="bb__imager__cli__subcmd__flash__subcmd__dfu"
                ;;
            bb__imager__cli__subcmd__flash,help)
                cmd="bb__imager__cli__subcmd__flash__subcmd__help"
                ;;
            bb__imager__cli__subcmd__flash,msp430)
                cmd="bb__imager__cli__subcmd__flash__subcmd__msp430"
                ;;
            bb__imager__cli__subcmd__flash,sd)
                cmd="bb__imager__cli__subcmd__flash__subcmd__sd"
                ;;
            bb__imager__cli__subcmd__flash,zepto)
                cmd="bb__imager__cli__subcmd__flash__subcmd__zepto"
                ;;
            bb__imager__cli__subcmd__flash__subcmd__help,bcf)
                cmd="bb__imager__cli__subcmd__flash__subcmd__help__subcmd__bcf"
                ;;
            bb__imager__cli__subcmd__flash__subcmd__help,dfu)
                cmd="bb__imager__cli__subcmd__flash__subcmd__help__subcmd__dfu"
                ;;
            bb__imager__cli__subcmd__flash__subcmd__help,help)
                cmd="bb__imager__cli__subcmd__flash__subcmd__help__subcmd__help"
                ;;
            bb__imager__cli__subcmd__flash__subcmd__help,msp430)
                cmd="bb__imager__cli__subcmd__flash__subcmd__help__subcmd__msp430"
                ;;
            bb__imager__cli__subcmd__flash__subcmd__help,sd)
                cmd="bb__imager__cli__subcmd__flash__subcmd__help__subcmd__sd"
                ;;
            bb__imager__cli__subcmd__flash__subcmd__help,zepto)
                cmd="bb__imager__cli__subcmd__flash__subcmd__help__subcmd__zepto"
                ;;
            bb__imager__cli__subcmd__help,flash)
                cmd="bb__imager__cli__subcmd__help__subcmd__flash"
                ;;
            bb__imager__cli__subcmd__help,format)
                cmd="bb__imager__cli__subcmd__help__subcmd__format"
                ;;
            bb__imager__cli__subcmd__help,generate-completion)
                cmd="bb__imager__cli__subcmd__help__subcmd__generate__subcmd__completion"
                ;;
            bb__imager__cli__subcmd__help,help)
                cmd="bb__imager__cli__subcmd__help__subcmd__help"
                ;;
            bb__imager__cli__subcmd__help,list-destinations)
                cmd="bb__imager__cli__subcmd__help__subcmd__list__subcmd__destinations"
                ;;
            bb__imager__cli__subcmd__help__subcmd__flash,bcf)
                cmd="bb__imager__cli__subcmd__help__subcmd__flash__subcmd__bcf"
                ;;
            bb__imager__cli__subcmd__help__subcmd__flash,dfu)
                cmd="bb__imager__cli__subcmd__help__subcmd__flash__subcmd__dfu"
                ;;
            bb__imager__cli__subcmd__help__subcmd__flash,msp430)
                cmd="bb__imager__cli__subcmd__help__subcmd__flash__subcmd__msp430"
                ;;
            bb__imager__cli__subcmd__help__subcmd__flash,sd)
                cmd="bb__imager__cli__subcmd__help__subcmd__flash__subcmd__sd"
                ;;
            bb__imager__cli__subcmd__help__subcmd__flash,zepto)
                cmd="bb__imager__cli__subcmd__help__subcmd__flash__subcmd__zepto"
                ;;
            *)
                ;;
        esac
    done

    case "${cmd}" in
        bb__imager__cli)
            opts="-h -V --verbose --help --version flash list-destinations format generate-completion help"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash)
            opts="-h --quiet --help bcf sd msp430 dfu zepto help"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__bcf)
            opts="-h --no-verify --help <IMG> <DST>"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__dfu)
            opts="-h --help <IDENTIFIER> [IMGS]..."
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__help)
            opts="bcf sd msp430 dfu zepto help"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__help__subcmd__bcf)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__help__subcmd__dfu)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__help__subcmd__help)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__help__subcmd__msp430)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__help__subcmd__sd)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__help__subcmd__zepto)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__msp430)
            opts="-h --help <IMG> <DST>"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__sd)
            opts="-h --hostname --timezone --keymap --user-name --user-password --wifi-ssid --wifi-password --ssh-key --usb-enable-dhcp --bmap --help <IMG> <DST>"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --hostname)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --timezone)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --keymap)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --user-name)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --user-password)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --wifi-ssid)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --wifi-password)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --ssh-key)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --bmap)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__flash__subcmd__zepto)
            opts="-h --no-verify --reset-gpio --bsl-gpio --help <IMG> <DST>"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                --reset-gpio)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                --bsl-gpio)
                    COMPREPLY=($(compgen -f "${cur}"))
                    return 0
                    ;;
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__format)
            opts="-h --quiet --help <DST>"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__generate__subcmd__completion)
            opts="-h --help bash elvish fish powershell zsh"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help)
            opts="flash list-destinations format generate-completion help"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__flash)
            opts="bcf sd msp430 dfu zepto"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__flash__subcmd__bcf)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__flash__subcmd__dfu)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__flash__subcmd__msp430)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__flash__subcmd__sd)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__flash__subcmd__zepto)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 4 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__format)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__generate__subcmd__completion)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__help)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__help__subcmd__list__subcmd__destinations)
            opts=""
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 3 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
        bb__subcmd__imager__subcmd__cli__subcmd__list__subcmd__destinations)
            opts="-h --no-frills --no-filter --help bcf sd msp430 dfu zepto"
            if [[ ${cur} == -* || ${COMP_CWORD} -eq 2 ]] ; then
                COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
                return 0
            fi
            case "${prev}" in
                *)
                    COMPREPLY=()
                    ;;
            esac
            COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
            return 0
            ;;
    esac
}

if [[ "${BASH_VERSINFO[0]}" -eq 4 && "${BASH_VERSINFO[1]}" -ge 4 || "${BASH_VERSINFO[0]}" -gt 4 ]]; then
    complete -F _bb-imager-cli -o nosort -o bashdefault -o default bb-imager-cli
else
    complete -F _bb-imager-cli -o bashdefault -o default bb-imager-cli
fi
