// File: /workspace/github_cpp_makefile_star2_O2/chinmayachaudhry[P]Branch-Predictor/main.cpp
// Function: main
int main(int argc, char *argv[])
{
	string trace_file;
	ll predictor_index_bits, ghr_bits, btb_index_bits, btb_assoc;
	ll chooser_table_index_bits, bimodal_index_bits, gshare_index_bits, history_index_bits;

	ll address;
	int predictor_type;
	char actual_branch;		
	char *fname = (char *)malloc(100);

	if(strcmp(argv[1], "bimodal") == 0)
		predictor_type = 0;
	else if(strcmp(argv[1], "gshare") == 0)
		predictor_type = 1;
	else if(strcmp(argv[1], "hybrid") == 0)
		predictor_type = 2;
	else if(strcmp(argv[1], "yehpatt") == 0)
		predictor_type = 3;
	ifstream fin;

	bimodal *b;
	gshare *g;
	hybrid *h;
	yehpatt *y;
	btb *branch_buffer;
	switch(predictor_type)
	{
		case 0:
			predictor_index_bits = atol(argv[2]);
			btb_index_bits = atol(argv[3]);
			btb_assoc = atol(argv[4]);
			//cout << "index: " << btb_index_bits << " assoc: " << btb_assoc << endl;
			strcpy(fname, argv[5]);
			if(btb_index_bits == 0)
				branch_buffer = NULL;
			else
				branch_buffer = new btb(btb_index_bits, btb_assoc);
			b = new bimodal(predictor_index_bits, branch_buffer);
			break;
//			b->display_table();
//			cout << "BIMODAL";
	
		case 1:
			predictor_index_bits = atol(argv[2]);
			ghr_bits = atol(argv[3]);
			btb_index_bits = atol(argv[4]);
			btb_assoc = atol(argv[5]);
			//cout << "index: " << btb_index_bits << " assoc: " << btb_assoc << endl;
			strcpy(fname, argv[6]);
			if(btb_index_bits == 0)
				branch_buffer = NULL;
			else
				branch_buffer = new btb(btb_index_bits, btb_assoc);
			g = new gshare(predictor_index_bits, ghr_bits, branch_buffer);
			break;
//			b->display_table();
//			cout << "BIMODAL";
		
		case 2:
			chooser_table_index_bits = atol(argv[2]);
			gshare_index_bits = atol(argv[3]);
			ghr_bits = atol(argv[4]);
			bimodal_index_bits = atol(argv[5]);
			btb_index_bits = atol(argv[6]);
			btb_assoc = atol(argv[7]);
			//cout << "index: " << btb_index_bits << " assoc: " << btb_assoc << endl;
			strcpy(fname, argv[8]);
			if(btb_index_bits == 0)
				branch_buffer = NULL;
			else
				branch_buffer = new btb(btb_index_bits, btb_assoc);
			h = new hybrid(bimodal_index_bits, gshare_index_bits, ghr_bits, chooser_table_index_bits, branch_buffer);
			break;
//			b->display_table();
//			cout << "BIMODAL";
		
		case 3:
			history_index_bits = atol(argv[2]);
			predictor_index_bits = atol(argv[3]);
			btb_index_bits = atol(argv[4]);
			btb_assoc = atol(argv[5]);
			//cout << "index: " << btb_index_bits << " assoc: " << btb_assoc << endl;
			strcpy(fname, argv[6]);
			if(btb_index_bits == 0)
				branch_buffer = NULL;
			else
				branch_buffer = new btb(btb_index_bits, btb_assoc);
			y = new yehpatt(history_index_bits, predictor_index_bits, branch_buffer);
			break;

	}

	fin.open(fname);
	static int branches = 0;
	switch(predictor_type)
	{
		case 0:
			while(fin >> hex >> address >> actual_branch)
			{
				branches++;
				if(btb_index_bits != 0 && btb_assoc != 0)
				{
					branch_buffer->access(address, actual_branch);
					if(branch_buffer->get_btb_Hit() == true)		
						b->access(address, actual_branch);	
				}	
				else
					b->access(address, actual_branch);	
			}
			fin.close();
			break;

		case 1:
			while(fin >> hex >> address >> actual_branch)
			{
				branches++;
				if(btb_index_bits != 0 && btb_assoc != 0)
				{
					branch_buffer->access(address, actual_branch);
					if(branch_buffer->get_btb_Hit() == true)		
						g->access(address, actual_branch);	
				}	
				else
					g->access(address, actual_branch);	
			}
			fin.close();
			break;

		case 2:
			while(fin >> hex >> address >> actual_branch)
			{
				branches++;
				if(btb_index_bits != 0 && btb_assoc != 0)
				{
					branch_buffer->access(address, actual_branch);
					if(branch_buffer->get_btb_Hit() == true)		
						h->access(address, actual_branch);	
				}	
				else
					h->access(address, actual_branch);	
			}
			fin.close();
			break;
		
		case 3:
			while(fin >> hex >> address >> actual_branch)
			{
				branches++;
				if(btb_index_bits != 0 && btb_assoc != 0)
				{
					branch_buffer->access(address, actual_branch);
					if(branch_buffer->get_btb_Hit() == true)		
						y->access(address, actual_branch);	
				}	
				else
					y->access(address, actual_branch);	
			}
			fin.close();
			break;
	}

	
	cout << "Command Line:" << endl;
	switch(predictor_type)
	{
		case 0:	
			cout << "./sim_bp bimodal " << argv[2] << " " << argv[3] << " " << argv[4] << " " << argv[5] << endl;
			b->display_table();
			b->print_stats();
			break;

		case 1:	
			cout << "./sim_bp gshare " << argv[2] << " " << argv[3] << " " << argv[4] << " " << argv[5] << " " << argv[6] << endl;
			g->display_table();
			g->print_stats();
			break;	
		
		case 2:	
			cout << "./sim_bp hybrid " << argv[2] << " " << argv[3] << " " << argv[4] << " " << argv[5] << " " << argv[6] << " " << argv[7] << " " << argv[8] << endl;
			h->display_table();
			h->print_stats();
			break;	
		
		case 3:	
			cout << "./sim_bp yehpatt " << argv[2] << " " << argv[3] << " " << argv[4] << " " << argv[5] << " " << argv[6] << endl;
			y->display_table();
			y->print_stats();
			break;	
	}
	
	return 1;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x278, %rsp            # imm = 0x278
movq %rsi, %rbx
leaq 0x60(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
pushq $0x64
popq %rdi
callq 0x21e0
movq %rax, 0x28(%rsp)
movq %rbx, 0x10(%rsp)
movq 0x8(%rbx), %rbx
leaq 0x2b56(%rip), %rsi      # 0x5034
movq %rbx, %rdi
callq 0x2210
testl %eax, %eax
je 0x2517
leaq 0x2b4b(%rip), %rsi      # 0x503c
movq %rbx, %rdi
callq 0x2210
testl %eax, %eax
je 0x251b
leaq 0x2b3f(%rip), %rsi      # 0x5043
movq %rbx, %rdi
callq 0x2210
cmpl $0x1, %eax
pushq $0x3
popq %rbx
sbbl $0x0, %ebx
jmp 0x251e
xorl %ebx, %ebx
jmp 0x251e
pushq $0x1
popq %rbx
leaq 0x70(%rsp), %rdi
callq 0x21b0
movl %ebx, %ecx
leaq 0x2ad3(%rip), %rax      # 0x5004
movq %rcx, 0x48(%rsp)
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x10(%rsp), %r15
movq 0x10(%r15), %rdi
callq 0x21c0
movq %rax, %r14
movq 0x18(%r15), %rdi
callq 0x21c0
movq %rax, %rbx
movq 0x20(%r15), %rdi
callq 0x21c0
movq %rax, 0x18(%rsp)
movq 0x28(%r15), %rsi
movq 0x28(%rsp), %rdi
callq 0x2170
testq %rbx, %rbx
je 0x2752
pushq $0x40
popq %rdi
callq 0x2190
movq %rax, %r15
movq %rax, %rdi
movq %rbx, %rsi
movq 0x18(%rsp), %rdx
callq 0x2e74
jmp 0x2755
movq 0x10(%rsp), %r15
movq 0x10(%r15), %rdi
callq 0x21c0
movq %rax, %r12
movq 0x18(%r15), %rdi
callq 0x21c0
movq %rax, %r13
movq 0x20(%r15), %rdi
callq 0x21c0
movq %rax, %r14
movq 0x28(%r15), %rdi
callq 0x21c0
movq %rax, %rbp
movq 0x30(%r15), %rdi
callq 0x21c0
movq %rax, %rbx
movq 0x38(%r15), %rdi
callq 0x21c0
movq %rax, 0x18(%rsp)
movq 0x40(%r15), %rsi
movq 0x28(%rsp), %rdi
callq 0x2170
testq %rbx, %rbx
je 0x2700
pushq $0x40
popq %rdi
callq 0x2190
movq %rax, %r15
movq %rax, %rdi
movq %rbx, %rsi
movq 0x18(%rsp), %rdx
callq 0x2e74
jmp 0x2703
movq 0x10(%rsp), %r15
movq 0x10(%r15), %rdi
callq 0x21c0
movq %rax, %r14
movq 0x18(%r15), %rdi
callq 0x21c0
movq %rax, %r12
movq 0x20(%r15), %rdi
callq 0x21c0
movq %rax, %rbx
movq 0x28(%r15), %rdi
callq 0x21c0
movq %rax, 0x18(%rsp)
movq 0x30(%r15), %rsi
movq 0x28(%rsp), %rdi
callq 0x2170
testq %rbx, %rbx
je 0x272b
pushq $0x40
popq %rdi
callq 0x2190
movq %rax, %r15
movq %rax, %rdi
movq %rbx, %rsi
movq 0x18(%rsp), %rdx
callq 0x2e74
jmp 0x272e
movq 0x10(%rsp), %r15
movq 0x10(%r15), %rdi
callq 0x21c0
movq %rax, %r14
movq 0x18(%r15), %rdi
callq 0x21c0
movq %rax, %r12
movq 0x20(%r15), %rdi
callq 0x21c0
movq %rax, %rbx
movq 0x28(%r15), %rdi
callq 0x21c0
movq %rax, 0x18(%rsp)
movq 0x30(%r15), %rsi
movq 0x28(%rsp), %rdi
callq 0x2170
testq %rbx, %rbx
je 0x2770
pushq $0x40
popq %rdi
callq 0x2190
movq %rax, %r15
movq %rax, %rdi
movq %rbx, %rsi
movq 0x18(%rsp), %rdx
callq 0x2e74
jmp 0x2773
xorl %r15d, %r15d
pushq $0x78
popq %rdi
callq 0x2190
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rdi
movq %rbp, %rsi
movq %r13, %rdx
movq %r14, %rcx
movq %r12, %r8
movq %r15, %r9
callq 0x4126
jmp 0x2795
xorl %r15d, %r15d
movl $0x98, %edi
callq 0x2190
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x46fe
jmp 0x2795
xorl %r15d, %r15d
pushq $0x60
popq %rdi
callq 0x2190
movq %rax, %rbp
movq %rax, %rdi
movq %r14, %rsi
movq %r15, %rdx
callq 0x352a
jmp 0x2795
xorl %r15d, %r15d
movl $0x88, %edi
callq 0x2190
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rdi
movq %r14, %rsi
movq %r12, %rdx
movq %r15, %rcx
callq 0x3b92
leaq 0x70(%rsp), %rdi
pushq $0x8
popq %rdx
movq 0x28(%rsp), %rsi
callq 0x2100
leaq 0x2866(%rip), %rax      # 0x5014
movq 0x48(%rsp), %rcx
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
testq %rbx, %rbx
setne %al
cmpq $0x0, 0x18(%rsp)
setne %r13b
andb %al, %r13b
leaq 0x70(%rsp), %rbx
leaq 0x20(%rsp), %r14
leaq 0xf(%rsp), %r12
movq 0x70(%rsp), %rax
movq -0x18(%rax), %rax
movl 0x88(%rsp,%rax), %ecx
andl $-0x4b, %ecx
orl $0x8, %ecx
movl %ecx, 0x88(%rsp,%rax)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2200
movq %rax, %rdi
movq %r12, %rsi
callq 0x21d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x2a53
incl 0x594f(%rip)            # 0x8178
movq 0x20(%rsp), %rsi
movb 0xf(%rsp), %al
testb %r13b, %r13b
je 0x2852
movsbl %al, %edx
movq %r15, %rdi
callq 0x2fbc
cmpb $0x1, 0x38(%r15)
jne 0x27de
movq 0x20(%rsp), %rsi
movb 0xf(%rsp), %al
movsbl %al, %edx
movq %rbp, %rdi
callq 0x367a
jmp 0x27de
testq %rbx, %rbx
setne %al
cmpq $0x0, 0x18(%rsp)
setne %r13b
andb %al, %r13b
leaq 0x70(%rsp), %rbx
leaq 0x20(%rsp), %r14
leaq 0xf(%rsp), %r12
movq 0x70(%rsp), %rax
movq -0x18(%rax), %rax
movl 0x88(%rsp,%rax), %ecx
andl $-0x4b, %ecx
orl $0x8, %ecx
movl %ecx, 0x88(%rsp,%rax)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2200
movq %rax, %rdi
movq %r12, %rsi
callq 0x21d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x2a53
incl 0x58a9(%rip)            # 0x8178
movq 0x20(%rsp), %rsi
movb 0xf(%rsp), %al
testb %r13b, %r13b
je 0x28f8
movsbl %al, %edx
movq %r15, %rdi
callq 0x2fbc
cmpb $0x1, 0x38(%r15)
jne 0x2884
movq 0x20(%rsp), %rsi
movb 0xf(%rsp), %al
movsbl %al, %edx
movq 0x30(%rsp), %rdi
callq 0x4362
jmp 0x2884
testq %rbx, %rbx
setne %al
cmpq $0x0, 0x18(%rsp)
setne %r13b
andb %al, %r13b
leaq 0x70(%rsp), %rbx
leaq 0x20(%rsp), %r14
leaq 0xf(%rsp), %r12
movq 0x70(%rsp), %rax
movq -0x18(%rax), %rax
movl 0x88(%rsp,%rax), %ecx
andl $-0x4b, %ecx
orl $0x8, %ecx
movl %ecx, 0x88(%rsp,%rax)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2200
movq %rax, %rdi
movq %r12, %rsi
callq 0x21d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x2a53
incl 0x5801(%rip)            # 0x8178
movq 0x20(%rsp), %rsi
movb 0xf(%rsp), %al
testb %r13b, %r13b
je 0x29a0
movsbl %al, %edx
movq %r15, %rdi
callq 0x2fbc
cmpb $0x1, 0x38(%r15)
jne 0x292c
movq 0x20(%rsp), %rsi
movb 0xf(%rsp), %al
movsbl %al, %edx
movq 0x38(%rsp), %rdi
callq 0x494a
jmp 0x292c
testq %rbx, %rbx
setne %al
cmpq $0x0, 0x18(%rsp)
setne %r13b
andb %al, %r13b
leaq 0x70(%rsp), %rbx
leaq 0x20(%rsp), %r14
leaq 0xf(%rsp), %r12
movq 0x70(%rsp), %rax
movq -0x18(%rax), %rax
movl 0x88(%rsp,%rax), %ecx
andl $-0x4b, %ecx
orl $0x8, %ecx
movl %ecx, 0x88(%rsp,%rax)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2200
movq %rax, %rdi
movq %r12, %rsi
callq 0x21d0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x2a53
incl 0x575d(%rip)            # 0x8178
movq 0x20(%rsp), %rsi
movb 0xf(%rsp), %al
testb %r13b, %r13b
je 0x2a44
movsbl %al, %edx
movq %r15, %rdi
callq 0x2fbc
cmpb $0x1, 0x38(%r15)
jne 0x29d4
movq 0x20(%rsp), %rsi
movb 0xf(%rsp), %al
movsbl %al, %edx
movq 0x40(%rsp), %rdi
callq 0x3d62
jmp 0x29d4
leaq 0x70(%rsp), %rdi
callq 0x2040
movq 0x5574(%rip), %rdi      # 0x7fd8
leaq 0x25df(%rip), %rsi      # 0x504a
callq 0x2180
movq %rax, %rdi
callq 0x20d0
leaq 0x25a5(%rip), %rax      # 0x5024
movq 0x48(%rsp), %rcx
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x5544(%rip), %rdi      # 0x7fd8
leaq 0x25bd(%rip), %rsi      # 0x5058
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x10(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2626(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x18(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2606(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x20(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x25e6(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x28(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20d0
movq %rbp, %rdi
callq 0x36aa
movq %rbp, %rdi
callq 0x376e
jmp 0x2db8
movq 0x54a3(%rip), %rdi      # 0x7fd8
leaq 0x253f(%rip), %rsi      # 0x507b
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x10(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2585(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x18(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2565(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x20(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2545(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x28(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2525(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x30(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2505(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x38(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x24e5(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x40(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20d0
movq 0x30(%rsp), %rdi
callq 0x43fa
movq 0x30(%rsp), %rdi
callq 0x44d0
jmp 0x2db8
movq 0x539e(%rip), %rdi      # 0x7fd8
leaq 0x244b(%rip), %rsi      # 0x508c
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x10(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2480(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x18(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2460(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x20(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2440(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x28(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x2420(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x30(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20d0
movq 0x38(%rsp), %rdi
callq 0x4974
movq 0x38(%rsp), %rdi
callq 0x4b76
jmp 0x2db8
movq 0x52d9(%rip), %rdi      # 0x7fd8
leaq 0x2364(%rip), %rsi      # 0x506a
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x10(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x23bb(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x18(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x239b(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x20(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x237b(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x28(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
leaq 0x235b(%rip), %rsi      # 0x50de
movq %rax, %rdi
callq 0x2180
movq 0x10(%rsp), %rcx
movq 0x30(%rcx), %rsi
movq %rax, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20d0
movq 0x40(%rsp), %rdi
callq 0x3d8c
movq 0x40(%rsp), %rdi
callq 0x3eec
leaq 0x70(%rsp), %rdi
callq 0x2050
leaq 0x50(%rsp), %rdi
callq 0x20c0
pushq $0x1
popq %rax
addq $0x278, %rsp            # imm = 0x278
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x2de7
jmp 0x2de7
jmp 0x2de7
movq %rax, %rbx
pushq $0x40
popq %rsi
movq %r15, %rdi
jmp 0x2e26
movq %rax, %rbx
movl $0x88, %esi
movq 0x40(%rsp), %rdi
jmp 0x2e26
movq %rax, %rbx
pushq $0x60
popq %rsi
movq %rbp, %rdi
jmp 0x2e26
movq %rax, %rbx
movl $0x98, %esi
movq 0x38(%rsp), %rdi
jmp 0x2e26
movq %rax, %rbx
pushq $0x78
popq %rsi
movq 0x30(%rsp), %rdi
callq 0x21a0
jmp 0x2e3d
movq %rax, %rbx
jmp 0x2e47
jmp 0x2e3a
jmp 0x2e3a
jmp 0x2e3a
jmp 0x2e3a
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x2050
leaq 0x50(%rsp), %rdi
callq 0x20c0
movq %rbx, %rdi
callq 0x2270
nopl (%rax)