// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/tools/gt_gff3.c
// Function: gt_gff3_option_parser_new
static GtOptionParser* gt_gff3_option_parser_new(void *tool_arguments)
{
  GFF3Arguments *arguments = tool_arguments;
  GtOptionParser *op;
  GtOption *sort_option, *load_option, *strict_option, *tidy_option,
           *mergefeat_option, *addintrons_option, *offset_option,
           *offsetfile_option, *setsource_option, *sortlines_option,
           *sortnum_option, *option;
  gt_assert(arguments);

  /* init */
  op = gt_option_parser_new("[option ...] [GFF3_file ...]", "Parse, possibly "
                            "transform, and output GFF3 files.");

  /* -sort */
  sort_option = gt_option_new_bool("sort", "sort the GFF3 features (memory "
                                   "consumption is proportional to the input "
                                   "file size(s))",
                                   &arguments->sort, false);
  gt_option_parser_add_option(op, sort_option);

  /* -sortlines */
  sortlines_option = gt_option_new_bool("sortlines", "sort the GFF3 features "
                                        "on a strict line basis (not sorted as"
                                        "defined by GenomeTools)",
                                        &arguments->sortlines, false);
  gt_option_parser_add_option(op, sortlines_option);

  /* -sortnum */
  sortnum_option = gt_option_new_bool("sortnum", "enable natural numeric "
                                        "sorting for sequence regions (not "
                                        "sorted as defined by GenomeTools)",
                                        &arguments->sortnum, false);
  gt_option_parser_add_option(op, sortnum_option);
  gt_option_exclude(sortlines_option, sortnum_option);

  /* -strict */
  strict_option = gt_option_new_bool("strict", "be very strict during GFF3 "
                                     "parsing (stricter than the specification "
                                     "requires)", &arguments->strict, false);
  gt_option_is_development_option(strict_option);
  gt_option_parser_add_option(op, strict_option);

  /* -tidy */
  tidy_option = gt_option_new_bool("tidy", "try to tidy the GFF3 files up "
                                   "during parsing", &arguments->tidy, false);
  gt_option_parser_add_option(op, tidy_option);
  gt_option_exclude(strict_option, tidy_option);

  /* -retainids */
  option = gt_option_new_bool("retainids",
                              "when available, use the original IDs provided "
                              "in the source file\n"
                              "(memory consumption is proportional to the "
                              "input file size(s))", &arguments->retainids,
                              false);
  gt_option_parser_add_option(op, option);

  /* -checkids */
  option = gt_option_new_bool("checkids",
                              "make sure the ID attributes are unique "
                              "within the scope of each GFF3_file, as required "
                              "by GFF3 specification\n"
                              "(memory consumption is proportional to the "
                              "input file size(s)).\n"
                              "If features with the same "GT_GFF_PARENT" "
                              "attribute are not separated by a '"
                              GT_GFF_TERMINATOR"' line the GFF3 parser tries "
                              "to treat them as a multi-line feature. This "
                              "requires at least matching sequence IDs and "
                              "types.", &arguments->checkids, false);
  gt_option_parser_add_option(op, option);

  /* -addids */
  option = gt_option_new_bool("addids", "add missing \""
                              GT_GFF_SEQUENCE_REGION"\" lines automatically",
                              &arguments->addids, true);
  gt_option_parser_add_option(op, option);

  /* -fixregionboundaries */
  option = gt_option_new_bool("fixregionboundaries", "automatically adjust \""
                              GT_GFF_SEQUENCE_REGION"\" lines to contain all "
                              "their features (memory consumption is "
                              "proportional to the input file size(s))",
                              &arguments->fixboundaries, false);
  gt_option_parser_add_option(op, option);

  /* -mergefeat */
  mergefeat_option = gt_option_new_bool("mergefeat",
                                        "merge adjacent features of the same "
                                        "type", &arguments->mergefeat, false);
  gt_option_is_development_option(mergefeat_option);
  gt_option_imply(mergefeat_option, sort_option);
  gt_option_parser_add_option(op, mergefeat_option);

  /* -load */
  load_option = gt_option_new_bool("load", "load the GFF3 features into memory "
                                   "(requires space proportional to the input "
                                   "file size(s))",
                                   &arguments->load, false);
  gt_option_is_development_option(load_option);
  gt_option_parser_add_option(op, load_option);

  /* -addintrons */
  addintrons_option = gt_option_new_bool("addintrons", "add intron features "
                                         "between existing exon features",
                                         &arguments->addintrons, false);
  gt_option_parser_add_option(op, addintrons_option);

  /* -offset */
  offset_option = gt_option_new_word("offset", "transform all features by the "
                                     "given offset", &arguments->offset,
                                     GT_UNDEF_WORD);
  gt_option_parser_add_option(op, offset_option);

  /* -offsetfile */
  offsetfile_option = gt_option_new_filename("offsetfile", "transform all "
                                             "features by the offsets given in "
                                             "file", arguments->offsetfile);
  gt_option_parser_add_option(op, offsetfile_option);
  gt_option_exclude(offset_option, offsetfile_option);

  /* -setsource */
  setsource_option = gt_option_new_string("setsource", "set the 'source' "
                                          "value (2nd column) of each feature",
                                          arguments->newsource, NULL);
  gt_option_parser_add_option(op, setsource_option);

  /* typecheck options */
  gt_typecheck_info_register_options(arguments->tci, op);

  /* xrfcheck options */
  gt_xrfcheck_info_register_options(arguments->xci, op);

  /* -show */
  option = gt_option_new_bool("show", "show GFF3 output", &arguments->show,
                              true);
  gt_option_parser_add_option(op, option);

  /* -v */
  option = gt_option_new_verbose(&arguments->verbose);
  gt_option_parser_add_option(op, option);

  /* -width */
  option = gt_option_new_width(&arguments->width);
  gt_option_parser_add_option(op, option);

  /* output file options */
  gt_output_file_info_register_options(arguments->ofi, op, &arguments->outfp);

  /* set comment function */
  gt_option_parser_set_comment_func(op, gt_gtdata_show_help, NULL);

  return op;
}

