// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/extended/feature_node.c
// Function: gt_feature_node_clone
GtFeatureNode* gt_feature_node_clone(const GtFeatureNode *template)
{
  GtFeatureNode *fn;
  GtStr *seqid;
  const char *type;
  GtUword i, start, end;
  GtStrand strand;
  GtStrArray *attributes;
  gt_assert(template && !gt_feature_node_has_children(template));
  seqid = gt_genome_node_get_seqid((GtGenomeNode*) template);
  type = gt_feature_node_get_type(template);
  start = gt_genome_node_get_start((GtGenomeNode*) template);
  end = gt_genome_node_get_end((GtGenomeNode*) template);
  strand = gt_feature_node_get_strand(template);
  fn = (GtFeatureNode*) gt_feature_node_new(seqid, type, start, end, strand);
  gt_genome_node_set_origin((GtGenomeNode*) fn,
                            template->parent_instance.filename,
                            template->parent_instance.line_number);
  if (gt_feature_node_has_source(template))
    gt_feature_node_set_source(fn, template->source);
  if (gt_feature_node_score_is_defined(template))
    gt_feature_node_set_score(fn, template->score);
  attributes = gt_feature_node_get_attribute_list(template);
  for (i = 0; i < gt_str_array_size(attributes); i++) {
    const char *tag, *value;
    tag = gt_str_array_get(attributes, i);
    value = gt_feature_node_get_attribute(template, tag);
    gt_feature_node_set_attribute(fn, tag, value);
  }
  gt_str_array_delete(attributes);
  return fn;
}

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
cmpq $0x0, 0x60(%rsp)
je 0x20f91
movq 0x60(%rsp), %rdi
callq 0x21140
testb $0x1, %al
jne 0x20f91
jmp 0x20fc9
movq 0x193040(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0x13d0c4(%rip), %rsi    # 0x15e066
leaq 0x140cf2(%rip), %rdx    # 0x161c9b
leaq 0x140d1f(%rip), %rcx    # 0x161ccf
leaq 0x140bed(%rip), %r8     # 0x161ba4
movl $0x161, %r9d            # imm = 0x161
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0x20fcb
movq 0x60(%rsp), %rdi
callq 0x258a0
movq %rax, 0x50(%rsp)
movq 0x60(%rsp), %rdi
callq 0x211d0
movq %rax, 0x48(%rsp)
movq 0x60(%rsp), %rdi
callq 0x259c0
movq %rax, 0x38(%rsp)
movq 0x60(%rsp), %rdi
callq 0x25a80
movq %rax, 0x30(%rsp)
movq 0x60(%rsp), %rdi
callq 0x20a10
movl %eax, 0x2c(%rsp)
movq 0x50(%rsp), %rdi
movq 0x48(%rsp), %rsi
movq 0x38(%rsp), %rdx
movq 0x30(%rsp), %rcx
movl 0x2c(%rsp), %r8d
callq 0x20580
movq %rax, 0x58(%rsp)
movq 0x58(%rsp), %rdi
movq 0x60(%rsp), %rax
movq 0x8(%rax), %rsi
movq 0x60(%rsp), %rax
movl 0x20(%rax), %edx
callq 0x25610
movq 0x60(%rsp), %rdi
callq 0x21220
testb $0x1, %al
jne 0x21063
jmp 0x21076
movq 0x58(%rsp), %rdi
movq 0x60(%rsp), %rax
movq 0x38(%rax), %rsi
callq 0x1ff10
movq 0x60(%rsp), %rdi
callq 0x212b0
testb $0x1, %al
jne 0x21086
jmp 0x2109a
movq 0x58(%rsp), %rdi
movq 0x60(%rsp), %rax
movss 0x58(%rax), %xmm0
callq 0x21330
movq 0x60(%rsp), %rdi
callq 0x1fe30
movq %rax, 0x20(%rsp)
movq $0x0, 0x40(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x20(%rsp), %rdi
callq 0x1b720
movq %rax, %rcx
movq 0x8(%rsp), %rax
cmpq %rcx, %rax
jae 0x2111f
movq 0x20(%rsp), %rdi
movq 0x40(%rsp), %rsi
callq 0x1b320
movq %rax, 0x18(%rsp)
movq 0x60(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0x1fde0
movq %rax, 0x10(%rsp)
movq 0x58(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x10(%rsp), %rdx
callq 0x21400
movq 0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x40(%rsp)
jmp 0x210b2
movq 0x20(%rsp), %rdi
callq 0x1b780
movq 0x58(%rsp), %rax
addq $0x68, %rsp
retq
nopw %cs:(%rax,%rax)