// File: bonetblai[P]mdp-engine/rect/main.cc
// Function: main
int main(int argc, const char **argv) {
    unsigned xdim = 0;
    unsigned ydim = 0;
    float p = 1.0;
    unsigned num_trials = 1;

    vector<string> requests;

    float start_time = Utils::read_time_in_seconds();
    cout << fixed;

    // parse arguments
    for( ++argv, --argc; (argc > 1) && (**argv == '-'); ++argv, --argc ) {
        if( string(*argv) == "--no-colors" ) {
            Utils::g_use_colors = false;
        } else if( ((*argv)[1] == 'r') || (string(*argv) == "--request") ) {
            requests.push_back(argv[1]);
            ++argv;
            --argc;
        } else if( ((*argv)[1] == 's') || (string(*argv) == "--seed") ) {
            Algorithm::g_seed = strtoul(argv[1], 0, 0);
            Online::g_seed = Algorithm::g_seed;
            ++argv;
            --argc;
        } else if( ((*argv)[1] == 't') || (string(*argv) == "--trials") ) {
            num_trials = strtoul(argv[1], 0, 0);
            ++argv;
            --argc;
        } else {
            usage(cout);
            exit(-1);
        }
    }

    // read problem parameters
    if( argc >= 2 ) {
        xdim = strtoul(argv[0], 0, 0);
        ydim = strtoul(argv[1], 0, 0);
        if( argc >= 3 ) p = strtod(argv[2], 0);
    } else {
        usage(cout);
        exit(-1);
    }

    // build problem instances
    cout << "main: seed=" << Algorithm::g_seed << endl;
    Random::set_seed(Algorithm::g_seed);
    problem_t problem(xdim, ydim, p);

    // build requests
    vector<pair<string, Online::Policy::policy_t<state_t>*> > policies;
    vector<pair<string, Algorithm::algorithm_t<state_t>*> > algorithms;
    Dispatcher::dispatcher_t<state_t> dispatcher;
    for( int i = 0; i < int(requests.size()); ++i ) {
        const string &request_str = requests[i];
        std::multimap<std::string, std::string> request;
        Utils::tokenize(request_str, request);
        for( std::multimap<std::string, std::string>::const_iterator it = request.begin(); it != request.end(); ++it ) {
            dispatcher.create_request(problem, it->first, it->second);
            if( it->first == "algorithm" ) {
                Algorithm::algorithm_t<state_t> *algorithm = dispatcher.fetch_algorithm(it->second);
                if( algorithm != 0 ) algorithms.push_back(make_pair(it->second, algorithm));
            } else if( it->first == "policy" ) {
                Online::Policy::policy_t<state_t> *policy = dispatcher.fetch_policy(it->second);
                if( policy != 0 ) policies.push_back(make_pair(it->second, policy));
            }
        }
    }

    // solve problems with requested algorithms
    vector<Dispatcher::dispatcher_t<state_t>::solve_result_t> solve_results;
    for( int i = 0; i < int(algorithms.size()); ++i ) {
        const string &request = algorithms[i].first;
        const Algorithm::algorithm_t<state_t> &algorithm = *algorithms[i].second;
        Dispatcher::dispatcher_t<state_t>::solve_result_t result;
        dispatcher.solve(request, algorithm, problem.init(), result);
        solve_results.push_back(result);
    }

    cout << Utils::warning() << "the following stats may aggregate figures when elements are shared among algorithms" << endl;
    if( !solve_results.empty() ) {
        for( int i = 0; i < int(solve_results.size()); ++i ) {
            dispatcher.print_stats(cout, solve_results[i]);
        }
    }

    // evaluate requested policies
    vector<Dispatcher::dispatcher_t<state_t>::evaluate_result_t> evaluate_results;
    for( int i = 0; i < int(policies.size()); ++i ) {
        const string &request = policies[i].first;
        const Online::Policy::policy_t<state_t> &policy = *policies[i].second;
        Dispatcher::dispatcher_t<state_t>::evaluate_result_t result;
        dispatcher.evaluate(request, policy, problem.init(), result, num_trials, 100, true);
        evaluate_results.push_back(result);
    }

    cout << Utils::warning() << "the following stats may aggregate figures when elements are shared among policies" << endl;
    if( !evaluate_results.empty() ) {
        for( int i = 0; i < int(evaluate_results.size()); ++i ) {
            dispatcher.print_stats(cout, evaluate_results[i]);
        }
    }

    cout << "main: total-time=" << Utils::read_time_in_seconds() - start_time << endl;
    return 0;
}

