// File: melop[P]admixem/Population.cpp
// Function: Population::FreqDependentNaturalSelection()
void Population::FreqDependentNaturalSelection() {

	int nCurrGen = SimulConfig.GetCurrGen();
	bool bIgnoreGlobalRules = SimulConfig.pNaturalSelConfig->IgnoreGlobalRules(nCurrGen);
	string sPop = this->_sPopName;

	map< int, map<string , list< pair<Parser *, int> > > > * mppqParsers = SimulConfig.pNaturalSelConfig->GetFreqDependentFormulaeAllCPUs();


	//list< vector<string> > * pqvCourterSymbols = SimulConfig.pNaturalSelConfig->GetFormulaSymbolStringsCourter( sPop);
	list< vector<string> > * pqvSelfSymbols = SimulConfig.pNaturalSelConfig->GetFormulaSymbolStringsSelf( sPop);
	list< vector<string> > * pqvPopSymbols = SimulConfig.pNaturalSelConfig->GetFormulaSymbolStringsPop( sPop);
	list< vector<string> > * pqvPopCourterSymbols = SimulConfig.pNaturalSelConfig->GetFormulaSymbolStringsPopCourter( sPop);
	list< vector<string> > * pqvPopChooserSymbols = SimulConfig.pNaturalSelConfig->GetFormulaSymbolStringsPopChooser( sPop);

	//set population level parameters


	for(int nCPU=0;nCPU<nTotalCPUCore;nCPU++) { //set global current population parameters for all the CPUs

		list< pair< Parser *, int > > * pqParsers = &(*mppqParsers)[nCPU][this->_sPopName];
		list< vector<string> >::iterator itPopSymbols = pqvPopSymbols->begin();
		list< vector<string> >::iterator itPopCourterSymbols = pqvPopCourterSymbols->begin();
		list< vector<string> >::iterator itPopChooserSymbols = pqvPopChooserSymbols->begin();

		for (list< pair< Parser *, int> >::iterator itParser= pqParsers->begin(); itParser != pqParsers->end() ; ++itParser) {
			vector<string> vSymbolsPop = *itPopSymbols;
			vector<string> vSymbolsPopCourter = *itPopCourterSymbols;
			vector<string> vSymbolsPopChooser = *itPopChooserSymbols;

			Parser * pParser = itParser->first;
			//set population level symbols

			for(vector<string>::iterator itSymbol=vSymbolsPop.begin();itSymbol!=vSymbolsPop.end();++itSymbol)
			{
				string sSymbol = (*itSymbol).substr(4);
				string sType = (*itSymbol).substr(0, 3); //either Avg or Std
				if (sType != "Avg" && sType != "Std") {
					throw new Exception("Population parameter type unknown!");
				}
				if (this->_mpSumPhenotype.find(sSymbol) == _mpSumPhenotype.end()) {
					throw new Exception("Unable to find population symbol");
				}
			
				pParser->symbols_[string("Pop_Avg_"+sSymbol)] = this->_mpSumPhenotype[sSymbol].first;
				pParser->symbols_[string("Pop_Std_"+sSymbol)] = this->_mpSumPhenotype[sSymbol].second;

			}

			for(vector<string>::iterator itSymbol=vSymbolsPopCourter.begin();itSymbol!=vSymbolsPopCourter.end();++itSymbol)
			{
				string sSymbol = (*itSymbol).substr(4);
				string sType = (*itSymbol).substr(0, 3); //either Avg or Std
				if (sType != "Avg" && sType != "Std") {
					throw new Exception("Population parameter type unknown!");
				}
				if (this->_mpSumPhenotypeMale.find(sSymbol) == _mpSumPhenotypeMale.end()) {
					throw new Exception("Unable to find population symbol: male");
				}
			
				pParser->symbols_[string("PopCourter_Avg_"+sSymbol)] = this->_mpSumPhenotypeMale[sSymbol].first;
				pParser->symbols_[string("PopCourter_Std_"+sSymbol)] = this->_mpSumPhenotypeMale[sSymbol].second;

			}

			for(vector<string>::iterator itSymbol=vSymbolsPopChooser.begin();itSymbol!=vSymbolsPopChooser.end();++itSymbol)
			{
				string sSymbol = (*itSymbol).substr(4);
				string sType = (*itSymbol).substr(0, 3); //either Avg or Std
				if (sType != "Avg" && sType != "Std") {
					throw new Exception("Population parameter type unknown!");
				}
				if (this->_mpSumPhenotypeFemale.find(sSymbol) == _mpSumPhenotypeFemale.end()) {
					throw new Exception("Unable to find population symbol: female");
				}
			
				pParser->symbols_[string("PopChooser_Avg_"+sSymbol)] = this->_mpSumPhenotypeFemale[sSymbol].first;
				pParser->symbols_[string("PopChooser_Std_"+sSymbol)] = this->_mpSumPhenotypeFemale[sSymbol].second;

			}

		
			++itPopSymbols;
			++itPopCourterSymbols;
			++itPopChooserSymbols;
		}

	}
	//now go through each individual 
	vector<int>::size_type nMale = this->_mpMales.size();
	vector<int>::size_type nFemale = this->_mpFemales.size();

	#pragma omp parallel 
	{

	#pragma omp for
	//for (vector< Individual * >::size_type i=0; i< nMale; i++ ) {
	for (signed long i=0; i< nMale; i++ ) {
		Individual * pInd = _mpMales[i];

		#ifdef _OPENMP
		int nCPU = omp_get_thread_num();
		#else
		int nCPU = 0;
		#endif

		list< pair< Parser *, int > > * pqParsers = &(*mppqParsers)[nCPU][this->_sPopName];
		list< vector<string> >::iterator itSelfSymbols = pqvSelfSymbols->begin();
		for (list< pair< Parser *, int> >::iterator itParser= pqParsers->begin(); itParser != pqParsers->end() ; ++itParser) {
			vector<string> vSymbolsSelf = *itSelfSymbols;
			Parser * pParser = itParser->first;
			int nGen = itParser->second;

			if ((nGen ==-1 && !bIgnoreGlobalRules) || (bIgnoreGlobalRules && nGen == nCurrGen) ) {

				for(vector<string>::iterator itSymbol=vSymbolsSelf.begin();itSymbol!=vSymbolsSelf.end();++itSymbol)
				{
					//#pragma omp critical
					//{
						pParser->symbols_[string("My_"+(*itSymbol))] = pInd->GetPhenotype(*itSymbol);
						pParser->symbols_[*itSymbol] = pInd->GetPhenotype(*itSymbol); //set both variables
					//}
				}

				bool bLive = true;
				//#pragma omp critical 
				//{
					bLive = (UniformGen.Next() <= pParser->Evaluate())? true : false;
				//}

				if (!bLive) {

					#pragma omp critical 
					{
						delete pInd; // uhoh, dead!!
						_mpMales[i] = NULL; //mark it
						//_mpMales.erase(_mpMales.begin() + i);
					}
					break;
				}
			}
		
			++itSelfSymbols;
		}


	}

	#pragma omp for
	//for (vector< Individual * >::size_type i=0; i< nFemale; i++ ) {
	for (signed long i=0; i< nFemale; i++ ) {
		Individual * pInd = _mpFemales[i];

		#ifdef _OPENMP
		int nCPU = omp_get_thread_num();
		#else
		int nCPU = 0;
		#endif

		list< pair< Parser *, int > > * pqParsers = &(*mppqParsers)[nCPU][this->_sPopName];

		list< vector<string> >::iterator itSelfSymbols = pqvSelfSymbols->begin();
		for (list< pair< Parser *, int> >::iterator itParser= pqParsers->begin(); itParser != pqParsers->end() ; ++itParser) {
			vector<string> vSymbolsSelf = *itSelfSymbols;
			Parser * pParser = itParser->first;
			int nGen = itParser->second;

			if ((nGen ==-1 && !bIgnoreGlobalRules) || (bIgnoreGlobalRules && nGen == nCurrGen) ) {

				for(vector<string>::iterator itSymbol=vSymbolsSelf.begin();itSymbol!=vSymbolsSelf.end();++itSymbol)
				{
					//#pragma omp critical 
					//{
						pParser->symbols_[string("My_"+(*itSymbol))] = pInd->GetPhenotype(*itSymbol);
						pParser->symbols_[*itSymbol] = pInd->GetPhenotype(*itSymbol); //set both variables
					//}
				}

				bool bLive = true;
				//#pragma omp critical 
				//{
					bLive = (UniformGen.Next() <= pParser->Evaluate())? true : false;
				//}

				if (!bLive) {
					#pragma omp critical 
					{
						delete pInd; // uhoh, dead!!
						_mpFemales[i] = NULL;
						//_mpFemales.erase(_mpFemales.begin() + i);
					}
					break;
				}
			}
		
			++itSelfSymbols;
		}


	}

	} //end parallel block

	//clear NULL pointers from the arrays:

	for (vector< Individual * >::size_type i=0; i< nMale; i++ ) {
		if (! _mpMales[i]) {
			_mpMales.erase(_mpMales.begin() + i);
			nMale--; // readjust upper bound
			i--;
		}
	}
	
	for (vector< Individual * >::size_type i=0; i< nFemale; i++ ) {
		if (! _mpFemales[i]) {
			_mpFemales.erase(_mpFemales.begin() + i);
			nFemale--; // readjust upper bound
			i--;
		}
	}

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x810, %rsp            # imm = 0x810
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x578(%rbp)
leaq 0x401d7(%rip), %rdi     # 0xaaa58
movq %rdi, -0x570(%rbp)
callq 0x282f0
movl %eax, %ecx
movq -0x570(%rbp), %rax
movl %ecx, -0xc(%rbp)
movq 0x20(%rax), %rdi
movl -0xc(%rbp), %esi
callq 0x23a30
movq -0x578(%rbp), %rsi
movb %al, -0xd(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x81f0
movq -0x570(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x23b50
movq %rax, -0x568(%rbp)
jmp 0x6a8d1
movq -0x568(%rbp), %rax
movq %rax, -0x38(%rbp)
leaq 0x40175(%rip), %rax     # 0xaaa58
movq 0x20(%rax), %rax
movq %rax, -0x580(%rbp)
leaq -0x70(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x81f0
jmp 0x6a8fd
movq -0x580(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x23970
movq %rax, -0x588(%rbp)
jmp 0x6a916
leaq -0x70(%rbp), %rdi
callq 0x82e0
movq -0x588(%rbp), %rax
movq %rax, -0x50(%rbp)
leaq 0x40127(%rip), %rax     # 0xaaa58
movq 0x20(%rax), %rax
movq %rax, -0x590(%rbp)
leaq -0x98(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x81f0
jmp 0x6a94e
movq -0x590(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x239a0
movq %rax, -0x598(%rbp)
jmp 0x6a96a
leaq -0x98(%rbp), %rdi
callq 0x82e0
movq -0x598(%rbp), %rax
movq %rax, -0x78(%rbp)
leaq 0x400d0(%rip), %rax     # 0xaaa58
movq 0x20(%rax), %rax
movq %rax, -0x5a0(%rbp)
leaq -0xc0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x81f0
jmp 0x6a9a5
movq -0x5a0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x239d0
movq %rax, -0x5a8(%rbp)
jmp 0x6a9c1
leaq -0xc0(%rbp), %rdi
callq 0x82e0
movq -0x5a8(%rbp), %rax
movq %rax, -0xa0(%rbp)
leaq 0x40076(%rip), %rax     # 0xaaa58
movq 0x20(%rax), %rax
movq %rax, -0x5b0(%rbp)
leaq -0xe8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x81f0
jmp 0x6a9ff
movq -0x5b0(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x23a00
movq %rax, -0x5b8(%rbp)
jmp 0x6aa1b
leaq -0xe8(%rbp), %rdi
callq 0x82e0
movq -0x5b8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movl $0x0, -0xec(%rbp)
movl -0xec(%rbp), %eax
leaq 0x3fab0(%rip), %rcx     # 0xaa4fc
cmpl (%rcx), %eax
jge 0x6b9d7
movq -0x38(%rbp), %rdi
leaq -0xec(%rbp), %rsi
callq 0x2c580
movq %rax, -0x5c0(%rbp)
jmp 0x6aa6d
movq -0x578(%rbp), %rsi
movq -0x5c0(%rbp), %rdi
callq 0x2c6b0
movq %rax, -0x5c8(%rbp)
jmp 0x6aa89
movq -0x5c8(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x78(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x100(%rbp)
movq -0xa0(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x108(%rbp)
movq -0xc8(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x110(%rbp)
movq -0xf8(%rbp), %rdi
callq 0x4a510
movq %rax, -0x118(%rbp)
movq -0xf8(%rbp), %rdi
callq 0x33090
movq %rax, -0x120(%rbp)
leaq -0x118(%rbp), %rdi
leaq -0x120(%rbp), %rsi
callq 0x4a540
testb $0x1, %al
jne 0x6ab0f
jmp 0x6b9c1
leaq -0x100(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x138(%rbp), %rdi
callq 0x4c8d0
jmp 0x6ab2c
leaq -0x108(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x150(%rbp), %rdi
callq 0x4c8d0
jmp 0x6ab49
leaq -0x110(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x168(%rbp), %rdi
callq 0x4c8d0
jmp 0x6ab66
leaq -0x118(%rbp), %rdi
callq 0x5c0c0
movq (%rax), %rax
movq %rax, -0x170(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x3f3c0
movq %rax, -0x178(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x3f240
movq %rax, -0x180(%rbp)
leaq -0x178(%rbp), %rdi
leaq -0x180(%rbp), %rsi
callq 0x46260
testb $0x1, %al
jne 0x6abbe
jmp 0x6b08c
leaq -0x178(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x1a0(%rbp), %rdi
movl $0x4, %edx
movq $-0x1, %rcx
callq 0x8500
jmp 0x6abe7
leaq -0x178(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x1c0(%rbp), %rdi
movl $0x3, %ecx
callq 0x8500
jmp 0x6ac0d
leaq 0xd4e2(%rip), %rsi      # 0x780f6
leaq -0x1c0(%rbp), %rdi
callq 0x2d8a0
movb %al, -0x5c9(%rbp)
jmp 0x6ac28
movb -0x5c9(%rbp), %al
testb $0x1, %al
jne 0x6ac37
jmp 0x6add3
leaq 0xd4bc(%rip), %rsi      # 0x780fa
leaq -0x1c0(%rbp), %rdi
callq 0x2d8a0
movb %al, -0x5ca(%rbp)
jmp 0x6ac52
movb -0x5ca(%rbp), %al
testb $0x1, %al
jne 0x6ac61
jmp 0x6add3
movl $0x8, %edi
callq 0x8230
movq %rax, -0x5e0(%rbp)
movl $0x1, %edi
callq 0x84c0
movq %rax, -0x5d8(%rbp)
jmp 0x6ac85
movq -0x5d8(%rbp), %rdi
leaq 0xdf43(%rip), %rsi      # 0x78bd6
callq 0x129a0
jmp 0x6ac9a
movq -0x5e0(%rbp), %rdi
movq -0x5d8(%rbp), %rax
movq %rax, (%rdi)
leaq 0x3f016(%rip), %rsi     # 0xa9cc8
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x6c52b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6c519
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x82e0
jmp 0x6c519
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x82e0
jmp 0x6c519
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x82e0
jmp 0x6c519
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xe8(%rbp), %rdi
callq 0x82e0
jmp 0x6c519
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b9b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b9a4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b998
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b07b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b06f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6adc2
movq -0x5d8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x1, %esi
callq 0x84d0
movq -0x5e0(%rbp), %rdi
callq 0x8370
jmp 0x6b06f
movq -0x578(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x5c190
movq %rax, -0x5e8(%rbp)
jmp 0x6adf6
movq -0x578(%rbp), %rdi
movq -0x5e8(%rbp), %rax
movq %rax, -0x1c8(%rbp)
addq $0xb8, %rdi
callq 0x5c1c0
movq %rax, -0x1d0(%rbp)
leaq -0x1c8(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x5c160
testb $0x1, %al
jne 0x6ae3a
jmp 0x6aed5
movl $0x8, %edi
callq 0x8230
movq %rax, -0x5f8(%rbp)
movl $0x1, %edi
callq 0x84c0
movq %rax, -0x5f0(%rbp)
jmp 0x6ae5e
movq -0x5f0(%rbp), %rdi
leaq 0xd269(%rip), %rsi      # 0x780d5
callq 0x129a0
jmp 0x6ae73
movq -0x5f8(%rbp), %rdi
movq -0x5f0(%rbp), %rax
movq %rax, (%rdi)
leaq 0x3ee3d(%rip), %rsi     # 0xa9cc8
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x6c52b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6aec4
movq -0x5f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x1, %esi
callq 0x84d0
movq -0x5f8(%rbp), %rdi
callq 0x8370
jmp 0x6b06f
movq -0x578(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x5c1f0
movq %rax, -0x600(%rbp)
jmp 0x6aef8
movq -0x600(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x610(%rbp)
movq -0x170(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x608(%rbp)
leaq 0xdcd5(%rip), %rsi      # 0x78bf9
leaq -0x1f0(%rbp), %rdi
leaq -0x1a0(%rbp), %rdx
callq 0xc3f0
jmp 0x6af39
movq -0x608(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x31840
movq %rax, -0x618(%rbp)
jmp 0x6af55
movq -0x618(%rbp), %rax
movsd -0x610(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x1f0(%rbp), %rdi
callq 0x82e0
movq -0x578(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x5c1f0
movq %rax, -0x620(%rbp)
jmp 0x6af97
movq -0x620(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x630(%rbp)
movq -0x170(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x628(%rbp)
leaq 0xdc3e(%rip), %rsi      # 0x78c02
leaq -0x210(%rbp), %rdi
leaq -0x1a0(%rbp), %rdx
callq 0xc3f0
jmp 0x6afd9
movq -0x628(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x31840
movq %rax, -0x638(%rbp)
jmp 0x6aff5
movq -0x638(%rbp), %rax
movsd -0x630(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x210(%rbp), %rdi
callq 0x82e0
leaq -0x1c0(%rbp), %rdi
callq 0x82e0
leaq -0x1a0(%rbp), %rdi
callq 0x82e0
leaq -0x178(%rbp), %rdi
callq 0x462c0
jmp 0x6ab8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0x82e0
jmp 0x6b06f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x82e0
leaq -0x1c0(%rbp), %rdi
callq 0x82e0
leaq -0x1a0(%rbp), %rdi
callq 0x82e0
jmp 0x6b998
leaq -0x150(%rbp), %rdi
callq 0x3f3c0
movq %rax, -0x218(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x3f240
movq %rax, -0x220(%rbp)
leaq -0x218(%rbp), %rdi
leaq -0x220(%rbp), %rsi
callq 0x46260
testb $0x1, %al
jne 0x6b0ce
jmp 0x6b4e7
leaq -0x218(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x240(%rbp), %rdi
movl $0x4, %edx
movq $-0x1, %rcx
callq 0x8500
jmp 0x6b0f7
leaq -0x218(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x260(%rbp), %rdi
movl $0x3, %ecx
callq 0x8500
jmp 0x6b11d
leaq 0xcfd2(%rip), %rsi      # 0x780f6
leaq -0x260(%rbp), %rdi
callq 0x2d8a0
movb %al, -0x639(%rbp)
jmp 0x6b138
movb -0x639(%rbp), %al
testb $0x1, %al
jne 0x6b147
jmp 0x6b22e
leaq 0xcfac(%rip), %rsi      # 0x780fa
leaq -0x260(%rbp), %rdi
callq 0x2d8a0
movb %al, -0x63a(%rbp)
jmp 0x6b162
movb -0x63a(%rbp), %al
testb $0x1, %al
jne 0x6b171
jmp 0x6b22e
movl $0x8, %edi
callq 0x8230
movq %rax, -0x650(%rbp)
movl $0x1, %edi
callq 0x84c0
movq %rax, -0x648(%rbp)
jmp 0x6b195
movq -0x648(%rbp), %rdi
leaq 0xda33(%rip), %rsi      # 0x78bd6
callq 0x129a0
jmp 0x6b1aa
movq -0x650(%rbp), %rdi
movq -0x648(%rbp), %rax
movq %rax, (%rdi)
leaq 0x3eb06(%rip), %rsi     # 0xa9cc8
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x6c52b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b4d6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b4ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b21d
movq -0x648(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x1, %esi
callq 0x84d0
movq -0x650(%rbp), %rdi
callq 0x8370
jmp 0x6b4ca
movq -0x578(%rbp), %rdi
addq $0xe8, %rdi
leaq -0x240(%rbp), %rsi
callq 0x5c190
movq %rax, -0x658(%rbp)
jmp 0x6b251
movq -0x578(%rbp), %rdi
movq -0x658(%rbp), %rax
movq %rax, -0x268(%rbp)
addq $0xe8, %rdi
callq 0x5c1c0
movq %rax, -0x270(%rbp)
leaq -0x268(%rbp), %rdi
leaq -0x270(%rbp), %rsi
callq 0x5c160
testb $0x1, %al
jne 0x6b295
jmp 0x6b330
movl $0x8, %edi
callq 0x8230
movq %rax, -0x668(%rbp)
movl $0x1, %edi
callq 0x84c0
movq %rax, -0x660(%rbp)
jmp 0x6b2b9
movq -0x660(%rbp), %rdi
leaq 0xd949(%rip), %rsi      # 0x78c10
callq 0x129a0
jmp 0x6b2ce
movq -0x668(%rbp), %rdi
movq -0x660(%rbp), %rax
movq %rax, (%rdi)
leaq 0x3e9e2(%rip), %rsi     # 0xa9cc8
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x6c52b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b31f
movq -0x660(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x1, %esi
callq 0x84d0
movq -0x668(%rbp), %rdi
callq 0x8370
jmp 0x6b4ca
movq -0x578(%rbp), %rdi
addq $0xe8, %rdi
leaq -0x240(%rbp), %rsi
callq 0x5c1f0
movq %rax, -0x670(%rbp)
jmp 0x6b353
movq -0x670(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x680(%rbp)
movq -0x170(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x678(%rbp)
leaq 0xd8b8(%rip), %rsi      # 0x78c37
leaq -0x290(%rbp), %rdi
leaq -0x240(%rbp), %rdx
callq 0xc3f0
jmp 0x6b394
movq -0x678(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x31840
movq %rax, -0x688(%rbp)
jmp 0x6b3b0
movq -0x688(%rbp), %rax
movsd -0x680(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x290(%rbp), %rdi
callq 0x82e0
movq -0x578(%rbp), %rdi
addq $0xe8, %rdi
leaq -0x240(%rbp), %rsi
callq 0x5c1f0
movq %rax, -0x690(%rbp)
jmp 0x6b3f2
movq -0x690(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x6a0(%rbp)
movq -0x170(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x698(%rbp)
leaq 0xd828(%rip), %rsi      # 0x78c47
leaq -0x2b0(%rbp), %rdi
leaq -0x240(%rbp), %rdx
callq 0xc3f0
jmp 0x6b434
movq -0x698(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x31840
movq %rax, -0x6a8(%rbp)
jmp 0x6b450
movq -0x6a8(%rbp), %rax
movsd -0x6a0(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x2b0(%rbp), %rdi
callq 0x82e0
leaq -0x260(%rbp), %rdi
callq 0x82e0
leaq -0x240(%rbp), %rdi
callq 0x82e0
leaq -0x218(%rbp), %rdi
callq 0x462c0
jmp 0x6b09f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x290(%rbp), %rdi
callq 0x82e0
jmp 0x6b4ca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0x82e0
leaq -0x260(%rbp), %rdi
callq 0x82e0
leaq -0x240(%rbp), %rdi
callq 0x82e0
jmp 0x6b998
leaq -0x168(%rbp), %rdi
callq 0x3f3c0
movq %rax, -0x2b8(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x3f240
movq %rax, -0x2c0(%rbp)
leaq -0x2b8(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
callq 0x46260
testb $0x1, %al
jne 0x6b529
jmp 0x6b93f
leaq -0x2b8(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x2e0(%rbp), %rdi
movl $0x4, %edx
movq $-0x1, %rcx
callq 0x8500
jmp 0x6b552
leaq -0x2b8(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
xorl %eax, %eax
movl %eax, %edx
leaq -0x300(%rbp), %rdi
movl $0x3, %ecx
callq 0x8500
jmp 0x6b578
leaq 0xcb77(%rip), %rsi      # 0x780f6
leaq -0x300(%rbp), %rdi
callq 0x2d8a0
movb %al, -0x6a9(%rbp)
jmp 0x6b593
movb -0x6a9(%rbp), %al
testb $0x1, %al
jne 0x6b5a2
jmp 0x6b689
leaq 0xcb51(%rip), %rsi      # 0x780fa
leaq -0x300(%rbp), %rdi
callq 0x2d8a0
movb %al, -0x6aa(%rbp)
jmp 0x6b5bd
movb -0x6aa(%rbp), %al
testb $0x1, %al
jne 0x6b5cc
jmp 0x6b689
movl $0x8, %edi
callq 0x8230
movq %rax, -0x6c0(%rbp)
movl $0x1, %edi
callq 0x84c0
movq %rax, -0x6b8(%rbp)
jmp 0x6b5f0
movq -0x6b8(%rbp), %rdi
leaq 0xd5d8(%rip), %rsi      # 0x78bd6
callq 0x129a0
jmp 0x6b605
movq -0x6c0(%rbp), %rdi
movq -0x6b8(%rbp), %rax
movq %rax, (%rdi)
leaq 0x3e6ab(%rip), %rsi     # 0xa9cc8
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x6c52b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b931
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b925
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b678
movq -0x6b8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x1, %esi
callq 0x84d0
movq -0x6c0(%rbp), %rdi
callq 0x8370
jmp 0x6b925
movq -0x578(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq -0x2e0(%rbp), %rsi
callq 0x5c190
movq %rax, -0x6c8(%rbp)
jmp 0x6b6ac
movq -0x578(%rbp), %rdi
movq -0x6c8(%rbp), %rax
movq %rax, -0x308(%rbp)
addq $0x118, %rdi            # imm = 0x118
callq 0x5c1c0
movq %rax, -0x310(%rbp)
leaq -0x308(%rbp), %rdi
leaq -0x310(%rbp), %rsi
callq 0x5c160
testb $0x1, %al
jne 0x6b6f0
jmp 0x6b78b
movl $0x8, %edi
callq 0x8230
movq %rax, -0x6d8(%rbp)
movl $0x1, %edi
callq 0x84c0
movq %rax, -0x6d0(%rbp)
jmp 0x6b714
movq -0x6d0(%rbp), %rdi
leaq 0xd535(%rip), %rsi      # 0x78c57
callq 0x129a0
jmp 0x6b729
movq -0x6d8(%rbp), %rdi
movq -0x6d0(%rbp), %rax
movq %rax, (%rdi)
leaq 0x3e587(%rip), %rsi     # 0xa9cc8
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x6c52b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6b77a
movq -0x6d0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x1, %esi
callq 0x84d0
movq -0x6d8(%rbp), %rdi
callq 0x8370
jmp 0x6b925
movq -0x578(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq -0x2e0(%rbp), %rsi
callq 0x5c1f0
movq %rax, -0x6e0(%rbp)
jmp 0x6b7ae
movq -0x6e0(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x6f0(%rbp)
movq -0x170(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x6e8(%rbp)
leaq 0xd4a6(%rip), %rsi      # 0x78c80
leaq -0x330(%rbp), %rdi
leaq -0x2e0(%rbp), %rdx
callq 0xc3f0
jmp 0x6b7ef
movq -0x6e8(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x31840
movq %rax, -0x6f8(%rbp)
jmp 0x6b80b
movq -0x6f8(%rbp), %rax
movsd -0x6f0(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x330(%rbp), %rdi
callq 0x82e0
movq -0x578(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq -0x2e0(%rbp), %rsi
callq 0x5c1f0
movq %rax, -0x700(%rbp)
jmp 0x6b84d
movq -0x700(%rbp), %rax
movsd 0x8(%rax), %xmm0
movsd %xmm0, -0x710(%rbp)
movq -0x170(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x708(%rbp)
leaq 0xd416(%rip), %rsi      # 0x78c90
leaq -0x350(%rbp), %rdi
leaq -0x2e0(%rbp), %rdx
callq 0xc3f0
jmp 0x6b88f
movq -0x708(%rbp), %rdi
leaq -0x350(%rbp), %rsi
callq 0x31840
movq %rax, -0x718(%rbp)
jmp 0x6b8ab
movq -0x718(%rbp), %rax
movsd -0x710(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x350(%rbp), %rdi
callq 0x82e0
leaq -0x300(%rbp), %rdi
callq 0x82e0
leaq -0x2e0(%rbp), %rdi
callq 0x82e0
leaq -0x2b8(%rbp), %rdi
callq 0x462c0
jmp 0x6b4fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x330(%rbp), %rdi
callq 0x82e0
jmp 0x6b925
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x350(%rbp), %rdi
callq 0x82e0
leaq -0x300(%rbp), %rdi
callq 0x82e0
leaq -0x2e0(%rbp), %rdi
callq 0x82e0
jmp 0x6b998
leaq -0x100(%rbp), %rdi
callq 0x4bec0
leaq -0x108(%rbp), %rdi
callq 0x4bec0
leaq -0x110(%rbp), %rdi
callq 0x4bec0
leaq -0x168(%rbp), %rdi
callq 0x2bfd0
leaq -0x150(%rbp), %rdi
callq 0x2bfd0
leaq -0x138(%rbp), %rdi
callq 0x2bfd0
leaq -0x118(%rbp), %rdi
callq 0x4a5a0
jmp 0x6aae0
leaq -0x168(%rbp), %rdi
callq 0x2bfd0
leaq -0x150(%rbp), %rdi
callq 0x2bfd0
leaq -0x138(%rbp), %rdi
callq 0x2bfd0
jmp 0x6c519
jmp 0x6b9c3
movl -0xec(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xec(%rbp)
jmp 0x6aa3f
movq -0x578(%rbp), %rdi
addq $0x48, %rdi
callq 0x5c320
movq -0x578(%rbp), %rdi
movq %rax, -0x358(%rbp)
addq $0x60, %rdi
callq 0x5c320
movq %rax, -0x360(%rbp)
movq $0x0, -0x368(%rbp)
movq -0x368(%rbp), %rax
cmpq -0x358(%rbp), %rax
jae 0x6be94
movq -0x578(%rbp), %rdi
addq $0x48, %rdi
movq -0x368(%rbp), %rsi
callq 0x61ed0
movq (%rax), %rax
movq %rax, -0x370(%rbp)
movl $0x0, -0x374(%rbp)
movq -0x38(%rbp), %rdi
leaq -0x374(%rbp), %rsi
callq 0x2c580
movq %rax, -0x720(%rbp)
jmp 0x6ba68
movq -0x578(%rbp), %rsi
movq -0x720(%rbp), %rdi
callq 0x2c6b0
movq %rax, -0x728(%rbp)
jmp 0x6ba84
movq -0x728(%rbp), %rax
movq %rax, -0x380(%rbp)
movq -0x50(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x388(%rbp)
movq -0x380(%rbp), %rdi
callq 0x4a510
movq %rax, -0x390(%rbp)
movq -0x380(%rbp), %rdi
callq 0x33090
movq %rax, -0x398(%rbp)
leaq -0x390(%rbp), %rdi
leaq -0x398(%rbp), %rsi
callq 0x4a540
testb $0x1, %al
jne 0x6bae4
jmp 0x6be7b
leaq -0x388(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x3b0(%rbp), %rdi
callq 0x4c8d0
jmp 0x6bb01
leaq -0x390(%rbp), %rdi
callq 0x5c0c0
movq (%rax), %rax
movq %rax, -0x3b8(%rbp)
leaq -0x390(%rbp), %rdi
callq 0x5c0c0
movl 0x8(%rax), %eax
movl %eax, -0x3bc(%rbp)
cmpl $-0x1, -0x3bc(%rbp)
jne 0x6bb3b
testb $0x1, -0xd(%rbp)
je 0x6bb54
testb $0x1, -0xd(%rbp)
je 0x6be27
movl -0x3bc(%rbp), %eax
cmpl -0xc(%rbp), %eax
jne 0x6be27
leaq -0x3b0(%rbp), %rdi
callq 0x3f3c0
movq %rax, -0x3c8(%rbp)
leaq -0x3b0(%rbp), %rdi
callq 0x3f240
movq %rax, -0x3d0(%rbp)
leaq -0x3c8(%rbp), %rdi
leaq -0x3d0(%rbp), %rsi
callq 0x46260
testb $0x1, %al
jne 0x6bb96
jmp 0x6bd6e
movq -0x370(%rbp), %rax
movq %rax, -0x730(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x3f0(%rbp), %rdi
callq 0x81f0
jmp 0x6bbc1
movq -0x730(%rbp), %rdi
leaq -0x3f0(%rbp), %rsi
callq 0x5a1b0
movsd %xmm0, -0x738(%rbp)
jmp 0x6bbde
movq -0x3b8(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x740(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x462a0
movq %rax, %rdx
leaq 0xb797(%rip), %rsi      # 0x7739d
leaq -0x410(%rbp), %rdi
callq 0xc3f0
jmp 0x6bc14
movq -0x740(%rbp), %rdi
leaq -0x410(%rbp), %rsi
callq 0x31840
movq %rax, -0x748(%rbp)
jmp 0x6bc30
movq -0x748(%rbp), %rax
movsd -0x738(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x410(%rbp), %rdi
callq 0x82e0
leaq -0x3f0(%rbp), %rdi
callq 0x82e0
movq -0x370(%rbp), %rax
movq %rax, -0x750(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x430(%rbp), %rdi
callq 0x81f0
jmp 0x6bc86
movq -0x750(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x5a1b0
movsd %xmm0, -0x758(%rbp)
jmp 0x6bca3
movq -0x3b8(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x768(%rbp)
leaq -0x3c8(%rbp), %rdi
callq 0x462a0
movq -0x768(%rbp), %rdi
movq %rax, %rsi
callq 0xca50
movq %rax, -0x760(%rbp)
jmp 0x6bcd9
movq -0x760(%rbp), %rax
movsd -0x758(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x430(%rbp), %rdi
callq 0x82e0
leaq -0x3c8(%rbp), %rdi
callq 0x462c0
jmp 0x6bb67
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6be6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6bd40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x410(%rbp), %rdi
callq 0x82e0
leaq -0x3f0(%rbp), %rdi
callq 0x82e0
jmp 0x6be6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x82e0
jmp 0x6be6a
movb $0x1, -0x431(%rbp)
leaq 0x3ee14(%rip), %rdi     # 0xaab90
callq 0x19e20
movsd %xmm0, -0x770(%rbp)
jmp 0x6bd8b
movq -0x3b8(%rbp), %rdi
callq 0xc170
movsd %xmm0, -0x778(%rbp)
jmp 0x6bda1
movsd -0x778(%rbp), %xmm0
movsd -0x770(%rbp), %xmm1
xorl %eax, %eax
ucomisd %xmm1, %xmm0
adcb $-0x1, %al
andb $0x1, %al
movb %al, -0x431(%rbp)
testb $0x1, -0x431(%rbp)
jne 0x6be25
movq -0x370(%rbp), %rax
movq %rax, -0x780(%rbp)
cmpq $0x0, %rax
je 0x6bdfb
movq -0x780(%rbp), %rdi
callq 0x553c0
movq -0x780(%rbp), %rdi
movl $0x158, %esi            # imm = 0x158
callq 0x84d0
movq -0x578(%rbp), %rdi
addq $0x48, %rdi
movq -0x368(%rbp), %rsi
callq 0x61ed0
movq $0x0, (%rax)
movl $0x14, -0x438(%rbp)
jmp 0x6be3d
jmp 0x6be27
leaq -0x388(%rbp), %rdi
callq 0x4bec0
movl $0x0, -0x438(%rbp)
leaq -0x3b0(%rbp), %rdi
callq 0x2bfd0
movl -0x438(%rbp), %eax
testl %eax, %eax
je 0x6be57
jmp 0x6be55
jmp 0x6be7b
jmp 0x6be59
leaq -0x390(%rbp), %rdi
callq 0x4a5a0
jmp 0x6bab5
leaq -0x3b0(%rbp), %rdi
callq 0x2bfd0
jmp 0x6c519
jmp 0x6be7d
movq -0x368(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x368(%rbp)
jmp 0x6ba10
movq $0x0, -0x440(%rbp)
movq -0x440(%rbp), %rax
cmpq -0x360(%rbp), %rax
jae 0x6c323
movq -0x578(%rbp), %rdi
addq $0x60, %rdi
movq -0x440(%rbp), %rsi
callq 0x61ed0
movq (%rax), %rax
movq %rax, -0x448(%rbp)
movl $0x0, -0x44c(%rbp)
movq -0x38(%rbp), %rdi
leaq -0x44c(%rbp), %rsi
callq 0x2c580
movq %rax, -0x788(%rbp)
jmp 0x6bef7
movq -0x578(%rbp), %rsi
movq -0x788(%rbp), %rdi
callq 0x2c6b0
movq %rax, -0x790(%rbp)
jmp 0x6bf13
movq -0x790(%rbp), %rax
movq %rax, -0x458(%rbp)
movq -0x50(%rbp), %rdi
callq 0x4bdb0
movq %rax, -0x460(%rbp)
movq -0x458(%rbp), %rdi
callq 0x4a510
movq %rax, -0x468(%rbp)
movq -0x458(%rbp), %rdi
callq 0x33090
movq %rax, -0x470(%rbp)
leaq -0x468(%rbp), %rdi
leaq -0x470(%rbp), %rsi
callq 0x4a540
testb $0x1, %al
jne 0x6bf73
jmp 0x6c30a
leaq -0x460(%rbp), %rdi
callq 0x4bea0
movq %rax, %rsi
leaq -0x488(%rbp), %rdi
callq 0x4c8d0
jmp 0x6bf90
leaq -0x468(%rbp), %rdi
callq 0x5c0c0
movq (%rax), %rax
movq %rax, -0x490(%rbp)
leaq -0x468(%rbp), %rdi
callq 0x5c0c0
movl 0x8(%rax), %eax
movl %eax, -0x494(%rbp)
cmpl $-0x1, -0x494(%rbp)
jne 0x6bfca
testb $0x1, -0xd(%rbp)
je 0x6bfe3
testb $0x1, -0xd(%rbp)
je 0x6c2b6
movl -0x494(%rbp), %eax
cmpl -0xc(%rbp), %eax
jne 0x6c2b6
leaq -0x488(%rbp), %rdi
callq 0x3f3c0
movq %rax, -0x4a0(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x3f240
movq %rax, -0x4a8(%rbp)
leaq -0x4a0(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0x46260
testb $0x1, %al
jne 0x6c025
jmp 0x6c1fd
movq -0x448(%rbp), %rax
movq %rax, -0x798(%rbp)
leaq -0x4a0(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x4c8(%rbp), %rdi
callq 0x81f0
jmp 0x6c050
movq -0x798(%rbp), %rdi
leaq -0x4c8(%rbp), %rsi
callq 0x5a1b0
movsd %xmm0, -0x7a0(%rbp)
jmp 0x6c06d
movq -0x490(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x7a8(%rbp)
leaq -0x4a0(%rbp), %rdi
callq 0x462a0
movq %rax, %rdx
leaq 0xb308(%rip), %rsi      # 0x7739d
leaq -0x4e8(%rbp), %rdi
callq 0xc3f0
jmp 0x6c0a3
movq -0x7a8(%rbp), %rdi
leaq -0x4e8(%rbp), %rsi
callq 0x31840
movq %rax, -0x7b0(%rbp)
jmp 0x6c0bf
movq -0x7b0(%rbp), %rax
movsd -0x7a0(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x4e8(%rbp), %rdi
callq 0x82e0
leaq -0x4c8(%rbp), %rdi
callq 0x82e0
movq -0x448(%rbp), %rax
movq %rax, -0x7b8(%rbp)
leaq -0x4a0(%rbp), %rdi
callq 0x462a0
movq %rax, %rsi
leaq -0x508(%rbp), %rdi
callq 0x81f0
jmp 0x6c115
movq -0x7b8(%rbp), %rdi
leaq -0x508(%rbp), %rsi
callq 0x5a1b0
movsd %xmm0, -0x7c0(%rbp)
jmp 0x6c132
movq -0x490(%rbp), %rax
addq $0x68, %rax
movq %rax, -0x7d0(%rbp)
leaq -0x4a0(%rbp), %rdi
callq 0x462a0
movq -0x7d0(%rbp), %rdi
movq %rax, %rsi
callq 0xca50
movq %rax, -0x7c8(%rbp)
jmp 0x6c168
movq -0x7c8(%rbp), %rax
movsd -0x7c0(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x508(%rbp), %rdi
callq 0x82e0
leaq -0x4a0(%rbp), %rdi
callq 0x462c0
jmp 0x6bff6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6c2f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x6c1cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x4e8(%rbp), %rdi
callq 0x82e0
leaq -0x4c8(%rbp), %rdi
callq 0x82e0
jmp 0x6c2f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x508(%rbp), %rdi
callq 0x82e0
jmp 0x6c2f9
movb $0x1, -0x509(%rbp)
leaq 0x3e985(%rip), %rdi     # 0xaab90
callq 0x19e20
movsd %xmm0, -0x7d8(%rbp)
jmp 0x6c21a
movq -0x490(%rbp), %rdi
callq 0xc170
movsd %xmm0, -0x7e0(%rbp)
jmp 0x6c230
movsd -0x7e0(%rbp), %xmm0
movsd -0x7d8(%rbp), %xmm1
xorl %eax, %eax
ucomisd %xmm1, %xmm0
adcb $-0x1, %al
andb $0x1, %al
movb %al, -0x509(%rbp)
testb $0x1, -0x509(%rbp)
jne 0x6c2b4
movq -0x448(%rbp), %rax
movq %rax, -0x7e8(%rbp)
cmpq $0x0, %rax
je 0x6c28a
movq -0x7e8(%rbp), %rdi
callq 0x553c0
movq -0x7e8(%rbp), %rdi
movl $0x158, %esi            # imm = 0x158
callq 0x84d0
movq -0x578(%rbp), %rdi
addq $0x60, %rdi
movq -0x440(%rbp), %rsi
callq 0x61ed0
movq $0x0, (%rax)
movl $0x1d, -0x438(%rbp)
jmp 0x6c2cc
jmp 0x6c2b6
leaq -0x460(%rbp), %rdi
callq 0x4bec0
movl $0x0, -0x438(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x2bfd0
movl -0x438(%rbp), %eax
testl %eax, %eax
je 0x6c2e6
jmp 0x6c2e4
jmp 0x6c30a
jmp 0x6c2e8
leaq -0x468(%rbp), %rdi
callq 0x4a5a0
jmp 0x6bf44
leaq -0x488(%rbp), %rdi
callq 0x2bfd0
jmp 0x6c519
jmp 0x6c30c
movq -0x440(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x440(%rbp)
jmp 0x6be9f
movq $0x0, -0x518(%rbp)
movq -0x518(%rbp), %rax
cmpq -0x358(%rbp), %rax
jae 0x6c415
movq -0x578(%rbp), %rdi
addq $0x48, %rdi
movq -0x518(%rbp), %rsi
callq 0x61ed0
cmpq $0x0, (%rax)
jne 0x6c3fc
movq -0x578(%rbp), %rdi
addq $0x48, %rdi
movq %rdi, -0x7f8(%rbp)
callq 0x60a70
movq %rax, -0x530(%rbp)
movq -0x518(%rbp), %rsi
leaq -0x530(%rbp), %rdi
callq 0x6cd90
movq %rax, -0x528(%rbp)
leaq -0x520(%rbp), %rdi
leaq -0x528(%rbp), %rsi
callq 0x6cdd0
movq -0x7f8(%rbp), %rdi
movq -0x520(%rbp), %rsi
callq 0x6cd20
movq %rax, -0x7f0(%rbp)
jmp 0x6c3ca
movq -0x7f0(%rbp), %rax
movq %rax, -0x538(%rbp)
movq -0x358(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x358(%rbp)
movq -0x518(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x518(%rbp)
jmp 0x6c3fe
movq -0x518(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x518(%rbp)
jmp 0x6c32e
movq $0x0, -0x540(%rbp)
movq -0x540(%rbp), %rax
cmpq -0x360(%rbp), %rax
jae 0x6c507
movq -0x578(%rbp), %rdi
addq $0x60, %rdi
movq -0x540(%rbp), %rsi
callq 0x61ed0
cmpq $0x0, (%rax)
jne 0x6c4ee
movq -0x578(%rbp), %rdi
addq $0x60, %rdi
movq %rdi, -0x808(%rbp)
callq 0x60a70
movq %rax, -0x558(%rbp)
movq -0x540(%rbp), %rsi
leaq -0x558(%rbp), %rdi
callq 0x6cd90
movq %rax, -0x550(%rbp)
leaq -0x548(%rbp), %rdi
leaq -0x550(%rbp), %rsi
callq 0x6cdd0
movq -0x808(%rbp), %rdi
movq -0x548(%rbp), %rsi
callq 0x6cd20
movq %rax, -0x800(%rbp)
jmp 0x6c4bc
movq -0x800(%rbp), %rax
movq %rax, -0x560(%rbp)
movq -0x360(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x360(%rbp)
movq -0x540(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x540(%rbp)
jmp 0x6c4f0
movq -0x540(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x540(%rbp)
jmp 0x6c420
leaq -0x30(%rbp), %rdi
callq 0x82e0
addq $0x810, %rsp            # imm = 0x810
popq %rbp
retq
leaq -0x30(%rbp), %rdi
callq 0x82e0
movq -0x40(%rbp), %rdi
callq 0x8860
nopl (%rax,%rax)