// File: /workspace/github_c_makefile_star2_O0/lh3[P]fermi2/main.c
// Function: main
int main(int argc, char *argv[])
{
	int ret = 0, i;
	double t_start;
	liftrlimit();
	if (argc == 1) {
		fprintf(stderr, "Usage: fermi2 <command> [arguments]\n");
		fprintf(stderr, "Command:\n");
		fprintf(stderr, "  diff        compare two FMD-indices\n");
		fprintf(stderr, "  occflt      pick up reads containing low-occurrence k-mers\n");
		fprintf(stderr, "  sub         subset FM-index\n");
		fprintf(stderr, "  unpack      unpack FM-index\n");
		fprintf(stderr, "  correct     error correction\n");
		fprintf(stderr, "  count       k-mer counting (inefficient for long k-mers)\n");
		fprintf(stderr, "  interleave  convert 2-file PE fastq to interleaved fastq\n");
		fprintf(stderr, "  assemble    assemble reads into a unitig graph\n");
		fprintf(stderr, "  simplify    simplify a unitig graph\n");
		fprintf(stderr, "  sa          generate sampled suffix array\n");
		fprintf(stderr, "  match       exact matches\n");
		fprintf(stderr, "  kprof       k-mer profile\n");
		return 1;
	}
	t_start = realtime();
	if (strcmp(argv[1], "diff") == 0) ret = main_diff(argc-1, argv+1);
	else if (strcmp(argv[1], "occflt") == 0) ret = main_diff(argc-1, argv+1);
	else if (strcmp(argv[1], "sub") == 0) ret = main_sub(argc-1, argv+1);
	else if (strcmp(argv[1], "unpack") == 0) ret = main_unpack(argc-1, argv+1);
	else if (strcmp(argv[1], "correct") == 0) ret = main_correct(argc-1, argv+1);
	else if (strcmp(argv[1], "count") == 0) ret = main_count(argc-1, argv+1);
	else if (strcmp(argv[1], "inspectk") == 0) ret = main_inspectk(argc-1, argv+1);
	else if (strcmp(argv[1], "interleave") == 0) ret = main_interleave(argc-1, argv+1);
	else if (strcmp(argv[1], "assemble") == 0) ret = main_assemble(argc-1, argv+1);
	else if (strcmp(argv[1], "simplify") == 0) ret = main_simplify(argc-1, argv+1);
	else if (strcmp(argv[1], "sa") == 0) ret = main_sa(argc-1, argv+1);
	else if (strcmp(argv[1], "match") == 0) ret = main_match(argc-1, argv+1);
	else if (strcmp(argv[1], "kprof") == 0) ret = main_kprof(argc-1, argv+1);
	else {
		fprintf(stderr, "[E::%s] unknown command\n", __func__);
		return 1;
	}
	if (ret == 0) {
		fprintf(stderr, "[M::%s] Version: %s\n", __func__, FM_VERSION);
		fprintf(stderr, "[M::%s] CMD:", __func__);
		for (i = 0; i < argc; ++i)
			fprintf(stderr, " %s", argv[i]);
		fprintf(stderr, "\n[M::%s] Real time: %.3f sec; CPU: %.3f sec\n", __func__, realtime() - t_start, cputime());
	}
	return ret;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x0, -0x14(%rbp)
callq 0x4c90
cmpl $0x1, -0x8(%rbp)
jne 0x2b178
movq 0x7fd5(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x31c9(%rip), %rsi      # 0x2e1f6
movb $0x0, %al
callq 0x21d0
movq 0x7fbd(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x31d6(%rip), %rsi      # 0x2e21b
movb $0x0, %al
callq 0x21d0
movq 0x7fa5(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x31c8(%rip), %rsi      # 0x2e225
movb $0x0, %al
callq 0x21d0
movq 0x7f8d(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x31d7(%rip), %rsi      # 0x2e24c
movb $0x0, %al
callq 0x21d0
movq 0x7f75(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x31fd(%rip), %rsi      # 0x2e28a
movb $0x0, %al
callq 0x21d0
movq 0x7f5d(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x3204(%rip), %rsi      # 0x2e2a9
movb $0x0, %al
callq 0x21d0
movq 0x7f45(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x320b(%rip), %rsi      # 0x2e2c8
movb $0x0, %al
callq 0x21d0
movq 0x7f2d(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x3213(%rip), %rsi      # 0x2e2e8
movb $0x0, %al
callq 0x21d0
movq 0x7f15(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x3237(%rip), %rsi      # 0x2e324
movb $0x0, %al
callq 0x21d0
movq 0x7efd(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x325b(%rip), %rsi      # 0x2e360
movb $0x0, %al
callq 0x21d0
movq 0x7ee5(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x3275(%rip), %rsi      # 0x2e392
movb $0x0, %al
callq 0x21d0
movq 0x7ecd(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x3284(%rip), %rsi      # 0x2e3b9
movb $0x0, %al
callq 0x21d0
movq 0x7eb5(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x3299(%rip), %rsi      # 0x2e3e6
movb $0x0, %al
callq 0x21d0
movq 0x7e9d(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x329e(%rip), %rsi      # 0x2e403
movb $0x0, %al
callq 0x21d0
movl $0x1, -0x4(%rbp)
jmp 0x2b539
callq 0x4d30
movsd %xmm0, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x103c(%rip), %rsi      # 0x2c1cd
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b1b6
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x4ee0
movl %eax, -0x14(%rbp)
jmp 0x2b463
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x325b(%rip), %rsi      # 0x2e420
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b1ea
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x4ee0
movl %eax, -0x14(%rbp)
jmp 0x2b461
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x10b6(%rip), %rsi      # 0x2c2af
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b21e
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x6150
movl %eax, -0x14(%rbp)
jmp 0x2b45f
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x31fa(%rip), %rsi      # 0x2e427
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b252
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x6db0
movl %eax, -0x14(%rbp)
jmp 0x2b45d
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x149c(%rip), %rsi      # 0x2c6fd
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b286
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0xd1b0
movl %eax, -0x14(%rbp)
jmp 0x2b45b
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1bcc(%rip), %rsi      # 0x2ce61
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b2ba
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x10570
movl %eax, -0x14(%rbp)
jmp 0x2b459
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x3165(%rip), %rsi      # 0x2e42e
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b2ee
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0xd940
movl %eax, -0x14(%rbp)
jmp 0x2b457
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x313a(%rip), %rsi      # 0x2e437
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b322
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x144c0
movl %eax, -0x14(%rbp)
jmp 0x2b455
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x3111(%rip), %rsi      # 0x2e442
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b356
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x23aa0
movl %eax, -0x14(%rbp)
jmp 0x2b453
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x30e6(%rip), %rsi      # 0x2e44b
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b38a
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x1fc30
movl %eax, -0x14(%rbp)
jmp 0x2b451
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x2977(%rip), %rsi      # 0x2dd10
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b3be
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x26eb0
movl %eax, -0x14(%rbp)
jmp 0x2b44f
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x2bc9(%rip), %rsi      # 0x2df96
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b3ef
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x28080
movl %eax, -0x14(%rbp)
jmp 0x2b44d
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x2de5(%rip), %rsi      # 0x2e1e3
callq 0x21b0
cmpl $0x0, %eax
jne 0x2b420
movl -0x8(%rbp), %edi
subl $0x1, %edi
movq -0x10(%rbp), %rsi
addq $0x8, %rsi
callq 0x29c50
movl %eax, -0x14(%rbp)
jmp 0x2b44b
movq 0x7bd1(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x3023(%rip), %rsi      # 0x2e454
leaq 0x3035(%rip), %rdx      # 0x2e46d
movb $0x0, %al
callq 0x21d0
movl $0x1, -0x4(%rbp)
jmp 0x2b539
jmp 0x2b44d
jmp 0x2b44f
jmp 0x2b451
jmp 0x2b453
jmp 0x2b455
jmp 0x2b457
jmp 0x2b459
jmp 0x2b45b
jmp 0x2b45d
jmp 0x2b45f
jmp 0x2b461
jmp 0x2b463
cmpl $0x0, -0x14(%rbp)
jne 0x2b533
movq 0x7b84(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x2ff4(%rip), %rsi      # 0x2e472
leaq 0x2fe8(%rip), %rdx      # 0x2e46d
leaq 0x2ffb(%rip), %rcx      # 0x2e487
movb $0x0, %al
callq 0x21d0
movq 0x7b5e(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
leaq 0x2fe8(%rip), %rsi      # 0x2e48c
leaq 0x2fc2(%rip), %rdx      # 0x2e46d
movb $0x0, %al
callq 0x21d0
movl $0x0, -0x18(%rbp)
movl -0x18(%rbp), %eax
cmpl -0x8(%rbp), %eax
jge 0x2b4f0
movq 0x7b30(%rip), %rax      # 0x32ff8
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movslq -0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
leaq 0x2fbb(%rip), %rsi      # 0x2e499
movb $0x0, %al
callq 0x21d0
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0x2b4b9
movq 0x7b01(%rip), %rax      # 0x32ff8
movq (%rax), %rax
movq %rax, -0x30(%rbp)
callq 0x4d30
subsd -0x20(%rbp), %xmm0
movsd %xmm0, -0x28(%rbp)
callq 0x4cd0
movq -0x30(%rbp), %rdi
movaps %xmm0, %xmm1
movsd -0x28(%rbp), %xmm0
leaq 0x2f78(%rip), %rsi      # 0x2e49d
leaq 0x2f41(%rip), %rdx      # 0x2e46d
movb $0x2, %al
callq 0x21d0
movl -0x14(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq