// File: /workspace/github_cpp_makefile_star2_O1/BU-DiSC[P]BF-Shared-Hashing/./args.hxx
// Function: bool args::ArgumentParser::Complete<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>>(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>, __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>>)
bool Complete(It it, It end)
            {
                auto nextIt = it;
                if (!readCompletion || (++nextIt != end))
                {
                    return false;
                }

                const auto &chunk = *it;
                auto pos = GetNextPositional();
                std::vector<Command *> commands = GetCommands();
                const auto optionType = ParseOption(chunk, true);

                if (!commands.empty() && (chunk.empty() || optionType == OptionType::Positional))
                {
                    for (auto &cmd : commands)
                    {
                        if ((cmd->GetOptions() & Options::HiddenFromCompletion) == Options::None)
                        {
                            AddCompletionReply(chunk, cmd->Name());
                        }
                    }
                } else
                {
                    bool hasPositionalCompletion = true;

                    if (!commands.empty())
                    {
                        for (auto &cmd : commands)
                        {
                            if ((cmd->GetOptions() & Options::HiddenFromCompletion) == Options::None)
                            {
                                AddCompletionReply(chunk, cmd->Name());
                            }
                        }
                    } else if (pos)
                    {
                        if ((pos->GetOptions() & Options::HiddenFromCompletion) == Options::None)
                        {
                            auto choices = pos->HelpChoices(helpParams);
                            hasPositionalCompletion = !choices.empty() || optionType != OptionType::Positional;
                            for (auto &choice : choices)
                            {
                                AddCompletionReply(chunk, choice);
                            }
                        }
                    }

                    if (hasPositionalCompletion)
                    {
                        auto flags = GetAllFlags();
                        for (auto flag : flags)
                        {
                            if ((flag->GetOptions() & Options::HiddenFromCompletion) != Options::None)
                            {
                                continue;
                            }

                            auto &matcher = flag->GetMatcher();
                            if (!AddCompletionReply(chunk, matcher.GetShortOrAny().str(shortprefix, longprefix)))
                            {
                                for (auto &flagName : matcher.GetFlagStrings())
                                {
                                    if (AddCompletionReply(chunk, flagName.str(shortprefix, longprefix)))
                                    {
                                        break;
                                    }
                                }
                            }
                        }

                        if (optionType == OptionType::LongFlag && allowJoinedLongValue)
                        {
                            const auto separator = longseparator.empty() ? chunk.npos : chunk.find(longseparator);
                            if (separator != chunk.npos)
                            {
                                std::string arg(chunk, 0, separator);
                                if (auto flag = this->Match(arg.substr(longprefix.size())))
                                {
                                    for (auto &choice : flag->HelpChoices(helpParams))
                                    {
                                        AddCompletionReply(chunk, arg + longseparator + choice);
                                    }
                                }
                            }
                        } else if (optionType == OptionType::ShortFlag && allowJoinedShortValue)
                        {
                            if (chunk.size() > shortprefix.size() + 1)
                            {
                                auto arg = chunk.at(shortprefix.size());
                                //TODO: support -abcVALUE where a and b take no value
                                if (auto flag = this->Match(arg))
                                {
                                    for (auto &choice : flag->HelpChoices(helpParams))
                                    {
                                        AddCompletionReply(chunk, shortprefix + arg + choice);
                                    }
                                }
                            }
                        }
                    }
                }

#ifndef ARGS_NOEXCEPT
                throw Completion(completion->Get());
#else
                return true;
#endif
            }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xd8, %rsp