// Assembly:
subq $0x78, %rsp
movq %rdi, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq %rax, 0x68(%rsp)
cmpq $0x0, 0x68(%rsp)
jne 0x3b0c3
movq 0x600f0e(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x4daf77(%rip), %rsi    # 0x516013
leaq 0x53fabc(%rip), %rdx    # 0x57ab5f
leaq 0x4e3952(%rip), %rcx    # 0x51e9fc
leaq 0x4e3937(%rip), %r8     # 0x51e9e8
movl $0x62, %r9d
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x3b0c5
leaq 0x4e0476(%rip), %rdi    # 0x51b542
leaq 0x4e3943(%rip), %rsi    # 0x51ea16
callq 0xf1420
movq %rax, 0x60(%rsp)
movq 0x68(%rsp), %rdx
leaq 0x540021(%rip), %rdi    # 0x57b10a
leaq 0x4e3958(%rip), %rsi    # 0x51ea48
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, 0x58(%rsp)
movq 0x60(%rsp), %rdi
movq 0x58(%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0x1, %rdx
leaq 0x4e3983(%rip), %rdi    # 0x51ea9e
leaq 0x4e3986(%rip), %rsi    # 0x51eaa8
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, 0x10(%rsp)
movq 0x60(%rsp), %rdi
movq 0x10(%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0x2, %rdx
leaq 0x4e39af(%rip), %rdi    # 0x51eafc
leaq 0x4e39b0(%rip), %rsi    # 0x51eb04
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, 0x8(%rsp)
movq 0x60(%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0xf1600
movq 0x10(%rsp), %rdi
movq 0x8(%rsp), %rsi
callq 0xf7320
movq 0x68(%rsp), %rdx
addq $0xa, %rdx
leaq 0x516f6e(%rip), %rdi    # 0x5520fc
leaq 0x4e39ca(%rip), %rsi    # 0x51eb5f
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rdi
callq 0xf7040
movq 0x60(%rsp), %rdi
movq 0x48(%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0xb, %rdx
leaq 0x516ef8(%rip), %rdi    # 0x5520c2
leaq 0x4e39dc(%rip), %rsi    # 0x51ebad
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, 0x40(%rsp)
movq 0x60(%rsp), %rdi
movq 0x40(%rsp), %rsi
callq 0xf1600
movq 0x48(%rsp), %rdi
movq 0x40(%rsp), %rsi
callq 0xf7320
movq 0x68(%rsp), %rdx
addq $0x4, %rdx
leaq 0x57a6d0(%rip), %rdi    # 0x5b58db
leaq 0x4e39c8(%rip), %rsi    # 0x51ebda
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, (%rsp)
movq 0x60(%rsp), %rdi
movq (%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0x5, %rdx
leaq 0x4e3a1f(%rip), %rdi    # 0x51ec5a
leaq 0x4e3a21(%rip), %rsi    # 0x51ec63
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, (%rsp)
movq 0x60(%rsp), %rdi
movq (%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0x6, %rdx
leaq 0x4e3b67(%rip), %rdi    # 0x51edd2
leaq 0x4e3b67(%rip), %rsi    # 0x51edd9
movl $0x1, %ecx
callq 0xf5f20
movq %rax, (%rsp)
movq 0x60(%rsp), %rdi
movq (%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0xd, %rdx
leaq 0x4e3b6f(%rip), %rdi    # 0x51ee0d
leaq 0x4e3b7c(%rip), %rsi    # 0x51ee21
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, (%rsp)
movq 0x60(%rsp), %rdi
movq (%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0x7, %rdx
leaq 0x4db510(%rip), %rdi    # 0x5167de
leaq 0x4e3bd8(%rip), %rsi    # 0x51eead
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rdi
callq 0xf7040
movq 0x38(%rsp), %rdi
movq 0x58(%rsp), %rsi
callq 0xf7090
movq 0x60(%rsp), %rdi
movq 0x38(%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0x3, %rdx
leaq 0x57a091(%rip), %rdi    # 0x5b53aa
leaq 0x4e3bb6(%rip), %rsi    # 0x51eed6
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rdi
callq 0xf7040
movq 0x60(%rsp), %rdi
movq 0x50(%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0x8, %rdx
leaq 0x4e3bdc(%rip), %rdi    # 0x51ef31
leaq 0x4e3be0(%rip), %rsi    # 0x51ef3c
xorl %ecx, %ecx
callq 0xf5f20
movq %rax, 0x30(%rsp)
movq 0x60(%rsp), %rdi
movq 0x30(%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdx
addq $0x10, %rdx
leaq 0x4fe250(%rip), %rdi    # 0x5395d7
leaq 0x4e3be1(%rip), %rsi    # 0x51ef6f
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
callq 0xf6650
movq %rax, 0x28(%rsp)
movq 0x60(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rax
movq 0x18(%rax), %rdx
leaq 0x5164cb(%rip), %rdi    # 0x55188c
leaq 0x4e3bd2(%rip), %rsi    # 0x51ef9a
callq 0xf6aa0
movq %rax, 0x20(%rsp)
movq 0x60(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0xf1600
movq 0x28(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0xf7320
movq 0x68(%rsp), %rax
movq 0x20(%rax), %rdx
leaq 0x4e3bce(%rip), %rdi    # 0x51efce
leaq 0x4e3bd1(%rip), %rsi    # 0x51efd8
xorl %eax, %eax
movl %eax, %ecx
callq 0xf69f0
movq %rax, 0x18(%rsp)
movq 0x60(%rsp), %rdi
movq 0x18(%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rax
movq 0x30(%rax), %rdi
movq 0x60(%rsp), %rsi
callq 0x1f4a10
movq 0x68(%rsp), %rax
movq 0x38(%rax), %rdi
movq 0x60(%rsp), %rsi
callq 0x1fa800
movq 0x68(%rsp), %rdx
addq $0xc, %rdx
leaq 0x547eae(%rip), %rdi    # 0x583308
leaq 0x4e3bab(%rip), %rsi    # 0x51f00c
movl $0x1, %ecx
callq 0xf5f20
movq %rax, (%rsp)
movq 0x60(%rsp), %rdi
movq (%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdi
addq $0x9, %rdi
callq 0xf5f90
movq %rax, (%rsp)
movq 0x60(%rsp), %rdi
movq (%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rdi
addq $0x28, %rdi
callq 0xf5fb0
movq %rax, (%rsp)
movq 0x60(%rsp), %rdi
movq (%rsp), %rsi
callq 0xf1600
movq 0x68(%rsp), %rax
movq 0x40(%rax), %rdi
movq 0x60(%rsp), %rsi
movq 0x68(%rsp), %rdx
addq $0x48, %rdx
callq 0xf7d50
movq 0x60(%rsp), %rdi
leaq 0x1467fb(%rip), %rsi    # 0x181ce0
xorl %eax, %eax
movl %eax, %edx
callq 0xf1770
movq 0x60(%rsp), %rax
addq $0x78, %rsp
retq
nopl (%rax,%rax)