// File: mshabbirhasan[P]ups-indel/src/ups_indel.cpp
// Function: genenateUPSCoordinate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
int genenateUPSCoordinate(string referenceFileName, string inputFileName,
    string outputFileName) {

    ifstream fin(inputFileName);
    FILE * fout = fopen((outputFileName + ".uvcf").c_str(), "w");

    string type;

    bool isFirstTime = true;
    string chromosomeNumber;
    seqan::FaiIndex faiIndex;
    unsigned idx = 0;
    seqan::Dna5String sequenceInfix;
    stringstream seqStr;
    string reference;

    int ups_rs_id = 1;

    if (fout != NULL && fin.is_open()) {
        string line;
        while (getline(fin, line)) {
            if (line.at(0) == '#') {
                if (line.at(1) == '#') {
                    fprintf(fout, "%s\n", line.c_str()); // only the header of the VCF file
                } else {
                    fprintf(
                        fout, "%s\n",
                        "#CHROM\tPOS\tID\tREF\tALT\tQUAL\tFILTER\tUPS-COORDINATE\tINFO");
                }
            } else if (line.at(0) != '#' && line.at(0) != '\n') {
                vector < string > tokens = split(line, '\t');
                std::size_t found;
                string pattern;
                string chrom = tokens.at(0); // CHROM

                if (isFirstTime) {
                    chromosomeNumber = chrom;

                    // Try to load index and create on the fly if necessary.
                    if (seqan::read(faiIndex, referenceFileName.c_str()) != 0) {
                        if (build(faiIndex, referenceFileName.c_str()) != 0) {
                            std::cerr << "ERROR: Index could not be loaded or built.\n";
                            return 1;
                        }

                        // Name is stored from when reading.
                        if (write(faiIndex) != 0) {
                            std::cerr << "ERROR: Index could not be written do disk.\n";
                            return 1;
                        }
                    }

                    // Translate sequence name to index.
                    if (!getIdByName(faiIndex, chromosomeNumber, idx)) {
                        std::cerr << "ERROR: Index does not know about sequence " << referenceFileName << ".\n";
                        return 1;
                    }

                    // Finally, get infix of sequence.
                    if (readSequence(sequenceInfix, faiIndex, idx) != 0) {
                        std::cerr << "ERROR: Could not load infix.\n";
                        return 1;
                    }

                    seqStr << sequenceInfix;
                    reference = seqStr.str();

                    isFirstTime = false;
                } else if (chrom != chromosomeNumber) {
                    string chromosomeNumber = chrom;

                    // Translate sequence name to index.
                    unsigned idx = 0;
                    if (!getIdByName(faiIndex, chromosomeNumber, idx)) {
                        std::cerr << "ERROR: Index does not know about sequence " << referenceFileName << ".\n";
                        return 1;
                    }

                    // Finally, get infix of sequence.
                    if (readSequence(sequenceInfix, faiIndex, idx) != 0) {
                        std::cerr << "ERROR: Could not load infix.\n";
                        return 1;
                    }

                    stringstream newSeqStr;
                    newSeqStr << sequenceInfix;

                    reference = newSeqStr.str();
                }

                string pos = tokens.at(1); // POS
                string id = tokens.at(2); // ID

                // in some cases, there is no id in the ID column of vcf, in that case
                // assign an id
                if (id == ".") {
                    id = std::to_string(ups_rs_id);
                    ups_rs_id++;
                }
                string refer = tokens.at(3); // REF
                string alt = " "; // ALT will be filled later
                string qual = tokens.at(5); // QUAL
                string filter = tokens.at(6); // FILTER
                string info = tokens.at(7); // INFO

                found = tokens.at(4).find(','); // some rows have more than one indel in the alt column
                if (found != string::npos) {
                    vector < string > alternative_indel_token =
                        split(tokens.at(4).c_str(), ',');
                    for (int i = 0; i < alternative_indel_token.size(); i++) {
                        if ((alternative_indel_token.at(i)).at(0) != '<') {
                            alt = alternative_indel_token.at(i);
                            if (refer.length() < alt.length()) {
                                type = "I"; // insertion
                                if(isHorizontalDecompositionEnabled){
                                    pattern = diff(alt,refer); // pattern means difference between ref sequence and alt sequence in the VCF file
                                }
                                else{
                                    if(isComplexVariant(refer, alt)){
                                        type = "N/A";
                                        pattern = "[]";
                                    }
                                    else{
                                        pattern = diff(alt, refer);
                                    }
                                }
                            } else if (refer.length() > alt.length()) {
                                type = "D"; // deletion
                                if(isHorizontalDecompositionEnabled){
                                    pattern = diff(refer,alt); // pattern means difference between ref sequence and alt sequence in the VCF file
                                }
                                else{
                                    if(isComplexVariant(refer, alt)){
                                        type = "N/A";
                                        pattern = "[]";
                                    }
                                    else{
                                        pattern = diff(refer, alt);
                                    }
                                }
                            } else if (refer.length() == alt.length()) {
                                type = "N/A"; // when REF and ALT have same length, such as SNPs and MNPs
                                pattern = "[]";
                            }

                            generateEir(chrom, pos, id, refer, alt, qual, filter, info, & reference, strtoul(pos.c_str(), NULL, 0),
                                pattern, type, fout);
                        }
                    }
                } else {
                    alt = tokens.at(4); // ALT

                    // indel without any comma
                    if (refer.length() < alt.length()) {
                        type = "I";
                        if(isHorizontalDecompositionEnabled){
                            pattern = diff(alt, refer);
                        }
                        else{
                            if(isComplexVariant(refer, alt)){
                                type = "N/A";
                                pattern = "[]";
                            }
                            else{
                                pattern = diff(alt, refer);
                            }
                        }
                    } else if (refer.length() > alt.length()) {
                        type = "D";
                        if(isHorizontalDecompositionEnabled){
                            pattern = diff(refer, alt);
                        }
                        else{
                            if(isComplexVariant(refer, alt)){
                                type = "N/A";
                                pattern = "[]";
                            }
                            else{
                                pattern = diff(refer, alt);
                            }
                        }
                    }

                    // when REF and ALT have same length, such as SNPs and MNPs
                    else if (refer.length() == alt.length()) {
                        type = "N/A";
                        pattern = "[]";
                    }

                    generateEir(chrom, pos, id, refer, alt, qual, filter, info, & reference, strtoul(pos.c_str(), NULL, 0),
                        pattern, type, fout);
                }
            }
        }
        fin.close();
        fclose(fout);
    } else {
        std::cerr << "ERROR: File operation error.\n";
        return 1;
    }

    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x11a0, %rsp           # imm = 0x11A0
movq %rdi, -0xfe8(%rbp)
movq %rdx, -0xfe0(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
leaq -0x228(%rbp), %rdi
movl $0x8, %edx
callq 0x46c0
movq -0xfe0(%rbp), %rsi
leaq 0x2184d(%rip), %rdx     # 0x284d1
leaq -0x250(%rbp), %rdi
callq 0xa410
jmp 0x6c92
leaq -0x250(%rbp), %rdi
callq 0x41e0
movq %rax, %rdi
leaq 0x216b0(%rip), %rsi     # 0x28358
callq 0x44d0
movq %rax, -0xff0(%rbp)
jmp 0x6cb6
leaq -0x250(%rbp), %rdi
callq 0x48b8
movq -0xff0(%rbp), %rax
movq %rax, -0x230(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x45f0
movb $0x1, -0x281(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x45f0
leaq -0x3c8(%rbp), %rdi
callq 0xa490
jmp 0x6cfd
movl $0x0, -0x3cc(%rbp)
leaq -0x3e8(%rbp), %rdi
callq 0xa5b0
jmp 0x6d15
leaq -0x570(%rbp), %rdi
callq 0x4310
jmp 0x6d23
leaq -0x590(%rbp), %rdi
callq 0x45f0
movl $0x1, -0x594(%rbp)
cmpq $0x0, -0x230(%rbp)
je 0x8c5d
leaq -0x228(%rbp), %rdi
callq 0x46b0
movb %al, -0xff1(%rbp)
jmp 0x6d5b
movb -0xff1(%rbp), %al
testb $0x1, %al
jne 0x6d6a
jmp 0x8c5d
leaq -0x5b8(%rbp), %rdi
callq 0x45f0
leaq -0x228(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
callq 0x4100
movq %rax, -0x1000(%rbp)
jmp 0x6d92
movq -0x1000(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x4520
movb %al, -0x1001(%rbp)
jmp 0x6db0
movb -0x1001(%rbp), %al
testb $0x1, %al
jne 0x6dbf
jmp 0x8c0c
xorl %eax, %eax
movl %eax, %esi
leaq -0x5b8(%rbp), %rdi
callq 0x4850
movq %rax, -0x1010(%rbp)
jmp 0x6dd8
movq -0x1010(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x6f1d
leaq -0x5b8(%rbp), %rdi
movl $0x1, %esi
callq 0x4850
movq %rax, -0x1018(%rbp)
jmp 0x6e05
movq -0x1018(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x6efc
movq -0x230(%rbp), %rax
movq %rax, -0x1020(%rbp)
leaq -0x5b8(%rbp), %rdi
callq 0x41e0
movq -0x1020(%rbp), %rdi
movq %rax, %rdx
leaq 0x2150b(%rip), %rsi     # 0x2834e
movb $0x0, %al
callq 0x4620
jmp 0x6f18
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8d3e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x48b8
jmp 0x8d3e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8d26
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8d1a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8d0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8cf6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8c4c
movq -0x230(%rbp), %rdi
leaq 0x21444(%rip), %rsi     # 0x2834e
leaq 0x21449(%rip), %rdx     # 0x2835a
movb $0x0, %al
callq 0x4620
jmp 0x8c07
xorl %eax, %eax
movl %eax, %esi
leaq -0x5b8(%rbp), %rdi
callq 0x4850
movq %rax, -0x1028(%rbp)
jmp 0x6f36
movq -0x1028(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
je 0x8c05
xorl %eax, %eax
movl %eax, %esi
leaq -0x5b8(%rbp), %rdi
callq 0x4850
movq %rax, -0x1030(%rbp)
jmp 0x6f62
movq -0x1030(%rbp), %rax
movsbl (%rax), %eax
cmpl $0xa, %eax
je 0x8c05
leaq -0x5d0(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
movl $0x9, %edx
callq 0x4cf0
jmp 0x6f8f
leaq -0x5f8(%rbp), %rdi
callq 0x45f0
xorl %eax, %eax
movl %eax, %esi
leaq -0x5d0(%rbp), %rdi
callq 0xa630
movq %rax, -0x1038(%rbp)
jmp 0x6fb4
movq -0x1038(%rbp), %rsi
leaq -0x618(%rbp), %rdi
callq 0x41f0
jmp 0x6fc9
testb $0x1, -0x281(%rbp)
je 0x722d
leaq -0x2a8(%rbp), %rdi
leaq -0x618(%rbp), %rsi
callq 0x4070
jmp 0x6feb
movq -0xfe8(%rbp), %rdi
callq 0x41e0
movq %rax, %rsi
leaq -0x3c8(%rbp), %rdi
callq 0xa670
movl %eax, -0x103c(%rbp)
jmp 0x700e
movl -0x103c(%rbp), %eax
cmpl $0x0, %eax
je 0x70f0
movq -0xfe8(%rbp), %rdi
callq 0x41e0
movq %rax, %rsi
leaq -0x3c8(%rbp), %rdi
callq 0xa6e0
movl %eax, -0x1040(%rbp)
jmp 0x7040
movl -0x1040(%rbp), %eax
cmpl $0x0, %eax
je 0x70a4
movq 0x30f9e(%rip), %rdi     # 0x37ff0
leaq 0x21337(%rip), %rsi     # 0x28390
callq 0x4430
jmp 0x7060
movl $0x1, -0x4(%rbp)
movl $0x1, -0x61c(%rbp)
jmp 0x8b55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8beb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8bdf
leaq -0x3c8(%rbp), %rdi
callq 0xa780
movl %eax, -0x1044(%rbp)
jmp 0x70b8
movl -0x1044(%rbp), %eax
cmpl $0x0, %eax
je 0x70ee
movq 0x30f26(%rip), %rdi     # 0x37ff0
leaq 0x212eb(%rip), %rsi     # 0x283bc
callq 0x4430
jmp 0x70d8
movl $0x1, -0x4(%rbp)
movl $0x1, -0x61c(%rbp)
jmp 0x8b55
jmp 0x70f0
leaq -0x3c8(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
leaq -0x3cc(%rbp), %rdx
callq 0xa7a0
movb %al, -0x1045(%rbp)
jmp 0x7112
movb -0x1045(%rbp), %al
testb $0x1, %al
jne 0x7181
jmp 0x711e
movq 0x30ecb(%rip), %rdi     # 0x37ff0
leaq 0x212bc(%rip), %rsi     # 0x283e8
callq 0x4430
movq %rax, -0x1050(%rbp)
jmp 0x713a
movq -0xfe8(%rbp), %rsi
movq -0x1050(%rbp), %rdi
callq 0x43c0
movq %rax, -0x1058(%rbp)
jmp 0x7156
movq -0x1058(%rbp), %rdi
leaq 0x213bc(%rip), %rsi     # 0x28520
callq 0x4430
jmp 0x716b
movl $0x1, -0x4(%rbp)
movl $0x1, -0x61c(%rbp)
jmp 0x8b55
movl -0x3cc(%rbp), %edx
leaq -0x3e8(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
callq 0xa7e0
movl %eax, -0x105c(%rbp)
jmp 0x71a2
movl -0x105c(%rbp), %eax
cmpl $0x0, %eax
je 0x71d8
movq 0x30e3c(%rip), %rdi     # 0x37ff0
leaq 0x21258(%rip), %rsi     # 0x28413
callq 0x4430
jmp 0x71c2
movl $0x1, -0x4(%rbp)
movl $0x1, -0x61c(%rbp)
jmp 0x8b55
leaq -0x570(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0xa860
jmp 0x71ed
leaq -0x640(%rbp), %rdi
leaq -0x570(%rbp), %rsi
callq 0x4420
jmp 0x7202
leaq -0x590(%rbp), %rdi
leaq -0x640(%rbp), %rsi
callq 0x4510
leaq -0x640(%rbp), %rdi
callq 0x48b8
movb $0x0, -0x281(%rbp)
jmp 0x7420
leaq -0x618(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0xa330
testb $0x1, %al
jne 0x7249
jmp 0x741e
leaq -0x660(%rbp), %rdi
leaq -0x618(%rbp), %rsi
callq 0x41f0
jmp 0x725e
movl $0x0, -0x664(%rbp)
leaq -0x3c8(%rbp), %rdi
leaq -0x660(%rbp), %rsi
leaq -0x664(%rbp), %rdx
callq 0xa7a0
movb %al, -0x105d(%rbp)
jmp 0x728a
movb -0x105d(%rbp), %al
testb $0x1, %al
jne 0x7310
jmp 0x7296
movq 0x30d53(%rip), %rdi     # 0x37ff0
leaq 0x21144(%rip), %rsi     # 0x283e8
callq 0x4430
movq %rax, -0x1068(%rbp)
jmp 0x72b2
movq -0xfe8(%rbp), %rsi
movq -0x1068(%rbp), %rdi
callq 0x43c0
movq %rax, -0x1070(%rbp)
jmp 0x72ce
movq -0x1070(%rbp), %rdi
leaq 0x21244(%rip), %rsi     # 0x28520
callq 0x4430
jmp 0x72e3
movl $0x1, -0x4(%rbp)
movl $0x1, -0x61c(%rbp)
jmp 0x73d1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x740d
movl -0x664(%rbp), %edx
leaq -0x3e8(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
callq 0xa7e0
movl %eax, -0x1074(%rbp)
jmp 0x7331
movl -0x1074(%rbp), %eax
cmpl $0x0, %eax
je 0x7364
movq 0x30cad(%rip), %rdi     # 0x37ff0
leaq 0x210c9(%rip), %rsi     # 0x28413
callq 0x4430
jmp 0x7351
movl $0x1, -0x4(%rbp)
movl $0x1, -0x61c(%rbp)
jmp 0x73d1
leaq -0x7f0(%rbp), %rdi
callq 0x4310
jmp 0x7372
leaq -0x7f0(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0xa860
jmp 0x7387
leaq -0x810(%rbp), %rdi
leaq -0x7f0(%rbp), %rsi
callq 0x4420
jmp 0x739c
leaq -0x590(%rbp), %rdi
leaq -0x810(%rbp), %rsi
callq 0x4510
leaq -0x810(%rbp), %rdi
callq 0x48b8
leaq -0x7f0(%rbp), %rdi
callq 0x4330
movl $0x0, -0x61c(%rbp)
leaq -0x660(%rbp), %rdi
callq 0x48b8
movl -0x61c(%rbp), %eax
testl %eax, %eax
jne 0x8b55
jmp 0x73ed
jmp 0x741e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0x7f0(%rbp), %rdi
callq 0x4330
leaq -0x660(%rbp), %rdi
callq 0x48b8
jmp 0x8bdf
jmp 0x7420
leaq -0x5d0(%rbp), %rdi
movl $0x1, %esi
callq 0xa630
movq %rax, -0x1080(%rbp)
jmp 0x743a
movq -0x1080(%rbp), %rsi
leaq -0x830(%rbp), %rdi
callq 0x41f0
jmp 0x744f
leaq -0x5d0(%rbp), %rdi
movl $0x2, %esi
callq 0xa630
movq %rax, -0x1088(%rbp)
jmp 0x7469
movq -0x1088(%rbp), %rsi
leaq -0x850(%rbp), %rdi
callq 0x41f0
jmp 0x747e
leaq 0x20fac(%rip), %rsi     # 0x28431
leaq -0x850(%rbp), %rdi
callq 0xa360
movb %al, -0x1089(%rbp)
jmp 0x7499
movb -0x1089(%rbp), %al
testb $0x1, %al
jne 0x74a5
jmp 0x7517
movl -0x594(%rbp), %esi
leaq -0x870(%rbp), %rdi
callq 0xa890
jmp 0x74b9
leaq -0x850(%rbp), %rdi
leaq -0x870(%rbp), %rsi
callq 0x4510
leaq -0x870(%rbp), %rdi
callq 0x48b8
movl -0x594(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x594(%rbp)
jmp 0x7517
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8bd3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8bc7
leaq -0x5d0(%rbp), %rdi
movl $0x3, %esi
callq 0xa630
movq %rax, -0x1098(%rbp)
jmp 0x7531
movq -0x1098(%rbp), %rsi
leaq -0x890(%rbp), %rdi
callq 0x41f0
jmp 0x7546
leaq -0x8b1(%rbp), %rdi
movq %rdi, -0x10a0(%rbp)
callq 0x4780
movq -0x10a0(%rbp), %rdx
leaq 0x21037(%rip), %rsi     # 0x2859e
leaq -0x8b0(%rbp), %rdi
callq 0x45d0
jmp 0x7575
leaq -0x8b1(%rbp), %rdi
callq 0x44a0
leaq -0x5d0(%rbp), %rdi
movl $0x5, %esi
callq 0xa630
movq %rax, -0x10a8(%rbp)
jmp 0x759b
movq -0x10a8(%rbp), %rsi
leaq -0x8d8(%rbp), %rdi
callq 0x41f0
jmp 0x75b0
leaq -0x5d0(%rbp), %rdi
movl $0x6, %esi
callq 0xa630
movq %rax, -0x10b0(%rbp)
jmp 0x75ca
movq -0x10b0(%rbp), %rsi
leaq -0x8f8(%rbp), %rdi
callq 0x41f0
jmp 0x75df
leaq -0x5d0(%rbp), %rdi
movl $0x7, %esi
callq 0xa630
movq %rax, -0x10b8(%rbp)
jmp 0x75f9
movq -0x10b8(%rbp), %rsi
leaq -0x918(%rbp), %rdi
callq 0x41f0
jmp 0x760e
leaq -0x5d0(%rbp), %rdi
movl $0x4, %esi
callq 0xa630
movq %rax, -0x10c0(%rbp)
jmp 0x7628
movq -0x10c0(%rbp), %rdi
movl $0x2c, %esi
xorl %eax, %eax
movl %eax, %edx
callq 0x4570
movq %rax, -0x5d8(%rbp)
cmpq $-0x1, -0x5d8(%rbp)
je 0x81b3
leaq -0x5d0(%rbp), %rdi
movl $0x4, %esi
callq 0xa630
movq %rax, -0x10c8(%rbp)
jmp 0x766c
movq -0x10c8(%rbp), %rdi
callq 0x41e0
movq %rax, -0x10d8(%rbp)
leaq -0x951(%rbp), %rdi
movq %rdi, -0x10d0(%rbp)
callq 0x4780
movq -0x10d8(%rbp), %rsi
movq -0x10d0(%rbp), %rdx
leaq -0x950(%rbp), %rdi
callq 0x45d0
jmp 0x76ae
leaq -0x930(%rbp), %rdi
leaq -0x950(%rbp), %rsi
movl $0x2c, %edx
callq 0x4cf0
jmp 0x76c8
leaq -0x950(%rbp), %rdi
callq 0x48b8
leaq -0x951(%rbp), %rdi
callq 0x44a0
movl $0x0, -0x958(%rbp)
movslq -0x958(%rbp), %rax
movq %rax, -0x10e0(%rbp)
leaq -0x930(%rbp), %rdi
callq 0xa9b0
movq %rax, %rcx
movq -0x10e0(%rbp), %rax
cmpq %rcx, %rax
jae 0x8191
movslq -0x958(%rbp), %rsi
leaq -0x930(%rbp), %rdi
callq 0xa630
movq %rax, -0x10e8(%rbp)
jmp 0x7733
movq -0x10e8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x4850
movq %rax, -0x10f0(%rbp)
jmp 0x774c
movq -0x10f0(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3c, %eax
je 0x817b
movslq -0x958(%rbp), %rsi
leaq -0x930(%rbp), %rdi
callq 0xa630
movq %rax, -0x10f8(%rbp)
jmp 0x777b
movq -0x10f8(%rbp), %rsi
leaq -0x8b0(%rbp), %rdi
callq 0x4070
jmp 0x7790
leaq -0x890(%rbp), %rdi
callq 0x4650
movq %rax, -0x1100(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0x4650
movq %rax, %rcx
movq -0x1100(%rbp), %rax
cmpq %rcx, %rax
jae 0x7b26
leaq 0x20b35(%rip), %rsi     # 0x282fe
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x77d7
testb $0x1, 0x30c8a(%rip)     # 0x38468
je 0x7982
leaq -0x998(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x77f9
leaq -0x9b8(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x780e
leaq -0x978(%rbp), %rdi
leaq -0x998(%rbp), %rsi
leaq -0x9b8(%rbp), %rdx
callq 0x4d80
jmp 0x782a
leaq -0x5f8(%rbp), %rdi
leaq -0x978(%rbp), %rsi
callq 0x4510
leaq -0x978(%rbp), %rdi
callq 0x48b8
leaq -0x9b8(%rbp), %rdi
callq 0x48b8
leaq -0x998(%rbp), %rdi
callq 0x48b8
jmp 0x7b21
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0x8b1(%rbp), %rdi
callq 0x44a0
jmp 0x8bbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8baf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8ba3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8b97
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8b8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x7917
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0x950(%rbp), %rdi
callq 0x48b8
leaq -0x951(%rbp), %rdi
callq 0x44a0
jmp 0x8b8b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x81a2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x7971
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0x9b8(%rbp), %rdi
callq 0x48b8
leaq -0x998(%rbp), %rdi
callq 0x48b8
jmp 0x81a2
leaq -0x9d8(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x7997
leaq -0x9f8(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x79ac
leaq -0x9d8(%rbp), %rdi
leaq -0x9f8(%rbp), %rsi
callq 0x5280
movb %al, -0x1101(%rbp)
jmp 0x79c7
leaq -0x9f8(%rbp), %rdi
callq 0x48b8
leaq -0x9d8(%rbp), %rdi
callq 0x48b8
movb -0x1101(%rbp), %al
testb $0x1, %al
jne 0x79eb
jmp 0x7a5d
leaq 0x20940(%rip), %rsi     # 0x28332
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x7a00
leaq 0x2094e(%rip), %rsi     # 0x28355
leaq -0x5f8(%rbp), %rdi
callq 0x45c0
jmp 0x7a15
jmp 0x7b1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x7a4c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0x9f8(%rbp), %rdi
callq 0x48b8
leaq -0x9d8(%rbp), %rdi
callq 0x48b8
jmp 0x81a2
leaq -0xa38(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x7a72
leaq -0xa58(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x7a87
leaq -0xa18(%rbp), %rdi
leaq -0xa38(%rbp), %rsi
leaq -0xa58(%rbp), %rdx
callq 0x4d80
jmp 0x7aa3
leaq -0x5f8(%rbp), %rdi
leaq -0xa18(%rbp), %rsi
callq 0x4510
leaq -0xa18(%rbp), %rdi
callq 0x48b8
leaq -0xa58(%rbp), %rdi
callq 0x48b8
leaq -0xa38(%rbp), %rdi
callq 0x48b8
jmp 0x7b1f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x7b0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xa58(%rbp), %rdi
callq 0x48b8
leaq -0xa38(%rbp), %rdi
callq 0x48b8
jmp 0x81a2
jmp 0x7b21
jmp 0x7e3e
leaq -0x890(%rbp), %rdi
callq 0x4650
movq %rax, -0x1110(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0x4650
movq %rax, %rcx
movq -0x1110(%rbp), %rax
cmpq %rcx, %rax
jbe 0x7de0
leaq 0x2101c(%rip), %rsi     # 0x28b7b
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x7b6d
testb $0x1, 0x308f4(%rip)     # 0x38468
je 0x7c3f
leaq -0xa98(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x7b8f
leaq -0xab8(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x7ba4
leaq -0xa78(%rbp), %rdi
leaq -0xa98(%rbp), %rsi
leaq -0xab8(%rbp), %rdx
callq 0x4d80
jmp 0x7bc0
leaq -0x5f8(%rbp), %rdi
leaq -0xa78(%rbp), %rsi
callq 0x4510
leaq -0xa78(%rbp), %rdi
callq 0x48b8
leaq -0xab8(%rbp), %rdi
callq 0x48b8
leaq -0xa98(%rbp), %rdi
callq 0x48b8
jmp 0x7dde
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x7c2e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xab8(%rbp), %rdi
callq 0x48b8
leaq -0xa98(%rbp), %rdi
callq 0x48b8
jmp 0x81a2
leaq -0xad8(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x7c54
leaq -0xaf8(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x7c69
leaq -0xad8(%rbp), %rdi
leaq -0xaf8(%rbp), %rsi
callq 0x5280
movb %al, -0x1111(%rbp)
jmp 0x7c84
leaq -0xaf8(%rbp), %rdi
callq 0x48b8
leaq -0xad8(%rbp), %rdi
callq 0x48b8
movb -0x1111(%rbp), %al
testb $0x1, %al
jne 0x7ca8
jmp 0x7d1a
leaq 0x20683(%rip), %rsi     # 0x28332
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x7cbd
leaq 0x20691(%rip), %rsi     # 0x28355
leaq -0x5f8(%rbp), %rdi
callq 0x45c0
jmp 0x7cd2
jmp 0x7ddc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x7d09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xaf8(%rbp), %rdi
callq 0x48b8
leaq -0xad8(%rbp), %rdi
callq 0x48b8
jmp 0x81a2
leaq -0xb38(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x7d2f
leaq -0xb58(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x7d44
leaq -0xb18(%rbp), %rdi
leaq -0xb38(%rbp), %rsi
leaq -0xb58(%rbp), %rdx
callq 0x4d80
jmp 0x7d60
leaq -0x5f8(%rbp), %rdi
leaq -0xb18(%rbp), %rsi
callq 0x4510
leaq -0xb18(%rbp), %rdi
callq 0x48b8
leaq -0xb58(%rbp), %rdi
callq 0x48b8
leaq -0xb38(%rbp), %rdi
callq 0x48b8
jmp 0x7ddc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x7dcb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xb58(%rbp), %rdi
callq 0x48b8
leaq -0xb38(%rbp), %rdi
callq 0x48b8
jmp 0x81a2
jmp 0x7dde
jmp 0x7e3c
leaq -0x890(%rbp), %rdi
callq 0x4650
movq %rax, -0x1120(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0x4650
movq %rax, %rcx
movq -0x1120(%rbp), %rax
cmpq %rcx, %rax
jne 0x7e3a
leaq 0x2051d(%rip), %rsi     # 0x28332
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x7e23
leaq 0x2052b(%rip), %rsi     # 0x28355
leaq -0x5f8(%rbp), %rdi
callq 0x45c0
jmp 0x7e38
jmp 0x7e3a
jmp 0x7e3c
jmp 0x7e3e
leaq -0xb78(%rbp), %rdi
leaq -0x618(%rbp), %rsi
callq 0x41f0
jmp 0x7e53
leaq -0xb98(%rbp), %rdi
leaq -0x830(%rbp), %rsi
callq 0x41f0
jmp 0x7e68
leaq -0xbb8(%rbp), %rdi
leaq -0x850(%rbp), %rsi
callq 0x41f0
jmp 0x7e7d
leaq -0xbd8(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x7e92
leaq -0xbf8(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x7ea7
leaq -0xc18(%rbp), %rdi
leaq -0x8d8(%rbp), %rsi
callq 0x41f0
jmp 0x7ebc
leaq -0xc38(%rbp), %rdi
leaq -0x8f8(%rbp), %rsi
callq 0x41f0
jmp 0x7ed1
leaq -0xc58(%rbp), %rdi
leaq -0x918(%rbp), %rsi
callq 0x41f0
jmp 0x7ee6
leaq -0x830(%rbp), %rdi
callq 0x41e0
movq %rax, %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x4180
movq %rax, -0x1128(%rbp)
leaq -0xc78(%rbp), %rdi
leaq -0x5f8(%rbp), %rsi
callq 0x41f0
jmp 0x7f1a
leaq -0xc98(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x41f0
jmp 0x7f2f
movq -0x1128(%rbp), %rcx
movq -0x230(%rbp), %rdx
movq %rsp, %rax
movq %rdx, 0x30(%rax)
leaq -0xc98(%rbp), %rdx
movq %rdx, 0x28(%rax)
leaq -0xc78(%rbp), %rdx
movq %rdx, 0x20(%rax)
movq %rcx, 0x18(%rax)
leaq -0x590(%rbp), %rcx
movq %rcx, 0x10(%rax)
leaq -0xc58(%rbp), %rcx
movq %rcx, 0x8(%rax)
leaq -0xc38(%rbp), %rcx
movq %rcx, (%rax)
leaq -0xb78(%rbp), %rdi
leaq -0xb98(%rbp), %rsi
leaq -0xbb8(%rbp), %rdx
leaq -0xbd8(%rbp), %rcx
leaq -0xbf8(%rbp), %r8
leaq -0xc18(%rbp), %r9
callq 0x5540
jmp 0x7faf
leaq -0xc98(%rbp), %rdi
callq 0x48b8
leaq -0xc78(%rbp), %rdi
callq 0x48b8
leaq -0xc58(%rbp), %rdi
callq 0x48b8
leaq -0xc38(%rbp), %rdi
callq 0x48b8
leaq -0xc18(%rbp), %rdi
callq 0x48b8
leaq -0xbf8(%rbp), %rdi
callq 0x48b8
leaq -0xbd8(%rbp), %rdi
callq 0x48b8
leaq -0xbb8(%rbp), %rdi
callq 0x48b8
leaq -0xb98(%rbp), %rdi
callq 0x48b8
leaq -0xb78(%rbp), %rdi
callq 0x48b8
jmp 0x817b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x816d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8161
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8155
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8149
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x813d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8131
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8125
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8119
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x810d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xc98(%rbp), %rdi
callq 0x48b8
leaq -0xc78(%rbp), %rdi
callq 0x48b8
leaq -0xc58(%rbp), %rdi
callq 0x48b8
leaq -0xc38(%rbp), %rdi
callq 0x48b8
leaq -0xc18(%rbp), %rdi
callq 0x48b8
leaq -0xbf8(%rbp), %rdi
callq 0x48b8
leaq -0xbd8(%rbp), %rdi
callq 0x48b8
leaq -0xbb8(%rbp), %rdi
callq 0x48b8
leaq -0xb98(%rbp), %rdi
callq 0x48b8
leaq -0xb78(%rbp), %rdi
callq 0x48b8
jmp 0x81a2
jmp 0x817d
movl -0x958(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x958(%rbp)
jmp 0x76ea
leaq -0x930(%rbp), %rdi
callq 0xa240
jmp 0x8af7
leaq -0x930(%rbp), %rdi
callq 0xa240
jmp 0x8b8b
leaq -0x5d0(%rbp), %rdi
movl $0x4, %esi
callq 0xa630
movq %rax, -0x1130(%rbp)
jmp 0x81cd
movq -0x1130(%rbp), %rsi
leaq -0x8b0(%rbp), %rdi
callq 0x4070
jmp 0x81e2
leaq -0x890(%rbp), %rdi
callq 0x4650
movq %rax, -0x1138(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0x4650
movq %rax, %rcx
movq -0x1138(%rbp), %rax
cmpq %rcx, %rax
jae 0x849f
leaq 0x200e3(%rip), %rsi     # 0x282fe
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x8229
testb $0x1, 0x30238(%rip)     # 0x38468
je 0x82fb
leaq -0xcd8(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x824b
leaq -0xcf8(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x8260
leaq -0xcb8(%rbp), %rdi
leaq -0xcd8(%rbp), %rsi
leaq -0xcf8(%rbp), %rdx
callq 0x4d80
jmp 0x827c
leaq -0x5f8(%rbp), %rdi
leaq -0xcb8(%rbp), %rsi
callq 0x4510
leaq -0xcb8(%rbp), %rdi
callq 0x48b8
leaq -0xcf8(%rbp), %rdi
callq 0x48b8
leaq -0xcd8(%rbp), %rdi
callq 0x48b8
jmp 0x849a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x82ea
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xcf8(%rbp), %rdi
callq 0x48b8
leaq -0xcd8(%rbp), %rdi
callq 0x48b8
jmp 0x8b8b
leaq -0xd18(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x8310
leaq -0xd38(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x8325
leaq -0xd18(%rbp), %rdi
leaq -0xd38(%rbp), %rsi
callq 0x5280
movb %al, -0x1139(%rbp)
jmp 0x8340
leaq -0xd38(%rbp), %rdi
callq 0x48b8
leaq -0xd18(%rbp), %rdi
callq 0x48b8
movb -0x1139(%rbp), %al
testb $0x1, %al
jne 0x8364
jmp 0x83d6
leaq 0x1ffc7(%rip), %rsi     # 0x28332
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x8379
leaq 0x1ffd5(%rip), %rsi     # 0x28355
leaq -0x5f8(%rbp), %rdi
callq 0x45c0
jmp 0x838e
jmp 0x8498
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x83c5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xd38(%rbp), %rdi
callq 0x48b8
leaq -0xd18(%rbp), %rdi
callq 0x48b8
jmp 0x8b8b
leaq -0xd78(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x83eb
leaq -0xd98(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x8400
leaq -0xd58(%rbp), %rdi
leaq -0xd78(%rbp), %rsi
leaq -0xd98(%rbp), %rdx
callq 0x4d80
jmp 0x841c
leaq -0x5f8(%rbp), %rdi
leaq -0xd58(%rbp), %rsi
callq 0x4510
leaq -0xd58(%rbp), %rdi
callq 0x48b8
leaq -0xd98(%rbp), %rdi
callq 0x48b8
leaq -0xd78(%rbp), %rdi
callq 0x48b8
jmp 0x8498
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8487
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xd98(%rbp), %rdi
callq 0x48b8
leaq -0xd78(%rbp), %rdi
callq 0x48b8
jmp 0x8b8b
jmp 0x849a
jmp 0x87b7
leaq -0x890(%rbp), %rdi
callq 0x4650
movq %rax, -0x1148(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0x4650
movq %rax, %rcx
movq -0x1148(%rbp), %rax
cmpq %rcx, %rax
jbe 0x8759
leaq 0x206a3(%rip), %rsi     # 0x28b7b
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x84e6
testb $0x1, 0x2ff7b(%rip)     # 0x38468
je 0x85b8
leaq -0xdd8(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x8508
leaq -0xdf8(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x851d
leaq -0xdb8(%rbp), %rdi
leaq -0xdd8(%rbp), %rsi
leaq -0xdf8(%rbp), %rdx
callq 0x4d80
jmp 0x8539
leaq -0x5f8(%rbp), %rdi
leaq -0xdb8(%rbp), %rsi
callq 0x4510
leaq -0xdb8(%rbp), %rdi
callq 0x48b8
leaq -0xdf8(%rbp), %rdi
callq 0x48b8
leaq -0xdd8(%rbp), %rdi
callq 0x48b8
jmp 0x8757
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x85a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xdf8(%rbp), %rdi
callq 0x48b8
leaq -0xdd8(%rbp), %rdi
callq 0x48b8
jmp 0x8b8b
leaq -0xe18(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x85cd
leaq -0xe38(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x85e2
leaq -0xe18(%rbp), %rdi
leaq -0xe38(%rbp), %rsi
callq 0x5280
movb %al, -0x1149(%rbp)
jmp 0x85fd
leaq -0xe38(%rbp), %rdi
callq 0x48b8
leaq -0xe18(%rbp), %rdi
callq 0x48b8
movb -0x1149(%rbp), %al
testb $0x1, %al
jne 0x8621
jmp 0x8693
leaq 0x1fd0a(%rip), %rsi     # 0x28332
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x8636
leaq 0x1fd18(%rip), %rsi     # 0x28355
leaq -0x5f8(%rbp), %rdi
callq 0x45c0
jmp 0x864b
jmp 0x8755
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8682
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xe38(%rbp), %rdi
callq 0x48b8
leaq -0xe18(%rbp), %rdi
callq 0x48b8
jmp 0x8b8b
leaq -0xe78(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x86a8
leaq -0xe98(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x86bd
leaq -0xe58(%rbp), %rdi
leaq -0xe78(%rbp), %rsi
leaq -0xe98(%rbp), %rdx
callq 0x4d80
jmp 0x86d9
leaq -0x5f8(%rbp), %rdi
leaq -0xe58(%rbp), %rsi
callq 0x4510
leaq -0xe58(%rbp), %rdi
callq 0x48b8
leaq -0xe98(%rbp), %rdi
callq 0x48b8
leaq -0xe78(%rbp), %rdi
callq 0x48b8
jmp 0x8755
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8744
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xe98(%rbp), %rdi
callq 0x48b8
leaq -0xe78(%rbp), %rdi
callq 0x48b8
jmp 0x8b8b
jmp 0x8757
jmp 0x87b5
leaq -0x890(%rbp), %rdi
callq 0x4650
movq %rax, -0x1158(%rbp)
leaq -0x8b0(%rbp), %rdi
callq 0x4650
movq %rax, %rcx
movq -0x1158(%rbp), %rax
cmpq %rcx, %rax
jne 0x87b3
leaq 0x1fba4(%rip), %rsi     # 0x28332
leaq -0x280(%rbp), %rdi
callq 0x45c0
jmp 0x879c
leaq 0x1fbb2(%rip), %rsi     # 0x28355
leaq -0x5f8(%rbp), %rdi
callq 0x45c0
jmp 0x87b1
jmp 0x87b3
jmp 0x87b5
jmp 0x87b7
leaq -0xeb8(%rbp), %rdi
leaq -0x618(%rbp), %rsi
callq 0x41f0
jmp 0x87cc
leaq -0xed8(%rbp), %rdi
leaq -0x830(%rbp), %rsi
callq 0x41f0
jmp 0x87e1
leaq -0xef8(%rbp), %rdi
leaq -0x850(%rbp), %rsi
callq 0x41f0
jmp 0x87f6
leaq -0xf18(%rbp), %rdi
leaq -0x890(%rbp), %rsi
callq 0x41f0
jmp 0x880b
leaq -0xf38(%rbp), %rdi
leaq -0x8b0(%rbp), %rsi
callq 0x41f0
jmp 0x8820
leaq -0xf58(%rbp), %rdi
leaq -0x8d8(%rbp), %rsi
callq 0x41f0
jmp 0x8835
leaq -0xf78(%rbp), %rdi
leaq -0x8f8(%rbp), %rsi
callq 0x41f0
jmp 0x884a
leaq -0xf98(%rbp), %rdi
leaq -0x918(%rbp), %rsi
callq 0x41f0
jmp 0x885f
leaq -0x830(%rbp), %rdi
callq 0x41e0
movq %rax, %rdi
xorl %edx, %edx
movl %edx, %esi
callq 0x4180
movq %rax, -0x1160(%rbp)
leaq -0xfb8(%rbp), %rdi
leaq -0x5f8(%rbp), %rsi
callq 0x41f0
jmp 0x8893
leaq -0xfd8(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x41f0
jmp 0x88a8
movq -0x1160(%rbp), %rcx
movq -0x230(%rbp), %rdx
movq %rsp, %rax
movq %rdx, 0x30(%rax)
leaq -0xfd8(%rbp), %rdx
movq %rdx, 0x28(%rax)
leaq -0xfb8(%rbp), %rdx
movq %rdx, 0x20(%rax)
movq %rcx, 0x18(%rax)
leaq -0x590(%rbp), %rcx
movq %rcx, 0x10(%rax)
leaq -0xf98(%rbp), %rcx
movq %rcx, 0x8(%rax)
leaq -0xf78(%rbp), %rcx
movq %rcx, (%rax)
leaq -0xeb8(%rbp), %rdi
leaq -0xed8(%rbp), %rsi
leaq -0xef8(%rbp), %rdx
leaq -0xf18(%rbp), %rcx
leaq -0xf38(%rbp), %r8
leaq -0xf58(%rbp), %r9
callq 0x5540
jmp 0x8928
leaq -0xfd8(%rbp), %rdi
callq 0x48b8
leaq -0xfb8(%rbp), %rdi
callq 0x48b8
leaq -0xf98(%rbp), %rdi
callq 0x48b8
leaq -0xf78(%rbp), %rdi
callq 0x48b8
leaq -0xf58(%rbp), %rdi
callq 0x48b8
leaq -0xf38(%rbp), %rdi
callq 0x48b8
leaq -0xf18(%rbp), %rdi
callq 0x48b8
leaq -0xef8(%rbp), %rdi
callq 0x48b8
leaq -0xed8(%rbp), %rdi
callq 0x48b8
leaq -0xeb8(%rbp), %rdi
callq 0x48b8
jmp 0x8af7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8ae6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8ada
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8ace
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8ac2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8ab6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8aaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8a9e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8a92
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
jmp 0x8a86
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x258(%rbp)
movl %eax, -0x25c(%rbp)
leaq -0xfd8(%rbp), %rdi
callq 0x48b8
leaq -0xfb8(%rbp), %rdi
callq 0x48b8
leaq -0xf98(%rbp), %rdi
callq 0x48b8
leaq -0xf78(%rbp), %rdi
callq 0x48b8
leaq -0xf58(%rbp), %rdi
callq 0x48b8
leaq -0xf38(%rbp), %rdi
callq 0x48b8
leaq -0xf18(%rbp), %rdi
callq 0x48b8
leaq -0xef8(%rbp), %rdi
callq 0x48b8
leaq -0xed8(%rbp), %rdi
callq 0x48b8
leaq -0xeb8(%rbp), %rdi
callq 0x48b8
jmp 0x8b8b
leaq -0x918(%rbp), %rdi
callq 0x48b8
leaq -0x8f8(%rbp), %rdi
callq 0x48b8
leaq -0x8d8(%rbp), %rdi
callq 0x48b8
leaq -0x8b0(%rbp), %rdi
callq 0x48b8
leaq -0x890(%rbp), %rdi
callq 0x48b8
leaq -0x850(%rbp), %rdi
callq 0x48b8
leaq -0x830(%rbp), %rdi
callq 0x48b8
movl $0x0, -0x61c(%rbp)
leaq -0x618(%rbp), %rdi
callq 0x48b8
leaq -0x5f8(%rbp), %rdi
callq 0x48b8
leaq -0x5d0(%rbp), %rdi
callq 0xa240
movl -0x61c(%rbp), %eax
testl %eax, %eax
jne 0x8c32
jmp 0x8b89
jmp 0x8c05
leaq -0x918(%rbp), %rdi
callq 0x48b8
leaq -0x8f8(%rbp), %rdi
callq 0x48b8
leaq -0x8d8(%rbp), %rdi
callq 0x48b8
leaq -0x8b0(%rbp), %rdi
callq 0x48b8
leaq -0x890(%rbp), %rdi
callq 0x48b8
leaq -0x850(%rbp), %rdi
callq 0x48b8
leaq -0x830(%rbp), %rdi
callq 0x48b8
leaq -0x618(%rbp), %rdi
callq 0x48b8
leaq -0x5f8(%rbp), %rdi
callq 0x48b8
leaq -0x5d0(%rbp), %rdi
callq 0xa240
jmp 0x8c4c
jmp 0x8c07
jmp 0x6d76
leaq -0x228(%rbp), %rdi
callq 0x4120
jmp 0x8c1a
movq -0x230(%rbp), %rdi
callq 0x4440
jmp 0x8c28
movl $0x0, -0x61c(%rbp)
leaq -0x5b8(%rbp), %rdi
callq 0x48b8
movl -0x61c(%rbp), %eax
testl %eax, %eax
jne 0x8c96
jmp 0x8c4a
jmp 0x8c85
leaq -0x5b8(%rbp), %rdi
callq 0x48b8
jmp 0x8cf6
movq 0x2f38c(%rip), %rdi     # 0x37ff0
leaq 0x1f7c8(%rip), %rsi     # 0x28433
callq 0x4430
jmp 0x8c72
movl $0x1, -0x4(%rbp)
movl $0x1, -0x61c(%rbp)
jmp 0x8c96
movl $0x0, -0x4(%rbp)
movl $0x1, -0x61c(%rbp)
leaq -0x590(%rbp), %rdi
callq 0x48b8
leaq -0x570(%rbp), %rdi
callq 0x4330
leaq -0x3e8(%rbp), %rdi
callq 0xa9d0
leaq -0x3c8(%rbp), %rdi
callq 0xaa20
leaq -0x2a8(%rbp), %rdi
callq 0x48b8
leaq -0x280(%rbp), %rdi
callq 0x48b8
leaq -0x228(%rbp), %rdi
callq 0x4140
movl -0x4(%rbp), %eax
addq $0x11a0, %rsp           # imm = 0x11A0
popq %rbp
retq
leaq -0x590(%rbp), %rdi
callq 0x48b8
leaq -0x570(%rbp), %rdi
callq 0x4330
leaq -0x3e8(%rbp), %rdi
callq 0xa9d0
leaq -0x3c8(%rbp), %rdi
callq 0xaa20
leaq -0x2a8(%rbp), %rdi
callq 0x48b8
leaq -0x280(%rbp), %rdi
callq 0x48b8
leaq -0x228(%rbp), %rdi
callq 0x4140
movq -0x258(%rbp), %rdi
callq 0x4770
nopw %cs:(%rax,%rax)