// File: /workspace/github_cpp_makefile_star2_O2/datourat[P]IP-label-for-graph-reachability/main.cpp
// Function: main
int main(int argc, char* argv[]){
	Graph g;
	ifstream input;
	string queryfilename;
	string filename;
	bool IndexConstruction=false;
	bool Query=false;
	bool tf=false, pwah8=false, ferrari=false;
	bool dag=false;
	int input_method=1;
	clock_t start, end;

	g.KEYNUM=g.HUGENODENUM=2;
	g.hugenode=100;

	if(argc==1){
		usage();
		exit(0);
	}

	int i=1;
	while(i<argc){
		if (strcmp("--help", argv[i]) == 0) {
                        usage();
                        exit(0);
                }
                if (strcmp("-k", argv[i]) == 0) {
                        i++;
                        g.KEYNUM = atoi(argv[i++]);
                }
                else if (strcmp("-h", argv[i]) == 0) {
                        i++;
                        g.HUGENODENUM = atoi(argv[i++]);
                }
                else if (strcmp("-mu", argv[i]) == 0) {
                        i++;
                        g.hugenode = atoi(argv[i++]);
                }
                else if (strcmp("-i", argv[i]) == 0) {
                        IndexConstruction = true;
                        i++;
                }
                else if (strcmp("-q", argv[i]) == 0) {
                        i++;
			Query = true;
			queryfilename=argv[i++];
                }
		else if (strcmp("-in", argv[i]) == 0) {
			i++;
                        input_method = atoi(argv[i++]);
			if(input_method!=1 && input_method!=2 && input_method!=3){
				cout << "Wrong input method" << endl;
				exit(0);
			}
                }
		else {
                        filename = argv[i++];
                }
	}

	string name;
	name=extractFilename(filename.c_str());
	g.setFilename(name);

	start=clock();
	input.open(filename.c_str());
	if(!input.is_open()){
		cout << "Fail to open the file." << endl;
		exit(0);
	}
	if(input_method==1)
		g.readGraph(input);
	else if(input_method==2)
		g.readGraph2(input);
	else if(input_method==3)
		g.readGraph3(input);
	input.close();
	cout << name << " readGraph is complete." << endl;
	end=clock();
	cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;


	double timesum=0;
	if(IndexConstruction){
                cout << "KEYNUM: " << g.KEYNUM << "\tHUGENODENUM: " << g.HUGENODENUM << "\thugenode: " << g.hugenode << endl;
                start=clock();
                g.ComputeLayerLabel();
                end=clock();
                cout << name << " ComputeLayer is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;

                int count1=0;

                start=clock();
                g.ComputeHugeNodeList();
                end=clock();
                cout << name << " ComputeHugeNodeList is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;

                if(g.HUGENODENUM!=0){
                        for(int i=0; i<g.vsize; i++){
                                count1+=g.HugeNodeList[i].size();
                        }
                }
                cout << "Number of HugeNode is " << count1 << endl;

                double timeprolabel=0;
                start=clock();
                g.InitialProLabel();
                end=clock();
                cout << name << " InitialProLabel is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;
                timeprolabel+=(double)(end-start)/CLOCKS_PER_SEC;


                start=clock();
                g.ComputeProLabelIn();
                end=clock();
                cout << name << " ComputeProLabelIn is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;
                timeprolabel+=(double)(end-start)/CLOCKS_PER_SEC;

                start=clock();
                g.ComputeProLabelOut();
                end=clock();
                cout << name << " ComputeProLabelOut is complete." << endl;
                cout << "Time Cost: " << (double)(end-start)/CLOCKS_PER_SEC << endl;
                timesum+=(double)(end-start)/CLOCKS_PER_SEC;
                timeprolabel+=(double)(end-start)/CLOCKS_PER_SEC;

                int count2=0;
                for(int i=0; i<g.vsize; i++){
                        count2+=g.ProLabelOut[i].size();
                        count2+=g.ProLabelIn[i].size();
                }
                
                cout << "Number of ProLabel is " << count2 << '(' << (double)count2*4/(1024*1024) << " MB)" << endl;
                cout << "Number of index item: " << count1+count2+2*g.vsize << endl;
                cout << "Constructing ProLabel Time: " << timeprolabel << endl;
                cout << "Total Time Used: " << timesum << endl;
                cout << "Total Index Size(MB): " << (double)4*(count1+count2+g.vsize)/(1024*1024) << endl;
                g.PrintIndex((name+".index").c_str());

	}

	if(Query){
		g.IndexQueryTest((name+".index").c_str(), queryfilename);
	}

	cout << endl << endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x408, %rsp            # imm = 0x408
movq %rsi, 0x8(%rsp)
movl %edi, %r14d
leaq 0xf8(%rsp), %rdi
callq 0x41cc
leaq 0x200(%rsp), %rdi
callq 0x32c0
leaq 0xc8(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0xa8(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb %cl, (%rax)
movabsq $0x200000002, %rax      # imm = 0x200000002
movq %rax, 0xf8(%rsp)
movl $0x64, 0x100(%rsp)
cmpl $0x1, %r14d
je 0x4042
pushq $0x1
popq %r13
movl $0x0, 0x24(%rsp)
movl $0x0, 0x10(%rsp)
movl %r13d, 0x18(%rsp)
cmpl %r14d, %r13d
jge 0x38a7
movslq %r13d, %r12
movq 0x8(%rsp), %rax
movq (%rax,%r12,8), %rbx
leaq 0xaae6(%rip), %rdi      # 0xe1f6
movq %rbx, %rsi
callq 0x3350
testl %eax, %eax
je 0x4036
movzbl (%rbx), %ebp
leal -0x2d(%rbp), %r15d
negl %r15d
movl %r15d, %eax
cmpl $0x2d, %ebp
jne 0x3761
movzbl 0x1(%rbx), %eax
subl $0x6b, %eax
jne 0x373f
movzbl 0x2(%rbx), %eax
negl %eax
testl %eax, %eax
je 0x382c
movl %r15d, %eax
cmpb $0x2d, %bpl
jne 0x3761
movzbl 0x1(%rbx), %eax
subl $0x68, %eax
jne 0x375f
movzbl 0x2(%rbx), %eax
negl %eax
testl %eax, %eax
je 0x37ee
leaq 0xaa8d(%rip), %rdi      # 0xe1fd
movq %rbx, %rsi
callq 0x3350
testl %eax, %eax
je 0x380d
cmpb $0x2d, %bpl
jne 0x37b6
movzbl 0x1(%rbx), %eax
subl $0x69, %eax
jne 0x3793
movzbl 0x2(%rbx), %eax
negl %eax
testl %eax, %eax
je 0x3899
cmpb $0x2d, %bpl
jne 0x37b6
movzbl 0x1(%rbx), %r15d
subl $0x71, %r15d
jne 0x37b3
movzbl 0x2(%rbx), %r15d
negl %r15d
testl %r15d, %r15d
je 0x384b
leaq 0xaa3b(%rip), %rdi      # 0xe201
movq %rbx, %rsi
callq 0x3350
testl %eax, %eax
je 0x3871
incl %r13d
leaq 0x98(%rsp), %rdi
movq %rbx, %rsi
callq 0x3480
jmp 0x36f4
addl $0x2, %r13d
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %rdi
callq 0x33a0
movl %eax, 0xfc(%rsp)
jmp 0x36f4
addl $0x2, %r13d
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %rdi
callq 0x33a0
movl %eax, 0x100(%rsp)
jmp 0x36f4
addl $0x2, %r13d
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %rdi
callq 0x33a0
movl %eax, 0xf8(%rsp)
jmp 0x36f4
addl $0x2, %r13d
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %rsi
movb $0x1, %al
movl %eax, 0x24(%rsp)
leaq 0xb8(%rsp), %rdi
callq 0x3480
jmp 0x36f4
addl $0x2, %r13d
movq 0x8(%rsp), %rax
movq 0x8(%rax,%r12,8), %rdi
callq 0x33a0
movl %eax, 0x18(%rsp)
addl $-0x4, %eax
cmpl $-0x4, %eax
ja 0x36f4
jmp 0x4066
incl %r13d
movb $0x1, %al
movl %eax, 0x10(%rsp)
jmp 0x36f4
leaq 0x38(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq 0x98(%rsp), %rsi
leaq 0x48(%rsp), %rdi
callq 0x4154
leaq 0x28(%rsp), %rbx
leaq 0x48(%rsp), %r14
movq %rbx, %rdi
movq %r14, %rsi
callq 0x3300
movq %r14, %rdi
callq 0x3120
leaq 0xd8(%rsp), %rdi
movq %rbx, %rsi
callq 0x3340
leaq 0xf8(%rsp), %rdi
leaq 0xd8(%rsp), %rsi
callq 0x57a0
leaq 0xd8(%rsp), %rdi
callq 0x3120
callq 0x31c0
movq %rax, %rbx
movq 0x98(%rsp), %rsi
leaq 0x200(%rsp), %rdi
pushq $0x8
popq %rdx
callq 0x3190
leaq 0x278(%rsp), %rdi
callq 0x3090
testb %al, %al
je 0x4049
movl 0x18(%rsp), %eax
cmpl $0x3, %eax
je 0x398f
cmpl $0x2, %eax
je 0x3978
cmpl $0x1, %eax
jne 0x39a4
leaq 0xf8(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x45dc
jmp 0x39a4
leaq 0xf8(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x4cea
jmp 0x39a4
leaq 0xf8(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x4e32
leaq 0x200(%rsp), %rdi
callq 0x3070
movq 0x11620(%rip), %rdi     # 0x14fd8
leaq 0x28(%rsp), %rsi
callq 0x3220
leaq 0xa866(%rip), %rsi      # 0xe22f
movq %rax, %rdi
callq 0x3270
movq %rax, %rdi
callq 0x3140
callq 0x31c0
movq %rax, %r14
movq 0x115f0(%rip), %rdi     # 0x14fd8
leaq 0xa858(%rip), %rsi      # 0xe247
callq 0x3270
subq %rbx, %r14
cvtsi2sd %r14, %xmm0
divsd 0xa604(%rip), %xmm0     # 0xe008
movq %rax, %rdi
callq 0x33c0
movq %rax, %rdi
callq 0x3140
testb $0x1, 0x10(%rsp)
je 0x3f71
movq 0x115b2(%rip), %rdi     # 0x14fd8
leaq 0xa826(%rip), %rsi      # 0xe253
callq 0x3270
movl 0xf8(%rsp), %esi
movq %rax, %rdi
callq 0x3420
leaq 0xa814(%rip), %rsi      # 0xe25c
movq %rax, %rdi
callq 0x3270
movl 0xfc(%rsp), %esi
movq %rax, %rdi
callq 0x3420
leaq 0xa805(%rip), %rsi      # 0xe26b
movq %rax, %rdi
callq 0x3270
movl 0x100(%rsp), %esi
movq %rax, %rdi
callq 0x3420
movq %rax, %rdi
callq 0x3140
callq 0x31c0
movq %rax, %rbx
leaq 0xf8(%rsp), %rdi
callq 0x5bc6
callq 0x31c0
movq %rax, %r14
movq 0x1152f(%rip), %rdi     # 0x14fd8
leaq 0x28(%rsp), %rsi
callq 0x3220
leaq 0xa7bd(%rip), %rsi      # 0xe277
movq %rax, %rdi
callq 0x3270
movq %rax, %rdi
callq 0x3140
movq 0x11507(%rip), %rdi     # 0x14fd8
leaq 0xa76f(%rip), %rsi      # 0xe247
callq 0x3270
subq %rbx, %r14
cvtsi2sd %r14, %xmm0
divsd 0xa51b(%rip), %xmm0     # 0xe008
movq %rax, %rdi
movsd %xmm0, 0x8(%rsp)
callq 0x33c0
movq %rax, %rdi
callq 0x3140
callq 0x31c0
movq %rax, %rbx
leaq 0xf8(%rsp), %rdi
callq 0x888e
callq 0x31c0
movq %rax, %r14
movq 0x114b1(%rip), %rdi     # 0x14fd8
leaq 0x28(%rsp), %rsi
callq 0x3220
leaq 0xa75a(%rip), %rsi      # 0xe292
movq %rax, %rdi
callq 0x3270
movq %rax, %rdi
callq 0x3140
movq 0x11489(%rip), %rdi     # 0x14fd8
leaq 0xa6f1(%rip), %rsi      # 0xe247
callq 0x3270
subq %rbx, %r14
cvtsi2sd %r14, %xmm0
divsd 0xa49d(%rip), %xmm0     # 0xe008
movq %rax, %rdi
movsd %xmm0, 0x10(%rsp)
callq 0x33c0
movq %rax, %rdi
callq 0x3140
cmpl $0x0, 0xfc(%rsp)
je 0x3bc1
movl 0x104(%rsp), %edx
movq 0x1e8(%rsp), %rax
xorl %ecx, %ecx
testl %edx, %edx
cmovlel %ecx, %edx
imulq $0x18, %rdx, %rdx
xorl %ebx, %ebx
cmpq %rcx, %rdx
je 0x3bc3
movq 0x8(%rax,%rcx), %rsi
subq (%rax,%rcx), %rsi
shrq $0x2, %rsi
addl %esi, %ebx
addq $0x18, %rcx
jmp 0x3ba7
xorl %ebx, %ebx
movq 0x1140e(%rip), %rdi     # 0x14fd8
leaq 0xa6e3(%rip), %rsi      # 0xe2b4
callq 0x3270
movq %rax, %rdi
movl %ebx, %esi
callq 0x3420
movq %rax, %rdi
callq 0x3140
callq 0x31c0
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0x729c
callq 0x31c0
movq %rax, %r15
movq 0x113cc(%rip), %rdi     # 0x14fd8
leaq 0x28(%rsp), %rsi
callq 0x3220
leaq 0xa6ae(%rip), %rsi      # 0xe2cb
movq %rax, %rdi
callq 0x3270
movq %rax, %rdi
callq 0x3140
movq 0x113a4(%rip), %rdi     # 0x14fd8
leaq 0xa60c(%rip), %rsi      # 0xe247
callq 0x3270
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xa3b8(%rip), %xmm0     # 0xe008
movq %rax, %rdi
movsd %xmm0, 0x70(%rsp)
callq 0x33c0
movq %rax, %rdi
callq 0x3140
callq 0x31c0
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0x7b2e
callq 0x31c0
movq %rax, %r15
movq 0x1134e(%rip), %rdi     # 0x14fd8
leaq 0x28(%rsp), %rsi
callq 0x3220
leaq 0xa64e(%rip), %rsi      # 0xe2e9
movq %rax, %rdi
callq 0x3270
movq %rax, %rdi
callq 0x3140
movq 0x11326(%rip), %rdi     # 0x14fd8
leaq 0xa58e(%rip), %rsi      # 0xe247
callq 0x3270
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xa33a(%rip), %xmm0     # 0xe008
movq %rax, %rdi
movsd %xmm0, 0x68(%rsp)
callq 0x33c0
movq %rax, %rdi
callq 0x3140
callq 0x31c0
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0x738c
callq 0x31c0
movq %rax, %r15
movq 0x112d0(%rip), %rdi     # 0x14fd8
leaq 0x28(%rsp), %rsi
callq 0x3220
leaq 0xa5f0(%rip), %rsi      # 0xe309
movq %rax, %rdi
callq 0x3270
movq %rax, %rdi
callq 0x3140
movq 0x112a8(%rip), %rdi     # 0x14fd8
leaq 0xa510(%rip), %rsi      # 0xe247
callq 0x3270
subq %r14, %r15
cvtsi2sd %r15, %xmm0
divsd 0xa2bc(%rip), %xmm0     # 0xe008
movq %rax, %rdi
movsd %xmm0, 0x18(%rsp)
callq 0x33c0
movq %rax, %rdi
callq 0x3140
xorpd %xmm0, %xmm0
movsd 0x8(%rsp), %xmm1
addsd %xmm0, %xmm1
addsd 0x10(%rsp), %xmm1
movsd 0x70(%rsp), %xmm0
addsd %xmm0, %xmm1
xorpd %xmm2, %xmm2
addsd %xmm0, %xmm2
movsd 0x68(%rsp), %xmm0
addsd %xmm0, %xmm1
addsd %xmm0, %xmm2
movsd %xmm2, 0x10(%rsp)
addsd 0x18(%rsp), %xmm1
movsd %xmm1, 0x8(%rsp)
movl 0x104(%rsp), %esi
movq 0x170(%rsp), %rax
movq 0x188(%rsp), %rcx
xorl %edx, %edx
testl %esi, %esi
cmovlel %edx, %esi
imulq $0x18, %rsi, %rsi
xorl %r14d, %r14d
cmpq %rdx, %rsi
je 0x3dfb
movq 0x8(%rax,%rdx), %rdi
subq (%rax,%rdx), %rdi
shrq $0x2, %rdi
addl %edi, %r14d
movq 0x8(%rcx,%rdx), %rdi
subq (%rcx,%rdx), %rdi
shrq $0x2, %rdi
addl %r14d, %edi
addq $0x18, %rdx
movl %edi, %r14d
jmp 0x3dcd
movq 0x111d6(%rip), %rdi     # 0x14fd8
leaq 0xa521(%rip), %rsi      # 0xe32a
callq 0x3270
movq %rax, %rdi
movl %r14d, %esi
callq 0x3420
pushq $0x28
popq %rsi
movq %rax, %rdi
callq 0x32e0
cvtsi2sd %r14d, %xmm0
mulsd 0xa1df(%rip), %xmm0     # 0xe010
mulsd 0xa1df(%rip), %xmm0     # 0xe018
movq %rax, %rdi
callq 0x33c0
leaq 0xa4f9(%rip), %rsi      # 0xe341
movq %rax, %rdi
callq 0x3270
movq %rax, %rdi
callq 0x3140
movq 0x11179(%rip), %rdi     # 0x14fd8
leaq 0xa4e0(%rip), %rsi      # 0xe346
callq 0x3270
addl %ebx, %r14d
movl 0x104(%rsp), %ecx
leal (%r14,%rcx,2), %esi
movq %rax, %rdi
callq 0x3420
movq %rax, %rdi
callq 0x3140
movq 0x11148(%rip), %rdi     # 0x14fd8
leaq 0xa4c6(%rip), %rsi      # 0xe35d
callq 0x3270
movsd 0x10(%rsp), %xmm0
addsd 0x18(%rsp), %xmm0
movq %rax, %rdi
callq 0x33c0
movq %rax, %rdi
callq 0x3140
movq 0x11119(%rip), %rdi     # 0x14fd8
leaq 0xa4b4(%rip), %rsi      # 0xe37a
callq 0x3270
movq %rax, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x33c0
movq %rax, %rdi
callq 0x3140
movq 0x110f0(%rip), %rdi     # 0x14fd8
leaq 0xa49d(%rip), %rsi      # 0xe38c
callq 0x3270
addl 0x104(%rsp), %r14d
cvtsi2sd %r14d, %xmm0
mulsd 0xa107(%rip), %xmm0     # 0xe010
mulsd 0xa107(%rip), %xmm0     # 0xe018
movq %rax, %rdi
callq 0x33c0
movq %rax, %rdi
callq 0x3140
leaq 0xa47b(%rip), %rdx      # 0xe3a3
leaq 0x78(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x4119
movq 0x78(%rsp), %rsi
leaq 0x48(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x30f0
leaq 0xf8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
callq 0x7fb8
leaq 0x48(%rsp), %rdi
callq 0x3120
leaq 0x78(%rsp), %rdi
callq 0x3120
testb $0x1, 0x24(%rsp)
je 0x3fd0
leaq 0xa424(%rip), %rdx      # 0xe3a3
leaq 0x78(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x4119
movq 0x78(%rsp), %rsi
leaq 0x48(%rsp), %rdi
leaq 0x7(%rsp), %rdx
callq 0x30f0
leaq 0xf8(%rsp), %rdi
leaq 0x48(%rsp), %rsi
leaq 0xb8(%rsp), %rdx
callq 0x8d18
leaq 0x48(%rsp), %rdi
callq 0x3120
leaq 0x78(%rsp), %rdi
callq 0x3120
movq 0x11001(%rip), %rdi     # 0x14fd8
callq 0x3140
movq %rax, %rdi
callq 0x3140
leaq 0x28(%rsp), %rdi
callq 0x3120
leaq 0x98(%rsp), %rdi
callq 0x3120
leaq 0xb8(%rsp), %rdi
callq 0x3120
leaq 0x200(%rsp), %rdi
callq 0x30a0
leaq 0xf8(%rsp), %rdi
callq 0x4906
xorl %eax, %eax
addq $0x408, %rsp            # imm = 0x408
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x363c
xorl %edi, %edi
callq 0x32f0
callq 0x363c
jmp 0x403b
movq 0x10f88(%rip), %rdi     # 0x14fd8
leaq 0xa1c1(%rip), %rsi      # 0xe218
callq 0x3270
movq %rax, %rdi
callq 0x3140
jmp 0x403b
movq 0x10f6b(%rip), %rdi     # 0x14fd8
leaq 0xa191(%rip), %rsi      # 0xe205
callq 0x3270
movq %rax, %rdi
callq 0x3140
jmp 0x403b
jmp 0x40da
jmp 0x408b
jmp 0x409a
jmp 0x40cb
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x3120
jmp 0x409d
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
jmp 0x40b3
jmp 0x40cb
jmp 0x40da
movq %rax, %rbx
leaq 0xd8(%rsp), %rdi
callq 0x3120
jmp 0x40ce
jmp 0x40cb
movq %rax, %rbx
jmp 0x4104
jmp 0x40cb
jmp 0x40cb
jmp 0x40cb
jmp 0x40da
jmp 0x40cb
movq %rax, %rbx
leaq 0x28(%rsp), %rdi
callq 0x3120
jmp 0x40dd
movq %rax, %rbx
leaq 0x98(%rsp), %rdi
callq 0x3120
leaq 0xb8(%rsp), %rdi
callq 0x3120
leaq 0x200(%rsp), %rdi
callq 0x30a0
leaq 0xf8(%rsp), %rdi
callq 0x4906
movq %rbx, %rdi
callq 0x3430