// File: ncbi[P]amr/gff.cpp
// Function: GFF_sp::Annot::Annot(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
Annot::Annot (const string &fName)
{
	if (fName. empty ())
		throw runtime_error ("Empty BED file name");
	
  LineInput f (fName /*, 100 * 1024, 1*/);
  while (f. nextLine ())
  {
    trim (f. line);
    if (   f. line. empty () 
        || f. line [0] == '#'
       )
      continue;

    replace (f. line, ' ', '_');  // to use '\t' as delimiter

   	const string errorS ("File " + fName + ", " + f. lineStr () + ": ");

    string contig, prot;
    size_t start, stop;
    double score;
    char strand = ' ';
    static Istringstream iss;
    iss. reset (f. line);
    iss >> contig >> start >> stop >> prot >> score >> strand;

    if (strand == ' ')
    	throw runtime_error (errorS + "at least 5 fields are expected in each line");

	  for (const char c : contig)
	  	if (! printable (c))
	  		throw runtime_error (errorS + "Non-printable character in the sequence identifier: " + to_string (c));

    if (start >= stop)
    	throw runtime_error (errorS + "start should be less than stop");

    if (   strand != '+'
        && strand != '-'
       )
    	throw runtime_error (errorS + "strand should be '+' or '-'");
           
	  trim (prot, '_');
	  ASSERT (! prot. empty ());
    prot2loci [prot] << Locus ((size_t) f. lineNum, contig, start, stop, strand == '+', false/*partial*/, 0, noString, noString);
  }
}

