// File: millanek[P]Dsuite/Dsuite_fBranch.cpp
// Function: fBranchMain(int, char**)
int fBranchMain(int argc, char** argv) {
    parseFbranchOptions(argc, argv);
    std::istream* treeFile = new std::ifstream(opt::treeFile.c_str());
    if (!treeFile->good()) { std::cerr << "The file " << opt::treeFile << " could not be opened. Exiting..." << std::endl; exit(EXIT_FAILURE);}
    std::istream* DvalsFile = new std::ifstream(opt::DvalsFile.c_str());
    if (!DvalsFile->good()) { std::cerr << "The file " << opt::DvalsFile << " could not be opened. Exiting..." << std::endl; exit(EXIT_FAILURE);}
    if (opt::DvalsFile.substr(opt::DvalsFile.size()-9) != "_tree.txt") { std::cerr << "The name of the input file with the f4-ratio values should end in \"_tree.txt\".\nPlease make sure you run Dtrios with the --tree option and then feed the correct file into Fbranch. Exiting..." << std::endl; exit(EXIT_FAILURE); }
    std::map<string,std::vector<std::vector<string>>> acToBmap;
    string line; int l = 0;
    getline(*DvalsFile, line); // get the header
    std::vector<string> headerVec = split(line, '\t');
    int indexFg = -1; int indexZ = -1;
    if (headerVec[4] == "Z-score") { indexZ = 4; }
    if (headerVec[5] == F4HEADER || headerVec[5] == "f_G") { indexFg = 5; } else if (headerVec[6] == F4HEADER || headerVec[6] == "f_G") { indexFg = 6; }
    while (getline(*DvalsFile, line)) {
        line.erase(std::remove(line.begin(), line.end(), '\r'), line.end()); // Deal with any left over \r from files prepared on Windows
        l++; if (line == "") { std::cerr << "Please fix the format of the " << opt::DvalsFile << " file.\nLine " << l << " is empty. Exiting..." << std::endl; exit(EXIT_FAILURE); }
        std::vector<string> speciesAndVals = split(line, '\t');
        if (speciesAndVals.size() < 6 || indexFg == -1) {
            std::cerr << "Please fix the format of the " << opt::DvalsFile << " file." << std::endl;
            std::cerr << "Looks like the file does not contain f4-ratio statistics. Exiting..." << std::endl;
            exit(EXIT_FAILURE);
        }
        double f4ratio = stringToDouble(speciesAndVals[indexFg]); double Zscore = stringToDouble(speciesAndVals[indexZ]);
        double pval = 2 * (1 - normalCDF(Zscore));
        std::vector<string> bAndValLine;  bAndValLine.push_back(speciesAndVals[1]);
        if (pval < opt::pthresh) bAndValLine.push_back(speciesAndVals[indexFg]); else bAndValLine.push_back("0"); // Set non-significant f4-ratio statistics to 0
        if (indexZ != -1) bAndValLine.push_back(speciesAndVals[indexZ]);
        std::vector<string> aAndValLine;  aAndValLine.push_back(speciesAndVals[0]); aAndValLine.push_back("0");
        if (indexZ != -1) aAndValLine.push_back("0");
        acToBmap[speciesAndVals[0]+","+speciesAndVals[2]].push_back(bAndValLine);
        acToBmap[speciesAndVals[1]+","+speciesAndVals[2]].push_back(aAndValLine);
    }
    string treeString; getline(*treeFile, treeString);
    Tree* testTree = new Tree(treeString);
    testTree->updateProgenyIds();
    testTree->fillSisterBranches();
    for (std::vector<Branch*>::iterator b = testTree->branches.begin(); b != testTree->branches.end(); b++) {
        if ((*b)->parentId != "treeOrigin") {
            std::vector<string> Bs = (*b)->progenyIds;
            std::vector<string> As = (*b)->sisterBranch->progenyIds;
            //if((*b)->id == "b5") { print_vector(Bs, std::cout); }
            std::vector<double> Bmins; std::vector<double> vals;
            std::vector<double> ZBmins; std::vector<double> Zvals;
            for (std::vector<string>::iterator C = testTree->allSpecies.begin(); C != testTree->allSpecies.end(); C++) {
                for (std::vector<string>::iterator A = As.begin(); A != As.end(); A++) {
                    std::vector<std::vector<string>> bAndVal; std::vector<std::vector<string>> aAndVal;
                    try { bAndVal = acToBmap.at(*A+","+*C); } catch (const std::out_of_range& oor) {}
                    for (int i = 0; i < bAndVal.size(); i++) {
                        if (std::count(Bs.begin(), Bs.end(), bAndVal[i][0])) {
                            vals.push_back(stringToDouble(bAndVal[i][1]));
                            if (indexZ != -1) {
                                Zvals.push_back(stringToDouble(bAndVal[i][2]));
                               // std::cerr << "bAndVal[i]: "; print_vector(bAndVal[i],std::cerr);
                            }
                        }
                        //if((*b)->id == "b5") { std::cout << *A << "\t" << bAndVal[i][0] << "\t" << bAndVal[i][1] << "\tbAndVal.size():\t" << bAndVal.size() << "\ti:\t" << i << std::endl;
                            //
                        //}
                    }
                    if (!vals.empty()) { Bmins.push_back(*std::min_element(vals.begin(),vals.end())); vals.clear(); }
                    if (!Zvals.empty()) { ZBmins.push_back(*std::min_element(Zvals.begin(),Zvals.end())); Zvals.clear(); }
                    //
                }
                double fbC = NAN; double ZfbC = NAN;
                if (!Bmins.empty()) { fbC = median(Bmins.begin(),Bmins.end()); Bmins.clear(); }
                if (!ZBmins.empty()) { ZfbC = median(ZBmins.begin(),ZBmins.end()); ZBmins.clear(); }
                /* else { // There is no positive value; just find if any value is possible for this ABC combination
                    bool ACpossible = false;
                    for (std::vector<string>::iterator B = Bs.begin(); B != Bs.end(); B++) {
                        std::vector<std::vector<string>> bAndVal; std::vector<std::vector<string>> aAndVal;
                        try { bAndVal = acToBmap.at(*B+","+*C); } catch (const std::out_of_range& oor) {}
                        for (int i = 0; i < bAndVal.size(); i++) {
                            if (std::count(As.begin(), As.end(), bAndVal[i][0])) {
                                ACpossible = true; break;
                            }
                        }
                    }
                    if (ACpossible) fbC = 0;
                } */
                (*b)->fbCvals.push_back(fbC);
                (*b)->ZfbCvals.push_back(ZfbC);
                (*b)->PfbCvals.push_back(2 * (1 - normalCDF(ZfbC)));
               // std::cerr << "Here: (*b)->progenyIds: "; print_vector((*b)->progenyIds,std::cerr);
               // std::cerr << "Here: (*b)->ZfbCvals.size() " << (*b)->ZfbCvals.size() << std::endl;
               // std::cerr << "Here: (*b)->ZfbCvals: "; print_vector((*b)->ZfbCvals,std::cerr);
            }
        }
    }
    
    // Generate output
    std::cout << "branch\tbranch_descendants\t"; print_vector(testTree->allSpecies, std::cout);
    for (std::vector<Branch*>::iterator b = testTree->branches.begin(); b != testTree->branches.end(); b++) {
        if ((*b)->parentId != "treeOrigin") {
            std::cout << (*b)->id << "\t"; print_vector((*b)->progenyIds, std::cout, ',', false);
            std::cout << "\t"; print_vector((*b)->fbCvals, std::cout);
            //std::cout << "Sister branch:\t" <<  (*b)->sisterBranch->id << std::endl;
            //std::cout << "This branch progeny:\t"; print_vector((*b)->progenyIds, std::cout);
            //std::cout << "Sister branch progeny:\t"; print_vector((*b)->sisterBranch->progenyIds, std::cout);
            //std::cout << "fbCs:\t"; print_vector((*b)->fbCvals, std::cout);
            //std::cout << std::endl;
        }
    }
    if (indexZ != -1 && opt::printZb) {
        std::cout << "\n";
        std::cout << "# Z-scores:\n";
        std::cout << "branch\tbranch_descendants\t"; print_vector(testTree->allSpecies, std::cout);
        for (std::vector<Branch*>::iterator b = testTree->branches.begin(); b != testTree->branches.end(); b++) {
            if ((*b)->parentId != "treeOrigin") {
                std::cout << (*b)->id << "\t"; print_vector((*b)->progenyIds, std::cout, ',', false);
                std::cout << "\t"; print_vector((*b)->ZfbCvals, std::cout);
            }
        }
    }
    if (indexZ != -1 && opt::printPb) {
        std::cout << "\n";
        std::cout << "# p-values:\n";
        std::cout << "branch\tbranch_descendants\t"; print_vector(testTree->allSpecies, std::cout);
        for (std::vector<Branch*>::iterator b = testTree->branches.begin(); b != testTree->branches.end(); b++) {
            if ((*b)->parentId != "treeOrigin") {
                std::cout << (*b)->id << "\t"; print_vector((*b)->progenyIds, std::cout, ',', false);
                std::cout << "\t"; print_vector((*b)->PfbCvals, std::cout);
            }
        }
    }
    return 0;
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x820, %rsp            # imm = 0x820
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movl -0x4(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x47080
movl $0x208, %edi            # imm = 0x208
callq 0x85a0
movq %rax, -0x638(%rbp)
movq %rax, -0x640(%rbp)
leaq 0x7abfb(%rip), %rdi     # 0xbfec8
callq 0x8230
movq -0x638(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0x8ad0
jmp 0x452e8
movq -0x640(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
callq 0x89e0
testb $0x1, %al
jne 0x45373
movq 0x79ce2(%rip), %rdi     # 0xbeff0
leaq 0x43924(%rip), %rsi     # 0x88c39
callq 0x8590
movq %rax, %rdi
leaq 0x7aba4(%rip), %rsi     # 0xbfec8
callq 0x8520
movq %rax, %rdi
leaq 0x4355d(%rip), %rsi     # 0x88890
callq 0x8590
movq %rax, %rdi
movq 0x79c1e(%rip), %rsi     # 0xbef60
callq 0x85f0
movl $0x1, %edi
callq 0x86e0
movq -0x640(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0x85b0
jmp 0x47070
movl $0x208, %edi            # imm = 0x208
callq 0x85a0
movq %rax, -0x648(%rbp)
movq %rax, -0x650(%rbp)
leaq 0x7ab56(%rip), %rdi     # 0xbfee8
callq 0x8230
movq -0x648(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0x8ad0
jmp 0x453ad
movq -0x650(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
callq 0x89e0
testb $0x1, %al
jne 0x45438
movq 0x79c1d(%rip), %rdi     # 0xbeff0
leaq 0x4385f(%rip), %rsi     # 0x88c39
callq 0x8590
movq %rax, %rdi
leaq 0x7aaff(%rip), %rsi     # 0xbfee8
callq 0x8520
movq %rax, %rdi
leaq 0x43498(%rip), %rsi     # 0x88890
callq 0x8590
movq %rax, %rdi
movq 0x79b59(%rip), %rsi     # 0xbef60
callq 0x85f0
movl $0x1, %edi
callq 0x86e0
movq -0x650(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0x85b0
jmp 0x47070
leaq 0x7aaa9(%rip), %rdi     # 0xbfee8
movq %rdi, -0x668(%rbp)
callq 0x8400
movq -0x668(%rbp), %rsi
movq %rax, %rdx
addq $-0x9, %rdx
leaq -0x50(%rbp), %rdi
movq %rdi, -0x660(%rbp)
movq $-0x1, %rcx
callq 0x85d0
movq -0x660(%rbp), %rdi
leaq 0x45542(%rip), %rsi     # 0x8a9c0
callq 0x22410
movb %al, -0x651(%rbp)
jmp 0x4548b
leaq -0x50(%rbp), %rdi
callq 0x8c08
movb -0x651(%rbp), %al
testb $0x1, %al
jne 0x454a0
jmp 0x454e6
movq 0x79b49(%rip), %rdi     # 0xbeff0
leaq 0x45d62(%rip), %rsi     # 0x8b210
callq 0x8590
movq %rax, %rdi
movq 0x79aa3(%rip), %rsi     # 0xbef60
callq 0x85f0
movl $0x1, %edi
callq 0x86e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x8c08
jmp 0x47070
leaq -0x80(%rbp), %rdi
callq 0x47980
leaq -0xa0(%rbp), %rdi
movq %rdi, -0x670(%rbp)
callq 0x87d0
movq -0x670(%rbp), %rsi
movl $0x0, -0xa4(%rbp)
movq -0x30(%rbp), %rdi
callq 0x80d0
jmp 0x4551e
leaq -0xc0(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
movl $0x9, %edx
callq 0xaef0
jmp 0x45538
movl $0xffffffff, -0xc4(%rbp) # imm = 0xFFFFFFFF
movl $0xffffffff, -0xc8(%rbp) # imm = 0xFFFFFFFF
leaq -0xc0(%rbp), %rdi
movl $0x4, %esi
callq 0x10b10
movq %rax, %rdi
leaq 0x45d67(%rip), %rsi     # 0x8b2ce
callq 0x9ab0
movb %al, -0x671(%rbp)
jmp 0x45574
movb -0x671(%rbp), %al
testb $0x1, %al
jne 0x45580
jmp 0x455ae
movl $0x4, -0xc8(%rbp)
jmp 0x455ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x4705b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x4704f
leaq -0xc0(%rbp), %rdi
movl $0x5, %esi
callq 0x10b10
movq %rax, %rdi
leaq 0x44396(%rip), %rsi     # 0x8995f
callq 0x9ab0
movb %al, -0x672(%rbp)
jmp 0x455d6
movb -0x672(%rbp), %al
testb $0x1, %al
jne 0x45616
jmp 0x455e2
leaq -0xc0(%rbp), %rdi
movl $0x5, %esi
callq 0x10b10
movq %rax, %rdi
leaq 0x45cd9(%rip), %rsi     # 0x8b2d6
callq 0x9ab0
movb %al, -0x673(%rbp)
jmp 0x4560a
movb -0x673(%rbp), %al
testb $0x1, %al
jne 0x45616
jmp 0x45622
movl $0x5, -0xc4(%rbp)
jmp 0x45696
leaq -0xc0(%rbp), %rdi
movl $0x6, %esi
callq 0x10b10
movq %rax, %rdi
leaq 0x44322(%rip), %rsi     # 0x8995f
callq 0x9ab0
movb %al, -0x674(%rbp)
jmp 0x4564a
movb -0x674(%rbp), %al
testb $0x1, %al
jne 0x4568a
jmp 0x45656
leaq -0xc0(%rbp), %rdi
movl $0x6, %esi
callq 0x10b10
movq %rax, %rdi
leaq 0x45c65(%rip), %rsi     # 0x8b2d6
callq 0x9ab0
movb %al, -0x675(%rbp)
jmp 0x4567e
movb -0x675(%rbp), %al
testb $0x1, %al
jne 0x4568a
jmp 0x45694
movl $0x6, -0xc4(%rbp)
jmp 0x45696
jmp 0x45698
movq -0x30(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x80d0
movq %rax, -0x680(%rbp)
jmp 0x456b1
movq -0x680(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x8710
movb %al, -0x681(%rbp)
jmp 0x456cf
movb -0x681(%rbp), %al
testb $0x1, %al
jne 0x456de
jmp 0x45f3b
leaq -0xa0(%rbp), %rdi
movq %rdi, -0x698(%rbp)
callq 0x84f0
movq -0x698(%rbp), %rdi
movq %rax, -0xe0(%rbp)
callq 0x8330
movq %rax, -0xe8(%rbp)
movb $0xd, -0xe9(%rbp)
movq -0xe0(%rbp), %rdi
movq -0xe8(%rbp), %rsi
leaq -0xe9(%rbp), %rdx
callq 0x20210
movq %rax, -0x690(%rbp)
jmp 0x45735
movq -0x690(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x20260
leaq -0xa0(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0x8330
movq %rax, -0x100(%rbp)
leaq -0xf8(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x20260
movq -0x6a8(%rbp), %rdi
movq -0xd0(%rbp), %rsi
movq -0xf8(%rbp), %rdx
callq 0x80f0
movq %rax, -0x6a0(%rbp)
jmp 0x457a6
movq -0x6a0(%rbp), %rax
movq %rax, -0x108(%rbp)
movl -0xa4(%rbp), %eax
incl %eax
movl %eax, -0xa4(%rbp)
leaq 0x45ba0(%rip), %rsi     # 0x8b369
leaq -0xa0(%rbp), %rdi
callq 0x9ab0
movb %al, -0x6a9(%rbp)
jmp 0x457dd
movb -0x6a9(%rbp), %al
testb $0x1, %al
jne 0x457ec
jmp 0x45896
movq 0x797fd(%rip), %rdi     # 0xbeff0
leaq 0x432b8(%rip), %rsi     # 0x88ab2
callq 0x8590
movq %rax, -0x6b8(%rbp)
jmp 0x45808
movq -0x6b8(%rbp), %rdi
leaq 0x7a6d2(%rip), %rsi     # 0xbfee8
callq 0x8520
movq %rax, -0x6c0(%rbp)
jmp 0x45824
movq -0x6c0(%rbp), %rdi
leaq 0x45aa8(%rip), %rsi     # 0x8b2da
callq 0x8590
movq %rax, -0x6c8(%rbp)
jmp 0x45840
movq -0x6c8(%rbp), %rdi
movl -0xa4(%rbp), %esi
callq 0x8a10
movq %rax, -0x6d0(%rbp)
jmp 0x4585b
movq -0x6d0(%rbp), %rdi
leaq 0x45a7e(%rip), %rsi     # 0x8b2e7
callq 0x8590
movq %rax, -0x6d8(%rbp)
jmp 0x45877
movq -0x6d8(%rbp), %rdi
movq 0x796db(%rip), %rsi     # 0xbef60
callq 0x85f0
jmp 0x4588c
movl $0x1, %edi
callq 0x86e0
leaq -0x120(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
movl $0x9, %edx
callq 0xaef0
jmp 0x458b0
leaq -0x120(%rbp), %rdi
callq 0x10740
cmpq $0x6, %rax
jb 0x458cf
cmpl $-0x1, -0xc4(%rbp)
jne 0x45984
movq 0x7971a(%rip), %rdi     # 0xbeff0
leaq 0x431d5(%rip), %rsi     # 0x88ab2
callq 0x8590
movq %rax, -0x6e0(%rbp)
jmp 0x458eb
movq -0x6e0(%rbp), %rdi
leaq 0x7a5ef(%rip), %rsi     # 0xbfee8
callq 0x8520
movq %rax, -0x6e8(%rbp)
jmp 0x45907
movq -0x6e8(%rbp), %rdi
leaq 0x47ba9(%rip), %rsi     # 0x8d4be
callq 0x8590
movq %rax, -0x6f0(%rbp)
jmp 0x45923
movq -0x6f0(%rbp), %rdi
movq 0x7962f(%rip), %rsi     # 0xbef60
callq 0x85f0
jmp 0x45938
movq 0x796b1(%rip), %rdi     # 0xbeff0
leaq 0x459b7(%rip), %rsi     # 0x8b2fd
callq 0x8590
movq %rax, -0x6f8(%rbp)
jmp 0x45954
movq -0x6f8(%rbp), %rdi
movq 0x795fe(%rip), %rsi     # 0xbef60
callq 0x85f0
jmp 0x45969
movl $0x1, %edi
callq 0x86e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x45f2a
movslq -0xc4(%rbp), %rsi
leaq -0x120(%rbp), %rdi
callq 0x10b10
movq %rax, %rsi
leaq -0x148(%rbp), %rdi
callq 0x8250
jmp 0x459a8
leaq -0x148(%rbp), %rdi
callq 0xf4f0
movsd %xmm0, -0x700(%rbp)
jmp 0x459be
leaq -0x148(%rbp), %rdi
callq 0x8c08
movsd -0x700(%rbp), %xmm0
movsd %xmm0, -0x128(%rbp)
movslq -0xc8(%rbp), %rsi
leaq -0x120(%rbp), %rdi
callq 0x10b10
movq %rax, %rsi
leaq -0x170(%rbp), %rdi
callq 0x8250
jmp 0x459fe
leaq -0x170(%rbp), %rdi
callq 0xf4f0
movsd %xmm0, -0x708(%rbp)
jmp 0x45a14
leaq -0x170(%rbp), %rdi
callq 0x8c08
movsd -0x708(%rbp), %xmm0
movsd %xmm0, -0x150(%rbp)
movsd -0x150(%rbp), %xmm0
callq 0x9d80
fstpt -0x714(%rbp)
jmp 0x45a45
fldt -0x714(%rbp)
fld1
fsubp %st, %st(1)
fadd %st, %st(0)
fstpl -0x178(%rbp)
leaq -0x190(%rbp), %rdi
movq %rdi, -0x720(%rbp)
callq 0x11d80
leaq -0x120(%rbp), %rdi
movl $0x1, %esi
callq 0x10b10
movq -0x720(%rbp), %rdi
movq %rax, %rsi
callq 0x11d10
jmp 0x45a8c
movsd -0x178(%rbp), %xmm1
movsd 0x79c0c(%rip), %xmm0    # 0xbf6a8
ucomisd %xmm1, %xmm0
jbe 0x45b16
movslq -0xc4(%rbp), %rsi
leaq -0x120(%rbp), %rdi
callq 0x10b10
movq %rax, %rsi
leaq -0x190(%rbp), %rdi
callq 0x11d10
jmp 0x45ac6
jmp 0x45bab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x148(%rbp), %rdi
callq 0x8c08
jmp 0x45f2a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x170(%rbp), %rdi
callq 0x8c08
jmp 0x45f2a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x45f1e
leaq -0x1b1(%rbp), %rdi
movq %rdi, -0x728(%rbp)
callq 0x8a60
movq -0x728(%rbp), %rdx
leaq 0x439f3(%rip), %rsi     # 0x8952a
leaq -0x1b0(%rbp), %rdi
callq 0x9a00
jmp 0x45b45
leaq -0x190(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x446f0
jmp 0x45b5a
leaq -0x1b0(%rbp), %rdi
callq 0x8c08
leaq -0x1b1(%rbp), %rdi
callq 0x8610
jmp 0x45bab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x45b9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x8c08
leaq -0x1b1(%rbp), %rdi
callq 0x8610
jmp 0x45f1e
cmpl $-0x1, -0xc8(%rbp)
je 0x45bda
movslq -0xc8(%rbp), %rsi
leaq -0x120(%rbp), %rdi
callq 0x10b10
movq %rax, %rsi
leaq -0x190(%rbp), %rdi
callq 0x11d10
jmp 0x45bd8
jmp 0x45bda
leaq -0x1d0(%rbp), %rdi
movq %rdi, -0x730(%rbp)
callq 0x11d80
xorl %eax, %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x10b10
movq -0x730(%rbp), %rdi
movq %rax, %rsi
callq 0x11d10
jmp 0x45c0e
leaq -0x1f1(%rbp), %rdi
movq %rdi, -0x738(%rbp)
callq 0x8a60
movq -0x738(%rbp), %rdx
leaq 0x438fb(%rip), %rsi     # 0x8952a
leaq -0x1f0(%rbp), %rdi
callq 0x9a00
jmp 0x45c3d
leaq -0x1d0(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x446f0
jmp 0x45c52
leaq -0x1f0(%rbp), %rdi
callq 0x8c08
leaq -0x1f1(%rbp), %rdi
callq 0x8610
cmpl $-0x1, -0xc8(%rbp)
je 0x45d54
leaq -0x219(%rbp), %rdi
movq %rdi, -0x740(%rbp)
callq 0x8a60
movq -0x740(%rbp), %rdx
leaq 0x43892(%rip), %rsi     # 0x8952a
leaq -0x218(%rbp), %rdi
callq 0x9a00
jmp 0x45ca6
leaq -0x1d0(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x446f0
jmp 0x45cbb
leaq -0x218(%rbp), %rdi
callq 0x8c08
leaq -0x219(%rbp), %rdi
callq 0x8610
jmp 0x45d54
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x45f12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x45d0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x8c08
leaq -0x1f1(%rbp), %rdi
callq 0x8610
jmp 0x45f12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x45d43
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x8c08
leaq -0x219(%rbp), %rdi
callq 0x8610
jmp 0x45f12
xorl %eax, %eax
movl %eax, %esi
leaq -0x120(%rbp), %rdi
callq 0x10b10
movq %rax, %rsi
leaq 0x455d4(%rip), %rdx     # 0x8b342
leaq -0x260(%rbp), %rdi
callq 0x20470
jmp 0x45d7c
leaq -0x120(%rbp), %rdi
movl $0x2, %esi
callq 0x10b10
movq %rax, %rdx
leaq -0x240(%rbp), %rdi
leaq -0x260(%rbp), %rsi
callq 0x20420
jmp 0x45da5
leaq -0x80(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x479a0
movq %rax, -0x748(%rbp)
jmp 0x45dbe
movq -0x748(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x20660
jmp 0x45dd3
leaq -0x240(%rbp), %rdi
callq 0x8c08
leaq -0x260(%rbp), %rdi
callq 0x8c08
leaq -0x120(%rbp), %rdi
movl $0x1, %esi
callq 0x10b10
movq %rax, %rsi
leaq 0x4553c(%rip), %rdx     # 0x8b342
leaq -0x2a0(%rbp), %rdi
callq 0x20470
jmp 0x45e14
leaq -0x120(%rbp), %rdi
movl $0x2, %esi
callq 0x10b10
movq %rax, %rdx
leaq -0x280(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0x20420
jmp 0x45e3d
leaq -0x80(%rbp), %rdi
leaq -0x280(%rbp), %rsi
callq 0x479a0
movq %rax, -0x750(%rbp)
jmp 0x45e56
movq -0x750(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x20660
jmp 0x45e6b
leaq -0x280(%rbp), %rdi
callq 0x8c08
leaq -0x2a0(%rbp), %rdi
callq 0x8c08
leaq -0x1d0(%rbp), %rdi
callq 0x10760
leaq -0x190(%rbp), %rdi
callq 0x10760
leaq -0x120(%rbp), %rdi
callq 0x10760
jmp 0x45698
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x45ed2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x8c08
leaq -0x260(%rbp), %rdi
callq 0x8c08
jmp 0x45f12
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x45f06
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x280(%rbp), %rdi
callq 0x8c08
leaq -0x2a0(%rbp), %rdi
callq 0x8c08
leaq -0x1d0(%rbp), %rdi
callq 0x10760
leaq -0x190(%rbp), %rdi
callq 0x10760
leaq -0x120(%rbp), %rdi
callq 0x10760
jmp 0x4704f
leaq -0x2c0(%rbp), %rdi
movq %rdi, -0x758(%rbp)
callq 0x87d0
movq -0x758(%rbp), %rsi
movq -0x18(%rbp), %rdi
callq 0x80d0
jmp 0x45f60
movl $0x30, %edi
callq 0x85a0
movq %rax, -0x760(%rbp)
jmp 0x45f73
movb $0x1, -0x2e9(%rbp)
leaq -0x2e8(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
callq 0x8250
jmp 0x45f8f
movq -0x760(%rbp), %rdi
leaq -0x2e8(%rbp), %rsi
callq 0x47a80
jmp 0x45fa4
movb $0x0, -0x2e9(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0x8c08
movq -0x760(%rbp), %rax
movq %rax, -0x2c8(%rbp)
movq -0x2c8(%rbp), %rdi
callq 0x47390
jmp 0x45fd3
movq -0x2c8(%rbp), %rdi
callq 0x477b0
jmp 0x45fe1
movq -0x2c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x49490
movq %rax, -0x2f8(%rbp)
movq -0x2c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x49500
movq %rax, -0x300(%rbp)
leaq -0x2f8(%rbp), %rdi
leaq -0x300(%rbp), %rsi
callq 0x494c0
testb $0x1, %al
jne 0x4602b
jmp 0x468f5
leaq -0x2f8(%rbp), %rdi
callq 0x49530
movq (%rax), %rdi
addq $0x20, %rdi
leaq 0x452ff(%rip), %rsi     # 0x8b344
callq 0x22410
movb %al, -0x761(%rbp)
jmp 0x46052
movb -0x761(%rbp), %al
testb $0x1, %al
jne 0x46061
jmp 0x468d9
leaq -0x2f8(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
subq $-0x80, %rsi
leaq -0x318(%rbp), %rdi
callq 0x11fc0
jmp 0x46082
leaq -0x2f8(%rbp), %rdi
callq 0x49530
movq (%rax), %rax
movq 0xc0(%rax), %rsi
subq $-0x80, %rsi
leaq -0x330(%rbp), %rdi
callq 0x11fc0
jmp 0x460aa
leaq -0x348(%rbp), %rdi
callq 0x10800
leaq -0x360(%rbp), %rdi
callq 0x10800
leaq -0x378(%rbp), %rdi
callq 0x10800
leaq -0x390(%rbp), %rdi
callq 0x10800
movq -0x2c8(%rbp), %rdi
callq 0x10640
movq %rax, -0x398(%rbp)
movq -0x2c8(%rbp), %rdi
callq 0x10670
movq %rax, -0x3a0(%rbp)
leaq -0x398(%rbp), %rdi
leaq -0x3a0(%rbp), %rsi
callq 0x2da80
testb $0x1, %al
jne 0x4611c
jmp 0x46842
leaq -0x330(%rbp), %rdi
callq 0x10640
movq %rax, -0x3a8(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x10670
movq %rax, -0x3b0(%rbp)
leaq -0x3a8(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0x2da80
testb $0x1, %al
jne 0x4615e
jmp 0x46667
leaq -0x3c8(%rbp), %rdi
callq 0x201f0
leaq -0x3e0(%rbp), %rdi
callq 0x201f0
leaq -0x3a8(%rbp), %rdi
callq 0x18e60
movq %rax, %rsi
leaq 0x451b6(%rip), %rdx     # 0x8b342
leaq -0x420(%rbp), %rdi
callq 0x20470
jmp 0x4619a
leaq -0x398(%rbp), %rdi
callq 0x18e60
movq %rax, %rdx
leaq -0x400(%rbp), %rdi
leaq -0x420(%rbp), %rsi
callq 0x20420
jmp 0x461be
leaq -0x80(%rbp), %rdi
leaq -0x400(%rbp), %rsi
callq 0x49550
movq %rax, -0x770(%rbp)
jmp 0x461d7
movq -0x770(%rbp), %rsi
leaq -0x3c8(%rbp), %rdi
callq 0x495f0
jmp 0x461ec
leaq -0x400(%rbp), %rdi
callq 0x8c08
leaq -0x420(%rbp), %rdi
callq 0x8c08
jmp 0x462db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x47043
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x46240
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0x8c08
testb $0x1, -0x2e9(%rbp)
jne 0x4624b
jmp 0x4625c
movq -0x760(%rbp), %rdi
movl $0x30, %esi
callq 0x85b0
jmp 0x47043
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x468c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x462b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x462a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x400(%rbp), %rdi
callq 0x8c08
leaq -0x420(%rbp), %rdi
callq 0x8c08
movl -0x24(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x4664a
movq -0x20(%rbp), %rdi
callq 0x8220
movq %rax, -0x428(%rbp)
callq 0x8950
jmp 0x462d9
jmp 0x462db
movl $0x0, -0x42c(%rbp)
movslq -0x42c(%rbp), %rax
movq %rax, -0x778(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x209b0
movq %rax, %rcx
movq -0x778(%rbp), %rax
cmpq %rcx, %rax
jae 0x464f0
leaq -0x318(%rbp), %rdi
movq %rdi, -0x788(%rbp)
callq 0x10640
movq -0x788(%rbp), %rdi
movq %rax, -0x438(%rbp)
callq 0x10670
movq %rax, -0x440(%rbp)
movslq -0x42c(%rbp), %rsi
leaq -0x3c8(%rbp), %rdi
callq 0x21650
movq %rax, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x10b10
movq %rax, %rdx
movq -0x438(%rbp), %rdi
movq -0x440(%rbp), %rsi
callq 0x49840
movq %rax, -0x780(%rbp)
jmp 0x4637d
movq -0x780(%rbp), %rax
cmpq $0x0, %rax
je 0x464da
movslq -0x42c(%rbp), %rsi
leaq -0x3c8(%rbp), %rdi
callq 0x21650
movq %rax, %rdi
movl $0x1, %esi
callq 0x10b10
movq %rax, %rsi
leaq -0x468(%rbp), %rdi
callq 0x8250
jmp 0x463bf
leaq -0x468(%rbp), %rdi
callq 0xf4f0
movsd %xmm0, -0x790(%rbp)
jmp 0x463d5
movsd -0x790(%rbp), %xmm0
movsd %xmm0, -0x448(%rbp)
leaq -0x360(%rbp), %rdi
leaq -0x448(%rbp), %rsi
callq 0x117b0
jmp 0x463fa
leaq -0x468(%rbp), %rdi
callq 0x8c08
cmpl $-0x1, -0xc8(%rbp)
je 0x464d8
movslq -0x42c(%rbp), %rsi
leaq -0x3c8(%rbp), %rdi
callq 0x21650
movq %rax, %rdi
movl $0x2, %esi
callq 0x10b10
movq %rax, %rsi
leaq -0x490(%rbp), %rdi
callq 0x8250
jmp 0x46444
leaq -0x490(%rbp), %rdi
callq 0xf4f0
movsd %xmm0, -0x798(%rbp)
jmp 0x4645a
movsd -0x798(%rbp), %xmm0
movsd %xmm0, -0x470(%rbp)
leaq -0x390(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0x117b0
jmp 0x4647f
leaq -0x490(%rbp), %rdi
callq 0x8c08
jmp 0x464d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x4664a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x468(%rbp), %rdi
callq 0x8c08
jmp 0x4664a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x490(%rbp), %rdi
callq 0x8c08
jmp 0x4664a
jmp 0x464da
jmp 0x464dc
movl -0x42c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x42c(%rbp)
jmp 0x462e5
leaq -0x360(%rbp), %rdi
callq 0x49890
testb $0x1, %al
jne 0x46584
leaq -0x360(%rbp), %rdi
movq %rdi, -0x7a8(%rbp)
callq 0x16260
movq -0x7a8(%rbp), %rdi
movq %rax, -0x4a0(%rbp)
callq 0x16290
movq %rax, -0x4a8(%rbp)
movq -0x4a0(%rbp), %rdi
movq -0x4a8(%rbp), %rsi
callq 0x498d0
movq %rax, -0x7a0(%rbp)
jmp 0x4654d
movq -0x7a0(%rbp), %rax
movq %rax, -0x498(%rbp)
leaq -0x498(%rbp), %rdi
callq 0x18a90
movq %rax, %rsi
leaq -0x348(%rbp), %rdi
callq 0x10f70
jmp 0x46578
leaq -0x360(%rbp), %rdi
callq 0x3d4e0
leaq -0x390(%rbp), %rdi
callq 0x49890
testb $0x1, %al
jne 0x46618
leaq -0x390(%rbp), %rdi
movq %rdi, -0x7b8(%rbp)
callq 0x16260
movq -0x7b8(%rbp), %rdi
movq %rax, -0x4b8(%rbp)
callq 0x16290
movq %rax, -0x4c0(%rbp)
movq -0x4b8(%rbp), %rdi
movq -0x4c0(%rbp), %rsi
callq 0x498d0
movq %rax, -0x7b0(%rbp)
jmp 0x465e1
movq -0x7b0(%rbp), %rax
movq %rax, -0x4b0(%rbp)
leaq -0x4b0(%rbp), %rdi
callq 0x18a90
movq %rax, %rsi
leaq -0x378(%rbp), %rdi
callq 0x10f70
jmp 0x4660c
leaq -0x390(%rbp), %rdi
callq 0x3d4e0
leaq -0x3e0(%rbp), %rdi
callq 0x21b90
leaq -0x3c8(%rbp), %rdi
callq 0x21b90
leaq -0x3a8(%rbp), %rdi
xorl %esi, %esi
callq 0x49910
movq %rax, -0x4c8(%rbp)
jmp 0x4612f
leaq -0x3e0(%rbp), %rdi
callq 0x21b90
leaq -0x3c8(%rbp), %rdi
callq 0x21b90
jmp 0x4688c
movsd 0x44961(%rip), %xmm0    # 0x8afd0
movsd %xmm0, -0x4d0(%rbp)
movsd 0x44951(%rip), %xmm0    # 0x8afd0
movsd %xmm0, -0x4d8(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x49890
testb $0x1, %al
jne 0x46710
leaq -0x348(%rbp), %rdi
movq %rdi, -0x7c8(%rbp)
callq 0x16260
movq -0x7c8(%rbp), %rdi
movq %rax, -0x4e0(%rbp)
callq 0x16290
movq %rax, -0x4e8(%rbp)
movq -0x4e0(%rbp), %rdi
movq -0x4e8(%rbp), %rsi
callq 0x49950
movsd %xmm0, -0x7c0(%rbp)
jmp 0x466e1
movsd -0x7c0(%rbp), %xmm0
movsd %xmm0, -0x4d0(%rbp)
leaq -0x348(%rbp), %rdi
callq 0x3d4e0
jmp 0x46710
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
jmp 0x4688c
leaq -0x378(%rbp), %rdi
callq 0x49890
testb $0x1, %al
jne 0x46786
leaq -0x378(%rbp), %rdi
movq %rdi, -0x7d8(%rbp)
callq 0x16260
movq -0x7d8(%rbp), %rdi
movq %rax, -0x4f0(%rbp)
callq 0x16290
movq %rax, -0x4f8(%rbp)
movq -0x4f0(%rbp), %rdi
movq -0x4f8(%rbp), %rsi
callq 0x49950
movsd %xmm0, -0x7d0(%rbp)
jmp 0x4676a
movsd -0x7d0(%rbp), %xmm0
movsd %xmm0, -0x4d8(%rbp)
leaq -0x378(%rbp), %rdi
callq 0x3d4e0
leaq -0x2f8(%rbp), %rdi
callq 0x49530
movq (%rax), %rdi
addq $0xc8, %rdi
leaq -0x4d0(%rbp), %rsi
callq 0x10f70
jmp 0x467aa
leaq -0x2f8(%rbp), %rdi
callq 0x49530
movq (%rax), %rdi
addq $0xe0, %rdi
leaq -0x4d8(%rbp), %rsi
callq 0x10f70
jmp 0x467ce
leaq -0x2f8(%rbp), %rdi
callq 0x49530
movq (%rax), %rax
addq $0xf8, %rax
movq %rax, -0x7f0(%rbp)
movsd -0x4d8(%rbp), %xmm0
callq 0x9d80
fstpt -0x7e4(%rbp)
jmp 0x467ff
movq -0x7f0(%rbp), %rdi
fldt -0x7e4(%rbp)
fld1
fsubp %st, %st(1)
fadd %st, %st(0)
fstpl -0x500(%rbp)
leaq -0x500(%rbp), %rsi
callq 0x117b0
jmp 0x46826
jmp 0x46828
leaq -0x398(%rbp), %rdi
xorl %esi, %esi
callq 0x49910
movq %rax, -0x508(%rbp)
jmp 0x460ed
leaq -0x390(%rbp), %rdi
callq 0x10930
leaq -0x378(%rbp), %rdi
callq 0x10930
leaq -0x360(%rbp), %rdi
callq 0x10930
leaq -0x348(%rbp), %rdi
callq 0x10930
leaq -0x330(%rbp), %rdi
callq 0x10760
leaq -0x318(%rbp), %rdi
callq 0x10760
jmp 0x468d9
leaq -0x390(%rbp), %rdi
callq 0x10930
leaq -0x378(%rbp), %rdi
callq 0x10930
leaq -0x360(%rbp), %rdi
callq 0x10930
leaq -0x348(%rbp), %rdi
callq 0x10930
leaq -0x330(%rbp), %rdi
callq 0x10760
leaq -0x318(%rbp), %rdi
callq 0x10760
jmp 0x47043
jmp 0x468db
leaq -0x2f8(%rbp), %rdi
xorl %esi, %esi
callq 0x49ac0
movq %rax, -0x510(%rbp)
jmp 0x45ff8
movq 0x786ac(%rip), %rdi     # 0xbefa8
leaq 0x44a4c(%rip), %rsi     # 0x8b34f
callq 0x8590
jmp 0x4690a
movq -0x2c8(%rbp), %rsi
leaq -0x528(%rbp), %rdi
callq 0x11fc0
jmp 0x4691f
movq 0x78682(%rip), %rsi     # 0xbefa8
leaq -0x528(%rbp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x11eb0
jmp 0x4693e
leaq -0x528(%rbp), %rdi
callq 0x10760
movq -0x2c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x49490
movq %rax, -0x530(%rbp)
movq -0x2c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x49500
movq %rax, -0x538(%rbp)
leaq -0x530(%rbp), %rdi
leaq -0x538(%rbp), %rsi
callq 0x494c0
testb $0x1, %al
jne 0x46994
jmp 0x46b25
leaq -0x530(%rbp), %rdi
callq 0x49530
movq (%rax), %rdi
addq $0x20, %rdi
leaq 0x44996(%rip), %rsi     # 0x8b344
callq 0x22410
movb %al, -0x7f1(%rbp)
jmp 0x469bb
movb -0x7f1(%rbp), %al
testb $0x1, %al
jne 0x469ca
jmp 0x46b09
leaq -0x530(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
movq 0x785c8(%rip), %rdi     # 0xbefa8
callq 0x8520
movq %rax, -0x800(%rbp)
jmp 0x469ee
movq -0x800(%rbp), %rdi
leaq 0x4496c(%rip), %rsi     # 0x8b368
callq 0x8590
jmp 0x46a03
leaq -0x530(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
subq $-0x80, %rsi
leaq -0x550(%rbp), %rdi
callq 0x11fc0
jmp 0x46a24
movq 0x7857d(%rip), %rsi     # 0xbefa8
leaq -0x550(%rbp), %rdi
movl $0x2c, %edx
xorl %ecx, %ecx
callq 0x11eb0
jmp 0x46a40
leaq -0x550(%rbp), %rdi
callq 0x10760
movq 0x78555(%rip), %rdi     # 0xbefa8
leaq 0x4490e(%rip), %rsi     # 0x8b368
callq 0x8590
jmp 0x46a61
leaq -0x530(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
addq $0xc8, %rsi
leaq -0x568(%rbp), %rdi
callq 0x110a0
jmp 0x46a85
movq 0x7851c(%rip), %rsi     # 0xbefa8
leaq -0x568(%rbp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x113f0
jmp 0x46aa4
leaq -0x568(%rbp), %rdi
callq 0x10930
jmp 0x46b09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x528(%rbp), %rdi
callq 0x10760
jmp 0x47043
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x550(%rbp), %rdi
callq 0x10760
jmp 0x47043
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x568(%rbp), %rdi
callq 0x10930
jmp 0x47043
jmp 0x46b0b
leaq -0x530(%rbp), %rdi
xorl %esi, %esi
callq 0x49ac0
movq %rax, -0x570(%rbp)
jmp 0x46961
cmpl $-0x1, -0xc8(%rbp)
je 0x46d9b
testb $0x1, 0x793cf(%rip)     # 0xbff08
je 0x46d9b
movq 0x78462(%rip), %rdi     # 0xbefa8
leaq 0x418ed(%rip), %rsi     # 0x8843a
callq 0x8590
jmp 0x46b54
movq 0x7844d(%rip), %rdi     # 0xbefa8
leaq 0x44808(%rip), %rsi     # 0x8b36a
callq 0x8590
jmp 0x46b69
movq 0x78438(%rip), %rdi     # 0xbefa8
leaq 0x447d8(%rip), %rsi     # 0x8b34f
callq 0x8590
jmp 0x46b7e
movq -0x2c8(%rbp), %rsi
leaq -0x588(%rbp), %rdi
callq 0x11fc0
jmp 0x46b93
movq 0x7840e(%rip), %rsi     # 0xbefa8
leaq -0x588(%rbp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x11eb0
jmp 0x46bb2
leaq -0x588(%rbp), %rdi
callq 0x10760
movq -0x2c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x49490
movq %rax, -0x590(%rbp)
movq -0x2c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x49500
movq %rax, -0x598(%rbp)
leaq -0x590(%rbp), %rdi
leaq -0x598(%rbp), %rsi
callq 0x494c0
testb $0x1, %al
jne 0x46c08
jmp 0x46d99
leaq -0x590(%rbp), %rdi
callq 0x49530
movq (%rax), %rdi
addq $0x20, %rdi
leaq 0x44722(%rip), %rsi     # 0x8b344
callq 0x22410
movb %al, -0x801(%rbp)
jmp 0x46c2f
movb -0x801(%rbp), %al
testb $0x1, %al
jne 0x46c3e
jmp 0x46d7d
leaq -0x590(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
movq 0x78354(%rip), %rdi     # 0xbefa8
callq 0x8520
movq %rax, -0x810(%rbp)
jmp 0x46c62
movq -0x810(%rbp), %rdi
leaq 0x446f8(%rip), %rsi     # 0x8b368
callq 0x8590
jmp 0x46c77
leaq -0x590(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
subq $-0x80, %rsi
leaq -0x5b0(%rbp), %rdi
callq 0x11fc0
jmp 0x46c98
movq 0x78309(%rip), %rsi     # 0xbefa8
leaq -0x5b0(%rbp), %rdi
movl $0x2c, %edx
xorl %ecx, %ecx
callq 0x11eb0
jmp 0x46cb4
leaq -0x5b0(%rbp), %rdi
callq 0x10760
movq 0x782e1(%rip), %rdi     # 0xbefa8
leaq 0x4469a(%rip), %rsi     # 0x8b368
callq 0x8590
jmp 0x46cd5
leaq -0x590(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
addq $0xe0, %rsi
leaq -0x5c8(%rbp), %rdi
callq 0x110a0
jmp 0x46cf9
movq 0x782a8(%rip), %rsi     # 0xbefa8
leaq -0x5c8(%rbp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x113f0
jmp 0x46d18
leaq -0x5c8(%rbp), %rdi
callq 0x10930
jmp 0x46d7d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x588(%rbp), %rdi
callq 0x10760
jmp 0x47043
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x5b0(%rbp), %rdi
callq 0x10760
jmp 0x47043
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x5c8(%rbp), %rdi
callq 0x10930
jmp 0x47043
jmp 0x46d7f
leaq -0x590(%rbp), %rdi
xorl %esi, %esi
callq 0x49ac0
movq %rax, -0x5d0(%rbp)
jmp 0x46bd5
jmp 0x46d9b
cmpl $-0x1, -0xc8(%rbp)
je 0x4700b
testb $0x1, 0x7915a(%rip)     # 0xbff09
je 0x4700b
movq 0x781ec(%rip), %rdi     # 0xbefa8
leaq 0x41677(%rip), %rsi     # 0x8843a
callq 0x8590
jmp 0x46dca
movq 0x781d7(%rip), %rdi     # 0xbefa8
leaq 0x4459f(%rip), %rsi     # 0x8b377
callq 0x8590
jmp 0x46ddf
movq 0x781c2(%rip), %rdi     # 0xbefa8
leaq 0x44562(%rip), %rsi     # 0x8b34f
callq 0x8590
jmp 0x46df4
movq -0x2c8(%rbp), %rsi
leaq -0x5e8(%rbp), %rdi
callq 0x11fc0
jmp 0x46e09
movq 0x78198(%rip), %rsi     # 0xbefa8
leaq -0x5e8(%rbp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x11eb0
jmp 0x46e28
leaq -0x5e8(%rbp), %rdi
callq 0x10760
movq -0x2c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x49490
movq %rax, -0x5f0(%rbp)
movq -0x2c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x49500
movq %rax, -0x5f8(%rbp)
leaq -0x5f0(%rbp), %rdi
leaq -0x5f8(%rbp), %rsi
callq 0x494c0
testb $0x1, %al
jne 0x46e7e
jmp 0x47009
leaq -0x5f0(%rbp), %rdi
callq 0x49530
movq (%rax), %rdi
addq $0x20, %rdi
leaq 0x444ac(%rip), %rsi     # 0x8b344
callq 0x22410
movb %al, -0x811(%rbp)
jmp 0x46ea5
movb -0x811(%rbp), %al
testb $0x1, %al
jne 0x46eb4
jmp 0x46fed
leaq -0x5f0(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
movq 0x780de(%rip), %rdi     # 0xbefa8
callq 0x8520
movq %rax, -0x820(%rbp)
jmp 0x46ed8
movq -0x820(%rbp), %rdi
leaq 0x44482(%rip), %rsi     # 0x8b368
callq 0x8590
jmp 0x46eed
leaq -0x5f0(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
subq $-0x80, %rsi
leaq -0x610(%rbp), %rdi
callq 0x11fc0
jmp 0x46f0e
movq 0x78093(%rip), %rsi     # 0xbefa8
leaq -0x610(%rbp), %rdi
movl $0x2c, %edx
xorl %ecx, %ecx
callq 0x11eb0
jmp 0x46f2a
leaq -0x610(%rbp), %rdi
callq 0x10760
movq 0x7806b(%rip), %rdi     # 0xbefa8
leaq 0x44424(%rip), %rsi     # 0x8b368
callq 0x8590
jmp 0x46f4b
leaq -0x5f0(%rbp), %rdi
callq 0x49530
movq (%rax), %rsi
addq $0xf8, %rsi
leaq -0x628(%rbp), %rdi
callq 0x110a0
jmp 0x46f6f
movq 0x78032(%rip), %rsi     # 0xbefa8
leaq -0x628(%rbp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x113f0
jmp 0x46f8e
leaq -0x628(%rbp), %rdi
callq 0x10930
jmp 0x46fed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x5e8(%rbp), %rdi
callq 0x10760
jmp 0x47043
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x610(%rbp), %rdi
callq 0x10760
jmp 0x47043
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
leaq -0x628(%rbp), %rdi
callq 0x10930
jmp 0x47043
jmp 0x46fef
leaq -0x5f0(%rbp), %rdi
xorl %esi, %esi
callq 0x49ac0
movq %rax, -0x630(%rbp)
jmp 0x46e4b
jmp 0x4700b
leaq -0x2c0(%rbp), %rdi
callq 0x8c08
leaq -0xc0(%rbp), %rdi
callq 0x10760
leaq -0xa0(%rbp), %rdi
callq 0x8c08
leaq -0x80(%rbp), %rdi
callq 0x49b00
xorl %eax, %eax
addq $0x820, %rsp            # imm = 0x820
popq %rbp
retq
leaq -0x2c0(%rbp), %rdi
callq 0x8c08
leaq -0xc0(%rbp), %rdi
callq 0x10760
leaq -0xa0(%rbp), %rdi
callq 0x8c08
leaq -0x80(%rbp), %rdi
callq 0x49b00
movq -0x20(%rbp), %rdi
callq 0x8a50
nopl (%rax)