// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/core/md5_tab.c
// Function: gt_md5_tab_new
GtMD5Tab* gt_md5_tab_new(const char *sequence_file, void *seqs,
                         GtGetSeqFunc get_seq, GtGetSeqLenFunc get_seq_len,
                         GtUword num_of_seqs, bool use_cache_file,
                         bool use_file_locking)
{
  GtMD5Tab *md5_tab;
  bool reading_succeeded = false;
  GtStr *fingerprints_filename;
  gt_assert(sequence_file && seqs && get_seq && get_seq_len);
  md5_tab = gt_calloc(1, sizeof *md5_tab);
  md5_tab->num_of_md5s = num_of_seqs;
  fingerprints_filename = gt_str_new_cstr(sequence_file);
  gt_str_append_cstr(fingerprints_filename, GT_MD5_TAB_FILE_SUFFIX);
  if (use_cache_file && gt_file_exists(gt_str_get(fingerprints_filename)) &&
      !gt_file_is_newer(sequence_file, gt_str_get(fingerprints_filename))) {
    /* only try to read the fingerprint file if the sequence file was not
       modified in the meantime */
    reading_succeeded = read_fingerprints(md5_tab,
                                          gt_str_get(fingerprints_filename),
                                          use_file_locking);
  }
  if (!reading_succeeded) {
    md5_tab->md5_fingerprints = gt_calloc(num_of_seqs, sizeof (char*));
    add_fingerprints(md5_tab->md5_fingerprints, seqs, get_seq, get_seq_len,
                     num_of_seqs);
    md5_tab->owns_md5s = true;
    if (use_cache_file) {
      write_fingerprints(md5_tab->md5_fingerprints, md5_tab->num_of_md5s,
                         fingerprints_filename, use_file_locking);
    }
  }
  gt_str_delete(fingerprints_filename);
  return md5_tab;
}

// Assembly:
subq $0x78, %rsp
movl %r9d, %eax
movq %rcx, 0x18(%rsp)
movq %rdx, %rcx
movq 0x18(%rsp), %rdx
movq %rcx, 0x20(%rsp)
movq %rsi, %rcx
movq 0x20(%rsp), %rsi
movq %rcx, 0x28(%rsp)
movq %rdi, %r9
movq 0x28(%rsp), %rdi
movb %al, %cl
movb 0x80(%rsp), %al
movq %r9, 0x70(%rsp)
movq %rdi, 0x68(%rsp)
movq %rsi, 0x60(%rsp)
movq %rdx, 0x58(%rsp)
movq %r8, 0x50(%rsp)
andb $0x1, %cl
movb %cl, 0x4f(%rsp)
andb $0x1, %al
movb %al, 0x4e(%rsp)
movb $0x0, 0x3f(%rsp)
cmpq $0x0, 0x70(%rsp)
je 0x148fc2
cmpq $0x0, 0x68(%rsp)
je 0x148fc2
cmpq $0x0, 0x60(%rsp)
je 0x148fc2
cmpq $0x0, 0x58(%rsp)
jne 0x148ffa
movq 0x6b00f(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0x15093(%rip), %rsi     # 0x15e066
leaq 0x43906(%rip), %rdx     # 0x18c8e0
leaq 0x4392f(%rip), %rcx     # 0x18c910
leaq 0x43937(%rip), %r8      # 0x18c91f
movl $0x6d, %r9d
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x148ffc
movl $0x1, %edi
movl $0x38, %esi
leaq 0x43912(%rip), %rdx     # 0x18c91f
movl $0x6e, %ecx
callq 0xd5b0
movq %rax, 0x40(%rsp)
movq 0x50(%rsp), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x18(%rax)
movq 0x70(%rsp), %rdi
callq 0x18f70
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rdi
leaq 0x3b64e(%rip), %rsi     # 0x184693
callq 0x18fb0
testb $0x1, 0x4f(%rsp)
je 0x1490be
movq 0x30(%rsp), %rdi
callq 0x19940
movq %rax, %rdi
callq 0x84330
testb $0x1, %al
jne 0x149069
jmp 0x1490be
movq 0x70(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x30(%rsp), %rdi
callq 0x19940
movq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x844d0
testb $0x1, %al
jne 0x1490be
movq 0x40(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x30(%rsp), %rdi
callq 0x19940
movq 0x8(%rsp), %rdi
movq %rax, %rsi
movb 0x4e(%rsp), %al
andb $0x1, %al
movzbl %al, %edx
callq 0x149160
andb $0x1, %al
movb %al, 0x3f(%rsp)
testb $0x1, 0x3f(%rsp)
jne 0x149149
movq 0x50(%rsp), %rdi
movl $0x8, %esi
leaq 0x43845(%rip), %rdx     # 0x18c91f
movl $0x7b, %ecx
callq 0xd5b0
movq %rax, %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x10(%rax)
movq 0x40(%rsp), %rax
movq 0x10(%rax), %rdi
movq 0x68(%rsp), %rsi
movq 0x60(%rsp), %rdx
movq 0x58(%rsp), %rcx
movq 0x50(%rsp), %r8
callq 0x1492e0
movq 0x40(%rsp), %rax
movb $0x1, 0x28(%rax)
testb $0x1, 0x4f(%rsp)
je 0x149147
movq 0x40(%rsp), %rax
movq 0x10(%rax), %rdi
movq 0x40(%rsp), %rax
movq 0x18(%rax), %rsi
movq 0x30(%rsp), %rdx
movb 0x4e(%rsp), %al
andb $0x1, %al
movzbl %al, %ecx
callq 0x1493d0
jmp 0x149149
movq 0x30(%rsp), %rdi
callq 0x1afc0
movq 0x40(%rsp), %rax
addq $0x78, %rsp
retq
nopl (%rax)