// File: melop[P]admixem/config.cpp
// Function: SexualSelectionConfigurations::LoadFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
void SexualSelectionConfigurations::LoadFromFile(string szConfigFile)
{
	ifstream fsConfigFile;
	string sBuffer;
	char szPopName[MAXLINE];
	char szFormula[MAXLINE];
	
	#ifdef _OPENMP
		int nTotalCPUCore = omp_get_max_threads();//omp_get_num_threads();
	#else
		int nTotalCPUCore = 1;
	#endif
	
	printf("Start loading sexual selection file %s ...\n", szConfigFile.c_str());

	_szConfigFilename = szConfigFile; // save name of config file

	fsConfigFile.open(szConfigFile.c_str());
	//pConfigFile = fopen(szConfigFile.c_str(), "r");
	

	if (!fsConfigFile.is_open()) {
		printf("%s\n", "Cannot open sexual selection file ...");
		throw "Cannot open sexual selection file!";
	}

	getline(fsConfigFile,sBuffer);
	if (sBuffer == "") { // skip the header line
		throw "Cannot read sexual selection file!";
	}


	while(fsConfigFile.good()) 
	{
		getline(fsConfigFile,sBuffer);
		string sPopName, sFormula;
		int nGen = -1;
		sBuffer.erase(sBuffer.find_last_not_of(" \n\r\t")+1);//trim
		if (sBuffer == "") {
			continue;
		}
		sscanf(sBuffer.c_str(), "%[^\t\n]	%d	%[^\t\n]", szPopName, &nGen, szFormula);
		sPopName = szPopName; //make it string so that it saves lots of trouble of fuddling with c strings... i hate c strings.
		sFormula = szFormula;
		printf("Parsing sexual rule for Pop %s : %s for gen %d\n", sPopName.c_str(), sFormula.c_str(), nGen);
		if (sPopName.length() != 0 && sFormula.length() !=0) {
			
			

			if (this->_mpRules.find(sPopName) == this->_mpRules.end()) { // if this pop is not in the map yet
				list< string > vsFormulae;
				list< pair< Parser * , int > > vpFormulae;
				list< vector<string> > vvsSymbols;
				list< vector<string> > vvsSymbols2;
				list< vector<string> > vvsSymbols3;
				list< vector<string> > vvsSymbols4;
				list< vector<string> > vvsSymbols5;
				list< vector<string> > vvsSymbols6;
				list< vector<string> > vvsSymbols7;
				list< vector<string> > vvsSymbols8;
				list< vector<string> > vvsSymbols9;
				list< vector<string> > vvsSymbols10;
				list< vector<string> > vvsSymbols11;
				list< vector<string> > vvsSymbols12;
				list< vector<string> > vvsSymbols13;
				list< vector<string> > vvsSymbols14;

				this->_mpRules[sPopName] = vsFormulae;
				for(int nCPU=0;nCPU<nTotalCPUCore;nCPU++) {
					printf("%d CPU cores found, putting sexual selection parser on CPU %d\n",nTotalCPUCore, nCPU );
					if (this->_mpmpRuleFormulae.find(nCPU) == this->_mpmpRuleFormulae.end()) {
						 map<string , list< pair<Parser *, int> > > mpRuleFormulae;
						this->_mpmpRuleFormulae[nCPU] =  mpRuleFormulae;
					}
					this->_mpmpRuleFormulae[nCPU][sPopName] = vpFormulae;
				}
				this->_mpRuleFormulaSymbolStrings[sPopName] = vvsSymbols;
				this->_mpRuleFormulaSymbolStringsCourter[sPopName] = vvsSymbols2;
				this->_mpRuleFormulaSymbolStringsChooser[sPopName] = vvsSymbols3;
				this->_mpRuleFormulaSymbolStringsPopWide[sPopName] = vvsSymbols4;
				this->_mpRuleFormulaSymbolStringsPopWideChooser[sPopName] = vvsSymbols5;
				this->_mpRuleFormulaSymbolStringsPopWideCourter[sPopName] = vvsSymbols6;
				this->_mpRuleFormulaSymbolStringsDad[sPopName] = vvsSymbols7;
				this->_mpRuleFormulaSymbolStringsMom[sPopName] = vvsSymbols8;
				
				this->_mpRuleFormulaSymbolStringsCurrPopWidePrevGen[sPopName] = vvsSymbols9; // Symbols that are population-wide values from prev gen. of current pop
				this->_mpRuleFormulaSymbolStringsCurrPopWidePrevGenCourter[sPopName] = vvsSymbols10; // Symbols that are population-wide courter values from prev gen. of current pop
				this->_mpRuleFormulaSymbolStringsCurrPopWidePrevGenChooser[sPopName] = vvsSymbols11; // Symbols that are population-wide chooser values from prev gen. of current pop
				this->_mpRuleFormulaSymbolStringsPrevPopWidePrevGen[sPopName] = vvsSymbols12; // Symbols that are population-wide values from prev gen. of previous pop, if the individual did not migrate, previous pop = current pop
				this->_mpRuleFormulaSymbolStringsPrevPopWidePrevGenCourter[sPopName] = vvsSymbols13; // Symbols that are population-wide courter values from prev gen. of previous pop, if the individual did not migrate, previous pop = current pop
				this->_mpRuleFormulaSymbolStringsPrevPopWidePrevGenChooser[sPopName] = vvsSymbols14; // Symbols that are population-wide chooser values from prev gen. of previous pop, if the individual did not migrate, previous pop = current pop

			
			}

			
			
			Parser * pF = new Parser("");
			try {
				pF->Evaluate(sFormula);
			}
			catch(std::runtime_error e) {
				if ( string(e.what()) == "Divide by zero" ) {
					
					printf("Warning in formula: %s \nErrMsg:%s\nThis could simply be caused by uninitialized values", sFormula.c_str(), e.what());
					
					
				}
				else {
					printf("Error occured when trying to parse formula: %s \nErrMsg:%s\nPlease check formulae grammar!", sFormula.c_str(), e.what());
					exit(100);
				}
			}

			vector<string> vSymbolStrings; // all symbols
			vector<string> vSymbolStringsCourter; // only symbols referring to an individual courter's trait prefixed with Courter_
			vector<string> vSymbolStringsPopWideCourter; // symbols referring to population-level variables prefixed with PopCourter_
			vector<string> vSymbolStringsChooser; //symbols referring to individual chooser trait prefixed with My_
			vector<string> vSymbolStringsPopWideChooser;//symbols referring to population-level variables prefixed with PopChooser_
			vector<string> vSymbolStringsPopWide; // symbols referring to population-level variables prefixed with Pop_
			vector<string> vSymbolStringsDad; // symbols referring to population-level variables prefixed with Dad_
			vector<string> vSymbolStringsMom; // symbols referring to population-level variables prefixed with Mom_

			vector<string> vSymbolStringsCurrPopWidePrevGen; //PrevGenCurrPop_
			vector<string> vSymbolStringsCurrPopWidePrevGenCourter; //PrevGenCurrPopCourter_
			vector<string> vSymbolStringsCurrPopWidePrevGenChooser; //PrevGenCurrPopChooser_
			vector<string> vSymbolStringsPrevPopWidePrevGen; //PrevGenPrevPop_
			vector<string> vSymbolStringsPrevPopWidePrevGenCourter;  //PrevGenPrevPopCourter_
			vector<string> vSymbolStringsPrevPopWidePrevGenChooser; //PrevGenPrevPopChooser_

			//list all the symbols used in this formula
			for(map<string,double>::iterator it = pF->symbols_.begin(); it != pF->symbols_.end(); ++it) 
			{	
				//Parse chromosome number and position from the symbol
				//cout << (it->first) << "\n"; //list all keys

				
				if (strlen(it->first.c_str()) < 3) { // no need to add symbol
					continue;
				}

				vSymbolStrings.push_back(it->first); // save label too

				//Look at prefixes:
				string sSymbol = it->first;
				
				if (sSymbol.find("Courter_") == 0) {
					//throw(new Exception("Courter_ not yet implemented in natural selection."));
					sSymbol.replace(0, 8, "");
					vSymbolStringsCourter.push_back(sSymbol);
				}
				else if (sSymbol.find("PopCourter_") == 0) {
					//throw(new Exception("PopCourter_ not yet implemented in natural selection."));
					sSymbol.replace(0, 11, "");
					vSymbolStringsPopWideCourter.push_back(sSymbol );
				}
				else if (sSymbol.find("My_") == 0) {
					sSymbol.replace(0, 3, "");
					vSymbolStringsChooser.push_back(sSymbol);
				}
				else if (sSymbol.find("PopChooser_") == 0) {
					//throw(new Exception("PopChooser_ not yet implemented in natural selection."));
					sSymbol.replace(0, 11, "");
					vSymbolStringsPopWideChooser.push_back(sSymbol);
				}
				else if (sSymbol.find("Pop_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 4, "");
					vSymbolStringsPopWide.push_back(sSymbol);
				}
				else if (sSymbol.find("Dad_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 4, "");
					vSymbolStringsDad.push_back(sSymbol);
				}
				else if (sSymbol.find("Mom_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 4, "");
					vSymbolStringsMom.push_back(sSymbol);
				}
				else if (sSymbol.find("PrevGenCurrPop_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 15, "");
					vSymbolStringsCurrPopWidePrevGen.push_back(sSymbol);
				}
				else if (sSymbol.find("PrevGenCurrPopCourter_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 22, "");
					vSymbolStringsCurrPopWidePrevGenCourter.push_back(sSymbol);
				}
				else if (sSymbol.find("PrevGenCurrPopChooser_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 22, "");
					vSymbolStringsCurrPopWidePrevGenChooser.push_back(sSymbol);
				}
				else if (sSymbol.find("PrevGenPrevPop_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 15, "");
					vSymbolStringsPrevPopWidePrevGen.push_back(sSymbol);
				}
				else if (sSymbol.find("PrevGenPrevPopCourter_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 22, "");
					vSymbolStringsPrevPopWidePrevGenCourter.push_back(sSymbol);
				}
				else if (sSymbol.find("PrevGenPrevPopChooser_") == 0) {
					//throw(new Exception("Pop_ not yet implemented in natural selection."));
					sSymbol.replace(0, 22, "");
					vSymbolStringsPrevPopWidePrevGenChooser.push_back(sSymbol);
				}
				else { //default to be self
					vSymbolStringsChooser.push_back(sSymbol);
				}

			}
			
			delete pF;

			this->_mpRules[sPopName].push_back(sFormula); // save the formula string for further reference.
			for(int nCPU=0;nCPU<nTotalCPUCore;nCPU++) {
				if (nCPU == 0) {
					printf("Inserting %s to gen %d\n", sFormula.c_str(), nGen);
				}
				this->_mpmpRuleFormulae[nCPU][sPopName].push_back( pair< Parser *, int> ( new Parser(sFormula), nGen) ); //literally copy the pF object, so that there are nTotalCPUCore numbers of copies in the RAM! ;-)
			}
			this->_mpRuleFormulaSymbolStrings[sPopName].push_back(vSymbolStrings);
			this->_mpRuleFormulaSymbolStringsCourter[sPopName].push_back(vSymbolStringsCourter);
			this->_mpRuleFormulaSymbolStringsChooser[sPopName].push_back(vSymbolStringsChooser);
			this->_mpRuleFormulaSymbolStringsPopWide[sPopName].push_back(vSymbolStringsPopWide);
			this->_mpRuleFormulaSymbolStringsPopWideChooser[sPopName].push_back(vSymbolStringsPopWideChooser);
			this->_mpRuleFormulaSymbolStringsPopWideCourter[sPopName].push_back(vSymbolStringsPopWideCourter);
			this->_mpRuleFormulaSymbolStringsDad[sPopName].push_back(vSymbolStringsDad);
			this->_mpRuleFormulaSymbolStringsMom[sPopName].push_back(vSymbolStringsMom);

			this->_mpRuleFormulaSymbolStringsCurrPopWidePrevGen[sPopName].push_back(vSymbolStringsCurrPopWidePrevGen); //PrevGenCurrPop_
			this->_mpRuleFormulaSymbolStringsCurrPopWidePrevGenCourter[sPopName].push_back(vSymbolStringsCurrPopWidePrevGenCourter); //PrevGenCurrPopCourter_
			this->_mpRuleFormulaSymbolStringsCurrPopWidePrevGenChooser[sPopName].push_back(vSymbolStringsCurrPopWidePrevGenChooser); //PrevGenCurrPopChooser_
			this->_mpRuleFormulaSymbolStringsPrevPopWidePrevGen[sPopName].push_back(vSymbolStringsPrevPopWidePrevGen); //PrevGenPrevPop_
			this->_mpRuleFormulaSymbolStringsPrevPopWidePrevGenCourter[sPopName].push_back(vSymbolStringsPrevPopWidePrevGenCourter);  //PrevGenPrevPopCourter_
			this->_mpRuleFormulaSymbolStringsPrevPopWidePrevGenChooser[sPopName].push_back(vSymbolStringsPrevPopWidePrevGenChooser); //PrevGenPrevPopChooser_

			if (nGen > -1) {
				printf("Sexual selection special generation: %d\n", nGen);
				this->_vSpecialGens.insert(nGen);
			}
		}
	}

	printf("Sexual Selection rules for %d populations loaded. \n", this->_mpRules.size());

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x7a980, %rsp          # imm = 0x7A980
movq %rsi, -0x7a7b8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x7a7c0(%rbp)
leaq -0x218(%rbp), %rdi
callq 0x8580
leaq -0x238(%rbp), %rdi
callq 0x86b0
movq -0x7a7b8(%rbp), %rdi
movl $0x1, -0x7a364(%rbp)
callq 0x81d0
movq %rax, %rsi
leaq 0x53694(%rip), %rdi     # 0x773a1
xorl %eax, %eax
callq 0x8080
jmp 0x23d16
movq -0x7a7b8(%rbp), %rsi
movq -0x7a7c0(%rbp), %rdi
callq 0x8070
jmp 0x23d2b
movq -0x7a7b8(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
leaq -0x218(%rbp), %rdi
movl $0x8, %edx
callq 0x82f0
jmp 0x23d4d
leaq -0x218(%rbp), %rdi
callq 0x8780
movb %al, -0x7a7c1(%rbp)
jmp 0x23d61
movb -0x7a7c1(%rbp), %al
testb $0x1, %al
jne 0x23dc7
jmp 0x23d6d
leaq 0x535b2(%rip), %rdi     # 0x77326
leaq 0x53652(%rip), %rsi     # 0x773cd
xorl %eax, %eax
callq 0x8080
jmp 0x23d84
movl $0x8, %edi
callq 0x8230
movq %rax, %rdi
leaq 0x5365b(%rip), %rax     # 0x773f3
movq %rax, (%rdi)
movq 0x861a6(%rip), %rsi     # 0xa9f48
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x2579a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x2576e
leaq -0x218(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x80f0
jmp 0x23ddc
leaq 0x534db(%rip), %rsi     # 0x772be
leaq -0x238(%rbp), %rdi
callq 0xcbe0
movb %al, -0x7a7c2(%rbp)
jmp 0x23df7
movb -0x7a7c2(%rbp), %al
testb $0x1, %al
jne 0x23e03
jmp 0x23e2f
movl $0x8, %edi
callq 0x8230
movq %rax, %rdi
leaq 0x535ff(%rip), %rax     # 0x77416
movq %rax, (%rdi)
movq 0x86127(%rip), %rsi     # 0xa9f48
xorl %eax, %eax
movl %eax, %edx
callq 0x8820
jmp 0x2579a
jmp 0x23e31
movq -0x218(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x218(%rbp,%rax), %rdi
callq 0x8800
movb %al, -0x7a7c3(%rbp)
jmp 0x23e51
movb -0x7a7c3(%rbp), %al
testb $0x1, %al
jne 0x23e60
jmp 0x2572a
leaq -0x218(%rbp), %rdi
leaq -0x238(%rbp), %rsi
callq 0x80f0
jmp 0x23e75
leaq -0x7a398(%rbp), %rdi
callq 0x86b0
leaq -0x7a3b8(%rbp), %rdi
callq 0x86b0
movl $0xffffffff, -0x7a3bc(%rbp) # imm = 0xFFFFFFFF
leaq 0x5341c(%rip), %rsi     # 0x772ba
leaq -0x238(%rbp), %rdi
movq %rdi, -0x7a7d8(%rbp)
movq $-0x1, %rdx
movq %rdx, -0x7a7d0(%rbp)
callq 0x8890
movq -0x7a7d8(%rbp), %rdi
movq -0x7a7d0(%rbp), %rdx
movq %rax, %rsi
incq %rsi
callq 0x8100
jmp 0x23eda
leaq 0x533dd(%rip), %rsi     # 0x772be
leaq -0x238(%rbp), %rdi
callq 0xcbe0
movb %al, -0x7a7d9(%rbp)
jmp 0x23ef5
movb -0x7a7d9(%rbp), %al
testb $0x1, %al
jne 0x23f01
jmp 0x23f27
movl $0x2, -0x7a3c0(%rbp)
jmp 0x256e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x25710
leaq -0x238(%rbp), %rdi
callq 0x81d0
movq %rax, %rdi
leaq 0x53382(%rip), %rsi     # 0x772bf
xorl %eax, %eax
leaq -0x3d2d0(%rbp), %rdx
movq %rdx, -0x7a7e8(%rbp)
leaq -0x7a3bc(%rbp), %rcx
leaq -0x7a360(%rbp), %r8
callq 0x8480
movq -0x7a7e8(%rbp), %rsi
leaq -0x7a398(%rbp), %rdi
callq 0x8690
jmp 0x23f75
leaq -0x7a3b8(%rbp), %rdi
leaq -0x7a360(%rbp), %rsi
callq 0x8690
jmp 0x23f8a
leaq -0x7a398(%rbp), %rdi
callq 0x81d0
movq %rax, -0x7a7f0(%rbp)
leaq -0x7a3b8(%rbp), %rdi
callq 0x81d0
movq -0x7a7f0(%rbp), %rsi
movq %rax, %rdx
movl -0x7a3bc(%rbp), %ecx
leaq 0x53479(%rip), %rdi     # 0x77439
xorl %eax, %eax
callq 0x8080
jmp 0x23fc9
leaq -0x7a398(%rbp), %rdi
callq 0x8710
cmpq $0x0, %rax
je 0x256d8
leaq -0x7a3b8(%rbp), %rdi
callq 0x8710
cmpq $0x0, %rax
je 0x256d8
movq -0x7a7c0(%rbp), %rdi
addq $0x28, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c2d0
movq %rax, -0x7a7f8(%rbp)
jmp 0x24015
movq -0x7a7c0(%rbp), %rdi
movq -0x7a7f8(%rbp), %rax
movq %rax, -0x7a3c8(%rbp)
addq $0x28, %rdi
callq 0x2c300
movq %rax, -0x7a3d0(%rbp)
leaq -0x7a3c8(%rbp), %rdi
leaq -0x7a3d0(%rbp), %rsi
callq 0x2c2a0
testb $0x1, %al
jne 0x24056
jmp 0x2476e
leaq -0x7a3e8(%rbp), %rdi
callq 0x2c330
leaq -0x7a400(%rbp), %rdi
callq 0x2c350
leaq -0x7a418(%rbp), %rdi
callq 0x2c370
leaq -0x7a430(%rbp), %rdi
callq 0x2c370
leaq -0x7a448(%rbp), %rdi
callq 0x2c370
leaq -0x7a460(%rbp), %rdi
callq 0x2c370
leaq -0x7a478(%rbp), %rdi
callq 0x2c370
leaq -0x7a490(%rbp), %rdi
callq 0x2c370
leaq -0x7a4a8(%rbp), %rdi
callq 0x2c370
leaq -0x7a4c0(%rbp), %rdi
callq 0x2c370
leaq -0x7a4d8(%rbp), %rdi
callq 0x2c370
leaq -0x7a4f0(%rbp), %rdi
callq 0x2c370
leaq -0x7a508(%rbp), %rdi
callq 0x2c370
leaq -0x7a520(%rbp), %rdi
callq 0x2c370
leaq -0x7a538(%rbp), %rdi
callq 0x2c370
leaq -0x7a550(%rbp), %rdi
callq 0x2c370
movq -0x7a7c0(%rbp), %rdi
addq $0x28, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c390
movq %rax, -0x7a800(%rbp)
jmp 0x24136
movq -0x7a800(%rbp), %rdi
leaq -0x7a3e8(%rbp), %rsi
callq 0x2c470
jmp 0x2414b
movl $0x0, -0x7a554(%rbp)
movl -0x7a554(%rbp), %eax
cmpl -0x7a364(%rbp), %eax
jge 0x242d4
movl -0x7a364(%rbp), %esi
movl -0x7a554(%rbp), %edx
leaq 0x532ef(%rip), %rdi     # 0x77469
xorl %eax, %eax
callq 0x8080
jmp 0x24183
movq -0x7a7c0(%rbp), %rdi
addq $0x58, %rdi
leaq -0x7a554(%rbp), %rsi
callq 0x2c500
movq %rax, -0x7a808(%rbp)
jmp 0x241a3
movq -0x7a7c0(%rbp), %rdi
movq -0x7a808(%rbp), %rax
movq %rax, -0x7a560(%rbp)
addq $0x58, %rdi
callq 0x2c530
movq %rax, -0x7a568(%rbp)
leaq -0x7a560(%rbp), %rdi
leaq -0x7a568(%rbp), %rsi
callq 0x2c4d0
testb $0x1, %al
jne 0x241e4
jmp 0x2426d
leaq -0x7a598(%rbp), %rdi
callq 0x2c560
movq -0x7a7c0(%rbp), %rdi
addq $0x58, %rdi
leaq -0x7a554(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a810(%rbp)
jmp 0x24210
movq -0x7a810(%rbp), %rdi
leaq -0x7a598(%rbp), %rsi
callq 0x2c660
jmp 0x24225
leaq -0x7a598(%rbp), %rdi
callq 0x2c690
jmp 0x2426d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x246a9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a598(%rbp), %rdi
callq 0x2c690
jmp 0x246a9
movq -0x7a7c0(%rbp), %rdi
addq $0x58, %rdi
leaq -0x7a554(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a818(%rbp)
jmp 0x2428d
movq -0x7a818(%rbp), %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c6b0
movq %rax, -0x7a820(%rbp)
jmp 0x242a9
movq -0x7a820(%rbp), %rdi
leaq -0x7a400(%rbp), %rsi
callq 0x2c790
jmp 0x242be
jmp 0x242c0
movl -0x7a554(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7a554(%rbp)
jmp 0x24155
movq -0x7a7c0(%rbp), %rdi
addq $0x88, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a828(%rbp)
jmp 0x242f7
movq -0x7a828(%rbp), %rdi
leaq -0x7a418(%rbp), %rsi
callq 0x2c8d0
jmp 0x2430c
movq -0x7a7c0(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a830(%rbp)
jmp 0x2432f
movq -0x7a830(%rbp), %rdi
leaq -0x7a430(%rbp), %rsi
callq 0x2c8d0
jmp 0x24344
movq -0x7a7c0(%rbp), %rdi
addq $0xe8, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a838(%rbp)
jmp 0x24367
movq -0x7a838(%rbp), %rdi
leaq -0x7a448(%rbp), %rsi
callq 0x2c8d0
jmp 0x2437c
movq -0x7a7c0(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a840(%rbp)
jmp 0x2439f
movq -0x7a840(%rbp), %rdi
leaq -0x7a460(%rbp), %rsi
callq 0x2c8d0
jmp 0x243b4
movq -0x7a7c0(%rbp), %rdi
addq $0x178, %rdi            # imm = 0x178
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a848(%rbp)
jmp 0x243d7
movq -0x7a848(%rbp), %rdi
leaq -0x7a478(%rbp), %rsi
callq 0x2c8d0
jmp 0x243ec
movq -0x7a7c0(%rbp), %rdi
addq $0x148, %rdi            # imm = 0x148
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a850(%rbp)
jmp 0x2440f
movq -0x7a850(%rbp), %rdi
leaq -0x7a490(%rbp), %rsi
callq 0x2c8d0
jmp 0x24424
movq -0x7a7c0(%rbp), %rdi
addq $0x1a8, %rdi            # imm = 0x1A8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a858(%rbp)
jmp 0x24447
movq -0x7a858(%rbp), %rdi
leaq -0x7a4a8(%rbp), %rsi
callq 0x2c8d0
jmp 0x2445c
movq -0x7a7c0(%rbp), %rdi
addq $0x1d8, %rdi            # imm = 0x1D8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a860(%rbp)
jmp 0x2447f
movq -0x7a860(%rbp), %rdi
leaq -0x7a4c0(%rbp), %rsi
callq 0x2c8d0
jmp 0x24494
movq -0x7a7c0(%rbp), %rdi
addq $0x208, %rdi            # imm = 0x208
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a868(%rbp)
jmp 0x244b7
movq -0x7a868(%rbp), %rdi
leaq -0x7a4d8(%rbp), %rsi
callq 0x2c8d0
jmp 0x244cc
movq -0x7a7c0(%rbp), %rdi
addq $0x238, %rdi            # imm = 0x238
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a870(%rbp)
jmp 0x244ef
movq -0x7a870(%rbp), %rdi
leaq -0x7a4f0(%rbp), %rsi
callq 0x2c8d0
jmp 0x24504
movq -0x7a7c0(%rbp), %rdi
addq $0x268, %rdi            # imm = 0x268
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a878(%rbp)
jmp 0x24527
movq -0x7a878(%rbp), %rdi
leaq -0x7a508(%rbp), %rsi
callq 0x2c8d0
jmp 0x2453c
movq -0x7a7c0(%rbp), %rdi
addq $0x298, %rdi            # imm = 0x298
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a880(%rbp)
jmp 0x2455f
movq -0x7a880(%rbp), %rdi
leaq -0x7a520(%rbp), %rsi
callq 0x2c8d0
jmp 0x24574
movq -0x7a7c0(%rbp), %rdi
addq $0x2c8, %rdi            # imm = 0x2C8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a888(%rbp)
jmp 0x24597
movq -0x7a888(%rbp), %rdi
leaq -0x7a538(%rbp), %rsi
callq 0x2c8d0
jmp 0x245ac
movq -0x7a7c0(%rbp), %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a890(%rbp)
jmp 0x245cf
movq -0x7a890(%rbp), %rdi
leaq -0x7a550(%rbp), %rsi
callq 0x2c8d0
jmp 0x245e4
leaq -0x7a550(%rbp), %rdi
callq 0x2c930
leaq -0x7a538(%rbp), %rdi
callq 0x2c930
leaq -0x7a520(%rbp), %rdi
callq 0x2c930
leaq -0x7a508(%rbp), %rdi
callq 0x2c930
leaq -0x7a4f0(%rbp), %rdi
callq 0x2c930
leaq -0x7a4d8(%rbp), %rdi
callq 0x2c930
leaq -0x7a4c0(%rbp), %rdi
callq 0x2c930
leaq -0x7a4a8(%rbp), %rdi
callq 0x2c930
leaq -0x7a490(%rbp), %rdi
callq 0x2c930
leaq -0x7a478(%rbp), %rdi
callq 0x2c930
leaq -0x7a460(%rbp), %rdi
callq 0x2c930
leaq -0x7a448(%rbp), %rdi
callq 0x2c930
leaq -0x7a430(%rbp), %rdi
callq 0x2c930
leaq -0x7a418(%rbp), %rdi
callq 0x2c930
leaq -0x7a400(%rbp), %rdi
callq 0x2c950
leaq -0x7a3e8(%rbp), %rdi
callq 0x2c970
jmp 0x2476e
leaq -0x7a550(%rbp), %rdi
callq 0x2c930
leaq -0x7a538(%rbp), %rdi
callq 0x2c930
leaq -0x7a520(%rbp), %rdi
callq 0x2c930
leaq -0x7a508(%rbp), %rdi
callq 0x2c930
leaq -0x7a4f0(%rbp), %rdi
callq 0x2c930
leaq -0x7a4d8(%rbp), %rdi
callq 0x2c930
leaq -0x7a4c0(%rbp), %rdi
callq 0x2c930
leaq -0x7a4a8(%rbp), %rdi
callq 0x2c930
leaq -0x7a490(%rbp), %rdi
callq 0x2c930
leaq -0x7a478(%rbp), %rdi
callq 0x2c930
leaq -0x7a460(%rbp), %rdi
callq 0x2c930
leaq -0x7a448(%rbp), %rdi
callq 0x2c930
leaq -0x7a430(%rbp), %rdi
callq 0x2c930
leaq -0x7a418(%rbp), %rdi
callq 0x2c930
leaq -0x7a400(%rbp), %rdi
callq 0x2c950
leaq -0x7a3e8(%rbp), %rdi
callq 0x2c970
jmp 0x25710
movl $0x98, %edi
callq 0x84c0
movq %rax, -0x7a898(%rbp)
jmp 0x24781
movb $0x1, -0x7a5c2(%rbp)
leaq -0x7a5c1(%rbp), %rdi
movq %rdi, -0x7a8a0(%rbp)
callq 0x8870
movq -0x7a8a0(%rbp), %rdx
leaq 0x52b15(%rip), %rsi     # 0x772be
leaq -0x7a5c0(%rbp), %rdi
callq 0xcb30
jmp 0x247b7
movq -0x7a898(%rbp), %rdi
leaq -0x7a5c0(%rbp), %rsi
callq 0x2b2c0
jmp 0x247cc
movb $0x0, -0x7a5c2(%rbp)
leaq -0x7a5c0(%rbp), %rdi
callq 0x82e0
leaq -0x7a5c1(%rbp), %rdi
callq 0x8540
movq -0x7a898(%rbp), %rax
movq %rax, -0x7a5a0(%rbp)
movq -0x7a5a0(%rbp), %rdi
leaq -0x7a3b8(%rbp), %rsi
callq 0xc2c0
jmp 0x2480e
jmp 0x24a40
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x24845
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a5c0(%rbp), %rdi
callq 0x82e0
leaq -0x7a5c1(%rbp), %rdi
callq 0x8540
testb $0x1, -0x7a5c2(%rbp)
jne 0x2485c
jmp 0x2486d
movq -0x7a898(%rbp), %rdi
movl $0x98, %esi
callq 0x84d0
jmp 0x25710
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
movl -0x7a374(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x25710
movq -0x7a370(%rbp), %rdi
movq %rdi, -0x7a8c0(%rbp)
callq 0x8620
movq %rax, %rsi
leaq -0x7a5d8(%rbp), %rdi
movq %rdi, -0x7a8b8(%rbp)
callq 0x81e0
movq -0x7a8c0(%rbp), %rdi
callq 0x81c0
movq -0x7a8b8(%rbp), %rdi
callq 0x86a0
movq %rax, -0x7a8b0(%rbp)
leaq -0x7a5f9(%rbp), %rdi
movq %rdi, -0x7a8a8(%rbp)
callq 0x8870
movq -0x7a8b0(%rbp), %rsi
movq -0x7a8a8(%rbp), %rdx
leaq -0x7a5f8(%rbp), %rdi
callq 0xcb30
jmp 0x2490e
leaq 0x51a9d(%rip), %rsi     # 0x763b2
leaq -0x7a5f8(%rbp), %rdi
callq 0xcbe0
movb %al, -0x7a8c1(%rbp)
jmp 0x24929
leaq -0x7a5f8(%rbp), %rdi
callq 0x82e0
leaq -0x7a5f9(%rbp), %rdi
callq 0x8540
movb -0x7a8c1(%rbp), %al
testb $0x1, %al
jne 0x24950
jmp 0x249e8
leaq -0x7a3b8(%rbp), %rdi
callq 0x81d0
movq %rax, -0x7a8d0(%rbp)
leaq -0x7a5d8(%rbp), %rdi
callq 0x86a0
movq -0x7a8d0(%rbp), %rsi
movq %rax, %rdx
leaq 0x527b7(%rip), %rdi     # 0x77137
xorl %eax, %eax
callq 0x8080
jmp 0x24989
jmp 0x24a2b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x249c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a5f8(%rbp), %rdi
callq 0x82e0
leaq -0x7a5f9(%rbp), %rdi
callq 0x8540
jmp 0x24b59
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x24b59
leaq -0x7a3b8(%rbp), %rdi
callq 0x81d0
movq %rax, -0x7a8d8(%rbp)
leaq -0x7a5d8(%rbp), %rdi
callq 0x86a0
movq -0x7a8d8(%rbp), %rsi
movq %rax, %rdx
leaq 0x52775(%rip), %rdi     # 0x7718d
xorl %eax, %eax
callq 0x8080
jmp 0x24a21
movl $0x64, %edi
callq 0x85f0
leaq -0x7a5d8(%rbp), %rdi
callq 0x8948
callq 0x87d0
jmp 0x24a3e
jmp 0x24a40
leaq -0x7a618(%rbp), %rdi
callq 0x2b520
leaq -0x7a630(%rbp), %rdi
callq 0x2b520
leaq -0x7a648(%rbp), %rdi
callq 0x2b520
leaq -0x7a660(%rbp), %rdi
callq 0x2b520
leaq -0x7a678(%rbp), %rdi
callq 0x2b520
leaq -0x7a690(%rbp), %rdi
callq 0x2b520
leaq -0x7a6a8(%rbp), %rdi
callq 0x2b520
leaq -0x7a6c0(%rbp), %rdi
callq 0x2b520
leaq -0x7a6d8(%rbp), %rdi
callq 0x2b520
leaq -0x7a6f0(%rbp), %rdi
callq 0x2b520
leaq -0x7a708(%rbp), %rdi
callq 0x2b520
leaq -0x7a720(%rbp), %rdi
callq 0x2b520
leaq -0x7a738(%rbp), %rdi
callq 0x2b520
leaq -0x7a750(%rbp), %rdi
callq 0x2b520
movq -0x7a5a0(%rbp), %rdi
addq $0x68, %rdi
callq 0x2b540
movq %rax, -0x7a758(%rbp)
movq -0x7a5a0(%rbp), %rdi
addq $0x68, %rdi
callq 0x107a0
movq %rax, -0x7a760(%rbp)
leaq -0x7a758(%rbp), %rdi
leaq -0x7a760(%rbp), %rsi
callq 0x2b570
testb $0x1, %al
jne 0x24b32
jmp 0x2507c
leaq -0x7a758(%rbp), %rdi
callq 0x2b5a0
movq %rax, %rdi
callq 0x81d0
movq %rax, %rdi
callq 0x8200
cmpq $0x3, %rax
jae 0x24b71
jmp 0x2506b
leaq -0x7a5d8(%rbp), %rdi
callq 0x8948
callq 0x87d0
jmp 0x24b6c
jmp 0x25710
leaq -0x7a758(%rbp), %rdi
callq 0x2b5a0
movq %rax, %rsi
leaq -0x7a618(%rbp), %rdi
callq 0x2b5c0
jmp 0x24b8e
leaq -0x7a758(%rbp), %rdi
callq 0x2b5a0
movq %rax, %rsi
leaq -0x7a780(%rbp), %rdi
callq 0x81f0
jmp 0x24bab
leaq -0x7a780(%rbp), %rdi
leaq 0x52917(%rip), %rsi     # 0x774d0
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24c3a
leaq 0x526ef(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0x8, %edx
callq 0x82c0
jmp 0x24be6
leaq -0x7a630(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24bfb
jmp 0x2505f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
jmp 0x2562e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
leaq -0x7a780(%rbp), %rdi
callq 0x82e0
jmp 0x2562e
leaq -0x7a780(%rbp), %rdi
leaq 0x52885(%rip), %rsi     # 0x774cd
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24c8f
leaq 0x52660(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0xb, %edx
callq 0x82c0
jmp 0x24c75
leaq -0x7a648(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24c8a
jmp 0x2505d
leaq -0x7a780(%rbp), %rdi
leaq 0x52700(%rip), %rsi     # 0x7739d
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24ce4
leaq 0x5260b(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0x3, %edx
callq 0x82c0
jmp 0x24cca
leaq -0x7a660(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24cdf
jmp 0x2505b
leaq -0x7a780(%rbp), %rdi
leaq 0x527f2(%rip), %rsi     # 0x774e4
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24d39
leaq 0x525b6(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0xb, %edx
callq 0x82c0
jmp 0x24d1f
leaq -0x7a678(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24d34
jmp 0x25059
leaq -0x7a780(%rbp), %rdi
leaq 0x52776(%rip), %rsi     # 0x774bd
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24d8e
leaq 0x52561(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0x4, %edx
callq 0x82c0
jmp 0x24d74
leaq -0x7a690(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24d89
jmp 0x25057
leaq -0x7a780(%rbp), %rdi
leaq 0x5270c(%rip), %rsi     # 0x774a8
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24de3
leaq 0x5250c(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0x4, %edx
callq 0x82c0
jmp 0x24dc9
leaq -0x7a6a8(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24dde
jmp 0x25055
leaq -0x7a780(%rbp), %rdi
leaq 0x526bc(%rip), %rsi     # 0x774ad
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24e38
leaq 0x524b7(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0x4, %edx
callq 0x82c0
jmp 0x24e1e
leaq -0x7a6c0(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24e33
jmp 0x25053
leaq -0x7a780(%rbp), %rdi
leaq 0x5266c(%rip), %rsi     # 0x774b2
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24e8d
leaq 0x52462(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0xf, %edx
callq 0x82c0
jmp 0x24e73
leaq -0x7a6d8(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24e88
jmp 0x25051
leaq -0x7a780(%rbp), %rdi
leaq 0x52627(%rip), %rsi     # 0x774c2
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24ee2
leaq 0x5240d(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0x16, %edx
callq 0x82c0
jmp 0x24ec8
leaq -0x7a6f0(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24edd
jmp 0x2504f
leaq -0x7a780(%rbp), %rdi
leaq 0x525e9(%rip), %rsi     # 0x774d9
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24f37
leaq 0x523b8(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0x16, %edx
callq 0x82c0
jmp 0x24f1d
leaq -0x7a708(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24f32
jmp 0x2504d
leaq -0x7a780(%rbp), %rdi
leaq 0x525ab(%rip), %rsi     # 0x774f0
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24f8c
leaq 0x52363(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0xf, %edx
callq 0x82c0
jmp 0x24f72
leaq -0x7a720(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24f87
jmp 0x2504b
leaq -0x7a780(%rbp), %rdi
leaq 0x52566(%rip), %rsi     # 0x77500
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x24fde
leaq 0x5230e(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0x16, %edx
callq 0x82c0
jmp 0x24fc7
leaq -0x7a738(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x24fdc
jmp 0x25049
leaq -0x7a780(%rbp), %rdi
leaq 0x5252b(%rip), %rsi     # 0x77517
xorl %eax, %eax
movl %eax, %edx
callq 0x8910
cmpq $0x0, %rax
jne 0x25030
leaq 0x522bc(%rip), %rcx     # 0x772be
xorl %eax, %eax
movl %eax, %esi
leaq -0x7a780(%rbp), %rdi
movl $0x16, %edx
callq 0x82c0
jmp 0x25019
leaq -0x7a750(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x2502e
jmp 0x25047
leaq -0x7a660(%rbp), %rdi
leaq -0x7a780(%rbp), %rsi
callq 0x2b5c0
jmp 0x25045
jmp 0x25047
jmp 0x25049
jmp 0x2504b
jmp 0x2504d
jmp 0x2504f
jmp 0x25051
jmp 0x25053
jmp 0x25055
jmp 0x25057
jmp 0x25059
jmp 0x2505b
jmp 0x2505d
jmp 0x2505f
leaq -0x7a780(%rbp), %rdi
callq 0x82e0
leaq -0x7a758(%rbp), %rdi
callq 0x11700
jmp 0x24aff
movq -0x7a5a0(%rbp), %rax
movq %rax, -0x7a8e0(%rbp)
cmpq $0x0, %rax
je 0x250ad
movq -0x7a8e0(%rbp), %rdi
callq 0x2c990
movq -0x7a8e0(%rbp), %rdi
movl $0x98, %esi
callq 0x84d0
movq -0x7a7c0(%rbp), %rdi
addq $0x28, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c390
movq %rax, -0x7a8e8(%rbp)
jmp 0x250cd
movq -0x7a8e8(%rbp), %rdi
leaq -0x7a3b8(%rbp), %rsi
callq 0x2c9d0
jmp 0x250e2
movl $0x0, -0x7a784(%rbp)
movl -0x7a784(%rbp), %eax
cmpl -0x7a364(%rbp), %eax
jge 0x2520f
cmpl $0x0, -0x7a784(%rbp)
jne 0x2512e
leaq -0x7a3b8(%rbp), %rdi
callq 0x81d0
movq %rax, %rsi
movl -0x7a3bc(%rbp), %edx
leaq 0x5240b(%rip), %rdi     # 0x7752e
xorl %eax, %eax
callq 0x8080
jmp 0x2512c
jmp 0x2512e
movq -0x7a7c0(%rbp), %rdi
addq $0x58, %rdi
leaq -0x7a784(%rbp), %rsi
callq 0x2c580
movq %rax, -0x7a8f0(%rbp)
jmp 0x2514e
movq -0x7a8f0(%rbp), %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c6b0
movq %rax, -0x7a8f8(%rbp)
jmp 0x2516a
movl $0x98, %edi
callq 0x84c0
movq %rax, -0x7a900(%rbp)
jmp 0x2517d
movq -0x7a900(%rbp), %rdi
leaq -0x7a3b8(%rbp), %rsi
callq 0x2b2c0
jmp 0x25192
movq -0x7a900(%rbp), %rax
movq %rax, -0x7a7a0(%rbp)
leaq -0x7a798(%rbp), %rdi
leaq -0x7a7a0(%rbp), %rsi
leaq -0x7a3bc(%rbp), %rdx
callq 0x2ca90
jmp 0x251bc
movq -0x7a8f8(%rbp), %rdi
leaq -0x7a798(%rbp), %rsi
callq 0x2ca50
jmp 0x251d1
jmp 0x251d3
movl -0x7a784(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7a784(%rbp)
jmp 0x250ec
movq -0x7a900(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x7a370(%rbp)
movl %eax, -0x7a374(%rbp)
movl $0x98, %esi
callq 0x84d0
jmp 0x2562e
movq -0x7a7c0(%rbp), %rdi
addq $0x88, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a908(%rbp)
jmp 0x25232
movq -0x7a908(%rbp), %rdi
leaq -0x7a618(%rbp), %rsi
callq 0x2cac0
jmp 0x25247
movq -0x7a7c0(%rbp), %rdi
addq $0xb8, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a910(%rbp)
jmp 0x2526a
movq -0x7a910(%rbp), %rdi
leaq -0x7a630(%rbp), %rsi
callq 0x2cac0
jmp 0x2527f
movq -0x7a7c0(%rbp), %rdi
addq $0xe8, %rdi
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a918(%rbp)
jmp 0x252a2
movq -0x7a918(%rbp), %rdi
leaq -0x7a660(%rbp), %rsi
callq 0x2cac0
jmp 0x252b7
movq -0x7a7c0(%rbp), %rdi
addq $0x118, %rdi            # imm = 0x118
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a920(%rbp)
jmp 0x252da
movq -0x7a920(%rbp), %rdi
leaq -0x7a690(%rbp), %rsi
callq 0x2cac0
jmp 0x252ef
movq -0x7a7c0(%rbp), %rdi
addq $0x178, %rdi            # imm = 0x178
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a928(%rbp)
jmp 0x25312
movq -0x7a928(%rbp), %rdi
leaq -0x7a678(%rbp), %rsi
callq 0x2cac0
jmp 0x25327
movq -0x7a7c0(%rbp), %rdi
addq $0x148, %rdi            # imm = 0x148
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a930(%rbp)
jmp 0x2534a
movq -0x7a930(%rbp), %rdi
leaq -0x7a648(%rbp), %rsi
callq 0x2cac0
jmp 0x2535f
movq -0x7a7c0(%rbp), %rdi
addq $0x1a8, %rdi            # imm = 0x1A8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a938(%rbp)
jmp 0x25382
movq -0x7a938(%rbp), %rdi
leaq -0x7a6a8(%rbp), %rsi
callq 0x2cac0
jmp 0x25397
movq -0x7a7c0(%rbp), %rdi
addq $0x1d8, %rdi            # imm = 0x1D8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a940(%rbp)
jmp 0x253ba
movq -0x7a940(%rbp), %rdi
leaq -0x7a6c0(%rbp), %rsi
callq 0x2cac0
jmp 0x253cf
movq -0x7a7c0(%rbp), %rdi
addq $0x208, %rdi            # imm = 0x208
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a948(%rbp)
jmp 0x253f2
movq -0x7a948(%rbp), %rdi
leaq -0x7a6d8(%rbp), %rsi
callq 0x2cac0
jmp 0x25407
movq -0x7a7c0(%rbp), %rdi
addq $0x238, %rdi            # imm = 0x238
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a950(%rbp)
jmp 0x2542a
movq -0x7a950(%rbp), %rdi
leaq -0x7a6f0(%rbp), %rsi
callq 0x2cac0
jmp 0x2543f
movq -0x7a7c0(%rbp), %rdi
addq $0x268, %rdi            # imm = 0x268
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a958(%rbp)
jmp 0x25462
movq -0x7a958(%rbp), %rdi
leaq -0x7a708(%rbp), %rsi
callq 0x2cac0
jmp 0x25477
movq -0x7a7c0(%rbp), %rdi
addq $0x298, %rdi            # imm = 0x298
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a960(%rbp)
jmp 0x2549a
movq -0x7a960(%rbp), %rdi
leaq -0x7a720(%rbp), %rsi
callq 0x2cac0
jmp 0x254af
movq -0x7a7c0(%rbp), %rdi
addq $0x2c8, %rdi            # imm = 0x2C8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a968(%rbp)
jmp 0x254d2
movq -0x7a968(%rbp), %rdi
leaq -0x7a738(%rbp), %rsi
callq 0x2cac0
jmp 0x254e7
movq -0x7a7c0(%rbp), %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
leaq -0x7a398(%rbp), %rsi
callq 0x2c7f0
movq %rax, -0x7a970(%rbp)
jmp 0x2550a
movq -0x7a970(%rbp), %rdi
leaq -0x7a750(%rbp), %rsi
callq 0x2cac0
jmp 0x2551f
cmpl $-0x1, -0x7a3bc(%rbp)
jle 0x25581
movl -0x7a3bc(%rbp), %esi
leaq 0x52011(%rip), %rdi     # 0x77546
xorl %eax, %eax
callq 0x8080
jmp 0x2553e
movq -0x7a7c0(%rbp), %rdi
addq $0x328, %rdi            # imm = 0x328
leaq -0x7a3bc(%rbp), %rsi
callq 0x2cb00
movb %dl, -0x7a979(%rbp)
movq %rax, -0x7a978(%rbp)
jmp 0x25567
movb -0x7a979(%rbp), %al
movq -0x7a978(%rbp), %rcx
movq %rcx, -0x7a7b0(%rbp)
movb %al, -0x7a7a8(%rbp)
leaq -0x7a750(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a738(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a720(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a708(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a6f0(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a6d8(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a6c0(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a6a8(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a690(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a678(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a660(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a648(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a630(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a618(%rbp), %rdi
callq 0x2bfd0
jmp 0x256d8
leaq -0x7a750(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a738(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a720(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a708(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a6f0(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a6d8(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a6c0(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a6a8(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a690(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a678(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a660(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a648(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a630(%rbp), %rdi
callq 0x2bfd0
leaq -0x7a618(%rbp), %rdi
callq 0x2bfd0
jmp 0x25710
movl $0x0, -0x7a3c0(%rbp)
leaq -0x7a3b8(%rbp), %rdi
callq 0x82e0
leaq -0x7a398(%rbp), %rdi
callq 0x82e0
movl -0x7a3c0(%rbp), %eax
testl %eax, %eax
je 0x2570b
jmp 0x25706
jmp 0x23e31
jmp 0x23e31
leaq -0x7a3b8(%rbp), %rdi
callq 0x82e0
leaq -0x7a398(%rbp), %rdi
callq 0x82e0
jmp 0x2576e
movq -0x7a7c0(%rbp), %rdi
addq $0x28, %rdi
callq 0x2cb50
movq %rax, %rsi
leaq 0x51e2b(%rip), %rdi     # 0x7756f
xorl %eax, %eax
callq 0x8080
jmp 0x2574d
leaq -0x238(%rbp), %rdi
callq 0x82e0
leaq -0x218(%rbp), %rdi
callq 0x8140
addq $0x7a980, %rsp          # imm = 0x7A980
popq %rbp
retq
leaq -0x238(%rbp), %rdi
callq 0x82e0
leaq -0x218(%rbp), %rdi
callq 0x8140
movq -0x7a370(%rbp), %rdi
callq 0x8860
movq %rax, %rdi
callq 0xcd10
nopw (%rax,%rax)