// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/ltr/ltr_classify_stream.c
// Function: add_fnmap_to_candidates
static void add_fnmap_to_candidates(GtArray *candidates)
{
  GtGenomeNode *gn;
  GtFeatureNode *curnode;
  GtFeatureNodeIterator *fni;
  GtHashmap *fnmap;
  bool first_ltr;
  const char *fnt;
  GtUword i;

  for (i = 0; i < gt_array_size(candidates); i++) {
    gn = *(GtGenomeNode**) gt_array_get(candidates, i);
    if (gt_feature_node_try_cast(gn) == NULL)
      continue;
    first_ltr = true;
    fnmap = gt_hashmap_new(GT_HASH_STRING, gt_free_func, NULL);
    fni = gt_feature_node_iterator_new((GtFeatureNode*) gn);
    while ((curnode = gt_feature_node_iterator_next(fni)) != NULL) {
      fnt = gt_feature_node_get_type(curnode);
      if ((strcmp(fnt, gt_ft_repeat_region) == 0) ||
          (strcmp(fnt, gt_ft_LTR_retrotransposon) == 0))
        continue;
      else if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0) {
        if (first_ltr) {
          fnt = "lLTR";
          first_ltr = false;
        } else
          fnt = "rLTR";
      } else if (strcmp(fnt, gt_ft_protein_match) == 0)
        fnt = gt_feature_node_get_attribute(curnode, "name");
      if (!fnt)
        continue;
      gt_hashmap_add(fnmap, (void*) gt_cstr_dup(fnt), (void*) curnode);
    }
    gt_genome_node_add_user_data(gn, "fnmap", (void*) fnmap, delete_hash);
    gt_feature_node_iterator_delete(fni);
    fni = NULL;
  }
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movq $0x0, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x50(%rsp), %rdi
callq 0x81370
movq %rax, %rcx
movq 0x10(%rsp), %rax
cmpq %rcx, %rax
jae 0x2fe5d0
movq 0x50(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x80b60
movq (%rax), %rax
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rdi
callq 0x170450
cmpq $0x0, %rax
jne 0x2fe463
jmp 0x2fe5bd
movb $0x1, 0x2f(%rsp)
movl $0x1, %edi
leaq -0x215a44(%rip), %rsi   # 0xe8a30
xorl %eax, %eax
movl %eax, %edx
callq 0xe0c40
movq %rax, 0x30(%rsp)
movq 0x48(%rsp), %rdi
callq 0x170b00
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rdi
callq 0x170e30
movq %rax, 0x40(%rsp)
cmpq $0x0, %rax
je 0x2fe58d
movq 0x40(%rsp), %rdi
callq 0x16d430
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
leaq 0x26ae45(%rip), %rsi    # 0x56930a
callq 0x19980
cmpl $0x0, %eax
je 0x2fe4e5
movq 0x20(%rsp), %rdi
leaq 0x269061(%rip), %rsi    # 0x56753c
callq 0x19980
cmpl $0x0, %eax
jne 0x2fe4e7
jmp 0x2fe491
movq 0x20(%rsp), %rdi
leaq 0x26b9c3(%rip), %rsi    # 0x569eb6
callq 0x19980
cmpl $0x0, %eax
jne 0x2fe525
testb $0x1, 0x2f(%rsp)
je 0x2fe517
leaq 0x294069(%rip), %rax    # 0x592574
movq %rax, 0x20(%rsp)
movb $0x0, 0x2f(%rsp)
jmp 0x2fe523
leaq 0x29405b(%rip), %rax    # 0x592579
movq %rax, 0x20(%rsp)
jmp 0x2fe553
movq 0x20(%rsp), %rdi
leaq 0x254d01(%rip), %rsi    # 0x553232
callq 0x19980
cmpl $0x0, %eax
jne 0x2fe551
movq 0x40(%rsp), %rdi
leaq 0x2568b7(%rip), %rsi    # 0x554dfe
callq 0x16c040
movq %rax, 0x20(%rsp)
jmp 0x2fe553
jmp 0x2fe555
cmpq $0x0, 0x20(%rsp)
jne 0x2fe562
jmp 0x2fe491
movq 0x30(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %rdi
callq 0xa2db0
movq 0x8(%rsp), %rdi
movq %rax, %rsi
movq 0x40(%rsp), %rdx
callq 0xe0fc0
jmp 0x2fe491
movq 0x48(%rsp), %rdi
movq 0x30(%rsp), %rdx
leaq 0x293fe0(%rip), %rsi    # 0x59257e
leaq 0x87b(%rip), %rcx       # 0x2fee20
callq 0x1726d0
movq 0x38(%rsp), %rdi
callq 0x170f50
movq $0x0, 0x38(%rsp)
movq 0x18(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x18(%rsp)
jmp 0x2fe412
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)