// File: /workspace/github_cpp_makefile_star2_O3/adamiaonr[P]rid-analytics/src/run-analysis.cpp
// Function: main
int main (int argc, char **argv) {

    // parse the arguments with an ArgvParser
    ArgvParser * cmds = create_argv_parser();

    // .scn config file path
    char scn_file[MAX_ARRAY_SIZE];
    // dir where all .csv files with output data will be saved
    char data_dir[MAX_ARRAY_SIZE];
    // output file name for this run
    char output_label[MAX_ARRAY_SIZE];
    // // verbose mode (no verbosity by default)
    // bool verbose = false;
    // evaluation parameters
    // request size (also largest possible |F|) in # of URL parameters
    int request_size = 0;       
    // bloom filter size (in bit)
    int bf_size = 0;
    // codes for mode:
    //  - bits 0 and 1 : resolution type:
    //      - 0 (00) : AML forwarding or flood
    //      - 1 (01) : RML forwarding or 'random link'
    //      - 2 (10) : 'hard fallback'
    //      - 3 (11) : 'soft fallback'
    //  - bit 2 : resolution on/off:
    //      - 0 : OFF
    //      - 1 : ON
    //
    // note : if mode is 00 and resolution is on, we 
    //        use feedback resolution (i.e. go back to source, then origin server)
    int mode = 0;
    // origin server location. default is '1'
    char origin_server[MAX_ARRAY_SIZE];
    strncpy(origin_server, "1", MAX_ARRAY_SIZE);
    // start router id. default is '0'
    char start_router[MAX_ARRAY_SIZE];
    strncpy(start_router, "0", MAX_ARRAY_SIZE);

    // parse() takes the arguments to main() and parses them according to 
    // ArgvParser rules
    int result = cmds->parse(argc, argv);

    // if something went wrong: show help option
    if (result != ArgvParser::NoParserError) {

        fprintf(stderr, "%s\n", cmds->parseErrorDescription(result).c_str());

        if (result != ArgvParser::ParserHelpRequested) {
            fprintf(stderr, "use option -h for help.\n");
        }

        delete cmds;
        return -1;

    } else {

        // otherwise, check for the different OPTION_
        if (cmds->foundOption(OPTION_SCN_FILE)) {

            strncpy(scn_file, (char *) cmds->optionValue(OPTION_SCN_FILE).c_str(), MAX_ARRAY_SIZE);
            
        } else {

            fprintf(stderr, "no .scn file path specified. use "\
                "option -h for help.\n");

            delete cmds;
            return -1;
        }

        if (cmds->foundOption(OPTION_DATA_DIR)) {

            strncpy(data_dir, (char *) cmds->optionValue(OPTION_DATA_DIR).c_str(), MAX_ARRAY_SIZE);
        
        } else {

            fprintf(stderr, "no data directory path specified. use "\
                "option -h for help.\n");

            delete cmds;
            return -1;
        }

        if (cmds->foundOption(OPTION_OUTPUT_LABEL)) {

            strncpy(output_label, (char *) cmds->optionValue(OPTION_OUTPUT_LABEL).c_str(), MAX_ARRAY_SIZE);

        } else {

            fprintf(stderr, "no output .csv file name specified. use "\
                "option -h for help.\n");

            delete cmds;
            return -1;
        }

        if (cmds->foundOption(OPTION_BF_SIZE)) {

            bf_size = std::stoi(cmds->optionValue(OPTION_BF_SIZE));   
        }

        if (cmds->foundOption(OPTION_REQUEST_SIZE)) {

            request_size = std::stoi(cmds->optionValue(OPTION_REQUEST_SIZE));
        }

        if (cmds->foundOption(OPTION_MM_MODE)) {

            mode = std::stoi(cmds->optionValue(OPTION_MM_MODE));
        }

        // incorrect delivery resolution mode
        if (cmds->foundOption(OPTION_RESOLV_MODE)) {
            int resolv = std::stoi(cmds->optionValue(OPTION_RESOLV_MODE));
            // left-shift the resolv bits by 3 and OR-it to mode
            mode |= (resolv << 2);
        }

        if (cmds->foundOption(OPTION_ORIGIN_SERVER)) {

            strncpy(origin_server, (char *) cmds->optionValue(OPTION_ORIGIN_SERVER).c_str(), MAX_ARRAY_SIZE);
        }

        if (cmds->foundOption(OPTION_START_ROUTER)) {

            strncpy(start_router, (char *) cmds->optionValue(OPTION_START_ROUTER).c_str(), MAX_ARRAY_SIZE);
        }

        // if (cmds->foundOption(OPTION_VERBOSE)) {
        //     verbose = true;
        // }
    }

    printf("rid-analytics : request_size = %d, bf_size = %d\n", request_size, bf_size);

    if (result == ArgvParser::ParserHelpRequested) {

        delete cmds;
        return -1;
    }

    // create an rid model environment (according to the specs on nw_filename)
    RID_Analytics * rid_analytics_env = 
        new RID_Analytics(
            std::string(scn_file),          // .scn file w/ topology info
            request_size, bf_size,          // parameters for FP rate calculation
            std::string(origin_server),     // origin server location: useful for latency
            mode,                           // how to handle (1) multiple matches; and (2) wrong deliveries
            std::string(data_dir), std::string(output_label));

    // ... and run the model
    rid_analytics_env->run(std::string(scn_file), std::string(start_router));
    printf("rid-analytics : output dir = %s, output label = %s\n", data_dir, output_label);

    // clean up after yourself...
    delete rid_analytics_env;
    delete cmds;

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x628, %rsp            # imm = 0x628
movq %rsi, %r14
movl %edi, %ebp
callq 0x18c58
movq %rax, %rbx
leaq 0x15c44(%rip), %rsi     # 0x2eeba
leaq 0x320(%rsp), %rdi
movl $0x100, %edx            # imm = 0x100
callq 0x4200
leaq 0x13fdf(%rip), %rsi     # 0x2d26e
leaq 0x220(%rsp), %rdi
movl $0x100, %edx            # imm = 0x100
callq 0x4200
movq %rbx, %rdi
movl %ebp, %esi
movq %r14, %rdx
callq 0x1f4fc
testl %eax, %eax
jne 0x19d97
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x16dbe(%rip), %rsi     # 0x30084
leaq 0x16dbf(%rip), %rdx     # 0x3008c
movq %rsp, %rdi
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x1f3ae
movl %eax, %ebp
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x192f8
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
testb %bpl, %bpl
je 0x19dac
leaq 0x30(%rsp), %r13
movq %r13, -0x10(%r13)
leaq 0x16d73(%rip), %rsi     # 0x30084
leaq 0x16d74(%rip), %rdx     # 0x3008c
leaq 0x20(%rsp), %rdi
callq 0x18bc0
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
movq %rbx, %rsi
callq 0x1f41a
movq (%rsp), %r14
leaq 0x120(%rsp), %rdi
movl $0x100, %edx            # imm = 0x100
movq %r14, %rsi
callq 0x4200
leaq 0x10(%rsp), %rax
cmpq %rax, %r14
je 0x19365
movq 0x10(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x1937c
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
leaq 0x10(%rsp), %r14
movq %r14, (%rdi)
leaq 0x16d31(%rip), %rsi     # 0x300bf
leaq 0x16d32(%rip), %rdx     # 0x300c7
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x1f3ae
movl %eax, %ebp
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x193bd
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
testb %bpl, %bpl
je 0x19db3
leaq 0x20(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x16cea(%rip), %rsi     # 0x300bf
leaq 0x16ceb(%rip), %rdx     # 0x300c7
callq 0x18bc0
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
movq %rbx, %rsi
callq 0x1f41a
movq (%rsp), %r14
leaq 0x520(%rsp), %rdi
movl $0x100, %edx            # imm = 0x100
movq %r14, %rsi
callq 0x4200
leaq 0x10(%rsp), %rax
cmpq %rax, %r14
je 0x19424
movq 0x10(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x1943b
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
leaq 0x10(%rsp), %r14
movq %r14, (%rdi)
leaq 0x16cb4(%rip), %rsi     # 0x30101
leaq 0x16cb9(%rip), %rdx     # 0x3010d
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x1f3ae
movl %eax, %ebp
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x1947c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
testb %bpl, %bpl
je 0x19dba
leaq 0x20(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x16c6d(%rip), %rsi     # 0x30101
leaq 0x16c72(%rip), %rdx     # 0x3010d
callq 0x18bc0
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
movq %rbx, %rsi
callq 0x1f41a
movq (%rsp), %r14
leaq 0x420(%rsp), %rdi
movl $0x100, %edx            # imm = 0x100
movq %r14, %rsi
callq 0x4200
leaq 0x10(%rsp), %rax
cmpq %rax, %r14
je 0x194e3
movq 0x10(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x194fa
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
leaq 0x10(%rsp), %r14
movq %r14, (%rdi)
leaq 0x16c44(%rip), %rsi     # 0x30150
leaq 0x16c44(%rip), %rdx     # 0x30157
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x1f3ae
movl %eax, %ebp
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x1953b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq $0x0, 0x50(%rsp)
testb %bpl, %bpl
je 0x1960f
leaq 0x20(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x16bf4(%rip), %rsi     # 0x30150
leaq 0x16bf4(%rip), %rdx     # 0x30157
callq 0x18bc0
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
movq %rbx, %rsi
callq 0x1f41a
movq (%rsp), %r14
callq 0x4060
movq %rax, %r15
movl (%rax), %ebp
movl $0x0, (%rax)
leaq 0x58(%rsp), %r12
movq %r14, %rdi
movq %r12, %rsi
movl $0xa, %edx
callq 0x4520
cmpq %r14, (%r12)
je 0x19dc6
leaq -0x80000000(%rax), %rcx
movabsq $-0x100000000, %rdx     # imm = 0xFFFFFFFF00000000
cmpq %rdx, %rcx
leaq 0x10(%rsp), %r14
jb 0x19dd2
movl (%r15), %ecx
cmpl $0x22, %ecx
je 0x19dd2
movq %rax, 0x50(%rsp)
testl %ecx, %ecx
jne 0x195e2
movl %ebp, (%r15)
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x195f8
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x1960f
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x16b5b(%rip), %rsi     # 0x30177
leaq 0x16b60(%rip), %rdx     # 0x30183
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x1f3ae
movl %eax, %ebp
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x1964b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq $0x0, 0x48(%rsp)
testb %bpl, %bpl
je 0x19727
leaq 0x20(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x16b0b(%rip), %rsi     # 0x30177
leaq 0x16b10(%rip), %rdx     # 0x30183
callq 0x18bc0
movq %r13, %r15
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
movq %rbx, %rsi
callq 0x1f41a
movq (%rsp), %r14
callq 0x4060
movq %rax, %r12
movl (%rax), %ebp
movl $0x0, (%rax)
leaq 0x58(%rsp), %r13
movq %r14, %rdi
movq %r13, %rsi
movl $0xa, %edx
callq 0x4520
cmpq %r14, (%r13)
je 0x19dde
leaq -0x80000000(%rax), %rcx
movabsq $-0x100000000, %rdx     # imm = 0xFFFFFFFF00000000
cmpq %rdx, %rcx
leaq 0x10(%rsp), %r14
jb 0x19dea
movl (%r12), %ecx
cmpl $0x22, %ecx
je 0x19dea
movq %rax, 0x48(%rsp)
testl %ecx, %ecx
movq %r15, %r13
jne 0x196fa
movl %ebp, (%r12)
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x19710
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x19727
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x16a78(%rip), %rsi     # 0x301ac
leaq 0x16a78(%rip), %rdx     # 0x301b3
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x1f3ae
movl %eax, %ebp
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x19763
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq $0x0, 0x40(%rsp)
testb %bpl, %bpl
je 0x19840
leaq 0x20(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x16a28(%rip), %rsi     # 0x301ac
leaq 0x16a28(%rip), %rdx     # 0x301b3
callq 0x18bc0
movq %r13, %r12
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
movq %rbx, %rsi
callq 0x1f41a
movq (%rsp), %r14
callq 0x4060
movq %rax, %r13
movl (%rax), %r15d
movl $0x0, (%rax)
leaq 0x58(%rsp), %rbp
movq %r14, %rdi
movq %rbp, %rsi
movl $0xa, %edx
callq 0x4520
cmpq %r14, (%rbp)
je 0x19df6
leaq -0x80000000(%rax), %rcx
movabsq $-0x100000000, %rdx     # imm = 0xFFFFFFFF00000000
cmpq %rdx, %rcx
leaq 0x10(%rsp), %r14
jb 0x19e02
movl (%r13), %ecx
cmpl $0x22, %ecx
je 0x19e02
movq %rax, 0x40(%rsp)
testl %ecx, %ecx
jne 0x19810
movl %r15d, (%r13)
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x19826
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x20(%rsp), %rdi
movq %r12, %r13
cmpq %r12, %rdi
je 0x19840
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x169ea(%rip), %rsi     # 0x30237
leaq 0x169f2(%rip), %rdx     # 0x30246
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x1f3ae
movl %eax, %ebp
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x1987c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
testb %bpl, %bpl
je 0x19957
leaq 0x20(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x169a3(%rip), %rsi     # 0x30237
leaq 0x169ab(%rip), %rdx     # 0x30246
callq 0x18bc0
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
movq %rbx, %rsi
callq 0x1f41a
movq (%rsp), %r14
callq 0x4060
movq %rax, %r13
movl (%rax), %r12d
movl $0x0, (%rax)
leaq 0x58(%rsp), %r15
movq %r14, %rdi
movq %r15, %rsi
movl $0xa, %edx
callq 0x4520
cmpq %r14, (%r15)
je 0x19e0e
movq %rax, %rbp
addq $-0x80000000, %rax      # imm = 0x80000000
movabsq $-0x100000000, %rcx     # imm = 0xFFFFFFFF00000000
cmpq %rcx, %rax
leaq 0x10(%rsp), %r14
jb 0x19e1a
movl (%r13), %eax
cmpl $0x22, %eax
je 0x19e1a
testl %eax, %eax
jne 0x19919
movl %r12d, (%r13)
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x1992f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %r13
cmpq %r13, %rdi
je 0x1994b
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
shll $0x2, %ebp
orl 0x40(%rsp), %ebp
movq %rbp, 0x40(%rsp)
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x1693c(%rip), %rsi     # 0x302a0
leaq 0x16942(%rip), %rdx     # 0x302ad
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x1f3ae
movl %eax, %ebp
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x19993
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
testb %bpl, %bpl
je 0x19a12
leaq 0x20(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x168f9(%rip), %rsi     # 0x302a0
leaq 0x168ff(%rip), %rdx     # 0x302ad
callq 0x18bc0
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
movq %rbx, %rsi
callq 0x1f41a
movq (%rsp), %r14
leaq 0x320(%rsp), %rdi
movl $0x100, %edx            # imm = 0x100
movq %r14, %rsi
callq 0x4200
leaq 0x10(%rsp), %rax
cmpq %rax, %r14
je 0x199f6
movq 0x10(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x19a0d
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
leaq 0x10(%rsp), %r14
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x168b4(%rip), %rsi     # 0x302d3
leaq 0x168b9(%rip), %rdx     # 0x302df
callq 0x18bc0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x1f3ae
movl %eax, %ebp
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x19a4e
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
testb %bpl, %bpl
je 0x19ac8
leaq 0x20(%rsp), %rdi
movq %r13, (%rdi)
leaq 0x16871(%rip), %rsi     # 0x302d3
leaq 0x16876(%rip), %rdx     # 0x302df
callq 0x18bc0
movq %rsp, %rdi
leaq 0x20(%rsp), %rdx
movq %rbx, %rsi
callq 0x1f41a
movq (%rsp), %r14
leaq 0x220(%rsp), %rdi
movl $0x100, %edx            # imm = 0x100
movq %r14, %rsi
callq 0x4200
leaq 0x10(%rsp), %rax
cmpq %rax, %r14
je 0x19ab1
movq 0x10(%rsp), %rsi
incq %rsi
movq %r14, %rdi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x19ac8
movq 0x30(%rsp), %rsi
incq %rsi
callq 0x43a0
leaq 0x168e6(%rip), %rdi     # 0x303b5
movq 0x48(%rsp), %rsi
movq 0x50(%rsp), %rdx
xorl %eax, %eax
callq 0x4070
movl $0xb0, %edi
callq 0x4390
movq %rax, %r13
leaq 0x90(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x120(%rsp), %r14
movq %r14, %rdi
callq 0x41b0
leaq (%rsp,%rax), %rdx
addq $0x120, %rdx            # imm = 0x120
leaq 0x80(%rsp), %rdi
movq %r14, %rsi
callq 0x18bc0
leaq 0x70(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x320(%rsp), %r14
movq %r14, %rdi
callq 0x41b0
leaq (%rsp,%rax), %rdx
addq $0x320, %rdx            # imm = 0x320
leaq 0x60(%rsp), %rdi
movq %r14, %rsi
callq 0x18bc0
leaq 0xb0(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x520(%rsp), %r14
movq %r14, %rdi
callq 0x41b0
leaq (%rsp,%rax), %rdx
addq $0x520, %rdx            # imm = 0x520
leaq 0xa0(%rsp), %rbp
movq %rbp, %rdi
movq %r14, %rsi
callq 0x18bc0
leaq 0x110(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x420(%rsp), %r15
movq %r15, %rdi
callq 0x41b0
leaq (%rsp,%rax), %rdx
addq $0x420, %rdx            # imm = 0x420
leaq 0x100(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
callq 0x18bc0
movzbl 0x48(%rsp), %edx
movzwl 0x50(%rsp), %ecx
leaq 0x80(%rsp), %rsi
leaq 0x60(%rsp), %r8
movq %r13, %rdi
movq 0x40(%rsp), %r9
pushq %r14
pushq %rbp
callq 0x230ec
addq $0x10, %rsp
movq 0x100(%rsp), %rdi
cmpq %r12, %rdi
leaq 0x90(%rsp), %r14
leaq 0x70(%rsp), %r15
je 0x19c1f
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x19c44
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x60(%rsp), %rdi
cmpq %r15, %rdi
je 0x19c5b
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x80(%rsp), %rdi
cmpq %r14, %rdi
je 0x19c78
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x43a0
leaq 0xf0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x120(%rsp), %r14
movq %r14, %rdi
callq 0x41b0
leaq (%rsp,%rax), %rdx
addq $0x120, %rdx            # imm = 0x120
leaq 0xe0(%rsp), %rdi
movq %r14, %rsi
callq 0x18bc0
leaq 0xd0(%rsp), %r12
movq %r12, -0x10(%r12)
leaq 0x220(%rsp), %r14
movq %r14, %rdi
callq 0x41b0
leaq (%rsp,%rax), %rdx
addq $0x220, %rdx            # imm = 0x220
leaq 0xc0(%rsp), %rdi
movq %r14, %rsi
callq 0x18bc0
leaq 0xe0(%rsp), %rsi
leaq 0xc0(%rsp), %rdx
movq %r13, %rdi
callq 0x27b22
movq 0xc0(%rsp), %rdi
cmpq %r12, %rdi
je 0x19d1c
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0xe0(%rsp), %rdi
cmpq %r15, %rdi
je 0x19d39
movq 0xf0(%rsp), %rsi
incq %rsi
callq 0x43a0
leaq 0x166a6(%rip), %rdi     # 0x303e6
xorl %ebp, %ebp
leaq 0x520(%rsp), %rsi
leaq 0x420(%rsp), %rdx
xorl %eax, %eax
callq 0x4070
movq %r13, %rdi
callq 0x2526a
movl $0xb0, %esi
movq %r13, %rdi
callq 0x43a0
movq %rbx, %rdi
callq 0x1f270
movl $0x158, %esi            # imm = 0x158
movq %rbx, %rdi
callq 0x43a0
movl %ebp, %eax
addq $0x628, %rsp            # imm = 0x628
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rsp, %r14
movq %rbx, %rdi
movl %eax, %esi
movq %r14, %rdx
callq 0x5ac1
movl (%r14), %ebp
jmp 0x19d6e
callq 0x5b48
jmp 0x19dbf
callq 0x5b6a
jmp 0x19dbf
callq 0x5b8c
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
jmp 0x19d6e
leaq 0x1664d(%rip), %rdi     # 0x3041a
callq 0x4250
leaq 0x16641(%rip), %rdi     # 0x3041a
callq 0x4580
leaq 0x16635(%rip), %rdi     # 0x3041a
callq 0x4250
leaq 0x16629(%rip), %rdi     # 0x3041a
callq 0x4580
leaq 0x1661d(%rip), %rdi     # 0x3041a
callq 0x4250
leaq 0x16611(%rip), %rdi     # 0x3041a
callq 0x4580
leaq 0x16605(%rip), %rdi     # 0x3041a
callq 0x4250
leaq 0x165f9(%rip), %rdi     # 0x3041a
callq 0x4580
jmp 0x1a06d
jmp 0x1a09e
jmp 0x1a06d
jmp 0x1a09e
movq %rax, %rbx
jmp 0x19f8d
jmp 0x1a09e
movq %rax, %rbx
jmp 0x19fd8
jmp 0x1a09e
movq %rax, %rbx
jmp 0x1a01e
jmp 0x1a09e
jmp 0x1a06d
jmp 0x1a09e
movq %rax, %rbx
movq 0xc0(%rsp), %rdi
cmpq %r12, %rdi
je 0x19e90
movq 0xd0(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x19e90
movq %rax, %rbx
movq 0xe0(%rsp), %rdi
cmpq %r15, %rdi
je 0x1a0a1
movq 0xf0(%rsp), %rsi
jmp 0x1a094
movq %rax, %rbx
movq 0x100(%rsp), %rdi
cmpq %r12, %rdi
je 0x19ed3
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x19ed3
movq %rax, %rbx
movq 0xa0(%rsp), %rdi
leaq 0xb0(%rsp), %rax
cmpq %rax, %rdi
je 0x19efd
movq 0xb0(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x19efd
movq %rax, %rbx
movq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rax
cmpq %rax, %rdi
je 0x19f1e
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x19f1e
movq %rax, %rbx
movq 0x80(%rsp), %rdi
leaq 0x90(%rsp), %rax
cmpq %rax, %rdi
je 0x19f48
movq 0x90(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x19f48
movq %rax, %rbx
movl $0xb0, %esi
movq %r13, %rdi
jmp 0x1a097
jmp 0x1a083
jmp 0x1a09e
jmp 0x1a083
movq %rax, %rbx
cmpl $0x0, (%r13)
jne 0x19f72
movl %r12d, (%r13)
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x19f8d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x20(%rsp), %rdi
leaq 0x30(%rsp), %rax
cmpq %rax, %rdi
jne 0x1a07a
jmp 0x1a0a1
jmp 0x1a09e
jmp 0x1a083
movq %rax, %rbx
cmpl $0x0, (%r13)
jne 0x19fbd
movl %r15d, (%r13)
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x19fd8
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r12, %rdi
jne 0x1a07a
jmp 0x1a0a1
jmp 0x1a09e
jmp 0x1a083
movq %rax, %rbx
cmpl $0x0, (%r12)
jne 0x1a003
movl %ebp, (%r12)
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x1a01e
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
movq 0x20(%rsp), %rdi
cmpq %r15, %rdi
jne 0x1a07a
jmp 0x1a0a1
jmp 0x1a09e
jmp 0x1a083
movq %rax, %rbx
cmpl $0x0, (%r15)
jne 0x1a03a
movl %ebp, (%r15)
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x1a070
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x1a070
jmp 0x1a09e
jmp 0x1a083
jmp 0x1a09e
jmp 0x1a06d
jmp 0x1a09e
jmp 0x1a083
jmp 0x1a09e
jmp 0x1a06d
jmp 0x1a09e
jmp 0x1a083
jmp 0x1a09e
movq %rax, %rbx
movq 0x20(%rsp), %rdi
cmpq %r13, %rdi
je 0x1a0a1
movq 0x30(%rsp), %rsi
jmp 0x1a094
jmp 0x1a09e
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x1a0a1
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x43a0
jmp 0x1a0a1
movq %rax, %rbx
movq %rbx, %rdi
callq 0x4700
nopl (%rax)