// File: aalto-speech[P]ftk/src/2g-prune-simple.cc
// Function: main
int main(int argc, char* argv[]) {

    conf::Config config;
    config("usage: 2g-prune-simple [OPTION...] WORDLIST TRANSITIONS_INIT MSFG_IN TRANSITIONS_OUT\n")
      ('h', "help", "", "", "display help")
      ('r', "removals=INT", "arg", "500", "Number of removals per iteration")
      ('m', "min-length=INT", "arg", "2", "Minimum length of subwords to remove, DEFAULT: 2")
      ('v', "vocab-size=INT", "arg must", "30000", "Target vocabulary size (stopping criterion)")
      ('f', "forward-backward", "", "", "Use Forward-backward segmentation instead of Viterbi")
      ('8', "utf-8", "", "", "Utf-8 character encoding in use");
    config.default_parse(argc, argv);
    if (config.arguments.size() != 4) config.print_help(stderr, 1);

    unsigned int removals_per_iter = config["removals"].get_int();
    unsigned int min_removal_length = config["min-length"].get_int();
    unsigned int target_vocab_size = config["vocab-size"].get_int();
    string wordlist_fname = config.arguments[0];
    string initial_transitions_fname = config.arguments[1];
    string msfg_fname = config.arguments[2];
    string transition_fname = config.arguments[3];
    bool enable_fb = config["forward-backward"].specified;
    bool utf8_encoding = config["utf-8"].specified;

    cerr << "parameters, initial transitions: " << initial_transitions_fname << endl;
    cerr << "parameters, wordlist: " << wordlist_fname << endl;
    cerr << "parameters, msfg: " << msfg_fname << endl;
    cerr << "parameters, transitions: " << transition_fname << endl;
    cerr << "parameters, removals per iteration: " << removals_per_iter << endl;
    cerr << "parameters, minimum length for subwords to remove: " << min_removal_length << endl;
    cerr << "parameters, target vocab size: " << target_vocab_size << endl;
    cerr << "parameters, floor lp: " << FLOOR_LP << endl;
    cerr << "parameters, use forward-backward: " << enable_fb << endl;
    cerr << "parameters, utf-8 encoding: " << utf8_encoding << endl;

    int word_maxlen;
    map<string, flt_type> all_chars;
    map<string, flt_type> freqs;
    map<string, flt_type> words;
    MultiStringFactorGraph msfg(start_end_symbol);
    transitions_t transitions;
    transitions_t trans_stats;
    map<string, flt_type> unigram_stats;
    set<string> short_subwords;

    cerr << "Reading initial transitions " << initial_transitions_fname << endl;
    int retval = Bigrams::read_transitions(transitions, initial_transitions_fname);
    if (retval < 0) {
        cerr << "something went wrong reading transitions" << endl;
        exit(EXIT_FAILURE);
    }
    cerr << "\tnumber of transitions: " << Bigrams::transition_count(transitions) << endl;
    cerr << "\tvocabulary size: " << transitions.size() << endl;

    map<string, flt_type> vocab;
    Bigrams::trans_to_vocab(transitions, vocab);
    find_short_factors(vocab, short_subwords, min_removal_length, utf8_encoding);

    cerr << "Reading word list " << wordlist_fname << endl;
    retval = Unigrams::read_vocab(wordlist_fname, words, word_maxlen, utf8_encoding);
    if (retval < 0) {
        cerr << "something went wrong reading word list" << endl;
        exit(EXIT_FAILURE);
    }
    cerr << "\t" << "wordlist size: " << words.size() << endl;
    cerr << "\t" << "maximum word length: " << word_maxlen << endl;

    cerr << "Reading msfg " << msfg_fname << endl;
    msfg.read(msfg_fname);

    if (transitions.size() < msfg.factor_node_map.size()) {
        vector<string> to_remove;
        cerr << "Pruning " << msfg.factor_node_map.size()-transitions.size() << " unused transitions from msfg." << endl;
        for (auto it = msfg.factor_node_map.begin(); it != msfg.factor_node_map.end(); ++it)
            if (transitions.find(it->first) == transitions.end())
                to_remove.push_back(it->first);
        for (auto it = to_remove.begin(); it != to_remove.end(); ++it)
            msfg.remove_arcs(*it);
    }

    assign_scores(transitions, msfg);

    std::cerr << std::setprecision(15);
    int iteration = 1;
    while (true) {

        cerr << "Iteration " << iteration << endl;

        flt_type lp = Bigrams::collect_trans_stats(words, msfg, trans_stats, unigram_stats, enable_fb);
        transitions.swap(trans_stats);
        Bigrams::freqs_to_logprobs(transitions);
        assign_scores(transitions, msfg);
        trans_stats.clear();

        cerr << "\tbigram likelihood: " << lp << endl;
        cerr << "\tnumber of transitions: " << Bigrams::transition_count(transitions) << endl;
        cerr << "\tvocabulary size: " << transitions.size() << endl;

        // Write temp transitions
        ostringstream transitions_temp;
        transitions_temp << "transitions.iter" << iteration << ".gz";
        cerr << "\twriting to: " << transitions_temp.str() << endl;
        Bigrams::write_transitions(transitions, transitions_temp.str());

        cerr << "\tinitializing removals .." << endl;
        map<string, flt_type> removals;
        if (iteration == 1 && transitions.size() % 1000 != 0) {
            int first_iter_removals = transitions.size() % 1000;
            Bigrams::init_candidates_freq(first_iter_removals, unigram_stats, removals, short_subwords);
        }
        else
            Bigrams::init_candidates_freq(removals_per_iter, unigram_stats, removals, short_subwords);

        vector<string> to_remove;
        for (auto it = removals.begin(); it != removals.end(); ++it)
            to_remove.push_back(it->first);
        Bigrams::remove_transitions(to_remove, transitions);
        for (auto it = to_remove.begin(); it != to_remove.end(); ++it)
            msfg.remove_arcs(*it);

        if  (transitions.size() <= target_vocab_size) break;
        iteration++;
    }

    // Write transitions
    Bigrams::write_transitions(transitions, transition_fname);

    exit(EXIT_SUCCESS);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xec0, %rsp            # imm = 0xEC0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x10dd0
leaq -0xe9(%rbp), %rdi
movq %rdi, -0xb40(%rbp)
callq 0x5730
movq -0xb40(%rbp), %rdx
leaq 0x6308c(%rip), %rsi     # 0x69012
leaq -0xe8(%rbp), %rdi
callq 0x5580
jmp 0x5f94
leaq -0xc8(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x10e40
movq %rax, -0xb48(%rbp)
jmp 0x5fb0
leaq -0x121(%rbp), %rdi
movq %rdi, -0xb50(%rbp)
callq 0x5730
movq -0xb50(%rbp), %rdx
leaq 0x6309f(%rip), %rsi     # 0x69070
leaq -0x120(%rbp), %rdi
callq 0x5580
jmp 0x5fdf
leaq -0x149(%rbp), %rdi
movq %rdi, -0xb58(%rbp)
callq 0x5730
movq -0xb58(%rbp), %rdx
leaq 0x6376f(%rip), %rsi     # 0x6976f
leaq -0x148(%rbp), %rdi
callq 0x5580
jmp 0x600e
leaq -0x171(%rbp), %rdi
movq %rdi, -0xb60(%rbp)
callq 0x5730
movq -0xb60(%rbp), %rdx
leaq 0x63740(%rip), %rsi     # 0x6976f
leaq -0x170(%rbp), %rdi
callq 0x5580
jmp 0x603d
leaq -0x199(%rbp), %rdi
movq %rdi, -0xb68(%rbp)
callq 0x5730
movq -0xb68(%rbp), %rdx
leaq 0x6300a(%rip), %rsi     # 0x69068
leaq -0x198(%rbp), %rdi
callq 0x5580
jmp 0x606c
movq -0xb48(%rbp), %rdi
movl $0x68, %esi
leaq -0x120(%rbp), %rdx
leaq -0x148(%rbp), %rcx
leaq -0x170(%rbp), %r8
leaq -0x198(%rbp), %r9
callq 0x10e70
movq %rax, -0xb70(%rbp)
jmp 0x60a2
leaq -0x1c1(%rbp), %rdi
movq %rdi, -0xb78(%rbp)
callq 0x5730
movq -0xb78(%rbp), %rdx
leaq 0x62fb2(%rip), %rsi     # 0x69075
leaq -0x1c0(%rbp), %rdi
callq 0x5580
jmp 0x60d1
leaq -0x1e9(%rbp), %rdi
movq %rdi, -0xb80(%rbp)
callq 0x5730
movq -0xb80(%rbp), %rdx
leaq 0x62f90(%rip), %rsi     # 0x69082
leaq -0x1e8(%rbp), %rdi
callq 0x5580
jmp 0x6100
leaq -0x211(%rbp), %rdi
movq %rdi, -0xb88(%rbp)
callq 0x5730
movq -0xb88(%rbp), %rdx
leaq 0x62f65(%rip), %rsi     # 0x69086
leaq -0x210(%rbp), %rdi
callq 0x5580
jmp 0x612f
leaq -0x239(%rbp), %rdi
movq %rdi, -0xb90(%rbp)
callq 0x5730
movq -0xb90(%rbp), %rdx
leaq 0x62f3a(%rip), %rsi     # 0x6908a
leaq -0x238(%rbp), %rdi
callq 0x5580
jmp 0x615e
movq -0xb70(%rbp), %rdi
movl $0x72, %esi
leaq -0x1c0(%rbp), %rdx
leaq -0x1e8(%rbp), %rcx
leaq -0x210(%rbp), %r8
leaq -0x238(%rbp), %r9
callq 0x10e70
movq %rax, -0xb98(%rbp)
jmp 0x6194
leaq -0x261(%rbp), %rdi
movq %rdi, -0xba0(%rbp)
callq 0x5730
movq -0xba0(%rbp), %rdx
leaq 0x62ef6(%rip), %rsi     # 0x690ab
leaq -0x260(%rbp), %rdi
callq 0x5580
jmp 0x61c3
leaq -0x289(%rbp), %rdi
movq %rdi, -0xba8(%rbp)
callq 0x5730
movq -0xba8(%rbp), %rdx
leaq 0x62e9e(%rip), %rsi     # 0x69082
leaq -0x288(%rbp), %rdi
callq 0x5580
jmp 0x61f2
leaq -0x2b1(%rbp), %rdi
movq %rdi, -0xbb0(%rbp)
callq 0x5730
movq -0xbb0(%rbp), %rdx
leaq 0x62ed6(%rip), %rsi     # 0x690e9
leaq -0x2b0(%rbp), %rdi
callq 0x5580
jmp 0x6221
leaq -0x2d9(%rbp), %rdi
movq %rdi, -0xbb8(%rbp)
callq 0x5730
movq -0xbb8(%rbp), %rdx
leaq 0x62e78(%rip), %rsi     # 0x690ba
leaq -0x2d8(%rbp), %rdi
callq 0x5580
jmp 0x6250
movq -0xb98(%rbp), %rdi
movl $0x6d, %esi
leaq -0x260(%rbp), %rdx
leaq -0x288(%rbp), %rcx
leaq -0x2b0(%rbp), %r8
leaq -0x2d8(%rbp), %r9
callq 0x10e70
movq %rax, -0xbc0(%rbp)
jmp 0x6286
leaq -0x301(%rbp), %rdi
movq %rdi, -0xbc8(%rbp)
callq 0x5730
movq -0xbc8(%rbp), %rdx
leaq 0x62e44(%rip), %rsi     # 0x690eb
leaq -0x300(%rbp), %rdi
callq 0x5580
jmp 0x62b5
leaq -0x329(%rbp), %rdi
movq %rdi, -0xbd0(%rbp)
callq 0x5730
movq -0xbd0(%rbp), %rdx
leaq 0x62e24(%rip), %rsi     # 0x690fa
leaq -0x328(%rbp), %rdi
callq 0x5580
jmp 0x62e4
leaq -0x351(%rbp), %rdi
movq %rdi, -0xbd8(%rbp)
callq 0x5730
movq -0xbd8(%rbp), %rdx
leaq 0x62dfe(%rip), %rsi     # 0x69103
leaq -0x350(%rbp), %rdi
callq 0x5580
jmp 0x6313
leaq -0x379(%rbp), %rdi
movq %rdi, -0xbe0(%rbp)
callq 0x5730
movq -0xbe0(%rbp), %rdx
leaq 0x62dd5(%rip), %rsi     # 0x69109
leaq -0x378(%rbp), %rdi
callq 0x5580
jmp 0x6342
movq -0xbc0(%rbp), %rdi
movl $0x76, %esi
leaq -0x300(%rbp), %rdx
leaq -0x328(%rbp), %rcx
leaq -0x350(%rbp), %r8
leaq -0x378(%rbp), %r9
callq 0x10e70
movq %rax, -0xbe8(%rbp)
jmp 0x6378
leaq -0x3a1(%rbp), %rdi
movq %rdi, -0xbf0(%rbp)
callq 0x5730
movq -0xbf0(%rbp), %rdx
leaq 0x62d9c(%rip), %rsi     # 0x69135
leaq -0x3a0(%rbp), %rdi
callq 0x5580
jmp 0x63a7
leaq -0x3c9(%rbp), %rdi
movq %rdi, -0xbf8(%rbp)
callq 0x5730
movq -0xbf8(%rbp), %rdx
leaq 0x633a7(%rip), %rsi     # 0x6976f
leaq -0x3c8(%rbp), %rdi
callq 0x5580
jmp 0x63d6
leaq -0x3f1(%rbp), %rdi
movq %rdi, -0xc00(%rbp)
callq 0x5730
movq -0xc00(%rbp), %rdx
leaq 0x63378(%rip), %rsi     # 0x6976f
leaq -0x3f0(%rbp), %rdi
callq 0x5580
jmp 0x6405
leaq -0x419(%rbp), %rdi
movq %rdi, -0xc08(%rbp)
callq 0x5730
movq -0xc08(%rbp), %rdx
leaq 0x62d20(%rip), %rsi     # 0x69146
leaq -0x418(%rbp), %rdi
callq 0x5580
jmp 0x6434
movq -0xbe8(%rbp), %rdi
movl $0x66, %esi
leaq -0x3a0(%rbp), %rdx
leaq -0x3c8(%rbp), %rcx
leaq -0x3f0(%rbp), %r8
leaq -0x418(%rbp), %r9
callq 0x10e70
movq %rax, -0xc10(%rbp)
jmp 0x646a
leaq -0x441(%rbp), %rdi
movq %rdi, -0xc18(%rbp)
callq 0x5730
movq -0xc18(%rbp), %rdx
leaq 0x62cf0(%rip), %rsi     # 0x6917b
leaq -0x440(%rbp), %rdi
callq 0x5580
jmp 0x6499
leaq -0x469(%rbp), %rdi
movq %rdi, -0xc20(%rbp)
callq 0x5730
movq -0xc20(%rbp), %rdx
leaq 0x632b5(%rip), %rsi     # 0x6976f
leaq -0x468(%rbp), %rdi
callq 0x5580
jmp 0x64c8
leaq -0x491(%rbp), %rdi
movq %rdi, -0xc28(%rbp)
callq 0x5730
movq -0xc28(%rbp), %rdx
leaq 0x63286(%rip), %rsi     # 0x6976f
leaq -0x490(%rbp), %rdi
callq 0x5580
jmp 0x64f7
leaq -0x4b9(%rbp), %rdi
movq %rdi, -0xc30(%rbp)
callq 0x5730
movq -0xc30(%rbp), %rdx
leaq 0x62c69(%rip), %rsi     # 0x69181
leaq -0x4b8(%rbp), %rdi
callq 0x5580
jmp 0x6526
movq -0xc10(%rbp), %rdi
movl $0x38, %esi
leaq -0x440(%rbp), %rdx
leaq -0x468(%rbp), %rcx
leaq -0x490(%rbp), %r8
leaq -0x4b8(%rbp), %r9
callq 0x10e70
jmp 0x6555
leaq -0x4b8(%rbp), %rdi
callq 0x5868
leaq -0x4b9(%rbp), %rdi
callq 0x5440
leaq -0x490(%rbp), %rdi
callq 0x5868
leaq -0x491(%rbp), %rdi
callq 0x5440
leaq -0x468(%rbp), %rdi
callq 0x5868
leaq -0x469(%rbp), %rdi
callq 0x5440
leaq -0x440(%rbp), %rdi
callq 0x5868
leaq -0x441(%rbp), %rdi
callq 0x5440
leaq -0x418(%rbp), %rdi
callq 0x5868
leaq -0x419(%rbp), %rdi
callq 0x5440
leaq -0x3f0(%rbp), %rdi
callq 0x5868
leaq -0x3f1(%rbp), %rdi
callq 0x5440
leaq -0x3c8(%rbp), %rdi
callq 0x5868
leaq -0x3c9(%rbp), %rdi
callq 0x5440
leaq -0x3a0(%rbp), %rdi
callq 0x5868
leaq -0x3a1(%rbp), %rdi
callq 0x5440
leaq -0x378(%rbp), %rdi
callq 0x5868
leaq -0x379(%rbp), %rdi
callq 0x5440
leaq -0x350(%rbp), %rdi
callq 0x5868
leaq -0x351(%rbp), %rdi
callq 0x5440
leaq -0x328(%rbp), %rdi
callq 0x5868
leaq -0x329(%rbp), %rdi
callq 0x5440
leaq -0x300(%rbp), %rdi
callq 0x5868
leaq -0x301(%rbp), %rdi
callq 0x5440
leaq -0x2d8(%rbp), %rdi
callq 0x5868
leaq -0x2d9(%rbp), %rdi
callq 0x5440
leaq -0x2b0(%rbp), %rdi
callq 0x5868
leaq -0x2b1(%rbp), %rdi
callq 0x5440
leaq -0x288(%rbp), %rdi
callq 0x5868
leaq -0x289(%rbp), %rdi
callq 0x5440
leaq -0x260(%rbp), %rdi
callq 0x5868
leaq -0x261(%rbp), %rdi
callq 0x5440
leaq -0x238(%rbp), %rdi
callq 0x5868
leaq -0x239(%rbp), %rdi
callq 0x5440
leaq -0x210(%rbp), %rdi
callq 0x5868
leaq -0x211(%rbp), %rdi
callq 0x5440
leaq -0x1e8(%rbp), %rdi
callq 0x5868
leaq -0x1e9(%rbp), %rdi
callq 0x5440
leaq -0x1c0(%rbp), %rdi
callq 0x5868
leaq -0x1c1(%rbp), %rdi
callq 0x5440
leaq -0x198(%rbp), %rdi
callq 0x5868
leaq -0x199(%rbp), %rdi
callq 0x5440
leaq -0x170(%rbp), %rdi
callq 0x5868
leaq -0x171(%rbp), %rdi
callq 0x5440
leaq -0x148(%rbp), %rdi
callq 0x5868
leaq -0x149(%rbp), %rdi
callq 0x5440
leaq -0x120(%rbp), %rdi
callq 0x5868
leaq -0x121(%rbp), %rdi
callq 0x5440
leaq -0xe8(%rbp), %rdi
callq 0x5868
leaq -0xe9(%rbp), %rdi
callq 0x5440
movl -0x8(%rbp), %esi
movq -0x10(%rbp), %rdx
leaq -0xc8(%rbp), %rdi
callq 0x11cc0
jmp 0x67c2
leaq -0xc8(%rbp), %rdi
addq $0x98, %rdi
callq 0x8630
cmpq $0x4, %rax
je 0x6d47
movq 0x917da(%rip), %rax     # 0x97fc0
movq (%rax), %rsi
leaq -0xc8(%rbp), %rdi
movl $0x1, %edx
callq 0x12480
jmp 0x67fc
jmp 0x6d47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6d07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6cef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6cd7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6cbf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6cb3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6ca7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6c8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6c77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6c5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6c53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6c47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6c2f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6c17
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6bff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6bf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6be7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6bcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6bb7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6b9f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6b93
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6b87
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6b6f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6b57
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6b3f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6b33
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6b27
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6b0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6af7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x6adf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x4b8(%rbp), %rdi
callq 0x5868
leaq -0x4b9(%rbp), %rdi
callq 0x5440
leaq -0x490(%rbp), %rdi
callq 0x5868
leaq -0x491(%rbp), %rdi
callq 0x5440
leaq -0x468(%rbp), %rdi
callq 0x5868
leaq -0x469(%rbp), %rdi
callq 0x5440
leaq -0x440(%rbp), %rdi
callq 0x5868
leaq -0x441(%rbp), %rdi
callq 0x5440
leaq -0x418(%rbp), %rdi
callq 0x5868
leaq -0x419(%rbp), %rdi
callq 0x5440
leaq -0x3f0(%rbp), %rdi
callq 0x5868
leaq -0x3f1(%rbp), %rdi
callq 0x5440
leaq -0x3c8(%rbp), %rdi
callq 0x5868
leaq -0x3c9(%rbp), %rdi
callq 0x5440
leaq -0x3a0(%rbp), %rdi
callq 0x5868
leaq -0x3a1(%rbp), %rdi
callq 0x5440
leaq -0x378(%rbp), %rdi
callq 0x5868
leaq -0x379(%rbp), %rdi
callq 0x5440
leaq -0x350(%rbp), %rdi
callq 0x5868
leaq -0x351(%rbp), %rdi
callq 0x5440
leaq -0x328(%rbp), %rdi
callq 0x5868
leaq -0x329(%rbp), %rdi
callq 0x5440
leaq -0x300(%rbp), %rdi
callq 0x5868
leaq -0x301(%rbp), %rdi
callq 0x5440
leaq -0x2d8(%rbp), %rdi
callq 0x5868
leaq -0x2d9(%rbp), %rdi
callq 0x5440
leaq -0x2b0(%rbp), %rdi
callq 0x5868
leaq -0x2b1(%rbp), %rdi
callq 0x5440
leaq -0x288(%rbp), %rdi
callq 0x5868
leaq -0x289(%rbp), %rdi
callq 0x5440
leaq -0x260(%rbp), %rdi
callq 0x5868
leaq -0x261(%rbp), %rdi
callq 0x5440
leaq -0x238(%rbp), %rdi
callq 0x5868
leaq -0x239(%rbp), %rdi
callq 0x5440
leaq -0x210(%rbp), %rdi
callq 0x5868
leaq -0x211(%rbp), %rdi
callq 0x5440
leaq -0x1e8(%rbp), %rdi
callq 0x5868
leaq -0x1e9(%rbp), %rdi
callq 0x5440
leaq -0x1c0(%rbp), %rdi
callq 0x5868
leaq -0x1c1(%rbp), %rdi
callq 0x5440
leaq -0x198(%rbp), %rdi
callq 0x5868
leaq -0x199(%rbp), %rdi
callq 0x5440
leaq -0x170(%rbp), %rdi
callq 0x5868
leaq -0x171(%rbp), %rdi
callq 0x5440
leaq -0x148(%rbp), %rdi
callq 0x5868
leaq -0x149(%rbp), %rdi
callq 0x5440
leaq -0x120(%rbp), %rdi
callq 0x5868
leaq -0x121(%rbp), %rdi
callq 0x5440
leaq -0xe8(%rbp), %rdi
callq 0x5868
leaq -0xe9(%rbp), %rdi
callq 0x5440
jmp 0x830c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x830c
leaq -0x4e1(%rbp), %rdi
movq %rdi, -0xc38(%rbp)
callq 0x5730
movq -0xc38(%rbp), %rdx
leaq 0x62439(%rip), %rsi     # 0x691a1
leaq -0x4e0(%rbp), %rdi
callq 0x5580
jmp 0x6d76
leaq -0xc8(%rbp), %rdi
leaq -0x4e0(%rbp), %rsi
callq 0x11e00
movq %rax, -0xc40(%rbp)
jmp 0x6d92
movq -0xc40(%rbp), %rdi
callq 0x10b50
movl %eax, -0xc44(%rbp)
jmp 0x6da6
leaq -0x4e0(%rbp), %rdi
callq 0x5868
leaq -0x4e1(%rbp), %rdi
callq 0x5440
movl -0xc44(%rbp), %eax
movl %eax, -0x4c0(%rbp)
leaq -0x509(%rbp), %rdi
movq %rdi, -0xc50(%rbp)
callq 0x5730
movq -0xc50(%rbp), %rdx
leaq 0x623bf(%rip), %rsi     # 0x691aa
leaq -0x508(%rbp), %rdi
callq 0x5580
jmp 0x6df9
leaq -0xc8(%rbp), %rdi
leaq -0x508(%rbp), %rsi
callq 0x11e00
movq %rax, -0xc58(%rbp)
jmp 0x6e15
movq -0xc58(%rbp), %rdi
callq 0x10b50
movl %eax, -0xc5c(%rbp)
jmp 0x6e29
leaq -0x508(%rbp), %rdi
callq 0x5868
leaq -0x509(%rbp), %rdi
callq 0x5440
movl -0xc5c(%rbp), %eax
movl %eax, -0x4e8(%rbp)
leaq -0x531(%rbp), %rdi
movq %rdi, -0xc68(%rbp)
callq 0x5730
movq -0xc68(%rbp), %rdx
leaq 0x62347(%rip), %rsi     # 0x691b5
leaq -0x530(%rbp), %rdi
callq 0x5580
jmp 0x6e7c
leaq -0xc8(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0x11e00
movq %rax, -0xc70(%rbp)
jmp 0x6e98
movq -0xc70(%rbp), %rdi
callq 0x10b50
movl %eax, -0xc74(%rbp)
jmp 0x6eac
leaq -0x530(%rbp), %rdi
callq 0x5868
leaq -0x531(%rbp), %rdi
callq 0x5440
movl -0xc74(%rbp), %eax
movl %eax, -0x510(%rbp)
leaq -0x30(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x8650
movq %rax, %rsi
leaq -0x558(%rbp), %rdi
callq 0x51b0
jmp 0x6eee
leaq -0x30(%rbp), %rdi
movl $0x1, %esi
callq 0x8650
movq %rax, %rsi
leaq -0x578(%rbp), %rdi
callq 0x51b0
jmp 0x6f0d
leaq -0x30(%rbp), %rdi
movl $0x2, %esi
callq 0x8650
movq %rax, %rsi
leaq -0x598(%rbp), %rdi
callq 0x51b0
jmp 0x6f2c
leaq -0x30(%rbp), %rdi
movl $0x3, %esi
callq 0x8650
movq %rax, %rsi
leaq -0x5b8(%rbp), %rdi
callq 0x51b0
jmp 0x6f4b
leaq -0x5e1(%rbp), %rdi
movq %rdi, -0xc80(%rbp)
callq 0x5730
movq -0xc80(%rbp), %rdx
leaq 0x621c9(%rip), %rsi     # 0x69135
leaq -0x5e0(%rbp), %rdi
callq 0x5580
jmp 0x6f7a
leaq -0xc8(%rbp), %rdi
leaq -0x5e0(%rbp), %rsi
callq 0x11e00
movq %rax, -0xc88(%rbp)
jmp 0x6f96
movq -0xc88(%rbp), %rax
movb 0x4a(%rax), %al
movb %al, -0xc91(%rbp)
leaq -0x5e0(%rbp), %rdi
callq 0x5868
leaq -0x5e1(%rbp), %rdi
callq 0x5440
movb -0xc91(%rbp), %al
andb $0x1, %al
movb %al, -0x5b9(%rbp)
leaq -0x609(%rbp), %rdi
movq %rdi, -0xc90(%rbp)
callq 0x5730
movq -0xc90(%rbp), %rdx
leaq 0x6218e(%rip), %rsi     # 0x6917b
leaq -0x608(%rbp), %rdi
callq 0x5580
jmp 0x6ffb
leaq -0xc8(%rbp), %rdi
leaq -0x608(%rbp), %rsi
callq 0x11e00
movq %rax, -0xca0(%rbp)
jmp 0x7017
movq -0xca0(%rbp), %rax
movb 0x4a(%rax), %al
movb %al, -0xca9(%rbp)
leaq -0x608(%rbp), %rdi
callq 0x5868
leaq -0x609(%rbp), %rdi
callq 0x5440
movb -0xca9(%rbp), %al
andb $0x1, %al
movb %al, -0x5e2(%rbp)
movq 0x90f94(%rip), %rdi     # 0x97fe8
leaq 0x62165(%rip), %rsi     # 0x691c0
callq 0x53d0
movq %rax, -0xca8(%rbp)
jmp 0x7069
movq -0xca8(%rbp), %rdi
leaq -0x578(%rbp), %rsi
callq 0x5390
movq %rax, -0xcb8(%rbp)
jmp 0x7085
movq -0xcb8(%rbp), %rdi
movq 0x90f05(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x709a
movq 0x90f47(%rip), %rdi     # 0x97fe8
leaq 0x6213a(%rip), %rsi     # 0x691e2
callq 0x53d0
movq %rax, -0xcc0(%rbp)
jmp 0x70b6
movq -0xcc0(%rbp), %rdi
leaq -0x558(%rbp), %rsi
callq 0x5390
movq %rax, -0xcc8(%rbp)
jmp 0x70d2
movq -0xcc8(%rbp), %rdi
movq 0x90eb8(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x70e7
movq 0x90efa(%rip), %rdi     # 0x97fe8
leaq 0x62104(%rip), %rsi     # 0x691f9
callq 0x53d0
movq %rax, -0xcd0(%rbp)
jmp 0x7103
movq -0xcd0(%rbp), %rdi
leaq -0x598(%rbp), %rsi
callq 0x5390
movq %rax, -0xcd8(%rbp)
jmp 0x711f
movq -0xcd8(%rbp), %rdi
movq 0x90e6b(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7134
movq 0x90ead(%rip), %rdi     # 0x97fe8
leaq 0x620ca(%rip), %rsi     # 0x6920c
callq 0x53d0
movq %rax, -0xce0(%rbp)
jmp 0x7150
movq -0xce0(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
callq 0x5390
movq %rax, -0xce8(%rbp)
jmp 0x716c
movq -0xce8(%rbp), %rdi
movq 0x90e1e(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7181
movq 0x90e60(%rip), %rdi     # 0x97fe8
leaq 0x62097(%rip), %rsi     # 0x69226
callq 0x53d0
movq %rax, -0xcf0(%rbp)
jmp 0x719d
movq -0xcf0(%rbp), %rdi
movl -0x4c0(%rbp), %esi
callq 0x5560
movq %rax, -0xcf8(%rbp)
jmp 0x71b8
movq -0xcf8(%rbp), %rdi
movq 0x90dd2(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x71cd
movq 0x90e14(%rip), %rdi     # 0x97fe8
leaq 0x62070(%rip), %rsi     # 0x6924b
callq 0x53d0
movq %rax, -0xd00(%rbp)
jmp 0x71e9
movq -0xd00(%rbp), %rdi
movl -0x4e8(%rbp), %esi
callq 0x5560
movq %rax, -0xd08(%rbp)
jmp 0x7204
movq -0xd08(%rbp), %rdi
movq 0x90d86(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7219
movq 0x90dc8(%rip), %rdi     # 0x97fe8
leaq 0x62058(%rip), %rsi     # 0x6927f
callq 0x53d0
movq %rax, -0xd10(%rbp)
jmp 0x7235
movq -0xd10(%rbp), %rdi
movl -0x510(%rbp), %esi
callq 0x5560
movq %rax, -0xd18(%rbp)
jmp 0x7250
movq -0xd18(%rbp), %rdi
movq 0x90d3a(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7265
movq 0x90d7c(%rip), %rdi     # 0x97fe8
leaq 0x6202c(%rip), %rsi     # 0x6929f
callq 0x53d0
movq %rax, -0xd20(%rbp)
jmp 0x7281
movq -0xd20(%rbp), %rdi
movsd 0x61d78(%rip), %xmm0    # 0x69008
callq 0x57c0
movq %rax, -0xd28(%rbp)
jmp 0x729e
movq -0xd28(%rbp), %rdi
movq 0x90cec(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x72b3
movq 0x90d2e(%rip), %rdi     # 0x97fe8
leaq 0x61ff5(%rip), %rsi     # 0x692b6
callq 0x53d0
movq %rax, -0xd30(%rbp)
jmp 0x72cf
movq -0xd30(%rbp), %rdi
movzbl -0x5b9(%rbp), %esi
andl $0x1, %esi
callq 0x5740
movq %rax, -0xd38(%rbp)
jmp 0x72ee
movq -0xd38(%rbp), %rdi
movq 0x90c9c(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7303
movq 0x90cde(%rip), %rdi     # 0x97fe8
leaq 0x61fc8(%rip), %rsi     # 0x692d9
callq 0x53d0
movq %rax, -0xd40(%rbp)
jmp 0x731f
movq -0xd40(%rbp), %rdi
movzbl -0x5e2(%rbp), %esi
andl $0x1, %esi
callq 0x5740
movq %rax, -0xd48(%rbp)
jmp 0x733e
movq -0xd48(%rbp), %rdi
movq 0x90c4c(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7353
leaq -0x640(%rbp), %rdi
callq 0x8670
leaq -0x670(%rbp), %rdi
callq 0x8670
leaq -0x6a0(%rbp), %rdi
callq 0x8670
leaq 0x910da(%rip), %rsi     # 0x98458
leaq -0x798(%rbp), %rdi
callq 0x8690
jmp 0x738c
leaq -0x7c8(%rbp), %rdi
callq 0x8840
leaq -0x7f8(%rbp), %rdi
callq 0x8840
leaq -0x828(%rbp), %rdi
callq 0x8670
leaq -0x858(%rbp), %rdi
callq 0x8860
movq 0x90c25(%rip), %rdi     # 0x97fe8
leaq 0x61f2c(%rip), %rsi     # 0x692f6
callq 0x53d0
movq %rax, -0xd50(%rbp)
jmp 0x73d8
movq -0xd50(%rbp), %rdi
leaq -0x578(%rbp), %rsi
callq 0x5390
movq %rax, -0xd58(%rbp)
jmp 0x73f4
movq -0xd58(%rbp), %rdi
movq 0x90b96(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7409
leaq -0x7c8(%rbp), %rdi
leaq -0x578(%rbp), %rsi
callq 0x61480
movl %eax, -0xd5c(%rbp)
jmp 0x7424
movl -0xd5c(%rbp), %eax
movl %eax, -0x85c(%rbp)
cmpl $0x0, -0x85c(%rbp)
jge 0x7651
movq 0x90ba4(%rip), %rdi     # 0x97fe8
leaq 0x61ec8(%rip), %rsi     # 0x69313
callq 0x53d0
movq %rax, -0xd68(%rbp)
jmp 0x7459
movq -0xd68(%rbp), %rdi
movq 0x90b31(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x746e
movl $0x1, %edi
callq 0x5490
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x74aa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x4e0(%rbp), %rdi
callq 0x5868
leaq -0x4e1(%rbp), %rdi
callq 0x5440
jmp 0x830c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x74ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x508(%rbp), %rdi
callq 0x5868
leaq -0x509(%rbp), %rdi
callq 0x5440
jmp 0x830c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x7530
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x530(%rbp), %rdi
callq 0x5868
leaq -0x531(%rbp), %rdi
callq 0x5440
jmp 0x830c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x8300
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x82f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x82e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x75b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x5e0(%rbp), %rdi
callq 0x5868
leaq -0x5e1(%rbp), %rdi
callq 0x5440
jmp 0x82dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x75fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x608(%rbp), %rdi
callq 0x5868
leaq -0x609(%rbp), %rdi
callq 0x5440
jmp 0x82dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x82dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x82b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x827c
movq 0x90990(%rip), %rdi     # 0x97fe8
leaq 0x61cdd(%rip), %rsi     # 0x6933c
callq 0x53d0
movq %rax, -0xd70(%rbp)
jmp 0x766d
leaq -0x7c8(%rbp), %rdi
callq 0x61f60
movl %eax, -0xd74(%rbp)
jmp 0x7681
movl -0xd74(%rbp), %esi
movq -0xd70(%rbp), %rdi
callq 0x5710
movq %rax, -0xd80(%rbp)
jmp 0x769c
movq -0xd80(%rbp), %rdi
movq 0x908ee(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x76b1
movq 0x90930(%rip), %rdi     # 0x97fe8
leaq 0x61c96(%rip), %rsi     # 0x69355
callq 0x53d0
movq %rax, -0xd88(%rbp)
jmp 0x76cd
leaq -0x7c8(%rbp), %rdi
callq 0x8880
movq -0xd88(%rbp), %rdi
movq %rax, %rsi
callq 0x50f0
movq %rax, -0xd90(%rbp)
jmp 0x76f1
movq -0xd90(%rbp), %rdi
movq 0x90899(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7706
leaq -0x890(%rbp), %rdi
movq %rdi, -0xd98(%rbp)
callq 0x8670
movq -0xd98(%rbp), %rsi
leaq -0x7c8(%rbp), %rdi
callq 0x62020
jmp 0x772e
movl -0x4e8(%rbp), %edx
movzbl -0x5e2(%rbp), %ecx
andl $0x1, %ecx
leaq -0x890(%rbp), %rdi
leaq -0x858(%rbp), %rsi
callq 0x8330
jmp 0x7753
movq 0x9088e(%rip), %rdi     # 0x97fe8
leaq 0x61c07(%rip), %rsi     # 0x69368
callq 0x53d0
movq %rax, -0xda0(%rbp)
jmp 0x776f
movq -0xda0(%rbp), %rdi
leaq -0x558(%rbp), %rsi
callq 0x5390
movq %rax, -0xda8(%rbp)
jmp 0x778b
movq -0xda8(%rbp), %rdi
movq 0x907ff(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x77a0
leaq -0x8b0(%rbp), %rdi
leaq -0x558(%rbp), %rsi
callq 0x51b0
jmp 0x77b5
movzbl -0x5e2(%rbp), %ecx
andl $0x1, %ecx
leaq -0x8b0(%rbp), %rdi
leaq -0x6a0(%rbp), %rsi
leaq -0x610(%rbp), %rdx
callq 0x57a60
movl %eax, -0xdac(%rbp)
jmp 0x77e1
movl -0xdac(%rbp), %eax
movl %eax, -0x85c(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0x5868
cmpl $0x0, -0x85c(%rbp)
jge 0x7877
movq 0x907df(%rip), %rdi     # 0x97fe8
leaq 0x61b6b(%rip), %rsi     # 0x6937b
callq 0x53d0
movq %rax, -0xdb8(%rbp)
jmp 0x781e
movq -0xdb8(%rbp), %rdi
movq 0x9076c(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7833
movl $0x1, %edi
callq 0x5490
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x8270
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0x5868
jmp 0x8270
movq 0x9076a(%rip), %rdi     # 0x97fe8
leaq 0x61ee9(%rip), %rsi     # 0x6976e
callq 0x53d0
movq %rax, -0xdc0(%rbp)
jmp 0x7893
movq -0xdc0(%rbp), %rdi
leaq 0x61b01(%rip), %rsi     # 0x693a2
callq 0x53d0
movq %rax, -0xdc8(%rbp)
jmp 0x78af
leaq -0x6a0(%rbp), %rdi
callq 0x88a0
movq -0xdc8(%rbp), %rdi
movq %rax, %rsi
callq 0x50f0
movq %rax, -0xdd0(%rbp)
jmp 0x78d3
movq -0xdd0(%rbp), %rdi
movq 0x906b7(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x78e8
movq 0x906f9(%rip), %rdi     # 0x97fe8
leaq 0x61e78(%rip), %rsi     # 0x6976e
callq 0x53d0
movq %rax, -0xdd8(%rbp)
jmp 0x7904
movq -0xdd8(%rbp), %rdi
leaq 0x61aa0(%rip), %rsi     # 0x693b2
callq 0x53d0
movq %rax, -0xde0(%rbp)
jmp 0x7920
movq -0xde0(%rbp), %rdi
movl -0x610(%rbp), %esi
callq 0x5710
movq %rax, -0xde8(%rbp)
jmp 0x793b
movq -0xde8(%rbp), %rdi
movq 0x9064f(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7950
movq 0x90691(%rip), %rdi     # 0x97fe8
leaq 0x61a6a(%rip), %rsi     # 0x693c8
callq 0x53d0
movq %rax, -0xdf0(%rbp)
jmp 0x796c
movq -0xdf0(%rbp), %rdi
leaq -0x598(%rbp), %rsi
callq 0x5390
movq %rax, -0xdf8(%rbp)
jmp 0x7988
movq -0xdf8(%rbp), %rdi
movq 0x90602(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x799d
leaq -0x798(%rbp), %rdi
leaq -0x598(%rbp), %rsi
callq 0x35520
jmp 0x79b2
leaq -0x7c8(%rbp), %rdi
callq 0x8880
movq %rax, -0xe00(%rbp)
leaq -0x798(%rbp), %rdi
addq $0x98, %rdi
callq 0x88c0
movq %rax, %rcx
movq -0xe00(%rbp), %rax
cmpq %rcx, %rax
jae 0x7bfd
leaq -0x8c8(%rbp), %rdi
callq 0x88e0
movq 0x905ea(%rip), %rdi     # 0x97fe8
leaq 0x619d1(%rip), %rsi     # 0x693d6
callq 0x53d0
movq %rax, -0xe08(%rbp)
jmp 0x7a13
leaq -0x700(%rbp), %rdi
callq 0x88c0
movq %rax, -0xe18(%rbp)
leaq -0x7c8(%rbp), %rdi
callq 0x8880
movq -0xe18(%rbp), %rsi
movq -0xe08(%rbp), %rdi
subq %rax, %rsi
callq 0x50f0
movq %rax, -0xe10(%rbp)
jmp 0x7a51
movq -0xe10(%rbp), %rdi
leaq 0x61980(%rip), %rsi     # 0x693df
callq 0x53d0
movq %rax, -0xe20(%rbp)
jmp 0x7a6d
movq -0xe20(%rbp), %rdi
movq 0x9051d(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7a82
leaq -0x798(%rbp), %rdi
addq $0x98, %rdi
callq 0x8900
movq %rax, -0x8d0(%rbp)
leaq -0x798(%rbp), %rdi
addq $0x98, %rdi
callq 0x8960
movq %rax, -0x8d8(%rbp)
leaq -0x8d0(%rbp), %rdi
leaq -0x8d8(%rbp), %rsi
callq 0x8930
testb $0x1, %al
jne 0x7ad2
jmp 0x7b85
leaq -0x8d0(%rbp), %rdi
callq 0x89f0
movq %rax, %rsi
leaq -0x7c8(%rbp), %rdi
callq 0x89c0
movq %rax, -0xe28(%rbp)
jmp 0x7af6
movq -0xe28(%rbp), %rax
movq %rax, -0x8e0(%rbp)
leaq -0x7c8(%rbp), %rdi
callq 0x8a10
movq %rax, -0x8e8(%rbp)
leaq -0x8e0(%rbp), %rdi
leaq -0x8e8(%rbp), %rsi
callq 0x8990
testb $0x1, %al
jne 0x7b30
jmp 0x7b72
leaq -0x8d0(%rbp), %rdi
callq 0x89f0
movq %rax, %rsi
leaq -0x8c8(%rbp), %rdi
callq 0x8a40
jmp 0x7b4d
jmp 0x7b72
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0x8c8(%rbp), %rdi
callq 0x8bc0
jmp 0x8270
jmp 0x7b74
leaq -0x8d0(%rbp), %rdi
callq 0x8ab0
jmp 0x7a9c
leaq -0x8c8(%rbp), %rdi
callq 0x8ae0
movq %rax, -0x8f0(%rbp)
leaq -0x8c8(%rbp), %rdi
callq 0x8b50
movq %rax, -0x8f8(%rbp)
leaq -0x8f0(%rbp), %rdi
leaq -0x8f8(%rbp), %rsi
callq 0x8b10
testb $0x1, %al
jne 0x7bc4
jmp 0x7bf1
leaq -0x8f0(%rbp), %rdi
callq 0x8b80
movq %rax, %rsi
leaq -0x798(%rbp), %rdi
callq 0x34b70
jmp 0x7be1
jmp 0x7be3
leaq -0x8f0(%rbp), %rdi
callq 0x8ba0
jmp 0x7b98
leaq -0x8c8(%rbp), %rdi
callq 0x8bc0
leaq -0x7c8(%rbp), %rdi
leaq -0x798(%rbp), %rsi
callq 0x478c0
jmp 0x7c12
movl $0xf, %edi
callq 0x8c20
movl %eax, -0xe2c(%rbp)
jmp 0x7c24
movl -0xe2c(%rbp), %eax
movl %eax, -0x8fc(%rbp)
movl -0x8fc(%rbp), %esi
movq 0x903ab(%rip), %rdi     # 0x97fe8
callq 0x5660
jmp 0x7c44
movl $0x1, -0x900(%rbp)
jmp 0x7c50
movq 0x90391(%rip), %rdi     # 0x97fe8
leaq 0x617a0(%rip), %rsi     # 0x693fe
callq 0x53d0
movq %rax, -0xe38(%rbp)
jmp 0x7c6c
movq -0xe38(%rbp), %rdi
movl -0x900(%rbp), %esi
callq 0x5710
movq %rax, -0xe40(%rbp)
jmp 0x7c87
movq -0xe40(%rbp), %rdi
movq 0x90303(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7c9c
movzbl -0x5b9(%rbp), %r8d
andl $0x1, %r8d
leaq -0x6a0(%rbp), %rdi
leaq -0x798(%rbp), %rsi
leaq -0x7f8(%rbp), %rdx
leaq -0x828(%rbp), %rcx
callq 0x5f7c0
movsd %xmm0, -0xe48(%rbp)
jmp 0x7cd3
movsd -0xe48(%rbp), %xmm0
movsd %xmm0, -0x908(%rbp)
leaq -0x7c8(%rbp), %rdi
movq %rdi, -0xe50(%rbp)
leaq -0x7f8(%rbp), %rsi
callq 0x8c40
movq -0xe50(%rbp), %rdi
movsd 0x612fc(%rip), %xmm0    # 0x69008
callq 0x5fab0
jmp 0x7d13
leaq -0x7c8(%rbp), %rdi
leaq -0x798(%rbp), %rsi
callq 0x478c0
jmp 0x7d28
leaq -0x7f8(%rbp), %rdi
callq 0x8c70
movq 0x902ad(%rip), %rdi     # 0x97fe8
leaq 0x616c7(%rip), %rsi     # 0x69409
callq 0x53d0
movq %rax, -0xe58(%rbp)
jmp 0x7d50
movq -0xe58(%rbp), %rdi
movsd -0x908(%rbp), %xmm0
callq 0x57c0
movq %rax, -0xe60(%rbp)
jmp 0x7d6d
movq -0xe60(%rbp), %rdi
movq 0x9021d(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7d82
movq 0x9025f(%rip), %rdi     # 0x97fe8
leaq 0x615ac(%rip), %rsi     # 0x6933c
callq 0x53d0
movq %rax, -0xe68(%rbp)
jmp 0x7d9e
leaq -0x7c8(%rbp), %rdi
callq 0x61f60
movl %eax, -0xe6c(%rbp)
jmp 0x7db2
movl -0xe6c(%rbp), %esi
movq -0xe68(%rbp), %rdi
callq 0x5710
movq %rax, -0xe78(%rbp)
jmp 0x7dcd
movq -0xe78(%rbp), %rdi
movq 0x901bd(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7de2
movq 0x901ff(%rip), %rdi     # 0x97fe8
leaq 0x61565(%rip), %rsi     # 0x69355
callq 0x53d0
movq %rax, -0xe80(%rbp)
jmp 0x7dfe
leaq -0x7c8(%rbp), %rdi
callq 0x8880
movq -0xe80(%rbp), %rdi
movq %rax, %rsi
callq 0x50f0
movq %rax, -0xe88(%rbp)
jmp 0x7e22
movq -0xe88(%rbp), %rdi
movq 0x90168(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7e37
leaq -0xa80(%rbp), %rdi
callq 0x5570
jmp 0x7e45
leaq 0x615d2(%rip), %rsi     # 0x6941e
leaq -0xa80(%rbp), %rdi
callq 0x53d0
movq %rax, -0xe90(%rbp)
jmp 0x7e61
movq -0xe90(%rbp), %rdi
movl -0x900(%rbp), %esi
callq 0x5710
movq %rax, -0xe98(%rbp)
jmp 0x7e7c
movq -0xe98(%rbp), %rdi
leaq 0x615a5(%rip), %rsi     # 0x6942f
callq 0x53d0
jmp 0x7e91
movq 0x90150(%rip), %rdi     # 0x97fe8
leaq 0x61594(%rip), %rsi     # 0x69433
callq 0x53d0
movq %rax, -0xea0(%rbp)
jmp 0x7ead
leaq -0xaa0(%rbp), %rdi
leaq -0xa80(%rbp), %rsi
callq 0x53f0
jmp 0x7ec2
movq -0xea0(%rbp), %rdi
leaq -0xaa0(%rbp), %rsi
callq 0x5390
movq %rax, -0xea8(%rbp)
jmp 0x7ede
movq -0xea8(%rbp), %rdi
movq 0x900ac(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7ef3
leaq -0xaa0(%rbp), %rdi
callq 0x5868
leaq -0xac0(%rbp), %rdi
leaq -0xa80(%rbp), %rsi
callq 0x53f0
jmp 0x7f14
leaq -0x7c8(%rbp), %rdi
leaq -0xac0(%rbp), %rsi
xorl %edx, %edx
movl $0x6, %ecx
callq 0x60ee0
jmp 0x7f30
leaq -0xac0(%rbp), %rdi
callq 0x5868
movq 0x900a5(%rip), %rdi     # 0x97fe8
leaq 0x614f7(%rip), %rsi     # 0x69441
callq 0x53d0
movq %rax, -0xeb0(%rbp)
jmp 0x7f58
movq -0xeb0(%rbp), %rdi
movq 0x90032(%rip), %rsi     # 0x97f98
callq 0x5420
jmp 0x7f6d
leaq -0xaf0(%rbp), %rdi
callq 0x8670
cmpl $0x1, -0x900(%rbp)
jne 0x8080
leaq -0x7c8(%rbp), %rdi
callq 0x8880
movl $0x3e8, %ecx            # imm = 0x3E8
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
je 0x8080
leaq -0x7c8(%rbp), %rdi
callq 0x8880
movq %rax, -0xeb8(%rbp)
shrq $0x3, %rax
movabsq $0x20c49ba5e353f7cf, %rcx # imm = 0x20C49BA5E353F7CF
mulq %rcx
movq -0xeb8(%rbp), %rax
shrq $0x4, %rdx
movl %edx, %ecx
imull $0x3e8, %ecx, %ecx      # imm = 0x3E8
subl %ecx, %eax
movl %eax, -0xaf4(%rbp)
movl -0xaf4(%rbp), %edi
leaq -0x828(%rbp), %rsi
leaq -0xaf0(%rbp), %rdx
leaq -0x858(%rbp), %rcx
callq 0x62c40
jmp 0x8007
jmp 0x80a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x823f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0xaa0(%rbp), %rdi
callq 0x5868
jmp 0x823f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0xac0(%rbp), %rdi
callq 0x5868
jmp 0x823f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
jmp 0x8233
movl -0x4c0(%rbp), %edi
leaq -0x828(%rbp), %rsi
leaq -0xaf0(%rbp), %rdx
leaq -0x858(%rbp), %rcx
callq 0x62c40
jmp 0x80a2
jmp 0x80a4
leaq -0xb10(%rbp), %rdi
callq 0x88e0
leaq -0xaf0(%rbp), %rdi
callq 0x8c90
movq %rax, -0xb18(%rbp)
leaq -0xaf0(%rbp), %rdi
callq 0x8cf0
movq %rax, -0xb20(%rbp)
leaq -0xb18(%rbp), %rdi
leaq -0xb20(%rbp), %rsi
callq 0x8cc0
testb $0x1, %al
jne 0x80ef
jmp 0x813f
leaq -0xb18(%rbp), %rdi
callq 0x8d20
movq %rax, %rsi
leaq -0xb10(%rbp), %rdi
callq 0x8a40
jmp 0x810c
jmp 0x810e
leaq -0xb18(%rbp), %rdi
callq 0x8d40
jmp 0x80c3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xf8(%rbp)
movl %eax, -0xfc(%rbp)
leaq -0xb10(%rbp), %rdi
callq 0x8bc0
jmp 0x8233
leaq -0xb10(%rbp), %rdi
leaq -0x7c8(%rbp), %rsi
callq 0x616b0
jmp 0x8154
leaq -0xb10(%rbp), %rdi
callq 0x8ae0
movq %rax, -0xb28(%rbp)
leaq -0xb10(%rbp), %rdi
callq 0x8b50
movq %rax, -0xb30(%rbp)
leaq -0xb28(%rbp), %rdi
leaq -0xb30(%rbp), %rsi
callq 0x8b10
testb $0x1, %al
jne 0x8193
jmp 0x81c0
leaq -0xb28(%rbp), %rdi
callq 0x8b80
movq %rax, %rsi
leaq -0x798(%rbp), %rdi
callq 0x34b70
jmp 0x81b0
jmp 0x81b2
leaq -0xb28(%rbp), %rdi
callq 0x8ba0
jmp 0x8167
leaq -0x7c8(%rbp), %rdi
callq 0x8880
movl -0x510(%rbp), %ecx
cmpq %rcx, %rax
ja 0x81e3
movl $0x9, -0xb34(%rbp)
jmp 0x81fc
movl -0x900(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x900(%rbp)
movl $0x0, -0xb34(%rbp)
leaq -0xb10(%rbp), %rdi
callq 0x8bc0
leaq -0xaf0(%rbp), %rdi
callq 0x8d70
leaq -0xa80(%rbp), %rdi
callq 0x5100
movl -0xb34(%rbp), %eax
testl %eax, %eax
je 0x822e
jmp 0x822c
jmp 0x824d
jmp 0x7c4e
leaq -0xaf0(%rbp), %rdi
callq 0x8d70
leaq -0xa80(%rbp), %rdi
callq 0x5100
jmp 0x8270
leaq -0x7c8(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
xorl %edx, %edx
movl $0x6, %ecx
callq 0x60ee0
jmp 0x8269
xorl %edi, %edi
callq 0x5490
leaq -0x890(%rbp), %rdi
callq 0x8d70
leaq -0x858(%rbp), %rdi
callq 0x8d90
leaq -0x828(%rbp), %rdi
callq 0x8d70
leaq -0x7f8(%rbp), %rdi
callq 0x8db0
leaq -0x7c8(%rbp), %rdi
callq 0x8db0
leaq -0x798(%rbp), %rdi
callq 0x336c0
leaq -0x6a0(%rbp), %rdi
callq 0x8d70
leaq -0x670(%rbp), %rdi
callq 0x8d70
leaq -0x640(%rbp), %rdi
callq 0x8d70
leaq -0x5b8(%rbp), %rdi
callq 0x5868
leaq -0x598(%rbp), %rdi
callq 0x5868
leaq -0x578(%rbp), %rdi
callq 0x5868
leaq -0x558(%rbp), %rdi
callq 0x5868
leaq -0xc8(%rbp), %rdi
callq 0x8dd0
movq -0xf8(%rbp), %rdi
callq 0x5720
nopw %cs:(%rax,%rax)