leaq 0x20(%rsi), %rax
cmpq %rdx, %rax
sete %al
testb %al, 0x208(%rdi)
jne 0x1d8b3
xorl %eax, %eax
addq $0xd8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rsi, %r14
movq %rdi, %rbx
movq (%rdi), %rax
callq *0x40(%rax)
movq %rax, %r15
movq (%rbx), %rax
leaq 0xc0(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rsi
callq *0x28(%rax)
movq %rbx, %rdi
movq %r14, %rsi
movl $0x1, %edx
callq 0x1e094
movl %eax, 0x4(%rsp)
movq (%r12), %r13
movq 0x8(%r12), %r12
cmpq %r12, %r13
jne 0x1d929
testq %r15, %r15
je 0x1d9eb
testb $0x40, 0x8(%r15)
jne 0x1d9eb
cmpb $0x1, 0x98(%r15)
jne 0x1d98a
subq $-0x80, %r15
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
callq 0x68fe
jmp 0x1d9a2
cmpl $0x2, 0x4(%rsp)
je 0x1d980
cmpq $0x0, 0x8(%r14)
je 0x1d980
cmpq %r12, %r13
je 0x1d8f8
movq (%r13), %rdx
testb $0x40, 0x8(%rdx)
jne 0x1d955
addq $0x68, %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1f29c
addq $0x8, %r13
cmpq %r12, %r13
jne 0x1d93c
jmp 0x1d9eb
movq (%r13), %rdx
testb $0x40, 0x8(%rdx)
jne 0x1d97c
addq $0x68, %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x1f29c
addq $0x8, %r13
cmpq %r12, %r13
jne 0x1d963
jmp 0x1de31
leaq 0x210(%rbx), %rdx
movq (%r15), %rax
leaq 0x10(%rsp), %rdi
movq %r15, %rsi
callq *0x80(%rax)
movq 0x10(%rsp), %r15
movq 0x18(%rsp), %r13
cmpq %r13, %r15
setne %r12b
cmpl $0x2, 0x4(%rsp)
setne %bpl
cmpq %r13, %r15
je 0x1d9d5
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x1f29c
addq $0x20, %r15
jmp 0x1d9bc
orb %r12b, %bpl
leaq 0x10(%rsp), %rdi
callq 0x6982
testb %bpl, %bpl
je 0x1de31
movq (%rbx), %rax
leaq 0xa8(%rsp), %rdi
movq %rbx, %rsi
callq *0x48(%rax)
movq 0xa8(%rsp), %rcx
movq 0xb0(%rsp), %rax
movq %rax, 0x80(%rsp)
cmpq %rax, %rcx
jne 0x1db29
cmpl $0x0, 0x4(%rsp)
jne 0x1dc60
cmpb $0x1, 0x1f9(%rbx)
jne 0x1dc60
leaq 0x1b8(%rbx), %rax
movq %rax, 0x8(%rsp)
movq 0x1c0(%rbx), %rcx
movq $-0x1, %rax
testq %rcx, %rcx
je 0x1da66
movq 0x8(%rsp), %rax
movq (%rax), %rsi
movq %r14, %rdi
xorl %edx, %edx
callq 0x5690
cmpq $-0x1, %rax
je 0x1de1f
leaq 0x40(%rsp), %rdi
movq %r14, %rsi
xorl %edx, %edx
movq %rax, %rcx
callq 0x50f0
movq 0x180(%rbx), %rdx
leaq 0x60(%rsp), %rdi
leaq 0x40(%rsp), %rsi
movq $-0x1, %rcx
callq 0x5440
leaq 0x18(%rsp), %rdi
movw $0x0, -0x8(%rdi)
leaq 0x28(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
addq %rsi, %rdx
callq 0x6bf6
movq (%rbx), %rax
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq *0x38(%rax)
movq %rax, %r15
movq 0x18(%rsp), %rdi
cmpq %r12, %rdi
je 0x1dae6
callq 0x53d0
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1daf9
callq 0x53d0
testq %r15, %r15
je 0x1de0c
cmpb $0x1, 0x98(%r15)
jne 0x1ddcb
subq $-0x80, %r15
leaq 0x90(%rsp), %rdi
movq %r15, %rsi
callq 0x68fe
jmp 0x1dde6
leaq 0x198(%rbx), %rax
movq %rax, 0x8(%rsp)
leaq 0x178(%rbx), %rax
movq %rax, 0x38(%rsp)
leaq 0x10(%rsp), %r13
leaq 0x40(%rsp), %r12
movq %rcx, 0x88(%rsp)
movq (%rcx), %rbp
testb $0x40, 0x8(%rbp)
jne 0x1dc41
addq $0xa0, %rbp
movq %r13, %rdi
movq %rbp, %rsi
callq 0x1c514
movq %r12, %rdi
movq %r13, %rsi
movq 0x8(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0x1c0e4
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x1f29c
movl %eax, %r15d
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x1dbac
callq 0x53d0
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x1dbc0
callq 0x53d0
testb %r15b, %r15b
jne 0x1dc41
movq %r12, %rdi
movq %r13, %r12
movq %rbp, %rsi
callq 0x1c72c
movq 0x40(%rsp), %rbp
movq 0x48(%rsp), %r13
cmpq %r13, %rbp
je 0x1dc2e
movq %r12, %r15
movq %r12, %rdi
movq %rbp, %rsi
movq 0x8(%rsp), %rdx
movq 0x38(%rsp), %rcx
callq 0x1c0e4
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x1f29c
movl %eax, %r15d
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1dc1f
callq 0x53d0
addq $0x28, %rbp
cmpq %r13, %rbp
sete %al
orb %al, %r15b
je 0x1dbe2
leaq 0x40(%rsp), %r15
movq %r15, %rdi
callq 0x1c7c0
movq %r12, %r13
movq %r15, %r12
movq 0x88(%rsp), %rcx
addq $0x8, %rcx
cmpq 0x80(%rsp), %rcx
jne 0x1db4b
jmp 0x1da1d
cmpl $0x1, 0x4(%rsp)
jne 0x1de1f
cmpb $0x1, 0x1f8(%rbx)
jne 0x1de1f
movq 0x8(%r14), %rdx
movq 0x1a0(%rbx), %rsi
leaq 0x1(%rsi), %rax
cmpq %rax, %rdx
jbe 0x1de1f
cmpq %rsi, %rdx
jbe 0x1dd05
movq (%r14), %rax
movb (%rax,%rsi), %bpl
leaq 0x28(%rsp), %r12
movb $0x1, -0x18(%r12)
movb %bpl, -0x17(%r12)
movq %r12, -0x10(%r12)
movq $0x0, -0x8(%r12)
movb $0x0, (%r12)
movq (%rbx), %rax
leaq 0x10(%rsp), %rsi
movq %rbx, %rdi
callq *0x38(%rax)
movq %rax, %r15
movq 0x18(%rsp), %rdi
cmpq %r12, %rdi
je 0x1dcdf
callq 0x53d0
testq %r15, %r15
je 0x1de1f
cmpb $0x1, 0x98(%r15)
jne 0x1dd13
subq $-0x80, %r15
leaq 0x60(%rsp), %rdi
movq %r15, %rsi
callq 0x68fe
jmp 0x1dd2b
leaq 0xc1ef(%rip), %rdi      # 0x29efb
xorl %eax, %eax
callq 0x55d0
leaq 0x210(%rbx), %rdx
movq (%r15), %rax
leaq 0x60(%rsp), %rdi
movq %r15, %rsi
callq *0x80(%rax)
movq 0x60(%rsp), %r15
movq 0x68(%rsp), %rax
movq %rax, 0x8(%rsp)
cmpq %rax, %r15
jne 0x1dd4e
leaq 0x60(%rsp), %rdi
callq 0x6982
jmp 0x1de1f
leaq 0x198(%rbx), %rax
movq %rax, 0x38(%rsp)
movsbl %bpl, %ebp
leaq 0x40(%rsp), %r13
leaq 0x10(%rsp), %r12
movq %r13, %rdi
movq 0x38(%rsp), %rsi
movl %ebp, %edx
callq 0x1f3bb
movq %r12, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x1c57a
movq %rbx, %rdi
movq %r14, %rsi
movq %r12, %rdx
callq 0x1f29c
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1dda7
callq 0x53d0
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x1ddbb
callq 0x53d0
addq $0x20, %r15
cmpq 0x8(%rsp), %r15
jne 0x1dd68
jmp 0x1dd3f
leaq 0x210(%rbx), %rdx
movq (%r15), %rax
leaq 0x90(%rsp), %rdi
movq %r15, %rsi
callq *0x80(%rax)
movq 0x90(%rsp), %r12
movq 0x98(%rsp), %rbp
cmpq %rbp, %r12
jne 0x1de82
leaq 0x90(%rsp), %rdi
callq 0x6982
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1de1f
callq 0x53d0
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x1de31
callq 0x53d0
movl $0x10, %edi
callq 0x51f0
movq %rax, %r14
movq 0x200(%rbx), %rsi
leaq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0x1f41c
movb $0x1, %bpl
movq %r14, %rdi
movq %rbx, %rsi
callq 0x54d0
leaq 0x1ad29(%rip), %rax     # 0x38b90
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0x1acf5(%rip), %rsi     # 0x38b68
movq 0x1b14e(%rip), %rdx     # 0x38fc8
movq %r14, %rdi
callq 0x5670
leaq 0x60(%rsp), %r13
leaq 0x10(%rsp), %r15
movq %r13, %rdi
leaq 0x40(%rsp), %rsi
movq 0x8(%rsp), %rdx
callq 0x1c1d0
movq %r15, %rdi
movq %r13, %rsi
movq %r12, %rdx
callq 0x1c57a
movq %rbx, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x1f29c
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1dece
callq 0x53d0
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x1dee2
callq 0x53d0
addq $0x20, %r12
cmpq %rbp, %r12
jne 0x1de8c
jmp 0x1ddff
movq %rax, %rbx
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1df0c
callq 0x53d0
jmp 0x1df0c
movq %rax, %rbx
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x1df25
callq 0x53d0
jmp 0x1df25
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x6982
jmp 0x1dfad
movq %rax, %rbx
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1df50
callq 0x53d0
jmp 0x1df50
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x1df69
callq 0x53d0
jmp 0x1df69
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x6982
jmp 0x1e03b
jmp 0x1dfaa
movq %rax, %rbx
movq 0x18(%rsp), %rdi
cmpq %r12, %rdi
je 0x1df93
callq 0x53d0
jmp 0x1df93
jmp 0x1dffd
movq %rax, %rbx
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1dfad
callq 0x53d0
jmp 0x1dfad
jmp 0x1dffd
movq %rax, %rbx
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
jmp 0x1dfed
movq %rax, %rbx
movq 0x18(%rsp), %rdi
cmpq %r12, %rdi
jne 0x1dff2
jmp 0x1e03b
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x1dfe3
callq 0x53d0
jmp 0x1dfe3
movq %rax, %rbx
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x1e03b
callq 0x53d0
jmp 0x1e03b
jmp 0x1dffd
jmp 0x1dffd
movq %rax, %rbx
jmp 0x1e03b
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x6982
jmp 0x1e079
jmp 0x1e051
jmp 0x1e051
movq %rax, %rbx
jmp 0x1e031
movq %rax, %rbx
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rax
cmpq %rax, %rdi
je 0x1e031
callq 0x53d0
leaq 0x40(%rsp), %rdi
callq 0x1c7c0
movq 0xa8(%rsp), %rdi
testq %rdi, %rdi
je 0x1e079
callq 0x53d0
jmp 0x1e079
jmp 0x1e051
movq %rax, %rbx
jmp 0x1e079
movq %rax, %rbx
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1e06c
callq 0x53d0
testb %bpl, %bpl
je 0x1e079
movq %r14, %rdi
callq 0x52e0
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x1e08b
callq 0x53d0
movq %rbx, %rdi
callq 0x56b0
nop