// File: SeanChao[P]KV-Store/persistence.cc
// Function: main
int main(int argc, char *argv[])
{
	bool verbose = false;
	bool testmode = false;

	if (argc == 2) {
		verbose = std::string(argv[1]) == "-v";
		testmode = std::string(argv[1]) == "-t";
	} else if (argc == 3) {
		verbose = std::string(argv[1]) == "-v" ||
			std::string(argv[2]) == "-v";
		testmode = std::string(argv[1]) == "-t" ||
			std::string(argv[2]) == "-t";
	} else if (argc > 3) {
		std::cerr << "Too many arguments." << std::endl;
		usage(argv[0], "OFF", "Preparation Mode");
		exit(-1);
	}
	usage(argv[0], verbose ? "ON" : "OFF",
	      testmode ? "Test Mode" : "Preparation Mode");

	PersistenceTest test("./data", verbose);

	test.start_test(static_cast<void *>(&testmode));

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x290, %rsp            # imm = 0x290
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movb $0x0, -0x11(%rbp)
movb $0x0, -0x12(%rbp)
cmpl $0x2, -0x8(%rbp)
jne 0x4b0c
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x200(%rbp)
leaq -0x39(%rbp), %rdi
movq %rdi, -0x1f8(%rbp)
callq 0x4540
movq -0x200(%rbp), %rsi
movq -0x1f8(%rbp), %rdx
leaq -0x38(%rbp), %rdi
callq 0x5020
jmp 0x4a03
leaq 0x1175e(%rip), %rsi     # 0x16168
leaq -0x38(%rbp), %rdi
callq 0x50d0
movb %al, -0x201(%rbp)
jmp 0x4a1b
movb -0x201(%rbp), %al
andb $0x1, %al
movb %al, -0x11(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x45d8
leaq -0x39(%rbp), %rdi
callq 0x4340
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x218(%rbp)
leaq -0x71(%rbp), %rdi
movq %rdi, -0x210(%rbp)
callq 0x4540
movq -0x218(%rbp), %rsi
movq -0x210(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x5020
jmp 0x4a70
leaq 0x116f4(%rip), %rsi     # 0x1616b
leaq -0x70(%rbp), %rdi
callq 0x50d0
movb %al, -0x219(%rbp)
jmp 0x4a88
movb -0x219(%rbp), %al
andb $0x1, %al
movb %al, -0x12(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x45d8
leaq -0x71(%rbp), %rdi
callq 0x4340
jmp 0x4ef9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4acd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x45d8
leaq -0x39(%rbp), %rdi
callq 0x4340
jmp 0x5015
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4afe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x45d8
leaq -0x71(%rbp), %rdi
callq 0x4340
jmp 0x5015
cmpl $0x3, -0x8(%rbp)
jne 0x4ea9
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x230(%rbp)
leaq -0x99(%rbp), %rdi
movq %rdi, -0x228(%rbp)
callq 0x4540
movq -0x230(%rbp), %rsi
movq -0x228(%rbp), %rdx
movb $0x0, -0xc2(%rbp)
movb $0x0, -0xc3(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x5020
jmp 0x4b62
leaq 0x115ff(%rip), %rsi     # 0x16168
leaq -0x98(%rbp), %rdi
callq 0x50d0
movb %al, -0x231(%rbp)
jmp 0x4b7d
movb -0x231(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x232(%rbp)
jne 0x4c07
jmp 0x4b92
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x248(%rbp)
leaq -0xc1(%rbp), %rdi
movq %rdi, -0x240(%rbp)
callq 0x4540
movq -0x248(%rbp), %rsi
movq -0x240(%rbp), %rdx
movb $0x1, -0xc2(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x5020
jmp 0x4bd7
movb $0x1, -0xc3(%rbp)
leaq 0x11583(%rip), %rsi     # 0x16168
leaq -0xc0(%rbp), %rdi
callq 0x50d0
movb %al, -0x249(%rbp)
jmp 0x4bf9
movb -0x249(%rbp), %al
movb %al, -0x232(%rbp)
jmp 0x4c07
movb -0x232(%rbp), %al
andb $0x1, %al
movb %al, -0x11(%rbp)
testb $0x1, -0xc3(%rbp)
jne 0x4c1d
jmp 0x4c29
leaq -0xc0(%rbp), %rdi
callq 0x45d8
testb $0x1, -0xc2(%rbp)
jne 0x4c34
jmp 0x4c40
leaq -0xc1(%rbp), %rdi
callq 0x4340
leaq -0x98(%rbp), %rdi
callq 0x45d8
leaq -0x99(%rbp), %rdi
callq 0x4340
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x260(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x4540
movq -0x260(%rbp), %rsi
movq -0x258(%rbp), %rdx
movb $0x0, -0x112(%rbp)
movb $0x0, -0x113(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x5020
jmp 0x4ca4
leaq 0x114c0(%rip), %rsi     # 0x1616b
leaq -0xe8(%rbp), %rdi
callq 0x50d0
movb %al, -0x261(%rbp)
jmp 0x4cbf
movb -0x261(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x262(%rbp)
jne 0x4d49
jmp 0x4cd4
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x278(%rbp)
leaq -0x111(%rbp), %rdi
movq %rdi, -0x270(%rbp)
callq 0x4540
movq -0x278(%rbp), %rsi
movq -0x270(%rbp), %rdx
movb $0x1, -0x112(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x5020
jmp 0x4d19
movb $0x1, -0x113(%rbp)
leaq 0x11444(%rip), %rsi     # 0x1616b
leaq -0x110(%rbp), %rdi
callq 0x50d0
movb %al, -0x279(%rbp)
jmp 0x4d3b
movb -0x279(%rbp), %al
movb %al, -0x262(%rbp)
jmp 0x4d49
movb -0x262(%rbp), %al
andb $0x1, %al
movb %al, -0x12(%rbp)
testb $0x1, -0x113(%rbp)
jne 0x4d5f
jmp 0x4d6b
leaq -0x110(%rbp), %rdi
callq 0x45d8
testb $0x1, -0x112(%rbp)
jne 0x4d76
jmp 0x4d82
leaq -0x111(%rbp), %rdi
callq 0x4340
leaq -0xe8(%rbp), %rdi
callq 0x45d8
leaq -0xe9(%rbp), %rdi
callq 0x4340
jmp 0x4ef7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4e13
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4e07
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4dee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
testb $0x1, -0xc3(%rbp)
jne 0x4de0
jmp 0x4dec
leaq -0xc0(%rbp), %rdi
callq 0x45d8
jmp 0x4dee
testb $0x1, -0xc2(%rbp)
jne 0x4df9
jmp 0x4e05
leaq -0xc1(%rbp), %rdi
callq 0x4340
jmp 0x4e07
leaq -0x98(%rbp), %rdi
callq 0x45d8
leaq -0x99(%rbp), %rdi
callq 0x4340
jmp 0x5015
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4e98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4e8c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4e73
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
testb $0x1, -0x113(%rbp)
jne 0x4e65
jmp 0x4e71
leaq -0x110(%rbp), %rdi
callq 0x45d8
jmp 0x4e73
testb $0x1, -0x112(%rbp)
jne 0x4e7e
jmp 0x4e8a
leaq -0x111(%rbp), %rdi
callq 0x4340
jmp 0x4e8c
leaq -0xe8(%rbp), %rdi
callq 0x45d8
leaq -0xe9(%rbp), %rdi
callq 0x4340
jmp 0x5015
cmpl $0x3, -0x8(%rbp)
jle 0x4ef5
movq 0x1a13a(%rip), %rdi     # 0x1eff0
leaq 0x112b1(%rip), %rsi     # 0x1616e
callq 0x42f0
movq %rax, %rdi
movq 0x1a0e4(%rip), %rsi     # 0x1efb0
callq 0x4320
movq -0x10(%rbp), %rax
movq (%rax), %rdi
leaq 0x112a3(%rip), %rsi     # 0x16182
leaq 0x112a0(%rip), %rdx     # 0x16186
callq 0x47d0
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x43b0
jmp 0x4ef7
jmp 0x4ef9
movq -0x10(%rbp), %rax
movq (%rax), %rdi
movb -0x11(%rbp), %cl
leaq 0x1128d(%rip), %rax     # 0x16197
leaq 0x11271(%rip), %rsi     # 0x16182
testb $0x1, %cl
cmovneq %rax, %rsi
movb -0x12(%rbp), %cl
leaq 0x11278(%rip), %rax     # 0x1619a
leaq 0x1125d(%rip), %rdx     # 0x16186
testb $0x1, %cl
cmovneq %rax, %rdx
callq 0x47d0
leaq -0x1e9(%rbp), %rdi
movq %rdi, -0x288(%rbp)
callq 0x4540
movq -0x288(%rbp), %rdx
leaq 0x1124e(%rip), %rsi     # 0x161a4
leaq -0x1e8(%rbp), %rdi
callq 0x5020
jmp 0x4f64
movzbl -0x11(%rbp), %edx
andl $0x1, %edx
leaq -0x1c8(%rbp), %rdi
leaq -0x1e8(%rbp), %rsi
callq 0x5100
jmp 0x4f80
leaq -0x1e8(%rbp), %rdi
callq 0x45d8
leaq -0x1e9(%rbp), %rdi
callq 0x4340
leaq -0x1c8(%rbp), %rdi
leaq -0x12(%rbp), %rsi
callq 0x5160
jmp 0x4faa
movl $0x0, -0x4(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x5230
movl -0x4(%rbp), %eax
addq $0x290, %rsp            # imm = 0x290
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
jmp 0x4fef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0x45d8
leaq -0x1e9(%rbp), %rdi
callq 0x4340
jmp 0x5015
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x1c8(%rbp), %rdi
callq 0x5230
movq -0x48(%rbp), %rdi
callq 0x4530
nop