// Assembly:
subq $0x788, %rsp            # imm = 0x788
movq %rdi, 0x780(%rsp)
movq %rsi, 0x778(%rsp)
movq 0x780(%rsp), %rdi
movq %rdi, 0xd0(%rsp)
callq 0x2aad0
movq 0xd0(%rsp), %rdi
leaq 0x55165(%rip), %rax     # 0x105b40
addq $0x10, %rax
movq %rax, (%rdi)
addq $0x8, %rdi
movq %rdi, 0xc8(%rsp)
callq 0xb3640
movq 0xd0(%rsp), %rdi
addq $0x38, %rdi
movq %rdi, 0xd8(%rsp)
callq 0x2a8d0
movq 0x778(%rsp), %rdi
callq 0xcc10
testb $0x1, %al
jne 0xb0a22
jmp 0xb0aa7
movl $0x10, %edi
callq 0xc3b0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0xc0(%rsp)
leaq 0x2091e(%rip), %rsi     # 0xd135f
callq 0xc2e0
jmp 0xb0a48
movq 0xc0(%rsp), %rdi
movq 0x55599(%rip), %rsi     # 0x105ff0
movq 0x55512(%rip), %rdx     # 0x105f70
callq 0xcc80
jmp 0xb1795
movq 0xc0(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
callq 0xc580
jmp 0xb1761
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb1761
movq 0x778(%rsp), %rsi
leaq 0x4c0(%rsp), %rdi
xorl %edx, %edx
callq 0x2f200
jmp 0xb0ac0
jmp 0xb0ac2
leaq 0x4c0(%rsp), %rdi
callq 0x3d390
movb %al, 0xbf(%rsp)
jmp 0xb0ad8
movb 0xbf(%rsp), %al
testb $0x1, %al
jne 0xb0ae8
jmp 0xb173f
leaq 0x728(%rsp), %rdi
callq 0x73800
jmp 0xb0af7
leaq 0x4c0(%rsp), %rdi
addq $0x268, %rdi            # imm = 0x268
callq 0xcc10
testb $0x1, %al
jne 0xb0b3a
leaq 0x728(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xce50
movq %rax, 0xb0(%rsp)
jmp 0xb0b2a
movq 0xb0(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0xb0b55
jmp 0xb0ac2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb1754
leaq 0x728(%rsp), %rdi
movl $0x20, %esi
movl $0x5f, %edx
callq 0x40930
jmp 0xb0b6e
movq 0x778(%rsp), %rdx
leaq 0x207dc(%rip), %rsi     # 0xd1359
leaq 0x440(%rsp), %rdi
callq 0x2a1c0
jmp 0xb0b8c
leaq 0x1a673(%rip), %rdx     # 0xcb206
leaq 0x460(%rsp), %rdi
leaq 0x440(%rsp), %rsi
callq 0x2a2f0
jmp 0xb0baa
leaq 0x420(%rsp), %rdi
leaq 0x4c0(%rsp), %rsi
movl $0x1, %edx
callq 0xb3820
jmp 0xb0bc6
leaq 0x480(%rsp), %rdi
leaq 0x460(%rsp), %rsi
leaq 0x420(%rsp), %rdx
callq 0x2dde0
jmp 0xb0be5
leaq 0x1cdfc(%rip), %rdx     # 0xcd9e8
leaq 0x4a0(%rsp), %rdi
leaq 0x480(%rsp), %rsi
callq 0x2a2f0
jmp 0xb0c03
leaq 0x480(%rsp), %rdi
callq 0xce98
leaq 0x420(%rsp), %rdi
callq 0xce98
leaq 0x460(%rsp), %rdi
callq 0xce98
leaq 0x440(%rsp), %rdi
callq 0xce98
leaq 0x400(%rsp), %rdi
callq 0xca10
leaq 0x3e0(%rsp), %rdi
callq 0xca10
movb $0x20, 0x3c7(%rsp)
cmpb $0x0, 0x562c8(%rip)     # 0x106f28
jne 0xb0ca7
leaq 0x562bf(%rip), %rdi     # 0x106f28
callq 0xcd40
cmpl $0x0, %eax
je 0xb0ca7
leaq 0x5612e(%rip), %rdi     # 0x106da8
callq 0x2f270
jmp 0xb0c81
leaq -0x81838(%rip), %rdi    # 0x2f450
leaq 0x56119(%rip), %rsi     # 0x106da8
leaq 0x55ac2(%rip), %rdx     # 0x106758
callq 0xc650
leaq 0x56286(%rip), %rdi     # 0x106f28
callq 0xc4e0
leaq 0x728(%rsp), %rsi
leaq 0x560f2(%rip), %rdi     # 0x106da8
callq 0x2f350
jmp 0xb0cbd
leaq 0x560e4(%rip), %rdi     # 0x106da8
leaq 0x400(%rsp), %rsi
callq 0xc950
movq %rax, 0xa8(%rsp)
jmp 0xb0cdb
movq 0xa8(%rsp), %rdi
leaq 0x3d8(%rsp), %rsi
callq 0xca40
movq %rax, 0xa0(%rsp)
jmp 0xb0cfa
movq 0xa0(%rsp), %rdi
leaq 0x3d0(%rsp), %rsi
callq 0xca40
movq %rax, 0x98(%rsp)
jmp 0xb0d19
movq 0x98(%rsp), %rdi
leaq 0x3e0(%rsp), %rsi
callq 0xc950
movq %rax, 0x90(%rsp)
jmp 0xb0d38
movq 0x90(%rsp), %rdi
leaq 0x3c8(%rsp), %rsi
callq 0xc5e0
movq %rax, 0x88(%rsp)
jmp 0xb0d57
movq 0x88(%rsp), %rdi
leaq 0x3c7(%rsp), %rsi
callq 0xc9b0
jmp 0xb0d6e
movsbl 0x3c7(%rsp), %eax
cmpl $0x20, %eax
jne 0xb0f18
movb $0x1, 0x39f(%rsp)
movl $0x10, %edi
callq 0xc3b0
movq %rax, 0x80(%rsp)
leaq 0x205d3(%rip), %rdx     # 0xd1373
leaq 0x3a0(%rsp), %rdi
leaq 0x4a0(%rsp), %rsi
callq 0x2d9a0
jmp 0xb0db7
movq 0x80(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0xcbb0
jmp 0xb0dce
movq 0x80(%rsp), %rdi
movb $0x0, 0x39f(%rsp)
movq 0x5520b(%rip), %rsi     # 0x105ff0
movq 0x55184(%rip), %rdx     # 0x105f70
callq 0xcc80
jmp 0xb1795
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb0e73
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb0e66
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb0e59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
leaq 0x480(%rsp), %rdi
callq 0xce98
leaq 0x420(%rsp), %rdi
callq 0xce98
leaq 0x460(%rsp), %rdi
callq 0xce98
leaq 0x440(%rsp), %rdi
callq 0xce98
jmp 0xb1754
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
leaq 0x56088(%rip), %rdi     # 0x106f28
callq 0xc4d0
jmp 0xb1716
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb1716
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb0efa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
leaq 0x3a0(%rsp), %rdi
callq 0xce98
testb $0x1, 0x39f(%rsp)
jne 0xb0f06
jmp 0xb0f13
movq 0x80(%rsp), %rdi
callq 0xc580
jmp 0xb1716
leaq 0x400(%rsp), %rax
movq %rax, 0x390(%rsp)
movq 0x390(%rsp), %rdi
callq 0xc640
movq %rax, 0x388(%rsp)
movq 0x390(%rsp), %rdi
callq 0xc450
movq %rax, 0x380(%rsp)
leaq 0x388(%rsp), %rdi
leaq 0x380(%rsp), %rsi
callq 0x73890
testb $0x1, %al
jne 0xb0f70
jmp 0xb10f7
leaq 0x388(%rsp), %rdi
callq 0x738d0
movb (%rax), %al
movb %al, 0x37f(%rsp)
movsbl 0x37f(%rsp), %edi
callq 0x73820
movb %al, 0x7f(%rsp)
jmp 0xb0f99
movb 0x7f(%rsp), %al
testb $0x1, %al
jne 0xb10e3
jmp 0xb0fa7
movb $0x1, 0x317(%rsp)
movl $0x10, %edi
callq 0xc3b0
movq %rax, 0x70(%rsp)
leaq 0x2021f(%rip), %rdx     # 0xd11e4
leaq 0x338(%rsp), %rdi
leaq 0x4a0(%rsp), %rsi
callq 0x2d9a0
jmp 0xb0fdc
movsbl 0x37f(%rsp), %esi
leaq 0x318(%rsp), %rdi
callq 0x2ded0
jmp 0xb0ff3
leaq 0x358(%rsp), %rdi
leaq 0x338(%rsp), %rsi
leaq 0x318(%rsp), %rdx
callq 0x2dde0
jmp 0xb1012
movq 0x70(%rsp), %rdi
leaq 0x358(%rsp), %rsi
callq 0xcbb0
jmp 0xb1026
movq 0x70(%rsp), %rdi
movb $0x0, 0x317(%rsp)
movq 0x54fb6(%rip), %rsi     # 0x105ff0
movq 0x54f2f(%rip), %rdx     # 0x105f70
callq 0xcc80
jmp 0xb1795
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb10c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb10bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb10ae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
leaq 0x358(%rsp), %rdi
callq 0xce98
leaq 0x318(%rsp), %rdi
callq 0xce98
leaq 0x338(%rsp), %rdi
callq 0xce98
testb $0x1, 0x317(%rsp)
jne 0xb10d4
jmp 0xb10de
movq 0x70(%rsp), %rdi
callq 0xc580
jmp 0xb1716
jmp 0xb10e5
leaq 0x388(%rsp), %rdi
callq 0x73900
jmp 0xb0f52
movq 0x3d8(%rsp), %rax
cmpq 0x3d0(%rsp), %rax
jb 0xb11cd
movb $0x1, 0x2ef(%rsp)
movl $0x10, %edi
callq 0xc3b0
movq %rax, 0x68(%rsp)
leaq 0x20274(%rip), %rdx     # 0xd139f
leaq 0x2f0(%rsp), %rdi
leaq 0x4a0(%rsp), %rsi
callq 0x2d9a0
jmp 0xb1142
movq 0x68(%rsp), %rdi
leaq 0x2f0(%rsp), %rsi
callq 0xcbb0
jmp 0xb1156
movq 0x68(%rsp), %rdi
movb $0x0, 0x2ef(%rsp)
movq 0x54e86(%rip), %rsi     # 0x105ff0
movq 0x54dff(%rip), %rdx     # 0x105f70
callq 0xcc80
jmp 0xb1795
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb11b2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
leaq 0x2f0(%rsp), %rdi
callq 0xce98
testb $0x1, 0x2ef(%rsp)
jne 0xb11be
jmp 0xb11c8
movq 0x68(%rsp), %rdi
callq 0xc580
jmp 0xb1716
movsbl 0x3c7(%rsp), %eax
cmpl $0x2b, %eax
je 0xb12af
movsbl 0x3c7(%rsp), %eax
cmpl $0x2d, %eax
je 0xb12af
movb $0x1, 0x2c7(%rsp)
movl $0x10, %edi
callq 0xc3b0
movq %rax, 0x60(%rsp)
leaq 0x2007e(%rip), %rdx     # 0xd128b
leaq 0x2c8(%rsp), %rdi
leaq 0x4a0(%rsp), %rsi
callq 0x2d9a0
jmp 0xb1224
movq 0x60(%rsp), %rdi
leaq 0x2c8(%rsp), %rsi
callq 0xcbb0
jmp 0xb1238
movq 0x60(%rsp), %rdi
movb $0x0, 0x2c7(%rsp)
movq 0x54da4(%rip), %rsi     # 0x105ff0
movq 0x54d1d(%rip), %rdx     # 0x105f70
callq 0xcc80
jmp 0xb1795
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb1294
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
leaq 0x2c8(%rsp), %rdi
callq 0xce98
testb $0x1, 0x2c7(%rsp)
jne 0xb12a0
jmp 0xb12aa
movq 0x60(%rsp), %rdi
callq 0xc580
jmp 0xb1716
leaq 0x3e0(%rsp), %rdi
movl $0x5f, %esi
callq 0xb38d0
jmp 0xb12c3
callq 0xc090
movl $0x0, (%rax)
leaq 0x3e0(%rsp), %rdi
callq 0xcc10
testb $0x1, %al
jne 0xb12e4
jmp 0xb156b
callq 0xc8c0
cmpl $0x0, %eax
jne 0xb1561
leaq 0x21f(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0xcd00
movq 0x58(%rsp), %rdx
leaq 0x1fcee(%rip), %rsi     # 0xd0ffe
leaq 0x220(%rsp), %rdi
callq 0x29fd0
jmp 0xb131f
leaq 0x1f8(%rsp), %rdi
movl $0x198, %esi            # imm = 0x198
callq 0x2ded0
jmp 0xb1333
leaq 0x240(%rsp), %rdi
leaq 0x220(%rsp), %rsi
leaq 0x1f8(%rsp), %rdx
callq 0x2dde0
jmp 0xb1352
leaq 0x1a848(%rip), %rdx     # 0xcbba1
leaq 0x260(%rsp), %rdi
leaq 0x240(%rsp), %rsi
callq 0x2a2f0
jmp 0xb1370
leaq 0x1b7(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0xcd00
movq 0x50(%rsp), %rdx
leaq 0x20030(%rip), %rsi     # 0xd13be
leaq 0x1b8(%rsp), %rdi
callq 0x29fd0
jmp 0xb139d
leaq 0x1c672(%rip), %rdx     # 0xcda16
leaq 0x1d8(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
callq 0x2a2f0
jmp 0xb13bb
leaq 0x280(%rsp), %rdi
leaq 0x260(%rsp), %rsi
leaq 0x1d8(%rsp), %rdx
callq 0x2dde0
jmp 0xb13da
leaq 0x1ff67(%rip), %rdx     # 0xd1348
leaq 0x2a0(%rsp), %rdi
leaq 0x280(%rsp), %rsi
callq 0x2a2f0
jmp 0xb13f8
leaq 0x2a0(%rsp), %rdi
callq 0x3e9b0
jmp 0xb1407
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb154f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb1542
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb1535
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb1528
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb150e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb1501
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb14f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb14e7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
leaq 0x2a0(%rsp), %rdi
callq 0xce98
leaq 0x280(%rsp), %rdi
callq 0xce98
leaq 0x1d8(%rsp), %rdi
callq 0xce98
leaq 0x1b8(%rsp), %rdi
callq 0xce98
leaq 0x1b7(%rsp), %rdi
callq 0xc7a0
leaq 0x260(%rsp), %rdi
callq 0xce98
leaq 0x240(%rsp), %rdi
callq 0xce98
leaq 0x1f8(%rsp), %rdi
callq 0xce98
leaq 0x220(%rsp), %rdi
callq 0xce98
leaq 0x21f(%rsp), %rdi
callq 0xc7a0
jmp 0xb1716
movl $0x1, %edi
callq 0xc8d0
movq 0xd0(%rsp), %rdi
addq $0x8, %rdi
leaq 0x3e0(%rsp), %rsi
callq 0xb36b0
movq %rax, 0x48(%rsp)
jmp 0xb158b
movl 0x720(%rsp), %eax
movq %rax, 0x28(%rsp)
movq 0x3d8(%rsp), %rax
movq %rax, 0x30(%rsp)
movq 0x3d0(%rsp), %rax
movq %rax, 0x38(%rsp)
movb 0x3c7(%rsp), %al
subb $0x2b, %al
sete %al
movb %al, 0x47(%rsp)
leaq 0x556d0(%rip), %rsi     # 0x106c98
leaq 0x100(%rsp), %rdi
callq 0xc320
jmp 0xb15d7
leaq 0x556ba(%rip), %rsi     # 0x106c98
leaq 0xe0(%rsp), %rdi
callq 0xc320
jmp 0xb15ed
movq 0x38(%rsp), %r8
movq 0x30(%rsp), %rcx
movq 0x28(%rsp), %rsi
movb 0x47(%rsp), %al
movq %rsp, %rdx
leaq 0xe0(%rsp), %rdi
movq %rdi, 0x18(%rdx)
leaq 0x100(%rsp), %rdi
movq %rdi, 0x10(%rdx)
movq $0x0, 0x8(%rdx)
movl $0x0, (%rdx)
movzbl %al, %r9d
andl $0x1, %r9d
leaq 0x120(%rsp), %rdi
leaq 0x400(%rsp), %rdx
callq 0xabcd0
jmp 0xb1648
movq 0x48(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0xb37a0
jmp 0xb165c
leaq 0x120(%rsp), %rdi
callq 0xb37e0
leaq 0xe0(%rsp), %rdi
callq 0xce98
leaq 0x100(%rsp), %rdi
callq 0xce98
leaq 0x3e0(%rsp), %rdi
callq 0xce98
leaq 0x400(%rsp), %rdi
callq 0xce98
leaq 0x4a0(%rsp), %rdi
callq 0xce98
jmp 0xb0ac2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb1709
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
jmp 0xb16fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x770(%rsp)
movl %eax, 0x76c(%rsp)
leaq 0x120(%rsp), %rdi
callq 0xb37e0
leaq 0xe0(%rsp), %rdi
callq 0xce98
leaq 0x100(%rsp), %rdi
callq 0xce98
leaq 0x3e0(%rsp), %rdi
callq 0xce98
leaq 0x400(%rsp), %rdi
callq 0xce98
leaq 0x4a0(%rsp), %rdi
callq 0xce98
jmp 0xb1754
leaq 0x4c0(%rsp), %rdi
callq 0x2f490
addq $0x788, %rsp            # imm = 0x788
retq
leaq 0x4c0(%rsp), %rdi
callq 0x2f490
movq 0xd8(%rsp), %rdi
callq 0x2a910
movq 0xc8(%rsp), %rdi
callq 0xb38c0
movq 0xd0(%rsp), %rdi
callq 0x2ab40
movq 0x770(%rsp), %rdi
callq 0xccf0
nopw %cs:(%rax,%rax)