// File: drarwood[P]gags/PhenotypeProcessor.cpp
// Function: ReadPhenotypeFileMinusExclusions(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, std::vector<double, std::allocator<double>>&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, double, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, double>>>&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, int, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const, int>>>&)
void ReadPhenotypeFileMinusExclusions(string f, vector<string>& i, vector<double>& v, map<string,double>& m, map<string,int>& e) {
    string line, id, pheno;
    ifstream inFile(f.c_str());
    if (inFile.is_open()) {
        getline (inFile, line); // skip header
        while (inFile.good()) {
            getline (inFile, line);
            if (!line.empty()) {
                istringstream iss;
                iss.str(line);
                iss >> id;
                iss >> pheno;
                if (pheno != "NA" && e.find(id) == e.end()) {
                    i.push_back(id);
                    v.push_back(stringToDouble(pheno));
                    m[id] = stringToDouble(pheno);
                }
            }
        }
        inFile.close();
    }
    else {
        cout << "Unable to open " << f << " for reading" << endl;
        exit(EXIT_FAILURE);
    }
}

// Assembly:
subq $0x4c8, %rsp            # imm = 0x4C8
movq %rdi, 0x48(%rsp)
movq %rdi, 0x4c0(%rsp)
movq %rsi, 0x4b8(%rsp)
movq %rdx, 0x4b0(%rsp)
movq %rcx, 0x4a8(%rsp)
movq %r8, 0x4a0(%rsp)
leaq 0x480(%rsp), %rdi
callq 0x3410
leaq 0x460(%rsp), %rdi
callq 0x3410
leaq 0x440(%rsp), %rdi
callq 0x3410
movq 0x48(%rsp), %rdi
callq 0x3120
movq %rax, %rsi
leaq 0x238(%rsp), %rdi
movl $0x8, %edx
callq 0x3540
jmp 0x18d3c
leaq 0x238(%rsp), %rdi
callq 0x3490
movb %al, 0x47(%rsp)
jmp 0x18d4f
movb 0x47(%rsp), %al
testb $0x1, %al
jne 0x18d5c
jmp 0x19046
leaq 0x238(%rsp), %rdi
leaq 0x480(%rsp), %rsi
callq 0x3080
jmp 0x18d73
jmp 0x18d75
movq 0x238(%rsp), %rax
movq -0x18(%rax), %rax
leaq 0x238(%rsp,%rax), %rdi
callq 0x34d0
movb %al, 0x46(%rsp)
jmp 0x18d94
movb 0x46(%rsp), %al
testb $0x1, %al
jne 0x18da1
jmp 0x19035
leaq 0x238(%rsp), %rdi
leaq 0x480(%rsp), %rsi
callq 0x3080
jmp 0x18db8
leaq 0x480(%rsp), %rdi
callq 0x34c0
testb $0x1, %al
jne 0x19030
leaq 0xa8(%rsp), %rdi
callq 0x3210
jmp 0x18ddc
leaq 0xa8(%rsp), %rdi
leaq 0x480(%rsp), %rsi
callq 0x3380
jmp 0x18df3
leaq 0xa8(%rsp), %rdi
leaq 0x460(%rsp), %rsi
callq 0x33e0
jmp 0x18e0a
leaq 0xa8(%rsp), %rdi
leaq 0x440(%rsp), %rsi
callq 0x33e0
jmp 0x18e21
leaq 0x1ab1(%rip), %rsi      # 0x1a8d9
leaq 0x440(%rsp), %rdi
callq 0x18700
movb %al, 0x45(%rsp)
jmp 0x18e3b
movb 0x45(%rsp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, 0x44(%rsp)
jne 0x18e4c
jmp 0x18ea3
movq 0x4a0(%rsp), %rdi
leaq 0x460(%rsp), %rsi
callq 0x12040
movq %rax, 0x38(%rsp)
jmp 0x18e68
movq 0x38(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq 0x4a0(%rsp), %rdi
callq 0xbf10
movq %rax, 0x98(%rsp)
leaq 0xa0(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0xbef0
movb %al, 0x44(%rsp)
movb 0x44(%rsp), %al
testb $0x1, %al
jne 0x18eb0
jmp 0x1900f
movq 0x4b8(%rsp), %rdi
leaq 0x460(%rsp), %rsi
callq 0x12070
jmp 0x18ec7
movq 0x4b0(%rsp), %rax
movq %rax, 0x30(%rsp)
leaq 0x70(%rsp), %rdi
leaq 0x440(%rsp), %rsi
callq 0x3140
jmp 0x18ee8
leaq 0x70(%rsp), %rdi
callq 0x19130
movsd %xmm0, 0x28(%rsp)
jmp 0x18efa
movq 0x30(%rsp), %rdi
movsd 0x28(%rsp), %xmm0
movsd %xmm0, 0x90(%rsp)
leaq 0x90(%rsp), %rsi
callq 0x12170
jmp 0x18f1d
leaq 0x70(%rsp), %rdi
callq 0x31c0
leaq 0x50(%rsp), %rdi
leaq 0x440(%rsp), %rsi
callq 0x3140
jmp 0x18f3b
leaq 0x50(%rsp), %rdi
callq 0x19130
movsd %xmm0, 0x20(%rsp)
jmp 0x18f4d
movq 0x4a8(%rsp), %rdi
leaq 0x460(%rsp), %rsi
callq 0xecc0
movq %rax, 0x18(%rsp)
jmp 0x18f69
movq 0x18(%rsp), %rax
movsd 0x20(%rsp), %xmm0
movsd %xmm0, (%rax)
leaq 0x50(%rsp), %rdi
callq 0x31c0
jmp 0x1900f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x190f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x190e5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
jmp 0x1901e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
leaq 0x70(%rsp), %rdi
callq 0x31c0
jmp 0x1901e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x230(%rsp)
movl %eax, 0x22c(%rsp)
leaq 0x50(%rsp), %rdi
callq 0x31c0
jmp 0x1901e
leaq 0xa8(%rsp), %rdi
callq 0x3160
jmp 0x19030
leaq 0xa8(%rsp), %rdi
callq 0x3160
jmp 0x190e5
jmp 0x18d75
leaq 0x238(%rsp), %rdi
callq 0x3090
jmp 0x19044
jmp 0x190a9
movq 0x9f8b(%rip), %rdi      # 0x22fd8
leaq 0x128c(%rip), %rsi      # 0x1a2e0
callq 0x32c0
movq %rax, 0x10(%rsp)
jmp 0x19060
movq 0x48(%rsp), %rsi
movq 0x10(%rsp), %rdi
callq 0x32a0
movq %rax, 0x8(%rsp)
jmp 0x19076
movq 0x8(%rsp), %rdi
leaq 0x126e(%rip), %rsi      # 0x1a2f0
callq 0x32c0
movq %rax, (%rsp)
jmp 0x1908d
movq (%rsp), %rdi
movq 0x9f30(%rip), %rsi      # 0x22fc8
callq 0x3330
jmp 0x1909f
movl $0x1, %edi
callq 0x33a0
leaq 0x238(%rsp), %rdi
callq 0x30c0
leaq 0x440(%rsp), %rdi
callq 0x31c0
leaq 0x460(%rsp), %rdi
callq 0x31c0
leaq 0x480(%rsp), %rdi
callq 0x31c0
addq $0x4c8, %rsp            # imm = 0x4C8
retq
leaq 0x238(%rsp), %rdi
callq 0x30c0
leaq 0x440(%rsp), %rdi
callq 0x31c0
leaq 0x460(%rsp), %rdi
callq 0x31c0
leaq 0x480(%rsp), %rdi
callq 0x31c0
movq 0x230(%rsp), %rdi
callq 0x3510
nopw %cs:(%rax,%rax)