// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/tools/gt_gff3.c
// Function: gt_gff3_runner
static int gt_gff3_runner(int argc, const char **argv, int parsed_args,
                          void *tool_arguments, GtError *err)
{
  GFF3Arguments *arguments = tool_arguments;
  GtTypeChecker *type_checker = NULL;
  GtXRFChecker *xrf_checker = NULL;
  GtNodeStream *gff3_in_stream,
               *sort_stream = NULL,
               *load_stream = NULL,
               *merge_feature_stream = NULL,
               *add_introns_stream = NULL,
               *set_source_stream = NULL,
               *gff3_out_stream = NULL,
               *last_stream;
  int had_err = 0;

  gt_error_check(err);
  gt_assert(arguments);

  /* create a gff3 input stream */
  gff3_in_stream = gt_gff3_in_stream_new_unsorted(argc - parsed_args,
                                                  argv + parsed_args);
  if (arguments->verbose && arguments->outfp)
    gt_gff3_in_stream_show_progress_bar((GtGFF3InStream*) gff3_in_stream);
  if (arguments->checkids)
    gt_gff3_in_stream_check_id_attributes((GtGFF3InStream*) gff3_in_stream);
  if (!arguments->addids)
    gt_gff3_in_stream_disable_add_ids(gff3_in_stream);

  last_stream = gff3_in_stream;

  /* set different type checker if necessary */
  if (gt_typecheck_info_option_used(arguments->tci)) {
    type_checker = gt_typecheck_info_create_type_checker(arguments->tci, err);
    if (!type_checker)
      had_err = -1;
    if (!had_err)
      gt_gff3_in_stream_set_type_checker(gff3_in_stream, type_checker);
  }

  /* set XRF checker if necessary */
  if (gt_xrfcheck_info_option_used(arguments->xci)) {
    xrf_checker = gt_xrfcheck_info_create_xrf_checker(arguments->xci, err);
    if (!xrf_checker)
      had_err = -1;
    if (!had_err)
      gt_gff3_in_stream_set_xrf_checker(gff3_in_stream, xrf_checker);
  }

  /* set offset (if necessary) */
  if (!had_err && arguments->offset != GT_UNDEF_WORD)
    gt_gff3_in_stream_set_offset(gff3_in_stream, arguments->offset);

  /* set offsetfile (if necessary) */
  if (!had_err && gt_str_length(arguments->offsetfile)) {
    had_err = gt_gff3_in_stream_set_offsetfile(gff3_in_stream,
                                               arguments->offsetfile, err);
  }

  /* enable strict mode (if necessary) */
  if (!had_err && arguments->strict)
    gt_gff3_in_stream_enable_strict_mode((GtGFF3InStream*) gff3_in_stream);
  /* enable tidy mode (if necessary) */
  if (!had_err && arguments->tidy)
    gt_gff3_in_stream_enable_tidy_mode((GtGFF3InStream*) gff3_in_stream);

  if (!had_err && arguments->fixboundaries)
    gt_gff3_in_stream_fix_region_boundaries((GtGFF3InStream*) gff3_in_stream);

  /* create load stream (if necessary) */
  if (!had_err && arguments->load) {
    load_stream = gt_load_stream_new(last_stream);
    last_stream = load_stream;
  }

  /* create sort stream (if necessary) */
  if (!had_err && (arguments->sort || arguments->sortlines ||
                   arguments->sortnum)) {
    sort_stream = gt_sort_stream_new(last_stream);
    last_stream = sort_stream;
  }

  /* create merge feature stream (if necessary) */
  if (!had_err && arguments->mergefeat) {
    gt_assert(sort_stream);
    merge_feature_stream = gt_merge_feature_stream_new(sort_stream);
    last_stream = merge_feature_stream;
  }

  /* create addintrons stream (if necessary) */
  if (!had_err && arguments->addintrons) {
    gt_assert(last_stream);
    add_introns_stream = gt_add_introns_stream_new(last_stream);
    last_stream = add_introns_stream;
  }

  /* create setsource stream (if necessary) */
  if (!had_err && gt_str_length(arguments->newsource) > 0) {
    gt_assert(last_stream);
    GtNodeVisitor *ssv = gt_set_source_visitor_new(arguments->newsource);
    set_source_stream = gt_visitor_stream_new(last_stream, ssv);
    last_stream = set_source_stream;
  }

  /* create gff3 output stream */
  if (!had_err && arguments->show) {
    if (arguments->sortlines) {
      gff3_out_stream = gt_gff3_linesorted_out_stream_new(last_stream,
                                                          arguments->outfp);
      gt_gff3_linesorted_out_stream_set_fasta_width(
                                   (GtGFF3LinesortedOutStream*) gff3_out_stream,
                                   arguments->width);
      if (arguments->retainids)
        gt_gff3_linesorted_out_stream_retain_id_attributes(
                                  (GtGFF3LinesortedOutStream*) gff3_out_stream);
    } else if (arguments->sortnum) {
      gff3_out_stream = gt_gff3_numsorted_out_stream_new(last_stream,
                                                          arguments->outfp);
      gt_gff3_numsorted_out_stream_set_fasta_width(
                                   (GtGFF3NumsortedOutStream*) gff3_out_stream,
                                   arguments->width);
      if (arguments->retainids)
        gt_gff3_numsorted_out_stream_retain_id_attributes(
                                  (GtGFF3NumsortedOutStream*) gff3_out_stream);
    } else {
      gff3_out_stream = gt_gff3_out_stream_new(last_stream, arguments->outfp);
      gt_gff3_out_stream_set_fasta_width((GtGFF3OutStream*) gff3_out_stream,
                                         arguments->width);
      if (arguments->retainids)
        gt_gff3_out_stream_retain_id_attributes((GtGFF3OutStream*)
                                                               gff3_out_stream);
    }
    gt_assert(gff3_out_stream);
    last_stream = gff3_out_stream;
  }

  /* pull the features through the stream and free them afterwards */
  if (!had_err)
    had_err = gt_node_stream_pull(last_stream, err);

  /* free */
  gt_node_stream_delete(gff3_out_stream);
  gt_node_stream_delete(sort_stream);
  gt_node_stream_delete(load_stream);
  gt_node_stream_delete(merge_feature_stream);
  gt_node_stream_delete(add_introns_stream);
  gt_node_stream_delete(set_source_stream);
  gt_node_stream_delete(gff3_in_stream);
  gt_type_checker_delete(type_checker);
  gt_xrf_checker_delete(xrf_checker);

  return had_err;
}

