// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/ltr/ltrdigest_file_out_stream.c
// Function: gt_ltr_visitor_feature_node
static int gt_ltr_visitor_feature_node(GtNodeVisitor *nv, GtFeatureNode *fn,
                                       GT_UNUSED GtError *err)
{
  GtLTRVisitor *lv;
  GtRange node_range;
  GtArray *pdomarr = NULL;
  const char *pfamname;
  const char *fnt;
  lv = gt_ltr_visitor_cast(nv);
  gt_assert(lv);
  gt_error_check(err);

  fnt = gt_feature_node_get_type(fn);

  if (strcmp(fnt, gt_ft_LTR_retrotransposon) == 0)
  {
    lv->element->mainnode = fn;
  } else if (strcmp(fnt, gt_ft_long_terminal_repeat) == 0)
  {
    if (lv->element->leftLTR == NULL)
    {
      node_range = gt_genome_node_get_range((GtGenomeNode*) fn);
      lv->element->leftLTR = fn;
      /* compensate for 1-based node coords */
      lv->element->leftLTR_5 = node_range.start - 1;
      lv->element->leftLTR_3 = node_range.end - 1;
    }
    else
    {
      node_range = gt_genome_node_get_range((GtGenomeNode*) fn);
      lv->element->rightLTR = fn;
      /* compensate for 1-based node coords */
      lv->element->rightLTR_5 = node_range.start - 1;
      lv->element->rightLTR_3 = node_range.end - 1;
    }
  } else if (strcmp(fnt, gt_ft_target_site_duplication) == 0)
  {
    if (lv->element->leftTSD == NULL)
    {
      lv->element->leftTSD = fn;
    }
    else
    {
      lv->element->rightTSD = fn;
    }
  } else if (strcmp(fnt, gt_ft_RR_tract) == 0)
  {
    if (lv->element->ppt == NULL)
    {
      lv->element->ppt = fn;
    }
  } else if (strcmp(fnt, gt_ft_primer_binding_site) == 0)
  {
    if (lv->element->pbs == NULL)
    {
      lv->element->pbs = fn;
    }
  } else if (strcmp(fnt, gt_ft_protein_match) == 0)
  {
    char buf[BUFSIZ];
    if (!lv->element->pdoms)
    {
      lv->element->pdoms = gt_hashmap_new(GT_HASH_STRING, gt_free_func,
                                          (GtFree) gt_array_delete);
    }
    pfamname = gt_feature_node_get_attribute(fn, "name");
    (void) snprintf(buf, BUFSIZ-1, "%s", pfamname);
    gt_cstr_rep(buf, '/', '_');
    if (!(pdomarr = (GtArray*) gt_hashmap_get(lv->element->pdoms, buf)))
    {
      char *pfamcpy = gt_cstr_dup(buf);
      pdomarr = gt_array_new(sizeof (GtFeatureNode*));
      gt_hashmap_add(lv->element->pdoms, pfamcpy, pdomarr);
      if (lv->element->pdomorder != NULL)
        gt_array_add(lv->element->pdomorder, pfamcpy);
    }
    gt_array_add(pdomarr, fn);
  }
  return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x2010, %rsp           # imm = 0x2010
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, 0x8(%rsp)
callq 0x2093e8
movq %rax, %rdi
movq %rbx, %rsi
callq 0x1630b1
testq %rax, %rax
je 0x20967b
movq %rax, %rbx
testq %r15, %r15
je 0x20947b
movq %r15, %rdi
callq 0xfcc32
testb %al, %al
jne 0x209680
movq %r14, %rdi
callq 0x142988
movq %rax, %r15
leaq 0x18b72a(%rip), %rsi    # 0x394bb7
movq %rax, %rdi
callq 0x17a40
testl %eax, %eax
je 0x2095f1
leaq 0x18e014(%rip), %rsi    # 0x3974b8
movq %r15, %rdi
callq 0x17a40
testl %eax, %eax
je 0x2095fb
leaq 0x18d4b8(%rip), %rsi    # 0x396973
movq %r15, %rdi
callq 0x17a40
testl %eax, %eax
je 0x209628
leaq 0x1b64ec(%rip), %rsi    # 0x3bf9be
movq %r15, %rdi
callq 0x17a40
testl %eax, %eax
je 0x209639
leaq 0x1b64f0(%rip), %rsi    # 0x3bf9d9
movq %r15, %rdi
callq 0x17a40
testl %eax, %eax
je 0x209657
leaq 0x177719(%rip), %rsi    # 0x380c19
movq %r15, %rdi
callq 0x17a40
testl %eax, %eax
jne 0x20966c
movq 0x10(%rbx), %rax
cmpq $0x0, 0x68(%rax)
jne 0x20953b
leaq -0x104e78(%rip), %rsi   # 0x1046aa
leaq -0x136bf1(%rip), %rdx   # 0xd2938
movl $0x1, %edi
callq 0x1008fc
movq 0x10(%rbx), %rcx
movq %rax, 0x68(%rcx)
leaq 0x17921d(%rip), %rsi    # 0x38275f
movq %r14, %rdi
callq 0x141f50
leaq 0x1bf558(%rip), %rdx    # 0x3c8aa9
leaq 0x10(%rsp), %r14
movl $0x1fff, %esi           # imm = 0x1FFF
movq %r14, %rdi
movq %rax, %rcx
xorl %eax, %eax
callq 0x17c60
movq %r14, %rdi
movl $0x2f, %esi
movl $0x5f, %edx
callq 0xe431c
movq 0x10(%rbx), %rax
movq 0x68(%rax), %rdi
movq %r14, %rsi
callq 0x100add
movq %rax, %r14
testq %rax, %rax
jne 0x2095dd
leaq 0x10(%rsp), %rdi
callq 0xe4290
movq %rax, %r15
movq %rax, (%rsp)
movl $0x8, %edi
callq 0xd214c
movq %rax, %r14
movq 0x10(%rbx), %rax
movq 0x68(%rax), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x100b18
movq 0x10(%rbx), %rax
movq 0x60(%rax), %rdi
testq %rdi, %rdi
je 0x2095dd
movq %rsp, %rsi
movl $0x8, %edx
callq 0xd2410
leaq 0x8(%rsp), %rsi
movl $0x8, %edx
movq %r14, %rdi
callq 0xd2410
jmp 0x20966c
movq 0x10(%rbx), %rax
movq %r14, 0x20(%rax)
jmp 0x20966c
movq 0x10(%rbx), %rax
movq 0x28(%rax), %r15
movq %r14, %rdi
callq 0x144679
decq %rax
decq %rdx
movq 0x10(%rbx), %rcx
testq %r15, %r15
je 0x20964a
movq %r14, 0x30(%rcx)
movq %rax, 0x18(%rcx)
movq %rdx, 0x10(%rcx)
jmp 0x20966c
movq 0x10(%rbx), %rax
cmpq $0x0, 0x38(%rax)
je 0x209668
movq %r14, 0x40(%rax)
jmp 0x20966c
movq 0x10(%rbx), %rax
cmpq $0x0, 0x48(%rax)
jne 0x20966c
movq %r14, 0x48(%rax)
jmp 0x20966c
movq %r14, 0x28(%rcx)
movq %rax, 0x8(%rcx)
movq %rdx, (%rcx)
jmp 0x20966c
movq 0x10(%rbx), %rax
cmpq $0x0, 0x50(%rax)
jne 0x20966c
movq %r14, 0x50(%rax)
jmp 0x20966c
movq %r14, 0x38(%rax)
xorl %eax, %eax
addq $0x2010, %rsp           # imm = 0x2010
popq %rbx
popq %r14
popq %r15
retq
callq 0x807a7
callq 0x8076e