// File: /workspace/github_cpp_makefile_star2_O2/IdelCoder[P]PTransE-ag/Test_TransE_path.cpp
// Function: Test::run()
void run()
    {
		// 读取关系和实体的向量
        FILE* f1 = fopen(("relation2vec.txt"+version).c_str(),"r");
        FILE* f3 = fopen(("entity2vec.txt"+version).c_str(),"r");
        cout<<relation_num<<' '<<entity_num<<endl;
        int relation_num_fb=relation_num;
        relation_vec.resize(relation_num_fb*2);
        for (int i=0; i<relation_num_fb*2;i++)
        {
        //	int tmp;
        //	fscanf(f1,"%d",&tmp);
            relation_vec[i].resize(n);
            for (int ii=0; ii<n; ii++)
                fscanf(f1,"%lf",&relation_vec[i][ii]);
        }
        entity_vec.resize(entity_num);
        for (int i=0; i<entity_num;i++)
        {
        //	int tmp;
        	//fscanf(f3,"%d",&tmp);
            entity_vec[i].resize(n);
            for (int ii=0; ii<n; ii++)
                fscanf(f3,"%lf",&entity_vec[i][ii]);
            if (vec_len(entity_vec[i])-1>1e-3)
            	cout<<"wrong_entity"<<i<<' '<<vec_len(entity_vec[i])<<endl;
        }
        fclose(f1);
        fclose(f3);
		
		
		
		double lsum=0 ,lsum_filter= 0;
		double rsum = 0,rsum_filter=0;
		double mid_sum = 0,mid_sum_filter=0;
		double lp_n=0,lp_n_filter = 0;
		double rp_n=0,rp_n_filter = 0;
		double mid_p_n=0,mid_p_n_filter = 0;
		map<int,double> lsum_r,lsum_filter_r;
		map<int,double> rsum_r,rsum_filter_r;
		map<int,double> mid_sum_r,mid_sum_filter_r;
		map<int,double> lp_n_r,lp_n_filter_r;
		map<int,double> rp_n_r,rp_n_filter_r;
		map<int,double> mid_p_n_r,mid_p_n_filter_r;
		map<int,int> rel_num;

		// 各度结点的头实体预测表现
		// map<度数, tuple<累计排名，累计Hits@N数，总数> >
		map<int, tuple<long, int, int> > hd_raw;
		map<int, tuple<long, int, int> > td_raw;
		map<int, tuple<long, int, int> > hd_filter;
		map<int, tuple<long, int, int> > td_filter;
		
		
		double l_one2one=0,r_one2one=0,one2one_num=0;
        double l_n2one=0,r_n2one=0,n2one_num=0;
        double l_one2n=0,r_one2n=0,one2n_num=0;
        double l_n2n=0,r_n2n=0,n2n_num=0;
		

		int hit_n = 1;
		// e1_e2是top500的实体对（这是测试结果）
		//FILE* f_e1_e2 = fopen("../e1_e2.txt","w");
		map<pair<int,int>,int> e1_e2;
		for (int testid = 0; testid<fb_l.size()/2; testid+=1)
		{
			int h = fb_h[testid*2];
			int l = fb_l[testid*2];
			int rel = fb_r[testid*2];
			rel_num[rel]+=1;
			// 存储候选实体得分
			vector<pair<int,double> > a;
			
            if (rel_type[rel]==0)
                one2one_num+=1;
            else
            if (rel_type[rel]==1)
                n2one_num+=1;
            else
            if (rel_type[rel]==2)
                one2n_num+=1;
            else
                n2n_num+=1;
			

			double ttt=0;
			int filter = 0;
			// 头实体预测  
			used = "0";
			for (int i=0; i<entity_num; i++)
			{
				// 计算损失值（使用TransE的能量函数）(head prediction)
				double sum = calc_sum(i,l,rel);
				a.push_back(make_pair(i,sum));
			}

			int rerank_num = 500;
			// 递减排序
			sort(a.begin(),a.end(),cmp);
			used = "1";
			for (int i=a.size()-1; i>=a.size()-rerank_num; i--)
			{
				// 计算损失值（PTransE的能量函数）(head prediction)
				double sum = calc_sum(a[i].first,l,rel);
				a[i].second = sum;
			}
			
			sort(a.begin(),a.end(),cmp);
			for (int i=a.size()-1; i>=0; i--)
			{
				if (a.size()-i<=rerank_num)
				    //保存top 500的实体，实际没啥用
					e1_e2[make_pair(a[i].first,l)] = 1;
				if (ok[make_pair(a[i].first,rel)].count(l)>0)
				    // 无效的变量
					ttt++;
			    if (ok[make_pair(a[i].first,rel)].count(l)==0)
			    	// filter rank
					filter+=1;
				
				if (a[i].first ==h)
				{
					// 当前答案是正确答案
					lsum+=a.size()-i;
					lsum_filter+=filter+1;
					// 作用未知
					lsum_r[rel]+=a.size()-i;
					lsum_filter_r[rel]+=filter+1;

					// 答案的度
					int ans_degree = entity_degree[h];
					if(hd_raw.count(ans_degree) == 0) {
						auto tup_raw = make_tuple(a.size()-i, 0, 1);
						auto tup_filter = make_tuple(filter+1, 0, 1);
						hd_raw[ans_degree] = tup_raw;
						hd_filter[ans_degree] = tup_filter;
					} else {
						get<0>(hd_raw[ans_degree]) += a.size()-i;
						get<0>(hd_filter[ans_degree]) += filter+1;
						get<2>(hd_raw[ans_degree]) ++;
						get<2>(hd_filter[ans_degree])++;
					}
					if (a.size()-i<=hit_n)
					{
						// 排名小于hit_n
						lp_n+=1;
						lp_n_r[rel]+=1;
						get<1>(hd_raw[ans_degree]) ++;
					}
					if (filter<hit_n)
					{
						get<1>(hd_filter[ans_degree]) ++;
						// 关系类型细分的情况
						// 考虑的是filter过后的
						lp_n_filter+=1;
						lp_n_filter_r[rel]+=1;
						if (rel_type[rel]==0)
                            l_one2one+=1;
                        else
                        if (rel_type[rel]==1)
                            l_n2one+=1;
                        else
                        if (rel_type[rel]==2)
                            l_one2n+=1;
                        else
                            l_n2n+=1;
						
					}
					//if (a.size()-i>20)
					//	break;
				}
			}
			a.clear();
			// tail prediction
			used = "0";
			for (int i=0; i<entity_num; i++)
			{
				double sum = calc_sum(h,i,rel);
				a.push_back(make_pair(i,sum));
			}
			sort(a.begin(),a.end(),cmp);
			used = "1";
			sort(a.begin(),a.end(),cmp);
			for (int i=a.size()-1; i>=a.size()-rerank_num; i--)
			{
				double sum = calc_sum(h,a[i].first,rel);
				a[i].second = sum;
			}

			sort(a.begin(),a.end(),cmp);
			ttt=0;
			filter=0;
			for (int i=a.size()-1; i>=0; i--)
			{
				if (a.size()-i<=rerank_num)
					e1_e2[make_pair(h,a[i].first)] = 1;
				if (ok[make_pair(h,rel)].count(a[i].first)>0)
					ttt++;
				if (ok[make_pair(h,rel)].count(a[i].first)==0)
			    	filter+=1;
				if (a[i].first==l)
				{
					rsum+=a.size()-i;
					rsum_filter+=filter+1;
					rsum_r[rel]+=a.size()-i;
					rsum_filter_r[rel]+=filter+1;
					// 答案的度
					int ans_degree = entity_degree[l];
					if(td_raw.count(ans_degree) == 0) {
						auto tup_raw = make_tuple(a.size()-i, 0, 1);
						auto tup_filter = make_tuple(filter+1, 0, 1);
						td_raw[ans_degree] = tup_raw;
						td_filter[ans_degree] = tup_filter;
					} else {
						get<0>(td_raw[ans_degree]) += a.size()-i;
						get<0>(td_filter[ans_degree]) += filter+1;
						get<2>(td_raw[ans_degree]) ++;
						get<2>(td_filter[ans_degree])++;
					}
					if (a.size()-i<=hit_n)
					{
						rp_n+=1;
						rp_n_r[rel]+=1;
						get<1>(td_raw[ans_degree])++;
					}
					if (filter<hit_n)
					{
						get<1>(td_filter[ans_degree])++;
						rp_n_filter+=1;
						rp_n_filter_r[rel]+=1;
						;
												if (rel_type[rel]==0)
						                            r_one2one+=1;
						                        else
						                        if (rel_type[rel]==1)
						                            r_n2one+=1;
						                        else
						                        if (rel_type[rel]==2)
						                            r_one2n+=1;
						                        else
						                            r_n2n+=1;
						
					}
					//if (a.size()-i>20)
					//	break;
				}
			}
			a.clear();
			// relation prediction
			for (int i=0; i<relation_num; i++)
			{
				double sum = 0;
				sum+=calc_sum(h,l,i);
				a.push_back(make_pair(i,sum));
			}
			sort(a.begin(),a.end(),cmp);
			ttt=0;
			filter=0;
			for (int i=a.size()-1; i>=0; i--)
			{
				if (ok[make_pair(h,a[i].first)].count(l)>0)
					ttt++;
				if (ok[make_pair(h,a[i].first)].count(l)==0)
			    	filter+=1;
				if (a[i].first==rel)
				{
					mid_sum+=a.size()-i;
					mid_sum_filter+=filter+1;
					mid_sum_r[rel]+=a.size()-i;
					mid_sum_filter_r[rel]+=filter+1;
					if (a.size()-i<=hit_n)
					{
						mid_p_n+=1;
						mid_p_n_r[rel]+=1;
					}
					if (filter<hit_n)
					{
						mid_p_n_filter+=1;
						mid_p_n_filter_r[rel]+=1;
					}
					break;
				}
			}
			if (testid%100==0)
			{
				// testid head预测平均排名 head预测hits@n平均值 tail预测平均排名 tail预测hits@n平均值
				// filter版本对应的结果
				cout<<testid<<":"<<"\t"<<lsum/(testid+1)<<' '<<lp_n/(testid+1)<<' '
				<<rsum/(testid+1)<<' '<<rp_n/(testid+1)<<"\t"
				<<lsum_filter/(testid+1)<<' '<<lp_n_filter/(testid+1)<<' '
				<<rsum_filter/(testid+1)<<' '<<rp_n_filter/(testid+1)<<endl;
				// relation预测平均排名 relation预测平均hits （filter）relation预测平均排名 （filter）relation预测平均hits
				cout<<"\t"<<mid_sum/(testid+1)<<' '<<mid_p_n/(testid+1)<<"\t"<<mid_sum_filter/(testid+1)<<' '<<mid_p_n_filter/(testid+1)<<endl;
				// head预测的关系类型数量
               cout<<l_one2one<<" "<<l_one2n<<" "<<l_n2one<<' '<<l_n2n<<endl;
			   // tail预测的关系类型数量
               cout<<r_one2one<<" "<<r_one2n<<" "<<r_n2one<<' '<<r_n2n<<endl;
			   // 各个类型的关系数量
               cout<<one2one_num<<" "<<one2n_num<<" "<<n2one_num<<' '<<n2n_num<<endl;
			   // head prediction和tail prediction的各类细分关系的hits@n
               cout<<l_one2one/one2one_num<<" "<<l_one2n/one2n_num<<" "<<l_n2one/n2one_num<<' '<<l_n2n/n2n_num<<endl;
               cout<<r_one2one/one2one_num<<" "<<r_one2n/one2n_num<<" "<<r_n2one/n2one_num<<' '<<r_n2n/n2n_num<<endl;
				
			}
		}
	//	for (map<pair<int,int>,int>::iterator it = e1_e2.begin(); it!=e1_e2.end(); it++)
	//		fprintf(f_e1_e2,"%d %d\n",it->first.first,it->first.second);
	//	fclose(f_e1_e2);
	//	cout<<"\t"<<mid_sum/(fb_l.size()/2+1)<<' '<<mid_p_n/(fb_l.size()/2+1)<<"\t"<<mid_sum_filter/(fb_l.size()/2+1)<<' '<<mid_p_n_filter/(fb_l.size()/2+1)<<endl;
	//	cout<<"left:"<<lsum/fb_l.size()<<'\t'<<lp_n/fb_l.size()<<"\t"<<lsum_filter/fb_l.size()<<'\t'<<lp_n_filter/fb_l.size()<<endl;
	//	cout<<"right:"<<rsum/fb_r.size()<<'\t'<<rp_n/fb_r.size()<<'\t'<<rsum_filter/fb_r.size()<<'\t'<<rp_n_filter/fb_r.size()<<endl;
		/*for (int rel=0; rel<relation_num; rel++)
		{
			int num = rel_num[rel];
			cout<<"rel:"<<id2relation[rel]<<' '<<num<<endl;
			cout<<"left:"<<lsum_r[rel]/num<<'\t'<<lp_n_r[rel]/num<<"\t"<<lsum_filter_r[rel]/num<<'\t'<<lp_n_filter_r[rel]/num<<endl;
			cout<<"right:"<<rsum_r[rel]/num<<'\t'<<rp_n_r[rel]/num<<'\t'<<rsum_filter_r[rel]/num<<'\t'<<rp_n_filter_r[rel]/num<<endl;
			cout<<"mid:"<<mid_sum_r[rel]/num<<'\t'<<mid_p_n_r[rel]/num<<'\t'<<mid_sum_filter_r[rel]/num<<'\t'<<mid_p_n_filter_r[rel]/num<<endl;
		}*/
		// 保存各度的运行结果
		// 分别是hd_raw, hd_filter, td_raw, td_filter
		FILE* f_hd_raw = fopen("hd_raw.csv","w");
		for(auto iter = hd_raw.begin(); iter != hd_raw.end(); iter++) {
			fprintf(f_hd_raw, "%d,%ld,%ld,%d\n", iter->first,get<0>(iter->second),get<1>(iter->second),get<2>(iter->second));
		}
		fclose(f_hd_raw);
		FILE* f_hd_filter = fopen("hd_filter.csv","w");
		for(auto iter = hd_filter.begin(); iter != hd_filter.end(); iter++) {
			fprintf(f_hd_filter, "%d,%ld,%ld,%d\n", iter->first,get<0>(iter->second),get<1>(iter->second),get<2>(iter->second));
		}
		fclose(f_hd_filter);
		FILE* f_td_raw = fopen("td_raw.csv","w");
		for(auto iter = td_raw.begin(); iter != td_raw.end(); iter++) {
			fprintf(f_td_raw, "%d,%ld,%ld,%d\n", iter->first,get<0>(iter->second),get<1>(iter->second),get<2>(iter->second));
		}
		fclose(f_td_raw);
		FILE* f_td_filter = fopen("td_filter.csv","w");
		for(auto iter = td_filter.begin(); iter != td_filter.end(); iter++) {
			fprintf(f_td_filter, "%d,%ld,%ld,%d\n", iter->first,get<0>(iter->second),get<1>(iter->second),get<2>(iter->second));
		}
		fclose(f_td_filter);
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x4e8, %rsp            # imm = 0x4E8
movq %rdi, %rbx
leaq 0x625c(%rip), %rsi      # 0xa1d7
leaq 0xc2ce(%rip), %r15      # 0x10250
leaq 0x218(%rsp), %r12
movq %r12, %rdi
movq %r15, %rdx
callq 0x6b07
movq (%r12), %rdi
leaq 0x6160(%rip), %r13      # 0xa100
movq %r13, %rsi
callq 0x21e0
movq %rax, %r14
movq %r12, %rdi
callq 0x2368
leaq 0x622e(%rip), %rsi      # 0xa1e8
leaq 0x218(%rsp), %r12
movq %r12, %rdi
movq %r15, %rdx
callq 0x6b07
movq (%r12), %rdi
movq %r13, %rsi
callq 0x21e0
movq %rax, %r15
movq %r12, %rdi
callq 0x2368
movl 0xc46e(%rip), %esi      # 0x10458
movq 0xbfe7(%rip), %rdi      # 0xffd8
callq 0x22d0
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x21d0
movl 0xc455(%rip), %esi      # 0x1045c
movq %rax, %rdi
callq 0x22d0
movq %rax, %rdi
callq 0x20f0
movslq 0xc43a(%rip), %r12      # 0x10458
addq %r12, %r12
movq %rbx, 0x40(%rsp)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x6b7e
testl %r12d, %r12d
movl $0x0, %eax
cmovgl %r12d, %eax
movq %rax, 0x48(%rsp)
leaq 0x6170(%rip), %r12      # 0xa1b9
xorl %eax, %eax
cmpq 0x48(%rsp), %rax
je 0x40b1
movq %rax, 0x38(%rsp)
imulq $0x18, %rax, %r13
movq 0x40(%rsp), %rax
movq (%rax), %rdi
addq %r13, %rdi
movslq 0xc157(%rip), %rsi      # 0x101c4
callq 0x6bb4
xorl %ebx, %ebx
xorl %ebp, %ebp
movslq 0xc147(%rip), %rax      # 0x101c4
cmpq %rax, %rbp
jge 0x40a7
movq 0x40(%rsp), %rax
movq (%rax), %rax
movq (%rax,%r13), %rdx
addq %rbx, %rdx
movq %r14, %rdi
movq %r12, %rsi
xorl %eax, %eax
callq 0x2310
incq %rbp
addq $0x8, %rbx
jmp 0x4076
movq 0x38(%rsp), %rax
incq %rax
jmp 0x404b
movq 0x40(%rsp), %rax
leaq 0x18(%rax), %r12
movslq 0xc39b(%rip), %rsi      # 0x1045c
movq %r12, %rdi
callq 0x6b7e
xorl %r13d, %r13d
movslq 0xc389(%rip), %rax      # 0x1045c
cmpq %rax, %r13
jge 0x41e7
movq %r13, 0x38(%rsp)
imulq $0x18, %r13, %rbp
movq (%r12), %rdi
addq %rbp, %rdi
movslq 0xc0d1(%rip), %rsi      # 0x101c4
callq 0x6bb4
xorl %ebx, %ebx
xorl %r13d, %r13d
movslq 0xc0c0(%rip), %rax      # 0x101c4
movq (%r12), %rsi
addq %rbp, %rsi
cmpq %rax, %r13
jge 0x4130
movq (%rsi), %rdx
addq %rbx, %rdx
movq %r15, %rdi
leaq 0x6099(%rip), %rsi      # 0xa1b9
xorl %eax, %eax
callq 0x2310
incq %r13
addq $0x8, %rbx
jmp 0x40fd
leaq 0x4d0(%rsp), %rbx
movq %rbx, %rdi
callq 0x6be6
movq %rbx, %rdi
callq 0x2850
addsd 0x5f20(%rip), %xmm0     # 0xa070
movsd %xmm0, 0x48(%rsp)
movq %rbx, %rdi
callq 0x5eea
movsd 0x48(%rsp), %xmm0
ucomisd 0x5f0c(%rip), %xmm0     # 0xa078
movq 0x38(%rsp), %r13
jbe 0x41df
movq 0xbe5e(%rip), %rdi      # 0xffd8
leaq 0x6076(%rip), %rsi      # 0xa1f7
callq 0x2190
movq %rax, %rdi
movl %r13d, %esi
callq 0x22d0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movq %rax, 0x48(%rsp)
addq (%r12), %rbp
leaq 0x248(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x6be6
movq %rbx, %rdi
callq 0x2850
movq 0x48(%rsp), %rdi
callq 0x22a0
movq %rax, %rdi
callq 0x20f0
leaq 0x248(%rsp), %rdi
callq 0x5eea
incq %r13
jmp 0x40cc
movq %r14, %rdi
callq 0x21a0
movq %r15, %rdi
callq 0x21a0
leaq 0x220(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x4a8(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x478(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x448(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x418(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x3e8(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x3b8(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x388(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x358(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x328(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x2f8(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x2c8(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x298(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x190(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x160(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x1f0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x1c0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x268(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
movq 0x40(%rsp), %r14
leaq 0xf0(%r14), %rbx
xorl %r12d, %r12d
leaq 0x8(%rsp), %rbp
xorpd %xmm0, %xmm0
movsd %xmm0, 0x68(%rsp)
movsd %xmm0, 0xb0(%rsp)
movsd %xmm0, 0x90(%rsp)
movsd %xmm0, 0x70(%rsp)
movsd %xmm0, 0xa0(%rsp)
movsd %xmm0, 0x80(%rsp)
movsd %xmm0, 0x60(%rsp)
movsd %xmm0, 0x88(%rsp)
movsd %xmm0, 0xa8(%rsp)
movsd %xmm0, 0x78(%rsp)
movsd %xmm0, 0x98(%rsp)
movsd %xmm0, 0xb8(%rsp)
movsd %xmm0, 0xc0(%rsp)
movsd %xmm0, 0xc8(%rsp)
movsd %xmm0, 0xd0(%rsp)
movsd %xmm0, 0xe0(%rsp)
movsd %xmm0, 0xd8(%rsp)
movsd %xmm0, 0xe8(%rsp)
movsd %xmm0, 0xf0(%rsp)
movsd %xmm0, 0xf8(%rsp)
movsd %xmm0, 0x108(%rsp)
movsd %xmm0, 0x110(%rsp)
movsd %xmm0, 0x118(%rsp)
movsd %xmm0, 0x48(%rsp)
movq %rbx, 0x138(%rsp)
movq 0x90(%r14), %rax
movq 0x98(%r14), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
shrq %rcx
cmpq %r12, %rcx
jbe 0x5740
movq 0x78(%r14), %rcx
movl (%rcx,%r12,8), %ecx
movl %ecx, 0x1c(%rsp)
movl (%rax,%r12,8), %eax
movl %eax, 0x18(%rsp)
movq 0xa8(%r14), %rax
movl (%rax,%r12,8), %eax
movl %eax, 0x4(%rsp)
leaq 0x290(%rsp), %rdi
leaq 0x4(%rsp), %rsi
callq 0x3dd2
incl (%rax)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x20(%rsp)
andq $0x0, 0x30(%rsp)
movslq 0x4(%rsp), %rax
movq 0xbcda(%rip), %rcx      # 0x10238
movl (%rcx,%rax,4), %eax
cmpl $0x2, %eax
je 0x459b
cmpl $0x1, %eax
je 0x4585
testl %eax, %eax
jne 0x45b1
movsd 0x78(%rsp), %xmm0
addsd 0x5ae3(%rip), %xmm0     # 0xa060
movsd %xmm0, 0x78(%rsp)
jmp 0x45c5
movsd 0x68(%rsp), %xmm0
addsd 0x5acd(%rip), %xmm0     # 0xa060
movsd %xmm0, 0x68(%rsp)
jmp 0x45c5
movsd 0x70(%rsp), %xmm0
addsd 0x5ab7(%rip), %xmm0     # 0xa060
movsd %xmm0, 0x70(%rsp)
jmp 0x45c5
movsd 0x60(%rsp), %xmm0
addsd 0x5aa1(%rip), %xmm0     # 0xa060
movsd %xmm0, 0x60(%rsp)
leaq 0xbc1c(%rip), %rdi      # 0x101e8
leaq 0x5c31(%rip), %rsi      # 0xa204
callq 0x2340
xorl %r13d, %r13d
cmpl 0xbe7a(%rip), %r13d     # 0x1045c
jge 0x4614
movl 0x18(%rsp), %edx
movl 0x4(%rsp), %ecx
movq %r14, %rdi
movl %r13d, %esi
callq 0x6c34
movl %r13d, 0x8(%rsp)
movsd %xmm0, 0x10(%rsp)
leaq 0x20(%rsp), %rdi
movq %rbp, %rsi
callq 0x7914
incl %r13d
jmp 0x45db
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
leaq -0x1cec(%rip), %rdx     # 0x2939
callq 0x7a6f
leaq 0xbbb7(%rip), %rdi      # 0x101e8
leaq 0x5a58(%rip), %rsi      # 0xa090
callq 0x2340
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq %rsi, %r15
subq %rdi, %r15
shrq $0x4, %r15
decl %r15d
movslq %r15d, %rbx
movq %rsi, %rax
subq %rdi, %rax
sarq $0x4, %rax
addq $-0x1f4, %rax           # imm = 0xFE0C
cmpq %rbx, %rax
ja 0x4695
shlq $0x4, %rbx
movl (%rdi,%rbx), %esi
movl 0x18(%rsp), %edx
movl 0x4(%rsp), %ecx
movq %r14, %rdi
callq 0x6c34
movq 0x20(%rsp), %rdi
movsd %xmm0, 0x8(%rdi,%rbx)
movq 0x28(%rsp), %rsi
jmp 0x4651
leaq -0x1d63(%rip), %rdx     # 0x2939
callq 0x7a6f
movq 0x138(%rsp), %rbx
movq %r12, 0x38(%rsp)
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
shrq $0x4, %rax
movl %eax, %r15d
xorl %r12d, %r12d
decq %r15
testl %r15d, %r15d
js 0x4ae8
movq 0x20(%rsp), %rax
movq 0x28(%rsp), %rcx
subq %rax, %rcx
sarq $0x4, %rcx
movl %r15d, %r13d
andl $0x7fffffff, %r13d      # imm = 0x7FFFFFFF
subq %r13, %rcx
cmpq $0x1f4, %rcx            # imm = 0x1F4
ja 0x472a
movq %r13, %rcx
shlq $0x4, %rcx
movl (%rax,%rcx), %eax
movl 0x18(%rsp), %ecx
shlq $0x20, %rcx
orq %rax, %rcx
movq %rcx, 0x8(%rsp)
leaq 0x260(%rsp), %rdi
movq %rbp, %rsi
callq 0x7270
movl $0x1, (%rax)
movq 0x20(%rsp), %rax
movq %r13, %rbp
shlq $0x4, %rbp
movl (%rax,%rbp), %eax
movl 0x4(%rsp), %ecx
shlq $0x20, %rcx
orq %rax, %rcx
movq %rcx, 0x8(%rsp)
movq %rbx, %rdi
leaq 0x8(%rsp), %rsi
callq 0x5fb6
movq %rax, %rdi
leaq 0x18(%rsp), %rsi
callq 0x72d6
movq 0x20(%rsp), %rax
movl (%rax,%rbp), %eax
movl 0x4(%rsp), %ecx
shlq $0x20, %rcx
orq %rax, %rcx
movq %rcx, 0x8(%rsp)
movq %rbx, %rdi
leaq 0x8(%rsp), %rsi
callq 0x5fb6
movq %rax, %rdi
leaq 0x18(%rsp), %rsi
callq 0x72d6
cmpq $0x1, %rax
adcl $0x0, %r12d
movq 0x20(%rsp), %rax
movl (%rax,%rbp), %ecx
cmpl 0x1c(%rsp), %ecx
leaq 0x8(%rsp), %rbp
jne 0x46c2
movq 0x28(%rsp), %rcx
subq %rax, %rcx
sarq $0x4, %rcx
subq %r13, %rcx
movq %rcx, %xmm0
punpckldq 0x5865(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x586d(%rip), %xmm0     # 0xa040
movapd %xmm0, 0x50(%rsp)
leaq 0x218(%rsp), %rdi
leaq 0x4(%rsp), %r14
movq %r14, %rsi
callq 0x72f0
movapd 0x50(%rsp), %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movsd (%rax), %xmm0
movapd %xmm1, 0x120(%rsp)
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
leaq 0x4a0(%rsp), %rdi
movq %r14, %rsi
callq 0x72f0
leal 0x1(%r12), %r14d
cvtsi2sd %r14d, %xmm1
movsd (%rax), %xmm0
movsd %xmm1, 0x100(%rsp)
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
leaq 0xbbdd(%rip), %rdi      # 0x10428
leaq 0x1c(%rsp), %rsi
callq 0x3dd2
movl (%rax), %eax
movl %eax, 0x8(%rsp)
leaq 0x188(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x733e
movq 0x20(%rsp), %rcx
movq %rcx, 0x50(%rsp)
movq 0x28(%rsp), %rbp
movl %r14d, %ecx
movq %rcx, 0x140(%rsp)
testq %rax, %rax
je 0x48f6
leaq 0x188(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
subq 0x50(%rsp), %rbp
sarq $0x4, %rbp
subq %r13, %rbp
addq %rbp, 0x8(%rax)
leaq 0x1e8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
movq 0x140(%rsp), %rcx
addq %rcx, 0x8(%rax)
leaq 0x188(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
incl (%rax)
leaq 0x1e8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
incl (%rax)
jmp 0x4945
leaq 0x188(%rsp), %rdi
leaq 0x8(%rsp), %r14
movq %r14, %rsi
callq 0x7358
subq 0x50(%rsp), %rbp
sarq $0x4, %rbp
subq %r13, %rbp
movq %rbp, 0x8(%rax)
movq $0x1, (%rax)
leaq 0x1e8(%rsp), %rdi
movq %r14, %rsi
callq 0x7358
movq 0x140(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq $0x1, (%rax)
leaq 0x4(%rsp), %rsi
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x4, %rax
subq %r13, %rax
cmpq $0x1, %rax
ja 0x49ad
movsd 0xe8(%rsp), %xmm0
addsd 0x56ee(%rip), %xmm0     # 0xa060
movsd %xmm0, 0xe8(%rsp)
leaq 0x3b0(%rsp), %rdi
callq 0x72f0
movsd (%rax), %xmm0
addsd 0x56cc(%rip), %xmm0     # 0xa060
movsd %xmm0, (%rax)
leaq 0x188(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
incl 0x4(%rax)
movq 0x40(%rsp), %r14
leaq 0x8(%rsp), %rbp
testl %r12d, %r12d
je 0x49f1
movsd 0x48(%rsp), %xmm0
addsd 0x120(%rsp), %xmm0
movsd %xmm0, 0x48(%rsp)
movsd 0x118(%rsp), %xmm0
addsd 0x100(%rsp), %xmm0
movsd %xmm0, 0x118(%rsp)
jmp 0x46c2
leaq 0x1e8(%rsp), %rdi
movq %rbp, %rsi
callq 0x7358
incl 0x4(%rax)
movsd 0xd8(%rsp), %xmm0
addsd 0x564b(%rip), %xmm0     # 0xa060
movsd %xmm0, 0xd8(%rsp)
leaq 0x380(%rsp), %rdi
leaq 0x4(%rsp), %rsi
callq 0x72f0
movsd (%rax), %xmm0
addsd 0x5624(%rip), %xmm0     # 0xa060
movsd %xmm0, (%rax)
movslq 0x4(%rsp), %rax
movq 0xb7ec(%rip), %rcx      # 0x10238
movl (%rcx,%rax,4), %eax
cmpl $0x2, %eax
movq 0x40(%rsp), %r14
je 0x4aa5
cmpl $0x1, %eax
leaq 0x8(%rsp), %rbp
je 0x4a86
testl %eax, %eax
jne 0x4ac9
movsd 0xb8(%rsp), %xmm0
addsd 0x55e8(%rip), %xmm0     # 0xa060
movsd %xmm0, 0xb8(%rsp)
jmp 0x49bc
movsd 0xa8(%rsp), %xmm0
addsd 0x55c9(%rip), %xmm0     # 0xa060
movsd %xmm0, 0xa8(%rsp)
jmp 0x49bc
movsd 0xb0(%rsp), %xmm0
addsd 0x55aa(%rip), %xmm0     # 0xa060
movsd %xmm0, 0xb0(%rsp)
leaq 0x8(%rsp), %rbp
jmp 0x49bc
movsd 0xa0(%rsp), %xmm0
addsd 0x5586(%rip), %xmm0     # 0xa060
movsd %xmm0, 0xa0(%rsp)
jmp 0x49bc
movq 0x20(%rsp), %rax
cmpq %rax, 0x28(%rsp)
je 0x4af9
movq %rax, 0x28(%rsp)
leaq 0xb6e8(%rip), %rdi      # 0x101e8
leaq 0x56fd(%rip), %rsi      # 0xa204
callq 0x2340
xorl %r13d, %r13d
cmpl 0xb946(%rip), %r13d     # 0x1045c
jge 0x4b48
movl 0x1c(%rsp), %esi
movl 0x4(%rsp), %ecx
movq %r14, %rdi
movl %r13d, %edx
callq 0x6c34
movl %r13d, 0x8(%rsp)
movsd %xmm0, 0x10(%rsp)
leaq 0x20(%rsp), %rdi
movq %rbp, %rsi
callq 0x7914
incl %r13d
jmp 0x4b0f
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
leaq -0x2220(%rip), %rdx     # 0x2939
callq 0x7a6f
leaq 0xb683(%rip), %rdi      # 0x101e8
leaq 0x5524(%rip), %rsi      # 0xa090
callq 0x2340
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
leaq -0x2249(%rip), %rdx     # 0x2939
callq 0x7a6f
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
movq %rsi, %r15
subq %rdi, %r15
shrq $0x4, %r15
decl %r15d
movslq %r15d, %rbx
movq %rsi, %rax
subq %rdi, %rax
sarq $0x4, %rax
addq $-0x1f4, %rax           # imm = 0xFE0C
cmpq %rbx, %rax
ja 0x4bdf
movl 0x1c(%rsp), %esi
shlq $0x4, %rbx
movl (%rdi,%rbx), %edx
movl 0x4(%rsp), %ecx
movq %r14, %rdi
callq 0x6c34
movq 0x20(%rsp), %rdi
movsd %xmm0, 0x8(%rdi,%rbx)
movq 0x28(%rsp), %rsi
jmp 0x4b9b
leaq -0x22ad(%rip), %rdx     # 0x2939
callq 0x7a6f
movq 0x138(%rsp), %rbx
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
shrq $0x4, %rax
movl %eax, %r13d
xorl %r12d, %r12d
decq %r13
testl %r13d, %r13d
js 0x502f
movq 0x20(%rsp), %rax
movq 0x28(%rsp), %rcx
subq %rax, %rcx
sarq $0x4, %rcx
movl %r13d, %r15d
andl $0x7fffffff, %r15d      # imm = 0x7FFFFFFF
subq %r15, %rcx
cmpq $0x1f4, %rcx            # imm = 0x1F4
ja 0x4c6a
movq %r15, %rcx
shlq $0x4, %rcx
movl 0x1c(%rsp), %edx
movl (%rax,%rcx), %eax
shlq $0x20, %rax
orq %rdx, %rax
movq %rax, 0x8(%rsp)
leaq 0x260(%rsp), %rdi
movq %rbp, %rsi
callq 0x7270
movl $0x1, (%rax)
movl 0x1c(%rsp), %eax
movl 0x4(%rsp), %ecx
shlq $0x20, %rcx
orq %rax, %rcx
movq %rcx, 0x8(%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x5fb6
movq %r15, %rbp
shlq $0x4, %rbp
movq 0x20(%rsp), %rsi
addq %rbp, %rsi
movq %rax, %rdi
callq 0x72d6
movl 0x1c(%rsp), %eax
movl 0x4(%rsp), %ecx
shlq $0x20, %rcx
orq %rax, %rcx
movq %rcx, 0x8(%rsp)
movq %rbx, %rdi
leaq 0x8(%rsp), %rsi
callq 0x5fb6
movq 0x20(%rsp), %rsi
addq %rbp, %rsi
movq %rax, %rdi
callq 0x72d6
cmpq $0x1, %rax
adcl $0x0, %r12d
movq 0x20(%rsp), %rax
movl (%rax,%rbp), %ecx
cmpl 0x18(%rsp), %ecx
leaq 0x8(%rsp), %rbp
jne 0x4c07
movq 0x28(%rsp), %rcx
subq %rax, %rcx
sarq $0x4, %rcx
subq %r15, %rcx
movq %rcx, %xmm0
punpckldq 0x5324(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x532c(%rip), %xmm0     # 0xa040
movapd %xmm0, 0x50(%rsp)
leaq 0x470(%rsp), %rdi
leaq 0x4(%rsp), %r14
movq %r14, %rsi
callq 0x72f0
movapd 0x50(%rsp), %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movsd (%rax), %xmm0
movapd %xmm1, 0x140(%rsp)
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
leaq 0x440(%rsp), %rdi
movq %r14, %rsi
callq 0x72f0
leal 0x1(%r12), %r14d
cvtsi2sd %r14d, %xmm1
movsd (%rax), %xmm0
movsd %xmm1, 0x100(%rsp)
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
leaq 0xb69c(%rip), %rdi      # 0x10428
leaq 0x18(%rsp), %rsi
callq 0x3dd2
movl (%rax), %eax
movl %eax, 0x8(%rsp)
leaq 0x158(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x733e
movq 0x20(%rsp), %rcx
movq %rcx, 0x50(%rsp)
movq 0x28(%rsp), %rbp
movl %r14d, %ecx
movq %rcx, 0x120(%rsp)
testq %rax, %rax
je 0x4e37
leaq 0x158(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
subq 0x50(%rsp), %rbp
sarq $0x4, %rbp
subq %r15, %rbp
addq %rbp, 0x8(%rax)
leaq 0x1b8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
movq 0x120(%rsp), %rcx
addq %rcx, 0x8(%rax)
leaq 0x158(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
incl (%rax)
leaq 0x1b8(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
incl (%rax)
jmp 0x4e86
leaq 0x158(%rsp), %rdi
leaq 0x8(%rsp), %r14
movq %r14, %rsi
callq 0x7358
subq 0x50(%rsp), %rbp
sarq $0x4, %rbp
subq %r15, %rbp
movq %rbp, 0x8(%rax)
movq $0x1, (%rax)
leaq 0x1b8(%rsp), %rdi
movq %r14, %rsi
callq 0x7358
movq 0x120(%rsp), %rcx
movq %rcx, 0x8(%rax)
movq $0x1, (%rax)
leaq 0x4(%rsp), %rsi
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x4, %rax
subq %r15, %rax
cmpq $0x1, %rax
ja 0x4eee
movsd 0xe0(%rsp), %xmm0
addsd 0x51ad(%rip), %xmm0     # 0xa060
movsd %xmm0, 0xe0(%rsp)
leaq 0x350(%rsp), %rdi
callq 0x72f0
movsd (%rax), %xmm0
addsd 0x518b(%rip), %xmm0     # 0xa060
movsd %xmm0, (%rax)
leaq 0x158(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x7358
incl 0x4(%rax)
movq 0x40(%rsp), %r14
leaq 0x8(%rsp), %rbp
testl %r12d, %r12d
je 0x4f38
movsd 0x110(%rsp), %xmm0
addsd 0x140(%rsp), %xmm0
movsd %xmm0, 0x110(%rsp)
movsd 0x108(%rsp), %xmm0
addsd 0x100(%rsp), %xmm0
movsd %xmm0, 0x108(%rsp)
jmp 0x4c07
leaq 0x1b8(%rsp), %rdi
movq %rbp, %rsi
callq 0x7358
incl 0x4(%rax)
movsd 0xd0(%rsp), %xmm0
addsd 0x5104(%rip), %xmm0     # 0xa060
movsd %xmm0, 0xd0(%rsp)
leaq 0x320(%rsp), %rdi
leaq 0x4(%rsp), %rsi
callq 0x72f0
movsd (%rax), %xmm0
addsd 0x50dd(%rip), %xmm0     # 0xa060
movsd %xmm0, (%rax)
movslq 0x4(%rsp), %rax
movq 0xb2a5(%rip), %rcx      # 0x10238
movl (%rcx,%rax,4), %eax
cmpl $0x2, %eax
movq 0x40(%rsp), %r14
je 0x4fec
cmpl $0x1, %eax
leaq 0x8(%rsp), %rbp
je 0x4fcd
testl %eax, %eax
jne 0x5010
movsd 0x98(%rsp), %xmm0
addsd 0x50a1(%rip), %xmm0     # 0xa060
movsd %xmm0, 0x98(%rsp)
jmp 0x4efd
movsd 0x88(%rsp), %xmm0
addsd 0x5082(%rip), %xmm0     # 0xa060
movsd %xmm0, 0x88(%rsp)
jmp 0x4efd
movsd 0x90(%rsp), %xmm0
addsd 0x5063(%rip), %xmm0     # 0xa060
movsd %xmm0, 0x90(%rsp)
leaq 0x8(%rsp), %rbp
jmp 0x4efd
movsd 0x80(%rsp), %xmm0
addsd 0x503f(%rip), %xmm0     # 0xa060
movsd %xmm0, 0x80(%rsp)
jmp 0x4efd
movq 0x20(%rsp), %rax
cmpq %rax, 0x28(%rsp)
je 0x5040
movq %rax, 0x28(%rsp)
xorl %r13d, %r13d
movq 0x38(%rsp), %r12
cmpl 0xb409(%rip), %r13d     # 0x10458
jge 0x5089
movl 0x1c(%rsp), %esi
movl 0x18(%rsp), %edx
movq %r14, %rdi
movl %r13d, %ecx
callq 0x6c34
addsd 0x5014(%rip), %xmm0     # 0xa080
movl %r13d, 0x8(%rsp)
movsd %xmm0, 0x10(%rsp)
leaq 0x20(%rsp), %rdi
movq %rbp, %rsi
callq 0x7914
incl %r13d
jmp 0x5048
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rsi
leaq -0x2761(%rip), %rdx     # 0x2939
callq 0x7a6f
movq 0x20(%rsp), %rax
movq 0x28(%rsp), %rcx
subq %rax, %rcx
shrq $0x4, %rcx
movl %ecx, %r13d
decq %r13
xorl %r15d, %r15d
testl %r13d, %r13d
js 0x52b2
movl %r13d, %ebp
andl $0x7fffffff, %ebp       # imm = 0x7FFFFFFF
movq %rbp, %r12
shlq $0x4, %r12
movl 0x1c(%rsp), %ecx
movl (%rax,%r12), %eax
shlq $0x20, %rax
orq %rcx, %rax
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
leaq 0x8(%rsp), %rsi
callq 0x5fb6
movq %rax, %rdi
leaq 0x18(%rsp), %rsi
callq 0x72d6
movq 0x20(%rsp), %rax
movl 0x1c(%rsp), %ecx
movl (%rax,%r12), %eax
shlq $0x20, %rax
orq %rcx, %rax
movq %rax, 0x8(%rsp)
movq %rbx, %rdi
leaq 0x8(%rsp), %rsi
callq 0x5fb6
movq %rax, %rdi
leaq 0x18(%rsp), %rsi
callq 0x72d6
cmpq $0x1, %rax
adcl $0x0, %r15d
movq 0x20(%rsp), %rax
movl (%rax,%r12), %ecx
decq %r13
cmpl 0x4(%rsp), %ecx
movq 0x38(%rsp), %r12
jne 0x50b9
movq 0x28(%rsp), %rcx
subq %rax, %rcx
sarq $0x4, %rcx
subq %rbp, %rcx
movq %rcx, %xmm0
punpckldq 0x4ebe(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x4ec6(%rip), %xmm0     # 0xa040
movapd %xmm0, 0x50(%rsp)
leaq 0x410(%rsp), %rdi
leaq 0x4(%rsp), %r13
movq %r13, %rsi
callq 0x72f0
movapd 0x50(%rsp), %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
movsd (%rax), %xmm0
movapd %xmm1, 0x50(%rsp)
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
leaq 0x3e0(%rsp), %rdi
movq %r13, %rsi
callq 0x72f0
leal 0x1(%r15), %ecx
cvtsi2sd %ecx, %xmm1
movsd (%rax), %xmm0
movsd %xmm1, 0x120(%rsp)
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x4, %rax
subq %rbp, %rax
cmpq $0x1, %rax
ja 0x5239
leaq 0x2f0(%rsp), %rdi
leaq 0x4(%rsp), %rsi
callq 0x72f0
movsd 0x4e49(%rip), %xmm1     # 0xa060
movsd 0xc8(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xc8(%rsp)
movsd (%rax), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movsd 0xf8(%rsp), %xmm0
addsd 0x50(%rsp), %xmm0
movsd %xmm0, 0xf8(%rsp)
movsd 0xf0(%rsp), %xmm0
addsd 0x120(%rsp), %xmm0
movsd %xmm0, 0xf0(%rsp)
testl %r15d, %r15d
leaq 0x8(%rsp), %rbp
jne 0x52b7
leaq 0x2c0(%rsp), %rdi
leaq 0x4(%rsp), %rsi
callq 0x72f0
movsd 0x4dd0(%rip), %xmm1     # 0xa060
movsd 0xc0(%rsp), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0xc0(%rsp)
movsd (%rax), %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax)
leaq 0x8(%rsp), %rbp
movl %r12d, %eax
xorl %edx, %edx
pushq $0x64
popq %rcx
divl %ecx
testl %edx, %edx
je 0x52cd
incq %r12
jmp 0x5731
movq 0xad04(%rip), %rdi      # 0xffd8
movl %r12d, %esi
callq 0x22d0
movq %rax, %rdi
leaq 0x4e68(%rip), %rsi      # 0xa14e
callq 0x2190
movq %rax, %rdi
leaq 0x4da2(%rip), %rsi      # 0xa097
callq 0x2190
incq %r12
cvtsi2sd %r12d, %xmm1
movsd 0x48(%rsp), %xmm0
movsd %xmm1, 0x38(%rsp)
divsd %xmm1, %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0xe8(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0x110(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0xe0(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
leaq 0x4d0d(%rip), %rsi      # 0xa097
callq 0x2190
movsd 0x118(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0xd8(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0x108(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0xd0(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
callq 0x20f0
movq 0xabbd(%rip), %rdi      # 0xffd8
leaq 0x4c75(%rip), %rsi      # 0xa097
callq 0x2190
movsd 0xf8(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0xc8(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
leaq 0x4c2d(%rip), %rsi      # 0xa097
callq 0x2190
movsd 0xf0(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0xc0(%rsp), %xmm0
divsd 0x38(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
callq 0x20f0
movq 0xab21(%rip), %rdi      # 0xffd8
movsd 0xb8(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
leaq 0x4ce6(%rip), %rsi      # 0xa1b5
callq 0x2190
movq %rax, %rdi
movsd 0xb0(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
leaq 0x4cc6(%rip), %rsi      # 0xa1b5
callq 0x2190
movq %rax, %rdi
movsd 0xa8(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movq %rax, %rdi
movsd 0xa0(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
callq 0x20f0
movq 0xaaa8(%rip), %rdi      # 0xffd8
movsd 0x98(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
leaq 0x4c6d(%rip), %rsi      # 0xa1b5
callq 0x2190
movq %rax, %rdi
movsd 0x90(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
leaq 0x4c4d(%rip), %rsi      # 0xa1b5
callq 0x2190
movq %rax, %rdi
movsd 0x88(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movq %rax, %rdi
movsd 0x80(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
callq 0x20f0
movq 0xaa2f(%rip), %rdi      # 0xffd8
movsd 0x78(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
leaq 0x4bf7(%rip), %rsi      # 0xa1b5
callq 0x2190
movq %rax, %rdi
movsd 0x70(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
leaq 0x4bda(%rip), %rsi      # 0xa1b5
callq 0x2190
movq %rax, %rdi
movsd 0x68(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movq %rax, %rdi
movsd 0x60(%rsp), %xmm0
callq 0x22a0
movq %rax, %rdi
callq 0x20f0
movsd 0xb8(%rsp), %xmm0
divsd 0x78(%rsp), %xmm0
movq 0xa9b3(%rip), %rdi      # 0xffd8
callq 0x22a0
movq %rax, %rdi
leaq 0x4b81(%rip), %rsi      # 0xa1b5
callq 0x2190
movsd 0xb0(%rsp), %xmm0
divsd 0x70(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
leaq 0x4b5b(%rip), %rsi      # 0xa1b5
callq 0x2190
movsd 0xa8(%rsp), %xmm0
divsd 0x68(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0xa0(%rsp), %xmm0
divsd 0x60(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
callq 0x20f0
movsd 0x98(%rsp), %xmm0
divsd 0x78(%rsp), %xmm0
movq 0xa922(%rip), %rdi      # 0xffd8
callq 0x22a0
movq %rax, %rdi
leaq 0x4af0(%rip), %rsi      # 0xa1b5
callq 0x2190
movsd 0x90(%rsp), %xmm0
divsd 0x70(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
leaq 0x4aca(%rip), %rsi      # 0xa1b5
callq 0x2190
movsd 0x88(%rsp), %xmm0
divsd 0x68(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
pushq $0x20
popq %rsi
callq 0x21d0
movsd 0x80(%rsp), %xmm0
divsd 0x60(%rsp), %xmm0
movq %rax, %rdi
callq 0x22a0
movq %rax, %rdi
callq 0x20f0
leaq 0x20(%rsp), %rdi
callq 0x8a62
jmp 0x44ea
leaq 0x4abf(%rip), %rdi      # 0xa206
leaq 0x4ac3(%rip), %rsi      # 0xa211
callq 0x21e0
movq %rax, %rbx
movq 0x1a0(%rsp), %r15
leaq 0x4aae(%rip), %r14      # 0xa213
leaq 0x190(%rsp), %rax
cmpq %rax, %r15
je 0x579c
movq 0x30(%r15), %rcx
movl 0x2c(%r15), %r8d
movl 0x20(%r15), %edx
movl 0x28(%r15), %r9d
movq %rbx, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0x2230
movq %r15, %rdi
callq 0x2130
movq %rax, %r15
jmp 0x5765
movq %rbx, %rdi
callq 0x21a0
leaq 0x4a77(%rip), %rdi      # 0xa222
leaq 0x4a5f(%rip), %rsi      # 0xa211
callq 0x21e0
movq %rax, %rbx
movq 0x200(%rsp), %r15
leaq 0x4a4a(%rip), %r14      # 0xa213
leaq 0x1f0(%rsp), %rax
cmpq %rax, %r15
je 0x5800
movq 0x30(%r15), %rcx
movl 0x2c(%r15), %r8d
movl 0x20(%r15), %edx
movl 0x28(%r15), %r9d
movq %rbx, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0x2230
movq %r15, %rdi
callq 0x2130
movq %rax, %r15
jmp 0x57c9
movq %rbx, %rdi
callq 0x21a0
leaq 0x4a21(%rip), %rdi      # 0xa230
leaq 0x49fb(%rip), %rsi      # 0xa211
callq 0x21e0
movq %rax, %rbx
movq 0x170(%rsp), %r15
leaq 0x49e6(%rip), %r14      # 0xa213
leaq 0x160(%rsp), %rax
cmpq %rax, %r15
je 0x5864
movq 0x30(%r15), %rcx
movl 0x2c(%r15), %r8d
movl 0x20(%r15), %edx
movl 0x28(%r15), %r9d
movq %rbx, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0x2230
movq %r15, %rdi
callq 0x2130
movq %rax, %r15
jmp 0x582d
movq %rbx, %rdi
callq 0x21a0
leaq 0x49c8(%rip), %rdi      # 0xa23b
leaq 0x4997(%rip), %rsi      # 0xa211
callq 0x21e0
movq %rax, %rbx
movq 0x1d0(%rsp), %r15
leaq 0x4982(%rip), %r14      # 0xa213
leaq 0x1c0(%rsp), %rax
cmpq %rax, %r15
je 0x58c8
movq 0x30(%r15), %rcx
movl 0x2c(%r15), %r8d
movl 0x20(%r15), %edx
movl 0x28(%r15), %r9d
movq %rbx, %rdi
movq %r14, %rsi
xorl %eax, %eax
callq 0x2230
movq %r15, %rdi
callq 0x2130
movq %rax, %r15
jmp 0x5891
movq %rbx, %rdi
callq 0x21a0
leaq 0x260(%rsp), %rdi
callq 0x8a70
leaq 0x1b8(%rsp), %rdi
callq 0x8ab8
leaq 0x1e8(%rsp), %rdi
callq 0x8ab8
leaq 0x158(%rsp), %rdi
callq 0x8ab8
leaq 0x188(%rsp), %rdi
callq 0x8ab8
leaq 0x290(%rsp), %rdi
callq 0x5ca0
leaq 0x2c0(%rsp), %rdi
callq 0x8b00
leaq 0x2f0(%rsp), %rdi
callq 0x8b00
leaq 0x320(%rsp), %rdi
callq 0x8b00
leaq 0x350(%rsp), %rdi
callq 0x8b00
leaq 0x380(%rsp), %rdi
callq 0x8b00
leaq 0x3b0(%rsp), %rdi
callq 0x8b00
leaq 0x3e0(%rsp), %rdi
callq 0x8b00
leaq 0x410(%rsp), %rdi
callq 0x8b00
leaq 0x440(%rsp), %rdi
callq 0x8b00
leaq 0x470(%rsp), %rdi
callq 0x8b00
leaq 0x4a0(%rsp), %rdi
callq 0x8b00
leaq 0x218(%rsp), %rdi
callq 0x8b00
addq $0x4e8, %rsp            # imm = 0x4E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
movq %rax, %rbx
jmp 0x5a23
movq %rax, %rbx
leaq 0x248(%rsp), %rdi
callq 0x5eea
jmp 0x5b0d
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
jmp 0x5a16
movq %rax, %rbx
leaq 0x20(%rsp), %rdi
callq 0x8a62
leaq 0x260(%rsp), %rdi
callq 0x8a70
leaq 0x1b8(%rsp), %rdi
callq 0x8ab8
leaq 0x1e8(%rsp), %rdi
callq 0x8ab8
leaq 0x158(%rsp), %rdi
callq 0x8ab8
leaq 0x188(%rsp), %rdi
callq 0x8ab8
leaq 0x290(%rsp), %rdi
callq 0x5ca0
leaq 0x2c0(%rsp), %rdi
callq 0x8b00
leaq 0x2f0(%rsp), %rdi
callq 0x8b00
leaq 0x320(%rsp), %rdi
callq 0x8b00
leaq 0x350(%rsp), %rdi
callq 0x8b00
leaq 0x380(%rsp), %rdi
callq 0x8b00
leaq 0x3b0(%rsp), %rdi
callq 0x8b00
leaq 0x3e0(%rsp), %rdi
callq 0x8b00
leaq 0x410(%rsp), %rdi
callq 0x8b00
leaq 0x440(%rsp), %rdi
callq 0x8b00
leaq 0x470(%rsp), %rdi
callq 0x8b00
leaq 0x4a0(%rsp), %rdi
callq 0x8b00
leaq 0x218(%rsp), %rdi
callq 0x8b00
movq %rbx, %rdi
callq 0x22e0