// File: /workspace/github_cpp_makefile_star2_O3/CK7[P]abawaca/src/abawaca-build.cpp
// Function: main
int main(int argc, const char* argv[])
{
	size_t	window_size = 2000;
	size_t	max_snps = 15;

	if(argc < 5) {
		usage(argv[0]);
		return -1;
	}

	string	assembly_file;
	string	out_directory;
	string	sam_glob;
	string	this_sample_str;

	for(auto i=1; i<argc; i+=2) {
		if(!strcmp(argv[i], "-f"))
			assembly_file = argv[i+1];
		else if(!strcmp(argv[i], "-o"))
			out_directory = argv[i+1];
		else if(!strcmp(argv[i], "-s"))
			sam_glob = argv[i+1];
		else if(!strcmp(argv[i], "-c"))
			this_sample_str = argv[i+1];
		else {
			cerr << endl << "Unknown option " << argv[i] << endl << endl;
			return -1;
		}
	}

	if(assembly_file.size() == 0) {
		cerr << endl << "Error: assembly file was not specified (-f)" << endl << endl;
		return -1;
	}
	if(out_directory.size() == 0) {
		cerr << endl << "Error: output directory was not specified (-o)" << endl << endl;
		return -1;
	}
	if(sam_glob.size() == 0) {
		cerr << endl << "Error: glob path for sam files was not specified (-s)" << endl << endl;
		return -1;
	}
	if(this_sample_str.size() == 0) {
		cerr << endl << "Error: path for sam file for the assembly\'s reads was not specified (-f)" << endl << endl;
		return -1;
	}

	cerr << time_since_epoch() << "Reading assembly file (" << assembly_file << ")" << endl;
	map<string, Scaf*>			scafs;
	Bio::SeqIORead_fasta<Bio::DNASequence>  in(assembly_file);
	Bio::DNASequence*                       seq = NULL;
	size_t ndps = 0;
	while((seq = in.next_seq()) != NULL) {
		Scaf*	s = new Scaf(*seq, window_size);
 		scafs.insert(pair<string, Scaf*>(seq->display_id(), s));
		ndps += s->ndps();
	}

	char names_file[1024], lrn_file[1024], info_file[1024], links_file[1024];

	sprintf(names_file, "%s/abawaca.names", out_directory.c_str());
	sprintf(lrn_file, "%s/abawaca.lrn", out_directory.c_str());
	sprintf(info_file, "%s/abawaca.info", out_directory.c_str());
	sprintf(links_file, "%s/abawaca.links", out_directory.c_str());

	cerr << time_since_epoch() << "Creating .lrn (" << lrn_file << ") and .names (" << names_file << ") files" << endl;

	if(!directory_exists(out_directory.c_str())) {
		char	cmd[1024];
		sprintf(cmd, "mkdir %s", out_directory.c_str());
		system(cmd);
	}

	if(sam_glob.size() > 0) {
		vector<string>	sam_files = glob(sam_glob);
		for(auto vit=sam_files.begin(); vit!=sam_files.end(); vit++) {
			cerr  << time_since_epoch() << "Reading SAM file " << *vit << endl;
			dimension2index.insert(pair<string, size_t>(*vit, dimension_order.size()));
			dimension_order.push_back(*vit);

			size_t dimension = dimension2index[*vit];

			if(this_sample_str == *vit)
				this_sample = dimension;

			size_t 					insert_size = calc_insert_size(*vit);
			cerr  << time_since_epoch() << "Insert size is " << insert_size << endl;

			Bio::SAMReader  			reader(*vit);
			unordered_map<string, Bio::ReadMappingPtr>	reads;
			Links					links(insert_size, scafs);
			while(reader.good()) {
				Bio::ReadMappingPtr mapping(reader.next_mapping());
				if(mapping == NULL) {
					break;
				}

				if(dimension == this_sample) {
					string insert_name = mapping->read_name();
					size_t	p = insert_name.find_last_of('/');
					if(p != string::npos)
						insert_name.resize(p);
					auto rit = reads.find(insert_name);
					if(rit == reads.end()) {
						reads.insert(pair<string, Bio::ReadMappingPtr>(insert_name, mapping));
					}
					else {
						Bio::ReadMappingPtr mapping_other = rit->second;
						reads.erase(rit);
						links.add_pair(mapping, mapping_other);
					}
				}
				if(mapping->unmapped() || (mapping->num_snps() > max_snps) || mapping->multiple_hits()) {
					continue;
				}
				auto mit = scafs.find(mapping->ref_name());
				if(mit != scafs.end())
					mit->second->add_mapped_read(*mapping, dimension);
			}
			if(dimension == this_sample) {
				ofstream	oslinks(links_file);
				links.write_connections(oslinks);
				oslinks.close();
			}
		}
	}

	FILE* fout = fopen(names_file, "w");
	FILE* flrn = fopen(lrn_file, "w");
	FILE* finfo = fopen(info_file, "w");

	if(fout == NULL) {
		cerr << "Could not write to " << names_file << endl << endl;
		return -1;
	}
	if(flrn == NULL) {
		cerr << "Could not write to " << lrn_file << endl << endl;
		return -1;
	}
	if(finfo == NULL) {
		cerr << "Could not write to " << info_file << endl << endl;
		return -1;
	}

	fprintf(fout, "%c %lu\n", '%', ndps);
	fprintf(flrn, "%c %lu\n", '%', ndps);

	// We do not output the frequency of A/T
	fprintf(flrn, "%c %lu\n", '%', dimension_order.size());
	fprintf(flrn, "%c 9", '%');
	for(auto it=dimension_order.begin(); it!=dimension_order.end(); it++)
		if(*it != string("A"))
			fprintf(flrn, "\t1");
	fprintf(flrn, "\n");

	fprintf(flrn, "%c Key", '%');
	for(auto it=dimension_order.begin(); it!=dimension_order.end(); it++)
		if(*it != string("A"))
			fprintf(flrn, "\t%s", it->c_str());
	fprintf(flrn, "\n");

	int i=0;
	for(auto it=scafs.begin(); it!=scafs.end(); it++) {
		fprintf(finfo, "%s\t%lu\t%.3lf\t%.3lf\t%lu\n", it->second->get_display_id().c_str(), it->second->get_seq().size(), int(1000.0*it->second->cvg())/1000.0, int(1000.0*it->second->gc())/1000.0, it->second->Ns());
		for(auto sit=it->second->begin(); sit!=it->second->end(); sit++) {
			fprintf(fout, "%d\t%s\t%s\n", ++i, (*sit)->get_display_id().c_str(), (*sit)->get_desc().c_str());
			fprintf(flrn, "%d", i);
			for(auto mit=dimension_order.begin(); mit!=dimension_order.end(); mit++) {
				if(*mit != string("A"))
					fprintf(flrn, "\t%.3lf", int(1000.0*(*sit)->get_dimension(*mit))/1000.0);
			}
			fprintf(flrn, "\n");
		}
	}

	fclose(fout);
	fclose(flrn);
	fclose(finfo);

	cerr << time_since_epoch() << "Predicting genes and SCGs" << endl;
	string scg_file = prepare_scgs(assembly_file, out_directory);
	char data[2048];
	sprintf(data, "%s/data.txt", out_directory.c_str());
	FILE* fp = fopen(data, "w");

	if(fp == NULL) {
		cerr << "Could not write to " << data << endl << endl;
		return -1;
	}

	fprintf(fp, "SCG\t%s\n", scg_file.c_str());
	fprintf(fp, "Links\t%s\n", links_file);
	fprintf(fp, "Info\t%s\n", info_file);
	fprintf(fp, "Names\t%s\n", names_file);
	fprintf(fp, "Lrn\t%s\n", lrn_file);
	fprintf(fp, "Assembly\t%s\n", assembly_file.c_str());
	fclose(fp);

	cerr << time_since_epoch() << "Finished successfully" << endl;
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1ae8, %rsp           # imm = 0x1AE8
movq %rsi, %rbx
movl %edi, -0x30(%rbp)
cmpl $0x4, %edi
jg 0xa0ec
movq (%rbx), %rdi
callq 0x9c92
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
jmp 0xb6df
leaq -0xa0(%rbp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq -0x68(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq -0x100(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq -0xe0(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movl $0x1, %r14d
movq (%rbx,%r14,8), %rax
cmpb $0x2d, (%rax)
jne 0xa3b2
cmpb $0x66, 0x1(%rax)
jne 0xa155
cmpb $0x0, 0x2(%rax)
leaq -0xb0(%rbp), %r15
je 0xa193
cmpb $0x6f, 0x1(%rax)
jne 0xa165
cmpb $0x0, 0x2(%rax)
leaq -0x78(%rbp), %r15
je 0xa193
cmpb $0x73, 0x1(%rax)
jne 0xa178
cmpb $0x0, 0x2(%rax)
leaq -0x110(%rbp), %r15
je 0xa193
cmpb $0x63, 0x1(%rax)
jne 0xa3b2
cmpb $0x0, 0x2(%rax)
leaq -0xf0(%rbp), %r15
jne 0xa3b2
movq 0x8(%rbx,%r14,8), %r12
movq 0x8(%r15), %r13
movq %r12, %rdi
callq 0x4130
movq %r15, %rdi
xorl %esi, %esi
movq %r13, %rdx
movq %r12, %rcx
movq %rax, %r8
callq 0x4430
addq $0x2, %r14
cmpl -0x30(%rbp), %r14d
jl 0xa135
cmpq $0x0, -0xa8(%rbp)
je 0xa48e
cmpq $0x0, -0x70(%rbp)
je 0xa517
cmpq $0x0, -0x108(%rbp)
je 0xb560
cmpq $0x0, -0xe8(%rbp)
je 0xb5e9
leaq -0xb10(%rbp), %rdi
callq 0xef80
movq -0xb10(%rbp), %rsi
movq -0xb08(%rbp), %rdx
movq 0xddd5(%rip), %rdi      # 0x17ff0
callq 0x4320
movq %rax, %rbx
leaq 0x7652(%rip), %rsi      # 0x1187c
movl $0x17, %edx
movq %rax, %rdi
callq 0x4320
movq -0xb0(%rbp), %rsi
movq -0xa8(%rbp), %rdx
movq %rbx, %rdi
callq 0x4320
movq %rax, %rbx
leaq 0x7161(%rip), %rsi      # 0x113b8
movl $0x1, %edx
movq %rax, %rdi
callq 0x4320
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
leaq -0xb00(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa2a0
callq 0x4280
leaq -0x250(%rbp), %rcx
movl $0x0, (%rcx)
xorl %eax, %eax
movq %rax, 0x8(%rcx)
movq %rcx, 0x10(%rcx)
movq %rcx, 0x18(%rcx)
movq %rax, 0x20(%rcx)
leaq -0x2a0(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0xb0(%rbp), %rsi
movq -0xa8(%rbp), %rdx
addq %rsi, %rdx
leaq -0x2b0(%rbp), %rdi
callq 0x63a2
leaq -0x310(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0xbdd4
movq -0x2b0(%rbp), %rdi
cmpq %r14, %rdi
je 0xa30b
callq 0x4280
xorl %r13d, %r13d
leaq -0x310(%rbp), %rbx
leaq -0xb10(%rbp), %r14
movq %rbx, %rdi
callq 0xbe66
movq %rax, %r12
testq %rax, %rax
je 0xa5a0
movl $0x80, %edi
callq 0x42b0
movq %rax, %r15
movl $0x7d0, %edx            # imm = 0x7D0
movq %rax, %rdi
movq %r12, %rsi
callq 0x8de8
leaq -0xb00(%rbp), %rax
movq %rax, -0xb10(%rbp)
movq 0x8(%r12), %rsi
movq 0x10(%r12), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0x63a2
movq %r15, -0xaf0(%rbp)
leaq -0x258(%rbp), %rdi
movq %r14, %rsi
callq 0xe576
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
je 0xa39e
callq 0x4280
movq 0x68(%r15), %rax
subq 0x60(%r15), %rax
sarq $0x3, %rax
addq %rax, %r13
jmp 0xa31c
movq 0xdc37(%rip), %rdi      # 0x17ff0
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq 0xdc1c(%rip), %rdi      # 0x17ff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %r15
leaq 0x73a7(%rip), %rsi      # 0x11792
movl $0xf, %edx
movq %rax, %rdi
callq 0x4320
movq (%rbx,%r14,8), %rbx
testq %rbx, %rbx
je 0xa419
movq %rbx, %rdi
callq 0x4130
movq %r15, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x4320
jmp 0xa433
movq (%r15), %rax
movq -0x18(%rax), %rax
movq %r15, %rdi
addq %rax, %rdi
movl 0x20(%r15,%rax), %esi
orl $0x1, %esi
callq 0x44b0
movq (%r15), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %r15, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
movq %rax, %rdi
callq 0x41c0
jmp 0xb685
movq 0xdb5b(%rip), %rdi      # 0x17ff0
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq 0xdb40(%rip), %rdi      # 0x17ff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %rbx
leaq 0x72db(%rip), %rsi      # 0x117a2
movl $0x2b, %edx
movq %rax, %rdi
callq 0x4320
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
jmp 0xb66d
movq 0xdad2(%rip), %rdi      # 0x17ff0
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq 0xdab7(%rip), %rdi      # 0x17ff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %rbx
leaq 0x727e(%rip), %rsi      # 0x117ce
movl $0x2e, %edx
movq %rax, %rdi
callq 0x4320
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
jmp 0xb66d
movq -0x78(%rbp), %rdx
leaq 0x72e9(%rip), %rsi      # 0x11894
leaq -0x1710(%rbp), %rdi
xorl %eax, %eax
callq 0x4070
movq -0x78(%rbp), %rdx
leaq 0x72e1(%rip), %rsi      # 0x118a5
leaq -0xf10(%rbp), %rdi
xorl %eax, %eax
callq 0x4070
movq -0x78(%rbp), %rdx
leaq 0x72d7(%rip), %rsi      # 0x118b4
leaq -0x1310(%rbp), %rdi
xorl %eax, %eax
callq 0x4070
movq -0x78(%rbp), %rdx
leaq 0x72ce(%rip), %rsi      # 0x118c4
leaq -0x1b10(%rbp), %rdi
xorl %eax, %eax
callq 0x4070
leaq -0xb10(%rbp), %rdi
callq 0xef80
movq -0xb10(%rbp), %rsi
movq -0xb08(%rbp), %rdx
movq 0xd9cb(%rip), %rdi      # 0x17ff0
callq 0x4320
movq %rax, %rbx
leaq 0x72a1(%rip), %rsi      # 0x118d5
movl $0xf, %edx
movq %rax, %rdi
callq 0x4320
leaq -0xf10(%rbp), %r14
movq %r14, %rdi
callq 0x4130
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x4320
leaq 0x7280(%rip), %rsi      # 0x118e5
movl $0xe, %edx
movq %rbx, %rdi
callq 0x4320
leaq -0x1710(%rbp), %r14
movq %r14, %rdi
callq 0x4130
movq %rbx, %rdi
movq %r14, %rsi
movq %rax, %rdx
callq 0x4320
leaq 0x725e(%rip), %rsi      # 0x118f4
movl $0x7, %edx
movq %rbx, %rdi
callq 0x4320
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
je 0xa6e2
callq 0x4280
movq -0x78(%rbp), %rdi
callq 0xf392
testl %eax, %eax
jne 0xa713
movq -0x78(%rbp), %rdx
leaq 0x7202(%rip), %rsi      # 0x118fc
leaq -0xb10(%rbp), %rbx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x4070
movq %rbx, %rdi
callq 0x4230
cmpq $0x0, -0x108(%rbp)
je 0xad9e
leaq -0x188(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0xf711
movq -0x188(%rbp), %rax
movq %rax, -0x30(%rbp)
cmpq -0x180(%rbp), %rax
je 0xad92
movq 0xd875(%rip), %rax      # 0x17fc8
movq (%rax), %rcx
movq %rcx, -0x90(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x38(%rbp)
leaq -0xb10(%rbp), %rbx
movq %r13, -0x40(%rbp)
movq %rbx, %rdi
callq 0xef80
movq -0xb10(%rbp), %rsi
movq -0xb08(%rbp), %rdx
movq 0xd863(%rip), %rdi      # 0x17ff0
callq 0x4320
movq %rax, %r14
movl $0x11, %edx
movq %rax, %rdi
leaq 0x7161(%rip), %rsi      # 0x11905
callq 0x4320
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movq %r14, %rdi
callq 0x4320
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %r12, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
je 0xa7fe
callq 0x4280
movq 0xdb5b(%rip), %rbx      # 0x18360
movq 0xdb4c(%rip), %r14      # 0x18358
leaq -0xb00(%rbp), %rax
movq %rax, -0xb10(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0xb10(%rbp), %r12
movq %r12, %rdi
callq 0x63a2
subq %r14, %rbx
sarq $0x5, %rbx
movq %rbx, -0xaf0(%rbp)
leaq 0xdadc(%rip), %rdi      # 0x18328
movq %r12, %rsi
callq 0xd030
movq %r12, %r14
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
leaq -0x48(%rbp), %rbx
je 0xa873
callq 0x4280
leaq 0xdade(%rip), %rdi      # 0x18358
movq -0x30(%rbp), %r15
movq %r15, %rsi
callq 0xbad0
leaq 0xda9b(%rip), %rdi      # 0x18328
movq %r15, %rsi
callq 0xc386
movq (%rax), %r13
movq -0xe8(%rbp), %rdx
movq 0x8(%r15), %r12
cmpq %r12, %rdx
jne 0xa8cb
testq %rdx, %rdx
je 0xa8c4
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq -0xf0(%rbp), %rdi
callq 0x42c0
testl %eax, %eax
jne 0xa8cb
movq %r13, 0xdaa5(%rip)      # 0x18370
leaq -0x218(%rbp), %rax
movq %rax, -0x228(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rsi
addq %rsi, %r12
leaq -0x228(%rbp), %r15
movq %r15, %rdi
movq %r12, %rdx
callq 0x63a2
movq %r15, %rdi
callq 0x9d80
movq %rax, %r12
movq -0x228(%rbp), %rdi
leaq -0x218(%rbp), %rax
cmpq %rax, %rdi
je 0xa918
callq 0x4280
movq %r14, %rdi
callq 0xef80
movq -0xb10(%rbp), %rsi
movq -0xb08(%rbp), %rdx
movq 0xd6bb(%rip), %rdi      # 0x17ff0
callq 0x4320
movq %rax, %r14
movl $0xf, %edx
movq %rax, %rdi
leaq 0x6fcb(%rip), %rsi      # 0x11917
callq 0x4320
movq %r14, %rdi
movq %r12, %rsi
callq 0x41b0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %r14, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
je 0xa99e
callq 0x4280
leaq -0x1b8(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x1c8(%rbp), %r14
movq %r14, %rdi
callq 0x63a2
leaq -0x208(%rbp), %rdi
movq %r14, %rsi
callq 0xbd42
movq -0x1c8(%rbp), %rdi
leaq -0x1b8(%rbp), %rax
cmpq %rax, %rdi
je 0xa9f0
callq 0x4280
leaq -0x260(%rbp), %rax
movq %rax, -0x290(%rbp)
movq $0x1, -0x288(%rbp)
xorpd %xmm0, %xmm0
movupd %xmm0, -0x20(%rax)
movl $0x3f800000, -0x270(%rbp) # imm = 0x3F800000
movupd %xmm0, -0x8(%rax)
movq %r12, -0x150(%rbp)
movl $0x0, -0x140(%rbp)
xorl %ecx, %ecx
movq %rcx, -0x138(%rbp)
leaq -0x140(%rbp), %rax
movq %rax, -0x130(%rbp)
movq %rax, -0x128(%rbp)
movq %rcx, -0x120(%rbp)
leaq -0x258(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x200(%rbp), %rdi
callq 0x4440
testl %eax, %eax
jne 0xace0
leaq -0x208(%rbp), %rdi
callq 0x6b3c
movq %rax, -0x50(%rbp)
movq %rbx, %rdi
movq %rax, %rsi
callq 0xe120
movq -0x50(%rbp), %r14
testq %r14, %r14
je 0xacc9
movq %r14, %rsi
cmpq 0xd8c5(%rip), %r13      # 0x18370
jne 0xac69
leaq -0x160(%rbp), %rax
movq %rax, -0x170(%rbp)
movq 0x8(%r14), %rsi
movq 0x10(%r14), %rdx
addq %rsi, %rdx
leaq -0x170(%rbp), %r15
movq %r15, %rdi
callq 0x63a2
movq %r15, %rdi
movl $0x2f, %esi
movq $-0x1, %rdx
callq 0x4580
cmpq $-0x1, %rax
je 0xab00
movq %r15, %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x40c0
leaq -0x290(%rbp), %rdi
movq %r15, %rsi
callq 0xe9a0
testq %rax, %rax
je 0xab34
movq 0x28(%rax), %rbx
movq 0x30(%rax), %r12
testq %r12, %r12
je 0xab95
movq 0xd4a8(%rip), %rcx      # 0x17fd0
cmpb $0x0, (%rcx)
je 0xab8f
incl 0x8(%r12)
jmp 0xab95
leaq -0xb10(%rbp), %r12
movq %r12, %rdi
leaq -0x170(%rbp), %rsi
leaq -0x50(%rbp), %rdx
callq 0xc406
leaq -0x290(%rbp), %rdi
movq %r12, %rsi
callq 0xeacc
movq -0xae8(%rbp), %rdi
testq %rdi, %rdi
je 0xab6e
callq 0xc952
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
je 0xac4d
callq 0x4280
jmp 0xac4d
lock
incl 0x8(%r12)
leaq -0x290(%rbp), %rdi
movq %rax, %rsi
callq 0xee10
movq -0x50(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, -0xd0(%rbp)
movq %rax, -0xc8(%rbp)
testq %rax, %rax
je 0xabd4
movq 0xd40a(%rip), %rcx      # 0x17fd0
cmpb $0x0, (%rcx)
je 0xabd0
incl 0x8(%rax)
jmp 0xabd4
lock
incl 0x8(%rax)
movq %rbx, -0xc0(%rbp)
movq %r12, -0xb8(%rbp)
testq %r12, %r12
leaq -0x48(%rbp), %rbx
je 0xac04
movq 0xd3de(%rip), %rax      # 0x17fd0
cmpb $0x0, (%rax)
je 0xabfe
incl 0x8(%r12)
jmp 0xac04
lock
incl 0x8(%r12)
leaq -0x150(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0xc0(%rbp), %rdx
callq 0x9592
movq -0xb8(%rbp), %rdi
testq %rdi, %rdi
je 0xac2f
callq 0xc952
movq -0xc8(%rbp), %rdi
testq %rdi, %rdi
je 0xac40
callq 0xc952
testq %r12, %r12
je 0xac4d
movq %r12, %rdi
callq 0xc952
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0xac65
callq 0x4280
movq -0x50(%rbp), %rsi
movq 0x28(%rsi), %rax
testb $0x4, %al
jne 0xacc9
btl $0x8, %eax
jb 0xacc9
movq 0xd8(%rsi), %rax
subq 0xd0(%rsi), %rax
sarq $0x3, %rax
movabsq $-0x3333333333333333, %rcx # imm = 0xCCCCCCCCCCCCCCCD
imulq %rcx, %rax
cmpq $0xf, %rax
ja 0xacc9
addq $0x30, %rsi
leaq -0x258(%rbp), %rdi
callq 0xeee0
leaq -0x250(%rbp), %rcx
cmpq %rcx, %rax
je 0xacc9
movq 0x40(%rax), %rdi
movq -0x50(%rbp), %rsi
movq %r13, %rdx
callq 0x9238
movq -0x48(%rbp), %rdi
testq %rdi, %rdi
je 0xacd7
callq 0xc952
testq %r14, %r14
jne 0xaa65
cmpq 0xd689(%rip), %r13      # 0x18370
movq -0x40(%rbp), %r13
leaq -0xb10(%rbp), %rbx
jne 0xad55
movq %rbx, %rdi
leaq -0x1b10(%rbp), %rsi
movl $0x10, %edx
callq 0x4300
leaq -0x150(%rbp), %rdi
movq %rbx, %rsi
callq 0x93e4
movq %rbx, %rdi
callq 0x43d0
movq -0x90(%rbp), %rax
movq %rax, -0xb10(%rbp)
movq -0x18(%rax), %rax
movq -0x38(%rbp), %rcx
movq %rcx, -0xb10(%rbp,%rax)
leaq -0xb08(%rbp), %rdi
callq 0x4220
leaq -0xa18(%rbp), %rdi
callq 0x40e0
leaq -0x150(%rbp), %rdi
callq 0x92e0
leaq -0x290(%rbp), %rdi
callq 0xc9be
leaq -0x208(%rbp), %rdi
callq 0x80d8
movq -0x30(%rbp), %rax
addq $0x20, %rax
movq %rax, -0x30(%rbp)
cmpq -0x180(%rbp), %rax
jne 0xa770
leaq -0x188(%rbp), %rdi
callq 0x5aa0
leaq 0x6b82(%rip), %r12      # 0x11927
leaq -0x1710(%rbp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
callq 0x4340
movq %rax, %r14
leaq -0xf10(%rbp), %rdi
movq %r12, %rsi
callq 0x4340
movq %rax, %r15
leaq -0x1310(%rbp), %rdi
movq %r12, %rsi
callq 0x4340
movq %rax, -0x58(%rbp)
movq %r14, -0x38(%rbp)
testq %r14, %r14
je 0xb6f3
testq %r15, %r15
je 0xb70d
cmpq $0x0, -0x58(%rbp)
je 0xb72e
movq %r15, -0x30(%rbp)
leaq 0x6b32(%rip), %rbx      # 0x1193d
movq -0x38(%rbp), %rdi
movq %rbx, %rsi
movl $0x25, %edx
movq %r13, %rcx
xorl %eax, %eax
callq 0x43e0
movq -0x30(%rbp), %rdi
movq %rbx, %rsi
movl $0x25, %edx
movq %r13, %rcx
xorl %eax, %eax
callq 0x43e0
movq 0xd522(%rip), %rcx      # 0x18360
subq 0xd513(%rip), %rcx      # 0x18358
sarq $0x5, %rcx
movq -0x30(%rbp), %rdi
movq %rbx, %rsi
movq -0x30(%rbp), %rbx
movl $0x25, %edx
xorl %eax, %eax
callq 0x43e0
leaq 0x6ade(%rip), %rsi      # 0x11945
movq %rbx, %rdi
movl $0x25, %edx
xorl %eax, %eax
callq 0x43e0
movq 0xd4db(%rip), %r14      # 0x18358
cmpq 0xd4dc(%rip), %r14      # 0x18360
je 0xaf36
leaq 0x6aba(%rip), %r15      # 0x1194b
leaq -0xb10(%rbp), %r12
leaq -0xb00(%rbp), %rax
movq %rax, -0xb10(%rbp)
movq %r12, %rdi
leaq 0x6a9a(%rip), %rsi      # 0x1194a
movq %r15, %rdx
callq 0x6440
movq 0x8(%r14), %rdx
cmpq -0xb08(%rbp), %rdx
jne 0xaee3
movq -0xb10(%rbp), %r13
testq %rdx, %rdx
je 0xaeee
movq (%r14), %rdi
movq %r13, %rsi
callq 0x42c0
testl %eax, %eax
setne %bl
jmp 0xaef0
movb $0x1, %bl
movq -0xb10(%rbp), %r13
jmp 0xaef0
xorl %ebx, %ebx
leaq -0xb00(%rbp), %rax
cmpq %rax, %r13
je 0xaf04
movq %r13, %rdi
callq 0x4280
testb %bl, %bl
movq -0x30(%rbp), %rbx
je 0xaf25
movl $0x2, %esi
movl $0x1, %edx
leaq 0x6a2f(%rip), %rdi      # 0x1194c
movq %rbx, %rcx
callq 0x4570
addq $0x20, %r14
cmpq 0xd430(%rip), %r14      # 0x18360
jne 0xae98
movl $0xa, %edi
movq %rbx, %rsi
callq 0x4390
leaq 0x6a05(%rip), %rsi      # 0x1194f
movq %rbx, %rdi
movl $0x25, %edx
xorl %eax, %eax
callq 0x43e0
movq 0xd3f8(%rip), %r14      # 0x18358
cmpq 0xd3f9(%rip), %r14      # 0x18360
je 0xb014
leaq 0x69d7(%rip), %r15      # 0x1194b
leaq -0xb10(%rbp), %r12
leaq -0xb00(%rbp), %rax
movq %rax, -0xb10(%rbp)
movq %r12, %rdi
leaq 0x69b7(%rip), %rsi      # 0x1194a
movq %r15, %rdx
callq 0x6440
movq 0x8(%r14), %rdx
cmpq -0xb08(%rbp), %rdx
jne 0xafc6
movq -0xb10(%rbp), %r13
testq %rdx, %rdx
je 0xafd1
movq (%r14), %rdi
movq %r13, %rsi
callq 0x42c0
testl %eax, %eax
setne %bl
jmp 0xafd3
movb $0x1, %bl
movq -0xb10(%rbp), %r13
jmp 0xafd3
xorl %ebx, %ebx
leaq -0xb00(%rbp), %rax
cmpq %rax, %r13
je 0xafe7
movq %r13, %rdi
callq 0x4280
testb %bl, %bl
movq -0x30(%rbp), %rbx
je 0xb003
movq (%r14), %rdx
movq %rbx, %rdi
leaq 0x695a(%rip), %rsi      # 0x11956
xorl %eax, %eax
callq 0x43e0
addq $0x20, %r14
cmpq 0xd352(%rip), %r14      # 0x18360
jne 0xaf7b
movl $0xa, %edi
movq %rbx, %rsi
callq 0x4390
movq -0x240(%rbp), %r14
leaq -0x250(%rbp), %rax
cmpq %rax, %r14
je 0xb3a2
leaq -0x1a8(%rbp), %r13
movl $0x0, -0x40(%rbp)
movq 0x40(%r14), %rax
leaq -0xb00(%rbp), %rcx
movq %rcx, -0xb10(%rbp)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
leaq -0xb10(%rbp), %rdi
callq 0x63a2
movq -0xb10(%rbp), %r15
movq 0x40(%r14), %rax
leaq 0x28(%rax), %rdi
movq 0x30(%rax), %r12
movsd 0x78(%rax), %xmm0
movaps %xmm0, -0x2c0(%rbp)
callq 0xfed9
movaps %xmm0, -0x90(%rbp)
movq 0x40(%r14), %rdi
addq $0x28, %rdi
callq 0xff73
movsd 0x6291(%rip), %xmm2     # 0x11340
movapd -0x2c0(%rbp), %xmm1
unpcklps %xmm2, %xmm1            # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
movapd 0x628e(%rip), %xmm3     # 0x11350
subpd %xmm3, %xmm1
movapd %xmm1, %xmm0
unpckhpd %xmm1, %xmm0            # xmm0 = xmm0[1],xmm1[1]
addsd %xmm1, %xmm0
movq %r12, %xmm1
punpckldq %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
subpd %xmm3, %xmm1
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
addsd %xmm1, %xmm2
divsd %xmm2, %xmm0
movsd 0x6241(%rip), %xmm2     # 0x11338
mulsd %xmm2, %xmm0
cvttpd2dq %xmm0, %xmm0
cvtdq2pd %xmm0, %xmm0
movapd -0x90(%rbp), %xmm1
mulsd %xmm2, %xmm1
cvttpd2dq %xmm1, %xmm1
divsd %xmm2, %xmm0
cvtdq2pd %xmm1, %xmm1
divsd %xmm2, %xmm1
movq -0x58(%rbp), %rdi
leaq 0x6830(%rip), %rsi      # 0x1195a
movq %r15, %rdx
movq %r12, %rcx
movq %rax, %r8
movb $0x2, %al
callq 0x43e0
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
je 0xb152
callq 0x4280
movq %r14, -0x90(%rbp)
movq 0x40(%r14), %rax
movq 0x60(%rax), %r15
cmpq 0x68(%rax), %r15
je 0xb383
movq (%r15), %rax
leaq -0xb00(%rbp), %rcx
movq %rcx, -0xb10(%rbp)
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
addq %rsi, %rdx
leaq -0xb10(%rbp), %rdi
callq 0x63a2
movq -0xb10(%rbp), %r14
movq (%r15), %rax
leaq -0x1f8(%rbp), %r12
movq %r12, -0x208(%rbp)
movq 0x58(%rax), %rsi
movq 0x60(%rax), %rdx
addq %rsi, %rdx
leaq -0x208(%rbp), %rdi
callq 0x63a2
movl -0x40(%rbp), %edx
incl %edx
movq -0x208(%rbp), %r8
movq -0x38(%rbp), %rdi
leaq 0x6799(%rip), %rsi      # 0x11972
movl %edx, -0x40(%rbp)
movq %r14, %rcx
xorl %eax, %eax
callq 0x43e0
movq -0x208(%rbp), %rdi
cmpq %r12, %rdi
je 0xb1f7
callq 0x4280
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
je 0xb20f
callq 0x4280
movq %rbx, %rdi
leaq 0x6763(%rip), %rsi      # 0x1197c
movl -0x40(%rbp), %edx
xorl %eax, %eax
callq 0x43e0
movq 0xd12e(%rip), %rbx      # 0x18358
cmpq 0xd12f(%rip), %rbx      # 0x18360
je 0xb35e
leaq -0xb00(%rbp), %rax
movq %rax, -0xb10(%rbp)
leaq -0xb10(%rbp), %rdi
leaq 0x66f7(%rip), %rsi      # 0x1194a
leaq 0x66f1(%rip), %rdx      # 0x1194b
callq 0x6440
movq 0x8(%rbx), %rdx
cmpq -0xb08(%rbp), %rdx
jne 0xb28b
movq -0xb10(%rbp), %r14
testq %rdx, %rdx
je 0xb297
movq (%rbx), %rdi
movq %r14, %rsi
callq 0x42c0
testl %eax, %eax
setne %r12b
jmp 0xb29a
movb $0x1, %r12b
movq -0xb10(%rbp), %r14
jmp 0xb29a
xorl %r12d, %r12d
leaq -0xb00(%rbp), %rax
cmpq %rax, %r14
je 0xb2ae
movq %r14, %rdi
callq 0x4280
testb %r12b, %r12b
je 0xb355
movq (%r15), %r14
leaq -0x198(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq (%rbx), %rsi
movq 0x8(%rbx), %rdx
addq %rsi, %rdx
movq %r13, %r12
movq %r13, %rdi
callq 0x63a2
leaq 0xd044(%rip), %rdi      # 0x18328
movq %r12, %rsi
callq 0xcf92
leaq 0xd03d(%rip), %rcx      # 0x18330
cmpq %rcx, %rax
je 0xb31b
movq 0x40(%rax), %rax
movq 0x78(%r14), %rcx
movsd (%rcx,%rax,8), %xmm0
movsd 0x602b(%rip), %xmm1     # 0x11338
mulsd %xmm1, %xmm0
cvttpd2dq %xmm0, %xmm0
cvtdq2pd %xmm0, %xmm0
jmp 0xb327
xorpd %xmm0, %xmm0
movsd 0x6011(%rip), %xmm1     # 0x11338
divsd %xmm1, %xmm0
movq -0x30(%rbp), %rdi
leaq 0x6649(%rip), %rsi      # 0x1197f
movb $0x1, %al
callq 0x43e0
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0xb355
callq 0x4280
addq $0x20, %rbx
jmp 0xb22a
movl $0xa, %edi
movq -0x30(%rbp), %rbx
movq %rbx, %rsi
callq 0x4390
addq $0x8, %r15
movq -0x90(%rbp), %rax
movq 0x40(%rax), %rax
jmp 0xb161
movq -0x90(%rbp), %rdi
callq 0x41d0
movq %rax, %r14
leaq -0x250(%rbp), %rax
cmpq %rax, %r14
jne 0xb046
movq -0x38(%rbp), %rdi
callq 0x42a0
movq %rbx, %rdi
callq 0x42a0
movq -0x58(%rbp), %rdi
callq 0x42a0
leaq -0xb10(%rbp), %rdi
callq 0xef80
movq -0xb10(%rbp), %rsi
movq -0xb08(%rbp), %rdx
movq 0xcc13(%rip), %rdi      # 0x17ff0
callq 0x4320
movq %rax, %rbx
leaq 0x659a(%rip), %rsi      # 0x11986
movl $0x19, %edx
movq %rax, %rdi
callq 0x4320
movq %rbx, %rdi
callq 0x4140
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
je 0xb419
callq 0x4280
leaq -0x208(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
leaq -0x78(%rbp), %rdx
callq 0x9ea9
movq -0x78(%rbp), %rdx
leaq 0x6565(%rip), %rsi      # 0x119a0
leaq -0xb10(%rbp), %rbx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x4070
leaq 0x64d4(%rip), %rsi      # 0x11927
movq %rbx, %rdi
callq 0x4340
testq %rax, %rax
je 0xb79d
movq %rax, %rbx
movq -0x208(%rbp), %rdx
leaq 0x6537(%rip), %rsi      # 0x119ac
movq %rax, %rdi
xorl %eax, %eax
callq 0x43e0
leaq 0x652e(%rip), %rsi      # 0x119b4
leaq -0x1b10(%rbp), %rdx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x43e0
leaq 0x6520(%rip), %rsi      # 0x119be
leaq -0x1310(%rbp), %rdx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x43e0
leaq 0x6511(%rip), %rsi      # 0x119c7
leaq -0x1710(%rbp), %rdx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x43e0
leaq 0x6503(%rip), %rsi      # 0x119d1
leaq -0xf10(%rbp), %rdx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x43e0
movq -0xb0(%rbp), %rdx
leaq 0x64ec(%rip), %rsi      # 0x119d9
movq %rbx, %rdi
xorl %eax, %eax
callq 0x43e0
movq %rbx, %rdi
callq 0x42a0
leaq -0x150(%rbp), %rdi
callq 0xef80
movq -0x150(%rbp), %rsi
movq -0x148(%rbp), %rdx
movq 0xcad0(%rip), %rdi      # 0x17ff0
callq 0x4320
movq %rax, %rbx
leaq 0x64b7(%rip), %rsi      # 0x119e6
movl $0x15, %edx
movq %rax, %rdi
callq 0x4320
movq %rbx, %rdi
callq 0x4140
leaq -0x140(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xb559
callq 0x4280
xorl %ebx, %ebx
jmp 0xb7e8
movq 0xca89(%rip), %rdi      # 0x17ff0
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq 0xca6e(%rip), %rdi      # 0x17ff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %rbx
leaq 0x6264(%rip), %rsi      # 0x117fd
movl $0x35, %edx
movq %rax, %rdi
callq 0x4320
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
jmp 0xb66d
movq 0xca00(%rip), %rdi      # 0x17ff0
movq (%rdi), %rax
addq -0x18(%rax), %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq 0xc9e5(%rip), %rdi      # 0x17ff0
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %rbx
leaq 0x6211(%rip), %rsi      # 0x11833
movl $0x48, %edx
movq %rax, %rdi
callq 0x4320
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movq %rax, %rdi
callq 0x41c0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x4290
movsbl %al, %esi
movq %rbx, %rdi
callq 0x4030
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
movq %rax, %rdi
callq 0x41c0
movq -0xf0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
cmpq %rax, %rdi
je 0xb69d
callq 0x4280
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0xb6b5
callq 0x4280
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0xb6c7
callq 0x4280
movq -0xb0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
cmpq %rax, %rdi
je 0xb6df
callq 0x4280
movl %ebx, %eax
addq $0x1ae8, %rsp           # imm = 0x1AE8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0xc8f6(%rip), %rdi      # 0x17ff0
leaq 0x6228(%rip), %rsi      # 0x11929
movl $0x13, %edx
callq 0x4320
jmp 0xb74d
movq 0xc8dc(%rip), %rdi      # 0x17ff0
leaq 0x620e(%rip), %rsi      # 0x11929
movl $0x13, %edx
callq 0x4320
leaq -0xf10(%rbp), %rbx
jmp 0xb74d
movq 0xc8bb(%rip), %rdi      # 0x17ff0
leaq 0x61ed(%rip), %rsi      # 0x11929
movl $0x13, %edx
callq 0x4320
leaq -0x1310(%rbp), %rbx
movq %rbx, %rdi
callq 0x4130
movq 0xc894(%rip), %rdi      # 0x17ff0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x4320
movq 0xc882(%rip), %rdi      # 0x17ff0
callq 0x4140
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
movq %rax, %rdi
callq 0x4140
leaq -0x310(%rbp), %rdi
callq 0xca96
leaq -0x258(%rbp), %rdi
callq 0xcefe
jmp 0xb685
movq 0xc84c(%rip), %rdi      # 0x17ff0
leaq 0x617e(%rip), %rsi      # 0x11929
movl $0x13, %edx
callq 0x4320
movq %rbx, %rdi
callq 0x4130
movq 0xc82c(%rip), %rdi      # 0x17ff0
movq %rbx, %rsi
movq %rax, %rdx
callq 0x4320
movq 0xc81a(%rip), %rdi      # 0x17ff0
callq 0x4140
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
movq %rax, %rdi
callq 0x4140
leaq -0x1f8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xb780
callq 0x4280
jmp 0xb780
jmp 0xb80b
jmp 0xba48
jmp 0xba48
movq %rax, %rbx
jmp 0xb82d
jmp 0xba48
movq %rax, %rbx
leaq -0x140(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xb82d
callq 0x4280
leaq -0x1f8(%rbp), %rax
movq -0x10(%rax), %rdi
jmp 0xba3c
jmp 0xba48
jmp 0xb9da
jmp 0xba48
jmp 0xba48
movq %rax, %rbx
movq -0x2b0(%rbp), %rdi
cmpq %r14, %rdi
je 0xba57
callq 0x4280
jmp 0xba57
movq %rax, %rbx
jmp 0xba57
jmp 0xb9ef
jmp 0xba48
jmp 0xba48
jmp 0xba48
jmp 0xba48
jmp 0xb9f4
movq %rax, %rbx
leaq -0xb00(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xba63
callq 0x4280
jmp 0xba63
jmp 0xb9da
jmp 0xb9da
movq %rax, %rbx
leaq -0xb10(%rbp), %rdi
callq 0x4400
jmp 0xb9f7
jmp 0xb910
movq %rax, %rbx
movq -0x1c8(%rbp), %rdi
leaq -0x1b8(%rbp), %rax
jmp 0xb9cc
jmp 0xb910
jmp 0xb910
jmp 0xb9bb
jmp 0xb910
jmp 0xb910
jmp 0xb910
movq %rax, %rbx
movq -0x228(%rbp), %rdi
leaq -0x218(%rbp), %rax
jmp 0xb9cc
movq %rax, %rbx
jmp 0xba1b
movq %rax, %rbx
leaq -0xb10(%rbp), %rdi
callq 0xc45a
jmp 0xb98c
jmp 0xb989
movq %rax, %rbx
movq %r15, %rdi
jmp 0xba41
jmp 0xba48
jmp 0xb9da
jmp 0xba48
jmp 0xba48
movq %rax, %rbx
movq -0xb8(%rbp), %rdi
testq %rdi, %rdi
je 0xb95e
callq 0xc952
movq -0xc8(%rbp), %rdi
testq %rdi, %rdi
je 0xb974
callq 0xc952
jmp 0xb974
movq %rax, %rbx
testq %r12, %r12
je 0xb98c
movq %r12, %rdi
callq 0xc952
jmp 0xb98c
jmp 0xb989
jmp 0xb9a6
jmp 0xb9ef
movq %rax, %rbx
movq -0x170(%rbp), %rdi
leaq -0x160(%rbp), %rax
cmpq %rax, %rdi
je 0xb9a9
callq 0x4280
jmp 0xb9a9
movq %rax, %rbx
movq -0x48(%rbp), %rdi
testq %rdi, %rdi
je 0xb9f7
callq 0xc952
jmp 0xb9f7
jmp 0xb9bb
movq %rax, %rbx
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
cmpq %rax, %rdi
je 0xba1b
callq 0x4280
jmp 0xba1b
jmp 0xba48
movq %rax, %rbx
movq -0xb10(%rbp), %rdi
leaq -0xb00(%rbp), %rax
jmp 0xba3c
jmp 0xb9ef
movq %rax, %rbx
jmp 0xba63
movq %rax, %rbx
leaq -0x150(%rbp), %rdi
callq 0x92e0
leaq -0x290(%rbp), %rdi
callq 0xc9be
leaq -0x208(%rbp), %rdi
callq 0x80d8
leaq -0x188(%rbp), %rdi
callq 0x5aa0
jmp 0xba4b
jmp 0xba48
movq %rax, %rbx
movq -0x1a8(%rbp), %rdi
leaq -0x198(%rbp), %rax
cmpq %rax, %rdi
je 0xba4b
callq 0x4280
jmp 0xba4b
movq %rax, %rbx
leaq -0x310(%rbp), %rdi
callq 0xca96
leaq -0x258(%rbp), %rdi
callq 0xcefe
movq -0xf0(%rbp), %rdi
leaq -0xe0(%rbp), %rax
cmpq %rax, %rdi
je 0xba7b
callq 0x4280
movq -0x110(%rbp), %rdi
leaq -0x100(%rbp), %rax
cmpq %rax, %rdi
je 0xba93
callq 0x4280
movq -0x78(%rbp), %rdi
leaq -0x68(%rbp), %rax
cmpq %rax, %rdi
je 0xbaa5
callq 0x4280
movq -0xb0(%rbp), %rdi
leaq -0xa0(%rbp), %rax
cmpq %rax, %rdi
je 0xbabd
callq 0x4280
movq %rbx, %rdi
callq 0x44f0
nop