// File: joncampbell123[P]haxcc/haxpp.cpp
// Function: accept_tokens(__gnu_cxx::__normal_iterator<token*, std::vector<token, std::allocator<token>>> const&, __gnu_cxx::__normal_iterator<token*, std::vector<token, std::allocator<token>>> const&)
bool accept_tokens(const token_string::iterator &tib,const token_string::iterator &tie) {
    bool pass = pp_pass();
    auto ti = tib;

    /* we're only looking for #preprocessor directives here that control conditional inclusion */
    if (ti != tie && tokenit_next_match_inc(ti,tie,token::PREPROC)) {
        if (tokenit_next_match_inc(ti,tie,token::IF)) {
            pp_cond_t pc; pc.on_if(pp_if_eval(ti,tie),pass);
            pp_cond_stack.push(move(pc));
        }
        else if (tokenit_next_match_inc(ti,tie,token::ELIF)) {
            if (!pp_cond_stack.empty()) {
                pp_cond_stack.top().on_elif(pp_if_eval(ti,tie));
            }
            else {
                throw invalid_argument("#else not allowed here");
            }
        }
        else if (tokenit_next_match_inc(ti,tie,token::IFDEF)) {
            const string &ident = tokenit_next_identifier(ti,tie); /* will throw exception if not! */
            pp_cond_t pc; pc.on_ifdef(is_macro(ident),pass);
            pp_cond_stack.push(move(pc));
        }
        else if (tokenit_next_match_inc(ti,tie,token::IFNDEF)) {
            const string &ident = tokenit_next_identifier(ti,tie); /* will throw exception if not! */
            pp_cond_t pc; pc.on_ifdef(!is_macro(ident),pass);
            pp_cond_stack.push(move(pc));
        }
        else if (tokenit_next_match_inc(ti,tie,token::DEFINE)) { /* some preprocessing done by the parse token code */
            const string &ident = tokenit_next_identifier(ti,tie); /* will throw exception if not! */
            macro_t macro;

            if (tokenit_next_match_inc(ti,tie,token::OPEN_PARENS)) {
                macro.parens = true;
                /* parameter list, IDENTIFIER. Final one may be __VA_ARGS__ */
                do {
                    if (ti == tie) throw invalid_argument("#define macro param list expected close parens");
                    if ((*ti).tval == token::IDENTIFIER) {
                        if (find(macro.param.begin(),macro.param.end(),(*ti).sval) == macro.param.end()) {
                            macro.param.push_back((*ti).sval);
                            ti++;
                        }
                        else {
                            throw invalid_argument(string("parameter specified more than once ") + (*ti).sval);
                        }

                        if (ti == tie) throw invalid_argument("#define macro param cut off suddenly");

                        /* allow older style param... */
                        if (tokenit_next_match_inc(ti,tie,token::DOTDOTDOT)) {
                            macro.last_param_variadic = true;
                            macro.last_param_optional = false;

                            /* this must be the last param! */
                            if (!tokenit_next_match_inc(ti,tie,token::CLOSE_PARENS))
                                throw invalid_argument("#define macro param list expected close parens after ...");

                            break;
                        }
                        else if (tokenit_next_match_inc(ti,tie,token::CLOSE_PARENS)) {
                            break;
                        }
                        else if (tokenit_next_match_inc(ti,tie,token::COMMA)) {
                            /* OK */
                        }
                    }
                    else if (tokenit_next_match_inc(ti,tie,token::DOTDOTDOT)) {
                        macro.param.push_back("__VA_ARGS__");
                        macro.last_param_variadic = true;
                        macro.last_param_optional = true;

                        /* this must be the last param! */
                        if (!tokenit_next_match_inc(ti,tie,token::CLOSE_PARENS))
                            throw invalid_argument("#define macro param list expected close parens after ...");

                        break;
                    }
                    else if (tokenit_next_match_inc(ti,tie,token::CLOSE_PARENS)) {
                        break;
                    }
                    else {
                        throw invalid_argument(string("unexpected token in macro parameter list ") + to_string(*ti));
                    }
                } while (1);
            }

            /* the tokens from here are MACROSUBST, MACROPARAM, __VA_ARGS__, __VA_OPT__ ( MACROSUBST ), STRINGIFY, AND TOKEN_PASTE.
             * There will never be an IDENTIFIER because the parameter matching has already been done. */
            while (ti != tie) {
                if ((*ti).tval == token::MACROSUBST ||
                    (*ti).tval == token::VA_ARGS ||
                    (*ti).tval == token::VA_OPT ||
                    (*ti).tval == token::COMMA ||
                    (*ti).tval == token::STRINGIFY ||
                    (*ti).tval == token::TOKEN_PASTE ||
                    (*ti).tval == token::OPEN_PARENS ||
                    (*ti).tval == token::CLOSE_PARENS) {
                    macro.subst.push_back(*ti);
                    ti++;
                }
                else if ((*ti).tval == token::MACROPARAM) {
                    if ((*ti).i.u >= (unsigned long long)macro.param.size()) throw runtime_error("macro param out of range");
                    macro.subst.push_back(*ti);
                    ti++;
                }
                else {
                    throw invalid_argument(string("unexpected token in the body of a macro ") + to_string(*ti));
                }
            }

            {
                auto mi = macro_store.find(ident);
                if (mi != macro_store.end()) {
                    if (mi->second == macro)
                        macro_store[ident] = macro;
                    else
                        fprintf(stderr,"WARNING: Macro '%s' redefinition\n",ident.c_str());
                }
                else {
                    macro_store[ident] = macro;
                }
            }
        }
        else if (tokenit_next_match_inc(ti,tie,token::UNDEF)) {
            const string &ident = tokenit_next_identifier(ti,tie); /* will throw exception if not! */

            {
                auto mi = macro_store.find(ident);
                if (mi != macro_store.end())
                    macro_store.erase(mi);
            }
        }
        else if (tokenit_next_match_inc(ti,tie,token::ELSE)) {
            if (!pp_cond_stack.empty()) {
                pp_cond_stack.top().on_else();
            }
            else {
                throw invalid_argument("#else not allowed here");
            }
        }
        else if (tokenit_next_match_inc(ti,tie,token::ENDIF)) {
            if (!pp_cond_stack.empty()) {
                pp_cond_stack.pop();
                pass = pp_pass();
            }
            else {
                throw invalid_argument("too many #endif");
            }
        }
    }

    return pass;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x400, %rsp            # imm = 0x400
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
callq 0x10960
andb $0x1, %al
movb %al, -0x11(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x16580
testb $0x1, %al
jne 0x132ce
jmp 0x1439a
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x2, %edx
callq 0x143c0
testb $0x1, %al
jne 0x132f4
jmp 0x1439a
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x60, %edx
callq 0x143c0
testb $0x1, %al
jne 0x13317
jmp 0x1335c
leaq -0x34(%rbp), %rdi
callq 0x16b60
movq -0x10(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x130d0
movb %al, %cl
movb -0x11(%rbp), %al
movzbl %cl, %esi
andl $0x1, %esi
movzbl %al, %edx
andl $0x1, %edx
leaq -0x34(%rbp), %rdi
callq 0x47a0
leaq 0x200ba(%rip), %rdi     # 0x33408
leaq -0x34(%rbp), %rsi
callq 0x16b80
jmp 0x14398
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x61, %edx
callq 0x143c0
testb $0x1, %al
jne 0x13382
jmp 0x13427
leaq 0x2007f(%rip), %rdi     # 0x33408
callq 0x16670
testb $0x1, %al
jne 0x133c6
leaq 0x2006f(%rip), %rdi     # 0x33408
callq 0x16690
movq %rax, -0x308(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x130d0
movq -0x308(%rbp), %rdi
movzbl %al, %esi
andl $0x1, %esi
callq 0x47e0
jmp 0x13422
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x310(%rbp)
leaq 0x11699(%rip), %rsi     # 0x24a7d
callq 0x3530
jmp 0x133eb
movq -0x310(%rbp), %rdi
movq 0x1fbdf(%rip), %rsi     # 0x32fd8
movq 0x1fbc0(%rip), %rdx     # 0x32fc0
callq 0x34b0
movq -0x310(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x31f0
jmp 0x143a8
jmp 0x14396
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x64, %edx
callq 0x143c0
testb $0x1, %al
jne 0x1344a
jmp 0x134a7
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x108b0
movq %rax, -0x60(%rbp)
leaq -0x6c(%rbp), %rdi
callq 0x16b60
movq -0x60(%rbp), %rdi
callq 0x56b0
movb %al, %cl
movb -0x11(%rbp), %al
movzbl %cl, %esi
andl $0x1, %esi
movzbl %al, %edx
andl $0x1, %edx
leaq -0x6c(%rbp), %rdi
callq 0x4890
leaq 0x1ff6f(%rip), %rdi     # 0x33408
leaq -0x6c(%rbp), %rsi
callq 0x16b80
jmp 0x14394
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x65, %edx
callq 0x143c0
testb $0x1, %al
jne 0x134ca
jmp 0x13539
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x108b0
movq %rax, -0x80(%rbp)
leaq -0x8c(%rbp), %rdi
callq 0x16b60
movq -0x80(%rbp), %rdi
callq 0x56b0
movb %al, %cl
xorb $-0x1, %cl
movb -0x11(%rbp), %al
movzbl %cl, %esi
andl $0x1, %esi
movzbl %al, %edx
andl $0x1, %edx
leaq -0x8c(%rbp), %rdi
callq 0x4890
leaq 0x1fee0(%rip), %rdi     # 0x33408
leaq -0x8c(%rbp), %rsi
callq 0x16b80
jmp 0x14392
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x66, %edx
callq 0x143c0
testb $0x1, %al
jne 0x13565
jmp 0x14164
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movq %rdi, -0x320(%rbp)
callq 0x108b0
movq %rax, -0xa0(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x16bb0
movq -0x320(%rbp), %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rsi
movl $0x20, %edx
callq 0x143c0
movb %al, -0x311(%rbp)
jmp 0x135cb
movb -0x311(%rbp), %al
testb $0x1, %al
jne 0x135da
jmp 0x13d48
movb $0x1, -0xae(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x16970
testb $0x1, %al
jne 0x135f4
jmp 0x13666
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x328(%rbp)
leaq 0x121b7(%rip), %rsi     # 0x257c9
callq 0x3530
jmp 0x13619
movq -0x328(%rbp), %rdi
movq 0x1f9b1(%rip), %rsi     # 0x32fd8
movq 0x1f992(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x143b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x14153
movq -0x328(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x31f0
jmp 0x14153
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x5, (%rax)
jne 0x13a38
leaq -0xc8(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0x164a0
movq -0x338(%rbp), %rdi
movq %rax, -0xf8(%rbp)
callq 0x164d0
movq %rax, -0x100(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x16600
movq %rax, %rdx
addq $0x48, %rdx
movq -0xf8(%rbp), %rdi
movq -0x100(%rbp), %rsi
callq 0x16450
movq %rax, -0x330(%rbp)
jmp 0x136d1
movq -0x330(%rbp), %rax
movq %rax, -0xf0(%rbp)
leaq -0xe0(%rbp), %rdi
addq $0x18, %rdi
callq 0x164d0
movq %rax, -0x108(%rbp)
leaq -0xf0(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x16bf0
testb $0x1, %al
jne 0x1370f
jmp 0x13752
leaq -0xc8(%rbp), %rax
movq %rax, -0x340(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x16600
movq -0x340(%rbp), %rdi
movq %rax, %rsi
addq $0x48, %rsi
callq 0x163e0
jmp 0x1373b
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x165c0
movq %rax, -0x110(%rbp)
jmp 0x13861
movb $0x1, -0x152(%rbp)
movl $0x10, %edi
callq 0x3130
movq %rax, -0x350(%rbp)
leaq -0x151(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0x34f0
movq -0x348(%rbp), %rdx
leaq 0x1206d(%rip), %rsi     # 0x257f8
leaq -0x150(%rbp), %rdi
callq 0x15960
jmp 0x13799
leaq -0x20(%rbp), %rdi
callq 0x16600
movq %rax, %rdx
addq $0x48, %rdx
leaq -0x130(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x15d00
jmp 0x137be
movq -0x350(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x34d0
jmp 0x137d3
movq -0x350(%rbp), %rdi
movb $0x0, -0x152(%rbp)
movq 0x1f7f0(%rip), %rsi     # 0x32fd8
movq 0x1f7d1(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x143b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13839
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x1382d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x3598
leaq -0x150(%rbp), %rdi
callq 0x3598
leaq -0x151(%rbp), %rdi
callq 0x32f0
testb $0x1, -0x152(%rbp)
jne 0x13850
jmp 0x1385c
movq -0x350(%rbp), %rdi
callq 0x31f0
jmp 0x14153
movq -0x10(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x16970
testb $0x1, %al
jne 0x13874
jmp 0x138d5
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x358(%rbp)
leaq 0x11f8a(%rip), %rsi     # 0x2581c
callq 0x3530
jmp 0x13899
movq -0x358(%rbp), %rdi
movq 0x1f731(%rip), %rsi     # 0x32fd8
movq 0x1f712(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x143b1
movq -0x358(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x31f0
jmp 0x14153
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x160(%rbp)
movq -0x160(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x19, %edx
callq 0x143c0
movb %al, -0x359(%rbp)
jmp 0x13900
movb -0x359(%rbp), %al
testb $0x1, %al
jne 0x1390f
jmp 0x139ba
movb $0x1, -0xb0(%rbp)
movb $0x0, -0xaf(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x168(%rbp)
movq -0x168(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x21, %edx
callq 0x143c0
movb %al, -0x35a(%rbp)
jmp 0x13948
movb -0x35a(%rbp), %al
testb $0x1, %al
jne 0x139b5
jmp 0x13954
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x368(%rbp)
leaq 0x11ecf(%rip), %rsi     # 0x25841
callq 0x3530
jmp 0x13979
movq -0x368(%rbp), %rdi
movq 0x1f651(%rip), %rsi     # 0x32fd8
movq 0x1f632(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x143b1
movq -0x368(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x31f0
jmp 0x14153
jmp 0x13d46
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x170(%rbp)
movq -0x170(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x21, %edx
callq 0x143c0
movb %al, -0x369(%rbp)
jmp 0x139e5
movb -0x369(%rbp), %al
testb $0x1, %al
jne 0x139f1
jmp 0x139f6
jmp 0x13d46
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x178(%rbp)
movq -0x178(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x17, %edx
callq 0x143c0
movb %al, -0x36a(%rbp)
jmp 0x13a21
movb -0x36a(%rbp), %al
testb $0x1, %al
jne 0x13a2d
jmp 0x13a2f
jmp 0x13a2f
jmp 0x13a31
jmp 0x13a33
jmp 0x13d38
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x180(%rbp)
movq -0x180(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x19, %edx
callq 0x143c0
movb %al, -0x36b(%rbp)
jmp 0x13a63
movb -0x36b(%rbp), %al
testb $0x1, %al
jne 0x13a72
jmp 0x13bc2
leaq -0xc8(%rbp), %rax
movq %rax, -0x380(%rbp)
leaq -0x1a1(%rbp), %rdi
movq %rdi, -0x378(%rbp)
callq 0x34f0
movq -0x378(%rbp), %rdx
leaq 0x1114d(%rip), %rsi     # 0x24bee
leaq -0x1a0(%rbp), %rdi
callq 0x15960
jmp 0x13aaf
movq -0x380(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x161e0
jmp 0x13ac4
leaq -0x1a0(%rbp), %rdi
callq 0x3598
leaq -0x1a1(%rbp), %rdi
callq 0x32f0
movb $0x1, -0xb0(%rbp)
movb $0x1, -0xaf(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1b0(%rbp)
movq -0x1b0(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x21, %edx
callq 0x143c0
movb %al, -0x381(%rbp)
jmp 0x13b15
movb -0x381(%rbp), %al
testb $0x1, %al
jne 0x13bbd
jmp 0x13b25
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x390(%rbp)
leaq 0x11cfe(%rip), %rsi     # 0x25841
callq 0x3530
jmp 0x13b4a
movq -0x390(%rbp), %rdi
movq 0x1f480(%rip), %rsi     # 0x32fd8
movq 0x1f461(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x143b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13b8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1a0(%rbp), %rdi
callq 0x3598
leaq -0x1a1(%rbp), %rdi
callq 0x32f0
jmp 0x14153
movq -0x390(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x31f0
jmp 0x14153
jmp 0x13d46
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x1b8(%rbp)
movq -0x1b8(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x21, %edx
callq 0x143c0
movb %al, -0x391(%rbp)
jmp 0x13bed
movb -0x391(%rbp), %al
testb $0x1, %al
jne 0x13bf9
jmp 0x13bfe
jmp 0x13d46
movb $0x1, -0x221(%rbp)
movl $0x10, %edi
callq 0x3130
movq %rax, -0x3a8(%rbp)
leaq -0x1f9(%rbp), %rdi
movq %rdi, -0x3a0(%rbp)
callq 0x34f0
movq -0x3a0(%rbp), %rdx
leaq 0x11c43(%rip), %rsi     # 0x2587a
leaq -0x1f8(%rbp), %rdi
callq 0x15960
jmp 0x13c45
leaq -0x20(%rbp), %rdi
callq 0x16600
movq %rax, %rsi
leaq -0x220(%rbp), %rdi
callq 0x7d10
jmp 0x13c5f
leaq -0x1d8(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
leaq -0x220(%rbp), %rdx
callq 0x15d50
jmp 0x13c7b
movq -0x3a8(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x34d0
jmp 0x13c90
movq -0x3a8(%rbp), %rdi
movb $0x0, -0x221(%rbp)
movq 0x1f333(%rip), %rsi     # 0x32fd8
movq 0x1f314(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x143b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13d10
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13d04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13cf8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1d8(%rbp), %rdi
callq 0x3598
leaq -0x220(%rbp), %rdi
callq 0x3598
leaq -0x1f8(%rbp), %rdi
callq 0x3598
leaq -0x1f9(%rbp), %rdi
callq 0x32f0
testb $0x1, -0x221(%rbp)
jne 0x13d27
jmp 0x13d33
movq -0x3a8(%rbp), %rdi
callq 0x31f0
jmp 0x14153
jmp 0x13d3a
movb $0x1, %al
testb $0x1, %al
jne 0x135e1
jmp 0x13d46
jmp 0x13d48
jmp 0x13d4a
movq -0x10(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x16580
testb $0x1, %al
jne 0x13d60
jmp 0x14019
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x3, (%rax)
je 0x13dd0
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x7c, (%rax)
je 0x13dd0
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x7d, (%rax)
je 0x13dd0
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x17, (%rax)
je 0x13dd0
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x7a, (%rax)
je 0x13dd0
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x7b, (%rax)
je 0x13dd0
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x20, (%rax)
je 0x13dd0
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x21, (%rax)
jne 0x13e01
leaq -0x20(%rbp), %rdi
callq 0x16600
movq %rax, %rsi
leaq -0xe0(%rbp), %rdi
callq 0x16c30
jmp 0x13dea
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x165c0
movq %rax, -0x230(%rbp)
jmp 0x14014
leaq -0x20(%rbp), %rdi
callq 0x16600
cmpl $0x4, (%rax)
jne 0x13ed8
leaq -0x20(%rbp), %rdi
callq 0x16600
movq 0x8(%rax), %rax
movq %rax, -0x3b0(%rbp)
leaq -0xe0(%rbp), %rdi
addq $0x18, %rdi
callq 0x161c0
movq %rax, %rcx
movq -0x3b0(%rbp), %rax
cmpq %rcx, %rax
jb 0x13ea7
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x3b8(%rbp)
leaq 0x11a40(%rip), %rsi     # 0x258a4
callq 0x30d0
jmp 0x13e6b
movq -0x3b8(%rbp), %rdi
movq 0x1f17f(%rip), %rsi     # 0x32ff8
movq 0x1f130(%rip), %rdx     # 0x32fb0
callq 0x34b0
jmp 0x143b1
movq -0x3b8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x31f0
jmp 0x14153
leaq -0x20(%rbp), %rdi
callq 0x16600
movq %rax, %rsi
leaq -0xe0(%rbp), %rdi
callq 0x16c30
jmp 0x13ec1
leaq -0x20(%rbp), %rdi
xorl %esi, %esi
callq 0x165c0
movq %rax, -0x238(%rbp)
jmp 0x14012
movb $0x1, -0x2a1(%rbp)
movl $0x10, %edi
callq 0x3130
movq %rax, -0x3c8(%rbp)
leaq -0x279(%rbp), %rdi
movq %rdi, -0x3c0(%rbp)
callq 0x34f0
movq -0x3c0(%rbp), %rdx
leaq 0x119ac(%rip), %rsi     # 0x258bd
leaq -0x278(%rbp), %rdi
callq 0x15960
jmp 0x13f1f
leaq -0x20(%rbp), %rdi
callq 0x16600
movq %rax, %rsi
leaq -0x2a0(%rbp), %rdi
callq 0x7d10
jmp 0x13f39
leaq -0x258(%rbp), %rdi
leaq -0x278(%rbp), %rsi
leaq -0x2a0(%rbp), %rdx
callq 0x15d50
jmp 0x13f55
movq -0x3c8(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x34d0
jmp 0x13f6a
movq -0x3c8(%rbp), %rdi
movb $0x0, -0x2a1(%rbp)
movq 0x1f059(%rip), %rsi     # 0x32fd8
movq 0x1f03a(%rip), %rdx     # 0x32fc0
callq 0x34b0
jmp 0x143b1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13fea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13fde
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x13fd2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x258(%rbp), %rdi
callq 0x3598
leaq -0x2a0(%rbp), %rdi
callq 0x3598
leaq -0x278(%rbp), %rdi
callq 0x3598
leaq -0x279(%rbp), %rdi
callq 0x32f0
testb $0x1, -0x2a1(%rbp)
jne 0x14001
jmp 0x1400d
movq -0x3c8(%rbp), %rdi
callq 0x31f0
jmp 0x14153
jmp 0x14014
jmp 0x13d4a
movq -0xa0(%rbp), %rsi
leaq 0x1f2c1(%rip), %rdi     # 0x332e8
callq 0x15b10
movq %rax, -0x3d0(%rbp)
jmp 0x14035
movq -0x3d0(%rbp), %rax
movq %rax, -0x2b0(%rbp)
leaq 0x1f29e(%rip), %rdi     # 0x332e8
callq 0x15b40
movq %rax, -0x2b8(%rbp)
leaq -0x2b0(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x15ae0
testb $0x1, %al
jne 0x14072
jmp 0x1410f
leaq -0x2b0(%rbp), %rdi
callq 0x16180
movq %rax, %rdi
addq $0x20, %rdi
leaq -0xe0(%rbp), %rsi
callq 0x49b0
movb %al, -0x3d1(%rbp)
jmp 0x14099
movb -0x3d1(%rbp), %al
testb $0x1, %al
jne 0x140a5
jmp 0x140d8
movq -0xa0(%rbp), %rsi
leaq 0x1f235(%rip), %rdi     # 0x332e8
callq 0x16ca0
movq %rax, -0x3e0(%rbp)
jmp 0x140c1
movq -0x3e0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x16d80
jmp 0x140d6
jmp 0x1410d
movq 0x1eed9(%rip), %rax     # 0x32fb8
movq (%rax), %rax
movq %rax, -0x3e8(%rbp)
movq -0xa0(%rbp), %rdi
callq 0x30f0
movq -0x3e8(%rbp), %rdi
movq %rax, %rdx
leaq 0x117e0(%rip), %rsi     # 0x258e6
movb $0x0, %al
callq 0x33f0
jmp 0x14142
movq -0xa0(%rbp), %rsi
leaq 0x1f1cb(%rip), %rdi     # 0x332e8
callq 0x16ca0
movq %rax, -0x3f0(%rbp)
jmp 0x1412b
movq -0x3f0(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x16d80
jmp 0x14140
jmp 0x14142
leaq -0xe0(%rbp), %rdi
callq 0x16de0
jmp 0x14390
leaq -0xe0(%rbp), %rdi
callq 0x16de0
jmp 0x143a8
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x2c0(%rbp)
movq -0x2c0(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x67, %edx
callq 0x143c0
testb $0x1, %al
jne 0x14190
jmp 0x14228
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x2d0(%rbp)
movq -0x2d0(%rbp), %rsi
leaq -0x20(%rbp), %rdi
callq 0x108b0
movq %rax, -0x2c8(%rbp)
movq -0x2c8(%rbp), %rsi
leaq 0x1f125(%rip), %rdi     # 0x332e8
callq 0x15b10
movq %rax, -0x2d8(%rbp)
leaq 0x1f112(%rip), %rdi     # 0x332e8
callq 0x15b40
movq %rax, -0x2e0(%rbp)
leaq -0x2d8(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x15ae0
testb $0x1, %al
jne 0x141fb
jmp 0x14223
movq -0x2d8(%rbp), %rax
movq %rax, -0x2e8(%rbp)
movq -0x2e8(%rbp), %rsi
leaq 0x1f0d1(%rip), %rdi     # 0x332e8
callq 0x16e10
movq %rax, -0x2f0(%rbp)
jmp 0x1438e
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x2f8(%rbp)
movq -0x2f8(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x5a, %edx
callq 0x143c0
testb $0x1, %al
jne 0x14254
jmp 0x142db
leaq 0x1f1ad(%rip), %rdi     # 0x33408
callq 0x16670
testb $0x1, %al
jne 0x1427a
leaq 0x1f19d(%rip), %rdi     # 0x33408
callq 0x16690
movq %rax, %rdi
callq 0x48d0
jmp 0x142d6
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x3f8(%rbp)
leaq 0x107e5(%rip), %rsi     # 0x24a7d
callq 0x3530
jmp 0x1429f
movq -0x3f8(%rbp), %rdi
movq 0x1ed2b(%rip), %rsi     # 0x32fd8
movq 0x1ed0c(%rip), %rdx     # 0x32fc0
callq 0x34b0
movq -0x3f8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x31f0
jmp 0x143a8
jmp 0x1438c
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x300(%rbp)
movq -0x300(%rbp), %rsi
leaq -0x20(%rbp), %rdi
movl $0x62, %edx
callq 0x143c0
testb $0x1, %al
jne 0x14307
jmp 0x1438a
leaq 0x1f0fa(%rip), %rdi     # 0x33408
callq 0x16670
testb $0x1, %al
jne 0x1432f
leaq 0x1f0ea(%rip), %rdi     # 0x33408
callq 0x16e50
callq 0x10960
andb $0x1, %al
movb %al, -0x11(%rbp)
jmp 0x14388
movl $0x10, %edi
callq 0x3130
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x400(%rbp)
leaq 0x115bb(%rip), %rsi     # 0x25908
callq 0x3530
jmp 0x14354
movq -0x400(%rbp), %rdi
movq 0x1ec76(%rip), %rsi     # 0x32fd8
movq 0x1ec57(%rip), %rdx     # 0x32fc0
callq 0x34b0
movq -0x400(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x31f0
jmp 0x143a8
jmp 0x1438a
jmp 0x1438c
jmp 0x1438e
jmp 0x14390
jmp 0x14392
jmp 0x14394
jmp 0x14396
jmp 0x14398
jmp 0x1439a
movb -0x11(%rbp), %al
andb $0x1, %al
addq $0x400, %rsp            # imm = 0x400
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x34e0
nopw %cs:(%rax,%rax)