// File: lionalion[P]clusterization/clust_w2v.cpp
// Function: main
int main(int argc, char * argv[])
{
	if (argc < 7 || argc > 15) {error ("number of argv isn't correct: -fl input_file -w2v classes_w2v -n N -th1 n -th2 n -th3 n -th4 n -out output_file!\n"
		"format input_file - IDdocs(numbers)\\ttext\n"
		"format classes_w2v - word\\tclass\\tweight\n"
		"n - the numbers of docs in one epoch; default eof\n"
		"th1 - the min numbers of w2v classes  in claster; default = 4;\n"
		"th2 - the proximity of clasters 0-1; default = 0.7;\n"
		"th3 - the min numbers of docs in clasters; default = 3;\n"
		"th4 - the similarity of clasters according to the docs; default = 0.6;\n"
		);
		exit(0);}
	string line;
	string strText;
	char * namefile; 
	char * w2vfile; 
	ofstream out;
	int epo=-1;
	int th1=0; 
	float th2=0; 
	int th3=0;
	float th4=0;

	string  argum = argv [1];
	if ("-fl" == argum)
		namefile = argv [2];
	else{
		error ("No input file! First argument: -fl input");
		exit(0);
	}
	string  arguw = argv [3];
	if ("-w2v" == arguw)
		w2vfile = argv [4];
	else{
		error ("No w2v file! Second argument: -w2v inw2v");
		exit(0);
	}
	string outFile;
	bool flgoutfile = false;
	for (int i=5; i< argc-1; i++){
		string  snum = argv [i];
		if ("-out" == snum){
				outFile = (argv[i+1]);
				flgoutfile = true;
				i++;
		}
		else if ("-n" == snum){
			epo = atoi (argv[i+1]);
			i++;
		}
		else if ("-th1" == snum){
			th1 = atoi (argv[i+1]);
			i++;
		}
		else if ("-th2" == snum){
			th2 = atof (argv[i+1]);
			i++;
		}
		else if ("-th3" == snum){
			th3 = atoi (argv[i+1]);
			i++;
		}
		else if ("-th4" == snum){
			th4 = atof (argv[i+1]);
			i++;
		}
	}
	//default 
	if (th1==0)
		th1=4;
	if (th2==0)
		th2=0.7;
	if (th3==0)
		th3=3;
	if (th4==0)
		th4=0.6;

	if (flgoutfile == false){
			error ("no output file!");
			exit(0);
	}
	else
		out.open(outFile.c_str());

	map <string, string> w2v;

	ifstream myfile(namefile, ifstream::in );
	if (!myfile) {
		error ("No intext file!",namefile); 	
		exit (1);
	}
	ifstream wfile(w2vfile, ifstream::in);
	if (!wfile) {
		error ("No inw2v file!",w2vfile); 	
		exit (1);
	}

	if (wfile.is_open()){		
	
		while (getline(wfile, line)) {
			string strCls;
			string strWrd;
			int nPosTab;
			int nPosEnd = line.length();
			int nPos=0;
			while (nPos < line.length()){
				nPosTab = line.find('\t', nPos);
				if (nPosEnd==-1)
					nPosEnd=line.length();
				if (-1 != nPosTab  )		{
					strWrd = line.substr(nPos,nPosTab-nPos);		
					strCls = line.substr(nPosTab-nPos+1,nPosEnd-nPos);
					nPos=nPosEnd+1;
				}
				else if (nPos != nPosEnd) {
					error("format is not correct!");
					exit(1);
				}				
			}
			w2v.insert ( std::pair<string,string>(strWrd,strCls) );
		}
	}
		
	std::vector < std::vector < int > > vOutIdStr;
	std::vector < std::vector <std::map<int,float> > > vOutMapCls;
	std::vector < std::vector < int > > vIdStr;
	std::vector < int > vId;
	std::vector < std::vector <std::map<int,float> > > vMapCls;
	std::vector < std::map <int,float> > vCls; 
	int idstr;
	int cntepo=0;
	if (myfile.is_open()){				
		while (getline(myfile, line)) {
			cntepo++;
			std::map <int,float> cls;
			int cntmap=0;
			string strWrd;
			string strID;
			int nPosTab;
			int nPosSpace;
			int nPosEnd = line.length();
			int nPos=0;			
			while (nPos < line.length()){
				nPosTab = line.find('\t', nPos);
				nPosSpace = line.find(' ', nPos);
				if (nPosEnd==-1)
					nPosEnd=line.length();
				else if (-1 != nPosTab  && nPosTab < nPosEnd)		{
					strID = line.substr(nPos,nPosTab-nPos);		
					char *buffer = new char[strID.length() + 1];
					strcpy(buffer,  strID.c_str());
					idstr = strtod(buffer,NULL);
					nPos=nPosTab+1;
				}
				else if (-1 != nPosSpace  && nPosSpace < nPosEnd)		{
					strWrd = line.substr(nPos,nPosSpace-nPos);		
					nPos=nPosSpace+1;
				}
				else if (-1 == nPosSpace && nPos <= nPosEnd)	{
					strWrd = line.substr(nPos,nPosEnd-nPos);
					nPos=nPosEnd+1;
				}
				else if (nPos != nPosEnd) {
					error("format is not correct!");
					exit(1);
				}
				if (strWrd != "" ){
					std::multimap<string,string>::const_iterator itMap = w2v.begin();
					itMap = w2v.find(strWrd);
					if(itMap != w2v.end() ){						
						string strTmp = (*itMap).second;
						int n=0;
						int nTab;
						int nEnd=strTmp.length();
						float wgt;
						int ncls;
						string strCh;
						while (n < strTmp.length()){
							nTab = strTmp.find('\t', n);
							if (-1 != nTab  && nTab < nEnd)		{
								strCh = strTmp.substr(n,nTab-n);		
								char *buffer = new char[strCh.length() + 1];
								strcpy(buffer, strCh.c_str());
								ncls = strtod(buffer,NULL);
								n=nTab+1;
							}
							else if (-1 == nTab && n <= nEnd)	{
								strCh = strTmp.substr(n,nEnd-n);
								char *buffer = new char[strCh.length() + 1];
								strcpy(buffer,  strCh.c_str());
								wgt = strtod(buffer,NULL);
								n=nEnd+1;
							}
						}
							
						if (0==cntmap){
							cls.insert ( std::pair<int,float>(ncls,wgt) );
							cntmap=1;
						}
						else{
							std::map<int,float>::const_iterator it = cls.begin();
							it = cls.find(ncls);
							if(it != cls.end() ){	
								cls.at(ncls) = (*it).second+wgt;								
							}
							else{
								cls.insert ( std::pair<int,float>(ncls,wgt) );
							}
						}					
					}
				}	
			}
			if (cls.size()+1 > th1){
				vCls.push_back( cls );	
				vId.push_back( idstr );
			}

			if (epo != -1 && cntepo > epo ){
				cout << "." ;
				firstClast(vCls, vId, th2,  vMapCls, vIdStr);
				vCls.clear();
				vId.clear();
				postClast (vIdStr,vMapCls, th3, th4, vOutIdStr, vOutMapCls);
				vIdStr.clear();
				vMapCls.clear();	
				if (vOutIdStr.size() != vOutMapCls.size() ){
					error("something strange: size of outID and outMap is't equal!");
					exit(1);
				}	
				cntepo=0;
			}			
		} //end while
	} //close file
	if(vCls.size()==0 ){
		error ("No words or other lang!\n");
		exit(0);
	}
	else if ( epo == -1 ){
		cout << "beginning clasterization \n" ;
		firstClast(vCls, vId, th2,  vMapCls, vIdStr);
		vCls.clear();
		vId.clear();
		cout << "post clastering \n" ;
		postClast (vIdStr,vMapCls, th3, th4, vOutIdStr, vOutMapCls);
		vIdStr.clear();
		vMapCls.clear();	
		if (vOutIdStr.size() != vOutMapCls.size() ){
			error("something strange: size of outID and outMap is't equal!");
			exit(1);
		}			
	}
	else{
		cout << "\npost clastering \n" ;
		std::vector < std::vector < int > > vOutIdStr_epo;
		std::vector < std::vector <std::map<int,float> > > vOutMapCls_epo;
		postClast (vOutIdStr,vOutMapCls, th3, th4, vOutIdStr_epo, vOutMapCls_epo);
		vOutIdStr.clear();
		vOutMapCls.clear();	
		vOutIdStr.resize(vOutIdStr_epo.size());
		vOutIdStr=vOutIdStr_epo;
		vOutMapCls.resize(vOutMapCls_epo.size());
		vOutMapCls=vOutMapCls_epo;
		if (vOutIdStr.size() != vOutMapCls.size() ){
			error("something strange: size of outID and outMap is't equal!");
			exit(1);
		}		
	}
	//out vOutIdStr,vOutMapCls
	for (int c=0; c<vOutMapCls.size(); c++){
		out <<  c << ": " ;
		for (int x=0; x<vOutMapCls[c].size(); x++){
			std::map<int,float> ::const_iterator it = vOutMapCls[c][x].begin(); it != vOutMapCls[c][x].end(); ++it;
			out <<  vOutIdStr[c][x] << " " << (*it).second  << "; ";
		}			
		out <<  "\n" ;
	}
	out << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xe10, %rsp            # imm = 0xE10
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x7, -0x8(%rbp)
jl 0x38a5
cmpl $0xf, -0x8(%rbp)
jle 0x38bf
leaq 0xd760(%rip), %rdi      # 0x1100c
leaq 0xda7f(%rip), %rsi      # 0x11332
callq 0x2580
xorl %edi, %edi
callq 0x22c0
leaq -0x30(%rbp), %rdi
callq 0x2330
leaq -0x50(%rbp), %rdi
callq 0x2330
leaq -0x260(%rbp), %rdi
callq 0x23d0
jmp 0x38df
movl $0xffffffff, -0x270(%rbp) # imm = 0xFFFFFFFF
movl $0x0, -0x274(%rbp)
movl $0x0, -0x278(%rbp)
movl $0x0, -0x27c(%rbp)
movl $0x0, -0x280(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0xc58(%rbp)
leaq -0x2a1(%rbp), %rdi
movq %rdi, -0xc50(%rbp)
callq 0x2400
movq -0xc58(%rbp), %rsi
movq -0xc50(%rbp), %rdx
leaq -0x2a0(%rbp), %rdi
callq 0x5e30
jmp 0x394f
leaq -0x2a1(%rbp), %rdi
callq 0x2270
leaq 0xd893(%rip), %rdi      # 0x111f5
leaq -0x2a0(%rbp), %rsi
callq 0x5ee0
movb %al, -0xc59(%rbp)
jmp 0x3976
movb -0xc59(%rbp), %al
testb $0x1, %al
jne 0x3982
jmp 0x39e1
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x58(%rbp)
jmp 0x39fd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x56a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0x2a1(%rbp), %rdi
callq 0x2270
jmp 0x569c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x5690
leaq 0xd811(%rip), %rdi      # 0x111f9
leaq 0xd943(%rip), %rsi      # 0x11332
callq 0x2580
jmp 0x39f6
xorl %edi, %edi
callq 0x22c0
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0xc70(%rbp)
leaq -0x2c9(%rbp), %rdi
movq %rdi, -0xc68(%rbp)
callq 0x2400
movq -0xc70(%rbp), %rsi
movq -0xc68(%rbp), %rdx
leaq -0x2c8(%rbp), %rdi
callq 0x5e30
jmp 0x3a3b
leaq -0x2c9(%rbp), %rdi
callq 0x2270
leaq 0xd7d4(%rip), %rdi      # 0x11222
leaq -0x2c8(%rbp), %rsi
callq 0x5ee0
movb %al, -0xc71(%rbp)
jmp 0x3a62
movb -0xc71(%rbp), %al
testb $0x1, %al
jne 0x3a6e
jmp 0x3ab6
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x60(%rbp)
jmp 0x3ad2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0x2c9(%rbp), %rdi
callq 0x2270
jmp 0x5690
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x5684
leaq 0xd76a(%rip), %rdi      # 0x11227
leaq 0xd86e(%rip), %rsi      # 0x11332
callq 0x2580
jmp 0x3acb
xorl %edi, %edi
callq 0x22c0
leaq -0x2f0(%rbp), %rdi
callq 0x2330
movb $0x0, -0x2f1(%rbp)
movl $0x5, -0x2f8(%rbp)
movl -0x2f8(%rbp), %eax
movl -0x8(%rbp), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
jge 0x3dea
movq -0x10(%rbp), %rax
movslq -0x2f8(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xc88(%rbp)
leaq -0x319(%rbp), %rdi
movq %rdi, -0xc80(%rbp)
callq 0x2400
movq -0xc88(%rbp), %rsi
movq -0xc80(%rbp), %rdx
leaq -0x318(%rbp), %rdi
callq 0x5e30
jmp 0x3b48
leaq -0x319(%rbp), %rdi
callq 0x2270
leaq 0xd6f5(%rip), %rdi      # 0x11250
leaq -0x318(%rbp), %rsi
callq 0x5ee0
movb %al, -0xc89(%rbp)
jmp 0x3b6f
movb -0xc89(%rbp), %al
testb $0x1, %al
jne 0x3b7b
jmp 0x3bfa
movq -0x10(%rbp), %rax
movslq -0x2f8(%rbp), %rcx
movq 0x8(%rax,%rcx,8), %rsi
leaq -0x2f0(%rbp), %rdi
callq 0x2320
jmp 0x3b99
movb $0x1, -0x2f1(%rbp)
movl -0x2f8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f8(%rbp)
jmp 0x3dca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0x319(%rbp), %rdi
callq 0x2270
jmp 0x5678
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0x318(%rbp), %rdi
callq 0x2160
jmp 0x5678
leaq 0xd654(%rip), %rdi      # 0x11255
leaq -0x318(%rbp), %rsi
callq 0x5ee0
movb %al, -0xc8a(%rbp)
jmp 0x3c15
movb -0xc8a(%rbp), %al
testb $0x1, %al
jne 0x3c21
jmp 0x3c54
movq -0x10(%rbp), %rax
movl -0x2f8(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x2390
movl %eax, -0x270(%rbp)
movl -0x2f8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f8(%rbp)
jmp 0x3dc8
leaq 0xd5fd(%rip), %rdi      # 0x11258
leaq -0x318(%rbp), %rsi
callq 0x5ee0
movb %al, -0xc8b(%rbp)
jmp 0x3c6f
movb -0xc8b(%rbp), %al
testb $0x1, %al
jne 0x3c7b
jmp 0x3cae
movq -0x10(%rbp), %rax
movl -0x2f8(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x2390
movl %eax, -0x274(%rbp)
movl -0x2f8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f8(%rbp)
jmp 0x3dc6
leaq 0xd5a8(%rip), %rdi      # 0x1125d
leaq -0x318(%rbp), %rsi
callq 0x5ee0
movb %al, -0xc8c(%rbp)
jmp 0x3cc9
movb -0xc8c(%rbp), %al
testb $0x1, %al
jne 0x3cd5
jmp 0x3d0e
movq -0x10(%rbp), %rax
movl -0x2f8(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x22f0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x278(%rbp)
movl -0x2f8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f8(%rbp)
jmp 0x3dc4
leaq 0xd54d(%rip), %rdi      # 0x11262
leaq -0x318(%rbp), %rsi
callq 0x5ee0
movb %al, -0xc8d(%rbp)
jmp 0x3d29
movb -0xc8d(%rbp), %al
testb $0x1, %al
jne 0x3d35
jmp 0x3d65
movq -0x10(%rbp), %rax
movl -0x2f8(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x2390
movl %eax, -0x27c(%rbp)
movl -0x2f8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f8(%rbp)
jmp 0x3dc2
leaq 0xd4fb(%rip), %rdi      # 0x11267
leaq -0x318(%rbp), %rsi
callq 0x5ee0
movb %al, -0xc8e(%rbp)
jmp 0x3d80
movb -0xc8e(%rbp), %al
testb $0x1, %al
jne 0x3d8c
jmp 0x3dc0
movq -0x10(%rbp), %rax
movl -0x2f8(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdi
callq 0x22f0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x280(%rbp)
movl -0x2f8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f8(%rbp)
jmp 0x3dc2
jmp 0x3dc4
jmp 0x3dc6
jmp 0x3dc8
jmp 0x3dca
leaq -0x318(%rbp), %rdi
callq 0x2160
movl -0x2f8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2f8(%rbp)
jmp 0x3aef
cmpl $0x0, -0x274(%rbp)
jne 0x3dfd
movl $0x4, -0x274(%rbp)
movss -0x278(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x3e1f
jp 0x3e1f
movss 0xd1ed(%rip), %xmm0     # 0x11004
movss %xmm0, -0x278(%rbp)
cmpl $0x0, -0x27c(%rbp)
jne 0x3e32
movl $0x3, -0x27c(%rbp)
movss -0x280(%rbp), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x3e54
jp 0x3e54
movss 0xd1bc(%rip), %xmm0     # 0x11008
movss %xmm0, -0x280(%rbp)
movb -0x2f1(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x3e97
leaq 0xd401(%rip), %rdi      # 0x1126c
leaq 0xd4c0(%rip), %rsi      # 0x11332
callq 0x2580
jmp 0x3e79
xorl %edi, %edi
callq 0x22c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x5678
leaq -0x2f0(%rbp), %rdi
callq 0x20e0
movq %rax, %rsi
leaq -0x260(%rbp), %rdi
movl $0x10, %edx
callq 0x2050
jmp 0x3eb9
jmp 0x3ebb
leaq -0x350(%rbp), %rdi
callq 0x5f10
movq -0x58(%rbp), %rsi
leaq -0x558(%rbp), %rdi
movl $0x8, %edx
callq 0x2420
jmp 0x3ede
movq -0x558(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x558(%rbp,%rax), %rdi
callq 0x2110
movb %al, -0xc8f(%rbp)
jmp 0x3efe
movb -0xc8f(%rbp), %al
testb $0x1, %al
jne 0x3f0a
jmp 0x3f54
movq -0x58(%rbp), %rsi
leaq 0xd367(%rip), %rdi      # 0x1127c
callq 0x2580
jmp 0x3f1c
movl $0x1, %edi
callq 0x22c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x566c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x5660
movq -0x60(%rbp), %rsi
leaq -0x760(%rbp), %rdi
movl $0x8, %edx
callq 0x2420
jmp 0x3f6b
movq -0x760(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x760(%rbp,%rax), %rdi
callq 0x2110
movb %al, -0xc90(%rbp)
jmp 0x3f8b
movb -0xc90(%rbp), %al
testb $0x1, %al
jne 0x3f97
jmp 0x3fca
movq -0x60(%rbp), %rsi
leaq 0xd2ea(%rip), %rdi      # 0x1128c
callq 0x2580
jmp 0x3fa9
movl $0x1, %edi
callq 0x22c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x5654
leaq -0x760(%rbp), %rdi
callq 0x23a0
movb %al, -0xc91(%rbp)
jmp 0x3fde
movb -0xc91(%rbp), %al
testb $0x1, %al
jne 0x3fed
jmp 0x4289
jmp 0x3fef
leaq -0x760(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2080
movq %rax, -0xca0(%rbp)
jmp 0x4008
movq -0xca0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2300
movb %al, -0xca1(%rbp)
jmp 0x4026
movb -0xca1(%rbp), %al
testb $0x1, %al
jne 0x4035
jmp 0x4287
leaq -0x780(%rbp), %rdi
callq 0x2330
leaq -0x7a0(%rbp), %rdi
callq 0x2330
leaq -0x30(%rbp), %rdi
callq 0x2370
movl %eax, -0x7a8(%rbp)
movl $0x0, -0x7ac(%rbp)
movslq -0x7ac(%rbp), %rax
movq %rax, -0xcb0(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x2370
movq %rax, %rcx
movq -0xcb0(%rbp), %rax
cmpq %rcx, %rax
jae 0x41cb
movslq -0x7ac(%rbp), %rdx
leaq -0x30(%rbp), %rdi
movl $0x9, %esi
callq 0x2310
movl %eax, -0x7a4(%rbp)
cmpl $-0x1, -0x7a8(%rbp)
jne 0x40c3
leaq -0x30(%rbp), %rdi
callq 0x2370
movl %eax, -0x7a8(%rbp)
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl -0x7a4(%rbp), %eax
je 0x4197
movslq -0x7ac(%rbp), %rdx
movl %edx, %ecx
movl -0x7a4(%rbp), %eax
subl %ecx, %eax
movslq %eax, %rcx
leaq -0x7d0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2230
jmp 0x40fa
leaq -0x7a0(%rbp), %rdi
leaq -0x7d0(%rbp), %rsi
movq %rsi, -0xcb8(%rbp)
callq 0x22d0
movq -0xcb8(%rbp), %rdi
callq 0x2160
movl -0x7a4(%rbp), %eax
movl -0x7ac(%rbp), %ecx
subl %ecx, %eax
incl %eax
movslq %eax, %rdx
movl -0x7a8(%rbp), %eax
subl %ecx, %eax
movslq %eax, %rcx
leaq -0x7f0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2230
jmp 0x4150
leaq -0x780(%rbp), %rdi
leaq -0x7f0(%rbp), %rsi
callq 0x22d0
leaq -0x7f0(%rbp), %rdi
callq 0x2160
movl -0x7a8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x7ac(%rbp)
jmp 0x41c6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x426a
movl -0x7ac(%rbp), %eax
cmpl -0x7a8(%rbp), %eax
je 0x41c4
leaq 0xd0ef(%rip), %rdi      # 0x1129b
leaq 0xd17f(%rip), %rsi      # 0x11332
callq 0x2580
jmp 0x41ba
movl $0x1, %edi
callq 0x22c0
jmp 0x41c6
jmp 0x4066
leaq -0x830(%rbp), %rdi
leaq -0x7a0(%rbp), %rsi
leaq -0x780(%rbp), %rdx
callq 0x5f70
jmp 0x41e7
leaq -0x350(%rbp), %rdi
leaq -0x830(%rbp), %rsi
callq 0x5f30
movb %dl, -0xcc1(%rbp)
movq %rax, -0xcc0(%rbp)
jmp 0x4209
movb -0xcc1(%rbp), %al
movq -0xcc0(%rbp), %rcx
movq %rcx, -0x840(%rbp)
movb %al, -0x838(%rbp)
leaq -0x830(%rbp), %rdi
callq 0x5fd0
leaq -0x7a0(%rbp), %rdi
callq 0x2160
leaq -0x780(%rbp), %rdi
callq 0x2160
jmp 0x3fef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0x830(%rbp), %rdi
callq 0x5fd0
leaq -0x7a0(%rbp), %rdi
callq 0x2160
leaq -0x780(%rbp), %rdi
callq 0x2160
jmp 0x5654
jmp 0x4289
leaq -0x858(%rbp), %rdi
callq 0x6000
leaq -0x870(%rbp), %rdi
callq 0x6020
leaq -0x888(%rbp), %rdi
callq 0x6000
leaq -0x8a0(%rbp), %rdi
callq 0x57d0
leaq -0x8b8(%rbp), %rdi
callq 0x6020
leaq -0x8d0(%rbp), %rdi
callq 0x6040
movl $0x0, -0x8d8(%rbp)
leaq -0x558(%rbp), %rdi
callq 0x23a0
movb %al, -0xcc2(%rbp)
jmp 0x42ef
movb -0xcc2(%rbp), %al
testb $0x1, %al
jne 0x42fe
jmp 0x4eb5
jmp 0x4300
leaq -0x558(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2080
movq %rax, -0xcd0(%rbp)
jmp 0x4319
movq -0xcd0(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2300
movb %al, -0xcd1(%rbp)
jmp 0x4337
movb -0xcd1(%rbp), %al
testb $0x1, %al
jne 0x4346
jmp 0x4eb3
movl -0x8d8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8d8(%rbp)
leaq -0x908(%rbp), %rdi
callq 0x6060
movl $0x0, -0x90c(%rbp)
leaq -0x930(%rbp), %rdi
callq 0x2330
leaq -0x950(%rbp), %rdi
callq 0x2330
leaq -0x30(%rbp), %rdi
callq 0x2370
movl %eax, -0x95c(%rbp)
movl $0x0, -0x960(%rbp)
movslq -0x960(%rbp), %rax
movq %rax, -0xce0(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x2370
movq %rax, %rcx
movq -0xce0(%rbp), %rax
cmpq %rcx, %rax
jae 0x4bfa
movslq -0x960(%rbp), %rdx
leaq -0x30(%rbp), %rdi
movl $0x9, %esi
callq 0x2310
movl %eax, -0x954(%rbp)
movslq -0x960(%rbp), %rdx
leaq -0x30(%rbp), %rdi
movl $0x20, %esi
callq 0x2310
movl %eax, -0x958(%rbp)
cmpl $-0x1, -0x95c(%rbp)
jne 0x4430
leaq -0x30(%rbp), %rdi
callq 0x2370
movl %eax, -0x95c(%rbp)
jmp 0x465c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x560c
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl -0x954(%rbp), %eax
je 0x4542
movl -0x954(%rbp), %eax
cmpl -0x95c(%rbp), %eax
jge 0x4542
movslq -0x960(%rbp), %rdx
movl %edx, %ecx
movl -0x954(%rbp), %eax
subl %ecx, %eax
movslq %eax, %rcx
leaq -0x980(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2230
jmp 0x4479
leaq -0x950(%rbp), %rdi
movq %rdi, -0xcf0(%rbp)
leaq -0x980(%rbp), %rsi
movq %rsi, -0xcf8(%rbp)
callq 0x22d0
movq -0xcf8(%rbp), %rdi
callq 0x2160
movq -0xcf0(%rbp), %rdi
callq 0x2370
movq %rax, %rdi
incq %rdi
callq 0x2030
movq %rax, -0xce8(%rbp)
jmp 0x44c6
movq -0xce8(%rbp), %rax
movq %rax, -0x988(%rbp)
movq -0x988(%rbp), %rax
movq %rax, -0xd00(%rbp)
leaq -0x950(%rbp), %rdi
callq 0x20e0
movq -0xd00(%rbp), %rdi
movq %rax, %rsi
callq 0x21f0
movq -0x988(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x21a0
cvttsd2si %xmm0, %eax
movl %eax, -0x8d4(%rbp)
movl -0x954(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x960(%rbp)
jmp 0x465a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x4e8a
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl -0x958(%rbp), %eax
je 0x45b6
movl -0x958(%rbp), %eax
cmpl -0x95c(%rbp), %eax
jge 0x45b6
movslq -0x960(%rbp), %rdx
movl %edx, %ecx
movl -0x958(%rbp), %eax
subl %ecx, %eax
movslq %eax, %rcx
leaq -0x9a8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2230
jmp 0x4583
leaq -0x930(%rbp), %rdi
leaq -0x9a8(%rbp), %rsi
callq 0x22d0
leaq -0x9a8(%rbp), %rdi
callq 0x2160
movl -0x958(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x960(%rbp)
jmp 0x4658
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl -0x958(%rbp), %eax
jne 0x4627
movl -0x960(%rbp), %eax
cmpl -0x95c(%rbp), %eax
jg 0x4627
movslq -0x960(%rbp), %rdx
movl %edx, %ecx
movl -0x95c(%rbp), %eax
subl %ecx, %eax
movslq %eax, %rcx
leaq -0x9c8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2230
jmp 0x45f7
leaq -0x930(%rbp), %rdi
leaq -0x9c8(%rbp), %rsi
callq 0x22d0
leaq -0x9c8(%rbp), %rdi
callq 0x2160
movl -0x95c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x960(%rbp)
jmp 0x4656
movl -0x960(%rbp), %eax
cmpl -0x95c(%rbp), %eax
je 0x4654
leaq 0xcc5f(%rip), %rdi      # 0x1129b
leaq 0xccef(%rip), %rsi      # 0x11332
callq 0x2580
jmp 0x464a
movl $0x1, %edi
callq 0x22c0
jmp 0x4656
jmp 0x4658
jmp 0x465a
jmp 0x465c
leaq 0xcccf(%rip), %rsi      # 0x11332
leaq -0x930(%rbp), %rdi
callq 0x6080
movb %al, -0xd01(%rbp)
jmp 0x4677
movb -0xd01(%rbp), %al
testb $0x1, %al
jne 0x4686
jmp 0x4bf5
leaq -0x350(%rbp), %rdi
movq %rdi, -0xd18(%rbp)
callq 0x60b0
movq %rax, -0x9d8(%rbp)
leaq -0x9d0(%rbp), %rdi
leaq -0x9d8(%rbp), %rsi
callq 0x60e0
movq -0xd18(%rbp), %rdi
leaq -0x930(%rbp), %rsi
callq 0x6100
movq %rax, -0xd10(%rbp)
jmp 0x46cf
movq -0xd10(%rbp), %rax
movq %rax, -0x9e8(%rbp)
leaq -0x9e0(%rbp), %rdi
leaq -0x9e8(%rbp), %rsi
callq 0x60e0
movq -0x9e0(%rbp), %rax
movq %rax, -0x9d0(%rbp)
leaq -0x350(%rbp), %rdi
callq 0x6160
movq %rax, -0x9f8(%rbp)
leaq -0x9f0(%rbp), %rdi
leaq -0x9f8(%rbp), %rsi
callq 0x60e0
leaq -0x9d0(%rbp), %rdi
leaq -0x9f0(%rbp), %rsi
callq 0x6130
testb $0x1, %al
jne 0x4740
jmp 0x4bf3
leaq -0x9d0(%rbp), %rdi
callq 0x6190
movq %rax, %rsi
addq $0x20, %rsi
leaq -0xa18(%rbp), %rdi
callq 0x20f0
jmp 0x4761
movl $0x0, -0xa1c(%rbp)
leaq -0xa18(%rbp), %rdi
callq 0x2370
movl %eax, -0xa24(%rbp)
leaq -0xa50(%rbp), %rdi
callq 0x2330
movslq -0xa1c(%rbp), %rax
movq %rax, -0xd20(%rbp)
leaq -0xa18(%rbp), %rdi
callq 0x2370
movq %rax, %rcx
movq -0xd20(%rbp), %rax
cmpq %rcx, %rax
jae 0x4a03
movslq -0xa1c(%rbp), %rdx
leaq -0xa18(%rbp), %rdi
movl $0x9, %esi
callq 0x2310
movl %eax, -0xa20(%rbp)
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl -0xa20(%rbp), %eax
je 0x4901
movl -0xa20(%rbp), %eax
cmpl -0xa24(%rbp), %eax
jge 0x4901
movslq -0xa1c(%rbp), %rdx
movl %edx, %ecx
movl -0xa20(%rbp), %eax
subl %ecx, %eax
movslq %eax, %rcx
leaq -0xa70(%rbp), %rdi
leaq -0xa18(%rbp), %rsi
callq 0x2230
jmp 0x4820
leaq -0xa50(%rbp), %rdi
movq %rdi, -0xd30(%rbp)
leaq -0xa70(%rbp), %rsi
movq %rsi, -0xd38(%rbp)
callq 0x22d0
movq -0xd38(%rbp), %rdi
callq 0x2160
movq -0xd30(%rbp), %rdi
callq 0x2370
movq %rax, %rdi
incq %rdi
callq 0x2030
movq %rax, -0xd28(%rbp)
jmp 0x486d
movq -0xd28(%rbp), %rax
movq %rax, -0xa78(%rbp)
movq -0xa78(%rbp), %rax
movq %rax, -0xd40(%rbp)
leaq -0xa50(%rbp), %rdi
callq 0x20e0
movq -0xd40(%rbp), %rdi
movq %rax, %rsi
callq 0x21f0
movq -0xa78(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x21a0
cvttsd2si %xmm0, %eax
movl %eax, -0xa2c(%rbp)
movl -0xa20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa1c(%rbp)
jmp 0x49fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0xa50(%rbp), %rdi
callq 0x2160
leaq -0xa18(%rbp), %rdi
callq 0x2160
jmp 0x4e8a
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl -0xa20(%rbp), %eax
jne 0x49fc
movl -0xa1c(%rbp), %eax
cmpl -0xa24(%rbp), %eax
jg 0x49fc
movslq -0xa1c(%rbp), %rdx
movl %edx, %ecx
movl -0xa24(%rbp), %eax
subl %ecx, %eax
movslq %eax, %rcx
leaq -0xa98(%rbp), %rdi
leaq -0xa18(%rbp), %rsi
callq 0x2230
jmp 0x494d
leaq -0xa50(%rbp), %rdi
movq %rdi, -0xd50(%rbp)
leaq -0xa98(%rbp), %rsi
movq %rsi, -0xd58(%rbp)
callq 0x22d0
movq -0xd58(%rbp), %rdi
callq 0x2160
movq -0xd50(%rbp), %rdi
callq 0x2370
movq %rax, %rdi
incq %rdi
callq 0x2030
movq %rax, -0xd48(%rbp)
jmp 0x499a
movq -0xd48(%rbp), %rax
movq %rax, -0xaa0(%rbp)
movq -0xaa0(%rbp), %rax
movq %rax, -0xd60(%rbp)
leaq -0xa50(%rbp), %rdi
callq 0x20e0
movq -0xd60(%rbp), %rdi
movq %rax, %rsi
callq 0x21f0
movq -0xaa0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x21a0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0xa28(%rbp)
movl -0xa24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xa1c(%rbp)
jmp 0x49fe
jmp 0x4789
xorl %eax, %eax
cmpl -0x90c(%rbp), %eax
jne 0x4a74
leaq -0xaa8(%rbp), %rdi
leaq -0xa2c(%rbp), %rsi
leaq -0xa28(%rbp), %rdx
callq 0x61f0
jmp 0x4a29
leaq -0x908(%rbp), %rdi
leaq -0xaa8(%rbp), %rsi
callq 0x61b0
movb %dl, -0xd69(%rbp)
movq %rax, -0xd68(%rbp)
jmp 0x4a4b
movb -0xd69(%rbp), %al
movq -0xd68(%rbp), %rcx
movq %rcx, -0xab8(%rbp)
movb %al, -0xab0(%rbp)
movl $0x1, -0x90c(%rbp)
jmp 0x4bdb
leaq -0x908(%rbp), %rdi
movq %rdi, -0xd80(%rbp)
callq 0x5cd0
movq %rax, -0xac8(%rbp)
leaq -0xac0(%rbp), %rdi
leaq -0xac8(%rbp), %rsi
callq 0x5d00
movq -0xd80(%rbp), %rdi
leaq -0xa2c(%rbp), %rsi
callq 0x5d80
movq %rax, -0xd78(%rbp)
jmp 0x4abd
movq -0xd78(%rbp), %rax
movq %rax, -0xad8(%rbp)
leaq -0xad0(%rbp), %rdi
leaq -0xad8(%rbp), %rsi
callq 0x5d00
movq -0xad0(%rbp), %rax
movq %rax, -0xac0(%rbp)
leaq -0x908(%rbp), %rdi
callq 0x5d50
movq %rax, -0xae8(%rbp)
leaq -0xae0(%rbp), %rdi
leaq -0xae8(%rbp), %rsi
callq 0x5d00
leaq -0xac0(%rbp), %rdi
leaq -0xae0(%rbp), %rsi
callq 0x5d20
testb $0x1, %al
jne 0x4b2b
jmp 0x4b81
leaq -0xac0(%rbp), %rdi
callq 0x5db0
movss 0x4(%rax), %xmm0
movss -0xa28(%rbp), %xmm1
addss %xmm1, %xmm0
movss %xmm0, -0xd8c(%rbp)
leaq -0x908(%rbp), %rdi
leaq -0xa2c(%rbp), %rsi
callq 0x6220
movq %rax, -0xd88(%rbp)
jmp 0x4b6c
movq -0xd88(%rbp), %rax
movss -0xd8c(%rbp), %xmm0
movss %xmm0, (%rax)
jmp 0x4bd9
leaq -0xaf0(%rbp), %rdi
leaq -0xa2c(%rbp), %rsi
leaq -0xa28(%rbp), %rdx
callq 0x61f0
jmp 0x4b9d
leaq -0x908(%rbp), %rdi
leaq -0xaf0(%rbp), %rsi
callq 0x61b0
movb %dl, -0xd99(%rbp)
movq %rax, -0xd98(%rbp)
jmp 0x4bbf
movb -0xd99(%rbp), %al
movq -0xd98(%rbp), %rcx
movq %rcx, -0xb00(%rbp)
movb %al, -0xaf8(%rbp)
jmp 0x4bdb
leaq -0xa50(%rbp), %rdi
callq 0x2160
leaq -0xa18(%rbp), %rdi
callq 0x2160
jmp 0x4bf5
jmp 0x439c
leaq -0x908(%rbp), %rdi
callq 0x5c80
addq $0x1, %rax
movslq -0x274(%rbp), %rcx
cmpq %rcx, %rax
jbe 0x4c42
leaq -0x8d0(%rbp), %rdi
leaq -0x908(%rbp), %rsi
callq 0x5b20
jmp 0x4c2b
leaq -0x8a0(%rbp), %rdi
leaq -0x8d4(%rbp), %rsi
callq 0x5ab0
jmp 0x4c40
jmp 0x4c42
cmpl $-0x1, -0x270(%rbp)
je 0x4e61
movl -0x8d8(%rbp), %eax
cmpl -0x270(%rbp), %eax
jle 0x4e61
movq 0x15368(%rip), %rdi     # 0x19fd0
leaq 0xc643(%rip), %rsi      # 0x112b2
callq 0x2200
jmp 0x4c76
leaq -0xb18(%rbp), %rdi
leaq -0x8d0(%rbp), %rsi
callq 0x62c0
jmp 0x4c8b
leaq -0xb30(%rbp), %rdi
leaq -0x8a0(%rbp), %rsi
callq 0x63b0
jmp 0x4ca0
movss -0x278(%rbp), %xmm0
leaq -0xb18(%rbp), %rdi
leaq -0xb30(%rbp), %rsi
leaq -0x8b8(%rbp), %rdx
leaq -0x888(%rbp), %rcx
callq 0x3040
jmp 0x4ccb
leaq -0xb30(%rbp), %rdi
callq 0x5c00
leaq -0xb18(%rbp), %rdi
callq 0x64a0
leaq -0x8d0(%rbp), %rdi
callq 0x5e10
leaq -0x8a0(%rbp), %rdi
callq 0x6500
leaq -0xb48(%rbp), %rdi
leaq -0x888(%rbp), %rsi
callq 0x6520
jmp 0x4d10
leaq -0xb60(%rbp), %rdi
leaq -0x8b8(%rbp), %rsi
callq 0x6610
jmp 0x4d25
movl -0x27c(%rbp), %edx
movss -0x280(%rbp), %xmm0
leaq -0xb48(%rbp), %rdi
leaq -0xb60(%rbp), %rsi
leaq -0x858(%rbp), %rcx
leaq -0x870(%rbp), %r8
callq 0x25e0
jmp 0x4d56
leaq -0xb60(%rbp), %rdi
callq 0x6700
leaq -0xb48(%rbp), %rdi
callq 0x6760
leaq -0x888(%rbp), %rdi
callq 0x67c0
leaq -0x8b8(%rbp), %rdi
callq 0x67e0
leaq -0x858(%rbp), %rdi
callq 0x59f0
movq %rax, -0xda8(%rbp)
leaq -0x870(%rbp), %rdi
callq 0x56f0
movq %rax, %rcx
movq -0xda8(%rbp), %rax
cmpq %rcx, %rax
je 0x4e57
leaq 0xc4f5(%rip), %rdi      # 0x112b4
leaq 0xc56c(%rip), %rsi      # 0x11332
callq 0x2580
jmp 0x4dcd
movl $0x1, %edi
callq 0x22c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x4e09
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0xb30(%rbp), %rdi
callq 0x5c00
leaq -0xb18(%rbp), %rdi
callq 0x64a0
jmp 0x4e8a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x4e49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0xb60(%rbp), %rdi
callq 0x6700
leaq -0xb48(%rbp), %rdi
callq 0x6760
jmp 0x4e8a
movl $0x0, -0x8d8(%rbp)
leaq -0x950(%rbp), %rdi
callq 0x2160
leaq -0x930(%rbp), %rdi
callq 0x2160
leaq -0x908(%rbp), %rdi
callq 0x6800
jmp 0x4300
leaq -0x950(%rbp), %rdi
callq 0x2160
leaq -0x930(%rbp), %rdi
callq 0x2160
leaq -0x908(%rbp), %rdi
callq 0x6800
jmp 0x560c
jmp 0x4eb5
leaq -0x8d0(%rbp), %rdi
callq 0x5770
cmpq $0x0, %rax
jne 0x4ee3
leaq 0xc41e(%rip), %rdi      # 0x112ec
leaq 0xc45d(%rip), %rsi      # 0x11332
callq 0x2580
jmp 0x4edc
xorl %edi, %edi
callq 0x22c0
cmpl $-0x1, -0x270(%rbp)
jne 0x5106
movq 0x150d9(%rip), %rdi     # 0x19fd0
leaq 0xc407(%rip), %rsi      # 0x11305
callq 0x2200
jmp 0x4f05
leaq -0xb78(%rbp), %rdi
leaq -0x8d0(%rbp), %rsi
callq 0x62c0
jmp 0x4f1a
leaq -0xb90(%rbp), %rdi
leaq -0x8a0(%rbp), %rsi
callq 0x63b0
jmp 0x4f2f
movss -0x278(%rbp), %xmm0
leaq -0xb78(%rbp), %rdi
leaq -0xb90(%rbp), %rsi
leaq -0x8b8(%rbp), %rdx
leaq -0x888(%rbp), %rcx
callq 0x3040
jmp 0x4f5a
leaq -0xb90(%rbp), %rdi
callq 0x5c00
leaq -0xb78(%rbp), %rdi
callq 0x64a0
leaq -0x8d0(%rbp), %rdi
callq 0x5e10
leaq -0x8a0(%rbp), %rdi
callq 0x6500
movq 0x1503f(%rip), %rdi     # 0x19fd0
leaq 0xc389(%rip), %rsi      # 0x11321
callq 0x2200
jmp 0x4f9f
leaq -0xba8(%rbp), %rdi
leaq -0x888(%rbp), %rsi
callq 0x6520
jmp 0x4fb4
leaq -0xbc0(%rbp), %rdi
leaq -0x8b8(%rbp), %rsi
callq 0x6610
jmp 0x4fc9
movl -0x27c(%rbp), %edx
movss -0x280(%rbp), %xmm0
leaq -0xba8(%rbp), %rdi
leaq -0xbc0(%rbp), %rsi
leaq -0x858(%rbp), %rcx
leaq -0x870(%rbp), %r8
callq 0x25e0
jmp 0x4ffa
leaq -0xbc0(%rbp), %rdi
callq 0x6700
leaq -0xba8(%rbp), %rdi
callq 0x6760
leaq -0x888(%rbp), %rdi
callq 0x67c0
leaq -0x8b8(%rbp), %rdi
callq 0x67e0
leaq -0x858(%rbp), %rdi
callq 0x59f0
movq %rax, -0xdb0(%rbp)
leaq -0x870(%rbp), %rdi
callq 0x56f0
movq %rax, %rcx
movq -0xdb0(%rbp), %rax
cmpq %rcx, %rax
je 0x5101
leaq 0xc251(%rip), %rdi      # 0x112b4
leaq 0xc2c8(%rip), %rsi      # 0x11332
callq 0x2580
jmp 0x5071
movl $0x1, %edi
callq 0x22c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x50ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0xb90(%rbp), %rdi
callq 0x5c00
leaq -0xb78(%rbp), %rdi
callq 0x64a0
jmp 0x560c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x50f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0xbc0(%rbp), %rdi
callq 0x6700
leaq -0xba8(%rbp), %rdi
callq 0x6760
jmp 0x560c
jmp 0x5301
movq 0x14ec3(%rip), %rdi     # 0x19fd0
leaq 0xc20c(%rip), %rsi      # 0x11320
callq 0x2200
jmp 0x511b
leaq -0xbd8(%rbp), %rdi
callq 0x6000
leaq -0xbf0(%rbp), %rdi
callq 0x6020
leaq -0xc08(%rbp), %rdi
leaq -0x858(%rbp), %rsi
callq 0x6520
jmp 0x5148
leaq -0xc20(%rbp), %rdi
leaq -0x870(%rbp), %rsi
callq 0x6610
jmp 0x515d
movl -0x27c(%rbp), %edx
movss -0x280(%rbp), %xmm0
leaq -0xc08(%rbp), %rdi
leaq -0xc20(%rbp), %rsi
leaq -0xbd8(%rbp), %rcx
leaq -0xbf0(%rbp), %r8
callq 0x25e0
jmp 0x518e
leaq -0xc20(%rbp), %rdi
callq 0x6700
leaq -0xc08(%rbp), %rdi
callq 0x6760
leaq -0x858(%rbp), %rdi
movq %rdi, -0xdb8(%rbp)
callq 0x67c0
leaq -0x870(%rbp), %rdi
callq 0x67e0
leaq -0xbd8(%rbp), %rdi
callq 0x59f0
movq -0xdb8(%rbp), %rdi
movq %rax, %rsi
callq 0x5960
jmp 0x51e2
leaq -0x858(%rbp), %rdi
leaq -0xbd8(%rbp), %rsi
callq 0x6820
jmp 0x51f7
leaq -0xbf0(%rbp), %rdi
callq 0x56f0
movq %rax, %rsi
leaq -0x870(%rbp), %rdi
callq 0x5a20
jmp 0x5214
leaq -0x870(%rbp), %rdi
leaq -0xbf0(%rbp), %rsi
callq 0x6a70
jmp 0x5229
leaq -0x858(%rbp), %rdi
callq 0x59f0
movq %rax, -0xdc0(%rbp)
leaq -0x870(%rbp), %rdi
callq 0x56f0
movq %rax, %rcx
movq -0xdc0(%rbp), %rax
cmpq %rcx, %rax
je 0x52ca
leaq 0xc056(%rip), %rdi      # 0x112b4
leaq 0xc0cd(%rip), %rsi      # 0x11332
callq 0x2580
jmp 0x526c
movl $0x1, %edi
callq 0x22c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x52e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
jmp 0x52bc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x268(%rbp)
movl %eax, -0x26c(%rbp)
leaq -0xc20(%rbp), %rdi
callq 0x6700
leaq -0xc08(%rbp), %rdi
callq 0x6760
jmp 0x52e4
leaq -0xbf0(%rbp), %rdi
callq 0x6700
leaq -0xbd8(%rbp), %rdi
callq 0x6760
jmp 0x5301
leaq -0xbf0(%rbp), %rdi
callq 0x6700
leaq -0xbd8(%rbp), %rdi
callq 0x6760
jmp 0x560c
jmp 0x5303
movl $0x0, -0xc24(%rbp)
movslq -0xc24(%rbp), %rax
movq %rax, -0xdc8(%rbp)
leaq -0x870(%rbp), %rdi
callq 0x56f0
movq %rax, %rcx
movq -0xdc8(%rbp), %rax
cmpq %rcx, %rax
jae 0x553d
movl -0xc24(%rbp), %esi
leaq -0x260(%rbp), %rdi
callq 0x23e0
movq %rax, -0xdd0(%rbp)
jmp 0x5355
movq -0xdd0(%rbp), %rdi
leaq 0xbfd0(%rip), %rsi      # 0x11333
callq 0x2200
jmp 0x536a
movl $0x0, -0xc28(%rbp)
movslq -0xc28(%rbp), %rax
movq %rax, -0xdd8(%rbp)
movslq -0xc24(%rbp), %rsi
leaq -0x870(%rbp), %rdi
callq 0x5750
movq %rax, %rdi
callq 0x5770
movq %rax, %rcx
movq -0xdd8(%rbp), %rax
cmpq %rcx, %rax
jae 0x5512
movslq -0xc24(%rbp), %rsi
leaq -0x870(%rbp), %rdi
movq %rdi, -0xdf8(%rbp)
callq 0x5750
movq %rax, %rdi
movslq -0xc28(%rbp), %rsi
callq 0x5b90
movq %rax, %rdi
callq 0x5cd0
movq %rax, -0xc38(%rbp)
leaq -0xc30(%rbp), %rdi
movq %rdi, -0xde8(%rbp)
leaq -0xc38(%rbp), %rsi
callq 0x5d00
movq -0xdf8(%rbp), %rdi
movslq -0xc24(%rbp), %rsi
callq 0x5750
movq %rax, %rdi
movslq -0xc28(%rbp), %rsi
callq 0x5b90
movq %rax, %rdi
callq 0x5d50
movq %rax, -0xc48(%rbp)
leaq -0xc40(%rbp), %rdi
movq %rdi, -0xdf0(%rbp)
leaq -0xc48(%rbp), %rsi
callq 0x5d00
movq -0xdf0(%rbp), %rsi
movq -0xde8(%rbp), %rdi
callq 0x5d20
movq -0xde8(%rbp), %rdi
callq 0x5de0
movslq -0xc24(%rbp), %rsi
leaq -0x858(%rbp), %rdi
callq 0x5940
movq %rax, %rdi
movslq -0xc28(%rbp), %rsi
callq 0x58f0
movl (%rax), %esi
leaq -0x260(%rbp), %rdi
callq 0x23e0
movq %rax, -0xde0(%rbp)
jmp 0x54a5
movq -0xde0(%rbp), %rdi
leaq 0xbe81(%rip), %rsi      # 0x11334
callq 0x2200
movq %rax, -0xe00(%rbp)
jmp 0x54c1
leaq -0xc30(%rbp), %rdi
callq 0x5db0
movq -0xe00(%rbp), %rdi
movss 0x4(%rax), %xmm0
callq 0x2190
movq %rax, -0xe08(%rbp)
jmp 0x54e7
movq -0xe08(%rbp), %rdi
leaq 0xbe41(%rip), %rsi      # 0x11336
callq 0x2200
jmp 0x54fc
jmp 0x54fe
movl -0xc28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc28(%rbp)
jmp 0x5374
leaq 0xbe18(%rip), %rsi      # 0x11331
leaq -0x260(%rbp), %rdi
callq 0x2200
jmp 0x5527
jmp 0x5529
movl -0xc24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc24(%rbp)
jmp 0x530d
movq 0x14a7c(%rip), %rsi     # 0x19fc0
leaq -0x260(%rbp), %rdi
callq 0x2250
jmp 0x5552
leaq -0x8d0(%rbp), %rdi
callq 0x64a0
leaq -0x8b8(%rbp), %rdi
callq 0x6700
leaq -0x8a0(%rbp), %rdi
callq 0x5c00
leaq -0x888(%rbp), %rdi
callq 0x6760
leaq -0x870(%rbp), %rdi
callq 0x6700
leaq -0x858(%rbp), %rdi
callq 0x6760
leaq -0x760(%rbp), %rdi
callq 0x2090
leaq -0x558(%rbp), %rdi
callq 0x2090
leaq -0x350(%rbp), %rdi
callq 0x6cc0
leaq -0x2f0(%rbp), %rdi
callq 0x2160
leaq -0x2c8(%rbp), %rdi
callq 0x2160
leaq -0x2a0(%rbp), %rdi
callq 0x2160
leaq -0x260(%rbp), %rdi
callq 0x2360
leaq -0x50(%rbp), %rdi
callq 0x2160
leaq -0x30(%rbp), %rdi
callq 0x2160
movl -0x4(%rbp), %eax
addq $0xe10, %rsp            # imm = 0xE10
popq %rbp
retq
leaq -0x8d0(%rbp), %rdi
callq 0x64a0
leaq -0x8b8(%rbp), %rdi
callq 0x6700
leaq -0x8a0(%rbp), %rdi
callq 0x5c00
leaq -0x888(%rbp), %rdi
callq 0x6760
leaq -0x870(%rbp), %rdi
callq 0x6700
leaq -0x858(%rbp), %rdi
callq 0x6760
leaq -0x760(%rbp), %rdi
callq 0x2090
leaq -0x558(%rbp), %rdi
callq 0x2090
leaq -0x350(%rbp), %rdi
callq 0x6cc0
leaq -0x2f0(%rbp), %rdi
callq 0x2160
leaq -0x2c8(%rbp), %rdi
callq 0x2160
leaq -0x2a0(%rbp), %rdi
callq 0x2160
leaq -0x260(%rbp), %rdi
callq 0x2360
leaq -0x50(%rbp), %rdi
callq 0x2160
leaq -0x30(%rbp), %rdi
callq 0x2160
movq -0x268(%rbp), %rdi
callq 0x23f0
nopw %cs:(%rax,%rax)