// Assembly:
subq $0x98, %rsp
movl %edi, 0x94(%rsp)
movq %rsi, 0x88(%rsp)
movl %edx, 0x84(%rsp)
movq %rcx, 0x78(%rsp)
movq %r8, 0x70(%rsp)
movq 0x78(%rsp), %rax
movq %rax, 0x68(%rsp)
movq $0x0, 0x60(%rsp)
movq $0x0, 0x58(%rsp)
movq $0x0, 0x48(%rsp)
movq $0x0, 0x40(%rsp)
movq $0x0, 0x38(%rsp)
movq $0x0, 0x30(%rsp)
movq $0x0, 0x28(%rsp)
movq $0x0, 0x20(%rsp)
movl $0x0, 0x14(%rsp)
cmpq $0x0, 0x70(%rsp)
je 0x3b5d1
movq 0x70(%rsp), %rdi
callq 0xd8a60
testb $0x1, %al
jne 0x3b599
jmp 0x3b5d1
movq 0x600a00(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4daa69(%rip), %rsi    # 0x516013
leaq 0x4dac0e(%rip), %rdx    # 0x5161bf
leaq 0x4e3a65(%rip), %rcx    # 0x51f01d
leaq 0x4e3429(%rip), %r8     # 0x51e9e8
movl $0x106, %r9d            # imm = 0x106
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x3b5d3
jmp 0x3b5d5
cmpq $0x0, 0x68(%rsp)
jne 0x3b615
movq 0x6009bc(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4daa25(%rip), %rsi    # 0x516013
leaq 0x53f56a(%rip), %rdx    # 0x57ab5f
leaq 0x4e3a21(%rip), %rcx    # 0x51f01d
leaq 0x4e33e5(%rip), %r8     # 0x51e9e8
movl $0x107, %r9d            # imm = 0x107
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x3b617
movl 0x94(%rsp), %edi
subl 0x84(%rsp), %edi
movq 0x88(%rsp), %rsi
movslq 0x84(%rsp), %rax
shlq $0x3, %rax
addq %rax, %rsi
callq 0x1746b0
movq %rax, 0x50(%rsp)
movq 0x68(%rsp), %rax
testb $0x1, 0x9(%rax)
je 0x3b667
movq 0x68(%rsp), %rax
cmpq $0x0, 0x48(%rax)
je 0x3b667
movq 0x50(%rsp), %rdi
callq 0x1741e0
movq 0x68(%rsp), %rax
testb $0x1, 0x5(%rax)
je 0x3b67c
movq 0x50(%rsp), %rdi
callq 0x174180
movq 0x68(%rsp), %rax
testb $0x1, 0x6(%rax)
jne 0x3b691
movq 0x50(%rsp), %rdi
callq 0x1744d0
movq 0x50(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x68(%rsp), %rax
movq 0x30(%rax), %rdi
callq 0x1f4a40
testb $0x1, %al
jne 0x3b6af
jmp 0x3b6ef
movq 0x68(%rsp), %rax
movq 0x30(%rax), %rdi
movq 0x70(%rsp), %rsi
callq 0x1f4ad0
movq %rax, 0x60(%rsp)
cmpq $0x0, 0x60(%rsp)
jne 0x3b6d7
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
cmpl $0x0, 0x14(%rsp)
jne 0x3b6ed
movq 0x50(%rsp), %rdi
movq 0x60(%rsp), %rsi
callq 0x174240
jmp 0x3b6ef
movq 0x68(%rsp), %rax
movq 0x38(%rax), %rdi
callq 0x1fa900
testb $0x1, %al
jne 0x3b703
jmp 0x3b743
movq 0x68(%rsp), %rax
movq 0x38(%rax), %rdi
movq 0x70(%rsp), %rsi
callq 0x1fa970
movq %rax, 0x58(%rsp)
cmpq $0x0, 0x58(%rsp)
jne 0x3b72b
movl $0xffffffff, 0x14(%rsp) # imm = 0xFFFFFFFF
cmpl $0x0, 0x14(%rsp)
jne 0x3b741
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
callq 0x1742c0
jmp 0x3b743
cmpl $0x0, 0x14(%rsp)
jne 0x3b772
movq 0x68(%rsp), %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
cmpq %rcx, 0x10(%rax)
je 0x3b772
movq 0x50(%rsp), %rdi
movq 0x68(%rsp), %rax
movq 0x10(%rax), %rsi
callq 0x1743c0
cmpl $0x0, 0x14(%rsp)
jne 0x3b7a9
movq 0x68(%rsp), %rax
movq 0x18(%rax), %rdi
callq 0x11dfa0
cmpq $0x0, %rax
je 0x3b7a9
movq 0x50(%rsp), %rdi
movq 0x68(%rsp), %rax
movq 0x18(%rax), %rsi
movq 0x70(%rsp), %rdx
callq 0x174440
movl %eax, 0x14(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x3b7c5
movq 0x68(%rsp), %rax
testb $0x1, 0xa(%rax)
je 0x3b7c5
movq 0x50(%rsp), %rdi
callq 0x174560
cmpl $0x0, 0x14(%rsp)
jne 0x3b7e1
movq 0x68(%rsp), %rax
testb $0x1, 0xb(%rax)
je 0x3b7e1
movq 0x50(%rsp), %rdi
callq 0x1745c0
cmpl $0x0, 0x14(%rsp)
jne 0x3b7fd
movq 0x68(%rsp), %rax
testb $0x1, 0xd(%rax)
je 0x3b7fd
movq 0x50(%rsp), %rdi
callq 0x174630
cmpl $0x0, 0x14(%rsp)
jne 0x3b828
movq 0x68(%rsp), %rax
testb $0x1, 0x3(%rax)
je 0x3b828
movq 0x18(%rsp), %rdi
callq 0x1a3cc0
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x3b868
movq 0x68(%rsp), %rax
testb $0x1, (%rax)
jne 0x3b84f
movq 0x68(%rsp), %rax
testb $0x1, 0x1(%rax)
jne 0x3b84f
movq 0x68(%rsp), %rax
testb $0x1, 0x2(%rax)
je 0x3b868
movq 0x18(%rsp), %rdi
callq 0x1da550
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x3b8d7
movq 0x68(%rsp), %rax
testb $0x1, 0x7(%rax)
je 0x3b8d7
jmp 0x3b87c
cmpq $0x0, 0x48(%rsp)
jne 0x3b8bc
movq 0x600715(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4da77e(%rip), %rsi    # 0x516013
leaq 0x4e3790(%rip), %rdx    # 0x51f02c
leaq 0x4e377a(%rip), %rcx    # 0x51f01d
leaq 0x4e313e(%rip), %r8     # 0x51e9e8
movl $0x14a, %r9d            # imm = 0x14A
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x3b8be
movq 0x48(%rsp), %rdi
callq 0x1ae160
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x3b946
movq 0x68(%rsp), %rax
testb $0x1, 0x8(%rax)
je 0x3b946
jmp 0x3b8eb
cmpq $0x0, 0x18(%rsp)
jne 0x3b92b
movq 0x6006a6(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4da70f(%rip), %rsi    # 0x516013
leaq 0x4e372d(%rip), %rdx    # 0x51f038
leaq 0x4e370b(%rip), %rcx    # 0x51f01d
leaq 0x4e30cf(%rip), %r8     # 0x51e9e8
movl $0x151, %r9d            # imm = 0x151
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x3b92d
movq 0x18(%rsp), %rdi
callq 0x129200
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x3b9da
movq 0x68(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x11dfa0
cmpq $0x0, %rax
jbe 0x3b9da
jmp 0x3b967
cmpq $0x0, 0x18(%rsp)
jne 0x3b9a7
movq 0x60062a(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4da693(%rip), %rsi    # 0x516013
leaq 0x4e36b1(%rip), %rdx    # 0x51f038
leaq 0x4e368f(%rip), %rcx    # 0x51f01d
leaq 0x4e3053(%rip), %r8     # 0x51e9e8
movl $0x158, %r9d            # imm = 0x158
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x3b9a9
movq 0x68(%rsp), %rax
movq 0x20(%rax), %rdi
callq 0x1d7750
movq %rax, 0x8(%rsp)
movq 0x18(%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0x1f6b70
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x3bb23
movq 0x68(%rsp), %rax
testb $0x1, 0xc(%rax)
je 0x3bb23
movq 0x68(%rsp), %rax
testb $0x1, 0x1(%rax)
je 0x3ba44
movq 0x18(%rsp), %rdi
movq 0x68(%rsp), %rax
movq 0x48(%rax), %rsi
callq 0x175c00
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movq 0x68(%rsp), %rax
movq 0x28(%rax), %rsi
callq 0x175d30
movq 0x68(%rsp), %rax
testb $0x1, 0x4(%rax)
je 0x3ba3f
movq 0x20(%rsp), %rdi
callq 0x175da0
jmp 0x3bad5
movq 0x68(%rsp), %rax
testb $0x1, 0x2(%rax)
je 0x3ba91
movq 0x18(%rsp), %rdi
movq 0x68(%rsp), %rax
movq 0x48(%rax), %rsi
callq 0x176a70
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movq 0x68(%rsp), %rax
movq 0x28(%rax), %rsi
callq 0x176b10
movq 0x68(%rsp), %rax
testb $0x1, 0x4(%rax)
je 0x3ba8f
movq 0x20(%rsp), %rdi
callq 0x176b80
jmp 0x3bad3
movq 0x18(%rsp), %rdi
movq 0x68(%rsp), %rax
movq 0x48(%rax), %rsi
callq 0x176d50
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rdi
movq 0x68(%rsp), %rax
movq 0x28(%rax), %rsi
callq 0x176de0
movq 0x68(%rsp), %rax
testb $0x1, 0x4(%rax)
je 0x3bad1
movq 0x20(%rsp), %rdi
callq 0x176e50
jmp 0x3bad3
jmp 0x3bad5
jmp 0x3bad7
cmpq $0x0, 0x20(%rsp)
jne 0x3bb17
movq 0x6004ba(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4da523(%rip), %rsi    # 0x516013
leaq 0x4e354d(%rip), %rdx    # 0x51f044
leaq 0x4e351f(%rip), %rcx    # 0x51f01d
leaq 0x4e2ee3(%rip), %r8     # 0x51e9e8
movl $0x17a, %r9d            # imm = 0x17A
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x3bb19
movq 0x20(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpl $0x0, 0x14(%rsp)
jne 0x3bb3d
movq 0x18(%rsp), %rdi
movq 0x70(%rsp), %rsi
callq 0x1b1f90
movl %eax, 0x14(%rsp)
movq 0x20(%rsp), %rdi
callq 0x1b1cb0
movq 0x48(%rsp), %rdi
callq 0x1b1cb0
movq 0x40(%rsp), %rdi
callq 0x1b1cb0
movq 0x38(%rsp), %rdi
callq 0x1b1cb0
movq 0x30(%rsp), %rdi
callq 0x1b1cb0
movq 0x28(%rsp), %rdi
callq 0x1b1cb0
movq 0x50(%rsp), %rdi
callq 0x1b1cb0
movq 0x60(%rsp), %rdi
callq 0x1f4420
movq 0x58(%rsp), %rdi
callq 0x1fa710
movl 0x14(%rsp), %eax
addq $0x98, %rsp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)