// File: sjain12[P]CliqueCounting/tests/test_cliques_edge_sampling.cpp
// Function: main
int main(int argc, char *argv[])
{
    if(argc < 11) {
        usage();
        exit(1);
    }

    std::vector<std::string> graphs; // input files
	srand (time(NULL));
    int min_clique_size = 0, max_clique_size = 0, runs = 0, i = 0;
    float start_threshold = 0.0, end_threshold = 0.0, threshold_interval = 0.0, p;
	int num_samples=0, full=0;
    char c;
    printf("*****************************\n");
    while ((c = getopt(argc, argv, "i:m:M:r:p:")) != -1) {
        switch (c) {
            case 'i': {
                // multiple input files
                char *token = std::strtok(optarg, ",");
                printf("Input Files: ");
                while (token != NULL) {
                    graphs.push_back(std::string(token));
                    printf("%s,",token);
                    token = std::strtok(NULL, ",");
                }
                printf("\n");
            }
            break;

            case 'm':
                min_clique_size = atoi(optarg);
                cout << "Min Clique Size: " << min_clique_size << endl;
            break;

            case 'M':
                max_clique_size = atoi(optarg);
                cout << "Max Clique Size: " << max_clique_size << endl;
            break;

            case 'r':
                runs = atoi(optarg);
                cout << "Runs: " << runs << endl;
            break;

            case 'p':
                p = atof(optarg);
                cout << "Probability: " << p << endl;
            break;

        }
    }
    printf("*****************************\n\n");

    
    populate_nCr();
    
    for (std::vector<std::string>::iterator it=graphs.begin(); it!=graphs.end(); ++it)
    {
        std::string fname = "../graphs/" + *it;
        std::cout << fname << std::endl;
        string f = *it;
        char *token = std::strtok(strdup(f.c_str()), ".");
        string gname(token);
        cout << "GNAME = " << gname << endl;

        for(i=min_clique_size; i<=max_clique_size; i++)
        {
			string outfile(gname + "_" + to_string(i) + "_0." + to_string(int(p*100)) + "_" + to_string(runs) + "_es");
			std::string ofname = "../results/cliques/" + outfile;
    		std::cout << ofname << std::endl;
    		std::ofstream of;
    		of.open(ofname);
    		if (!of.is_open())
    		{
        		std::cout << "Could not open output file." << std::endl;
        		exit(1);
  			}
    		printf("Output File: %s\n", ofname.c_str());

			of << "csize,estimate,time,edges,num_cliques," << endl;
       	
			for (int run=0; run < runs; run++)
			{
                Graph g;
                printf("Loading graph\n");
                if (loadGraph_p(fname.c_str(), g, 1, IOFormat::escape, p))
                    exit(1);
                cout << "vertices: " << g.nVertices << " edges = " << g.nEdges << std::endl;

                printf("Converting to CSR\n");
                CGraph cg = makeCSR(g);

                printf("Creating DAG\n");
                CDAG dag = degreeOrdered(&cg);

                cout << "vertices: " << g.nVertices << " edges = " << g.nEdges << std::endl;

                cliques_edge_sampling_1(cg, dag, of, gname, "", i, p);
            	of << std::endl;
                delGraph(g);
            	delCGraph(cg);
                delCDAG(dag);

            }
			of.close();

        }
    }

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x730, %rsp            # imm = 0x730
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0xb, -0x8(%rbp)
jge 0x4e8e
callq 0x4e40
movl $0x1, %edi
callq 0x33e0
leaq -0x28(%rbp), %rdi
callq 0x5eb0
xorl %eax, %eax
movl %eax, -0x5f4(%rbp)
movl %eax, %edi
callq 0x32c0
movl %eax, %edi
callq 0x32f0
movl -0x5f4(%rbp), %eax
movl $0x0, -0x2c(%rbp)
movl $0x0, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
movl $0x0, -0x38(%rbp)
movl $0x0, -0x3c(%rbp)
movl $0x0, -0x40(%rbp)
movl $0x0, -0x44(%rbp)
movl $0x0, -0x4c(%rbp)
movl $0x0, -0x50(%rbp)
leaq 0xf2fe(%rip), %rdi      # 0x141f7
callq 0x3050
jmp 0x4f00
jmp 0x4f02
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
leaq 0xf306(%rip), %rdx      # 0x14216
callq 0x30c0
movb %al, -0x51(%rbp)
movsbl %al, %eax
cmpl $-0x1, %eax
je 0x5200
movsbl -0x51(%rbp), %eax
addl $-0x4d, %eax
movl %eax, %ecx
movq %rcx, -0x600(%rbp)
subl $0x25, %eax
ja 0x51fb
movq -0x600(%rbp), %rax
leaq 0xf0c9(%rip), %rcx      # 0x14014
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5c4a
movq 0x18054(%rip), %rax     # 0x1cfc0
movq (%rax), %rdi
leaq 0xf2bb(%rip), %rsi      # 0x14231
callq 0x34b0
movq %rax, -0x70(%rbp)
leaq 0xf29b(%rip), %rdi      # 0x14221
xorl %eax, %eax
callq 0x3050
jmp 0x4f8f
jmp 0x4f91
cmpq $0x0, -0x70(%rbp)
je 0x5064
movq -0x70(%rbp), %rax
movq %rax, -0x610(%rbp)
leaq -0x91(%rbp), %rdi
movq %rdi, -0x608(%rbp)
callq 0x35a0
movq -0x610(%rbp), %rsi
movq -0x608(%rbp), %rdx
leaq -0x90(%rbp), %rdi
callq 0x5cd0
jmp 0x4fd6
leaq -0x28(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x5ed0
jmp 0x4fe8
leaq -0x90(%rbp), %rdi
callq 0x31c0
leaq -0x91(%rbp), %rdi
callq 0x3380
movq -0x70(%rbp), %rsi
leaq 0xf224(%rip), %rdi      # 0x1422f
xorl %eax, %eax
callq 0x3050
jmp 0x5014
xorl %eax, %eax
movl %eax, %edi
leaq 0xf212(%rip), %rsi      # 0x14231
callq 0x34b0
movq %rax, -0x70(%rbp)
jmp 0x4f91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5053
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x31c0
leaq -0x91(%rbp), %rdi
callq 0x3380
jmp 0x5c4a
leaq 0xf21f(%rip), %rdi      # 0x1428a
xorl %eax, %eax
callq 0x3050
jmp 0x5074
jmp 0x51fb
movq 0x17f40(%rip), %rax     # 0x1cfc0
movq (%rax), %rdi
callq 0x34a0
movl %eax, -0x2c(%rbp)
movq 0x17f3e(%rip), %rdi     # 0x1cfd0
leaq 0xf19a(%rip), %rsi      # 0x14233
callq 0x3310
movq %rax, -0x618(%rbp)
jmp 0x50a7
movq -0x618(%rbp), %rdi
movl -0x2c(%rbp), %esi
callq 0x3570
movq %rax, -0x620(%rbp)
jmp 0x50bf
movq -0x620(%rbp), %rdi
movq 0x17eeb(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x50d4
jmp 0x51fb
movq 0x17ee0(%rip), %rax     # 0x1cfc0
movq (%rax), %rdi
callq 0x34a0
movl %eax, -0x30(%rbp)
movq 0x17ede(%rip), %rdi     # 0x1cfd0
leaq 0xf14c(%rip), %rsi      # 0x14245
callq 0x3310
movq %rax, -0x628(%rbp)
jmp 0x5107
movq -0x628(%rbp), %rdi
movl -0x30(%rbp), %esi
callq 0x3570
movq %rax, -0x630(%rbp)
jmp 0x511f
movq -0x630(%rbp), %rdi
movq 0x17e8b(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x5134
jmp 0x51fb
movq 0x17e80(%rip), %rax     # 0x1cfc0
movq (%rax), %rdi
callq 0x34a0
movl %eax, -0x34(%rbp)
movq 0x17e7e(%rip), %rdi     # 0x1cfd0
leaq 0xf0fe(%rip), %rsi      # 0x14257
callq 0x3310
movq %rax, -0x638(%rbp)
jmp 0x5167
movq -0x638(%rbp), %rdi
movl -0x34(%rbp), %esi
callq 0x3570
movq %rax, -0x640(%rbp)
jmp 0x517f
movq -0x640(%rbp), %rdi
movq 0x17e2b(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x5194
jmp 0x51fb
movq 0x17e23(%rip), %rax     # 0x1cfc0
movq (%rax), %rdi
callq 0x3400
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x48(%rbp)
movq 0x17e1b(%rip), %rdi     # 0x1cfd0
leaq 0xf0a2(%rip), %rsi      # 0x1425e
callq 0x3310
movq %rax, -0x648(%rbp)
jmp 0x51ca
movq -0x648(%rbp), %rdi
movss -0x48(%rbp), %xmm0
callq 0x3220
movq %rax, -0x650(%rbp)
jmp 0x51e4
movq -0x650(%rbp), %rdi
movq 0x17dc6(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x51f9
jmp 0x51fb
jmp 0x4f02
leaq 0xf065(%rip), %rdi      # 0x1426c
xorl %eax, %eax
callq 0x3050
jmp 0x5210
callq 0x3bd0
jmp 0x5217
leaq -0x28(%rbp), %rdi
callq 0x5f00
movq %rax, -0xa0(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x5f70
movq %rax, -0xa8(%rbp)
leaq -0xa0(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x5f30
testb $0x1, %al
jne 0x5253
jmp 0x5c35
leaq -0xa0(%rbp), %rdi
callq 0x60b0
movq %rax, %rdx
leaq 0xf023(%rip), %rsi      # 0x1428c
leaq -0xc8(%rbp), %rdi
callq 0x5fa0
jmp 0x5277
movq 0x17d52(%rip), %rdi     # 0x1cfd0
leaq -0xc8(%rbp), %rsi
callq 0x32b0
movq %rax, -0x658(%rbp)
jmp 0x5293
movq -0x658(%rbp), %rdi
movq 0x17d17(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x52a8
leaq -0xa0(%rbp), %rdi
callq 0x60b0
movq %rax, %rsi
leaq -0xe8(%rbp), %rdi
callq 0x3140
jmp 0x52c5
leaq -0xe8(%rbp), %rdi
callq 0x3130
movq %rax, %rdi
callq 0x35d0
movq %rax, %rdi
leaq 0xefc1(%rip), %rsi      # 0x142a4
callq 0x34b0
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0x668(%rbp)
leaq -0x111(%rbp), %rdi
movq %rdi, -0x660(%rbp)
callq 0x35a0
movq -0x668(%rbp), %rsi
movq -0x660(%rbp), %rdx
leaq -0x110(%rbp), %rdi
callq 0x5cd0
jmp 0x532c
leaq -0x111(%rbp), %rdi
callq 0x3380
movq 0x17c91(%rip), %rdi     # 0x1cfd0
leaq 0xef51(%rip), %rsi      # 0x14297
callq 0x3310
movq %rax, -0x670(%rbp)
jmp 0x5354
movq -0x670(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x32b0
movq %rax, -0x678(%rbp)
jmp 0x5370
movq -0x678(%rbp), %rdi
movq 0x17c3a(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x5385
movl -0x2c(%rbp), %eax
movl %eax, -0x38(%rbp)
movl -0x38(%rbp), %eax
cmpl -0x30(%rbp), %eax
jg 0x5bda
leaq 0xef02(%rip), %rdx      # 0x142a0
leaq -0x1f8(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x61f0
jmp 0x53b3
movl -0x38(%rbp), %esi
leaq -0x218(%rbp), %rdi
callq 0x6270
jmp 0x53c4
leaq -0x1d8(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
leaq -0x218(%rbp), %rdx
callq 0x6120
jmp 0x53e0
leaq 0xeebb(%rip), %rdx      # 0x142a2
leaq -0x1b8(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x60d0
jmp 0x53fc
movss -0x48(%rbp), %xmm0
movss 0xec07(%rip), %xmm1     # 0x14010
mulss %xmm1, %xmm0
cvttss2si %xmm0, %esi
leaq -0x238(%rbp), %rdi
callq 0x6270
jmp 0x541f
leaq -0x198(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
leaq -0x238(%rbp), %rdx
callq 0x6120
jmp 0x543b
leaq 0xee5e(%rip), %rdx      # 0x142a0
leaq -0x178(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x60d0
jmp 0x5457
movl -0x34(%rbp), %esi
leaq -0x258(%rbp), %rdi
callq 0x6270
jmp 0x5468
leaq -0x158(%rbp), %rdi
leaq -0x178(%rbp), %rsi
leaq -0x258(%rbp), %rdx
callq 0x6120
jmp 0x5484
leaq 0xee1b(%rip), %rdx      # 0x142a6
leaq -0x138(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x60d0
jmp 0x54a0
leaq -0x158(%rbp), %rdi
callq 0x31c0
leaq -0x258(%rbp), %rdi
callq 0x31c0
leaq -0x178(%rbp), %rdi
callq 0x31c0
leaq -0x198(%rbp), %rdi
callq 0x31c0
leaq -0x238(%rbp), %rdi
callq 0x31c0
leaq -0x1b8(%rbp), %rdi
callq 0x31c0
leaq -0x1d8(%rbp), %rdi
callq 0x31c0
leaq -0x218(%rbp), %rdi
callq 0x31c0
leaq -0x1f8(%rbp), %rdi
callq 0x31c0
leaq 0xed97(%rip), %rsi      # 0x142aa
leaq -0x278(%rbp), %rdi
leaq -0x138(%rbp), %rdx
callq 0x5fa0
jmp 0x5528
movq 0x17aa1(%rip), %rdi     # 0x1cfd0
leaq -0x278(%rbp), %rsi
callq 0x32b0
movq %rax, -0x680(%rbp)
jmp 0x5544
movq -0x680(%rbp), %rdi
movq 0x17a66(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x5559
leaq -0x478(%rbp), %rdi
callq 0x3550
jmp 0x5567
leaq -0x478(%rbp), %rdi
leaq -0x278(%rbp), %rsi
movl $0x10, %edx
callq 0x3160
jmp 0x5581
leaq -0x478(%rbp), %rdi
callq 0x3240
movb %al, -0x681(%rbp)
jmp 0x5595
movb -0x681(%rbp), %al
testb $0x1, %al
jne 0x574b
jmp 0x55a5
movq 0x17a24(%rip), %rdi     # 0x1cfd0
leaq 0xeb32(%rip), %rsi      # 0x140e5
callq 0x3310
movq %rax, -0x690(%rbp)
jmp 0x55c1
movq -0x690(%rbp), %rdi
movq 0x179e9(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x55d6
movl $0x1, %edi
callq 0x33e0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5c27
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x111(%rbp), %rdi
callq 0x3380
jmp 0x5c1b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5c0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5707
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x56fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x56ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x56e3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x56d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x56cb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x56bf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x56b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x158(%rbp), %rdi
callq 0x31c0
leaq -0x258(%rbp), %rdi
callq 0x31c0
leaq -0x178(%rbp), %rdi
callq 0x31c0
leaq -0x198(%rbp), %rdi
callq 0x31c0
leaq -0x238(%rbp), %rdi
callq 0x31c0
leaq -0x1b8(%rbp), %rdi
callq 0x31c0
leaq -0x1d8(%rbp), %rdi
callq 0x31c0
leaq -0x218(%rbp), %rdi
callq 0x31c0
leaq -0x1f8(%rbp), %rdi
callq 0x31c0
jmp 0x5c0f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5bcc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5bc0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5bb4
leaq -0x278(%rbp), %rdi
callq 0x3130
movq %rax, %rsi
leaq 0xeb5d(%rip), %rdi      # 0x142be
xorl %eax, %eax
callq 0x3050
jmp 0x576a
leaq 0xeb5e(%rip), %rsi      # 0x142cf
leaq -0x478(%rbp), %rdi
callq 0x3310
movq %rax, -0x698(%rbp)
jmp 0x5786
movq -0x698(%rbp), %rdi
movq 0x17824(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x579b
movl $0x0, -0x47c(%rbp)
movl -0x47c(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0x5b74
leaq 0xeb3b(%rip), %rdi      # 0x142f6
xorl %eax, %eax
callq 0x3050
jmp 0x57c4
leaq -0xc8(%rbp), %rdi
callq 0x3130
movq %rax, %rdi
movss -0x48(%rbp), %xmm0
leaq -0x4a0(%rbp), %rsi
movl $0x1, %ecx
movl %ecx, %edx
callq 0x12d50
movl %eax, -0x69c(%rbp)
jmp 0x57f3
movl -0x69c(%rbp), %eax
cmpl $0x0, %eax
je 0x5808
movl $0x1, %edi
callq 0x33e0
movq 0x177c1(%rip), %rdi     # 0x1cfd0
leaq 0xeaef(%rip), %rsi      # 0x14305
callq 0x3310
movq %rax, -0x6a8(%rbp)
jmp 0x5824
movq -0x6a8(%rbp), %rdi
movq -0x4a0(%rbp), %rsi
callq 0x35c0
movq %rax, -0x6b0(%rbp)
jmp 0x5840
movq -0x6b0(%rbp), %rdi
leaq 0xeac2(%rip), %rsi      # 0x14310
callq 0x3310
movq %rax, -0x6b8(%rbp)
jmp 0x585c
movq -0x6b8(%rbp), %rdi
movq -0x498(%rbp), %rsi
callq 0x35c0
movq %rax, -0x6c0(%rbp)
jmp 0x5878
movq -0x6c0(%rbp), %rdi
movq 0x17732(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x588d
leaq 0xea86(%rip), %rdi      # 0x1431a
xorl %eax, %eax
callq 0x3050
jmp 0x589d
movups -0x4a0(%rbp), %xmm0
movups -0x490(%rbp), %xmm1
movaps %xmm1, -0x4d0(%rbp)
movaps %xmm0, -0x4e0(%rbp)
movaps -0x4e0(%rbp), %xmm0
movaps -0x4d0(%rbp), %xmm1
movq %rsp, %rax
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
leaq -0x4c0(%rbp), %rdi
xorl %esi, %esi
callq 0x9160
jmp 0x58e1
leaq 0xea45(%rip), %rdi      # 0x1432d
xorl %eax, %eax
callq 0x3050
jmp 0x58f1
leaq -0x520(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
callq 0x3830
jmp 0x5906
movq 0x176c3(%rip), %rdi     # 0x1cfd0
leaq 0xe9f1(%rip), %rsi      # 0x14305
callq 0x3310
movq %rax, -0x6c8(%rbp)
jmp 0x5922
movq -0x6c8(%rbp), %rdi
movq -0x4a0(%rbp), %rsi
callq 0x35c0
movq %rax, -0x6d0(%rbp)
jmp 0x593e
movq -0x6d0(%rbp), %rdi
leaq 0xe9c4(%rip), %rsi      # 0x14310
callq 0x3310
movq %rax, -0x6d8(%rbp)
jmp 0x595a
movq -0x6d8(%rbp), %rdi
movq -0x498(%rbp), %rsi
callq 0x35c0
movq %rax, -0x6e0(%rbp)
jmp 0x5976
movq -0x6e0(%rbp), %rdi
movq 0x17634(%rip), %rsi     # 0x1cfb8
callq 0x3360
jmp 0x598b
leaq -0x540(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x3140
jmp 0x59a0
leaq -0x561(%rbp), %rdi
movq %rdi, -0x6e8(%rbp)
callq 0x35a0
movq -0x6e8(%rbp), %rdx
leaq 0xe8ca(%rip), %rsi      # 0x1428b
leaq -0x560(%rbp), %rdi
callq 0x5cd0
jmp 0x59cf
movslq -0x38(%rbp), %r9
movss -0x48(%rbp), %xmm0
leaq -0x4c0(%rbp), %rdi
leaq -0x520(%rbp), %rsi
leaq -0x478(%rbp), %rdx
leaq -0x540(%rbp), %rcx
leaq -0x560(%rbp), %r8
callq 0x45d0
jmp 0x5a02
leaq -0x560(%rbp), %rdi
callq 0x31c0
leaq -0x561(%rbp), %rdi
callq 0x3380
leaq -0x540(%rbp), %rdi
callq 0x31c0
movq 0x1758b(%rip), %rsi     # 0x1cfb8
leaq -0x478(%rbp), %rdi
callq 0x3360
jmp 0x5a3b
movups -0x4a0(%rbp), %xmm0
movups -0x490(%rbp), %xmm1
movaps %xmm1, -0x580(%rbp)
movaps %xmm0, -0x590(%rbp)
movaps -0x590(%rbp), %xmm0
movaps -0x580(%rbp), %xmm1
movq %rsp, %rax
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x8800
jmp 0x5a76
movups -0x4c0(%rbp), %xmm0
movups -0x4b0(%rbp), %xmm1
movaps %xmm1, -0x5a0(%rbp)
movaps %xmm0, -0x5b0(%rbp)
movaps -0x5b0(%rbp), %xmm0
movaps -0x5a0(%rbp), %xmm1
movq %rsp, %rax
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x8a60
jmp 0x5ab1
movups -0x520(%rbp), %xmm0
movups -0x510(%rbp), %xmm1
movups -0x500(%rbp), %xmm2
movups -0x4f0(%rbp), %xmm3
movaps %xmm3, -0x5c0(%rbp)
movaps %xmm2, -0x5d0(%rbp)
movaps %xmm1, -0x5e0(%rbp)
movaps %xmm0, -0x5f0(%rbp)
movaps -0x5f0(%rbp), %xmm0
movaps -0x5e0(%rbp), %xmm1
movaps -0x5d0(%rbp), %xmm2
movaps -0x5c0(%rbp), %xmm3
movq %rsp, %rax
movups %xmm3, 0x30(%rax)
movups %xmm2, 0x20(%rax)
movups %xmm1, 0x10(%rax)
movups %xmm0, (%rax)
callq 0x3780
jmp 0x5b1e
jmp 0x5b20
movl -0x47c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x47c(%rbp)
jmp 0x57a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x5b5a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x560(%rbp), %rdi
callq 0x31c0
leaq -0x561(%rbp), %rdi
callq 0x3380
leaq -0x540(%rbp), %rdi
callq 0x31c0
jmp 0x5bb4
leaq -0x478(%rbp), %rdi
callq 0x3450
jmp 0x5b82
leaq -0x478(%rbp), %rdi
callq 0x3480
leaq -0x278(%rbp), %rdi
callq 0x31c0
leaq -0x138(%rbp), %rdi
callq 0x31c0
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x538b
leaq -0x478(%rbp), %rdi
callq 0x3480
leaq -0x278(%rbp), %rdi
callq 0x31c0
leaq -0x138(%rbp), %rdi
callq 0x31c0
jmp 0x5c0f
leaq -0x110(%rbp), %rdi
callq 0x31c0
leaq -0xe8(%rbp), %rdi
callq 0x31c0
leaq -0xc8(%rbp), %rdi
callq 0x31c0
leaq -0xa0(%rbp), %rdi
callq 0x6390
jmp 0x5227
leaq -0x110(%rbp), %rdi
callq 0x31c0
leaq -0xe8(%rbp), %rdi
callq 0x31c0
leaq -0xc8(%rbp), %rdi
callq 0x31c0
jmp 0x5c4a
leaq -0x28(%rbp), %rdi
callq 0x63b0
movl -0x4(%rbp), %eax
addq $0x730, %rsp            # imm = 0x730
popq %rbp
retq
leaq -0x28(%rbp), %rdi
callq 0x63b0
movq -0x60(%rbp), %rdi
callq 0x3590
nopl (%rax)