// File: ridiculousfish[P]docopt_fish/docopt_fish_test.cpp
// Function: run_1_correctness_test(char const*, char const*, char const*, unsigned long, unsigned long)
static void run_1_correctness_test(const char *usage, const char *joined_argv, const char *joined_expected_results, size_t test_idx, size_t arg_idx) {
    typedef map<string_t, argument_t > arg_map_t;
    typedef map<string_t, string_t> string_map_t;
    
    /* Separate argv by spaces */
    string_list_t argv = split_nonempty(joined_argv, ' ');
    
    /* Prepend the program name for every argument */
    argv.insert(argv.begin(), to_string("prog"));
    
    /* Usage as a string */
    const string_t usage_str(usage, usage + strlen(usage));
    
    /* Perform the parsing */
    arg_map_t results;
    std::vector<doc_error_t> error_list;
    vector<size_t> unused_args;
    argument_parser_t parser;
    bool parse_success = parser.set_doc(usage_str, &error_list);
    if (parse_success) {
        results = parser.parse_arguments(argv, flags_default, &error_list, &unused_args);
    }
    
    bool expects_error = ! strcmp(joined_expected_results, ERROR_EXPECTED);
    bool did_error = ! parse_success || ! unused_args.empty() || ! error_list.empty();
    
    if (expects_error && ! did_error) {
        err("Correctness test %lu.%lu was expected to fail, but did not", test_idx, arg_idx);
    } else if (did_error && ! expects_error) {
        err("Correctness test %lu.%lu was expected to succeed, but instead errored", test_idx, arg_idx);
        parser.parse_arguments(argv, flags_default, &error_list, &unused_args);
        for (size_t i=0; i < error_list.size(); i++) {
            fprintf(stderr, "\t%ls\n", wide(error_list.at(i).text));
        }
    } else if (! did_error && ! expects_error) {
        /* joined_expected_results is a newline-delimited "map" of the form key:value */
        const string_map_t expected = parse_expected_results(joined_expected_results);
        
        // Verify everything we expected appears in our map
        for (auto iter = expected.cbegin(); iter != expected.cend(); ++iter) {
            const string_t &key = iter->first;
            const string_t &val = iter->second;
            arg_map_t::const_iterator arg_iter = results.find(key);
            if (arg_iter == results.end()) {
                err("Correctness test %lu.%lu: Expected to find %ls = %ls, but it was missing", test_idx, arg_idx, wide(key), wide(val));
            } else {
                const argument_t &arg = arg_iter->second;
                /* The value here can be interpreted a few ways. If it is "True" or "False", it means we expect the argument to have no values, and to have a count of 1 or 0, respectively. If it is % followed by a one-digit number, it represents the count of the argument; values is expected to be empty. Otherwise, split the value about ', '; those are the values we expect. */
                if (val == to_string("True")) {
                    /* A "true" means we expect the argument ot have no values, and to have appeared once */
                    do_arg_test(arg.count == 1);
                    do_arg_test(arg.values.empty());
                } else if (val == to_string("False") || val == to_string("None")) {
                    do_arg_test(arg.count == 0);
                    do_arg_test(arg.values.empty());
                } else if (is_percent_digit(val)) {
                    size_t expected_count = val.at(1) - '0';
                    assert(expected_count <= 9);
                    do_arg_test(arg.count == expected_count);
                    do_arg_test(arg.values.empty());
                } else {
                    const string_list_t values = split(val, ", ");
                    do_arg_test(arg.values == values);
                    if (arg.values != values) {
                        err("Key '%ls' expected '%ls', found '%ls'", wide(key), wide(join(arg.values, ", ")), wide(val));
                    }
                    /* Note that we don't test count here, since count will be 0 if it came from a default: clause, and nonzero if it did not */
                }
            }
        }
        
        // Verify nothing we didn't expect appears in our map
        for (auto iter = results.cbegin(); iter != results.cend(); ++iter) {
            const string_t &key = iter->first;
            string_map_t::const_iterator result = expected.find(key);
            if (result == expected.end()) {
                err("Test %lu.%lu: Unexpected key %ls with count %u", test_idx, arg_idx, wide(key), iter->second.count);
            }
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x420, %rsp            # imm = 0x420
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x10(%rbp), %rsi
leaq -0x40(%rbp), %rdi
movq %rdi, -0x328(%rbp)
movl $0x20, %edx
callq 0x40670
movq -0x328(%rbp), %rdi
callq 0x19820
movq %rax, -0x50(%rbp)
leaq -0x48(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x440d0
leaq 0xe14a(%rip), %rsi      # 0x4db36
leaq -0x70(%rbp), %rdi
callq 0x3af90
jmp 0x3f9f7
movq -0x48(%rbp), %rsi
leaq -0x40(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0x44090
movq %rax, -0x330(%rbp)
jmp 0x3fa11
movq -0x330(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x8590
movq -0x8(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0x8110
movq %rax, %rcx
movq -0x348(%rbp), %rax
addq %rcx, %rax
movq %rax, -0x340(%rbp)
leaq -0xa9(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0x8130
movq -0x348(%rbp), %rsi
movq -0x340(%rbp), %rdx
movq -0x338(%rbp), %rcx
leaq -0xa8(%rbp), %rdi
callq 0x43f20
jmp 0x3fa82
leaq -0xa9(%rbp), %rdi
callq 0x85f0
leaq -0xe0(%rbp), %rdi
callq 0x19b30
leaq -0xf8(%rbp), %rdi
callq 0xbe50
leaq -0x110(%rbp), %rdi
callq 0xcf10
leaq -0x118(%rbp), %rdi
callq 0xab20
jmp 0x3fac0
leaq -0x140(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x82c0
jmp 0x3fad5
leaq -0x118(%rbp), %rdi
leaq -0x140(%rbp), %rsi
leaq -0xf8(%rbp), %rdx
callq 0xa910
movb %al, -0x349(%rbp)
jmp 0x3faf7
leaq -0x140(%rbp), %rdi
callq 0x8590
movb -0x349(%rbp), %al
andb $0x1, %al
movb %al, -0x119(%rbp)
testb $0x1, -0x119(%rbp)
je 0x3fbf2
leaq -0x170(%rbp), %rdi
leaq -0x118(%rbp), %rsi
leaq -0x40(%rbp), %rdx
xorl %ecx, %ecx
leaq -0xf8(%rbp), %r8
leaq -0x110(%rbp), %r9
callq 0xa850
jmp 0x3fb47
leaq -0xe0(%rbp), %rdi
leaq -0x170(%rbp), %rsi
callq 0x44110
leaq -0x170(%rbp), %rdi
callq 0x19d50
jmp 0x3fbf2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4064f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x8590
jmp 0x4064f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0xa9(%rbp), %rdi
callq 0x85f0
jmp 0x4064f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4061f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x40613
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x8590
jmp 0x40613
movq -0x18(%rbp), %rdi
leaq 0xcfae(%rip), %rsi      # 0x4cbab
callq 0x8490
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
andb $0x1, %al
movb %al, -0x171(%rbp)
movb $0x1, %al
testb $0x1, -0x119(%rbp)
movb %al, -0x34a(%rbp)
je 0x3fc54
leaq -0x110(%rbp), %rdi
callq 0x44140
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x34a(%rbp)
jne 0x3fc40
jmp 0x3fc54
leaq -0xf8(%rbp), %rdi
callq 0xbfd0
xorb $-0x1, %al
movb %al, -0x34a(%rbp)
movb -0x34a(%rbp), %al
andb $0x1, %al
movb %al, -0x172(%rbp)
testb $0x1, -0x171(%rbp)
je 0x3fc91
testb $0x1, -0x172(%rbp)
jne 0x3fc91
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq 0xed44(%rip), %rdi      # 0x4e9c7
xorl %eax, %eax
callq 0x3b570
jmp 0x3fc8c
jmp 0x405c5
testb $0x1, -0x172(%rbp)
je 0x3fe3a
testb $0x1, -0x171(%rbp)
jne 0x3fe3a
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq 0xed48(%rip), %rdi      # 0x4ea02
xorl %eax, %eax
callq 0x3b570
jmp 0x3fcc3
leaq -0x1a8(%rbp), %rdi
leaq -0x118(%rbp), %rsi
leaq -0x40(%rbp), %rdx
xorl %ecx, %ecx
leaq -0xf8(%rbp), %r8
leaq -0x110(%rbp), %r9
callq 0xa850
jmp 0x3fcec
leaq -0x1a8(%rbp), %rdi
callq 0x19d50
movq $0x0, -0x1b0(%rbp)
movq -0x1b0(%rbp), %rax
movq %rax, -0x358(%rbp)
leaq -0xf8(%rbp), %rdi
callq 0xf550
movq %rax, %rcx
movq -0x358(%rbp), %rax
cmpq %rcx, %rax
jae 0x3fe35
movq 0x38299(%rip), %rax     # 0x77fd0
movq (%rax), %rax
movq %rax, -0x368(%rbp)
movq -0x1b0(%rbp), %rsi
leaq -0xf8(%rbp), %rdi
callq 0x44180
movq %rax, -0x360(%rbp)
jmp 0x3fd5d
movq -0x360(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x378(%rbp)
leaq -0x1d1(%rbp), %rdi
movq %rdi, -0x370(%rbp)
callq 0x85e0
movq -0x378(%rbp), %rsi
movq -0x370(%rbp), %rdx
leaq -0x1d0(%rbp), %rdi
callq 0x2be70
jmp 0x3fd9e
leaq -0x1d0(%rbp), %rdi
callq 0x407f0
movq %rax, -0x380(%rbp)
jmp 0x3fdb3
movq -0x380(%rbp), %rdx
movq -0x368(%rbp), %rdi
leaq 0xec80(%rip), %rsi      # 0x4ea48
movb $0x0, %al
callq 0x84b0
leaq -0x1d0(%rbp), %rdi
callq 0x81c0
leaq -0x1d1(%rbp), %rdi
callq 0x8380
movq -0x1b0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x1b0(%rbp)
jmp 0x3fd03
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x3fe24
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x81c0
leaq -0x1d1(%rbp), %rdi
callq 0x8380
jmp 0x40613
jmp 0x405c3
testb $0x1, -0x172(%rbp)
jne 0x405c1
testb $0x1, -0x171(%rbp)
jne 0x405c1
movq -0x18(%rbp), %rsi
leaq -0x208(%rbp), %rdi
callq 0x40950
jmp 0x3fe66
leaq -0x208(%rbp), %rdi
callq 0x441c0
movq %rax, -0x210(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x44220
movq %rax, -0x218(%rbp)
leaq -0x210(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x441f0
testb $0x1, %al
jne 0x3fea8
jmp 0x40487
leaq -0x210(%rbp), %rdi
movq %rdi, -0x390(%rbp)
callq 0x44250
movq -0x390(%rbp), %rdi
movq %rax, -0x220(%rbp)
callq 0x44250
addq $0x20, %rax
movq %rax, -0x228(%rbp)
movq -0x220(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x44270
movq %rax, -0x388(%rbp)
jmp 0x3fef5
movq -0x388(%rbp), %rax
movq %rax, -0x238(%rbp)
leaq -0x230(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x1ac90
leaq -0xe0(%rbp), %rdi
callq 0x1aaf0
movq %rax, -0x248(%rbp)
leaq -0x240(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x1ac90
leaq -0x230(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x442a0
testb $0x1, %al
jne 0x3ff55
jmp 0x3ffc8
movq -0x20(%rbp), %rax
movq %rax, -0x3a8(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x3a0(%rbp)
movq -0x220(%rbp), %rdi
callq 0x3b6c0
movq %rax, -0x398(%rbp)
movq -0x228(%rbp), %rdi
callq 0x3b6c0
movq -0x3a8(%rbp), %rsi
movq -0x3a0(%rbp), %rdx
movq -0x398(%rbp), %rcx
movq %rax, %r8
leaq 0xeaa5(%rip), %rdi      # 0x4ea4e
xorl %eax, %eax
callq 0x3b570
jmp 0x3ffb2
jmp 0x40474
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x405b3
leaq -0x230(%rbp), %rdi
callq 0x442d0
addq $0x20, %rax
movq %rax, -0x250(%rbp)
movq -0x228(%rbp), %rax
movq %rax, -0x3b0(%rbp)
leaq 0xd9ec(%rip), %rsi      # 0x4d9e0
leaq -0x270(%rbp), %rdi
callq 0x3af90
jmp 0x40002
movq -0x3b0(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x442f0
movb %al, -0x3b1(%rbp)
leaq -0x270(%rbp), %rdi
callq 0x8590
movb -0x3b1(%rbp), %al
testb $0x1, %al
jne 0x40033
jmp 0x400ad
jmp 0x40035
movq -0x250(%rbp), %rax
cmpl $0x1, 0x18(%rax)
je 0x40068
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq 0xea46(%rip), %rdi      # 0x4ea97
leaq 0xea63(%rip), %r8       # 0x4eabb
xorl %eax, %eax
movl $0x100, %ecx            # imm = 0x100
callq 0x3b570
jmp 0x40066
jmp 0x40068
jmp 0x4006a
jmp 0x4006c
jmp 0x4006e
movq -0x250(%rbp), %rdi
callq 0x13730
testb $0x1, %al
jne 0x400a4
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq 0xea0a(%rip), %rdi      # 0x4ea97
leaq 0xea36(%rip), %r8       # 0x4eaca
xorl %eax, %eax
movl $0x101, %ecx            # imm = 0x101
callq 0x3b570
jmp 0x400a2
jmp 0x400a4
jmp 0x400a6
jmp 0x400a8
jmp 0x40472
movq -0x228(%rbp), %rax
movq %rax, -0x3c0(%rbp)
movb $0x0, -0x2b1(%rbp)
leaq 0xea14(%rip), %rsi      # 0x4eadd
leaq -0x290(%rbp), %rdi
callq 0x3af90
jmp 0x400d7
movq -0x3c0(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x442f0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x3c1(%rbp)
jne 0x4013c
movq -0x228(%rbp), %rax
movq %rax, -0x3d0(%rbp)
leaq 0xe9d5(%rip), %rsi      # 0x4eae3
leaq -0x2b0(%rbp), %rdi
callq 0x3af90
jmp 0x4011c
movq -0x3d0(%rbp), %rdi
movb $0x1, -0x2b1(%rbp)
leaq -0x2b0(%rbp), %rsi
callq 0x442f0
movb %al, -0x3c1(%rbp)
movb -0x3c1(%rbp), %al
movb %al, -0x3d1(%rbp)
testb $0x1, -0x2b1(%rbp)
jne 0x40153
jmp 0x4015f
leaq -0x2b0(%rbp), %rdi
callq 0x8590
leaq -0x290(%rbp), %rdi
callq 0x8590
movb -0x3d1(%rbp), %al
testb $0x1, %al
jne 0x4017a
jmp 0x40211
jmp 0x4017c
movq -0x250(%rbp), %rax
cmpl $0x0, 0x18(%rax)
je 0x401cc
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq 0xe8ff(%rip), %rdi      # 0x4ea97
leaq 0xe949(%rip), %r8       # 0x4eae8
xorl %eax, %eax
movl $0x103, %ecx            # imm = 0x103
callq 0x3b570
jmp 0x401ad
jmp 0x401cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x8590
jmp 0x405b3
jmp 0x401ce
jmp 0x401d0
jmp 0x401d2
movq -0x250(%rbp), %rdi
callq 0x13730
testb $0x1, %al
jne 0x40208
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq 0xe8a6(%rip), %rdi      # 0x4ea97
leaq 0xe8d2(%rip), %r8       # 0x4eaca
xorl %eax, %eax
movl $0x104, %ecx            # imm = 0x104
callq 0x3b570
jmp 0x40206
jmp 0x40208
jmp 0x4020a
jmp 0x4020c
jmp 0x40470
movq -0x228(%rbp), %rdi
callq 0x40ba0
movb %al, -0x3d2(%rbp)
jmp 0x40225
movb -0x3d2(%rbp), %al
testb $0x1, %al
jne 0x40234
jmp 0x4030e
movq -0x228(%rbp), %rdi
movl $0x1, %esi
callq 0x8630
movq %rax, -0x3e0(%rbp)
jmp 0x4024e
movq -0x3e0(%rbp), %rax
movl (%rax), %eax
subl $0x30, %eax
cltq
movq %rax, -0x2c0(%rbp)
cmpq $0x9, -0x2c0(%rbp)
ja 0x4026f
jmp 0x4028e
leaq 0xe881(%rip), %rdi      # 0x4eaf7
leaq 0xe88e(%rip), %rsi      # 0x4eb0b
movl $0x107, %edx            # imm = 0x107
leaq 0xe897(%rip), %rcx      # 0x4eb20
callq 0x81e0
jmp 0x40290
movq -0x250(%rbp), %rax
movl 0x18(%rax), %eax
cmpq -0x2c0(%rbp), %rax
je 0x402c9
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq 0xe7e5(%rip), %rdi      # 0x4ea97
leaq 0xe8bd(%rip), %r8       # 0x4eb76
xorl %eax, %eax
movl $0x108, %ecx            # imm = 0x108
callq 0x3b570
jmp 0x402c7
jmp 0x402c9
jmp 0x402cb
jmp 0x402cd
jmp 0x402cf
movq -0x250(%rbp), %rdi
callq 0x13730
testb $0x1, %al
jne 0x40305
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq 0xe7a9(%rip), %rdi      # 0x4ea97
leaq 0xe7d5(%rip), %r8       # 0x4eaca
xorl %eax, %eax
movl $0x109, %ecx            # imm = 0x109
callq 0x3b570
jmp 0x40303
jmp 0x40305
jmp 0x40307
jmp 0x40309
jmp 0x4046e
movq -0x228(%rbp), %rsi
leaq 0xe876(%rip), %rdx      # 0x4eb92
leaq -0x2d8(%rbp), %rdi
callq 0x40c20
jmp 0x4032a
jmp 0x4032c
movq -0x250(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x44380
movb %al, -0x3e1(%rbp)
jmp 0x40347
movb -0x3e1(%rbp), %al
testb $0x1, %al
jne 0x4038a
jmp 0x40353
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
leaq 0xe735(%rip), %rdi      # 0x4ea97
leaq 0xe82c(%rip), %r8       # 0x4eb95
xorl %eax, %eax
movl $0x10c, %ecx            # imm = 0x10C
callq 0x3b570
jmp 0x40377
jmp 0x4038a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
jmp 0x4045d
jmp 0x4038c
jmp 0x4038e
movq -0x250(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x44400
movb %al, -0x3e2(%rbp)
jmp 0x403a9
movb -0x3e2(%rbp), %al
testb $0x1, %al
jne 0x403b8
jmp 0x4044f
movq -0x220(%rbp), %rdi
callq 0x3b6c0
movq %rax, -0x3f0(%rbp)
movq -0x250(%rbp), %rsi
leaq 0xe7b9(%rip), %rdx      # 0x4eb92
leaq -0x2f8(%rbp), %rdi
callq 0x3b130
jmp 0x403e7
leaq -0x2f8(%rbp), %rdi
callq 0x3b6c0
movq %rax, -0x3f8(%rbp)
movq -0x228(%rbp), %rdi
callq 0x3b6c0
movq -0x3f0(%rbp), %rsi
movq -0x3f8(%rbp), %rdx
movq %rax, %rcx
leaq 0xe78c(%rip), %rdi      # 0x4ebaa
xorl %eax, %eax
callq 0x3b570
jmp 0x40427
leaq -0x2f8(%rbp), %rdi
callq 0x8590
jmp 0x4044f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x78(%rbp)
movl %eax, -0x7c(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x8590
jmp 0x4045d
leaq -0x2d8(%rbp), %rdi
callq 0x12f80
jmp 0x4046e
leaq -0x2d8(%rbp), %rdi
callq 0x12f80
jmp 0x405b3
jmp 0x40470
jmp 0x40472
jmp 0x40474
jmp 0x40476
leaq -0x210(%rbp), %rdi
callq 0x44430
jmp 0x3fe79
leaq -0xe0(%rbp), %rdi
callq 0x44460
movq %rax, -0x300(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x444c0
movq %rax, -0x308(%rbp)
leaq -0x300(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0x44490
testb $0x1, %al
jne 0x404c9
jmp 0x405a5
leaq -0x300(%rbp), %rdi
callq 0x442d0
movq %rax, -0x310(%rbp)
movq -0x310(%rbp), %rsi
leaq -0x208(%rbp), %rdi
callq 0x444f0
movq %rax, -0x400(%rbp)
jmp 0x404f8
movq -0x400(%rbp), %rax
movq %rax, -0x318(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x44550
movq %rax, -0x320(%rbp)
leaq -0x318(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x44520
testb $0x1, %al
jne 0x40532
jmp 0x40592
movq -0x20(%rbp), %rax
movq %rax, -0x418(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x410(%rbp)
movq -0x310(%rbp), %rdi
callq 0x3b6c0
movq %rax, -0x408(%rbp)
leaq -0x300(%rbp), %rdi
callq 0x442d0
movq -0x418(%rbp), %rsi
movq -0x410(%rbp), %rdx
movq -0x408(%rbp), %rcx
movl 0x38(%rax), %r8d
leaq 0xe649(%rip), %rdi      # 0x4ebd0
xorl %eax, %eax
callq 0x3b570
jmp 0x40590
jmp 0x40592
jmp 0x40594
leaq -0x300(%rbp), %rdi
callq 0x44580
jmp 0x4049a
leaq -0x208(%rbp), %rdi
callq 0x445b0
jmp 0x405c1
leaq -0x208(%rbp), %rdi
callq 0x445b0
jmp 0x40613
jmp 0x405c3
jmp 0x405c5
leaq -0x118(%rbp), %rdi
callq 0xac20
leaq -0x110(%rbp), %rdi
callq 0xd160
leaq -0xf8(%rbp), %rdi
callq 0xc3d0
leaq -0xe0(%rbp), %rdi
callq 0x19d50
leaq -0xa8(%rbp), %rdi
callq 0x8590
leaq -0x40(%rbp), %rdi
callq 0x12f80
addq $0x420, %rsp            # imm = 0x420
popq %rbp
retq
leaq -0x118(%rbp), %rdi
callq 0xac20
leaq -0x110(%rbp), %rdi
callq 0xd160
leaq -0xf8(%rbp), %rdi
callq 0xc3d0
leaq -0xe0(%rbp), %rdi
callq 0x19d50
leaq -0xa8(%rbp), %rdi
callq 0x8590
leaq -0x40(%rbp), %rdi
callq 0x12f80
movq -0x78(%rbp), %rdi
callq 0x85d0
nopw %cs:(%rax,%rax)