// File: /workspace/github_c_makefile_star2_O0/cbouilla[P]AES-attacks-finder/Search.c
// Function: SearchAlgo_tmp
Solver SearchAlgo_tmp(SysEqLin E, int temps, int memoire, int r, string_list_t *variable_names, Symetric_structure S) // 2° partie de la recherche
{
	if (E->a==0) return NULL;
	
	char c;
	
	if (r==4)
	{
		do
		{
			printf("You will perform a manual search. Would you like to keep all the variables? (o/n) : ");
			scanf(" %c",&c);
			getchar();
		} while (c!='o' && c!='n');
	}
	else c='n';
	int N=E->a/E->gen;
	if (c=='n')
	{
		/* On enlève les variables apparaissant linéairement */
		int * __restrict X1=malloc(N*sizeof(int));
		int * __restrict X2=malloc(N*sizeof(int));
		int pos1=0;
		int pos2=0;
		int i;
		for (i = 0; i < N; i++)
		{
			if (ApparaitLineairement(E->varligne[i],E)) X1[pos1++]=E->varligne[i];
			else X2[pos2++]=E->varligne[i];
		}
		if (pos1>0)
		{
			SysEqLin F=ExtraireEX2(X2,pos2,E);
			Solver B=SearchAlgo_tmp(F,temps,memoire,r,variable_names,S);
			freeSysEq(F);
			if (B==NULL && pos2>0)
			{
				free(X1);
				free(X2);
				return NULL;
			}
			for (i = 0; i < pos1; i++)
			{
				Solver tmp=BaseSolver(X1[i],E);
				Solver tmp2=UnionSolver(B,tmp,E);
				freeSolver(tmp);
				freeSolver(B);
				B=tmp2;
			}
			free(X1);
			free(X2);
			return B;
		}
	}	
	
	int N1;
	Solver * __restrict B1=MakeSolver1(E,&N1);
	Solver B;


	if (N1==1)
	{
		B=B1[0];
		free(B1);
		return B;
	}
	
	if (B1[0]->sortie<=0) // Si l'une des solvers 1 a moins d'une solution autant la trouver et faire une recherche en la connaissant.
	{
		int i;
		for (i = 1; i < N1; i++) freeSolver(B1[i]);
		SysEqLin F=EsachantX(B1[0]->var,B1[0]->Nvar,E);
		B=SearchAlgo_tmp(F,temps,memoire,r,variable_names,S);
		freeSysEq(F);
		if (B==NULL)
		{
			freeSolver(B1[0]);
			free(B1);
			return NULL;
		}
		Solver tmp=NewSolver();
		tmp->sortie=B->sortie;
		tmp->var=UnionListesTriees(B1[0]->var,B1[0]->Nvar,B->var,B->Nvar,&tmp->Nvar);
		tmp->temps=max(B->temps,B1[0]->temps);
		tmp->memoire=max(B->memoire,B1[0]->memoire);
		tmp->fils1=B;
		tmp->fils2=B1[0];
		tmp->type=2;
		//tmp->parents=1;
		free(B1);
		return tmp;
	}
	
	if (temps<E->a/E->gen-E->b)
	{
		printf("We expect 2^(8 x %d) solutions for the non-linear part of the system ---> increase time\n",E->a/E->gen-E->b);
		return NULL;
	}
	
	UpdateSymetricStructure(S,E);
	
	Solver * __restrict B2;
	int N2,i;
	printf(" %d low time solvers \n",N1);
	switch (r)
	{
		case 0:
			B=RandomizedSearch(temps,B1,N1,E);
			if (B==NULL)
			{
				printf("No solution found in %d || %d\n",temps,temps);
				getchar();
			}
			break;
		case 1:
			B2 = ExhaustiveSearchBalancedSolver(E,temps,&N2);
			B=NULL;
			for (i = 0; i < N2; i++)
			{
				//printf("Solver %d :",i);
				//PrintVarSolver(B2[i]);
				if (B2[i]->Nvar==E->a/E->gen) B=copySolver(B2[i]);
				freeSolver(B2[i]);
			}
			if (B==NULL)
			{
				printf("There is no solution in %d || %d\n",temps,memoire);
				getchar();
			}
			free(B2);
			break;
		case 2:
			B = SearchAlgoLowMem(E,temps);
			if (B==NULL)
			{
				printf("No solution found in %d || %d\n",temps,temps);
				getchar();
			}
			break;
		case 3:
			if (S!=NULL && S->n_message>1)
			{
				B =SearchUneSolverN3_SymetricVersion(temps,B1,N1,E,S);
				if (B==NULL)
				{
					printf("No solution found in %d || %d\n",temps,temps);
					getchar();
				}
			}
			else
			{
				printf("search not available for this system\n");
				B=NULL;
			}
			break;
		case 4:
			B=ManualSearch(temps,B1,N1,E,variable_names);
			if (B==NULL)
			{
				printf("No solution found in %d || %d\n",temps,temps);
				getchar();
			}
			break;
		default:
			break;
	}
	if (B==NULL)
	{
		for (i = 0; i < N1; i++) freeSolver(B1[i]);
		free(B1);
		return NULL;
	}
	
	if (B->sortie<=0 && B->Nvar<E->a/E->gen) // On a trouvé une solver avec moins d'une solution -> on relance en supposant qu'on la connait
	{
		for (i = 0; i < N1; i++) freeSolver(B1[i]);
 		B1[0]=B;
		SysEqLin F=EsachantX(B1[0]->var,B1[0]->Nvar,E);
		B=SearchAlgo_tmp(F,temps,memoire,r,variable_names,S);
		freeSysEq(F);
		if (B==NULL)
		{
			freeSolver(B1[0]);
			free(B1);
			return NULL;
		}
		Solver tmp=NewSolver();
		tmp->sortie=B->sortie;
		tmp->var=UnionListesTriees(B1[0]->var,B1[0]->Nvar,B->var,B->Nvar,&tmp->Nvar);
		tmp->temps=max(B->temps,B1[0]->temps);
		tmp->memoire=max(B->memoire,B1[0]->memoire);
		tmp->fils1=B;
		tmp->fils2=B1[0];
		tmp->type=2;
		//tmp->parents=1;
		free(B1);
		return tmp;
	}
	for (i = 0; i < N1; i++) freeSolver(B1[i]);
	free(B1);
	return B;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movl %edx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x10(%rbp), %rax
cmpl $0x0, 0x8(%rax)
jne 0x22d57
movq $0x0, -0x8(%rbp)
jmp 0x237e4
cmpl $0x4, -0x1c(%rbp)
jne 0x22db1
jmp 0x22d5f
leaq 0x161eb(%rip), %rdi     # 0x38f51
movb $0x0, %al
callq 0x2100
leaq 0x12c2e(%rip), %rdi     # 0x359a2
leaq -0x31(%rbp), %rsi
movb $0x0, %al
callq 0x2220
callq 0x2170
movsbl -0x31(%rbp), %ecx
xorl %eax, %eax
cmpl $0x6f, %ecx
movb %al, -0xc9(%rbp)
je 0x22da5
movsbl -0x31(%rbp), %eax
cmpl $0x6e, %eax
setne %al
movb %al, -0xc9(%rbp)
movb -0xc9(%rbp), %al
testb $0x1, %al
jne 0x22d5f
jmp 0x22db5
movb $0x6e, -0x31(%rbp)
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x10(%rbp), %rcx
cltd
idivl 0x10(%rcx)
movl %eax, -0x38(%rbp)
movsbl -0x31(%rbp), %eax
cmpl $0x6e, %eax
jne 0x22f7a
movslq -0x38(%rbp), %rdi
shlq $0x2, %rdi
callq 0x21c0
movq %rax, -0x40(%rbp)
movslq -0x38(%rbp), %rdi
shlq $0x2, %rdi
callq 0x21c0
movq %rax, -0x48(%rbp)
movl $0x0, -0x4c(%rbp)
movl $0x0, -0x50(%rbp)
movl $0x0, -0x54(%rbp)
movl -0x54(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0x22e87
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x54(%rbp), %rcx
movl (%rax,%rcx,4), %edi
movq -0x10(%rbp), %rsi
callq 0x12190
cmpl $0x0, %eax
je 0x22e56
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x54(%rbp), %rcx
movl (%rax,%rcx,4), %edx
movq -0x40(%rbp), %rax
movl -0x4c(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x4c(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x22e7a
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movslq -0x54(%rbp), %rcx
movl (%rax,%rcx,4), %edx
movq -0x48(%rbp), %rax
movl -0x50(%rbp), %ecx
movl %ecx, %esi
addl $0x1, %esi
movl %esi, -0x50(%rbp)
movslq %ecx, %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x22e7c
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x22e0b
cmpl $0x0, -0x4c(%rbp)
jle 0x22f78
movq -0x48(%rbp), %rdi
movl -0x50(%rbp), %esi
movq -0x10(%rbp), %rdx
callq 0x115e0
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movl -0x1c(%rbp), %ecx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0x22d20
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rdi
callq 0x12220
cmpq $0x0, -0x68(%rbp)
jne 0x22ef8
cmpl $0x0, -0x50(%rbp)
jle 0x22ef8
movq -0x40(%rbp), %rdi
callq 0x2030
movq -0x48(%rbp), %rdi
callq 0x2030
movq $0x0, -0x8(%rbp)
jmp 0x237e4
movl $0x0, -0x54(%rbp)
movl -0x54(%rbp), %eax
cmpl -0x4c(%rbp), %eax
jge 0x22f59
movq -0x40(%rbp), %rax
movslq -0x54(%rbp), %rcx
movl (%rax,%rcx,4), %edi
movq -0x10(%rbp), %rsi
callq 0x9a40
movq %rax, -0x70(%rbp)
movq -0x68(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq -0x10(%rbp), %rdx
callq 0xaa60
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rdi
callq 0x93b0
movq -0x68(%rbp), %rdi
callq 0x93b0
movq -0x78(%rbp), %rax
movq %rax, -0x68(%rbp)
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x22eff
movq -0x40(%rbp), %rdi
callq 0x2030
movq -0x48(%rbp), %rdi
callq 0x2030
movq -0x68(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x237e4
jmp 0x22f7a
movq -0x10(%rbp), %rdi
leaq -0x7c(%rbp), %rsi
callq 0xb340
movq %rax, -0x88(%rbp)
cmpl $0x1, -0x7c(%rbp)
jne 0x22fc1
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x90(%rbp)
movq -0x88(%rbp), %rdi
callq 0x2030
movq -0x90(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x237e4
movq -0x88(%rbp), %rax
movq (%rax), %rax
cmpl $0x0, 0x14(%rax)
jg 0x231f3
movl $0x1, -0x94(%rbp)
movl -0x94(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x23012
movq -0x88(%rbp), %rax
movslq -0x94(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x93b0
movl -0x94(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x94(%rbp)
jmp 0x22fdf
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rdi
movq -0x88(%rbp), %rax
movq (%rax), %rax
movl 0x8(%rax), %esi
movq -0x10(%rbp), %rdx
callq 0x11aa0
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movl -0x1c(%rbp), %ecx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0x22d20
movq %rax, -0x90(%rbp)
movq -0xa0(%rbp), %rdi
callq 0x12220
cmpq $0x0, -0x90(%rbp)
jne 0x2309e
movq -0x88(%rbp), %rax
movq (%rax), %rdi
callq 0x93b0
movq -0x88(%rbp), %rdi
callq 0x2030
movq $0x0, -0x8(%rbp)
jmp 0x237e4
callq 0x9280
movq %rax, -0xa8(%rbp)
movq -0x90(%rbp), %rax
movl 0x14(%rax), %ecx
movq -0xa8(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rdi
movq -0x88(%rbp), %rax
movq (%rax), %rax
movl 0x8(%rax), %esi
movq -0x90(%rbp), %rax
movq (%rax), %rdx
movq -0x90(%rbp), %rax
movl 0x8(%rax), %ecx
movq -0xa8(%rbp), %r8
addq $0x8, %r8
callq 0x24e0
movq %rax, %rcx
movq -0xa8(%rbp), %rax
movq %rcx, (%rax)
movq -0x90(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x88(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0xc(%rcx), %eax
jle 0x23134
movq -0x90(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0xd0(%rbp)
jmp 0x23147
movq -0x88(%rbp), %rax
movq (%rax), %rax
movl 0xc(%rax), %eax
movl %eax, -0xd0(%rbp)
movl -0xd0(%rbp), %ecx
movq -0xa8(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x90(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x88(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x10(%rcx), %eax
jle 0x23182
movq -0x90(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xd4(%rbp)
jmp 0x23195
movq -0x88(%rbp), %rax
movq (%rax), %rax
movl 0x10(%rax), %eax
movl %eax, -0xd4(%rbp)
movl -0xd4(%rbp), %ecx
movq -0xa8(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x90(%rbp), %rcx
movq -0xa8(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x88(%rbp), %rax
movq (%rax), %rcx
movq -0xa8(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0xa8(%rbp), %rax
movb $0x2, 0x18(%rax)
movq -0x88(%rbp), %rdi
callq 0x2030
movq -0xa8(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x237e4
movl -0x14(%rbp), %eax
movl %eax, -0xd8(%rbp)
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x10(%rbp), %rcx
cltd
idivl 0x10(%rcx)
movl %eax, %ecx
movl -0xd8(%rbp), %eax
movq -0x10(%rbp), %rdx
subl 0xc(%rdx), %ecx
cmpl %ecx, %eax
jge 0x23251
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x10(%rbp), %rcx
cltd
idivl 0x10(%rcx)
movl %eax, %esi
movq -0x10(%rbp), %rax
subl 0xc(%rax), %esi
leaq 0x15d69(%rip), %rdi     # 0x38fa6
movb $0x0, %al
callq 0x2100
movq $0x0, -0x8(%rbp)
jmp 0x237e4
movq -0x30(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x23ca0
movl -0x7c(%rbp), %esi
leaq 0x15d97(%rip), %rdi     # 0x38fff
xorl %eax, %eax
callq 0x2100
movl -0x1c(%rbp), %eax
movq %rax, -0xe0(%rbp)
subq $0x4, %rax
ja 0x234c2
movq -0xe0(%rbp), %rax
leaq 0x15a33(%rip), %rcx     # 0x38cc4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x14(%rbp), %edi
movq -0x88(%rbp), %rsi
movl -0x7c(%rbp), %edx
movq -0x10(%rbp), %rcx
callq 0x22160
movq %rax, -0x90(%rbp)
cmpq $0x0, -0x90(%rbp)
jne 0x232da
movl -0x14(%rbp), %esi
movl -0x14(%rbp), %edx
leaq 0x15d48(%rip), %rdi     # 0x39016
movb $0x0, %al
callq 0x2100
callq 0x2170
jmp 0x234c4
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
leaq -0xb4(%rbp), %rdx
callq 0x21430
movq %rax, -0xb0(%rbp)
movq $0x0, -0x90(%rbp)
movl $0x0, -0xb8(%rbp)
movl -0xb8(%rbp), %eax
cmpl -0xb4(%rbp), %eax
jge 0x2339b
movq -0xb0(%rbp), %rax
movslq -0xb8(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movl 0x8(%rax), %eax
movl %eax, -0xe4(%rbp)
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x10(%rbp), %rcx
cltd
idivl 0x10(%rcx)
movl %eax, %ecx
movl -0xe4(%rbp), %eax
cmpl %ecx, %eax
jne 0x23370
movq -0xb0(%rbp), %rax
movslq -0xb8(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x9380
movq %rax, -0x90(%rbp)
movq -0xb0(%rbp), %rax
movslq -0xb8(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x93b0
movl -0xb8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb8(%rbp)
jmp 0x2330e
cmpq $0x0, -0x90(%rbp)
jne 0x233be
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
leaq 0x15c83(%rip), %rdi     # 0x39035
movb $0x0, %al
callq 0x2100
callq 0x2170
movq -0xb0(%rbp), %rdi
callq 0x2030
jmp 0x234c4
movq -0x10(%rbp), %rdi
movl -0x14(%rbp), %esi
callq 0x1cb00
movq %rax, -0x90(%rbp)
cmpq $0x0, -0x90(%rbp)
jne 0x23405
movl -0x14(%rbp), %esi
movl -0x14(%rbp), %edx
leaq 0x15c1d(%rip), %rdi     # 0x39016
movb $0x0, %al
callq 0x2100
callq 0x2170
jmp 0x234c4
cmpq $0x0, -0x30(%rbp)
je 0x23461
movq -0x30(%rbp), %rax
cmpl $0x1, 0xc(%rax)
jle 0x23461
movl -0x14(%rbp), %edi
movq -0x88(%rbp), %rsi
movl -0x7c(%rbp), %edx
movq -0x10(%rbp), %rcx
movq -0x30(%rbp), %r8
callq 0x24420
movq %rax, -0x90(%rbp)
cmpq $0x0, -0x90(%rbp)
jne 0x2345f
movl -0x14(%rbp), %esi
movl -0x14(%rbp), %edx
leaq 0x15bc3(%rip), %rdi     # 0x39016
movb $0x0, %al
callq 0x2100
callq 0x2170
jmp 0x2347a
leaq 0x15bef(%rip), %rdi     # 0x39057
movb $0x0, %al
callq 0x2100
movq $0x0, -0x90(%rbp)
jmp 0x234c4
movl -0x14(%rbp), %edi
movq -0x88(%rbp), %rsi
movl -0x7c(%rbp), %edx
movq -0x10(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0x22860
movq %rax, -0x90(%rbp)
cmpq $0x0, -0x90(%rbp)
jne 0x234c0
movl -0x14(%rbp), %esi
movl -0x14(%rbp), %edx
leaq 0x15b62(%rip), %rdi     # 0x39016
movb $0x0, %al
callq 0x2100
callq 0x2170
jmp 0x234c4
jmp 0x234c4
cmpq $0x0, -0x90(%rbp)
jne 0x23524
movl $0x0, -0xb8(%rbp)
movl -0xb8(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x2350b
movq -0x88(%rbp), %rax
movslq -0xb8(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x93b0
movl -0xb8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb8(%rbp)
jmp 0x234d8
movq -0x88(%rbp), %rdi
callq 0x2030
movq $0x0, -0x8(%rbp)
jmp 0x237e4
movq -0x90(%rbp), %rax
cmpl $0x0, 0x14(%rax)
jg 0x23790
movq -0x90(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xe8(%rbp)
movq -0x10(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x10(%rbp), %rcx
cltd
idivl 0x10(%rcx)
movl %eax, %ecx
movl -0xe8(%rbp), %eax
cmpl %ecx, %eax
jge 0x23790
movl $0x0, -0xb8(%rbp)
movl -0xb8(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x235a1
movq -0x88(%rbp), %rax
movslq -0xb8(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x93b0
movl -0xb8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb8(%rbp)
jmp 0x2356e
movq -0x90(%rbp), %rcx
movq -0x88(%rbp), %rax
movq %rcx, (%rax)
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rdi
movq -0x88(%rbp), %rax
movq (%rax), %rax
movl 0x8(%rax), %esi
movq -0x10(%rbp), %rdx
callq 0x11aa0
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movl -0x1c(%rbp), %ecx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0x22d20
movq %rax, -0x90(%rbp)
movq -0xc0(%rbp), %rdi
callq 0x12220
cmpq $0x0, -0x90(%rbp)
jne 0x2363e
movq -0x88(%rbp), %rax
movq (%rax), %rdi
callq 0x93b0
movq -0x88(%rbp), %rdi
callq 0x2030
movq $0x0, -0x8(%rbp)
jmp 0x237e4
callq 0x9280
movq %rax, -0xc8(%rbp)
movq -0x90(%rbp), %rax
movl 0x14(%rax), %ecx
movq -0xc8(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rdi
movq -0x88(%rbp), %rax
movq (%rax), %rax
movl 0x8(%rax), %esi
movq -0x90(%rbp), %rax
movq (%rax), %rdx
movq -0x90(%rbp), %rax
movl 0x8(%rax), %ecx
movq -0xc8(%rbp), %r8
addq $0x8, %r8
callq 0x24e0
movq %rax, %rcx
movq -0xc8(%rbp), %rax
movq %rcx, (%rax)
movq -0x90(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x88(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0xc(%rcx), %eax
jle 0x236d4
movq -0x90(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0xec(%rbp)
jmp 0x236e7
movq -0x88(%rbp), %rax
movq (%rax), %rax
movl 0xc(%rax), %eax
movl %eax, -0xec(%rbp)
movl -0xec(%rbp), %ecx
movq -0xc8(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x90(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x88(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x10(%rcx), %eax
jle 0x23722
movq -0x90(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xf0(%rbp)
jmp 0x23735
movq -0x88(%rbp), %rax
movq (%rax), %rax
movl 0x10(%rax), %eax
movl %eax, -0xf0(%rbp)
movl -0xf0(%rbp), %ecx
movq -0xc8(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x90(%rbp), %rcx
movq -0xc8(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x88(%rbp), %rax
movq (%rax), %rcx
movq -0xc8(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0xc8(%rbp), %rax
movb $0x2, 0x18(%rax)
movq -0x88(%rbp), %rdi
callq 0x2030
movq -0xc8(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x237e4
movl $0x0, -0xb8(%rbp)
movl -0xb8(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x237cd
movq -0x88(%rbp), %rax
movslq -0xb8(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x93b0
movl -0xb8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb8(%rbp)
jmp 0x2379a
movq -0x88(%rbp), %rdi
callq 0x2030
movq -0x90(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0xf0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)