// File: /workspace/github_cpp_makefile_star2_O3/CK7[P]abawaca/src/ScafDpData.cpp
// Function: ScafDpData::ScafDpData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
ScafDpData::ScafDpData(string esom_names_file, string fasta_file, string info_file)
{
	FILE* fp = NULL;
	char line[8192] = {};

	if(!(fp = fopen(info_file.c_str(), "r"))) {
		throw invalid_argument(string(__FILE__) + " (" + to_string(__LINE__) + "): could not read " + info_file);
	}

	map<string, double>	scaf_name2cvg;
	while(fgets(line, 8192, fp)) {
		// gwd1_scaffold_0 556922  17.599  0.363   0
		char seq_name[512];
		double cvg, gc;
		size_t Ns, length;
		if(sscanf(line, "%s %lu %lf %lf %lu", seq_name, &length, &cvg, &gc, &Ns) != 5) {
			char s[2048];
			sprintf(s, "%s (%d): Illegal line in file %s:\n%s", __FILE__, __LINE__, info_file.c_str(), line);
			throw invalid_argument(s);
		}
		scaf_name2cvg.insert(pair<string, double>(seq_name, cvg));
	}
	fclose(fp);

	if(!(fp = fopen(esom_names_file.c_str(), "r"))) {
		char s[2048];
		sprintf(s, "%s (%d): could not read %s", __FILE__, __LINE__, esom_names_file.c_str());
		throw invalid_argument(s);
	}

	if(!fgets(line, 8192, fp)) {
		char s[2048];
		sprintf(s, "%s (%d): file %s is empty", __FILE__, __LINE__, esom_names_file.c_str());
		throw invalid_argument(s);
	}

	// % 8430
	unsigned int t1, t2;
	char	c;
	if((sscanf(line, "%c %u", &c, &t1) != 2) || (c != '%')) {
		char s[2048];
		sprintf(s, "%s (%d): unexpected line in file %s:\n%s", __FILE__, __LINE__, esom_names_file.c_str(), line);
		throw invalid_argument(s);
	}

	map<string, set<DataPoint> >	scaf2dps;
	while(fgets(line, 8192, fp)) {
		// 1    gwd1_scaffold_20283_1   gwd1_scaffold_20283:(1,2072), 1 segment(s), 2072/2072 non-N bps
		// 1	gwd1_scaffold_0_1	gwd1_scaffold_0(1, 2003), 2003/2003 non-Ns bps
		size_t 	dp=0, start=0, end=0, non_Ns=0, length=0, nsegments=0;
		char	scaf[512]{}, gene_name[512]={}, *p1, *p2, *p3, *p4, *p5;

		p1 = strchr(line, ':');
		p2 = strchr(line, '(');
		p3 = strchr(line, ')');
		p4 = strchr(line, '/');
		p5 = strchr(line, ',');
		if(!p1 || !p2 || !p3 || !p4 || !p5) {
			char s[2048];
			sprintf(s, "\n%s (%d): unexpected line in file %s:\n%s\n", __FILE__, __LINE__, esom_names_file.c_str(), line);
			throw invalid_argument(s);
		}
		*p1 = *p2 = *p3 = *p4 = *p5 = ' ';
		if((sscanf(line, "%lu %s %s %lu %lu , %lu segment(s), %lu %lu non-N bps", &dp, gene_name, scaf, &start, &end, &nsegments, &non_Ns, &length) != 8) &&
		   (sscanf(line, "%lu %s %s %lu %lu , %lu %lu non-N bps", &dp, gene_name, scaf, &start, &end, &non_Ns, &length) != 7)) {
			char s[2048];
			sprintf(s, "\n%s (%d): unexpected line in file %s:\n%sdp=%lu, gene_name=%s, scaf=%s, start=%lu, end=%lu, nsegments=%lu, non_Ns=%lu, length=%lu\nMake sure that your esom files were generated using prepare_esom_files.pl v1.05 or later\n",
				 __FILE__, __LINE__, esom_names_file.c_str(), line, dp, gene_name, scaf, start, end, nsegments, non_Ns, length);
			throw invalid_argument(s);
		}
		auto sit = scaf2dps.find(scaf);
		if(sit == scaf2dps.end()) {
			scaf2dps.insert(pair<string, set<DataPoint> >(scaf, set<DataPoint>()));
			sit = scaf2dps.find(scaf);
		}
		sit->second.insert(DataPoint(0, dp, 0, start, end, length-non_Ns));
	}
	fclose(fp);

	dps.resize(1);
	for(auto sit = scaf2dps.begin(); sit != scaf2dps.end(); sit++) {
		if(sit->second.size() == 1)
			continue;
		scaf_name2id_map.insert(pair<string, size_t>(sit->first, scaf_name2id_map.size()+1));
		for(auto dpit=sit->second.begin(); dpit != sit->second.end(); dpit++) {
			dps.push_back(DataPoint(dps.size(), dpit->get_name(), scaf_name2id_map.size(), dpit->get_start(), dpit->get_end(), dpit->get_Ns()));
			dp_name2id_map.insert(pair<size_t, size_t>(dps.back().get_name(), dps.back().get_iid()));
		}
	}

	scafs.resize(scaf_name2id_map.size()+1);
	Bio::SeqIORead_fasta<Bio::DNASequence>	reader(fasta_file);
	Bio::DNASequence* seq_obj;

	while((seq_obj = reader.next_seq()) != NULL) {
		auto it=scaf_name2id_map.find(seq_obj->display_id());
		auto mit = scaf_name2cvg.find(seq_obj->display_id());
		double cvg = (mit == scaf_name2cvg.end())? 0 : mit->second;
		if(it != scaf_name2id_map.end()) {
			scafs[it->second] = Seq(it->second, seq_obj, cvg);
		}
		else {
			delete(seq_obj);
		}
	}

	auto it=dps.begin();
	for(++it; it!=dps.end(); it++)
		scafs[it->get_scaf_id()] += *it;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2d38, %rsp           # imm = 0x2D38
movq %rcx, %r14
movq %rdx, -0xf8(%rbp)
movq %rsi, -0x40(%rbp)
movq %rdi, %rbx
leaq 0x8(%rdi), %rcx
xorl %eax, %eax
movl %eax, 0x8(%rdi)
movq %rax, 0x10(%rdi)
movq %rcx, 0x18(%rdi)
movq %rcx, -0x100(%rbp)
movq %rcx, 0x20(%rdi)
movq %rax, 0x28(%rdi)
leaq 0x30(%rdi), %rcx
movq %rcx, -0x88(%rbp)
leaq 0x38(%rdi), %rcx
movl %eax, 0x38(%rdi)
movq %rax, 0x40(%rdi)
movq %rcx, 0x48(%rdi)
movq %rcx, 0x50(%rdi)
leaq 0x60(%rdi), %rcx
movq %rcx, -0x80(%rbp)
leaq 0x78(%rdi), %rcx
movq %rcx, -0x58(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x58(%rdi)
movups %xmm0, 0x68(%rdi)
movups %xmm0, 0x78(%rdi)
movq %rax, 0x88(%rdi)
leaq -0x2d60(%rbp), %rdi
movl $0x2000, %edx           # imm = 0x2000
xorl %esi, %esi
callq 0x51f0
movq %r14, -0x50(%rbp)
movq (%r14), %rdi
leaq 0xd35b(%rip), %rsi      # 0x19131
callq 0x5450
testq %rax, %rax
movq %rbx, -0x30(%rbp)
je 0xc757
leaq -0x128(%rbp), %rcx
movl $0x0, (%rcx)
xorl %edx, %edx
movq %rdx, 0x8(%rcx)
movq %rcx, 0x10(%rcx)
movq %rcx, 0x18(%rcx)
movq %rdx, 0x20(%rcx)
leaq -0x2d60(%rbp), %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %rax, %r15
movq %rax, %rdx
callq 0x55e0
testq %rax, %rax
je 0xbef8
leaq -0x2d60(%rbp), %r12
leaq -0x360(%rbp), %r13
leaq -0xb60(%rbp), %r14
subq $0x8, %rsp
movq %r12, %rdi
leaq 0xd96c(%rip), %rsi      # 0x197b6
movq %r13, %rdx
leaq -0x48(%rbp), %rcx
leaq -0xd60(%rbp), %r8
leaq -0xc0(%rbp), %r9
xorl %eax, %eax
leaq -0xf0(%rbp), %r10
pushq %r10
callq 0x5370
addq $0x10, %rsp
cmpl $0x5, %eax
jne 0xc60b
leaq -0xb50(%rbp), %rax
movq %rax, -0xb60(%rbp)
movq %r13, %rdi
callq 0x5180
leaq (%rax,%rbp), %rdx
addq $-0x360, %rdx           # imm = 0xFCA0
movq %r14, %rdi
movq %r13, %rsi
callq 0xb226
movsd -0xd60(%rbp), %xmm0
movsd %xmm0, -0xb40(%rbp)
leaq -0x130(%rbp), %rdi
movq %r14, %rsi
callq 0xe11a
movq -0xb60(%rbp), %rdi
leaq -0xb50(%rbp), %rax
cmpq %rax, %rdi
je 0xbedf
callq 0x5340
movq %r12, %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %r15, %rdx
callq 0x55e0
testq %rax, %rax
jne 0xbe3c
movq %r15, %rdi
callq 0x5390
movq -0x40(%rbp), %rax
movq (%rax), %rdi
leaq 0xd223(%rip), %rsi      # 0x19131
callq 0x5450
testq %rax, %rax
je 0xc7c5
movq %rax, %r14
leaq -0x2d60(%rbp), %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %rax, %rdx
callq 0x55e0
testq %rax, %rax
je 0xc823
leaq 0xd8e0(%rip), %rsi      # 0x19823
leaq -0x2d60(%rbp), %rdi
leaq -0x31(%rbp), %rdx
leaq -0x134(%rbp), %rcx
xorl %eax, %eax
callq 0x5370
cmpl $0x2, %eax
jne 0xc881
cmpb $0x25, -0x31(%rbp)
jne 0xc881
leaq -0xb8(%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 -0x2d60(%rbp), %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %r14, %rdx
callq 0x55e0
testq %rax, %rax
je 0xc2cd
leaq -0x360(%rbp), %r12
leaq -0xd60(%rbp), %r13
leaq -0x2d60(%rbp), %r15
movq %r14, -0x50(%rbp)
xorl %eax, %eax
movq %rax, -0x48(%rbp)
movq %rax, -0x78(%rbp)
movq %rax, -0x70(%rbp)
movq %rax, -0x68(%rbp)
movq %rax, -0x60(%rbp)
movq %rax, -0x90(%rbp)
movl $0x200, %edx            # imm = 0x200
movq %r12, %rdi
xorl %esi, %esi
callq 0x51f0
movl $0x200, %edx            # imm = 0x200
movq %r13, %rdi
xorl %esi, %esi
callq 0x51f0
movq %r15, %rdi
movl $0x3a, %esi
callq 0x5150
movq %rax, %r14
movq %r15, %rdi
movl $0x28, %esi
callq 0x5150
movq %rax, %rbx
movq %r15, %rdi
movl $0x29, %esi
callq 0x5150
movq %rax, %r12
movq %r15, %rdi
movl $0x2f, %esi
callq 0x5150
movq %rax, %r13
movq %r15, %rdi
movl $0x2c, %esi
callq 0x5150
testq %r14, %r14
je 0xc670
testq %rbx, %rbx
je 0xc670
testq %r12, %r12
je 0xc670
testq %r13, %r13
je 0xc670
testq %rax, %rax
je 0xc670
movb $0x20, %cl
movb %cl, (%rax)
movb %cl, (%r13)
movb %cl, (%r12)
movb %cl, (%rbx)
movb %cl, (%r14)
leaq -0x2d60(%rbp), %r14
movq %r14, %rdi
leaq 0xd7e0(%rip), %rsi      # 0x1987b
leaq -0x48(%rbp), %rdx
leaq -0xd60(%rbp), %r13
movq %r13, %rcx
leaq -0x360(%rbp), %r12
movq %r12, %r8
leaq -0x78(%rbp), %r9
xorl %eax, %eax
leaq -0x60(%rbp), %r10
pushq %r10
leaq -0x68(%rbp), %r10
pushq %r10
leaq -0x90(%rbp), %r10
pushq %r10
leaq -0x70(%rbp), %r10
pushq %r10
callq 0x5370
addq $0x20, %rsp
cmpl $0x8, %eax
je 0xc124
subq $0x8, %rsp
movq %r14, %rdi
leaq 0xd7c1(%rip), %rsi      # 0x198b1
leaq -0x48(%rbp), %rdx
movq %r13, %rcx
movq %r12, %r8
leaq -0x78(%rbp), %r9
xorl %eax, %eax
leaq -0x60(%rbp), %r10
pushq %r10
leaq -0x68(%rbp), %r10
pushq %r10
leaq -0x70(%rbp), %r10
pushq %r10
callq 0x5370
addq $0x20, %rsp
cmpl $0x7, %eax
jne 0xc6d5
leaq -0xb50(%rbp), %r15
movq %r15, -0xb60(%rbp)
movq %r12, %rdi
callq 0x5180
leaq (%rax,%rbp), %rdx
addq $-0x360, %rdx           # imm = 0xFCA0
leaq -0xb60(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
movq -0x30(%rbp), %rbx
callq 0xb226
leaq -0xc0(%rbp), %rdi
movq %r14, %rsi
callq 0xe30e
movq %rax, %r14
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xc17e
callq 0x5340
leaq -0xb8(%rbp), %rax
cmpq %rax, %r14
jne 0xc256
xorl %ecx, %ecx
movq %rcx, -0xe0(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0xf0(%rbp)
leaq -0xe8(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq %rax, -0xd0(%rbp)
movq %rcx, -0xc8(%rbp)
leaq -0xb60(%rbp), %r14
movq %r14, %rdi
movq %r12, %rsi
leaq -0xf0(%rbp), %rdx
callq 0xd02e
leaq -0xc0(%rbp), %rdi
movq %r14, %rsi
callq 0xe3ac
leaq -0xb40(%rbp), %rdi
callq 0xd856
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xc202
callq 0x5340
leaq -0xf0(%rbp), %rdi
callq 0xd856
movq %r15, -0xb60(%rbp)
movq %r12, %rdi
callq 0x5180
leaq (%rax,%rbp), %rdx
addq $-0x360, %rdx           # imm = 0xFCA0
movq %r14, %rdi
movq %r12, %rsi
callq 0xb226
leaq -0xc0(%rbp), %rdi
movq %r14, %rsi
callq 0xe30e
movq %rax, %r14
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xc256
callq 0x5340
addq $0x40, %r14
movq -0x48(%rbp), %rax
movq -0x78(%rbp), %rcx
movq -0x70(%rbp), %rdx
movq -0x60(%rbp), %rsi
subq -0x68(%rbp), %rsi
xorl %edi, %edi
movq %rdi, -0xb60(%rbp)
movq %rax, -0xb58(%rbp)
movq %rdi, -0xb50(%rbp)
movq %rcx, -0xb48(%rbp)
movq %rdx, -0xb40(%rbp)
movq %rsi, -0xb38(%rbp)
movq %r14, %rdi
leaq -0xb60(%rbp), %rsi
callq 0xe58e
leaq -0x2d60(%rbp), %r15
movq %r15, %rdi
movl $0x2000, %esi           # imm = 0x2000
movq -0x50(%rbp), %r14
movq %r14, %rdx
callq 0x55e0
testq %rax, %rax
jne 0xbfc4
movq %r14, %rdi
callq 0x5390
movl $0x1, %esi
movq -0x80(%rbp), %rdi
callq 0xd0a8
movq -0xa8(%rbp), %r15
leaq -0xb8(%rbp), %rax
cmpq %rax, %r15
je 0xc458
leaq -0xb60(%rbp), %r12
cmpq $0x1, 0x68(%r15)
je 0xc43d
movq 0x28(%rbx), %r14
leaq -0xb50(%rbp), %rax
movq %rax, -0xb60(%rbp)
movq 0x20(%r15), %rsi
movq 0x28(%r15), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xb188
incq %r14
movq %r14, -0xb40(%rbp)
movq %rbx, %rdi
movq %r12, %rsi
callq 0xe89c
movq -0xb60(%rbp), %rdi
leaq -0xb50(%rbp), %rax
cmpq %rax, %rdi
je 0xc35e
callq 0x5340
movq 0x58(%r15), %r13
leaq 0x48(%r15), %r14
cmpq %r14, %r13
je 0xc43d
movq 0x28(%rbx), %rax
movq 0x68(%rbx), %rsi
movq %rsi, %rcx
subq 0x60(%rbx), %rcx
sarq $0x4, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
movq 0x28(%r13), %rdx
movups 0x38(%r13), %xmm0
movq 0x48(%r13), %rdi
movq %rcx, -0xb60(%rbp)
movq %rdx, -0xb58(%rbp)
movq %rax, -0xb50(%rbp)
movups %xmm0, -0xb48(%rbp)
movq %rdi, -0xb38(%rbp)
cmpq 0x70(%rbx), %rsi
je 0xc3f4
movups -0xb60(%rbp), %xmm0
movups -0xb50(%rbp), %xmm1
movups -0xb40(%rbp), %xmm2
movups %xmm2, 0x20(%rsi)
movups %xmm1, 0x10(%rsi)
movups %xmm0, (%rsi)
movq 0x68(%rbx), %rax
addq $0x30, %rax
movq %rax, 0x68(%rbx)
jmp 0xc404
movq -0x80(%rbp), %rdi
movq %r12, %rdx
callq 0xea8e
movq 0x68(%rbx), %rax
movq -0x30(%rax), %rcx
movq -0x28(%rax), %rax
movq %rax, -0xb60(%rbp)
movq %rcx, -0xb58(%rbp)
movq -0x88(%rbp), %rdi
movq %r12, %rsi
callq 0xebc8
movq %r13, %rdi
callq 0x5430
movq %rax, %r13
cmpq %r14, %rax
jne 0xc36f
movq %r15, %rdi
callq 0x5260
movq %rax, %r15
leaq -0xb8(%rbp), %rax
cmpq %rax, %r15
jne 0xc301
movq 0x28(%rbx), %rsi
incq %rsi
movq -0x58(%rbp), %rdi
callq 0xd0f4
leaq -0x148(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0xf8(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x158(%rbp), %rdi
callq 0xb188
leaq -0xb60(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0xd16e
movq -0x158(%rbp), %rdi
cmpq %r14, %rdi
je 0xc4b4
callq 0x5340
xorl %r12d, %r12d
leaq -0xb60(%rbp), %rdi
callq 0xd200
movq %rax, %r14
testq %rax, %rax
je 0xc590
leaq 0x8(%r14), %r13
movq %rbx, %rdi
movq %r13, %rsi
callq 0xf494
movq %rax, %r15
leaq -0x130(%rbp), %rdi
movq %r13, %rsi
callq 0xf532
leaq -0x128(%rbp), %rcx
cmpq %rcx, %rax
je 0xc503
movsd 0x40(%rax), %xmm0
jmp 0xc506
xorps %xmm0, %xmm0
cmpq -0x100(%rbp), %r15
je 0xc582
movq 0x40(%r15), %rax
movq %rax, -0x360(%rbp)
movl $0x0, -0x350(%rbp)
movq %r12, -0x348(%rbp)
leaq -0x350(%rbp), %rcx
movq %rcx, -0x340(%rbp)
movq %rcx, -0x338(%rbp)
movq %r12, -0x330(%rbp)
movq %r14, -0x328(%rbp)
movsd %xmm0, -0x320(%rbp)
leaq (%rax,%rax,8), %rdi
shlq $0x3, %rdi
movq -0x58(%rbp), %rax
addq (%rax), %rdi
leaq -0x360(%rbp), %rsi
callq 0xd720
leaq -0x358(%rbp), %rdi
callq 0x9d62
jmp 0xc4b7
movq (%r14), %rax
movq %r14, %rdi
callq *0x8(%rax)
jmp 0xc4b7
movq 0x60(%rbx), %r15
addq $0x30, %r15
cmpq 0x68(%rbx), %r15
je 0xc5d5
leaq -0x360(%rbp), %r14
movq 0x10(%r15), %rax
movq -0x58(%rbp), %rcx
movq (%rcx), %rcx
leaq (%rax,%rax,8), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
movq %r15, -0x360(%rbp)
movq %r14, %rsi
callq 0xdba4
addq $0x30, %r15
cmpq 0x68(%rbx), %r15
jne 0xc5a5
leaq -0xb60(%rbp), %rdi
callq 0xdc5e
leaq -0xc0(%rbp), %rdi
callq 0xdfce
leaq -0x130(%rbp), %rdi
callq 0xe05c
addq $0x2d38, %rsp           # imm = 0x2D38
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq -0x50(%rbp), %rax
movq (%rax), %r8
leaq 0xd1b0(%rip), %rsi      # 0x197c9
leaq 0xd170(%rip), %rdx      # 0x19790
leaq -0xb60(%rbp), %r15
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
movl $0x1c, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x1596c(%rip), %rsi     # 0x21fc8
movq 0x15955(%rip), %rdx     # 0x21fb8
movq %r14, %rdi
callq 0x5660
jmp 0xc9e2
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xd1d3(%rip), %rsi      # 0x19851
leaq 0xd10b(%rip), %rdx      # 0x19790
leaq -0xb60(%rbp), %r15
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
movl $0x46, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x15907(%rip), %rsi     # 0x21fc8
movq 0x158f0(%rip), %rdx     # 0x21fb8
movq %r14, %rdi
callq 0x5660
jmp 0xc9e2
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xd1f4(%rip), %rsi      # 0x198d7
leaq 0xd0a6(%rip), %rdx      # 0x19790
leaq -0xb60(%rbp), %r15
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
movl $0x4e, %ecx
xorl %eax, %eax
pushq -0x60(%rbp)
pushq -0x68(%rbp)
pushq -0x90(%rbp)
pushq -0x70(%rbp)
pushq -0x78(%rbp)
pushq %r12
pushq %r13
pushq -0x48(%rbp)
callq 0x5090
addq $0x40, %rsp
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x15885(%rip), %rsi     # 0x21fc8
movq 0x1586e(%rip), %rdx     # 0x21fb8
movq %r14, %rdi
callq 0x5660
jmp 0xc9e2
movl $0x10, %edi
callq 0x51b0
movq %rax, %r15
leaq -0xb0(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0xd01a(%rip), %rsi      # 0x19790
leaq 0xd025(%rip), %rdx      # 0x197a2
leaq -0xc0(%rbp), %rdi
callq 0xb226
leaq 0xd79d(%rip), %rsi      # 0x19f2d
leaq -0xc0(%rbp), %rdi
callq 0x5740
leaq -0x120(%rbp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0xc8e6
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
jmp 0xc8f7
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xd01b(%rip), %rsi      # 0x197ee
leaq 0xcfb6(%rip), %rdx      # 0x19790
leaq -0xb60(%rbp), %r15
movq %r15, %rdi
movl $0x25, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x157b9(%rip), %rsi     # 0x21fc8
movq 0x157a2(%rip), %rdx     # 0x21fb8
movq %r14, %rdi
callq 0x5660
jmp 0xc9e2
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xcfd8(%rip), %rsi      # 0x19809
leaq 0xcf58(%rip), %rdx      # 0x19790
leaq -0xb60(%rbp), %r15
movq %r15, %rdi
movl $0x2b, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x1575b(%rip), %rsi     # 0x21fc8
movq 0x15744(%rip), %rdx     # 0x21fb8
movq %r14, %rdi
callq 0x5660
jmp 0xc9e2
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xcf9a(%rip), %rsi      # 0x19829
leaq 0xcefa(%rip), %rdx      # 0x19790
leaq -0xb60(%rbp), %r15
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
movl $0x34, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x156f6(%rip), %rsi     # 0x21fc8
movq 0x156df(%rip), %rdx     # 0x21fb8
movq %r14, %rdi
callq 0x5660
jmp 0xc9e2
movq %rdx, -0x130(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x120(%rbp)
movq 0x8(%rax), %rdx
movq %rdx, -0x128(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xf0(%rbp), %rdi
movl $0x11, %esi
callq 0xcf84
leaq -0xd60(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0xf0(%rbp), %rdx
callq 0xced2
leaq 0xce60(%rip), %rsi      # 0x197a3
leaq -0xd60(%rbp), %rdi
callq 0x5740
leaq -0x350(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0xc978
movups (%rcx), %xmm0
leaq -0x350(%rbp), %rdx
movups %xmm0, (%rdx)
jmp 0xc989
movq %rdx, -0x360(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x350(%rbp)
movq 0x8(%rax), %rdx
leaq -0x360(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xb60(%rbp), %rdi
movq -0x50(%rbp), %rdx
callq 0xce6e
movb $0x1, %r12b
leaq -0xb60(%rbp), %rsi
movq %r15, %rdi
callq 0x5690
xorl %r12d, %r12d
movq 0x155f5(%rip), %rsi     # 0x21fc8
movq 0x155de(%rip), %rdx     # 0x21fb8
movq %r15, %rdi
callq 0x5660
movq %rax, %r13
leaq -0xb50(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xca02
callq 0x5340
jmp 0xca02
movq %rax, %r13
movb $0x1, %r12b
movq -0x360(%rbp), %rdi
leaq -0x350(%rbp), %rax
cmpq %rax, %rdi
je 0xca22
callq 0x5340
jmp 0xca22
movq %rax, %r13
movb $0x1, %r12b
leaq -0xd50(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xca3f
callq 0x5340
jmp 0xca3f
movq %rax, %r13
movb $0x1, %r12b
leaq -0xe0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xca5c
callq 0x5340
jmp 0xca5c
movq %rax, %r13
movb $0x1, %r12b
movq -0x130(%rbp), %rdi
cmpq %rbx, %rdi
je 0xca6d
callq 0x5340
movq -0xc0(%rbp), %rdi
cmpq %r14, %rdi
je 0xca7e
callq 0x5340
testb %r12b, %r12b
movq -0x30(%rbp), %rbx
jne 0xcac7
jmp 0xcbfa
movq %rax, %r13
movq -0xc0(%rbp), %rdi
cmpq %r14, %rdi
je 0xcac3
callq 0x5340
jmp 0xcac3
jmp 0xcba2
jmp 0xcb61
jmp 0xcba2
jmp 0xcb61
jmp 0xcba2
jmp 0xcb61
movq %rax, %r13
movq -0x30(%rbp), %rbx
movq %r15, %rdi
callq 0x5280
jmp 0xcbfa
movq %rax, %r13
movq -0x158(%rbp), %rdi
cmpq %r14, %rdi
je 0xcb9a
jmp 0xcb95
jmp 0xcbdf
jmp 0xcbdf
jmp 0xcb81
jmp 0xcb52
movq %rax, %r13
jmp 0xcb28
movq %rax, %r13
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xcb9a
jmp 0xcb95
jmp 0xcb81
movq %rax, %r13
leaq -0xb60(%rbp), %rdi
callq 0xd07c
leaq -0xf0(%rbp), %rdi
callq 0xd856
jmp 0xcb9a
movq %rax, %r13
movq -0xb60(%rbp), %rdi
leaq -0xb50(%rbp), %rax
cmpq %rax, %rdi
je 0xcb9a
jmp 0xcb95
jmp 0xcb81
jmp 0xcb81
movq %rax, %r13
movq %r14, %rdi
callq 0x5280
jmp 0xcb9a
jmp 0xcba2
movq %rax, %r13
movq %r14, %rdi
callq 0x5280
jmp 0xcbc2
movq %rax, %r13
leaq -0x358(%rbp), %rdi
callq 0x9d62
jmp 0xcbcf
jmp 0xcbcc
movq %rax, %r13
jmp 0xcb9a
movq %rax, %r13
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xcb9a
callq 0x5340
movq -0x30(%rbp), %rbx
jmp 0xcbe2
jmp 0xcbdf
movq %rax, %r13
jmp 0xcbc2
movq %rax, %r13
movq -0xb60(%rbp), %rdi
leaq -0xb50(%rbp), %rax
cmpq %rax, %rdi
je 0xcbc2
callq 0x5340
movq -0x30(%rbp), %rbx
jmp 0xcbee
jmp 0xcbcc
jmp 0xcbcc
movq %rax, %r13
leaq -0xb60(%rbp), %rdi
callq 0xdc5e
jmp 0xcbe2
jmp 0xcbdf
movq %rax, %r13
leaq -0xc0(%rbp), %rdi
callq 0xdfce
leaq -0x130(%rbp), %rdi
callq 0xe05c
movq -0x58(%rbp), %rdi
callq 0x9d12
movq -0x80(%rbp), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0xcc14
callq 0x5340
movq -0x88(%rbp), %rdi
callq 0x9c62
movq %rbx, %rdi
callq 0x9dba
movq %r13, %rdi
callq 0x56a0