// File: /workspace/github_cpp_makefile_star2_O1/simonrharris[P]SKA/src/sk_distance.cpp
// Function: kmerDistance(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, bool, bool, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&, int, float, bool)
int kmerDistance(const std::string & prefix, const bool distancefile, const bool clusterfile, const std::vector < std::string > & kmerfiles, const int maxSNPS, const float minMatched, const bool includeSingletons)
{

	const std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();

	int numfiles=kmerfiles.size();

	std::vector < std::string > sampleNames;
	if (collectSampleNames(kmerfiles, sampleNames)!=0){return 1;}
	int numSamples=sampleNames.size();
	
	std::unordered_map < std::string, std::string > kmerMap;// Create the kmer map
	std::string emptySequence (numSamples , '-');
	int oldkmersize=0;

	std::vector < int > kmerCounts(numSamples, 0);

	std::ifstream fileStream;
	int sampleNum=0;
	for (int s = 0; s < kmerfiles.size(); ++s){
		
		if (openFileStream(kmerfiles[s], fileStream)){return 1;};

		int kmersize;
		std::vector < std::string > names;
		
		readKmerHeader(fileStream, kmersize, names);
		

		if (s==0){
			oldkmersize=kmersize;
		}

		if (kmersize!=oldkmersize){
			std::cout << "kmer files have different kmer sizes\n\n" << std::endl << std::endl;
			return 0;
		}


		char base;
		char kmerbuffer[kmersize*2/3];
		char asciibuffer[int(ceil(float(names.size())/6))];

		while (fileStream.read(asciibuffer, sizeof(asciibuffer))){
			std::string asciibits (asciibuffer, sizeof(asciibuffer));
			std::vector < bool > mybits;
			vectorbool_from_ascii(asciibits, mybits);//read the ascii representation of the taxa to a vector of bools
			
			while (fileStream.peek()!='\n' && fileStream.get(base)){
				base=toupper(base);
				fileStream.read(kmerbuffer, sizeof(kmerbuffer));
				std::string kmer (kmerbuffer, kmersize*2/3);
				for (int i=0; i<names.size(); ++i){ //add the base to all samples that are true in the bitset
					if (mybits[i]){
						kmerCounts[sampleNum+i]++;
					}
				}
				
				std::unordered_map < std::string, std::string >::iterator it = kmerMap.find(kmer);//check if the kmer is in the hash
				if ( it != kmerMap.end() ){//if the kmer is in the hash
					for (int i=0; i<names.size(); ++i){ //add the base to all samples that are true in the bitset
						if (mybits[i]){
							it->second[sampleNum+i]=base;//add the base to the string
						}
					}
				}
				else {
					std::string newsequence = emptySequence;
					for (int i=0; i<names.size(); ++i){ //add the base to all samples that are true in the bitset
						if (mybits[i]){
							newsequence[sampleNum+i] = base;
						}
					}
					kmerMap.insert(std::make_pair(kmer, newsequence));
				}
	    	}
	    	fileStream.ignore(256,'\n');//skip the end ofline character
	    }
	    sampleNum+=int(names.size()); //add the number of samples in the file to the count of total samples
		fileStream.close();
	}
	std::cout << kmerMap.size() << " kmers read from " << numSamples << " samples in " << numfiles << " files" << std::endl;

	std::vector < std::vector < int > > pairwiseSNPs( numSamples , std::vector < int >( numSamples , 0 ) );
	std::vector < std::vector < int > > pairwiseMatches( numSamples , std::vector < int >( numSamples , kmerMap.size() ) );
	std::vector < std::vector < int > > pairwiseNs( numSamples , std::vector < int >( numSamples , 0 ) );
	
	
	std::cout << "Calculating SNP distances" << std::endl;

	std::vector < std::bitset < 1000000 > >  kmerbitvector( numSamples, 0 );
	std::bitset < 1000000 > mykmerbits;
	

	while (kmerMap.size()>0){
		
		std::vector < std::vector < int >  > baseVector (6 , std::vector < int >() ) ;
		std::unordered_map < std::string, std::string >::iterator kmit = kmerMap.begin();
		std::unordered_map < std::string, std::string >::iterator endIter = kmerMap.end();
		int j=0;
	
		for (; kmit!=endIter && j<1000000; ){

			std::fill(baseVector.begin(), baseVector.end(), ( std::vector < int >() ));

			for (int i=0; i<numSamples; ++i){

				baseVector[base_score[kmit->second[i]]].push_back(i);
				if (base_score[kmit->second[i]]==5){
					kmerbitvector[i].set(j);
				}
			}

			if (baseVector[5].size()>0){
				j++;
			}

			for (int k=0; k<4; ++k){
				for (int l=k+1; l<4; ++l){
					for (std::vector < int >::iterator it=baseVector[k].begin(); it!=baseVector[k].end(); ++it){
						for (std::vector < int >::iterator it2=baseVector[l].begin(); it2!=baseVector[l].end(); ++it2){
							//count++;
							if (*it<*it2){
								pairwiseSNPs[*it][*it2]++;
							}
							else {
								pairwiseSNPs[*it2][*it]++;
							}
						}
					}
				}
			}

			kmerMap.erase(kmit++);
		}
		
		for (int i=0; i<numSamples; ++i){
			for (int j=i+1; j<numSamples; ++j){
				mykmerbits = kmerbitvector[i] | kmerbitvector[j];
				pairwiseMatches[i][j]-=mykmerbits.count();
			}
			kmerbitvector[i].reset();
		}
	}

	std::string dotfilename=prefix+".dot";
	std::ofstream dotout(dotfilename);
	dotout << "graph {" << std::endl;

	if (clusterfile){
		std::string clusterfilename=prefix+".clusters.tsv";
		std::ofstream clusterout(clusterfilename);
		std::map <int, int> clusterMap;
		std::vector < std::vector <int> > clusters;
		std::cout << "Printing clusters to " << clusterfilename << std::endl;
		clusterout << "ID\tCluster__autocolour" << std::endl;
		for (int i=0; i<numSamples; ++i){
			std::vector < int > matches;
			matches.push_back(i);
			int matchcount=0;
			for (int j=i+1; j<numSamples; ++j){
				float kmercount=std::min(kmerCounts[i], kmerCounts[j]);
				float percentmatched = float(pairwiseMatches[i][j])/kmercount;
				if (pairwiseSNPs[i][j]<=maxSNPS && percentmatched>=minMatched){
					matchcount++;
					matches.push_back(j);
					float similarity;
					if (maxSNPS>0){
						similarity=((1.0-(float(pairwiseSNPs[i][j])/float(maxSNPS)))*3.0)+1;
					}
					else {
						similarity=1.0;
					}
					dotout << "\t" << sampleNames[i] << " -- " << sampleNames[j] << " [label=\"" << pairwiseSNPs[i][j] << "\" weight=" << similarity << "] ;" << std::endl;
				}
			}
			if (matchcount==0 && includeSingletons){
				dotout << "\t" << sampleNames[i] << " ;" << std::endl; //Need to find somewhere to put this where it does what I want
			}
			int clusternum=clusters.size();
			for ( std::vector < int >::iterator it=matches.begin(); it!=matches.end(); ++it){
				std::map <int, int >::iterator it2 = clusterMap.find(*it);//check if the match is in the hash
				if ( it2 != clusterMap.end() ){//if the match is in the hash
					if (it2->second<clusternum){
						clusternum=it2->second;
					}
				}
			}
			if (clusternum==clusters.size()){
				clusters.push_back(std::vector <int>());
			}
			for ( std::vector < int >::iterator it=matches.begin(); it!=matches.end(); ++it){
				std::map < int, int >::iterator it2 = clusterMap.find(*it);//check if the match is in the hash
				if ( it2 != clusterMap.end() ){//if the match is in the hash
					if (it2->second!=clusternum){
						for ( std::vector < int >::iterator it3=clusters[it2->second].begin(); it3!=clusters[it2->second].end(); ++it3){
							clusters[clusternum].push_back(*it3);
						}
						clusters[it2->second].clear();
					}
				}
				else{
					clusterMap.insert(std::make_pair(*it, clusternum));
					clusters[clusternum].push_back(*it);
				}
			}


			for ( std::vector < int >::iterator it2=clusters[clusternum].begin(); it2!=clusters[clusternum].end(); ++it2){
				std::map < int, int >::iterator it3 = clusterMap.find(*it2);//check if the match is in the hash
				if ( it3 != clusterMap.end() ){
					it3->second=clusternum;//segfault is on this line
				}	
			}

		}
		for ( std::map < int, int >::iterator it=clusterMap.begin(); it!=clusterMap.end(); ++it){
			clusterout << sampleNames[it->first] << "\t" << it->second+1 << "\n";
		}
		clusterout.close();

		int i=0;
		for ( std::vector < std::vector < int > >::iterator it=clusters.begin(); it!=clusters.end(); ++it){
			++i;
			if (it->size()>1){
				std::string clusterfilename=prefix+".cluster."+std::to_string(i)+".txt";
				std::ofstream clusterout(clusterfilename);
				for ( std::vector < int >::iterator it2=it->begin(); it2!=it->end(); ++it2){
					clusterout << sampleNames[*it2] << "\n";
				}
				clusterout.close();
			}
		}
	}

	dotout << "}" << std::endl;
	dotout.close();
	
	if (distancefile){
		std::string distancefilename=prefix+".distances.tsv";
		std::cout << "Printing distances to " << distancefilename << std::endl;
		
		std::ofstream distanceout(distancefilename);
		distanceout << "Sample 1\tSample 2\tMatches\tMismatches\tJaccard Index\tMash-like distance\tSNPs\tSNP distance" <<std::endl;
		for (int i=0; i<numSamples; ++i){
			for (int j=i+1; j<numSamples; ++j){
				float matches=pairwiseMatches[i][j] ;
				float mismatches=(kmerCounts[i]-pairwiseMatches[i][j]+kmerCounts[j]-pairwiseMatches[i][j]);
				float myID=matches/(mismatches+matches);
				float mashlike;
				if (myID==0){
					mashlike=1.0;
				}
				else{
					mashlike=(-1.0/((oldkmersize*2)+1))*log((2*myID)/(1+myID));
				}
				distanceout << sampleNames[i] << "\t" << sampleNames[j] << "\t" << int(matches) << "\t" << int(mismatches) << "\t" << myID << "\t" << mashlike << "\t" << pairwiseSNPs[i][j] << "\t" << pairwiseSNPs[i][j]/matches << std::endl;
			}
		}
		distanceout.close();
	}

	printDuration(start);
	
	return 0;
	
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x3d938, %rsp          # imm = 0x3D938
movl %r9d, -0x18c(%rbp)
movss %xmm0, -0x100(%rbp)
movl %r8d, %r15d
movq %rcx, %r12
movl %edx, -0x188(%rbp)
movl %esi, %r14d
movq %rdi, -0xf8(%rbp)
callq 0x5060
movq %rax, -0x240(%rbp)
movq 0x8(%r12), %r13
subq (%r12), %r13
xorps %xmm0, %xmm0
leaq -0x160(%rbp), %rsi
movaps %xmm0, (%rsi)
movq $0x0, 0x10(%rsi)
movl $0x1, %ebx
movq %r12, -0xb8(%rbp)
movq %r12, %rdi
movl $0x1, %edx
callq 0x98af
testl %eax, %eax
jne 0x12591
movq %r13, -0x238(%rbp)
movl %r14d, -0x184(%rbp)
movq -0x158(%rbp), %r13
subq -0x160(%rbp), %r13
shrq $0x5, %r13
leaq -0x268(%rbp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
movslq %r13d, %r14
leaq -0x1e8(%rbp), %rax
movq %rax, -0x10(%rax)
leaq -0x1f8(%rbp), %rdi
movq %r14, %rsi
movl $0x2d, %edx
callq 0x5440
leaq -0x3d958(%rbp), %rdx
movl $0x0, (%rdx)
leaq -0x210(%rbp), %rdi
leaq -0x1f110(%rbp), %rcx
movq %r14, %rsi
callq 0x100da
leaq -0x8c0(%rbp), %rdi
callq 0x5410
movq -0xb8(%rbp), %rcx
movq (%rcx), %rax
cmpq %rax, 0x8(%rcx)
setne %cl
movq %r13, -0xa8(%rbp)
movl %r15d, -0xac(%rbp)
je 0x10d0c
movq %r14, -0x230(%rbp)
leaq -0x8c0(%rbp), %r12
leaq -0x120(%rbp), %r14
leaq -0x70(%rbp), %r15
xorl %edi, %edi
movq $0x0, -0x48(%rbp)
movl $0x0, -0xe8(%rbp)
movb %cl, -0x98(%rbp)
movq %rdi, -0xa0(%rbp)
shlq $0x5, %rdi
addq %rax, %rdi
movq %r12, %rsi
movl $0x1, %edx
callq 0x7f73
testl %eax, %eax
jne 0x10d20
xorps %xmm0, %xmm0
movaps %xmm0, -0x90(%rbp)
movq $0x0, -0x80(%rbp)
movq %r12, %rdi
movq %r14, %rsi
leaq -0x90(%rbp), %rdx
callq 0x96e2
cmpq $0x0, -0xa0(%rbp)
movl -0x120(%rbp), %edx
movq -0x48(%rbp), %rcx
cmovel %edx, %ecx
movq %rcx, -0x48(%rbp)
cmpl %ecx, %edx
movq %rdx, -0xc0(%rbp)
jne 0x10837
movq %rsp, -0x248(%rbp)
leal (%rdx,%rdx), %eax
cltq
imulq $0x55555556, %rax, %rcx # imm = 0x55555556
movq %rcx, %rax
shrq $0x3f, %rax
shrq $0x20, %rcx
addl %eax, %ecx
movq %rcx, -0x30(%rbp)
leaq 0xf(%rcx), %rax
andq $-0x10, %rax
movq %rsp, %r13
subq %rax, %r13
movq %r13, %rsp
movq -0x88(%rbp), %rax
subq -0x90(%rbp), %rax
sarq $0x5, %rax
js 0x108b0
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
jmp 0x108c8
movl $0x26, %edx
movq 0x3077d(%rip), %rdi     # 0x40fc0
leaq 0x230f2(%rip), %rsi     # 0x3393c
callq 0x5420
movq 0x3076a(%rip), %rcx     # 0x40fc0
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
movq 0x3074c(%rip), %rdi     # 0x40fc0
callq 0x5030
movq %rax, %rdi
callq 0x5250
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
jmp 0x10cc5
movq %rax, %rcx
shrq %rcx
andl $0x1, %eax
orq %rcx, %rax
xorps %xmm0, %xmm0
cvtsi2ss %rax, %xmm0
addss %xmm0, %xmm0
divss 0x22db0(%rip), %xmm0    # 0x33680
callq 0x51e0
cvttss2si %xmm0, %ecx
leaq 0xf(%rcx), %rax
andq $-0x10, %rax
movq %rsp, %rdx
subq %rax, %rdx
movq %rdx, %rsp
movq %rcx, -0x40(%rbp)
movq %rdx, -0x38(%rbp)
leaq (%rdx,%rcx), %rax
movq %rax, -0xf0(%rbp)
movslq -0xe8(%rbp), %r14
movq %r15, %rbx
movq %r12, %rdi
movq -0x38(%rbp), %rsi
movq -0x40(%rbp), %rdx
callq 0x5480
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x10c89
leaq -0x6a8(%rbp), %rax
movq %rax, -0x6b8(%rbp)
leaq -0x6b8(%rbp), %r15
movq %r15, %rdi
movq -0x38(%rbp), %rsi
movq -0xf0(%rbp), %rdx
callq 0x862a
xorl %eax, %eax
movq %rax, -0x1f110(%rbp)
movl %eax, -0x1f108(%rbp)
movq %rax, -0x1f100(%rbp)
movl %eax, -0x1f0f8(%rbp)
movq %rax, -0x1f0f0(%rbp)
movq %r15, %rdi
leaq -0x1f110(%rbp), %rsi
callq 0x89ef
movq %rbx, %r15
movq %r12, %rdi
callq 0x5140
cmpl $0xa, %eax
je 0x10c0e
movq %r12, %rdi
movq %r15, %rsi
callq 0x5500
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x10c0e
movsbl -0x70(%rbp), %edi
callq 0x56d0
movb %al, -0x70(%rbp)
movq %r12, %rdi
movq %r13, %rsi
movq -0x30(%rbp), %rdx
callq 0x5480
movl -0x120(%rbp), %eax
addl %eax, %eax
cltq
imulq $0x55555556, %rax, %rax # imm = 0x55555556
movq %rax, %rcx
shrq $0x3f, %rcx
shrq $0x20, %rax
addl %ecx, %eax
movslq %eax, %rdx
leaq -0x490(%rbp), %rax
movq %rax, -0x4a0(%rbp)
addq %r13, %rdx
leaq -0x4a0(%rbp), %rdi
movq %r13, %rsi
callq 0x862a
movq -0x88(%rbp), %rax
subq -0x90(%rbp), %rax
je 0x10a60
sarq $0x5, %rax
movq -0x1f110(%rbp), %rcx
cmpq $0x1, %rax
adcq $0x0, %rax
leaq (,%r14,4), %rdx
addq -0x210(%rbp), %rdx
xorl %esi, %esi
movq %rsi, %rdi
shrq $0x6, %rdi
movq (%rcx,%rdi,8), %rdi
btq %rsi, %rdi
jae 0x10a58
incl (%rdx,%rsi,4)
incq %rsi
cmpq %rsi, %rax
jne 0x10a44
leaq -0x298(%rbp), %rdi
leaq -0x4a0(%rbp), %rsi
callq 0xb71e
testq %rax, %rax
je 0x10ad2
movq -0x88(%rbp), %rcx
cmpq -0x90(%rbp), %rcx
je 0x10be3
xorl %ecx, %ecx
movq -0x1f110(%rbp), %rdx
movq %rcx, %rsi
shrq $0x6, %rsi
movq (%rdx,%rsi,8), %rdx
btq %rcx, %rdx
jae 0x10ab3
movb -0x70(%rbp), %dl
movq 0x28(%rax), %rsi
addq %r14, %rsi
movb %dl, (%rcx,%rsi)
incq %rcx
movq -0x88(%rbp), %rdx
subq -0x90(%rbp), %rdx
sarq $0x5, %rdx
cmpq %rcx, %rdx
ja 0x10a8e
jmp 0x10be3
leaq -0x1b0(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq -0x1f8(%rbp), %rsi
movq -0x1f0(%rbp), %rdx
addq %rsi, %rdx
leaq -0x1c0(%rbp), %rdi
callq 0x859a
movq -0x88(%rbp), %rax
cmpq -0x90(%rbp), %rax
leaq -0x3d958(%rbp), %rbx
je 0x10b58
xorl %eax, %eax
movq -0x1f110(%rbp), %rcx
movq %rax, %rdx
shrq $0x6, %rdx
movq (%rcx,%rdx,8), %rcx
btq %rax, %rcx
jae 0x10b3e
movb -0x70(%rbp), %cl
movq -0x1c0(%rbp), %rdx
addq %r14, %rdx
movb %cl, (%rax,%rdx)
incq %rax
movq -0x88(%rbp), %rcx
subq -0x90(%rbp), %rcx
sarq $0x5, %rcx
cmpq %rax, %rcx
ja 0x10b16
movq %rbx, %rdi
leaq -0x4a0(%rbp), %rsi
leaq -0x1c0(%rbp), %rdx
callq 0x12bda
leaq -0x298(%rbp), %rdi
movq %rbx, %rsi
callq 0xb836
movq -0x3d938(%rbp), %rdi
leaq -0x3d928(%rbp), %rax
cmpq %rax, %rdi
je 0x10b9f
movq -0x3d928(%rbp), %rsi
incq %rsi
callq 0x53c0
movq -0x3d958(%rbp), %rdi
leaq -0x3d948(%rbp), %rax
cmpq %rax, %rdi
je 0x10bc1
movq -0x3d948(%rbp), %rsi
incq %rsi
callq 0x53c0
movq -0x1c0(%rbp), %rdi
leaq -0x1b0(%rbp), %rax
cmpq %rax, %rdi
je 0x10be3
movq -0x1b0(%rbp), %rsi
incq %rsi
callq 0x53c0
movq -0x4a0(%rbp), %rdi
leaq -0x490(%rbp), %rax
cmpq %rax, %rdi
je 0x10986
movq -0x490(%rbp), %rsi
incq %rsi
callq 0x53c0
jmp 0x10986
movl $0x100, %esi            # imm = 0x100
movq %r12, %rdi
movl $0xa, %edx
callq 0x5220
movq -0x1f110(%rbp), %rdi
testq %rdi, %rdi
je 0x10c5e
movq -0x1f0f0(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
xorl %eax, %eax
movq %rax, -0x1f110(%rbp)
movl %eax, -0x1f108(%rbp)
movq %rax, -0x1f100(%rbp)
movl %eax, -0x1f0f8(%rbp)
movq %rax, -0x1f0f0(%rbp)
movq -0x6b8(%rbp), %rdi
leaq -0x6a8(%rbp), %rax
cmpq %rax, %rdi
je 0x10904
movq -0x6a8(%rbp), %rsi
incq %rsi
callq 0x53c0
jmp 0x10904
movq -0x90(%rbp), %r14
movq -0x88(%rbp), %r15
movq %r12, %rdi
callq 0x50b0
subq %r14, %r15
shrq $0x5, %r15
addl %r15d, -0xe8(%rbp)
movq -0x248(%rbp), %rsp
movq -0xa8(%rbp), %r13
leaq -0x120(%rbp), %r14
movq %rbx, %r15
leaq -0x90(%rbp), %rdi
callq 0xabee
xorl %ebx, %ebx
movq -0xc0(%rbp), %rax
cmpl -0x48(%rbp), %eax
jne 0x10d25
movq -0xa0(%rbp), %rdi
incq %rdi
movq -0xb8(%rbp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
cmpq %rdi, %rcx
seta %cl
ja 0x1076c
jmp 0x10d2b
xorl %ebx, %ebx
movsd 0x22552(%rip), %xmm0    # 0x33268
movsd %xmm0, -0xe8(%rbp)
jmp 0x10d53
movl $0x1, %ebx
movb -0x98(%rbp), %cl
movq -0x48(%rbp), %rax
leal 0x1(,%rax,2), %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
movsd %xmm0, -0xe8(%rbp)
movl -0xac(%rbp), %r15d
movq -0x230(%rbp), %r14
testb $0x1, %cl
jne 0x1253c
movq -0x280(%rbp), %rsi
movq 0x30256(%rip), %rdi     # 0x40fc0
callq 0x5240
movq %rax, %rbx
leaq 0x22bea(%rip), %rsi     # 0x33963
movl $0x11, %edx
movq %rax, %rdi
callq 0x5420
movq %rbx, %rdi
movl %r13d, %esi
callq 0x5690
movq %rax, %rbx
leaq 0x22715(%rip), %rsi     # 0x334b0
movl $0xc, %edx
movq %rax, %rdi
callq 0x5420
movq -0x238(%rbp), %rsi
shrq $0x5, %rsi
movq %rbx, %rdi
callq 0x5690
movq %rax, %rbx
leaq 0x23d3c(%rip), %rsi     # 0x34b01
movl $0x6, %edx
movq %rax, %rdi
callq 0x5420
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
leaq -0x1f110(%rbp), %rdx
movl $0x0, (%rdx)
leaq -0x3d958(%rbp), %rdi
leaq -0x6b8(%rbp), %rcx
movq %r14, %rsi
callq 0x100da
leaq -0x1d8(%rbp), %rdi
leaq -0x3d958(%rbp), %rdx
leaq -0x4a0(%rbp), %rcx
movq %r14, %rsi
callq 0x12a5a
movq -0x3d958(%rbp), %rdi
testq %rdi, %rdi
je 0x10e54
movq -0x3d948(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
movl -0x280(%rbp), %eax
leaq -0x1f110(%rbp), %rdx
movl %eax, (%rdx)
leaq -0x3d958(%rbp), %rdi
leaq -0x6b8(%rbp), %rcx
movq %r14, %rsi
callq 0x100da
leaq -0x260(%rbp), %rdi
leaq -0x3d958(%rbp), %rdx
leaq -0x4a0(%rbp), %rcx
movq %r14, %rsi
callq 0x12a5a
movq -0x3d958(%rbp), %rdi
testq %rdi, %rdi
je 0x10eb1
movq -0x3d948(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
leaq -0x1f110(%rbp), %rdx
movl $0x0, (%rdx)
leaq -0x3d958(%rbp), %rdi
leaq -0x6b8(%rbp), %rcx
movq %r14, %rsi
callq 0x100da
leaq -0x4b8(%rbp), %rdi
leaq -0x3d958(%rbp), %rdx
leaq -0x4a0(%rbp), %rcx
movq %r14, %rsi
callq 0x12a5a
movq -0x3d958(%rbp), %rdi
testq %rdi, %rdi
je 0x10f0c
movq -0x3d948(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
movq 0x300ad(%rip), %rbx     # 0x40fc0
leaq 0x22a5b(%rip), %rsi     # 0x33975
movl $0x19, %edx
movq %rbx, %rdi
callq 0x5420
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
movq 0x3007b(%rip), %rdi     # 0x40fc0
callq 0x5030
movq %rax, %rdi
callq 0x5250
leaq -0x3d958(%rbp), %rbx
movl $0x1e848, %edx          # imm = 0x1E848
movq %rbx, %rdi
xorl %esi, %esi
callq 0x51d0
leaq -0x228(%rbp), %rdi
leaq -0x1f110(%rbp), %rcx
movq %r14, %rsi
movq %rbx, %rdx
callq 0x12af2
leaq -0x3d958(%rbp), %rdi
movl $0x1e848, %edx          # imm = 0x1E848
xorl %esi, %esi
callq 0x51d0
cmpq $0x0, -0x280(%rbp)
je 0x113ef
movslq %r13d, %rax
movq %rax, -0xb8(%rbp)
movl %eax, %ebx
andl $0x7fffffff, %ebx       # imm = 0x7FFFFFFF
leaq -0x6b8(%rbp), %r14
movq %rbx, -0xf0(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x1f110(%rbp)
movq $0x0, -0x1f100(%rbp)
movl $0x6, %esi
movq %r14, %rdi
leaq -0x1f110(%rbp), %r15
movq %r15, %rdx
leaq -0x4a0(%rbp), %rcx
callq 0x12a5a
movq -0x1f110(%rbp), %rdi
testq %rdi, %rdi
je 0x11012
movq -0x1f100(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
movl $0x0, -0x38(%rbp)
movq -0x288(%rbp), %r14
testq %r14, %r14
je 0x11237
cmpl $0xf4240, -0x38(%rbp)   # imm = 0xF4240
jae 0x11237
movq %r14, -0x30(%rbp)
movq -0x6b8(%rbp), %r14
movq -0x6b0(%rbp), %r12
xorpd %xmm0, %xmm0
movapd %xmm0, -0x1f110(%rbp)
movq $0x0, -0x1f100(%rbp)
cmpq %r12, %r14
je 0x11075
movq %r14, %rdi
movq %r15, %rsi
callq 0x12e6a
addq $0x18, %r14
jmp 0x1105f
movq -0x1f110(%rbp), %rdi
testq %rdi, %rdi
je 0x11090
movq -0x1f100(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
movl $0x0, -0x1f110(%rbp)
testl %r13d, %r13d
jle 0x11158
movl $0x1, %r12d
movl -0x38(%rbp), %ecx
shlq %cl, %r12
movl %ecx, %eax
movq %rax, -0x40(%rbp)
movl %ecx, %r14d
shrl $0x6, %r14d
xorl %eax, %eax
movslq %eax, %rcx
movq -0x30(%rbp), %rdx
movq 0x28(%rdx), %rdx
movsbq (%rdx,%rcx), %rcx
leaq 0x3036b(%rip), %rdx     # 0x41440
movsbq (%rdx,%rcx), %rcx
movq -0x6b8(%rbp), %rdx
leaq (%rcx,%rcx,2), %rcx
leaq (%rdx,%rcx,8), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x110ff
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x11107
movq %r15, %rdx
callq 0xe01e
movslq -0x1f110(%rbp), %rax
movq -0x30(%rbp), %rcx
movq 0x28(%rcx), %rcx
movsbq (%rcx,%rax), %rcx
leaq 0x3031e(%rip), %rdx     # 0x41440
cmpb $0x5, (%rdx,%rcx)
jne 0x11147
cmpl $0xf4240, -0x38(%rbp)   # imm = 0xF4240
jae 0x125ae
imulq $0x1e848, %rax, %rcx    # imm = 0x1E848
addq -0x228(%rbp), %rcx
orq %r12, (%rcx,%r14,8)
incl %eax
movl %eax, -0x1f110(%rbp)
cmpl %r13d, %eax
jl 0x110be
movq -0x6b8(%rbp), %rcx
movq 0x80(%rcx), %rax
xorl %edx, %edx
cmpq 0x78(%rcx), %rax
setne %dl
movl %edx, -0x40(%rbp)
movl $0x1, %edx
xorl %esi, %esi
cmpq $0x2, %rsi
ja 0x111f4
leaq (%rsi,%rsi,2), %rax
movq (%rcx,%rax,8), %rdi
movq 0x8(%rcx,%rax,8), %r8
movq %rdx, %r9
cmpq %r8, %rdi
je 0x111eb
leaq (%r9,%r9,2), %r10
movq (%rcx,%r10,8), %rax
movq 0x8(%rcx,%r10,8), %r11
movq %rdi, %r14
cmpq %r11, %rax
je 0x111e2
movq -0x1d8(%rbp), %r12
movq %rax, %r10
movl (%r14), %ebx
movl (%r10), %r13d
cmpl %r13d, %ebx
movl %r13d, %r15d
cmovll %ebx, %r15d
cmovgl %ebx, %r13d
movslq %r15d, %rbx
leaq (%rbx,%rbx,2), %rbx
movslq %r13d, %r15
movq (%r12,%rbx,8), %rbx
incl (%rbx,%r15,4)
addq $0x4, %r10
cmpq %r11, %r10
jne 0x111b3
addq $0x4, %r14
cmpq %r8, %r14
jne 0x111a4
incq %r9
cmpq $0x4, %r9
jne 0x1118f
incq %rsi
incq %rdx
cmpq $0x4, %rsi
jne 0x11179
movl -0x40(%rbp), %eax
addl %eax, -0x38(%rbp)
movq -0x30(%rbp), %rsi
movq (%rsi), %r14
leaq -0x298(%rbp), %rdi
callq 0xc86a
movq -0xa8(%rbp), %r13
movq -0xf0(%rbp), %rbx
leaq -0x1f110(%rbp), %r15
jmp 0x11020
testl %r13d, %r13d
jle 0x113c4
movq -0x228(%rbp), %rax
movq -0x260(%rbp), %rcx
movq %rcx, -0x98(%rbp)
movq %rax, -0x48(%rbp)
addq $0x1e848, %rax          # imm = 0x1E848
movq %rax, -0xa0(%rbp)
movl $0x1, %eax
movq %rax, -0xc0(%rbp)
xorl %ecx, %ecx
movq %rcx, -0x38(%rbp)
leaq 0x1(%rcx), %rax
movq %rax, -0x40(%rbp)
cmpq -0xb8(%rbp), %rax
jge 0x11389
movq -0x38(%rbp), %rax
imulq $0x1e848, %rax, %r13    # imm = 0x1E848
addq -0x48(%rbp), %r13
leaq (%rax,%rax,2), %rax
movq -0x98(%rbp), %rcx
movq (%rcx,%rax,8), %rax
movq %rax, -0x30(%rbp)
movq -0xa0(%rbp), %r14
movq -0xc0(%rbp), %r12
movl $0x1e848, %edx          # imm = 0x1E848
movq %r15, %rdi
movq %r13, %rsi
callq 0x5320
xorl %eax, %eax
movq (%r14,%rax,8), %rcx
orq %rcx, -0x1f110(%rbp,%rax,8)
incq %rax
cmpq $0x3d09, %rax           # imm = 0x3D09
jne 0x112cf
movl $0x1e848, %edx          # imm = 0x1E848
leaq -0x3d958(%rbp), %rdi
movq %r15, %rsi
callq 0x5320
xorl %ecx, %ecx
xorl %eax, %eax
movabsq $0x5555555555555555, %rdi # imm = 0x5555555555555555
movabsq $0x3333333333333333, %r8 # imm = 0x3333333333333333
movabsq $0xf0f0f0f0f0f0f0f, %r9 # imm = 0xF0F0F0F0F0F0F0F
movabsq $0x101010101010101, %r10 # imm = 0x101010101010101
movq -0x3d958(%rbp,%rcx,8), %rdx
movq %rdx, %rsi
shrq %rsi
andq %rdi, %rsi
subq %rsi, %rdx
movq %rdx, %rsi
andq %r8, %rsi
shrq $0x2, %rdx
andq %r8, %rdx
addq %rsi, %rdx
movq %rdx, %rsi
shrq $0x4, %rsi
addq %rdx, %rsi
andq %r9, %rsi
imulq %r10, %rsi
shrq $0x38, %rsi
addq %rsi, %rax
incq %rcx
cmpq $0x3d09, %rcx           # imm = 0x3D09
jne 0x11326
movq -0x30(%rbp), %rcx
subl %eax, (%rcx,%r12,4)
incq %r12
addq $0x1e848, %r14          # imm = 0x1E848
cmpq %rbx, %r12
jne 0x112bd
imulq $0x1e848, -0x38(%rbp), %rdi # imm = 0x1E848
addq -0x48(%rbp), %rdi
movl $0x1e848, %edx          # imm = 0x1E848
xorl %esi, %esi
callq 0x51d0
incq -0xc0(%rbp)
movl $0x1e848, %eax          # imm = 0x1E848
addq %rax, -0xa0(%rbp)
movq -0x40(%rbp), %rax
movq %rax, %rcx
cmpq %rbx, %rax
jne 0x11274
leaq -0x6b8(%rbp), %r14
movq %r14, %rdi
callq 0x12b8c
cmpq $0x0, -0x280(%rbp)
movl -0xac(%rbp), %r15d
movq -0xa8(%rbp), %r13
jne 0x10fc2
leaq -0x80(%rbp), %rax
movq %rax, -0x10(%rax)
movq -0xf8(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x90(%rbp), %rdi
callq 0x859a
leaq 0x22574(%rip), %rsi     # 0x3398f
leaq -0x90(%rbp), %rdi
callq 0x5710
leaq -0x1f110(%rbp), %rdi
leaq -0x90(%rbp), %rsi
movl $0x10, %edx
callq 0x5720
leaq 0x2254e(%rip), %rsi     # 0x33994
leaq -0x1f110(%rbp), %rbx
movl $0x7, %edx
movq %rbx, %rdi
callq 0x5420
movq -0x1f110(%rbp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
leaq -0x1f110(%rbp), %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
cmpb $0x0, -0x188(%rbp)
je 0x12027
leaq -0x110(%rbp), %rax
movq %rax, -0x10(%rax)
movq -0xf8(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x120(%rbp), %rdi
callq 0x859a
leaq 0x224d7(%rip), %rsi     # 0x3399c
leaq -0x120(%rbp), %rdi
callq 0x5710
leaq -0x6b8(%rbp), %rdi
leaq -0x120(%rbp), %rsi
movl $0x10, %edx
callq 0x5720
leaq -0x1b8(%rbp), %r14
movl $0x0, (%r14)
xorl %eax, %eax
movq %rax, 0x8(%r14)
movq %r14, 0x10(%r14)
movq %r14, 0x18(%r14)
movq %rax, 0x20(%r14)
movq %rax, -0x130(%rbp)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x140(%rbp)
movq 0x2fa9d(%rip), %rdi     # 0x40fc0
leaq 0x22480(%rip), %rsi     # 0x339aa
movl $0x15, %edx
callq 0x5420
movq -0x120(%rbp), %rsi
movq -0x118(%rbp), %rdx
movq 0x2fa77(%rip), %rdi     # 0x40fc0
callq 0x5420
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
leaq 0x22441(%rip), %rsi     # 0x339c0
leaq -0x6b8(%rbp), %rbx
movl $0x16, %edx
movq %rbx, %rdi
callq 0x5420
movq -0x6b8(%rbp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
movl $0x0, -0xe0(%rbp)
testl %r13d, %r13d
jle 0x11bd1
xorps %xmm0, %xmm0
cvtsi2ss %r15d, %xmm0
movss %xmm0, -0x38(%rbp)
xorl %eax, %eax
leaq 0x22cc6(%rip), %r12     # 0x342b1
xorps %xmm0, %xmm0
movaps %xmm0, -0x4a0(%rbp)
movq $0x0, -0x490(%rbp)
movq -0x498(%rbp), %rsi
testq %rsi, %rsi
je 0x1161b
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x498(%rbp)
jmp 0x1162e
leaq -0x4a0(%rbp), %rdi
leaq -0xe0(%rbp), %rdx
callq 0xe01e
movl -0xe0(%rbp), %eax
incl %eax
movl %eax, -0x70(%rbp)
movb $0x1, %cl
cmpl %r13d, %eax
jge 0x1186c
xorl %r14d, %r14d
movslq -0xe0(%rbp), %rsi
movslq %eax, %rcx
movq -0x1d8(%rbp), %rdi
leaq (%rsi,%rsi,2), %rdx
movq (%rdi,%rdx,8), %rdi
cmpl %r15d, (%rdi,%rcx,4)
jg 0x1184e
movq -0x260(%rbp), %rdi
movq -0x210(%rbp), %r8
movl (%r8,%rsi,4), %esi
movl (%r8,%rcx,4), %r8d
cmpl %esi, %r8d
cmovll %r8d, %esi
movq (%rdi,%rdx,8), %rdx
xorps %xmm0, %xmm0
cvtsi2ssl (%rdx,%rcx,4), %xmm0
xorps %xmm1, %xmm1
cvtsi2ss %esi, %xmm1
divss %xmm1, %xmm0
ucomiss -0x100(%rbp), %xmm0
jb 0x1184e
movq -0x498(%rbp), %rsi
cmpq -0x490(%rbp), %rsi
je 0x116ca
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x498(%rbp)
jmp 0x116da
leaq -0x4a0(%rbp), %rdi
leaq -0x70(%rbp), %rdx
callq 0xe01e
movsd 0x21b86(%rip), %xmm2    # 0x33268
movsd %xmm2, -0x30(%rbp)
testl %r15d, %r15d
jle 0x1173b
movslq -0xe0(%rbp), %rax
movq -0x1d8(%rbp), %rcx
leaq (%rax,%rax,2), %rax
movslq -0x70(%rbp), %rdx
movq (%rcx,%rax,8), %rax
xorps %xmm0, %xmm0
cvtsi2ssl (%rax,%rdx,4), %xmm0
divss -0x38(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movapd %xmm2, %xmm1
subsd %xmm0, %xmm1
mulsd 0x22209(%rip), %xmm1    # 0x33930
addsd %xmm2, %xmm1
xorps %xmm0, %xmm0
cvtsd2ss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x30(%rbp)
movl $0x1, %edx
leaq -0x1f110(%rbp), %rdi
movq %r12, %rsi
callq 0x5420
movslq -0xe0(%rbp), %rax
movq -0x160(%rbp), %rcx
shlq $0x5, %rax
movq (%rcx,%rax), %rsi
movq 0x8(%rcx,%rax), %rdx
leaq -0x1f110(%rbp), %rdi
callq 0x5420
movq %rax, %rbx
movl $0x4, %edx
movq %rax, %rdi
leaq 0x2224f(%rip), %rsi     # 0x339d7
callq 0x5420
movslq -0x70(%rbp), %rax
movq -0x160(%rbp), %rcx
shlq $0x5, %rax
movq (%rcx,%rax), %rsi
movq 0x8(%rcx,%rax), %rdx
movq %rbx, %rdi
callq 0x5420
movq %rax, %rbx
movl $0x9, %edx
movq %rax, %rdi
leaq 0x2221d(%rip), %rsi     # 0x339dc
callq 0x5420
movslq -0xe0(%rbp), %rax
movq -0x1d8(%rbp), %rcx
leaq (%rax,%rax,2), %rax
movslq -0x70(%rbp), %rdx
movq (%rcx,%rax,8), %rax
movl (%rax,%rdx,4), %esi
movq %rbx, %rdi
callq 0x5690
movq %rax, %rbx
movl $0x9, %edx
movq %rax, %rdi
leaq 0x221eb(%rip), %rsi     # 0x339e6
callq 0x5420
movq %rbx, %rdi
movsd -0x30(%rbp), %xmm0
callq 0x5610
movq %rax, %rbx
movl $0x3, %edx
movq %rax, %rdi
leaq 0x221d1(%rip), %rsi     # 0x339f0
callq 0x5420
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
incl %r14d
movl -0x70(%rbp), %eax
incl %eax
movl %eax, -0x70(%rbp)
cmpl %r13d, %eax
jl 0x11647
testl %r14d, %r14d
sete %cl
leaq -0x1b8(%rbp), %r14
testb %cl, -0x18c(%rbp)
je 0x118ed
movl $0x1, %edx
leaq -0x1f110(%rbp), %rdi
movq %r12, %rsi
callq 0x5420
movslq -0xe0(%rbp), %rax
movq -0x160(%rbp), %rcx
shlq $0x5, %rax
movq (%rcx,%rax), %rsi
movq 0x8(%rcx,%rax), %rdx
leaq -0x1f110(%rbp), %rdi
callq 0x5420
movq %rax, %rbx
movl $0x2, %edx
movq %rax, %rdi
leaq 0x22130(%rip), %rsi     # 0x339f1
callq 0x5420
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
movq -0x138(%rbp), %rax
subq -0x140(%rbp), %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rcx, %rax
movq -0x4a0(%rbp), %rcx
movq -0x498(%rbp), %rdx
cmpq %rdx, %rcx
je 0x11985
movq -0x1b0(%rbp), %rsi
movl %eax, %r12d
movq %r14, %rdi
testq %rsi, %rsi
je 0x11954
movl (%rcx), %r8d
movq %rsi, %r9
movq %r14, %rdi
xorl %r10d, %r10d
cmpl %r8d, 0x20(%r9)
setl %r10b
cmovgeq %r9, %rdi
movq 0x10(%r9,%r10,8), %r9
testq %r9, %r9
jne 0x1193b
movq %r14, %r8
cmpq %r14, %rdi
je 0x1196a
movl (%rcx), %r8d
cmpl 0x20(%rdi), %r8d
cmovlq %r14, %rdi
movq %rdi, %r8
cmpq %r14, %r8
je 0x1197a
movl 0x24(%r8), %edi
cmpl %r12d, %edi
cmovll %edi, %r12d
addq $0x4, %rcx
cmpq %rdx, %rcx
jne 0x1192a
jmp 0x11988
movl %eax, %r12d
movslq %r12d, %r13
cmpq %r13, %rax
jne 0x119c4
xorps %xmm0, %xmm0
movaps %xmm0, -0x70(%rbp)
movq $0x0, -0x60(%rbp)
leaq -0x140(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x12f40
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x119c4
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
movq -0x4a0(%rbp), %rbx
cmpq -0x498(%rbp), %rbx
je 0x11b14
movq %r12, %rax
shlq $0x20, %rax
movq %rax, -0x30(%rbp)
movq -0x1b0(%rbp), %rcx
movq %r14, %rax
testq %rcx, %rcx
je 0x11a0e
movl (%rbx), %edx
movq %r14, %rax
xorl %esi, %esi
cmpl %edx, 0x20(%rcx)
setl %sil
cmovgeq %rcx, %rax
movq 0x10(%rcx,%rsi,8), %rcx
testq %rcx, %rcx
jne 0x119f7
movq %r14, %r15
cmpq %r14, %rax
je 0x11a22
movl (%rbx), %ecx
cmpl 0x20(%rax), %ecx
cmovlq %r14, %rax
movq %rax, %r15
cmpq %r14, %r15
je 0x11a9a
movslq 0x24(%r15), %rcx
cmpl %r12d, %ecx
je 0x11b03
movq -0x140(%rbp), %rax
leaq (%rcx,%rcx,2), %rcx
movq (%rax,%rcx,8), %r14
movslq 0x24(%r15), %rcx
leaq (%rcx,%rcx,2), %rdx
movq 0x8(%rax,%rdx,8), %rcx
cmpq %rcx, %r14
je 0x11ae2
leaq (,%r13,2), %rcx
addq %r13, %rcx
leaq (%rax,%rcx,8), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x11a81
movl (%r14), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x11a89
movq %r14, %rdx
callq 0xe01e
addq $0x4, %r14
movslq 0x24(%r15), %rcx
movq -0x140(%rbp), %rax
jmp 0x11a47
movl (%rbx), %eax
orq -0x30(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq -0x1c0(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x13132
movq -0x140(%rbp), %rax
leaq (,%r13,2), %rcx
addq %r13, %rcx
leaq (%rax,%rcx,8), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x11afb
movl (%rbx), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x11b03
leaq (%rax,%rdx,8), %rax
movq (%rax), %rdx
cmpq %rdx, %rcx
leaq -0x1b8(%rbp), %r14
je 0x11b03
movq %rdx, 0x8(%rax)
jmp 0x11b03
movq %rbx, %rdx
callq 0xe01e
addq $0x4, %rbx
cmpq -0x498(%rbp), %rbx
jne 0x119e3
movq -0x140(%rbp), %rcx
leaq (,%r13,2), %rdx
addq %r13, %rdx
movq (%rcx,%rdx,8), %rax
movq 0x8(%rcx,%rdx,8), %rcx
cmpq %rcx, %rax
movq -0xa8(%rbp), %r13
je 0x11b91
movq -0x1b0(%rbp), %rdx
movq %r14, %rsi
testq %rdx, %rdx
je 0x11b6b
movl (%rax), %edi
movq %rdx, %r8
movq %r14, %rsi
xorl %r9d, %r9d
cmpl %edi, 0x20(%r8)
setl %r9b
cmovgeq %r8, %rsi
movq 0x10(%r8,%r9,8), %r8
testq %r8, %r8
jne 0x11b52
movq %r14, %rdi
cmpq %r14, %rsi
je 0x11b7f
movl (%rax), %edi
cmpl 0x20(%rsi), %edi
cmovlq %r14, %rsi
movq %rsi, %rdi
cmpq %r14, %rdi
je 0x11b88
movl %r12d, 0x24(%rdi)
addq $0x4, %rax
cmpq %rcx, %rax
jne 0x11b42
movq -0x4a0(%rbp), %rdi
testq %rdi, %rdi
je 0x11bac
movq -0x490(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
movl -0xe0(%rbp), %eax
incl %eax
movl %eax, -0xe0(%rbp)
cmpl %r13d, %eax
movl -0xac(%rbp), %r15d
leaq 0x226e6(%rip), %r12     # 0x342b1
jl 0x115eb
movq -0x1a8(%rbp), %rbx
cmpq %r14, %rbx
je 0x11c59
leaq -0x6b8(%rbp), %r15
leaq 0x226c6(%rip), %r14     # 0x342b1
leaq 0x21d6f(%rip), %r12     # 0x33961
movslq 0x20(%rbx), %rax
movq -0x160(%rbp), %rcx
shlq $0x5, %rax
movq (%rcx,%rax), %rsi
movq 0x8(%rcx,%rax), %rdx
movq %r15, %rdi
callq 0x5420
movq %rax, %r13
movl $0x1, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x5420
movl 0x24(%rbx), %esi
incl %esi
movq %r13, %rdi
callq 0x5690
movl $0x1, %edx
movq %rax, %rdi
movq %r12, %rsi
callq 0x5420
movq %rbx, %rdi
callq 0x5270
movq %rax, %rbx
leaq -0x1b8(%rbp), %rax
cmpq %rax, %rbx
jne 0x11bf2
leaq -0x6b8(%rbp), %rdi
callq 0x5530
movq -0x140(%rbp), %r12
cmpq -0x138(%rbp), %r12
je 0x11fb0
leaq -0xd0(%rbp), %r14
movq 0x2f329(%rip), %rax     # 0x40fb0
movq (%rax), %rcx
movq %rcx, -0x38(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x40(%rbp)
xorl %ebx, %ebx
leaq -0x4a0(%rbp), %r13
leaq 0x21cbb(%rip), %r15     # 0x33961
leal 0x1(%rbx), %eax
movl %eax, -0x30(%rbp)
movq 0x8(%r12), %rax
subq (%r12), %rax
cmpq $0x5, %rax
jb 0x11f9a
movq %r14, -0xe0(%rbp)
movq -0xf8(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0xe0(%rbp), %r14
movq %r14, %rdi
callq 0x859a
movq %r14, %rdi
leaq 0x21d04(%rip), %rsi     # 0x339f4
callq 0x5710
movl $0x1, %r14d
cmpl $0x9, %ebx
leaq -0x490(%rbp), %rbx
jb 0x11d4e
movl $0x4, %r14d
movl -0x30(%rbp), %eax
cmpl $0x63, %eax
jbe 0x11d45
cmpl $0x3e7, %eax            # imm = 0x3E7
jbe 0x11d4b
cmpl $0x2710, %eax           # imm = 0x2710
jb 0x11d4e
movl %eax, %ecx
movl $0xd1b71759, %edx       # imm = 0xD1B71759
imulq %rdx, %rcx
shrq $0x2d, %rcx
addl $0x4, %r14d
cmpl $0x1869f, %eax          # imm = 0x1869F
movl %ecx, %eax
ja 0x11d10
addl $-0x3, %r14d
jmp 0x11d4e
addl $-0x2, %r14d
jmp 0x11d4e
decl %r14d
movl %r14d, %esi
leaq -0x170(%rbp), %rax
movq %rax, -0x180(%rbp)
leaq -0x180(%rbp), %rdi
movl $0x2d, %edx
callq 0x5440
movq -0x180(%rbp), %rdi
movl %r14d, %esi
movl -0x30(%rbp), %edx
callq 0x12c3d
movq -0xe0(%rbp), %rcx
movl $0xf, %esi
leaq -0xd0(%rbp), %r14
cmpq %r14, %rcx
je 0x11da1
movq -0xd0(%rbp), %rsi
movq -0xd8(%rbp), %r8
movq -0x178(%rbp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x11dd9
movl $0xf, %esi
leaq -0x170(%rbp), %rdi
cmpq %rdi, -0x180(%rbp)
je 0x11dd4
movq -0x170(%rbp), %rsi
cmpq %rsi, %rax
jbe 0x11dee
movq -0x180(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x5110
jmp 0x11dfe
leaq -0x180(%rbp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x5400
movq %rbx, -0x4a0(%rbp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x11e24
movq %rdx, -0x4a0(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x490(%rbp)
jmp 0x11e2c
movupd (%rcx), %xmm0
movupd %xmm0, (%rbx)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, -0x498(%rbp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
movq %r13, %rdi
leaq 0x21ba9(%rip), %rsi     # 0x339fe
callq 0x5710
leaq -0x60(%rbp), %rsi
movq %rsi, -0x70(%rbp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x11e7e
movq %rdx, -0x70(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x60(%rbp)
jmp 0x11e86
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, -0x68(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq -0x4a0(%rbp), %rdi
cmpq %rbx, %rdi
je 0x11eb8
movq -0x490(%rbp), %rsi
incq %rsi
callq 0x53c0
movq -0x180(%rbp), %rdi
leaq -0x170(%rbp), %rax
cmpq %rax, %rdi
je 0x11eda
movq -0x170(%rbp), %rsi
incq %rsi
callq 0x53c0
movq -0xe0(%rbp), %rdi
cmpq %r14, %rdi
je 0x11ef5
movq -0xd0(%rbp), %rsi
incq %rsi
callq 0x53c0
movq %r13, %rdi
leaq -0x70(%rbp), %rsi
movl $0x10, %edx
callq 0x5720
movq (%r12), %rbx
cmpq 0x8(%r12), %rbx
je 0x11f46
movslq (%rbx), %rax
movq -0x160(%rbp), %rcx
shlq $0x5, %rax
movq (%rcx,%rax), %rsi
movq 0x8(%rcx,%rax), %rdx
movq %r13, %rdi
callq 0x5420
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x5420
addq $0x4, %rbx
jmp 0x11f0a
movq %r13, %rdi
callq 0x5530
movq -0x38(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movq -0x18(%rax), %rax
movq -0x40(%rbp), %rcx
movq %rcx, -0x4a0(%rbp,%rax)
leaq -0x498(%rbp), %rdi
callq 0x5330
leaq -0x3a8(%rbp), %rdi
callq 0x5120
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x11f9a
movq -0x60(%rbp), %rsi
incq %rsi
callq 0x53c0
addq $0x18, %r12
movl -0x30(%rbp), %eax
movl %eax, %ebx
cmpq -0x138(%rbp), %r12
jne 0x11ca6
leaq -0x140(%rbp), %rdi
callq 0x12b8c
leaq -0x1c0(%rbp), %rdi
callq 0x12caa
movq 0x2efe1(%rip), %rax     # 0x40fb0
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq -0x6b0(%rbp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, -0x6b8(%rbp,%rcx)
callq 0x5330
leaq -0x5c0(%rbp), %rdi
callq 0x5120
movq -0x120(%rbp), %rdi
leaq -0x110(%rbp), %rax
cmpq %rax, %rdi
je 0x12020
movq -0x110(%rbp), %rsi
incq %rsi
callq 0x53c0
movq -0xa8(%rbp), %r13
leaq 0x219d5(%rip), %rsi     # 0x33a03
leaq -0x1f110(%rbp), %rbx
movl $0x1, %edx
movq %rbx, %rdi
callq 0x5420
movq -0x1f110(%rbp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
leaq -0x1f110(%rbp), %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
leaq -0x1f110(%rbp), %rdi
callq 0x5530
cmpb $0x0, -0x184(%rbp)
je 0x1249d
leaq -0x490(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0xf8(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x4a0(%rbp), %rdi
callq 0x859a
leaq 0x2194c(%rip), %rsi     # 0x33a05
leaq -0x4a0(%rbp), %rdi
callq 0x5710
movq 0x2eef4(%rip), %rdi     # 0x40fc0
leaq 0x21941(%rip), %rsi     # 0x33a14
movl $0x16, %edx
callq 0x5420
movq -0x4a0(%rbp), %rsi
movq -0x498(%rbp), %rdx
movq 0x2eece(%rip), %rdi     # 0x40fc0
callq 0x5420
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
leaq -0x6b8(%rbp), %rdi
leaq -0x4a0(%rbp), %rsi
movl $0x10, %edx
callq 0x5720
leaq 0x218eb(%rip), %rsi     # 0x33a2b
leaq -0x6b8(%rbp), %rbx
movl $0x57, %edx
movq %rbx, %rdi
callq 0x5420
movq -0x6b8(%rbp), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
leaq -0x6b8(%rbp), %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
testl %r13d, %r13d
jle 0x12439
movsd 0x210cc(%rip), %xmm0    # 0x33260
divsd -0xe8(%rbp), %xmm0
movsd %xmm0, -0xc0(%rbp)
andl $0x7fffffff, %r13d      # imm = 0x7FFFFFFF
leaq -0x1(%r13), %rax
movq %rax, -0x98(%rbp)
movq $0x0, -0x100(%rbp)
leaq 0x220e9(%rip), %r15     # 0x342b1
xorl %eax, %eax
movq %r13, -0xa8(%rbp)
movq %rax, -0x48(%rbp)
incq %rax
movq %rax, -0xb8(%rbp)
cmpq %r13, %rax
jae 0x12413
movq -0x48(%rbp), %rax
leaq (%rax,%rax,2), %r12
shlq $0x5, %rax
movq %rax, -0xa0(%rbp)
movq -0x98(%rbp), %rbx
movq -0x100(%rbp), %r13
movq -0x260(%rbp), %rax
movq (%rax,%r12,8), %rax
movl 0x4(%rax,%r13), %eax
cvtsi2ss %eax, %xmm1
movq -0x210(%rbp), %rcx
movq -0x48(%rbp), %rdx
movl (%rcx,%rdx,4), %edx
addl %eax, %eax
subl %eax, %edx
addl 0x4(%rcx,%r13), %edx
cvtsi2ss %edx, %xmm2
movaps %xmm1, %xmm0
movss %xmm2, -0xf0(%rbp)
addss %xmm2, %xmm0
movss %xmm1, -0x30(%rbp)
divss %xmm0, %xmm1
movss %xmm1, -0x38(%rbp)
ucomiss 0x216dc(%rip), %xmm1    # 0x33938
movsd 0x21004(%rip), %xmm0    # 0x33268
movsd %xmm0, -0x40(%rbp)
jne 0x1226d
jnp 0x122a3
movss -0x38(%rbp), %xmm1
movaps %xmm1, %xmm0
addss %xmm1, %xmm0
addss 0x20d83(%rip), %xmm1    # 0x33004
divss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm0
callq 0x5300
mulsd -0xc0(%rbp), %xmm0
cvtsd2ss %xmm0, %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x40(%rbp)
movq -0x160(%rbp), %rax
movq -0xa0(%rbp), %rcx
movq (%rax,%rcx), %rsi
movq 0x8(%rax,%rcx), %rdx
leaq -0x6b8(%rbp), %rdi
callq 0x5420
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x5420
movq -0x160(%rbp), %rax
movq 0x20(%rax,%r13,8), %rsi
movq 0x28(%rax,%r13,8), %rdx
movq %r14, %rdi
callq 0x5420
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x5420
cvttss2si -0x30(%rbp), %esi
movq %r14, %rdi
callq 0x5690
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x5420
cvttss2si -0xf0(%rbp), %esi
movq %r14, %rdi
callq 0x5690
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x5420
xorps %xmm0, %xmm0
cvtss2sd -0x38(%rbp), %xmm0
movq %r14, %rdi
callq 0x5610
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x5420
movq %r14, %rdi
movsd -0x40(%rbp), %xmm0
callq 0x5610
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x5420
movq -0x1d8(%rbp), %rax
movq (%rax,%r12,8), %rax
movl 0x4(%rax,%r13), %esi
movq %r14, %rdi
callq 0x5690
movq %rax, %r14
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x5420
movq -0x1d8(%rbp), %rax
movq (%rax,%r12,8), %rax
xorps %xmm0, %xmm0
cvtsi2ssl 0x4(%rax,%r13), %xmm0
divss -0x30(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movq %r14, %rdi
callq 0x5610
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x53a0
movsbl %al, %esi
movq %r14, %rdi
callq 0x5030
movq %rax, %rdi
callq 0x5250
addq $0x4, %r13
decq %rbx
jne 0x12209
addq $0x4, -0x100(%rbp)
decq -0x98(%rbp)
movq -0xa8(%rbp), %r13
movq -0xb8(%rbp), %rax
cmpq %r13, %rax
jne 0x121d1
leaq -0x6b8(%rbp), %rdi
callq 0x5530
movq 0x2eb64(%rip), %rax     # 0x40fb0
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq -0x6b0(%rbp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, -0x6b8(%rbp,%rcx)
callq 0x5330
leaq -0x5c0(%rbp), %rdi
callq 0x5120
movq -0x4a0(%rbp), %rdi
leaq -0x490(%rbp), %rax
cmpq %rax, %rdi
je 0x1249d
movq -0x490(%rbp), %rsi
incq %rsi
callq 0x53c0
movq -0x240(%rbp), %rdi
callq 0x8354
movq 0x2eb00(%rip), %rax     # 0x40fb0
movq (%rax), %rcx
movq 0x18(%rax), %rax
leaq -0x1f108(%rbp), %rdi
movq %rcx, -0x8(%rdi)
movq -0x18(%rcx), %rcx
movq %rax, -0x1f110(%rbp,%rcx)
callq 0x5330
leaq -0x1f018(%rbp), %rdi
callq 0x5120
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x124fb
movq -0x80(%rbp), %rsi
incq %rsi
callq 0x53c0
movq -0x228(%rbp), %rdi
testq %rdi, %rdi
je 0x12516
movq -0x218(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
leaq -0x4b8(%rbp), %rdi
callq 0x12b8c
leaq -0x260(%rbp), %rdi
callq 0x12b8c
leaq -0x1d8(%rbp), %rdi
callq 0x12b8c
xorl %ebx, %ebx
leaq -0x8c0(%rbp), %rdi
callq 0x50d0
movq -0x210(%rbp), %rdi
testq %rdi, %rdi
je 0x12563
movq -0x200(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
movq -0x1f8(%rbp), %rdi
leaq -0x1e8(%rbp), %rax
cmpq %rax, %rdi
je 0x12585
movq -0x1e8(%rbp), %rsi
incq %rsi
callq 0x53c0
leaq -0x298(%rbp), %rdi
callq 0xdf64
leaq -0x160(%rbp), %rdi
callq 0xabee
movl %ebx, %eax
leaq -0x28(%rbp), %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x214da(%rip), %rdi     # 0x33a8f
leaq 0x214c7(%rip), %rsi     # 0x33a83
movl $0xf4240, %ecx          # imm = 0xF4240
movq -0x40(%rbp), %rdx
xorl %eax, %eax
callq 0x55b0
jmp 0x126a8
jmp 0x126a8
jmp 0x1276d
jmp 0x125dd
movq %rax, %rbx
jmp 0x12826
jmp 0x1276d
jmp 0x125ec
movq %rax, %rbx
jmp 0x128be
movq %rax, %rbx
jmp 0x129b1
jmp 0x126b5
movq %rax, %rbx
movq -0x3d958(%rbp), %rdi
testq %rdi, %rdi
je 0x129d8
movq -0x3d948(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
jmp 0x129d8
movq %rax, %rbx
jmp 0x129d8
movq %rax, %rbx
movq -0x3d958(%rbp), %rdi
testq %rdi, %rdi
je 0x129e4
movq -0x3d948(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
jmp 0x129e4
movq %rax, %rbx
jmp 0x129e4
movq %rax, %rbx
movq -0x3d958(%rbp), %rdi
testq %rdi, %rdi
je 0x129f0
movq -0x3d948(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
jmp 0x129f0
jmp 0x12775
movq %rax, %rbx
jmp 0x129fc
movq %rax, %rbx
jmp 0x12a17
movq %rax, %rbx
jmp 0x12a39
jmp 0x12881
movq %rax, %rbx
jmp 0x12897
jmp 0x127e4
movq %rax, %rbx
jmp 0x129cc
jmp 0x127ae
movq %rax, %rbx
jmp 0x127bd
movq %rbx, %rcx
movq %rax, %rbx
movq -0x4a0(%rbp), %rdi
cmpq %rcx, %rdi
je 0x126f0
movq -0x490(%rbp), %rsi
incq %rsi
callq 0x53c0
jmp 0x126f0
movq %rax, %rbx
movq -0x180(%rbp), %rdi
leaq -0x170(%rbp), %rax
cmpq %rax, %rdi
je 0x12719
movq -0x170(%rbp), %rsi
incq %rsi
callq 0x53c0
jmp 0x12719
jmp 0x12716
movq %rax, %rbx
movq -0xe0(%rbp), %rdi
leaq -0xd0(%rbp), %rax
cmpq %rax, %rdi
je 0x12802
movq -0xd0(%rbp), %rsi
jmp 0x127ce
jmp 0x127a5
movq %rax, %rbx
movq -0x70(%rbp), %rdi
testq %rdi, %rdi
je 0x127e7
movq -0x60(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
jmp 0x127e7
jmp 0x127a5
movq %rax, %rbx
jmp 0x12a45
jmp 0x127d5
jmp 0x12775
movq %rax, %rbx
jmp 0x128b2
movq %rax, %rbx
jmp 0x129f0
jmp 0x127e4
movq %rax, %rbx
movq -0x1f110(%rbp), %rdi
testq %rdi, %rdi
je 0x129b1
movq -0x1f100(%rbp), %rsi
subq %rdi, %rsi
jmp 0x128d9
jmp 0x127e4
jmp 0x127e4
movq %rax, %rbx
jmp 0x12802
jmp 0x127d5
jmp 0x127e4
movq %rax, %rbx
leaq -0x4a0(%rbp), %rdi
callq 0x55a0
movq -0x70(%rbp), %rdi
leaq -0x60(%rbp), %rax
cmpq %rax, %rdi
je 0x12802
movq -0x60(%rbp), %rsi
incq %rsi
jmp 0x127fd
jmp 0x127d5
movq %rax, %rbx
jmp 0x12979
jmp 0x12916
jmp 0x127e4
movq %rax, %rbx
movq -0x4a0(%rbp), %rdi
testq %rdi, %rdi
je 0x12802
movq -0x490(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
leaq -0x140(%rbp), %rdi
callq 0x12b8c
leaq -0x1c0(%rbp), %rdi
callq 0x12caa
leaq -0x6b8(%rbp), %rdi
callq 0x55a0
movq -0x120(%rbp), %rdi
leaq -0x110(%rbp), %rax
cmpq %rax, %rdi
je 0x128b2
movq -0x110(%rbp), %rsi
jmp 0x128aa
jmp 0x1290e
movq %rax, %rbx
leaq -0x3d958(%rbp), %rdi
callq 0xab50
jmp 0x1285b
movq %rax, %rbx
movq -0x1c0(%rbp), %rdi
leaq -0x1b0(%rbp), %rax
cmpq %rax, %rdi
je 0x128e6
movq -0x1b0(%rbp), %rsi
incq %rsi
callq 0x53c0
jmp 0x128e6
jmp 0x128e3
movq %rax, %rbx
leaq -0x6b8(%rbp), %rdi
callq 0x55a0
leaq -0x490(%rbp), %r14
movq -0x4a0(%rbp), %rdi
cmpq %r14, %rdi
je 0x128b2
movq -0x490(%rbp), %rsi
incq %rsi
callq 0x53c0
leaq -0x1f110(%rbp), %rdi
callq 0x55a0
movq -0x90(%rbp), %rdi
leaq -0x80(%rbp), %rax
cmpq %rax, %rdi
je 0x129b1
movq -0x80(%rbp), %rsi
incq %rsi
callq 0x53c0
jmp 0x129b1
movq %rax, %rbx
movq -0x4a0(%rbp), %rdi
leaq -0x490(%rbp), %rax
cmpq %rax, %rdi
je 0x12919
movq -0x490(%rbp), %rsi
incq %rsi
callq 0x53c0
jmp 0x12919
jmp 0x12916
jmp 0x1290e
movq %rax, %rbx
jmp 0x129a5
movq %rax, %rbx
movq -0x1f110(%rbp), %rdi
testq %rdi, %rdi
je 0x12957
movq -0x1f0f0(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
xorl %eax, %eax
movq %rax, -0x1f110(%rbp)
movl %eax, -0x1f108(%rbp)
movq %rax, -0x1f100(%rbp)
movl %eax, -0x1f0f8(%rbp)
movq %rax, -0x1f0f0(%rbp)
movq -0x6b8(%rbp), %rdi
leaq -0x6a8(%rbp), %rax
cmpq %rax, %rdi
je 0x12979
movq -0x6a8(%rbp), %rsi
incq %rsi
callq 0x53c0
leaq -0x90(%rbp), %rdi
callq 0xabee
jmp 0x129f0
movq %rax, %rbx
movq -0x1f110(%rbp), %rdi
testq %rdi, %rdi
je 0x129a5
movq -0x1f100(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
leaq -0x6b8(%rbp), %rdi
callq 0x12b8c
movq -0x228(%rbp), %rdi
testq %rdi, %rdi
je 0x129cc
movq -0x218(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
leaq -0x4b8(%rbp), %rdi
callq 0x12b8c
leaq -0x260(%rbp), %rdi
callq 0x12b8c
leaq -0x1d8(%rbp), %rdi
callq 0x12b8c
leaq -0x8c0(%rbp), %rdi
callq 0x50d0
movq -0x210(%rbp), %rdi
testq %rdi, %rdi
je 0x12a17
movq -0x200(%rbp), %rsi
subq %rdi, %rsi
callq 0x53c0
leaq -0x1e8(%rbp), %rax
movq -0x1f8(%rbp), %rdi
cmpq %rax, %rdi
je 0x12a39
movq -0x1e8(%rbp), %rsi
incq %rsi
callq 0x53c0
leaq -0x298(%rbp), %rdi
callq 0xdf64
leaq -0x160(%rbp), %rdi
callq 0xabee
movq %rbx, %rdi
callq 0x56a0
nop