// File: /workspace/github_cpp_makefile_star2_O3/millanek[P]evo/process_vcf_filter.cpp
// Function: filterMain(int, char**)
int filterMain(int argc, char** argv) {
    parseFilterOptions(argc, argv);
    //std::ios_base::openmode mode = std::ios_base::in;
    string fileName = opt::vcfFile;
    string fileRoot = stripExtension(fileName);
    std::vector<int> depthsHetFailed;
    std::vector<int> depthsHetPassed;
    std::vector<int> numVariantsPerHetCount;
    std::vector<std::vector<int> > num_indiv_het_vs_depth;
    
    std::ofstream* statsFFile;
    std::ofstream* statsVarDepthFile;
    std::ofstream* statsStrandBiasFile;
    std::ofstream* statsVariantQualityFile;
    std::ofstream* statsSegregationMetricFile;
    
    // Collect some numbers about why variants were filtered out:
    int numTotalFilteredOut = 0;
    int numMultiallelic = 0; int numInvariant = 0;
    // SB - strand bias; OD - overall depth; OQ - overall quality; F - inbreeding coefficient;
    int numSB = 0; int numOD = 0; int numOQ = 0; int numF = 0; int numOQ_OD = 0; int numOQ_SB = 0; int numOQ_F = 0; int numSB_F = 0; int numSB_OD = 0; int numF_OD = 0;
    int numOQ_OD_F = 0; int numOQ_OD_SB = 0; int numOQ_SB_F = 0; int numSB_F_OD = 0; int numOQ_OD_F_SB = 0;
    
    
    
    if (opt::bStats) {
        statsFFile = new std::ofstream(fileRoot + ".inbreeding");
        statsVarDepthFile = new std::ofstream(fileRoot + ".varDepth");
        statsStrandBiasFile = new std::ofstream(fileRoot + ".strandBias");
        statsVariantQualityFile = new std::ofstream(fileRoot + ".varQual");
        statsSegregationMetricFile = new std::ofstream(fileRoot + ".SGB");
        std::cerr << "Getting statistics for variants from: " << fileName << " to help with setting filtering criteria" << std::endl;
    } else {
        std::cerr << "Filtering variants from: " << fileName << std::endl;
        std::cerr << "Minimum variant quality score (overall) set to: " << opt::min_overall_quality << std::endl;
        std::cerr << "Maximum read depth (overall) set to: " << opt::max_overall_depth << std::endl;
        std::cerr << "Minimum read depth (overall) set to: " << opt::min_overall_depth << std::endl;
        std::cerr << "Minimum copies for a variant (e.g. 1 for allowing singletons): " << opt::min_copies << std::endl;
        std::cerr << "Minimum read depth at the variant position: " << opt::min_depth_in_any_individual << std::endl;
        if (opt::bAllowMissingGenotpyes)
            std::cerr << "Genotypes for individuals with lower read depth at the variant position will be set to missing (./.)" << std::endl;
        if (opt::max_het_indiv < std::numeric_limits<int>::max())
            std::cerr << "Filter out sites where more than " << opt::max_het_indiv << " individuals are heterozygous"  << std::endl;
    }
    // Open connection to read from the vcf file
    // std::ifstream* inFile = new std::ifstream(fileName.c_str(), mode);
    std::istream* inFile = createReader(fileName.c_str());
    
    
    bool gotChromosomeNumber = false;
    int numChromosomes;
    string line;
    int totalVariantNumber = 0;
    while (getline(*inFile, line)) {
        if (line[0] == '#') {
            if (!opt::bStats) std::cout << line << std::endl;
        } else {
            double r = ((double) rand() / (RAND_MAX));
            if (r > opt::subsample) {
                continue;
            }
            totalVariantNumber++;
            if (totalVariantNumber % 100000 == 0) std::cerr << "Filtered " << totalVariantNumber << " variants" << std::endl;
            FilterResult result;
            std::vector<std::string> fields = split(line, '\t');
            if (!gotChromosomeNumber) {
                const std::vector<std::string>::size_type numSamples = fields.size() - NUM_NON_GENOTYPE_COLUMNS;
                numChromosomes = (int)numSamples * 2;
                std::cerr << "Number of chromosomes: " << numChromosomes << std::endl;
                numVariantsPerHetCount.assign(numSamples + 1, 0);
                gotChromosomeNumber = true;
            }
            result.overallQuality = stringToDouble(fields[5]);
            
            result.counts = getThisVariantCounts(fields);
            
            if (opt::bStats) {
                
                *statsFFile << result.counts.inbreedingCoefficient << std::endl;
                *statsVarDepthFile << result.counts.overallDepth << std::endl;
                if (!result.counts.FSpval.empty()) {
                    *statsStrandBiasFile << result.counts.FSpval << std::endl;
                } else if (!result.counts.MQSBpval.empty()) {
                    *statsStrandBiasFile << result.counts.MQSBpval << std::endl;
                }
                if (result.counts.SGB < std::numeric_limits<double>::max()) {
                    *statsSegregationMetricFile << result.counts.SGB << std::endl;
                }
                *statsVariantQualityFile << result.overallQuality << std::endl;
                if (totalVariantNumber >= 1000000)
                    exit(EXIT_SUCCESS);
                else
                    continue;
            }
            
            
            // Start filtering
            // 1) Throw away stuff that is not bi-allelic
            if (opt::bBiallelicFilter) {
                result.biallelicPassed = testBiallelic(fields[4]);
                if (!result.biallelicPassed) { result.biallelicPassed = false; numTotalFilteredOut++; numMultiallelic++; continue; }
            } else
                result.biallelicPassed = true;
            
            // 2) Filtering on overall quality
            if (result.overallQuality < opt::min_overall_quality)
                result.overallQualityPassed = false;
            
            // 3) Filtering on overall depth
            if (result.counts.overallDepth >= opt::min_overall_depth && result.counts.overallDepth <= opt::max_overall_depth) {
                result.overallDepthPassed = true;
            } else
                result.overallDepthPassed = false;
            
            // 4) Filtering on strand bias
            if (!result.counts.FSpval.empty()) {
                if (stringToDouble(result.counts.FSpval) > opt::max_FS)
                    result.strandBiasPassed = false;
            }
            
            if (!result.counts.MQSBpval.empty()) {
                if (stringToDouble(result.counts.MQSBpval) < opt::min_MQSB)
                    result.strandBiasPassed = false;
            }
            
            // 5) Filter on inbreeding coefficinet
            if (result.counts.inbreedingCoefficient < opt::min_F) {
                result.inbreedingCoeffPassed = false;
            }
            
            // 6) Filtering on the number of copies/allele frequency
            if (result.counts.overall <= (numChromosomes - opt::min_copies) && result.counts.overall >= opt::min_copies) {
                
            } else {
                numInvariant++; continue;
            }
            
            if (result.inbreedingCoeffPassed && result.overallDepthPassed && result.overallQualityPassed && result.strandBiasPassed) {
                std::cout << line << std::endl;
            } else {
                numTotalFilteredOut++;
                if (!result.inbreedingCoeffPassed && result.overallDepthPassed && result.overallQualityPassed && result.strandBiasPassed) {
                    numF++;
                } else if (result.inbreedingCoeffPassed && !result.overallDepthPassed && result.overallQualityPassed && result.strandBiasPassed) {
                    numOD++;
                } else if (result.inbreedingCoeffPassed && result.overallDepthPassed && !result.overallQualityPassed && result.strandBiasPassed) {
                    numOQ++;
                } else if (result.inbreedingCoeffPassed && result.overallDepthPassed && result.overallQualityPassed && !result.strandBiasPassed) {
                    numSB++;
                } else if (!result.inbreedingCoeffPassed && result.overallDepthPassed && !result.overallQualityPassed && result.strandBiasPassed) {
                    numOQ_F++;
                } else if (result.inbreedingCoeffPassed && !result.overallDepthPassed && !result.overallQualityPassed && result.strandBiasPassed) {
                    numOQ_OD++;
                } else if (result.inbreedingCoeffPassed && result.overallDepthPassed && !result.overallQualityPassed && !result.strandBiasPassed) {
                    numOQ_SB++;
                } else if (!result.inbreedingCoeffPassed && result.overallDepthPassed && result.overallQualityPassed && !result.strandBiasPassed) {
                    numSB_F++;
                } else if (result.inbreedingCoeffPassed && !result.overallDepthPassed && result.overallQualityPassed && !result.strandBiasPassed) {
                    numSB_OD++;
                } else if (!result.inbreedingCoeffPassed && !result.overallDepthPassed && result.overallQualityPassed && result.strandBiasPassed) {
                    numF_OD++;
                } else if (!result.inbreedingCoeffPassed && !result.overallDepthPassed && !result.overallQualityPassed && result.strandBiasPassed) {
                    numOQ_OD_F++;
                } else if (result.inbreedingCoeffPassed && !result.overallDepthPassed && !result.overallQualityPassed && !result.strandBiasPassed) {
                    numOQ_OD_SB++;
                } else if (!result.inbreedingCoeffPassed && result.overallDepthPassed && !result.overallQualityPassed && !result.strandBiasPassed) {
                    numOQ_SB_F++;
                } else if (!result.inbreedingCoeffPassed && !result.overallDepthPassed && result.overallQualityPassed && !result.strandBiasPassed) {
                    numSB_F_OD++;
                } else if (!result.inbreedingCoeffPassed && !result.overallDepthPassed && !result.overallQualityPassed && !result.strandBiasPassed) {
                    numOQ_OD_F_SB++;
                }
            }
            
            // 7) Filtering on per-individual criteria
            
            /*if (result.counts.minimumDepthInAnIndividual >= opt::min_depth_in_any_individual) {
                
            } else if (opt::bAllowMissingGenotpyes) {
                // Set genotypes to missing for individuals with too low coverage
                for (int i = NUM_NON_GENOTYPE_COLUMNS; i != fields.size(); i++) {
                    if (result.counts.depthPerIndividual[i-NUM_NON_GENOTYPE_COLUMNS] < opt::min_depth_in_any_individual) {
                        fields[i][0] = '.'; fields[i][2] = '.';
                    }
                }
                print_vector_stream(fields, std::cout,'\t');
            }
            */
            
        }
    }
    std::cerr << "Total variants filtered out: " << numTotalFilteredOut << std::endl;
    std::cerr << "Reasons for filtering:" << std::endl;
    std::cerr << "Not biallelic: " << numMultiallelic << std::endl;
    std::cerr << "Invariant (not polymorphic in called samples): " << numInvariant << std::endl;
    std::cerr << "Other reasons:" << std::endl;
    std::cerr << "SB - strand bias; OD - overall depth; OQ - overall quality; F - inbreeding coefficient" << std::endl;
    std::cerr << "OQ+OD+F+SB:\t" << numOQ_OD_F_SB << " (" << ((double)numOQ_OD_F_SB/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "OQ+OD+F: \t" << numOQ_OD_F << " (" << ((double)numOQ_OD_F/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "OQ+OD+SB: \t" << numOQ_OD_SB << " (" << ((double)numOQ_OD_SB/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "OQ+SB+F: \t" << numOQ_SB_F << " (" << ((double)numOQ_SB_F/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "SB+F+OD: \t" << numSB_F_OD << " (" << ((double)numSB_F_OD/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "OQ+OD: \t" << numOQ_OD << " (" << ((double)numOQ_OD/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "OQ+F: \t" << numOQ_F << " (" << ((double)numOQ_F/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "OQ+SB: \t" << numOQ_SB << " (" << ((double)numOQ_SB/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "SB+F: \t" << numSB_F << " (" << ((double)numSB_F/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "SB+OD: \t" << numSB_OD << " (" << ((double)numSB_OD/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "F+OD: \t" << numF_OD << " (" << ((double)numF_OD/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "OQ: \t" << numOQ << " (" << ((double)numOQ/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "SB: \t" << numSB << " (" << ((double)numSB/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "OD: \t" << numOD << " (" << ((double)numOD/numTotalFilteredOut)*100 << "%)" << std::endl;
    std::cerr << "F: \t" << numF << " (" << ((double)numF/numTotalFilteredOut)*100 << "%)" << std::endl;
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3b8, %rsp            # imm = 0x3B8
callq 0x6270a
leaq 0x1f8(%rsp), %r15
movq %r15, -0x10(%r15)
movq 0xa2bc3(%rip), %rsi     # 0x103298
movq 0xa2bc4(%rip), %rdx     # 0x1032a0
addq %rsi, %rdx
leaq 0x1e8(%rsp), %rbx
movq %rbx, %rdi
callq 0x2ba06
leaq 0x1c8(%rsp), %rdi
movq %rbx, %rsi
callq 0x4d82f
xorpd %xmm0, %xmm0
movapd %xmm0, 0x280(%rsp)
xorl %eax, %eax
movq %rax, 0x290(%rsp)
movq %rax, 0x2b0(%rsp)
movapd %xmm0, 0x2a0(%rsp)
cmpb $0x1, 0xa2b8a(%rip)     # 0x1032b8
jne 0x609e0
movl $0x200, %edi            # imm = 0x200
callq 0x8470
movq %rax, 0x1a0(%rsp)
leaq 0x70(%rsp), %r14
movq %r14, -0x10(%r14)
movq 0x1c8(%rsp), %rsi
movq 0x1d0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x60(%rsp), %rdi
callq 0x2ba06
leaq 0x72675(%rip), %rsi     # 0xd2de8
leaq 0x60(%rsp), %rdi
callq 0x88c0
leaq 0x60(%rsp), %rsi
movq 0x1a0(%rsp), %rdi
movl $0x10, %edx
callq 0x88d0
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x607ab
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
movl $0x200, %edi            # imm = 0x200
callq 0x8470
movq %rax, 0x198(%rsp)
leaq 0x60(%rsp), %rdi
movq %r14, (%rdi)
movq 0x1c8(%rsp), %rsi
movq 0x1d0(%rsp), %rdx
addq %rsi, %rdx
callq 0x2ba06
leaq 0x72610(%rip), %rsi     # 0xd2df4
leaq 0x60(%rsp), %rdi
callq 0x88c0
leaq 0x60(%rsp), %rsi
movq 0x198(%rsp), %rdi
movl $0x10, %edx
callq 0x88d0
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x6081c
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
movl $0x200, %edi            # imm = 0x200
callq 0x8470
movq %rax, 0x58(%rsp)
leaq 0x60(%rsp), %rdi
movq %r14, (%rdi)
movq 0x1c8(%rsp), %rsi
movq 0x1d0(%rsp), %rdx
addq %rsi, %rdx
callq 0x2ba06
leaq 0x725ac(%rip), %rsi     # 0xd2dfe
leaq 0x60(%rsp), %rdi
callq 0x88c0
leaq 0x60(%rsp), %rsi
movq 0x58(%rsp), %rdi
movl $0x10, %edx
callq 0x88d0
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x60887
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
movl $0x200, %edi            # imm = 0x200
callq 0x8470
movq %rax, 0x190(%rsp)
leaq 0x60(%rsp), %rdi
movq %r14, (%rdi)
movq 0x1c8(%rsp), %rsi
movq 0x1d0(%rsp), %rdx
addq %rsi, %rdx
callq 0x2ba06
leaq 0x7254a(%rip), %rsi     # 0xd2e0a
leaq 0x60(%rsp), %rdi
callq 0x88c0
leaq 0x60(%rsp), %rsi
movq 0x190(%rsp), %rdi
movl $0x10, %edx
callq 0x88d0
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x608f8
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
movl $0x200, %edi            # imm = 0x200
callq 0x8470
movq %rax, 0x188(%rsp)
leaq 0x60(%rsp), %rdi
movq %r14, (%rdi)
movq 0x1c8(%rsp), %rsi
movq 0x1d0(%rsp), %rdx
addq %rsi, %rdx
callq 0x2ba06
leaq 0x724e2(%rip), %rsi     # 0xd2e13
leaq 0x60(%rsp), %rdi
callq 0x88c0
leaq 0x60(%rsp), %rsi
movq 0x188(%rsp), %rdi
movl $0x10, %edx
callq 0x88d0
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x60969
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0xa1678(%rip), %rdi     # 0x101fe8
leaq 0x724a1(%rip), %rsi     # 0xd2e18
movl $0x26, %edx
callq 0x84e0
movq 0x1e8(%rsp), %rsi
movq 0x1f0(%rsp), %rdx
movq 0xa1650(%rip), %rdi     # 0x101fe8
callq 0x84e0
movq %rax, %rbx
leaq 0x72498(%rip), %rsi     # 0xd2e3f
movl $0x28, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
jmp 0x60ca5
movq 0xa1601(%rip), %rdi     # 0x101fe8
leaq 0x7247a(%rip), %rsi     # 0xd2e68
movl $0x19, %edx
callq 0x84e0
movq 0x1e8(%rsp), %rsi
movq 0x1f0(%rsp), %rdx
movq 0xa15d9(%rip), %rdi     # 0x101fe8
callq 0x84e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa15a3(%rip), %rdi     # 0x101fe8
leaq 0x72436(%rip), %rsi     # 0xd2e82
movl $0x30, %edx
callq 0x84e0
movl 0xa1ac4(%rip), %esi     # 0x102520
movq 0xa1585(%rip), %rdi     # 0x101fe8
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa154f(%rip), %rdi     # 0x101fe8
leaq 0x72413(%rip), %rsi     # 0xd2eb3
movl $0x25, %edx
callq 0x84e0
movl 0xa1a74(%rip), %esi     # 0x102524
movq 0xa1531(%rip), %rdi     # 0x101fe8
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa14fb(%rip), %rdi     # 0x101fe8
leaq 0x723e5(%rip), %rsi     # 0xd2ed9
movl $0x25, %edx
callq 0x84e0
movl 0xa27b8(%rip), %esi     # 0x1032bc
movq 0xa14dd(%rip), %rdi     # 0x101fe8
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa14a7(%rip), %rdi     # 0x101fe8
leaq 0x723b7(%rip), %rsi     # 0xd2eff
movl $0x3f, %edx
callq 0x84e0
movl 0xa19d0(%rip), %esi     # 0x102528
movq 0xa1489(%rip), %rdi     # 0x101fe8
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa1453(%rip), %rdi     # 0x101fe8
leaq 0x723a3(%rip), %rsi     # 0xd2f3f
movl $0x2c, %edx
callq 0x84e0
movl 0xa2714(%rip), %esi     # 0x1032c0
movq 0xa1435(%rip), %rdi     # 0x101fe8
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
cmpb $0x1, 0xa26db(%rip)     # 0x1032c4
jne 0x60c31
movq 0xa13f6(%rip), %rbx     # 0x101fe8
leaq 0x72373(%rip), %rsi     # 0xd2f6c
movl $0x64, %edx
movq %rbx, %rdi
callq 0x84e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xa13c4(%rip), %rdi     # 0x101fe8
callq 0x8040
movq %rax, %rdi
callq 0x8300
cmpl $0x7fffffff, 0xa18f1(%rip) # imm = 0x7FFFFFFF
je 0x60ca5
movq 0xa13a4(%rip), %rdi     # 0x101fe8
leaq 0x72386(%rip), %rsi     # 0xd2fd1
movl $0x21, %edx
callq 0x84e0
movl 0xa18d1(%rip), %esi     # 0x10252c
movq 0xa1386(%rip), %rdi     # 0x101fe8
callq 0x8810
movq %rax, %rbx
leaq 0x72382(%rip), %rsi     # 0xd2ff3
movl $0x1d, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x1e8(%rsp), %rsi
leaq 0x60(%rsp), %rdi
leaq 0x2b8(%rsp), %rdx
callq 0x287de
leaq 0x60(%rsp), %rdi
movl $0x8, %esi
callq 0x500af
movq %rax, %rbp
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x60cec
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x1b8(%rsp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x68(%rsp), %r12
movl $0x0, 0x10(%rsp)
movl $0x0, 0x50(%rsp)
movl $0x0, 0x54(%rsp)
movl $0x0, 0x40(%rsp)
movl $0x0, 0x48(%rsp)
movl $0x0, 0x44(%rsp)
movl $0x0, 0x4c(%rsp)
movl $0x0, 0x24(%rsp)
movl $0x0, 0x2c(%rsp)
movl $0x0, 0x20(%rsp)
movl $0x0, 0x18(%rsp)
movl $0x0, 0x14(%rsp)
movl $0x0, 0x3c(%rsp)
movl $0x0, 0x28(%rsp)
movl $0x0, 0x34(%rsp)
movl $0x0, 0x30(%rsp)
movl $0x0, 0x1c(%rsp)
movl $0x0, 0x38(%rsp)
xorl %ebx, %ebx
xorl %r13d, %r13d
movl %r13d, %r14d
movq (%rbp), %rax
movq -0x18(%rax), %rdi
addq %rbp, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %edx
movq %rbp, %rdi
leaq 0x1a8(%rsp), %rsi
callq 0x8870
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x618ef
movq 0x1a8(%rsp), %rsi
cmpb $0x23, (%rsi)
jne 0x60e39
cmpb $0x0, 0xa24ca(%rip)     # 0x1032b8
movl %r14d, %r13d
jne 0x60d9d
movq 0x1b0(%rsp), %rdx
movq 0xa11b6(%rip), %rdi     # 0x101fb8
callq 0x84e0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %r15, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movl %r14d, %r13d
jmp 0x60d9d
callq 0x8140
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
divsd 0x6f4d3(%rip), %xmm0    # 0xd0320
ucomisd 0xa16db(%rip), %xmm0    # 0x102530
movl %r14d, %r13d
ja 0x60d9d
leal 0x1(%r14), %r13d
imull $0xbcbe61d, %r14d, %eax # imm = 0xBCBE61D
addl $0xbd6625d, %eax        # imm = 0xBD6625D
rorl $0x5, %eax
cmpl $0xa7c4, %eax           # imm = 0xA7C4
ja 0x60edd
movl $0x9, %edx
movq 0xa1164(%rip), %rdi     # 0x101fe8
leaq 0x72186(%rip), %rsi     # 0xd3011
callq 0x84e0
movq 0xa1151(%rip), %rdi     # 0x101fe8
movl %r13d, %esi
callq 0x8810
movq %rax, %r15
movl $0x9, %edx
movq %rax, %rdi
leaq 0x76c1e(%rip), %rsi     # 0xd7acf
callq 0x84e0
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %r15, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movaps 0x70e6c(%rip), %xmm0    # 0xd1d50
movaps %xmm0, 0x60(%rsp)
xorl %ecx, %ecx
movl %ecx, 0x70(%rsp)
leaq 0x88(%rsp), %rax
movq %rax, 0x78(%rsp)
movq %rcx, 0x80(%rsp)
movb %cl, 0x88(%rsp)
leaq 0xa8(%rsp), %rax
movq %rax, 0x98(%rsp)
movq %rcx, 0xa0(%rsp)
movb %cl, 0xa8(%rsp)
movsd 0x6adee(%rip), %xmm0    # 0xcbd20
movupd %xmm0, 0xb8(%rsp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, 0xc8(%rsp)
movb %cl, 0xd0(%rsp)
movq %rcx, 0x148(%rsp)
movl %ecx, 0x150(%rsp)
movq %rcx, 0x158(%rsp)
movw $0x0, 0x160(%rsp)
xorpd %xmm0, %xmm0
movupd %xmm0, 0xcc(%r12)
movupd %xmm0, 0xc0(%r12)
movupd %xmm0, 0xb0(%r12)
movupd %xmm0, 0xa0(%r12)
movupd %xmm0, 0x90(%r12)
movupd %xmm0, 0x80(%r12)
movupd %xmm0, 0x70(%r12)
movw $0x101, 0x168(%rsp)     # imm = 0x101
leaq 0x208(%rsp), %rdi
leaq 0x1a8(%rsp), %rsi
movl $0x9, %edx
callq 0x4d650
testb $0x1, %bl
jne 0x6107e
movq 0x210(%rsp), %r15
subq 0x208(%rsp), %r15
movl $0x17, %edx
movq 0xa0fe3(%rip), %rdi     # 0x101fe8
leaq 0x70ed7(%rip), %rsi     # 0xd1ee3
callq 0x84e0
sarq $0x5, %r15
leal -0x12(,%r15,2), %esi
movq 0xa0fc4(%rip), %rdi     # 0x101fe8
movl %esi, 0x8(%rsp)
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
addq $-0x8, %r15
movl $0x0, 0x2b8(%rsp)
leaq 0x280(%rsp), %rdi
movq %r15, %rsi
leaq 0x2b8(%rsp), %rdx
callq 0x56106
movq 0x208(%rsp), %rax
leaq 0x270(%rsp), %rcx
movq %rcx, 0x260(%rsp)
movq 0xa0(%rax), %rsi
movq 0xa8(%rax), %rdx
addq %rsi, %rdx
leaq 0x260(%rsp), %rdi
callq 0x2ba06
leaq 0x260(%rsp), %rdi
callq 0x4d578
cvttsd2si %xmm0, %eax
movl %eax, 0x60(%rsp)
movq 0x260(%rsp), %rdi
leaq 0x270(%rsp), %rax
cmpq %rax, %rdi
leaq 0x2c8(%rsp), %rbx
je 0x610f6
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x2b8(%rsp), %rdi
leaq 0x208(%rsp), %rsi
callq 0x4e40d
movl 0x2c0(%rsp), %eax
movl %eax, 0x8(%r12)
movq 0x2b8(%rsp), %rax
movq %rax, (%r12)
leaq 0x78(%rsp), %rdi
movq %rbx, %rsi
callq 0x8540
leaq 0x98(%rsp), %rdi
leaq 0x2e8(%rsp), %rsi
callq 0x8540
movups 0x40(%rbx), %xmm0
movups 0x49(%rbx), %xmm1
movups %xmm0, 0x50(%r12)
movups %xmm1, 0x59(%r12)
movq 0xd8(%rsp), %rdi
movq 0xe8(%rsp), %rsi
movups 0x328(%rsp), %xmm0
movups %xmm0, 0xd8(%rsp)
movq 0x338(%rsp), %rax
movq %rax, 0xe8(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, 0x60(%rbx)
movq $0x0, 0x70(%rbx)
testq %rdi, %rdi
je 0x611a5
subq %rdi, %rsi
callq 0x8480
movq 0xf0(%rsp), %rdi
movq 0x100(%rsp), %rsi
movups 0x340(%rsp), %xmm0
movaps %xmm0, 0xf0(%rsp)
movq 0x350(%rsp), %rax
movq %rax, 0x100(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, 0x78(%rbx)
movq $0x0, 0x88(%rbx)
testq %rdi, %rdi
je 0x611f4
subq %rdi, %rsi
callq 0x8480
movq 0x108(%rsp), %rdi
movq 0x118(%rsp), %rsi
movups 0x358(%rsp), %xmm0
movups %xmm0, 0x108(%rsp)
movq 0x368(%rsp), %rax
movq %rax, 0x118(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, 0x90(%rbx)
movq $0x0, 0xa0(%rbx)
testq %rdi, %rdi
je 0x61246
subq %rdi, %rsi
callq 0x8480
movq 0x120(%rsp), %rdi
movq 0x130(%rsp), %rsi
movups 0x370(%rsp), %xmm0
movaps %xmm0, 0x120(%rsp)
movq 0x380(%rsp), %rax
movq %rax, 0x130(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, 0xa8(%rbx)
movq $0x0, 0xb8(%rbx)
testq %rdi, %rdi
je 0x61298
subq %rdi, %rsi
callq 0x8480
movq 0x138(%rsp), %rdi
testq %rdi, %rdi
je 0x612cc
movq 0x158(%rsp), %rsi
subq %rdi, %rsi
callq 0x8480
movq $0x0, 0x138(%rsp)
movl $0x0, 0x140(%rsp)
movq 0xe0(%rbx), %rax
movq %rax, 0xf0(%r12)
movupd 0xc0(%rbx), %xmm0
movupd 0xd0(%rbx), %xmm1
movupd %xmm1, 0xe0(%r12)
movupd %xmm0, 0xd0(%r12)
xorl %eax, %eax
movq %rax, 0x388(%rsp)
movl %eax, 0x390(%rsp)
movq %rax, 0x398(%rsp)
movl %eax, 0x3a0(%rsp)
movq %rax, 0x3a8(%rsp)
movzwl 0x3b0(%rsp), %eax
movw %ax, 0x160(%rsp)
leaq 0x2b8(%rsp), %rdi
callq 0x2e6d0
cmpb $0x1, 0xa1f6d(%rip)     # 0x1032b8
jne 0x61408
movsd 0xc0(%rsp), %xmm0
movq 0x1a0(%rsp), %rdi
callq 0x8730
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movl 0x70(%rsp), %esi
movq 0x198(%rsp), %rdi
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x80(%rsp), %rdx
testq %rdx, %rdx
je 0x6165d
movq 0x78(%rsp), %rsi
movq 0x58(%rsp), %rdi
callq 0x84e0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x8450
jmp 0x61693
cmpb $0x0, 0xa1eb6(%rip)     # 0x1032c5
je 0x6141b
movb $0x1, 0x168(%rsp)
jmp 0x6143b
movq 0x208(%rsp), %rdi
subq $-0x80, %rdi
callq 0x4f891
movb %al, 0x168(%rsp)
testb %al, %al
je 0x6173d
movl 0x60(%rsp), %eax
cmpl 0xa10db(%rip), %eax     # 0x102520
jge 0x6144c
movb $0x0, 0x64(%rsp)
movl 0x70(%rsp), %eax
cmpl 0xa1e66(%rip), %eax     # 0x1032bc
setge %cl
cmpl 0xa10c5(%rip), %eax     # 0x102524
setle %al
andb %cl, %al
movb %al, 0x65(%rsp)
movq 0x80(%rsp), %rdx
testq %rdx, %rdx
je 0x61507
leaq 0x250(%rsp), %rax
movq %rax, 0x240(%rsp)
movq 0x78(%rsp), %rsi
addq %rsi, %rdx
leaq 0x240(%rsp), %rdi
callq 0x2ba06
leaq 0x240(%rsp), %rdi
callq 0x4d578
movsd 0xa1085(%rip), %xmm1    # 0x102538
movq 0x240(%rsp), %rdi
leaq 0x250(%rsp), %rax
cmpq %rax, %rdi
je 0x614fc
movq 0x250(%rsp), %rsi
incq %rsi
movsd %xmm0, 0x180(%rsp)
movsd %xmm1, 0x178(%rsp)
callq 0x8480
movsd 0x178(%rsp), %xmm1
movsd 0x180(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x61507
movb $0x0, 0x66(%rsp)
movq 0xa0(%rsp), %rdx
testq %rdx, %rdx
je 0x615a9
leaq 0x230(%rsp), %rax
movq %rax, 0x220(%rsp)
movq 0x98(%rsp), %rsi
addq %rsi, %rdx
leaq 0x220(%rsp), %rdi
callq 0x2ba06
leaq 0x220(%rsp), %rdi
callq 0x4d578
movsd 0xa1d73(%rip), %xmm1    # 0x1032c8
movq 0x220(%rsp), %rdi
leaq 0x230(%rsp), %rax
cmpq %rax, %rdi
je 0x6159e
movq 0x230(%rsp), %rsi
incq %rsi
movsd %xmm0, 0x180(%rsp)
movsd %xmm1, 0x178(%rsp)
callq 0x8480
movsd 0x178(%rsp), %xmm1
movsd 0x180(%rsp), %xmm0
ucomisd %xmm0, %xmm1
jbe 0x615a9
movb $0x0, 0x66(%rsp)
movsd 0xa0f8f(%rip), %xmm0    # 0x102540
ucomisd 0xc0(%rsp), %xmm0
jbe 0x615c1
movb $0x0, 0x67(%rsp)
movl 0x68(%rsp), %eax
movl 0xa0f5d(%rip), %ecx     # 0x102528
cmpl %ecx, %eax
jl 0x61654
movl 0x8(%rsp), %edx
subl %ecx, %edx
cmpl %edx, %eax
jg 0x61654
cmpb $0x1, 0x67(%rsp)
jne 0x61769
cmpb $0x1, 0x65(%rsp)
jne 0x61789
cmpb $0x1, 0x64(%rsp)
jne 0x617b2
cmpb $0x1, 0x66(%rsp)
jne 0x617b2
movq 0x1a8(%rsp), %rsi
movq 0x1b0(%rsp), %rdx
movq 0xa0998(%rip), %rdi     # 0x101fb8
callq 0x84e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
jmp 0x6174d
incl 0x54(%rsp)
jmp 0x6174d
movq 0xa0(%rsp), %rdx
testq %rdx, %rdx
je 0x616a6
movq 0x98(%rsp), %rsi
movq 0x58(%rsp), %rdi
callq 0x84e0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %r15, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movsd 0xb8(%rsp), %xmm0
movsd 0x6a669(%rip), %xmm1    # 0xcbd20
ucomisd %xmm0, %xmm1
jbe 0x616f4
movq 0x188(%rsp), %rdi
callq 0x8730
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movl 0x60(%rsp), %esi
movq 0x190(%rsp), %rdi
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
cmpl $0xf423f, %r14d         # imm = 0xF423F
jl 0x6174d
jmp 0x62494
movb $0x0, 0x168(%rsp)
incl 0x10(%rsp)
incl 0x50(%rsp)
leaq 0x208(%rsp), %rdi
callq 0x2e784
movq %r12, %rdi
callq 0x2e6d0
movb $0x1, %bl
jmp 0x60d9d
incl 0x10(%rsp)
movb 0x64(%rsp), %al
cmpb $0x1, 0x65(%rsp)
jne 0x617a1
testb %al, %al
je 0x617ca
cmpb $0x1, 0x66(%rsp)
jne 0x617ca
incl 0x4c(%rsp)
jmp 0x6174d
incl 0x10(%rsp)
cmpb $0x1, 0x64(%rsp)
jne 0x617e1
cmpb $0x1, 0x66(%rsp)
jne 0x617e1
incl 0x48(%rsp)
jmp 0x6174d
testb %al, %al
je 0x61800
cmpb $0x1, 0x66(%rsp)
jne 0x61800
incl 0x3c(%rsp)
jmp 0x6174d
incl 0x10(%rsp)
cmpb $0x0, 0x64(%rsp)
jne 0x6181f
cmpb $0x1, 0x66(%rsp)
jne 0x6181f
incl 0x44(%rsp)
jmp 0x6174d
cmpb $0x0, 0x64(%rsp)
jne 0x6184d
cmpb $0x1, 0x66(%rsp)
jne 0x6184d
incl 0x20(%rsp)
jmp 0x6174d
cmpb $0x0, 0x64(%rsp)
jne 0x61877
cmpb $0x1, 0x66(%rsp)
jne 0x61877
incl 0x24(%rsp)
jmp 0x6174d
cmpb $0x0, 0x64(%rsp)
jne 0x618a1
cmpb $0x1, 0x66(%rsp)
jne 0x618a1
incl 0x28(%rsp)
jmp 0x6174d
cmpb $0x1, 0x64(%rsp)
jne 0x61831
cmpb $0x0, 0x66(%rsp)
je 0x618cb
cmpb $0x0, 0x64(%rsp)
jne 0x6174d
movzbl 0x66(%rsp), %eax
xorl $0x1, %eax
addl %eax, 0x2c(%rsp)
jmp 0x6174d
cmpb $0x1, 0x64(%rsp)
jne 0x6185b
cmpb $0x0, 0x66(%rsp)
je 0x618d4
cmpb $0x0, 0x64(%rsp)
jne 0x6174d
movzbl 0x66(%rsp), %eax
xorl $0x1, %eax
addl %eax, 0x30(%rsp)
jmp 0x6174d
cmpb $0x1, 0x64(%rsp)
jne 0x61885
cmpb $0x0, 0x66(%rsp)
je 0x618dd
cmpb $0x0, 0x64(%rsp)
jne 0x6174d
movzbl 0x66(%rsp), %eax
xorl $0x1, %eax
addl %eax, 0x34(%rsp)
jmp 0x6174d
cmpb $0x1, 0x64(%rsp)
jne 0x618af
cmpb $0x0, 0x66(%rsp)
je 0x618e6
cmpb $0x0, 0x64(%rsp)
jne 0x6174d
movzbl 0x66(%rsp), %eax
xorl $0x1, %eax
addl %eax, 0x38(%rsp)
jmp 0x6174d
incl 0x40(%rsp)
jmp 0x6174d
incl 0x18(%rsp)
jmp 0x6174d
incl 0x14(%rsp)
jmp 0x6174d
incl 0x1c(%rsp)
jmp 0x6174d
movq 0xa06f2(%rip), %rdi     # 0x101fe8
leaq 0x7171e(%rip), %rsi     # 0xd301b
movl $0x1d, %edx
leaq 0x1b8(%rsp), %r14
callq 0x84e0
movl 0x4c(%rsp), %ebp
movl 0x48(%rsp), %r15d
movl 0x40(%rsp), %r12d
movl 0x44(%rsp), %r13d
movq 0xa06bf(%rip), %rdi     # 0x101fe8
movl 0x10(%rsp), %esi
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa0685(%rip), %rbx     # 0x101fe8
leaq 0x716cf(%rip), %rsi     # 0xd3039
movl $0x16, %edx
movq %rbx, %rdi
callq 0x84e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xa0653(%rip), %rdi     # 0x101fe8
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa063f(%rip), %rdi     # 0x101fe8
leaq 0x716a0(%rip), %rsi     # 0xd3050
movl $0xf, %edx
callq 0x84e0
movq 0xa0627(%rip), %rdi     # 0x101fe8
movl 0x50(%rsp), %esi
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa05ed(%rip), %rdi     # 0x101fe8
leaq 0x7165e(%rip), %rsi     # 0xd3060
movl $0x2f, %edx
callq 0x84e0
movq 0xa05d5(%rip), %rdi     # 0x101fe8
movl 0x54(%rsp), %esi
callq 0x8810
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa059b(%rip), %rbx     # 0x101fe8
leaq 0x7163c(%rip), %rsi     # 0xd3090
movl $0xe, %edx
movq %rbx, %rdi
callq 0x84e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xa0569(%rip), %rdi     # 0x101fe8
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa0555(%rip), %rbx     # 0x101fe8
leaq 0x71605(%rip), %rsi     # 0xd309f
movl $0x56, %edx
movq %rbx, %rdi
callq 0x84e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xa0523(%rip), %rdi     # 0x101fe8
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa050f(%rip), %rdi     # 0x101fe8
leaq 0x71616(%rip), %rsi     # 0xd30f6
movl $0xc, %edx
callq 0x84e0
movq 0xa04f7(%rip), %rdi     # 0x101fe8
movl 0x38(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x715ff(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
cvtsi2sdl 0x38(%rsp), %xmm0
cvtsi2sdl 0x10(%rsp), %xmm1
movsd %xmm1, 0x8(%rsp)
divsd %xmm1, %xmm0
mulsd 0x6e051(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x764d6(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa046c(%rip), %rdi     # 0x101fe8
leaq 0x71583(%rip), %rsi     # 0xd3106
movl $0xa, %edx
callq 0x84e0
movq 0xa0454(%rip), %rdi     # 0x101fe8
movl 0x28(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x7155c(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x28(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6dfb5(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x7643a(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa03d0(%rip), %rdi     # 0x101fe8
leaq 0x714f2(%rip), %rsi     # 0xd3111
movl $0xb, %edx
callq 0x84e0
movq 0xa03b8(%rip), %rdi     # 0x101fe8
movl 0x34(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x714c0(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x34(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6df19(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x7639e(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa0334(%rip), %rdi     # 0x101fe8
leaq 0x71462(%rip), %rsi     # 0xd311d
movl $0xa, %edx
callq 0x84e0
movq 0xa031c(%rip), %rdi     # 0x101fe8
movl 0x30(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x71424(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x30(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6de7d(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x76302(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa0298(%rip), %rdi     # 0x101fe8
leaq 0x713d1(%rip), %rsi     # 0xd3128
movl $0xa, %edx
callq 0x84e0
movq 0xa0280(%rip), %rdi     # 0x101fe8
movl 0x1c(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x71388(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x1c(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6dde1(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x76266(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa01fc(%rip), %rdi     # 0x101fe8
leaq 0x71340(%rip), %rsi     # 0xd3133
movl $0x8, %edx
callq 0x84e0
movq 0xa01e4(%rip), %rdi     # 0x101fe8
movl 0x24(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x712ec(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x24(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6dd45(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x761ca(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa0160(%rip), %rdi     # 0x101fe8
leaq 0x712ad(%rip), %rsi     # 0xd313c
movl $0x7, %edx
callq 0x84e0
movq 0xa0148(%rip), %rdi     # 0x101fe8
movl 0x20(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x71250(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x20(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6dca9(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x7612e(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa00c4(%rip), %rdi     # 0x101fe8
leaq 0x71219(%rip), %rsi     # 0xd3144
movl $0x8, %edx
callq 0x84e0
movq 0xa00ac(%rip), %rdi     # 0x101fe8
movl 0x2c(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x711b4(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x2c(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6dc0d(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x76092(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xa0028(%rip), %rdi     # 0x101fe8
leaq 0x71159(%rip), %rsi     # 0xd3120
movl $0x7, %edx
callq 0x84e0
movq 0xa0010(%rip), %rdi     # 0x101fe8
movl 0x18(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x71118(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x18(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6db71(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x75ff6(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x9ff8c(%rip), %rdi     # 0x101fe8
leaq 0x710ea(%rip), %rsi     # 0xd314d
movl $0x8, %edx
callq 0x84e0
movq 0x9ff74(%rip), %rdi     # 0x101fe8
movl 0x14(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x7107c(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x14(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6dad5(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x75f5a(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x9fef0(%rip), %rdi     # 0x101fe8
leaq 0x7102c(%rip), %rsi     # 0xd312b
movl $0x7, %edx
callq 0x84e0
movq 0x9fed8(%rip), %rdi     # 0x101fe8
movl 0x3c(%rsp), %esi
callq 0x8810
movq %rax, %rbx
leaq 0x70fe0(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sdl 0x3c(%rsp), %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6da39(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x75ebe(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x9fe54(%rip), %rdi     # 0x101fe8
leaq 0x70fbb(%rip), %rsi     # 0xd3156
movl $0x5, %edx
callq 0x84e0
movq 0x9fe3c(%rip), %rdi     # 0x101fe8
movl %r13d, %esi
callq 0x8810
movq %rax, %rbx
leaq 0x70f45(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sd %r13d, %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6d99f(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x75e24(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x9fdba(%rip), %rdi     # 0x101fe8
leaq 0x70ee2(%rip), %rsi     # 0xd3117
movl $0x5, %edx
callq 0x84e0
movq 0x9fda2(%rip), %rdi     # 0x101fe8
movl %r12d, %esi
callq 0x8810
movq %rax, %rbx
leaq 0x70eab(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sd %r12d, %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6d905(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x75d8a(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x9fd20(%rip), %rdi     # 0x101fe8
leaq 0x70e81(%rip), %rsi     # 0xd3150
movl $0x5, %edx
callq 0x84e0
movq 0x9fd08(%rip), %rdi     # 0x101fe8
movl %r15d, %esi
callq 0x8810
movq %rax, %rbx
leaq 0x70e11(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sd %r15d, %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6d86b(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x75cf0(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x9fc86(%rip), %rdi     # 0x101fe8
leaq 0x70dba(%rip), %rsi     # 0xd3123
movl $0x4, %edx
callq 0x84e0
movq 0x9fc6e(%rip), %rdi     # 0x101fe8
movl %ebp, %esi
callq 0x8810
movq %rax, %rbx
leaq 0x70d78(%rip), %rsi     # 0xd3103
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
xorps %xmm0, %xmm0
cvtsi2sd %ebp, %xmm0
divsd 0x8(%rsp), %xmm0
mulsd 0x6d7d3(%rip), %xmm0    # 0xcfb80
movq %rbx, %rdi
callq 0x8730
movq %rax, %rbx
leaq 0x75c58(%rip), %rsi     # 0xd8017
movl $0x2, %edx
movq %rax, %rdi
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x1a8(%rsp), %rdi
cmpq %r14, %rdi
je 0x62410
movq 0x1b8(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x2a0(%rsp), %rdi
callq 0x480b0
movq 0x280(%rsp), %rdi
testq %rdi, %rdi
leaq 0x1f8(%rsp), %rbx
je 0x62442
movq 0x290(%rsp), %rsi
subq %rdi, %rsi
callq 0x8480
leaq 0x1d8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x62463
movq 0x1d8(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x1e8(%rsp), %rdi
cmpq %rbx, %rdi
je 0x62480
movq 0x1f8(%rsp), %rsi
incq %rsi
callq 0x8480
xorl %eax, %eax
addq $0x3b8, %rsp            # imm = 0x3B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
xorl %edi, %edi
callq 0x8530
jmp 0x6249d
movq %rax, %rbx
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x624bc
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x624bc
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x188(%rsp), %rdi
jmp 0x62695
jmp 0x624d0
movq %rax, %rbx
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x624ef
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x624ef
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x190(%rsp), %rdi
jmp 0x62695
jmp 0x62503
movq %rax, %rbx
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x62522
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x62522
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x58(%rsp), %rdi
jmp 0x62695
jmp 0x62533
movq %rax, %rbx
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x62552
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x62552
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x198(%rsp), %rdi
jmp 0x62695
jmp 0x62566
movq %rax, %rbx
movq 0x60(%rsp), %rdi
cmpq %r14, %rdi
je 0x62585
movq 0x70(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x62585
movq %rax, %rbx
movl $0x200, %esi            # imm = 0x200
movq 0x1a0(%rsp), %rdi
jmp 0x62695
movq %rax, %rbx
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x6269a
movq 0x70(%rsp), %rsi
jmp 0x62692
jmp 0x6263e
movq %rax, %rbx
jmp 0x626e5
movq %rax, %rbx
movq 0x240(%rsp), %rdi
leaq 0x250(%rsp), %rax
cmpq %rax, %rdi
je 0x62646
movq 0x250(%rsp), %rsi
jmp 0x62630
movq %rax, %rbx
movq 0x220(%rsp), %rdi
leaq 0x230(%rsp), %rax
cmpq %rax, %rdi
je 0x62646
movq 0x230(%rsp), %rsi
jmp 0x62630
jmp 0x62643
jmp 0x62643
movq %rax, %rbx
jmp 0x62653
movq %rax, %rbx
movq 0x260(%rsp), %rdi
leaq 0x270(%rsp), %rax
cmpq %rax, %rdi
je 0x62646
movq 0x270(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x62646
jmp 0x62665
jmp 0x62643
movq %rax, %rbx
jmp 0x6269a
movq %rax, %rbx
leaq 0x208(%rsp), %rdi
callq 0x2e784
leaq 0x1b8(%rsp), %r14
movq %r12, %rdi
callq 0x2e6d0
jmp 0x62675
movq %rax, %rbx
leaq 0x1b8(%rsp), %r14
jmp 0x62675
movq %rax, %rbx
movq 0x1a8(%rsp), %rdi
cmpq %r14, %rdi
leaq 0x1f8(%rsp), %r15
je 0x6269a
movq 0x1b8(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x2a0(%rsp), %rdi
callq 0x480b0
movq 0x280(%rsp), %rdi
testq %rdi, %rdi
je 0x626c4
movq 0x290(%rsp), %rsi
subq %rdi, %rsi
callq 0x8480
leaq 0x1d8(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x626e5
movq 0x1d8(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x1e8(%rsp), %rdi
cmpq %r15, %rdi
je 0x62702
movq 0x1f8(%rsp), %rsi
incq %rsi
callq 0x8480
movq %rbx, %rdi
callq 0x8840