// Assembly:
subq $0x588, %rsp            # imm = 0x588
movl $0x0, 0x584(%rsp)
movl %edi, 0x580(%rsp)
movq %rsi, 0x578(%rsp)
movl $0x0, 0x574(%rsp)
movl $0x0, 0x570(%rsp)
movl $0x3f800000, 0x56c(%rsp) # imm = 0x3F800000
movl $0x1, 0x568(%rsp)
leaq 0x550(%rsp), %rdi
callq 0x79c0
callq 0x79d0
movss %xmm0, 0x178(%rsp)
jmp 0x66fa
movss 0x178(%rsp), %xmm0
movss %xmm0, 0x54c(%rsp)
movq 0x6a8bd(%rip), %rdi     # 0x70fd0
leaq 0x1336(%rip), %rsi      # 0x7a50
callq 0x60e0
jmp 0x6721
movq 0x578(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x578(%rsp)
movl 0x580(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x580(%rsp)
xorl %eax, %eax
cmpl $0x1, 0x580(%rsp)
movb %al, 0x177(%rsp)
jle 0x6774
movq 0x578(%rsp), %rax
movq (%rax), %rax
movsbl (%rax), %eax
cmpl $0x2d, %eax
sete %al
movb %al, 0x177(%rsp)
movb 0x177(%rsp), %al
testb $0x1, %al
jne 0x6784
jmp 0x6e83
movq 0x578(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x160(%rsp)
leaq 0x517(%rsp), %rdi
movq %rdi, 0x168(%rsp)
callq 0x6490
movq 0x160(%rsp), %rsi
movq 0x168(%rsp), %rdx
leaq 0x518(%rsp), %rdi
callq 0x63c0
jmp 0x67cb
leaq 0x4991a(%rip), %rsi     # 0x500ec
leaq 0x518(%rsp), %rdi
callq 0x7a70
movb %al, 0x15f(%rsp)
jmp 0x67e8
leaq 0x518(%rsp), %rdi
callq 0x6190
leaq 0x517(%rsp), %rdi
callq 0x6310
movb 0x15f(%rsp), %al
testb $0x1, %al
jne 0x680f
jmp 0x687d
movb $0x0, 0x6aa7a(%rip)     # 0x71290
jmp 0x6e57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x799a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x686b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x518(%rsp), %rdi
callq 0x6190
leaq 0x517(%rsp), %rdi
callq 0x6310
jmp 0x799a
movq 0x578(%rsp), %rax
movq (%rax), %rax
movsbl 0x1(%rax), %ecx
movb $0x0, 0x4ee(%rsp)
movb $0x0, 0x4ed(%rsp)
movb $0x1, %al
cmpl $0x72, %ecx
movb %al, 0x15e(%rsp)
je 0x6932
movq 0x578(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x148(%rsp)
leaq 0x4ef(%rsp), %rdi
movq %rdi, 0x150(%rsp)
callq 0x6490
movq 0x148(%rsp), %rsi
movq 0x150(%rsp), %rdx
movb $0x1, 0x4ee(%rsp)
leaq 0x4f0(%rsp), %rdi
callq 0x63c0
jmp 0x68fd
movb $0x1, 0x4ed(%rsp)
leaq 0x497ec(%rip), %rsi     # 0x500f8
leaq 0x4f0(%rsp), %rdi
callq 0x7a70
movb %al, 0x147(%rsp)
jmp 0x6922
movb 0x147(%rsp), %al
movb %al, 0x15e(%rsp)
jmp 0x6932
movb 0x15e(%rsp), %al
movb %al, 0x146(%rsp)
testb $0x1, 0x4ed(%rsp)
jne 0x694c
jmp 0x6959
leaq 0x4f0(%rsp), %rdi
callq 0x6190
testb $0x1, 0x4ee(%rsp)
jne 0x6965
jmp 0x6972
leaq 0x4ef(%rsp), %rdi
callq 0x6310
movb 0x146(%rsp), %al
testb $0x1, %al
jne 0x6982
jmp 0x6ad1
movq 0x578(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x130(%rsp)
leaq 0x4c7(%rsp), %rdi
movq %rdi, 0x138(%rsp)
callq 0x6490
movq 0x130(%rsp), %rsi
movq 0x138(%rsp), %rdx
leaq 0x4c8(%rsp), %rdi
callq 0x63c0
jmp 0x69ca
leaq 0x550(%rsp), %rdi
leaq 0x4c8(%rsp), %rsi
callq 0x7aa0
jmp 0x69e1
leaq 0x4c8(%rsp), %rdi
callq 0x6190
leaq 0x4c7(%rsp), %rdi
callq 0x6310
movq 0x578(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x578(%rsp)
movl 0x580(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x580(%rsp)
jmp 0x6e55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x6a6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
testb $0x1, 0x4ed(%rsp)
jne 0x6a5b
jmp 0x6a68
leaq 0x4f0(%rsp), %rdi
callq 0x6190
jmp 0x6a6a
testb $0x1, 0x4ee(%rsp)
jne 0x6a76
jmp 0x6a83
leaq 0x4ef(%rsp), %rdi
callq 0x6310
jmp 0x799a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x6abf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x4c8(%rsp), %rdi
callq 0x6190
leaq 0x4c7(%rsp), %rdi
callq 0x6310
jmp 0x799a
movq 0x578(%rsp), %rax
movq (%rax), %rax
movsbl 0x1(%rax), %ecx
movb $0x0, 0x49e(%rsp)
movb $0x0, 0x49d(%rsp)
movb $0x1, %al
cmpl $0x73, %ecx
movb %al, 0x12f(%rsp)
je 0x6b86
movq 0x578(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x118(%rsp)
leaq 0x49f(%rsp), %rdi
movq %rdi, 0x120(%rsp)
callq 0x6490
movq 0x118(%rsp), %rsi
movq 0x120(%rsp), %rdx
movb $0x1, 0x49e(%rsp)
leaq 0x4a0(%rsp), %rdi
callq 0x63c0
jmp 0x6b51
movb $0x1, 0x49d(%rsp)
leaq 0x495a2(%rip), %rsi     # 0x50102
leaq 0x4a0(%rsp), %rdi
callq 0x7a70
movb %al, 0x117(%rsp)
jmp 0x6b76
movb 0x117(%rsp), %al
movb %al, 0x12f(%rsp)
jmp 0x6b86
movb 0x12f(%rsp), %al
movb %al, 0x116(%rsp)
testb $0x1, 0x49d(%rsp)
jne 0x6ba0
jmp 0x6bad
leaq 0x4a0(%rsp), %rdi
callq 0x6190
testb $0x1, 0x49e(%rsp)
jne 0x6bb9
jmp 0x6bc6
leaq 0x49f(%rsp), %rdi
callq 0x6310
movb 0x116(%rsp), %al
testb $0x1, %al
jne 0x6bd6
jmp 0x6c8c
movq 0x578(%rsp), %rax
movq 0x8(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x60d0
movl %eax, 0x6a6b5(%rip)     # 0x712a8
movl 0x6a6af(%rip), %eax     # 0x712a8
movl %eax, 0x6a6ad(%rip)     # 0x712ac
movq 0x578(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x578(%rsp)
movl 0x580(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x580(%rsp)
jmp 0x6e53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x6c6e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
testb $0x1, 0x49d(%rsp)
jne 0x6c5f
jmp 0x6c6c
leaq 0x4a0(%rsp), %rdi
callq 0x6190
jmp 0x6c6e
testb $0x1, 0x49e(%rsp)
jne 0x6c7a
jmp 0x6c87
leaq 0x49f(%rsp), %rdi
callq 0x6310
jmp 0x799a
movq 0x578(%rsp), %rax
movq (%rax), %rax
movsbl 0x1(%rax), %ecx
movb $0x0, 0x476(%rsp)
movb $0x0, 0x475(%rsp)
movb $0x1, %al
cmpl $0x74, %ecx
movb %al, 0x115(%rsp)
je 0x6d41
movq 0x578(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x100(%rsp)
leaq 0x477(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0x6490
movq 0x100(%rsp), %rsi
movq 0x108(%rsp), %rdx
movb $0x1, 0x476(%rsp)
leaq 0x478(%rsp), %rdi
callq 0x63c0
jmp 0x6d0c
movb $0x1, 0x475(%rsp)
leaq 0x493ee(%rip), %rsi     # 0x50109
leaq 0x478(%rsp), %rdi
callq 0x7a70
movb %al, 0xff(%rsp)
jmp 0x6d31
movb 0xff(%rsp), %al
movb %al, 0x115(%rsp)
jmp 0x6d41
movb 0x115(%rsp), %al
movb %al, 0xfe(%rsp)
testb $0x1, 0x475(%rsp)
jne 0x6d5b
jmp 0x6d68
leaq 0x478(%rsp), %rdi
callq 0x6190
testb $0x1, 0x476(%rsp)
jne 0x6d74
jmp 0x6d81
leaq 0x477(%rsp), %rdi
callq 0x6310
movb 0xfe(%rsp), %al
testb $0x1, %al
jne 0x6d91
jmp 0x6e39
movq 0x578(%rsp), %rax
movq 0x8(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x60d0
movl %eax, 0x568(%rsp)
movq 0x578(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x578(%rsp)
movl 0x580(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x580(%rsp)
jmp 0x6e51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x6e1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
testb $0x1, 0x475(%rsp)
jne 0x6e0c
jmp 0x6e19
leaq 0x478(%rsp), %rdi
callq 0x6190
jmp 0x6e1b
testb $0x1, 0x476(%rsp)
jne 0x6e27
jmp 0x6e34
leaq 0x477(%rsp), %rdi
callq 0x6310
jmp 0x799a
movq 0x6a190(%rip), %rdi     # 0x70fd0
callq 0x6660
jmp 0x6e47
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x6360
jmp 0x6e53
jmp 0x6e55
jmp 0x6e57
jmp 0x6e59
movq 0x578(%rsp), %rax
addq $0x8, %rax
movq %rax, 0x578(%rsp)
movl 0x580(%rsp), %eax
addl $-0x1, %eax
movl %eax, 0x580(%rsp)
jmp 0x6746
cmpl $0x2, 0x580(%rsp)
jl 0x6ef6
movq 0x578(%rsp), %rax
movq (%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x60d0
movl %eax, 0x574(%rsp)
movq 0x578(%rsp), %rax
movq 0x8(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
callq 0x60d0
movl %eax, 0x570(%rsp)
cmpl $0x3, 0x580(%rsp)
jl 0x6ef4
movq 0x578(%rsp), %rax
movq 0x10(%rax), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x6210
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x56c(%rsp)
jmp 0x6f0e
movq 0x6a0d3(%rip), %rdi     # 0x70fd0
callq 0x6660
jmp 0x6f04
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x6360
movq 0x6a0bb(%rip), %rdi     # 0x70fd0
leaq 0x491f6(%rip), %rsi     # 0x50112
callq 0x62b0
movq %rax, 0xf0(%rsp)
jmp 0x6f2b
movq 0xf0(%rsp), %rdi
movl 0x6a36f(%rip), %esi     # 0x712a8
callq 0x63a0
movq %rax, 0xe8(%rsp)
jmp 0x6f48
movq 0xe8(%rsp), %rdi
movq 0x6a061(%rip), %rsi     # 0x70fb8
callq 0x62f0
jmp 0x6f5e
movl 0x6a344(%rip), %edi     # 0x712a8
callq 0x7ad0
jmp 0x6f6b
movl 0x574(%rsp), %esi
movl 0x570(%rsp), %edx
movss 0x56c(%rsp), %xmm0
leaq 0x448(%rsp), %rdi
callq 0x7b10
jmp 0x6f91
leaq 0x430(%rsp), %rdi
callq 0x7bb0
leaq 0x418(%rsp), %rdi
callq 0x7bc0
leaq 0x380(%rsp), %rdi
callq 0x7bd0
jmp 0x6fba
movl $0x0, 0x37c(%rsp)
movl 0x37c(%rsp), %eax
movl %eax, 0xe4(%rsp)
leaq 0x550(%rsp), %rdi
callq 0x7c20
movq %rax, %rcx
movl 0xe4(%rsp), %eax
cmpl %ecx, %eax
jge 0x736b
movslq 0x37c(%rsp), %rsi
leaq 0x550(%rsp), %rdi
callq 0x7c40
movq %rax, 0x370(%rsp)
leaq 0x340(%rsp), %rdi
movq %rdi, 0xd8(%rsp)
callq 0x7c60
movq 0xd8(%rsp), %rsi
movq 0x370(%rsp), %rdi
movl $0x2c, %edx
callq 0x7c70
jmp 0x7040
leaq 0x340(%rsp), %rdi
callq 0x8000
movq %rax, 0x330(%rsp)
leaq 0x338(%rsp), %rdi
leaq 0x330(%rsp), %rsi
callq 0x8030
leaq 0x340(%rsp), %rdi
callq 0x8070
movq %rax, 0x320(%rsp)
leaq 0x328(%rsp), %rdi
leaq 0x320(%rsp), %rsi
callq 0x8030
leaq 0x338(%rsp), %rdi
leaq 0x328(%rsp), %rsi
callq 0x8050
testb $0x1, %al
jne 0x70b2
jmp 0x7336
leaq 0x338(%rsp), %rdi
movq %rdi, 0xc8(%rsp)
callq 0x9490
movq 0xc8(%rsp), %rdi
movq %rax, 0xd0(%rsp)
callq 0x9490
movq 0xd0(%rsp), %rdx
movq %rax, %rcx
addq $0x20, %rcx
leaq 0x380(%rsp), %rdi
leaq 0x448(%rsp), %rsi
callq 0x80a0
jmp 0x7102
leaq 0x338(%rsp), %rdi
callq 0x9490
movq %rax, %rdi
leaq 0x49005(%rip), %rsi     # 0x5011e
callq 0x7a70
movb %al, 0xc7(%rsp)
jmp 0x7127
movb 0xc7(%rsp), %al
testb $0x1, %al
jne 0x7137
jmp 0x722f
leaq 0x338(%rsp), %rdi
callq 0x9490
movq %rax, %rsi
addq $0x20, %rsi
leaq 0x380(%rsp), %rdi
callq 0x94b0
movq %rax, 0xb8(%rsp)
jmp 0x7162
movq 0xb8(%rsp), %rax
movq %rax, 0x318(%rsp)
cmpq $0x0, 0x318(%rsp)
je 0x722a
leaq 0x338(%rsp), %rdi
callq 0x9490
movq %rax, %rsi
addq $0x20, %rsi
leaq 0x2f0(%rsp), %rdi
leaq 0x318(%rsp), %rdx
callq 0x9580
jmp 0x71ac
leaq 0x418(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0x9550
jmp 0x71c3
leaq 0x2f0(%rsp), %rdi
callq 0x95c0
jmp 0x722a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x7973
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x7359
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x2f0(%rsp), %rdi
callq 0x95c0
jmp 0x7359
jmp 0x7322
leaq 0x338(%rsp), %rdi
callq 0x9490
movq %rax, %rdi
leaq 0x48ee2(%rip), %rsi     # 0x50128
callq 0x7a70
movb %al, 0xb7(%rsp)
jmp 0x7254
movb 0xb7(%rsp), %al
testb $0x1, %al
jne 0x7264
jmp 0x7320
leaq 0x338(%rsp), %rdi
callq 0x9490
movq %rax, %rsi
addq $0x20, %rsi
leaq 0x380(%rsp), %rdi
callq 0x95d0
movq %rax, 0xa8(%rsp)
jmp 0x728f
movq 0xa8(%rsp), %rax
movq %rax, 0x2e8(%rsp)
cmpq $0x0, 0x2e8(%rsp)
je 0x731e
leaq 0x338(%rsp), %rdi
callq 0x9490
movq %rax, %rsi
addq $0x20, %rsi
leaq 0x2c0(%rsp), %rdi
leaq 0x2e8(%rsp), %rdx
callq 0x96a0
jmp 0x72d5
leaq 0x430(%rsp), %rdi
leaq 0x2c0(%rsp), %rsi
callq 0x9670
jmp 0x72ec
leaq 0x2c0(%rsp), %rdi
callq 0x96e0
jmp 0x731e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x2c0(%rsp), %rdi
callq 0x96e0
jmp 0x7359
jmp 0x7320
jmp 0x7322
jmp 0x7324
leaq 0x338(%rsp), %rdi
callq 0x96f0
jmp 0x706a
leaq 0x340(%rsp), %rdi
callq 0x9720
movl 0x37c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x37c(%rsp)
jmp 0x6fc5
leaq 0x340(%rsp), %rdi
callq 0x9720
jmp 0x7966
leaq 0x2a8(%rsp), %rdi
callq 0x9730
movl $0x0, 0x2a4(%rsp)
movl 0x2a4(%rsp), %eax
movl %eax, 0xa4(%rsp)
leaq 0x418(%rsp), %rdi
callq 0x9740
movq %rax, %rcx
movl 0xa4(%rsp), %eax
cmpl %ecx, %eax
jge 0x74e4
movslq 0x2a4(%rsp), %rsi
leaq 0x418(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x9760
movq 0x98(%rsp), %rdi
movq %rax, 0x298(%rsp)
movslq 0x2a4(%rsp), %rsi
callq 0x9760
movq 0x20(%rax), %rax
movq %rax, 0x290(%rsp)
leaq 0x240(%rsp), %rdi
callq 0x9780
jmp 0x7405
movq 0x298(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0x290(%rsp), %rax
movq %rax, 0x88(%rsp)
leaq 0x448(%rsp), %rdi
callq 0x9920
movq %rax, 0x90(%rsp)
jmp 0x743c
movq 0x90(%rsp), %rcx
movq 0x88(%rsp), %rdx
movq 0x80(%rsp), %rsi
leaq 0x380(%rsp), %rdi
leaq 0x240(%rsp), %r8
callq 0x97b0
jmp 0x746b
leaq 0x2a8(%rsp), %rdi
leaq 0x240(%rsp), %rsi
callq 0x9930
jmp 0x7482
leaq 0x240(%rsp), %rdi
callq 0x99a0
movl 0x2a4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2a4(%rsp)
jmp 0x7383
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x7959
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x240(%rsp), %rdi
callq 0x99a0
jmp 0x7959
leaq 0x220(%rsp), %rdi
callq 0x99d0
jmp 0x74f3
movq 0x69ad6(%rip), %rdi     # 0x70fd0
leaq 0x220(%rsp), %rsi
callq 0x6270
movq %rax, 0x78(%rsp)
jmp 0x750e
movq 0x78(%rsp), %rdi
leaq 0x48c15(%rip), %rsi     # 0x5012f
callq 0x62b0
movq %rax, 0x70(%rsp)
jmp 0x7526
movq 0x70(%rsp), %rdi
movq 0x69a86(%rip), %rsi     # 0x70fb8
callq 0x62f0
jmp 0x7539
leaq 0x220(%rsp), %rdi
callq 0x6190
leaq 0x2a8(%rsp), %rdi
callq 0x9a70
testb $0x1, %al
jne 0x75f4
movl $0x0, 0x21c(%rsp)
movl 0x21c(%rsp), %eax
movl %eax, 0x6c(%rsp)
leaq 0x2a8(%rsp), %rdi
callq 0x9ac0
movq %rax, %rcx
movl 0x6c(%rsp), %eax
cmpl %ecx, %eax
jge 0x75f2
movslq 0x21c(%rsp), %rsi
leaq 0x2a8(%rsp), %rdi
callq 0xa790
movq %rax, %rdx
movq 0x69a28(%rip), %rsi     # 0x70fd0
leaq 0x380(%rsp), %rdi
callq 0x9ae0
jmp 0x75b7
jmp 0x75b9
movl 0x21c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x21c(%rsp)
jmp 0x7566
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x220(%rsp), %rdi
callq 0x6190
jmp 0x7959
jmp 0x75f4
leaq 0x200(%rsp), %rdi
callq 0xa7b0
movl $0x0, 0x1fc(%rsp)
movl 0x1fc(%rsp), %eax
movl %eax, 0x68(%rsp)
leaq 0x430(%rsp), %rdi
callq 0xa7c0
movq %rax, %rcx
movl 0x68(%rsp), %eax
cmpl %ecx, %eax
jge 0x774c
movslq 0x1fc(%rsp), %rsi
leaq 0x430(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0xa7e0
movq 0x48(%rsp), %rdi
movq %rax, 0x1f0(%rsp)
movslq 0x1fc(%rsp), %rsi
callq 0xa7e0
movq 0x20(%rax), %rax
movq %rax, 0x1e8(%rsp)
leaq 0x1a0(%rsp), %rdi
callq 0xa800
movq 0x1f0(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x1e8(%rsp), %rax
movq %rax, 0x58(%rsp)
leaq 0x448(%rsp), %rdi
callq 0x9920
movq %rax, 0x60(%rsp)
jmp 0x76ae
movq 0x60(%rsp), %rcx
movq 0x58(%rsp), %rdx
movq 0x50(%rsp), %rsi
movl 0x568(%rsp), %r9d
movq %rsp, %rax
movl $0x1, 0x8(%rax)
movl $0x64, (%rax)
leaq 0x380(%rsp), %rdi
leaq 0x1a0(%rsp), %r8
callq 0xa810
jmp 0x76ec
leaq 0x200(%rsp), %rdi
leaq 0x1a0(%rsp), %rsi
callq 0xa970
jmp 0x7703
leaq 0x1a0(%rsp), %rdi
callq 0xa9e0
movl 0x1fc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1fc(%rsp)
jmp 0x760c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x1a0(%rsp), %rdi
callq 0xa9e0
jmp 0x794c
leaq 0x180(%rsp), %rdi
callq 0x99d0
jmp 0x775b
movq 0x6986e(%rip), %rdi     # 0x70fd0
leaq 0x180(%rsp), %rsi
callq 0x6270
movq %rax, 0x40(%rsp)
jmp 0x7776
movq 0x40(%rsp), %rdi
leaq 0x48a01(%rip), %rsi     # 0x50183
callq 0x62b0
movq %rax, 0x38(%rsp)
jmp 0x778e
movq 0x38(%rsp), %rdi
movq 0x6981e(%rip), %rsi     # 0x70fb8
callq 0x62f0
jmp 0x77a1
leaq 0x180(%rsp), %rdi
callq 0x6190
leaq 0x200(%rsp), %rdi
callq 0xa9f0
testb $0x1, %al
jne 0x7879
movl $0x0, 0x17c(%rsp)
movl 0x17c(%rsp), %eax
movl %eax, 0x34(%rsp)
leaq 0x200(%rsp), %rdi
callq 0xaa40
movq %rax, %rcx
movl 0x34(%rsp), %eax
cmpl %ecx, %eax
jge 0x7877
movslq 0x17c(%rsp), %rsi
leaq 0x200(%rsp), %rdi
callq 0xaf10
movq %rax, %rdx
movq 0x697bc(%rip), %rsi     # 0x70fd0
leaq 0x380(%rsp), %rdi
callq 0xaa60
jmp 0x7823
jmp 0x7825
movl 0x17c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x17c(%rsp)
jmp 0x77ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
jmp 0x794c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x540(%rsp)
movl %eax, 0x53c(%rsp)
leaq 0x180(%rsp), %rdi
callq 0x6190
jmp 0x794c
jmp 0x7879
movq 0x69750(%rip), %rdi     # 0x70fd0
leaq 0x4894e(%rip), %rsi     # 0x501d5
callq 0x62b0
movq %rax, 0x28(%rsp)
jmp 0x7893
callq 0x79d0
movss %xmm0, 0x24(%rsp)
jmp 0x78a0
movq 0x28(%rsp), %rdi
movss 0x24(%rsp), %xmm0
movss 0x54c(%rsp), %xmm1
subss %xmm1, %xmm0
callq 0x61f0
movq %rax, 0x18(%rsp)
jmp 0x78c4
movq 0x18(%rsp), %rdi
movq 0x696e8(%rip), %rsi     # 0x70fb8
callq 0x62f0
jmp 0x78d7
movl $0x0, 0x584(%rsp)
leaq 0x200(%rsp), %rdi
callq 0xaf30
leaq 0x2a8(%rsp), %rdi
callq 0xaf90
leaq 0x380(%rsp), %rdi
callq 0xaff0
leaq 0x418(%rsp), %rdi
callq 0xb1f0
leaq 0x430(%rsp), %rdi
callq 0xb250
leaq 0x448(%rsp), %rdi
callq 0xb2b0
leaq 0x550(%rsp), %rdi
callq 0xb2e0
movl 0x584(%rsp), %eax
addq $0x588, %rsp            # imm = 0x588
retq
leaq 0x200(%rsp), %rdi
callq 0xaf30
leaq 0x2a8(%rsp), %rdi
callq 0xaf90
leaq 0x380(%rsp), %rdi
callq 0xaff0
leaq 0x418(%rsp), %rdi
callq 0xb1f0
leaq 0x430(%rsp), %rdi
callq 0xb250
leaq 0x448(%rsp), %rdi
callq 0xb2b0
leaq 0x550(%rsp), %rdi
callq 0xb2e0
movq 0x540(%rsp), %rdi
callq 0x6480
nopw %cs:(%rax,%rax)
nop