// File: ncbi[P]amr/tsv.cpp
// Function: Common_sp::TextTable::Key::Key(Common_sp::TextTable const&, Common_sp::StringVector const&)
TextTable::Key::Key (const TextTable &tab,
                     const StringVector &columns)
: colNums (tab. columns2nums (columns))
{
  data. rehash (tab. rows. size ());
  StringVector values;  
  FFOR (RowNum, i, tab. rows. size ())
  {
    tab. colNumsRow2values (colNums, i, values);
    for (const string& s : values)
      if (s. empty ())
        throw Error (tab, "Empty value in key, in row " + to_string (i + 1));
    if (data. find (values) != data. end ())
      throw Error (tab, "Duplicate key " + values. toString (",") + " for the key on " + columns. toString (","));
    ASSERT (i != no_index);
    data [values] = i;
  }  
}

// Assembly:
subq $0x348, %rsp            # imm = 0x348
movq %rdi, 0x340(%rsp)
movq %rsi, 0x338(%rsp)
movq %rdx, 0x330(%rsp)
movq 0x340(%rsp), %rdi
movq %rdi, 0x68(%rsp)
movq %rdi, %rax
movq %rax, 0x60(%rsp)
movq 0x338(%rsp), %rsi
movq 0x330(%rsp), %rdx
callq 0xc0760
movq 0x68(%rsp), %rdi
addq $0x20, %rdi
movq %rdi, 0x70(%rsp)
callq 0xc0e40
movq 0x338(%rsp), %rdi
addq $0x50, %rdi
callq 0x380d0
movq 0x70(%rsp), %rdi
movq %rax, %rsi
callq 0xc0e50
jmp 0xbd93c
leaq 0x300(%rsp), %rdi
callq 0x2ef00
movq $0x0, 0x2f8(%rsp)
movq 0x338(%rsp), %rdi
addq $0x50, %rdi
callq 0x380d0
movq %rax, 0x2f0(%rsp)
movq 0x2f8(%rsp), %rax
cmpq 0x2f0(%rsp), %rax
jae 0xbe16d
movq 0x60(%rsp), %rsi
movq 0x338(%rsp), %rdi
movq 0x2f8(%rsp), %rdx
leaq 0x300(%rsp), %rcx
callq 0xbcce0
jmp 0xbd9a8
leaq 0x300(%rsp), %rax
movq %rax, 0x2e8(%rsp)
movq 0x2e8(%rsp), %rdi
callq 0x2eff0
movq %rax, 0x2e0(%rsp)
movq 0x2e8(%rsp), %rdi
callq 0x2f020
movq %rax, 0x2d8(%rsp)
leaq 0x2e0(%rsp), %rdi
leaq 0x2d8(%rsp), %rsi
callq 0x2f050
testb $0x1, %al
jne 0xbda00
jmp 0xbdb80
leaq 0x2e0(%rsp), %rdi
callq 0x2f090
movq %rax, 0x2d0(%rsp)
movq 0x2d0(%rsp), %rdi
callq 0xcc10
testb $0x1, %al
jne 0xbda2b
jmp 0xbdb6c
movb $0x1, 0x28f(%rsp)
movl $0x10, %edi
callq 0xc3b0
movq %rax, 0x50(%rsp)
movq 0x338(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x2f8(%rsp), %rsi
incq %rsi
leaq 0x290(%rsp), %rdi
callq 0x2bf10
jmp 0xbda69
leaq 0x141ac(%rip), %rsi     # 0xd1c1c
leaq 0x2b0(%rsp), %rdi
leaq 0x290(%rsp), %rdx
callq 0x2a340
jmp 0xbda87
movq 0x58(%rsp), %rsi
movq 0x50(%rsp), %rdi
leaq 0x2b0(%rsp), %rdx
callq 0x3a690
jmp 0xbdaa0
movq 0x50(%rsp), %rdi
movb $0x0, 0x28f(%rsp)
leaq 0x46e4c(%rip), %rsi     # 0x104900
leaq -0x8335b(%rip), %rdx    # 0x3a760
callq 0xcc80
jmp 0xbe1b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe18f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe182
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbdb51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbdb44
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
leaq 0x2b0(%rsp), %rdi
callq 0xce98
leaq 0x290(%rsp), %rdi
callq 0xce98
testb $0x1, 0x28f(%rsp)
jne 0xbdb5d
jmp 0xbdb67
movq 0x50(%rsp), %rdi
callq 0xc580
jmp 0xbe182
jmp 0xbdb6e
leaq 0x2e0(%rsp), %rdi
callq 0x2f0f0
jmp 0xbd9e2
movq 0x60(%rsp), %rdi
addq $0x20, %rdi
leaq 0x300(%rsp), %rsi
callq 0xc0ea0
movq %rax, 0x48(%rsp)
jmp 0xbdb9d
movq 0x60(%rsp), %rdi
movq 0x48(%rsp), %rax
movq %rax, 0x280(%rsp)
addq $0x20, %rdi
callq 0xc0ed0
movq %rax, 0x278(%rsp)
leaq 0x280(%rsp), %rdi
leaq 0x278(%rsp), %rsi
callq 0xc0e80
testb $0x1, %al
jne 0xbdbde
jmp 0xbde87
movb $0x1, 0x18e(%rsp)
movl $0x10, %edi
callq 0xc3b0
movq %rax, 0x30(%rsp)
movq 0x338(%rsp), %rax
movq %rax, 0x38(%rsp)
leaq 0x1d7(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0xcd00
movq 0x40(%rsp), %rdx
leaq 0x1130e(%rip), %rsi     # 0xcef2e
leaq 0x1d8(%rsp), %rdi
callq 0x29fd0
jmp 0xbdc2f
leaq 0x1f8(%rsp), %rdi
leaq 0x300(%rsp), %rsi
leaq 0x1d8(%rsp), %rdx
callq 0x4b050
jmp 0xbdc4e
leaq 0x117b4(%rip), %rsi     # 0xcf409
leaq 0x218(%rsp), %rdi
leaq 0x1f8(%rsp), %rdx
callq 0x2a340
jmp 0xbdc6c
leaq 0x13fc5(%rip), %rdx     # 0xd1c38
leaq 0x238(%rsp), %rdi
leaq 0x218(%rsp), %rsi
callq 0x2a2f0
jmp 0xbdc8a
movq 0x330(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x18f(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0xcd00
movq 0x28(%rsp), %rdx
leaq 0x11279(%rip), %rsi     # 0xcef2e
leaq 0x190(%rsp), %rdi
callq 0x29fd0
jmp 0xbdcc4
movq 0x20(%rsp), %rsi
leaq 0x1b0(%rsp), %rdi
leaq 0x190(%rsp), %rdx
callq 0x4b050
jmp 0xbdce0
leaq 0x258(%rsp), %rdi
leaq 0x238(%rsp), %rsi
leaq 0x1b0(%rsp), %rdx
callq 0x2dde0
jmp 0xbdcff
movq 0x38(%rsp), %rsi
movq 0x30(%rsp), %rdi
leaq 0x258(%rsp), %rdx
callq 0x3a690
jmp 0xbdd18
movq 0x30(%rsp), %rdi
movb $0x0, 0x18e(%rsp)
leaq 0x46bd4(%rip), %rsi     # 0x104900
leaq -0x835d3(%rip), %rdx    # 0x3a760
callq 0xcc80
jmp 0xbe1b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbde5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbde52
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbde45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbde38
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbde1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbde11
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbde04
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
leaq 0x258(%rsp), %rdi
callq 0xce98
leaq 0x1b0(%rsp), %rdi
callq 0xce98
leaq 0x190(%rsp), %rdi
callq 0xce98
leaq 0x18f(%rsp), %rdi
callq 0xc7a0
leaq 0x238(%rsp), %rdi
callq 0xce98
leaq 0x218(%rsp), %rdi
callq 0xce98
leaq 0x1f8(%rsp), %rdi
callq 0xce98
leaq 0x1d8(%rsp), %rdi
callq 0xce98
leaq 0x1d7(%rsp), %rdi
callq 0xc7a0
testb $0x1, 0x18e(%rsp)
jne 0xbde78
jmp 0xbde82
movq 0x30(%rsp), %rdi
callq 0xc580
jmp 0xbe182
callq 0xc090
movl $0x0, (%rax)
cmpq $-0x1, 0x2f8(%rsp)
jne 0xbe11f
callq 0xc8c0
cmpl $0x0, %eax
jne 0xbe115
leaq 0xe7(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0xcd00
movq 0x18(%rsp), %rdx
leaq 0x137fc(%rip), %rsi     # 0xd16c9
leaq 0xe8(%rsp), %rdi
callq 0x29fd0
jmp 0xbdedc
leaq 0xc0(%rsp), %rdi
movl $0x2e0, %esi            # imm = 0x2E0
callq 0x2ded0
jmp 0xbdef0
leaq 0x108(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
leaq 0xc0(%rsp), %rdx
callq 0x2dde0
jmp 0xbdf0f
leaq 0xdc8b(%rip), %rdx      # 0xcbba1
leaq 0x128(%rsp), %rdi
leaq 0x108(%rsp), %rsi
callq 0x2a2f0
jmp 0xbdf2d
leaq 0x7f(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0xcd00
movq 0x10(%rsp), %rdx
leaq 0x13d01(%rip), %rsi     # 0xd1c49
leaq 0x80(%rsp), %rdi
callq 0x29fd0
jmp 0xbdf57
leaq 0xfab8(%rip), %rdx      # 0xcda16
leaq 0xa0(%rsp), %rdi
leaq 0x80(%rsp), %rsi
callq 0x2a2f0
jmp 0xbdf75
leaq 0x148(%rsp), %rdi
leaq 0x128(%rsp), %rsi
leaq 0xa0(%rsp), %rdx
callq 0x2dde0
jmp 0xbdf94
leaq 0x13cf6(%rip), %rdx     # 0xd1c91
leaq 0x168(%rsp), %rdi
leaq 0x148(%rsp), %rsi
callq 0x2a2f0
jmp 0xbdfb2
leaq 0x168(%rsp), %rdi
callq 0x3e9b0
jmp 0xbdfc1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe106
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe0f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe0ec
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe0df
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe0c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe0bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe0ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
jmp 0xbe0a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x328(%rsp)
movl %eax, 0x324(%rsp)
leaq 0x168(%rsp), %rdi
callq 0xce98
leaq 0x148(%rsp), %rdi
callq 0xce98
leaq 0xa0(%rsp), %rdi
callq 0xce98
leaq 0x80(%rsp), %rdi
callq 0xce98
leaq 0x7f(%rsp), %rdi
callq 0xc7a0
leaq 0x128(%rsp), %rdi
callq 0xce98
leaq 0x108(%rsp), %rdi
callq 0xce98
leaq 0xc0(%rsp), %rdi
callq 0xce98
leaq 0xe8(%rsp), %rdi
callq 0xce98
leaq 0xe7(%rsp), %rdi
callq 0xc7a0
jmp 0xbe182
movl $0x1, %edi
callq 0xc8d0
movq 0x60(%rsp), %rdi
movq 0x2f8(%rsp), %rax
movq %rax, (%rsp)
addq $0x20, %rdi
leaq 0x300(%rsp), %rsi
callq 0xc0f00
movq %rax, 0x8(%rsp)
jmp 0xbe148
movq 0x8(%rsp), %rax
movq (%rsp), %rcx
movq %rcx, (%rax)
movq 0x2f8(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x2f8(%rsp)
jmp 0xbd96e
leaq 0x300(%rsp), %rdi
callq 0x2eef0
addq $0x348, %rsp            # imm = 0x348
retq
leaq 0x300(%rsp), %rdi
callq 0x2eef0
movq 0x70(%rsp), %rdi
callq 0xc0f30
movq 0x68(%rsp), %rdi
callq 0xc09d0
movq 0x328(%rsp), %rdi
callq 0xccf0