// File: /workspace/github_cpp_makefile_star2_O3/millanek[P]Dsuite/Dmin_combine.cpp
// Function: DminCombineMain(int, char**)
int DminCombineMain(int argc, char** argv) {
    parseDminCombineOptions(argc, argv);
    const bool KStestPossible = false;
    
    string line; // for reading the input files
    
    
    string outFileRoot = prepareOutFileRootString(opt::providedOutPrefix, opt::runName, "", -1, -1);
    
    std::vector<std::istream*> dminstdErrFiles; std::vector<std::istream*> dminBBAAscoreFiles;
    for (int i = 0; i < opt::dminFiles.size(); i++) {
        std::istream* dminBBAAscoreFile;
        if (file_exists(opt::dminFiles[i] + "_combine.txt")) {
            dminBBAAscoreFile = createReader((opt::dminFiles[i] + "_combine.txt").c_str());
        } else if(file_exists(opt::dminFiles[i] + "_combine.txt.gz")) {
            dminBBAAscoreFile = createReader((opt::dminFiles[i] + "_combine.txt.gz").c_str());
        } else {
            std::cerr << "Can't find the file: " << opt::dminFiles[i] + "_combine.txt" << " or " << opt::dminFiles[i] + "_combine.txt.gz. Exiting..." << std::endl;
            exit(EXIT_FAILURE);
        }
        dminBBAAscoreFiles.push_back(dminBBAAscoreFile);
        std::istream* dminstdErrFile;
        if (file_exists(opt::dminFiles[i] + "_combine_stderr.txt")) {
            dminstdErrFile = createReader((opt::dminFiles[i] + "_combine_stderr.txt").c_str());
        } else if(file_exists(opt::dminFiles[i] + "_combine_stderr.txt.gz")) {
            dminstdErrFile = createReader((opt::dminFiles[i] + "_combine_stderr.txt.gz").c_str());
        } else {
            std::cerr << "Can't find the file: " << opt::dminFiles[i] + "_combine_stderr.txt" << " or " << opt::dminFiles[i] + "_combine_stderr.txt.gz. Exiting..." << std::endl;
            exit(EXIT_FAILURE);
        }
        dminstdErrFiles.push_back(dminstdErrFile);
        std::cerr << "Reading file " << opt::dminFiles[i] << std::endl;
    }
    
    std::istream* treeFile; std::ofstream* outFileTree;
    std::map<string,std::vector<int>> treeTaxonNamesToLoc; std::vector<int> treeLevels;
    if (opt::treeFile != "") {
        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(1);}
        outFileTree = new std::ofstream(outFileRoot + "_combined_tree.txt");
        getline(*treeFile, line);
        assignTreeLevelsAndLinkToTaxa(line,treeTaxonNamesToLoc,treeLevels);
    }
    // Now get the standard error values
    std::ofstream* outFileBBAA = new std::ofstream(outFileRoot + "_combined_BBAA.txt"); std::ofstream* outFileDmin = new std::ofstream(outFileRoot + "_combined_Dmin.txt");
    
    std::vector<double> BBAA_local_Ds; std::vector<double> ABBA_local_Ds; std::vector<double> BABA_local_Ds;
    string s1; string s2; string s3;
    bool allDone = false; bool fIncluded = false;
    int processedTriosNumber = 0; int exceptionCount = 0;
    
    getline(*dminBBAAscoreFiles[0], line); std::vector<string> patternCounts = split(line, '\t');
    if (patternCounts.size() == 12) fIncluded = true;
    string header = makeHeader(false,fIncluded,KStestPossible);
    *outFileBBAA << header << std::endl; *outFileDmin << header << std::endl;
    if (opt::treeFile != "") *outFileTree << header << std::endl;
    dminBBAAscoreFiles[0]->seekg(0, dminBBAAscoreFiles[0]->beg); // Go back to the beginning of this file
    
    do {
        TrioDinfo info; processedTriosNumber++;
        if (processedTriosNumber % 10000 == 0) { std::cerr << "Processed " << processedTriosNumber << " trios" << std::endl; }
        
        if (opt::subsetStart != -1) {
            if (processedTriosNumber < opt::subsetStart) {
                for (int i = 0; i < dminBBAAscoreFiles.size(); i++) { getline(*dminBBAAscoreFiles[i], line); }
                for (int i = 0; i < dminstdErrFiles.size(); i++) { getline(*dminstdErrFiles[i], line); }
                continue;
            }
            if (processedTriosNumber >= (opt::subsetStart+opt::subsetLength)) {
                std::cerr << "DONE" << std::endl; break;
            }
        }
        
        
        for (int i = 0; i < dminBBAAscoreFiles.size(); i++) {
            if (getline(*dminBBAAscoreFiles[i], line)) {
                std::vector<string> patternCounts = split(line, '\t');
                assert(patternCounts.size() == 6 || patternCounts.size() == 12);

                if (i == 0) {
                    s1 = patternCounts[0]; s2 = patternCounts[1]; s3 = patternCounts[2];
                } else {
                    assert(s1 == patternCounts[0]); assert(s2 == patternCounts[1]); assert(s3 == patternCounts[2]);
                }
                info.BBAAtotal += stringToDouble(patternCounts[3]);
                info.BABAtotal += stringToDouble(patternCounts[4]);
                info.ABBAtotal += stringToDouble(patternCounts[5]);
                if (fIncluded) {
                    info.F_G_denom1 += stringToDouble(patternCounts[6]);
                    info.F_G_denom2 += stringToDouble(patternCounts[7]);
                    info.F_G_denom3 += stringToDouble(patternCounts[8]);
                    info.F_G_denom1_reversed += stringToDouble(patternCounts[9]);
                    info.F_G_denom2_reversed += stringToDouble(patternCounts[10]);
                    info.F_G_denom3_reversed += stringToDouble(patternCounts[11]);
                }
            } else {
                allDone = true; break;
            }
        }
        
        for (int i = 0; i < dminstdErrFiles.size(); i++) {
            if (getline(*dminstdErrFiles[i], line)) {
                std::vector<string> localDs = split2(line, "\t");
                //assert(localDs.size() == 3 || localDs.size() == 0);
                if (localDs.size() == 3) {
                    std::vector<string> regionD_strings0 = split(localDs[0], ',');
                    std::vector<string> regionD_strings1 = split(localDs[1], ',');
                    std::vector<string> regionD_strings2 = split(localDs[2], ',');
                    for (int j = 0; j < regionD_strings0.size(); j++) {
                        double localD = stringToDouble(regionD_strings0[j]);
                        if (!std::isnan(localD)) info.regionDs[0].push_back(localD);
                    }
                    for (int j = 0; j < regionD_strings1.size(); j++) {
                        double localD = stringToDouble(regionD_strings1[j]);
                        if (!std::isnan(localD)) info.regionDs[1].push_back(localD);
                    }
                    for (int j = 0; j < regionD_strings2.size(); j++) {
                        double localD = stringToDouble(regionD_strings2[j]);
                        if (!std::isnan(localD)) info.regionDs[2].push_back(localD);
                    }
                } else {
                    print_vector(localDs,std::cerr); exit(EXIT_FAILURE);
                }
            } else {
                allDone = true; break;
            }
        }
        
        
        if (!allDone) {
            try {
                info.calculateFinalDs();
            } catch (const char* msg) {
                exceptionCount++;
                if (exceptionCount <= 10) {
                    std::cerr << msg << std::endl;
                    std::cerr << "Could not calculate p-values for the trio: " << s1 << " " << s2 << " " << s3 << std::endl;
                    std::cerr << "You should probably decrease the the jackknife block size (-j option)" << std::endl;
                    std::cerr << std::endl;
                }
                info.D1_p = nan(""); info.D2_p = nan(""); info.D3_p = nan("");
            }
            
            std::vector<string> trio; trio.push_back(s1); trio.push_back(s2); trio.push_back(s3);
            // Find which topology is in agreement with the counts of BBAA, BABA, and ABBA
            info.assignBBAAarrangement();
            std::vector<string> BBAAoutVec = info.makeOutVec(trio, fIncluded,KStestPossible, info.BBAAarrangement);
            print_vector(BBAAoutVec,*outFileBBAA);
           
            // Find Dmin:
            info.assignDminArrangement();
            std::vector<string> DminOutVec = info.makeOutVec(trio, fIncluded, KStestPossible,info.DminArrangement);
            print_vector(DminOutVec,*outFileDmin);
            
            if (opt::treeFile != "") {
                int loc1 = treeTaxonNamesToLoc[s1][0]; int loc2 = treeTaxonNamesToLoc[s2][0]; int loc3 = treeTaxonNamesToLoc[s3][0];
                info.treeArrangement = info.assignTreeArrangement(treeLevels, loc1, loc2, loc3);
                std::vector<string> treeOutVec = info.makeOutVec(trio, fIncluded, KStestPossible, info.treeArrangement);
                print_vector(treeOutVec,*outFileTree);
            }
        }
 
    } while(!allDone);
    
    if (exceptionCount > 10) {
        std::cerr << "..." << std::endl;
        std::cerr << "p-value could not be calculated for " << exceptionCount << " trios" << std::endl;
        std::cerr << "You should definitely decrease the the jackknife block size!!!" << std::endl;
        std::cerr << std::endl;
    }
    
    return 0;
    
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x658, %rsp            # imm = 0x658
callq 0x237b4
leaq 0x100(%rsp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x3b0(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x22d21(%rip), %rdx     # 0x44041
leaq 0x3a0(%rsp), %rdi
movq %rdx, %rsi
callq 0x88ba
leaq 0x37731(%rip), %rsi     # 0x58a68
leaq 0x3774a(%rip), %rdx     # 0x58a88
leaq 0x1c0(%rsp), %rdi
leaq 0x3a0(%rsp), %rcx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
callq 0x3c3c4
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2137c
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
xorl %eax, %eax
movq %rax, 0x90(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x80(%rsp)
movq %rax, 0x70(%rsp)
movapd %xmm0, 0x60(%rsp)
movq 0x376ab(%rip), %rax     # 0x58a50
cmpq %rax, 0x376ac(%rip)     # 0x58a58
je 0x2180a
xorl %ebx, %ebx
leaq 0x3a0(%rsp), %r14
movq %rsp, %r12
xorl %r13d, %r13d
movq %rbp, 0x3a0(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdf1c
movq %r14, %rdi
leaq 0x20f26(%rip), %rsi     # 0x4230e
callq 0x77f0
movq %r14, %rdi
callq 0xd02d
movl %eax, %r15d
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x21415
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
testb %r15b, %r15b
je 0x21473
movq 0x3762f(%rip), %rax     # 0x58a50
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xdf1c
movq %r12, %rdi
leaq 0x20ec6(%rip), %rsi     # 0x4230e
callq 0x77f0
movq (%rsp), %rsi
movq %r14, %rdi
leaq 0xb0(%rsp), %rdx
callq 0x887c
movq %r14, %rdi
movl $0x8, %esi
callq 0xcf0f
jmp 0x2152a
movq 0x375d6(%rip), %rax     # 0x58a50
movq %rbp, 0x3a0(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdf1c
movq %r14, %rdi
leaq 0x222c4(%rip), %rsi     # 0x43764
callq 0x77f0
movq %r14, %rdi
callq 0xd02d
movl %eax, %r15d
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x214cd
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
testb %r15b, %r15b
je 0x22f5b
movq 0x37573(%rip), %rax     # 0x58a50
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xdf1c
movq %r12, %rdi
leaq 0x22260(%rip), %rsi     # 0x43764
callq 0x77f0
movq (%rsp), %rsi
movq %r14, %rdi
leaq 0xb0(%rsp), %rdx
callq 0x887c
movq %r14, %rdi
movl $0x8, %esi
callq 0xcf0f
movq %rax, 0xd0(%rsp)
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2154f
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x2156a
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
je 0x21589
movq 0xd0(%rsp), %rax
movq %rax, (%rsi)
addq $0x8, 0x68(%rsp)
jmp 0x2159b
leaq 0x60(%rsp), %rdi
leaq 0xd0(%rsp), %rdx
callq 0x23cf2
movq 0x374ae(%rip), %rax     # 0x58a50
movq %rbp, 0x3a0(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdf1c
movq %r14, %rdi
leaq 0x20d53(%rip), %rsi     # 0x4231b
callq 0x77f0
movq %r14, %rdi
callq 0xd02d
movl %eax, %r15d
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x215f5
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
testb %r15b, %r15b
je 0x21653
movq 0x3744f(%rip), %rax     # 0x58a50
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xdf1c
movq %r12, %rdi
leaq 0x20cf3(%rip), %rsi     # 0x4231b
callq 0x77f0
movq (%rsp), %rsi
movq %r14, %rdi
leaq 0x118(%rsp), %rdx
callq 0x887c
movq %r14, %rdi
movl $0x8, %esi
callq 0xcf0f
jmp 0x2170a
movq 0x373f6(%rip), %rax     # 0x58a50
movq %rbp, 0x3a0(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdf1c
movq %r14, %rdi
leaq 0x2212b(%rip), %rsi     # 0x437ab
callq 0x77f0
movq %r14, %rdi
callq 0xd02d
movl %eax, %r15d
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x216ad
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
testb %r15b, %r15b
je 0x22ffb
movq 0x37393(%rip), %rax     # 0x58a50
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xdf1c
movq %r12, %rdi
leaq 0x220c7(%rip), %rsi     # 0x437ab
callq 0x77f0
movq (%rsp), %rsi
movq %r14, %rdi
leaq 0x118(%rsp), %rdx
callq 0x887c
movq %r14, %rdi
movl $0x8, %esi
callq 0xcf0f
movq %rax, 0xb0(%rsp)
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2172f
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x2174a
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x88(%rsp), %rsi
cmpq 0x90(%rsp), %rsi
je 0x21772
movq 0xb0(%rsp), %rax
movq %rax, (%rsi)
addq $0x8, 0x88(%rsp)
jmp 0x21787
leaq 0x80(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
callq 0x23cf2
movl $0xd, %edx
movq 0x36855(%rip), %rdi     # 0x57fe8
leaq 0x2204b(%rip), %rsi     # 0x437e5
callq 0x74b0
movq 0x372aa(%rip), %rax     # 0x58a50
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
movq 0x36832(%rip), %rdi     # 0x57fe8
callq 0x74b0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %r15, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
incq %r13
movq 0x37269(%rip), %rcx     # 0x58a58
movq 0x3725a(%rip), %rax     # 0x58a50
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %r13, %rcx
ja 0x213c2
leaq 0x8(%rsp), %rax
movl $0x0, (%rax)
xorl %ecx, %ecx
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
movq %rcx, 0x1f0(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x1e0(%rsp)
leaq 0x37265(%rip), %rdi     # 0x58aa8
leaq 0x227f7(%rip), %rsi     # 0x44041
callq 0x70f0
testl %eax, %eax
je 0x21941
movl $0x208, %edi            # imm = 0x208
callq 0x7410
movq %rax, %rbx
movq 0x3723d(%rip), %rsi     # 0x58aa8
movq %rax, %rdi
movl $0x8, %edx
callq 0x7790
movq (%rbx), %rax
movq -0x18(%rax), %rax
cmpl $0x0, 0x20(%rbx,%rax)
jne 0x230b0
movl $0x200, %edi            # imm = 0x200
callq 0x7410
movq %rax, %r14
leaq 0x3a0(%rsp), %rdi
movq %rbp, (%rdi)
movq 0x1c0(%rsp), %rsi
movq 0x1c8(%rsp), %rdx
addq %rsi, %rdx
callq 0xdf1c
leaq 0x21f32(%rip), %rsi     # 0x437f3
leaq 0x3a0(%rsp), %rdi
callq 0x77f0
leaq 0x3a0(%rsp), %rsi
movq %r14, %rdi
movl $0x10, %edx
callq 0x7800
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x21900
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
leaq 0xf0(%rsp), %rsi
movq %rbx, %rdi
callq 0x77a0
leaq 0xf0(%rsp), %rdi
movq %rsp, %rsi
leaq 0x1e0(%rsp), %rdx
callq 0x3ccf0
jmp 0x21941
movl $0x200, %edi            # imm = 0x200
callq 0x7410
movq %rax, %r15
leaq 0x3a0(%rsp), %rdi
movq %rbp, (%rdi)
movq 0x1c0(%rsp), %rsi
movq 0x1c8(%rsp), %rdx
addq %rsi, %rdx
callq 0xdf1c
leaq 0x21e8e(%rip), %rsi     # 0x43806
leaq 0x3a0(%rsp), %rdi
callq 0x77f0
leaq 0x3a0(%rsp), %rsi
movq %r15, %rdi
movl $0x10, %edx
callq 0x7800
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x219b7
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movl $0x200, %edi            # imm = 0x200
callq 0x7410
movq %rax, %r12
leaq 0x3a0(%rsp), %rdi
movq %rbp, (%rdi)
movq 0x1c0(%rsp), %rsi
movq 0x1c8(%rsp), %rdx
addq %rsi, %rdx
callq 0xdf1c
leaq 0x21e2b(%rip), %rsi     # 0x43819
leaq 0x3a0(%rsp), %rdi
callq 0x77f0
leaq 0x3a0(%rsp), %rsi
movq %r12, %rdi
movl $0x10, %edx
callq 0x7800
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x21a2d
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
leaq 0xe0(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0xc0(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x128(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movq 0x60(%rsp), %rax
movq (%rax), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
leaq 0xf0(%rsp), %rsi
movq %rbx, %rdi
callq 0x77a0
leaq 0x5e0(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
movl $0x9, %edx
callq 0x91c1
movq 0x5e8(%rsp), %rax
subq 0x5e0(%rsp), %rax
xorl %edx, %edx
movq %rax, 0xa8(%rsp)
cmpq $0x180, %rax            # imm = 0x180
sete %dl
leaq 0x1a0(%rsp), %rdi
xorl %esi, %esi
xorl %ecx, %ecx
callq 0x3c2d6
movq 0x1a0(%rsp), %rsi
movq 0x1a8(%rsp), %rdx
movq %r15, 0x5c0(%rsp)
movq %r15, %rdi
callq 0x74b0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq 0x1a0(%rsp), %rsi
movq 0x1a8(%rsp), %rdx
movq %r12, %rdi
callq 0x74b0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
leaq 0x36f33(%rip), %rdi     # 0x58aa8
leaq 0x224c5(%rip), %rsi     # 0x44041
callq 0x70f0
testl %eax, %eax
je 0x21bc7
movq 0x1a0(%rsp), %rsi
movq 0x1a8(%rsp), %rdx
movq %r14, %rdi
callq 0x74b0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq 0x60(%rsp), %rax
movq (%rax), %rdi
movq $0x0, 0xa0(%rsp)
xorl %esi, %esi
xorl %edx, %edx
callq 0x7590
movq %r12, 0x5b8(%rsp)
movq %r14, 0x5b0(%rsp)
leaq 0x190(%rsp), %r13
leaq 0x3a0(%rsp), %r15
leaq 0x320(%rsp), %r12
leaq 0x340(%rsp), %rbp
leaq 0x360(%rsp), %r14
movq $0x0, 0x110(%rsp)
movl $0x0, 0x5c(%rsp)
movq %r15, %rdi
callq 0x1d318
movq 0xa0(%rsp), %rax
incl %eax
movq %rax, 0xa0(%rsp)
imull $0x3afb7e91, %eax, %eax # imm = 0x3AFB7E91
rorl $0x4, %eax
cmpl $0x68db8, %eax          # imm = 0x68DB8
ja 0x21cc4
movl $0xa, %edx
movq 0x36382(%rip), %rdi     # 0x57fe8
leaq 0x20076(%rip), %rsi     # 0x41ce3
callq 0x74b0
movq 0x3636f(%rip), %rdi     # 0x57fe8
movq 0xa0(%rsp), %rsi
callq 0x7710
movq %rax, %rbx
movl $0x6, %edx
movq %rax, %rdi
leaq 0x20946(%rip), %rsi     # 0x425de
callq 0x74b0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movl 0x367a6(%rip), %eax     # 0x58470
cmpl $-0x1, %eax
je 0x21dac
movq 0xa0(%rsp), %rcx
cmpl %eax, %ecx
jge 0x21d9e
movq 0x60(%rsp), %rax
cmpq %rax, 0x68(%rsp)
je 0x21d36
xorl %r15d, %r15d
movq (%rax,%r15,8), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
movq %rbx, %rdi
leaq 0xf0(%rsp), %rsi
callq 0x77a0
incq %r15
movq 0x60(%rsp), %rax
movq 0x68(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r15, %rcx
ja 0x21cf2
movq 0x80(%rsp), %rax
cmpq %rax, 0x88(%rsp)
je 0x22a59
xorl %r15d, %r15d
movq (%rax,%r15,8), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
movq %rbx, %rdi
leaq 0xf0(%rsp), %rsi
callq 0x77a0
incq %r15
movq 0x80(%rsp), %rax
movq 0x88(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r15, %rcx
ja 0x21d4f
jmp 0x22a59
addl 0x366d0(%rip), %eax     # 0x58474
cmpl %eax, %ecx
jge 0x22bf6
movq 0x60(%rsp), %rax
cmpq %rax, 0x68(%rsp)
je 0x22377
xorl %r15d, %r15d
movq (%rax,%r15,8), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
movq %rbx, %rdi
leaq 0xf0(%rsp), %rsi
callq 0x77a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x2236d
leaq 0x30(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
movl $0x9, %edx
callq 0x91c1
movq 0x30(%rsp), %rbx
movq 0x38(%rsp), %rax
subq %rbx, %rax
sarq $0x5, %rax
cmpq $0x6, %rax
je 0x21e34
cmpq $0xc, %rax
jne 0x22f3c
testq %r15, %r15
je 0x21ecd
movq 0xd8(%rsp), %rdx
cmpq 0x8(%rbx), %rdx
jne 0x22ed6
testq %rdx, %rdx
je 0x21e6c
movq (%rbx), %rsi
movq 0xd0(%rsp), %rdi
callq 0x7440
testl %eax, %eax
jne 0x22ed6
movq 0xb8(%rsp), %rdx
cmpq 0x28(%rbx), %rdx
jne 0x22ecd
testq %rdx, %rdx
je 0x21e9c
movq 0x20(%rbx), %rsi
movq 0xb0(%rsp), %rdi
callq 0x7440
testl %eax, %eax
jne 0x22ecd
movq 0x120(%rsp), %rdx
cmpq 0x48(%rbx), %rdx
jne 0x22ec4
testq %rdx, %rdx
je 0x21f0e
movq 0x40(%rbx), %rsi
movq 0x118(%rsp), %rdi
callq 0x7440
testl %eax, %eax
je 0x21f0e
jmp 0x22ec4
leaq 0xd0(%rsp), %rdi
movq %rbx, %rsi
callq 0x7210
movq 0x30(%rsp), %rsi
addq $0x20, %rsi
leaq 0xb0(%rsp), %rdi
callq 0x7210
movq 0x30(%rsp), %rsi
addq $0x40, %rsi
leaq 0x118(%rsp), %rdi
callq 0x7210
movq 0x30(%rsp), %rbx
leaq 0x310(%rsp), %rax
movq %rax, 0x300(%rsp)
movq 0x60(%rbx), %rsi
movq 0x68(%rbx), %rdx
addq %rsi, %rdx
leaq 0x300(%rsp), %rdi
callq 0xdf1c
leaq 0x300(%rsp), %rdi
callq 0xc6c7
addsd 0x3b0(%rsp), %xmm0
movsd %xmm0, 0x3b0(%rsp)
movq 0x300(%rsp), %rdi
leaq 0x310(%rsp), %rax
cmpq %rax, %rdi
je 0x21f7a
movq 0x310(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x2f0(%rsp), %rcx
movq %rcx, 0x2e0(%rsp)
movq 0x80(%rax), %rsi
movq 0x88(%rax), %rdx
addq %rsi, %rdx
leaq 0x2e0(%rsp), %rdi
callq 0xdf1c
leaq 0x2e0(%rsp), %rdi
callq 0xc6c7
addsd 0x3a8(%rsp), %xmm0
movsd %xmm0, 0x3a8(%rsp)
movq 0x2e0(%rsp), %rdi
leaq 0x2f0(%rsp), %rax
cmpq %rax, %rdi
je 0x21ff1
movq 0x2f0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x2d0(%rsp), %rcx
movq %rcx, 0x2c0(%rsp)
movq 0xa0(%rax), %rsi
movq 0xa8(%rax), %rdx
addq %rsi, %rdx
leaq 0x2c0(%rsp), %rdi
callq 0xdf1c
leaq 0x2c0(%rsp), %rdi
callq 0xc6c7
addsd 0x3a0(%rsp), %xmm0
movsd %xmm0, 0x3a0(%rsp)
movq 0x2c0(%rsp), %rdi
leaq 0x2d0(%rsp), %rax
cmpq %rax, %rdi
je 0x22068
movq 0x2d0(%rsp), %rsi
incq %rsi
callq 0x7420
cmpq $0x180, 0xa8(%rsp) # imm = 0x180
jne 0x22344
movq 0x30(%rsp), %rax
leaq 0x2b0(%rsp), %rcx
movq %rcx, 0x2a0(%rsp)
movq 0xc0(%rax), %rsi
movq 0xc8(%rax), %rdx
addq %rsi, %rdx
leaq 0x2a0(%rsp), %rdi
callq 0xdf1c
leaq 0x2a0(%rsp), %rdi
callq 0xc6c7
addsd 0x438(%rsp), %xmm0
movsd %xmm0, 0x438(%rsp)
movq 0x2a0(%rsp), %rdi
leaq 0x2b0(%rsp), %rax
cmpq %rax, %rdi
je 0x220f1
movq 0x2b0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x290(%rsp), %rcx
movq %rcx, 0x280(%rsp)
movq 0xe0(%rax), %rsi
movq 0xe8(%rax), %rdx
addq %rsi, %rdx
leaq 0x280(%rsp), %rdi
callq 0xdf1c
leaq 0x280(%rsp), %rdi
callq 0xc6c7
addsd 0x468(%rsp), %xmm0
movsd %xmm0, 0x468(%rsp)
movq 0x280(%rsp), %rdi
leaq 0x290(%rsp), %rax
cmpq %rax, %rdi
je 0x22168
movq 0x290(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x270(%rsp), %rcx
movq %rcx, 0x260(%rsp)
movq 0x100(%rax), %rsi
movq 0x108(%rax), %rdx
addq %rsi, %rdx
leaq 0x260(%rsp), %rdi
callq 0xdf1c
leaq 0x260(%rsp), %rdi
callq 0xc6c7
addsd 0x498(%rsp), %xmm0
movsd %xmm0, 0x498(%rsp)
movq 0x260(%rsp), %rdi
leaq 0x270(%rsp), %rax
cmpq %rax, %rdi
je 0x221df
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x250(%rsp), %rcx
movq %rcx, 0x240(%rsp)
movq 0x120(%rax), %rsi
movq 0x128(%rax), %rdx
addq %rsi, %rdx
leaq 0x240(%rsp), %rdi
callq 0xdf1c
leaq 0x240(%rsp), %rdi
callq 0xc6c7
addsd 0x440(%rsp), %xmm0
movsd %xmm0, 0x440(%rsp)
movq 0x240(%rsp), %rdi
leaq 0x250(%rsp), %rax
cmpq %rax, %rdi
je 0x22256
movq 0x250(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x230(%rsp), %rcx
movq %rcx, 0x220(%rsp)
movq 0x140(%rax), %rsi
movq 0x148(%rax), %rdx
addq %rsi, %rdx
leaq 0x220(%rsp), %rdi
callq 0xdf1c
leaq 0x220(%rsp), %rdi
callq 0xc6c7
addsd 0x470(%rsp), %xmm0
movsd %xmm0, 0x470(%rsp)
movq 0x220(%rsp), %rdi
leaq 0x230(%rsp), %rax
cmpq %rax, %rdi
je 0x222cd
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x210(%rsp), %rcx
movq %rcx, 0x200(%rsp)
movq 0x160(%rax), %rsi
movq 0x168(%rax), %rdx
addq %rsi, %rdx
leaq 0x200(%rsp), %rdi
callq 0xdf1c
leaq 0x200(%rsp), %rdi
callq 0xc6c7
addsd 0x4a0(%rsp), %xmm0
movsd %xmm0, 0x4a0(%rsp)
movq 0x200(%rsp), %rdi
leaq 0x210(%rsp), %rax
cmpq %rax, %rdi
je 0x22344
movq 0x210(%rsp), %rsi
incq %rsi
callq 0x7420
leaq 0x30(%rsp), %rdi
callq 0xd1ac
incq %r15
movq 0x60(%rsp), %rax
movq 0x68(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r15, %rcx
ja 0x21dbf
jmp 0x22377
movb $0x1, %al
movq %rax, 0x110(%rsp)
movq 0x80(%rsp), %rax
cmpq %rax, 0x88(%rsp)
je 0x227dd
xorl %r15d, %r15d
movq (%rax,%r15,8), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
movq %rbx, %rdi
leaq 0xf0(%rsp), %rsi
callq 0x77a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x22c3c
movq %r13, 0x180(%rsp)
movq 0xf0(%rsp), %rsi
movq 0xf8(%rsp), %rdx
addq %rsi, %rdx
leaq 0x180(%rsp), %rdi
callq 0xdf1c
leaq 0x390(%rsp), %rax
movq %rax, 0x380(%rsp)
leaq 0x380(%rsp), %rbx
movq %rbx, %rdi
leaq 0x21c29(%rip), %rsi     # 0x44040
leaq 0x21c23(%rip), %rdx     # 0x44041
callq 0x88ba
leaq 0x30(%rsp), %rdi
leaq 0x180(%rsp), %rsi
movq %rbx, %rdx
callq 0xca29
movq 0x380(%rsp), %rdi
leaq 0x390(%rsp), %rax
cmpq %rax, %rdi
je 0x2245d
movq 0x390(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x180(%rsp), %rdi
cmpq %r13, %rdi
je 0x2247a
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rax
subq %rsi, %rax
cmpq $0x60, %rax
leaq 0x168(%rsp), %rdi
leaq 0x150(%rsp), %rbx
leaq 0x138(%rsp), %r13
jne 0x22ef5
movl $0x2c, %edx
callq 0x91c1
movq 0x30(%rsp), %rsi
addq $0x20, %rsi
movq %rbx, %rdi
movl $0x2c, %edx
callq 0x91c1
movq 0x30(%rsp), %rsi
addq $0x40, %rsi
movq %r13, %rdi
movl $0x2c, %edx
callq 0x91c1
movq 0x168(%rsp), %rax
cmpq %rax, 0x170(%rsp)
je 0x225bd
movl $0x8, %ebx
xorl %r13d, %r13d
leaq 0x370(%rsp), %rcx
movq %rcx, 0x360(%rsp)
movq -0x8(%rax,%rbx), %rsi
movq (%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdf1c
movq %r14, %rdi
callq 0xc6c7
movq 0x360(%rsp), %rdi
leaq 0x370(%rsp), %rax
cmpq %rax, %rdi
je 0x2255a
movq 0x370(%rsp), %rsi
incq %rsi
movsd %xmm0, 0x50(%rsp)
callq 0x7420
movsd 0x50(%rsp), %xmm0
movsd %xmm0, 0x98(%rsp)
ucomisd %xmm0, %xmm0
jp 0x22596
movq 0x538(%rsp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x22589
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x22596
leaq 0x98(%rsp), %rdx
callq 0xf47e
incq %r13
movq 0x168(%rsp), %rax
movq 0x170(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %r13, %rcx
ja 0x224fd
movq 0x150(%rsp), %rax
cmpq %rax, 0x158(%rsp)
je 0x2269f
movl $0x8, %ebx
xorl %r13d, %r13d
leaq 0x350(%rsp), %rcx
movq %rcx, 0x340(%rsp)
movq -0x8(%rax,%rbx), %rsi
movq (%rax,%rbx), %rdx
addq %rsi, %rdx
movq %rbp, %rdi
callq 0xdf1c
movq %rbp, %rdi
callq 0xc6c7
movq 0x340(%rsp), %rdi
leaq 0x350(%rsp), %rax
cmpq %rax, %rdi
je 0x22638
movq 0x350(%rsp), %rsi
incq %rsi
movsd %xmm0, 0x50(%rsp)
callq 0x7420
movsd 0x50(%rsp), %xmm0
movsd %xmm0, 0x98(%rsp)
ucomisd %xmm0, %xmm0
jp 0x22678
movq 0x538(%rsp), %rdi
movq 0x20(%rdi), %rsi
cmpq 0x28(%rdi), %rsi
je 0x22667
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x20(%rdi)
jmp 0x22678
addq $0x18, %rdi
leaq 0x98(%rsp), %rdx
callq 0xf47e
incq %r13
movq 0x150(%rsp), %rax
movq 0x158(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %r13, %rcx
ja 0x225db
movq 0x138(%rsp), %rax
cmpq %rax, 0x140(%rsp)
je 0x22781
movl $0x8, %ebx
xorl %r13d, %r13d
leaq 0x330(%rsp), %rcx
movq %rcx, 0x320(%rsp)
movq -0x8(%rax,%rbx), %rsi
movq (%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xdf1c
movq %r12, %rdi
callq 0xc6c7
movq 0x320(%rsp), %rdi
leaq 0x330(%rsp), %rax
cmpq %rax, %rdi
je 0x2271a
movq 0x330(%rsp), %rsi
incq %rsi
movsd %xmm0, 0x50(%rsp)
callq 0x7420
movsd 0x50(%rsp), %xmm0
movsd %xmm0, 0x98(%rsp)
ucomisd %xmm0, %xmm0
jp 0x2275a
movq 0x538(%rsp), %rdi
movq 0x38(%rdi), %rsi
cmpq 0x40(%rdi), %rsi
je 0x22749
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x38(%rdi)
jmp 0x2275a
addq $0x30, %rdi
leaq 0x98(%rsp), %rdx
callq 0xf47e
incq %r13
movq 0x138(%rsp), %rax
movq 0x140(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %r13, %rcx
ja 0x226bd
leaq 0x138(%rsp), %rdi
callq 0xd1ac
leaq 0x150(%rsp), %rdi
callq 0xd1ac
leaq 0x168(%rsp), %rdi
callq 0xd1ac
leaq 0x30(%rsp), %rdi
callq 0xd1ac
incq %r15
movq 0x80(%rsp), %rax
movq 0x88(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r15, %rcx
leaq 0x190(%rsp), %r13
ja 0x22390
testb $0x1, 0x110(%rsp)
jne 0x22a59
leaq 0x3a0(%rsp), %rdi
callq 0x1de10
xorpd %xmm0, %xmm0
movapd %xmm0, 0x30(%rsp)
movq $0x0, 0x40(%rsp)
leaq 0x30(%rsp), %r15
movq %r15, %rdi
leaq 0xd0(%rsp), %rsi
callq 0xd894
movq %r15, %rdi
leaq 0xb0(%rsp), %rsi
callq 0xd894
movq %r15, %rdi
leaq 0x118(%rsp), %rsi
callq 0xd894
xorl %ebx, %ebx
cmpq $0x180, 0xa8(%rsp) # imm = 0x180
sete %bl
leaq 0x3a0(%rsp), %rdi
callq 0x1def4
movl 0x59c(%rsp), %r9d
leaq 0x168(%rsp), %r15
movq %r15, %rdi
leaq 0x3a0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x1df96
leaq 0x640(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
callq 0xd99e
movq %rbx, %r15
movq %rbx, %rdi
movq 0x5c0(%rsp), %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0xd8d1
xorl %ebx, %ebx
cmpq $0x180, 0xa8(%rsp) # imm = 0x180
sete %bl
movq %r15, %rdi
callq 0xd1ac
leaq 0x3a0(%rsp), %rdi
callq 0x1eeb0
movl 0x5a0(%rsp), %r9d
leaq 0x150(%rsp), %r15
movq %r15, %rdi
leaq 0x3a0(%rsp), %rsi
leaq 0x30(%rsp), %rdx
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x1df96
leaq 0x628(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
callq 0xd99e
movq %rbx, %rdi
movq 0x5b8(%rsp), %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0xd8d1
movq %rbx, %rdi
callq 0xd1ac
leaq 0x36164(%rip), %rdi     # 0x58aa8
leaq 0x216f6(%rip), %rsi     # 0x44041
callq 0x70f0
testl %eax, %eax
je 0x22a35
movq %rsp, %r15
movq %r15, %rdi
leaq 0xd0(%rsp), %rsi
callq 0xd63e
movq (%rax), %rax
movl (%rax), %eax
movl %eax, 0x50(%rsp)
movq %r15, %rdi
leaq 0xb0(%rsp), %rsi
callq 0xd63e
movq (%rax), %rax
movl (%rax), %ebx
movq %r15, %rdi
leaq 0x118(%rsp), %rsi
callq 0xd63e
leaq 0x3a0(%rsp), %r15
movq (%rax), %rax
movl (%rax), %r8d
movq %r15, %rdi
leaq 0x1e0(%rsp), %rsi
movl 0x50(%rsp), %edx
movl %ebx, %ecx
callq 0x1ef6c
xorl %ecx, %ecx
cmpq $0x180, 0xa8(%rsp) # imm = 0x180
sete %cl
movl %eax, 0x598(%rsp)
leaq 0x138(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x30(%rsp), %rdx
xorl %r8d, %r8d
movl %eax, %r9d
callq 0x1df96
leaq 0x610(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
callq 0xd99e
movq %r15, %rdi
movq 0x5b0(%rsp), %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0xd8d1
movq %r15, %rdi
callq 0xd1ac
leaq 0x138(%rsp), %rdi
callq 0xd1ac
leaq 0x150(%rsp), %rdi
callq 0xd1ac
leaq 0x168(%rsp), %rdi
callq 0xd1ac
leaq 0x30(%rsp), %rdi
callq 0xd1ac
leaq 0x3a0(%rsp), %r15
movq %r15, %rdi
callq 0x1d50a
testb $0x1, 0x110(%rsp)
je 0x21c30
jmp 0x22c49
movq %rax, %r13
cmpl $0x1, %edx
jne 0x23663
movq %r13, %rdi
callq 0x7170
cmpl $0x9, 0x5c(%rsp)
jg 0x22b7c
movq 0x35546(%rip), %rdi     # 0x57fe8
movq %rax, %rsi
callq 0x7400
movq %rax, %rdi
callq 0x71b0
movl $0x2b, %edx
movq 0x3552a(%rip), %rdi     # 0x57fe8
leaq 0x1f9e9(%rip), %rsi     # 0x424ae
callq 0x74b0
movq 0xd0(%rsp), %rsi
movq 0xd8(%rsp), %rdx
movq 0x35507(%rip), %rdi     # 0x57fe8
callq 0x74b0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1f90f(%rip), %rsi     # 0x42407
callq 0x74b0
movq 0xb0(%rsp), %rsi
movq 0xb8(%rsp), %rdx
movq %rbx, %rdi
callq 0x74b0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1f8e0(%rip), %rsi     # 0x42407
callq 0x74b0
movq 0x118(%rsp), %rsi
movq 0x120(%rsp), %rdx
movq %rbx, %rdi
callq 0x74b0
movq %rax, %rdi
callq 0x71b0
movl $0x45, %edx
movq 0x35490(%rip), %rdi     # 0x57fe8
leaq 0x1f97b(%rip), %rsi     # 0x424da
callq 0x74b0
movq 0x3547d(%rip), %rdi     # 0x57fe8
callq 0x71b0
movq 0x35471(%rip), %rdi     # 0x57fe8
callq 0x71b0
incl 0x5c(%rsp)
leaq 0x214ba(%rip), %rbx     # 0x44041
movq %rbx, %rdi
callq 0x7070
movsd %xmm0, 0x5d8(%rsp)
fldl 0x5d8(%rsp)
fstpt 0x3d0(%rsp)
movq %rbx, %rdi
callq 0x7070
movsd %xmm0, 0x5d0(%rsp)
fldl 0x5d0(%rsp)
fstpt 0x3e0(%rsp)
movq %rbx, %rdi
callq 0x7070
movsd %xmm0, 0x5c8(%rsp)
fldl 0x5c8(%rsp)
fstpt 0x3f0(%rsp)
callq 0x76a0
leaq 0x190(%rsp), %r13
jmp 0x227f8
movq 0x353eb(%rip), %rbx     # 0x57fe8
leaq 0x1f78c(%rip), %rsi     # 0x42390
movl $0x4, %edx
movq %rbx, %rdi
callq 0x74b0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq 0x353b9(%rip), %rdi     # 0x57fe8
callq 0x7040
movq %rax, %rdi
callq 0x72e0
leaq 0x3a0(%rsp), %rdi
callq 0x1d50a
movl 0x5c(%rsp), %ebp
cmpl $0xb, %ebp
jl 0x22d74
movq 0x3538b(%rip), %rbx     # 0x57fe8
leaq 0x1e918(%rip), %rsi     # 0x4157c
movl $0x3, %edx
movq %rbx, %rdi
callq 0x74b0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq 0x35359(%rip), %rdi     # 0x57fe8
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq 0x35345(%rip), %rdi     # 0x57fe8
leaq 0x1f8c5(%rip), %rsi     # 0x4256f
movl $0x24, %edx
callq 0x74b0
movq 0x3532d(%rip), %rdi     # 0x57fe8
movl %ebp, %esi
callq 0x7710
movq %rax, %rbx
leaq 0x1f912(%rip), %rsi     # 0x425de
movl $0x6, %edx
movq %rax, %rdi
callq 0x74b0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq 0x352e1(%rip), %rbx     # 0x57fe8
leaq 0x20bce(%rip), %rsi     # 0x438dc
movl $0x3e, %edx
movq %rbx, %rdi
callq 0x74b0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq 0x352af(%rip), %rbx     # 0x57fe8
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq 0x35281(%rip), %rdi     # 0x57fe8
callq 0x7040
movq %rax, %rdi
callq 0x72e0
leaq 0x1b0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x22d95
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x7420
leaq 0x5e0(%rsp), %rdi
callq 0xd1ac
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x22dc7
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0xb0(%rsp), %rdi
leaq 0xc0(%rsp), %rax
cmpq %rax, %rdi
je 0x22dec
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x22e11
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x22e2e
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
movq %rsp, %rdi
callq 0x168f6
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x22e4d
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x22e6a
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
leaq 0x1d0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x22e8b
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0xf0(%rsp), %rdi
leaq 0x100(%rsp), %rax
cmpq %rax, %rdi
je 0x22eb0
movq 0x100(%rsp), %rsi
incq %rsi
callq 0x7420
xorl %eax, %eax
addq $0x658, %rsp            # imm = 0x658
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x209fa(%rip), %rdi     # 0x438c5
jmp 0x22edd
leaq 0x209da(%rip), %rdi     # 0x438ae
jmp 0x22edd
leaq 0x209ba(%rip), %rdi     # 0x43897
leaq 0x20980(%rip), %rsi     # 0x43864
leaq 0x2098a(%rip), %rcx     # 0x43875
movl $0x88, %edx
callq 0x7290
leaq 0x5f8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xd99e
movq 0x350da(%rip), %rsi     # 0x57fe8
leaq 0x5f8(%rsp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0xd8d1
leaq 0x5f8(%rsp), %rdi
callq 0xd1ac
movl $0x1, %edi
callq 0x7510
leaq 0x208e9(%rip), %rdi     # 0x4382c
leaq 0x2091a(%rip), %rsi     # 0x43864
leaq 0x20924(%rip), %rcx     # 0x43875
movl $0x83, %edx
callq 0x7290
movq 0x35086(%rip), %rdi     # 0x57fe8
leaq 0x2080b(%rip), %rsi     # 0x43774
movl $0x15, %edx
callq 0x74b0
movq 0x35ad6(%rip), %rsi     # 0x58a50
addq %rbx, %rsi
leaq 0x1f38a(%rip), %rdx     # 0x4230e
leaq 0x3a0(%rsp), %rdi
callq 0x23c9b
movq 0x3a0(%rsp), %rsi
movq 0x3a8(%rsp), %rdx
movq 0x35040(%rip), %rdi     # 0x57fe8
callq 0x74b0
movq %rax, %r14
leaq 0x207d3(%rip), %rsi     # 0x4378a
movl $0x4, %edx
movq %rax, %rdi
callq 0x74b0
addq 0x35a85(%rip), %rbx     # 0x58a50
leaq 0x207bd(%rip), %rdx     # 0x4378f
movq %rsp, %rdi
movq %rbx, %rsi
callq 0x23c9b
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq %r14, %rdi
callq 0x74b0
movq %rax, %rdi
callq 0x71b0
jmp 0x23096
movq 0x34fe6(%rip), %rdi     # 0x57fe8
leaq 0x2076b(%rip), %rsi     # 0x43774
movl $0x15, %edx
callq 0x74b0
movq 0x35a36(%rip), %rsi     # 0x58a50
addq %rbx, %rsi
leaq 0x1f2f7(%rip), %rdx     # 0x4231b
leaq 0x3a0(%rsp), %rdi
callq 0x23c9b
movq 0x3a0(%rsp), %rsi
movq 0x3a8(%rsp), %rdx
movq 0x34fa0(%rip), %rdi     # 0x57fe8
callq 0x74b0
movq %rax, %r14
leaq 0x20733(%rip), %rsi     # 0x4378a
movl $0x4, %edx
movq %rax, %rdi
callq 0x74b0
addq 0x359e5(%rip), %rbx     # 0x58a50
leaq 0x20750(%rip), %rdx     # 0x437c2
movq %rsp, %rdi
movq %rbx, %rsi
callq 0x23c9b
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq %r14, %rdi
callq 0x74b0
movq %rax, %rdi
callq 0x71b0
movq %rsp, %rdi
callq 0x7848
leaq 0x3a0(%rsp), %rdi
callq 0x7848
jmp 0x22f32
movq 0x34f31(%rip), %rdi     # 0x57fe8
leaq 0x1ebdb(%rip), %rsi     # 0x41c99
movl $0x9, %edx
callq 0x74b0
movq 0x359d9(%rip), %rsi     # 0x58aa8
movq 0x359da(%rip), %rdx     # 0x58ab0
movq 0x34f0b(%rip), %rdi     # 0x57fe8
callq 0x74b0
movq %rax, %rbx
leaq 0x1e804(%rip), %rsi     # 0x418f0
movl $0x20, %edx
movq %rax, %rdi
callq 0x74b0
movq %rbx, %rdi
callq 0x71b0
jmp 0x22f32
movq %rax, %r13
callq 0x76a0
jmp 0x23663
jmp 0x235a5
jmp 0x2311a
movq %rax, %r13
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x23485
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x23485
jmp 0x23482
jmp 0x23482
jmp 0x23506
jmp 0x23506
movq %rax, %r13
leaq 0x610(%rsp), %rdi
callq 0xd1ac
jmp 0x23632
jmp 0x2362f
jmp 0x23506
jmp 0x23176
movq %rax, %r13
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2319b
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x2319b
movq %rax, %r13
movl $0x200, %esi            # imm = 0x200
movq %r14, %rdi
jmp 0x23708
movq %rax, %r13
movl $0x208, %esi            # imm = 0x208
movq %rbx, %rdi
jmp 0x23708
jmp 0x23506
jmp 0x23513
movq %rax, %r13
leaq 0x640(%rsp), %rdi
jmp 0x23647
jmp 0x23513
jmp 0x235b5
movq %rax, %r13
leaq 0x628(%rsp), %rdi
jmp 0x2363a
movq %rax, %r13
jmp 0x23691
jmp 0x232a0
jmp 0x231fb
movq %rax, %r13
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x23220
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x23220
movq %rax, %r13
movl $0x200, %esi            # imm = 0x200
movq %r12, %rdi
jmp 0x23708
jmp 0x232b7
jmp 0x23234
movq %rax, %r13
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x23259
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x23259
movq %rax, %r13
movl $0x200, %esi            # imm = 0x200
movq %r15, %rdi
jmp 0x23708
jmp 0x232b7
movq %rax, %r13
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x23787
movq 0x3b0(%rsp), %rsi
jmp 0x2377f
movq %rax, %r13
jmp 0x23787
jmp 0x23506
jmp 0x23482
jmp 0x23482
movq %rax, %r13
jmp 0x2369e
jmp 0x235ad
jmp 0x235ad
jmp 0x235b5
movq %rax, %r13
jmp 0x2370d
jmp 0x2346a
jmp 0x235ad
jmp 0x235ad
movq %rax, %r13
leaq 0x5f8(%rsp), %rdi
jmp 0x23654
jmp 0x235ad
jmp 0x235a5
jmp 0x2332e
jmp 0x23333
jmp 0x235ad
jmp 0x23482
jmp 0x235ad
jmp 0x2332e
jmp 0x235ad
jmp 0x2332e
jmp 0x235ad
jmp 0x23482
jmp 0x235ad
jmp 0x2332e
jmp 0x235ad
jmp 0x2332e
jmp 0x23482
jmp 0x2332e
jmp 0x23333
jmp 0x2332e
jmp 0x23333
jmp 0x23482
movq %rax, %r13
jmp 0x23353
movq %rax, %r13
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x23353
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x23732
movq 0x10(%rsp), %rsi
jmp 0x2349e
jmp 0x235b5
movq %rax, %r13
movq 0x200(%rsp), %rdi
leaq 0x210(%rsp), %rax
cmpq %rax, %rdi
je 0x23659
movq 0x210(%rsp), %rsi
jmp 0x23592
movq %rax, %r13
movq 0x240(%rsp), %rdi
leaq 0x250(%rsp), %rax
cmpq %rax, %rdi
je 0x23659
movq 0x250(%rsp), %rsi
jmp 0x23592
movq %rax, %r13
movq 0x2a0(%rsp), %rdi
leaq 0x2b0(%rsp), %rax
cmpq %rax, %rdi
je 0x23659
movq 0x2b0(%rsp), %rsi
jmp 0x23592
movq %rax, %r13
movq 0x260(%rsp), %rdi
leaq 0x270(%rsp), %rax
cmpq %rax, %rdi
je 0x23659
movq 0x270(%rsp), %rsi
jmp 0x23592
movq %rax, %r13
movq 0x220(%rsp), %rdi
leaq 0x230(%rsp), %rax
cmpq %rax, %rdi
je 0x23659
movq 0x230(%rsp), %rsi
jmp 0x23592
movq %rax, %r13
movq 0x280(%rsp), %rdi
leaq 0x290(%rsp), %rax
cmpq %rax, %rdi
je 0x23659
movq 0x290(%rsp), %rsi
jmp 0x23592
movq %rax, %r13
jmp 0x23670
jmp 0x235ad
jmp 0x23482
jmp 0x23482
jmp 0x235ad
jmp 0x23482
movq %rax, %r13
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x23732
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x23732
movq %rax, %r13
jmp 0x234d8
movq %rax, %r13
movq 0x380(%rsp), %rdi
leaq 0x390(%rsp), %rax
cmpq %rax, %rdi
je 0x234d8
movq 0x390(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x180(%rsp), %rdi
leaq 0x190(%rsp), %rax
cmpq %rax, %rdi
je 0x23663
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x23663
movq %rax, %r13
jmp 0x2363f
jmp 0x235b5
movq %rax, %r13
jmp 0x2364c
jmp 0x235a5
movq %rax, %r13
movq 0x2e0(%rsp), %rdi
leaq 0x2f0(%rsp), %rax
cmpq %rax, %rdi
je 0x23659
movq 0x2f0(%rsp), %rsi
jmp 0x23592
jmp 0x235a5
movq %rax, %r13
movq 0x2c0(%rsp), %rdi
leaq 0x2d0(%rsp), %rax
cmpq %rax, %rdi
je 0x23659
movq 0x2d0(%rsp), %rsi
jmp 0x23592
movq %rax, %r13
movq 0x300(%rsp), %rdi
leaq 0x310(%rsp), %rax
cmpq %rax, %rdi
je 0x23659
movq 0x310(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x23659
jmp 0x235a5
jmp 0x235a5
jmp 0x235a5
movq %rax, %r13
jmp 0x23663
movq %rax, %r13
jmp 0x23732
movq %rax, %r13
jmp 0x23659
movq %rax, %r13
movq 0x320(%rsp), %rdi
leaq 0x330(%rsp), %rax
cmpq %rax, %rdi
je 0x23632
movq 0x330(%rsp), %rsi
jmp 0x23621
movq %rax, %r13
movq 0x340(%rsp), %rdi
leaq 0x350(%rsp), %rax
cmpq %rax, %rdi
je 0x23632
movq 0x350(%rsp), %rsi
jmp 0x23621
movq %rax, %r13
movq 0x360(%rsp), %rdi
leaq 0x370(%rsp), %rax
cmpq %rax, %rdi
je 0x23632
movq 0x370(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x23632
jmp 0x2362f
jmp 0x2362f
movq %rax, %r13
leaq 0x138(%rsp), %rdi
callq 0xd1ac
leaq 0x150(%rsp), %rdi
callq 0xd1ac
leaq 0x168(%rsp), %rdi
callq 0xd1ac
leaq 0x30(%rsp), %rdi
callq 0xd1ac
leaq 0x3a0(%rsp), %rdi
callq 0x1d50a
leaq 0x1b0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x23691
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x7420
leaq 0x5e0(%rsp), %rdi
callq 0xd1ac
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x236c3
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0xb0(%rsp), %rdi
leaq 0xc0(%rsp), %rax
cmpq %rax, %rdi
je 0x236e8
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x2370d
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x2372a
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
movq %rsp, %rdi
callq 0x168f6
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0x23749
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0x23766
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
leaq 0x1d0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x23787
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0xf0(%rsp), %rdi
leaq 0x100(%rsp), %rax
cmpq %rax, %rdi
je 0x237ac
movq 0x100(%rsp), %rsi
incq %rsi
callq 0x7420
movq %r13, %rdi
callq 0x7740