// File: ParkerLab[P]cta/src/cta.cpp
// Function: print_usage()
void print_usage() {
    std::cout << version_string() << ": Trim adapters from paired-end HTS reads.\n\n"

              << "Usage:\n\n" << PROGRAM_NAME << " [options] input_file1 input_file2 [output_file1 output_file2]\n\n"
              << "where:\n"
              << "    input_file1 contains the first reads of all pairs\n"
              << "    input_file2 contains the second reads of all pairs\n"
              << "    output_file1 will contain the trimmed first reads of all pairs\n"
              << "    output_file2 will contain the trimmed second reads of all pairs\n\n"

              << "You must supply both of the output file names, or neither. If not\n"
              << "specified, they will be inferred from the inputs.\n\n"

              << "Options may include:\n\n"

              << "-h|--help: show this usage message.\n\n"
              << "-v|--verbose: show more details and progress updates.\n\n"
              << "--version: print the version of the program." << std::endl << std::endl

              << "-m|--max-edit-distance\n"
              << "    The maximum edit distance permitted when aligning the paired reads. The default is 1.\n"

              << "-f|--fudge\n"
              << "    An arbitrary number of extra bases to trim, to make sure the reads and mates\n"
              << "    don't overlap exactly. Some aligners (e.g. bowtie) apparently don't like perfectly\n"
              << "    overlapping reads.\n"

              << "-r|--rc-length\n"
              << "    Use the reverse complement of this number of bases from the beginning of the\n"
              << "    reverse read to align the reads. The default is 20.\n"

              << "-t|--trim-from-start\n"
              << "    Trim this number of bases from the start of each sequence. The default is zero.\n"

              << "-a|--append-barcode\n"
              << "    Append barcodes from this fastq file to the end of read names (useful for e.g. single-cell data).\n"

			  << "-x|--selected-barcodes\n"
              << "    Select and output reads corresponding to these barcodes from this unzipped text file\n"

              << std::endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
leaq -0x20(%rbp), %rdi
movq %rdi, -0x40(%rbp)
callq 0x10570
movq -0x40(%rbp), %rsi
movq 0x818a5(%rip), %rdi     # 0x91f78
callq 0xe580
movq %rax, -0x38(%rbp)
jmp 0x106de
movq -0x38(%rbp), %rdi
leaq 0x50c07(%rip), %rsi     # 0x612f0
callq 0xe610
movq %rax, -0x48(%rbp)
jmp 0x106f4
movq -0x48(%rbp), %rdi
leaq 0x50c1e(%rip), %rsi     # 0x6131d
callq 0xe610
movq %rax, -0x50(%rbp)
jmp 0x1070a
movq -0x50(%rbp), %rdi
leaq 0x50bd7(%rip), %rsi     # 0x612ec
callq 0xe610
movq %rax, -0x58(%rbp)
jmp 0x10720
movq -0x58(%rbp), %rdi
leaq 0x50bfb(%rip), %rsi     # 0x61326
callq 0xe610
movq %rax, -0x60(%rbp)
jmp 0x10736
movq -0x60(%rbp), %rdi
leaq 0x50c26(%rip), %rsi     # 0x61367
callq 0xe610
movq %rax, -0x68(%rbp)
jmp 0x1074c
movq -0x68(%rbp), %rdi
leaq 0x50c18(%rip), %rsi     # 0x6136f
callq 0xe610
movq %rax, -0x70(%rbp)
jmp 0x10762
movq -0x70(%rbp), %rdi
leaq 0x50c39(%rip), %rsi     # 0x613a6
callq 0xe610
movq %rax, -0x78(%rbp)
jmp 0x10778
movq -0x78(%rbp), %rdi
leaq 0x50c5b(%rip), %rsi     # 0x613de
callq 0xe610
movq %rax, -0x80(%rbp)
jmp 0x1078e
movq -0x80(%rbp), %rdi
leaq 0x50c89(%rip), %rsi     # 0x61422
callq 0xe610
movq %rax, -0x88(%rbp)
jmp 0x107a7
movq -0x88(%rbp), %rdi
leaq 0x50cb3(%rip), %rsi     # 0x61468
callq 0xe610
movq %rax, -0x90(%rbp)
jmp 0x107c3
movq -0x90(%rbp), %rdi
leaq 0x50cda(%rip), %rsi     # 0x614ab
callq 0xe610
movq %rax, -0x98(%rbp)
jmp 0x107df
movq -0x98(%rbp), %rdi
leaq 0x50cf2(%rip), %rsi     # 0x614df
callq 0xe610
movq %rax, -0xa0(%rbp)
jmp 0x107fb
movq -0xa0(%rbp), %rdi
leaq 0x50ced(%rip), %rsi     # 0x614f6
callq 0xe610
movq %rax, -0xa8(%rbp)
jmp 0x10817
movq -0xa8(%rbp), %rdi
leaq 0x50cf7(%rip), %rsi     # 0x6151c
callq 0xe610
movq %rax, -0xb0(%rbp)
jmp 0x10833
movq -0xb0(%rbp), %rdi
leaq 0x50d13(%rip), %rsi     # 0x61554
callq 0xe610
movq %rax, -0xb8(%rbp)
jmp 0x1084f
movq -0xb8(%rbp), %rdi
movq 0x816c3(%rip), %rsi     # 0x91f20
callq 0xe690
movq %rax, -0xc0(%rbp)
jmp 0x1086b
movq -0xc0(%rbp), %rdi
movq 0x816a7(%rip), %rsi     # 0x91f20
callq 0xe690
movq %rax, -0xc8(%rbp)
jmp 0x10887
movq -0xc8(%rbp), %rdi
leaq 0x50cec(%rip), %rsi     # 0x61581
callq 0xe610
movq %rax, -0xd0(%rbp)
jmp 0x108a3
movq -0xd0(%rbp), %rdi
leaq 0x50ce8(%rip), %rsi     # 0x61599
callq 0xe610
movq %rax, -0xd8(%rbp)
jmp 0x108bf
movq -0xd8(%rbp), %rdi
leaq 0x50d27(%rip), %rsi     # 0x615f4
callq 0xe610
movq %rax, -0xe0(%rbp)
jmp 0x108db
movq -0xe0(%rbp), %rdi
leaq 0x50d17(%rip), %rsi     # 0x61600
callq 0xe610
movq %rax, -0xe8(%rbp)
jmp 0x108f7
movq -0xe8(%rbp), %rdi
leaq 0x50d4d(%rip), %rsi     # 0x61652
callq 0xe610
movq %rax, -0xf0(%rbp)
jmp 0x10913
movq -0xf0(%rbp), %rdi
leaq 0x50d89(%rip), %rsi     # 0x616aa
callq 0xe610
movq %rax, -0xf8(%rbp)
jmp 0x1092f
movq -0xf8(%rbp), %rdi
leaq 0x50d85(%rip), %rsi     # 0x616c2
callq 0xe610
movq %rax, -0x100(%rbp)
jmp 0x1094b
movq -0x100(%rbp), %rdi
leaq 0x50d79(%rip), %rsi     # 0x616d2
callq 0xe610
movq %rax, -0x108(%rbp)
jmp 0x10967
movq -0x108(%rbp), %rdi
leaq 0x50daf(%rip), %rsi     # 0x61724
callq 0xe610
movq %rax, -0x110(%rbp)
jmp 0x10983
movq -0x110(%rbp), %rdi
leaq 0x50dcc(%rip), %rsi     # 0x6175d
callq 0xe610
movq %rax, -0x118(%rbp)
jmp 0x1099f
movq -0x118(%rbp), %rdi
leaq 0x50dc6(%rip), %rsi     # 0x61773
callq 0xe610
movq %rax, -0x120(%rbp)
jmp 0x109bb
movq -0x120(%rbp), %rdi
leaq 0x50dff(%rip), %rsi     # 0x617c8
callq 0xe610
movq %rax, -0x128(%rbp)
jmp 0x109d7
movq -0x128(%rbp), %rdi
leaq 0x50df8(%rip), %rsi     # 0x617dd
callq 0xe610
movq %rax, -0x130(%rbp)
jmp 0x109f3
movq -0x130(%rbp), %rdi
leaq 0x50e43(%rip), %rsi     # 0x61844
callq 0xe610
movq %rax, -0x138(%rbp)
jmp 0x10a0f
movq -0x138(%rbp), %rdi
leaq 0x50e3f(%rip), %rsi     # 0x6185c
callq 0xe610
movq %rax, -0x140(%rbp)
jmp 0x10a2b
movq -0x140(%rbp), %rdi
movq 0x814e7(%rip), %rsi     # 0x91f20
callq 0xe690
jmp 0x10a40
leaq -0x20(%rbp), %rdi
callq 0xe400
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x28(%rbp)
movl %eax, -0x2c(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xe400
movq -0x28(%rbp), %rdi
callq 0xeb80