// File: /workspace/github_cpp_makefile_star2_O2/nataly-enne[P]pet-fera/pet_fera_cadastrar.cpp
// Function: cadastrar(std::map<int, ANFIBIO_NATIVO, std::less<int>, std::allocator<std::pair<int const, ANFIBIO_NATIVO>>>&, std::map<int, ANFIBIO_EXOTICO, std::less<int>, std::allocator<std::pair<int const, ANFIBIO_EXOTICO>>>&, std::map<int, VETERINARIO, std::less<int>, std::allocator<std::pair<int const, VETERINARIO>>>, std::map<int, TRATADOR, std::less<int>, std::allocator<std::pair<int const, TRATADOR>>>)
void cadastrar(map <int, ANFIBIO_NATIVO> &anfibios_nat, map <int, ANFIBIO_EXOTICO> &anfibios_ex, map <int, VETERINARIO> vets, map <int, TRATADOR> tratadores){
	int id, total_mudas;
	string classe, nome_cientifico, dieta, veterinario, tratador, nome_batismo, autorizacao, autorizacao_IBAMA, origem, ultima_muda, nome, id_string, tamanho_string, sexo_string, total_mudas_string;
	bool check;
	char sexo, tipo_animal, continuar, sucesso, tipo = 'a';
	double tamanho;
	unsigned int old_size;
	ofstream nativos;
	ofstream exoticos;

	do{
		cout << "Deseja cadastrar um ANFIBIO NATIVO ou ANNFIBIO EXÓTICO? \n n - NATIVO\n e - EXÓTICO" << endl;
		cin >> tipo_animal;
		if(tipo_animal != 'n' && tipo_animal != 'e'){
			cout << "Tipo invalido, tente novamente!" << endl;
			continuar = 's';
			continue;
		}
		else{
			// Recebe o ID e verifica se é valido.
			do{
				cout << "Digite o id:" << endl;
				cin >> id_string;
				if(!verifica_ID(anfibios_nat, anfibios_ex, tipo_animal, id_string, sucesso)){
					cout << "O ID deve conter apenas inteiros ou ID já cadastrado!" << endl << endl;
				}
				else{
					stringstream ss(id_string); // Converte string para int.
					ss >> id;
				}

			}while(sucesso == 'n');
			
			// Classe dos anfibios.
			classe = "Amphibia";

			// Recebe o nome e verifica se é valido.
			do{
				cout << "Digite o nome:" << endl;
				cin.ignore();
				getline(cin, nome);
				if(!verifica_nome(nome, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				else{
					transform(nome.begin(), nome.end(), nome.begin(), ::tolower); // Converte a string nome para caracteres maiúsculos.
				}
			}while(sucesso == 'n');

	
			// Recebe o nome cientifico e verifica se é valido.
			do{
				cout << "Digite o nome científico:" << endl;
				getline(cin, nome_cientifico);
				if(!verifica_nome_cient(nome_cientifico, sucesso)){
					cout << "ERRO: só pode ser inserido letra, espaço ou traço!" << endl << endl;
				}
			}while(sucesso == 'n');

			// Recebe a dieta e verifica se não possui caracteres proibidos.
			do{
				cout << "Digite a dieta: " << endl;
				getline(cin, dieta);
				if(!verifica_dieta(dieta, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
			}while(sucesso == 'n');
			
			// Recebe o nome do veterinario e verifica se não possui caracteres proibidos.
			do{
				cout << "Digite o nome do veterinario: " << endl;
				getline(cin, veterinario);
				
				if(!verifica_nome(veterinario, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				check = check_vet(vets, veterinario);
				if(!check){
					cout << endl;
					cout << "ERRO: Veterinario não cadastrado!" << endl;
					sucesso = 'n';
				}
			}while(sucesso == 'n');
			
			// Recebe o nome do tratador e verifica se não possui caracteres proibido, se já foi cadastrado ou se possui nivel de segurança adequado.
			do{
				cout << "Digite o nome do tratador: " << endl;
				getline(cin, tratador);
				if(!verifica_nome(tratador, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				check = check_tratador(0, tratadores, tratador, tipo);
				if(!check){
					cout << endl;
					cout << "ERRO: Tratador não cadastrado ou não se adequa!" << endl << endl;
					sucesso = 'n';
				}
			}while(sucesso == 'n');

			
			// Recebe o nome e verifica se é valido.
			do{
				cout << "Digite o nome de batismo: " << endl;
				getline(cin, nome_batismo);
				if(!verifica_nome(nome_batismo, sucesso)){
					cout << "ERRO: só pode ser inserido letra ou espaço!" << endl << endl;
				}
				transform(nome_batismo.begin(), nome_batismo.end(), nome_batismo.begin(), ::tolower); // Converte a string nome para caracteres minusculos.
			}while(sucesso == 'n');

			// Recebe o sexo do animal e verifica se é F ou M.
			do{
				cout << "Digite o sexo do animal: " << endl;
				getline(cin, sexo_string);
				transform(sexo_string.begin(), sexo_string.end(), sexo_string.begin(), ::toupper); // Converte a string nome para caracteres maiúsculos.
				if(sexo_string != "F" && sexo_string != "M" ){
					sucesso = 'n';
					cout << "ERRO: só são permitidos F ou M!" << endl << endl;
				}
				else{
					sexo = (char)sexo_string[0];
					sucesso = 's';
				}

			}while(sucesso == 'n');
			
			// Recebe o tamanho do animal e verifica se não há caracteres proibidos.
			do{
				cout << "Digite o tamanho do animal: " << endl;
				getline(cin, tamanho_string);
				if(!verifica_tamanho(tamanho_string, sucesso)){
					cout << "ERRO: o tamanho do animal tem que ter apenas um '.' " << endl << endl;
				}
				tamanho = stod(tamanho_string);
			}while(sucesso == 'n');
			
			// Recebe o total de mudas e verifica se é um inteiro positivo.
			do{
				cout << "Insira o total de mudas:" << endl;
				getline(cin, total_mudas_string);
				if(!verifica_inteiro(total_mudas_string, sucesso)){
					cout << "ERRO: O total de mudas deve conter apenas inteiros positivos!" << endl << endl;
				}
				else{
					stringstream ss(total_mudas_string);
					ss >> total_mudas;
				}
			}while(sucesso == 'n');
			
			// Recebe a ultima muda e verifica se está no formato correto.
			do{
				cout << "Insira a data da última muda(dd-mm-aaaa)" << endl;
				getline(cin, ultima_muda);
				if(!verifica_data(ultima_muda, sucesso)){
					cout << "ERRO: A ultima muda deve ser nesse formato ex.: 12-03-2019" << endl << endl;
				}
			}while(sucesso == 'n');

			// Verifica se a autorizacao está no formato correto.
			do{
				cout << "Insira a autorizacao do IBAMA: " << endl;
				getline(cin, autorizacao_IBAMA);
				if(!verifica_autorizacao(autorizacao_IBAMA, sucesso)){
					cout << "ERRO: A autorizacao deve conter letras, numeros e '-'" << endl << endl;
				}
			}while(sucesso == 'n');
			
			
			if(tipo_animal == 'n'){
				old_size = anfibios_nat.size();
				// Verifica se foi passado uma string.
				do{
					cout << "Digite a UF de origem: " << endl;
					getline(cin, origem);
					if(!verifica_origem(origem, sucesso)){
						cout << "ERRO: Deve-se colocar apenas letras!" << endl << endl;
					}
				}while(sucesso == 'n');
				
				// Verifica se a autorizacao está no formato correto.
				do{
					cout << "Insira a autorizacao do animal: " << endl;
					getline(cin, autorizacao);
					if(!verifica_autorizacao(autorizacao, sucesso)){
						cout << "ERRO: A autorizacao deve conter letras, numeros e '-'" << endl << endl;
					}
				}while(sucesso == 'n');
				

				// Armazenando valores no map para tipo anfíbio nativo passados pelo usuário.
				anfibios_nat.insert(pair <int, ANFIBIO_NATIVO> (id, ANFIBIO_NATIVO(id, classe, nome, nome_cientifico, sexo, tamanho, dieta, veterinario, tratador, nome_batismo, total_mudas, ultima_muda, autorizacao_IBAMA, origem, autorizacao)));

				if (anfibios_nat.size() == old_size){
					cout << "Falha no cadastro do animal! Tente novamente!" << endl << endl;
					continuar = 's';
					continue;
				}
		
			}
			else{
				old_size = anfibios_ex.size();
				// Verifica se foi passado uma string.
				do{
					cout << "Digite o País de origem: " << endl;
					getline(cin, origem);
					if(!verifica_origem(origem, sucesso)){
						cout << "ERRO: Deve-se colocar apenas letras!" << endl << endl;
					}
				}while(sucesso == 'n');

				// Verifica se a autorizacao está no formato correto.
				do{
					cout << "Insira a autorizacao do animal: " << endl;
					getline(cin, autorizacao);
					if(!verifica_autorizacao(autorizacao, sucesso)){
						cout << "ERRO: A autorizacao deve conter letras, numeros e '-'" << endl;
					}
				}while(sucesso == 'n');

				// Armazenando valores no map para tipo anfíbio exótico passados pelo usuário.
				anfibios_ex.insert(pair <int, ANFIBIO_EXOTICO> (id, ANFIBIO_EXOTICO(id, classe, nome, nome_cientifico,sexo, tamanho, dieta,veterinario, tratador, nome_batismo, total_mudas, ultima_muda, autorizacao_IBAMA, origem, autorizacao)));
							
				if (anfibios_ex.size() == old_size){
					cout << "Falha no cadastro do animal! Tente novamente!" << endl;
					continuar = 's';
					continue;
				}		
			}
		}
		cout << "\nAnimal cadastrado com sucesso!" << endl << endl;
		cout << "Deseja cadastrar um novo animal? s/n" << endl;
		cin >> continuar;
	}while(continuar == 's');
					
	if(!anfibios_nat.empty()){
		nativos.open("anfibios_nat.txt");
		for(auto it = anfibios_nat.begin(); it != anfibios_nat.end(); it++){
			nativos << (*it).second;
		}
		nativos.close();
	}
	if(!anfibios_ex.empty()){
		exoticos.open("anfibios_ex.txt");
		for(auto it = anfibios_ex.begin(); it != anfibios_ex.end(); it++){
			exoticos << (*it).second;
		}
		exoticos.close();
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xcd8, %rsp            # imm = 0xCD8
movq %rcx, -0x110(%rbp)
movq %rdx, -0x118(%rbp)
leaq -0x248(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
movq %rsi, %rbx
movq %rdi, %r14
xorl %eax, %eax
leaq -0x1c8(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rcx)
movb %al, (%rdx)
leaq -0x1a8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x148(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rcx)
movb %al, (%rdx)
leaq -0x128(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0xf8(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rcx)
movb %al, (%rdx)
leaq -0xd8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x188(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rcx)
movb %al, (%rdx)
leaq -0xb8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x168(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rcx)
movb %al, (%rdx)
leaq -0x98(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x228(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rcx)
movb %al, (%rdx)
leaq -0x208(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
leaq -0x78(%rbp), %rdx
movq %rdx, -0x10(%rdx)
andq $0x0, -0x8(%rdx)
movb %al, (%rcx)
movb %al, (%rdx)
leaq -0x1e8(%rbp), %rcx
movq %rcx, -0x10(%rcx)
andq $0x0, -0x8(%rcx)
movb %al, (%rcx)
leaq -0xd00(%rbp), %rdi
callq 0x3350
movq %r14, -0x40(%rbp)
movq %rbx, -0x48(%rbp)
leaq -0xb00(%rbp), %rdi
callq 0x3350
movq 0x23f73(%rip), %r13     # 0x30fc8
movq 0x23f84(%rip), %rbx     # 0x30fe0
leaq -0x5d8(%rbp), %r12
movq %r13, %rdi
leaq 0x16a2c(%rip), %rsi     # 0x23a99
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x2b(%rbp), %rsi
callq 0x3280
movzbl -0x2b(%rbp), %eax
cmpl $0x6e, %eax
je 0xd0b1
cmpl $0x65, %eax
je 0xd0b1
movq %r13, %rdi
leaq 0x16a4f(%rip), %rsi     # 0x23aed
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movb $0x73, -0x2a(%rbp)
jmp 0xd063
movq %r13, %rdi
leaq 0x16644(%rip), %rsi     # 0x236ff
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x238(%rbp), %rsi
callq 0x3260
movb -0x2b(%rbp), %r14b
movq %r12, %rdi
leaq -0x238(%rbp), %rsi
callq 0x3290
movsbl %r14b, %edx
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq %r12, %rcx
leaq -0x29(%rbp), %r8
callq 0x212fe
movl %eax, %r15d
movq %r12, %rdi
callq 0x3100
testb %r15b, %r15b
je 0xd141
leaq -0x770(%rbp), %r14
movq %r14, %rdi
leaq -0x238(%rbp), %rsi
pushq $0x18
popq %rdx
callq 0x3300
movq %r14, %rdi
leaq -0x30(%rbp), %rsi
callq 0x3150
movq %r14, %rdi
callq 0x3170
jmp 0xd160
movq %r13, %rdi
leaq 0x165c1(%rip), %rsi     # 0x2370c
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd0b1
leaq -0x258(%rbp), %rdi
leaq 0x16995(%rip), %rsi     # 0x23b0d
callq 0x33b0
movq %r13, %rdi
leaq 0x165bc(%rip), %rsi     # 0x23743
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
callq 0x3380
movq %rbx, %rdi
leaq -0xa8(%rbp), %rsi
callq 0x3060
leaq -0xa8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
je 0xd1e8
movq -0xa8(%rbp), %r15
movq -0xa0(%rbp), %r12
xorl %r14d, %r14d
cmpq %r14, %r12
je 0xd207
movsbl (%r15,%r14), %edi
callq 0x32c0
movb %al, (%r15,%r14)
incq %r14
jmp 0xd1d0
movq %r13, %rdi
leaq 0x16560(%rip), %rsi     # 0x23752
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd17d
movq %r13, %rdi
leaq 0x168fb(%rip), %rsi     # 0x23b16
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x3060
leaq -0x1d8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21bd2
testb %al, %al
jne 0xd26a
movq %r13, %rdi
leaq 0x168dc(%rip), %rsi     # 0x23b31
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd211
leaq 0x164db(%rip), %r12     # 0x23752
movq %r13, %rdi
leaq 0x168e6(%rip), %rsi     # 0x23b67
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x3060
leaq -0x1b8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x22195
testb %al, %al
jne 0xd2cc
movq %r13, %rdi
movq %r12, %rsi
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd277
jmp 0xd2f7
movq %r13, %rdi
callq 0x3110
movq %r13, %rdi
leaq 0x168b1(%rip), %rsi     # 0x23b97
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movb $0x6e, -0x29(%rbp)
movq %r13, %rdi
leaq 0x16877(%rip), %rsi     # 0x23b78
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x158(%rbp), %rsi
callq 0x3060
leaq -0x158(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0xd34c
movq %r13, %rdi
movq %r12, %rsi
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x5b8(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x3290
movq -0x118(%rbp), %rdi
leaq -0x5b8(%rbp), %r14
movq %r14, %rsi
callq 0x20e46
movl %eax, %r15d
movq %r14, %rdi
callq 0x3100
testb %r15b, %r15b
je 0xd2d4
cmpb $0x6e, -0x29(%rbp)
je 0xd2f7
movq %r13, %rdi
leaq 0x1681d(%rip), %rsi     # 0x23bba
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x138(%rbp), %rsi
callq 0x3060
leaq -0x138(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0xd3e8
movq %r13, %rdi
movq %r12, %rsi
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x598(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x3290
xorl %edi, %edi
movq -0x110(%rbp), %rsi
leaq -0x598(%rbp), %r14
movq %r14, %rdx
pushq $0x61
popq %rcx
callq 0x20eb7
movl %eax, %r15d
movq %r14, %rdi
callq 0x3100
testb %r15b, %r15b
je 0xd432
cmpb $0x6e, -0x29(%rbp)
je 0xd393
jmp 0xd462
movq %r13, %rdi
callq 0x3110
movq %r13, %rdi
leaq 0x16792(%rip), %rsi     # 0x23bd6
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movb $0x6e, -0x29(%rbp)
jmp 0xd393
movq %r13, %rdi
leaq 0x1679c(%rip), %rsi     # 0x23c08
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x108(%rbp), %rsi
callq 0x3060
leaq -0x108(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x21b16
testb %al, %al
jne 0xd4b7
movq %r13, %rdi
movq %r12, %rsi
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movq -0x108(%rbp), %r15
movq -0x100(%rbp), %r12
xorl %r14d, %r14d
cmpq %r14, %r12
je 0xd4e0
movsbl (%r15,%r14), %edi
callq 0x32c0
movb %al, (%r15,%r14)
incq %r14
jmp 0xd4c8
cmpb $0x6e, -0x29(%rbp)
leaq 0x16267(%rip), %r12     # 0x23752
je 0xd462
movq %r13, %rdi
leaq 0x16728(%rip), %rsi     # 0x23c23
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x88(%rbp), %rsi
callq 0x3060
movq -0x88(%rbp), %r15
movq -0x80(%rbp), %r12
xorl %r14d, %r14d
cmpq %r14, %r12
je 0xd53d
movsbl (%r15,%r14), %edi
callq 0x33a0
movb %al, (%r15,%r14)
incq %r14
jmp 0xd525
leaq -0x88(%rbp), %rdi
leaq 0x166f2(%rip), %rsi     # 0x23c3d
callq 0xb86b
leaq -0x5d8(%rbp), %r12
testb %al, %al
je 0xd5a1
leaq -0x88(%rbp), %rdi
leaq 0x166d6(%rip), %rsi     # 0x23c3f
callq 0xb86b
testb %al, %al
je 0xd5a1
movb $0x6e, -0x29(%rbp)
movq %r13, %rdi
leaq 0x166c1(%rip), %rsi     # 0x23c41
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd4f1
jmp 0xd5b1
movq -0x88(%rbp), %rax
movb (%rax), %al
movb %al, -0x2c(%rbp)
movb $0x73, -0x29(%rbp)
movq %r13, %rdi
leaq 0x166a8(%rip), %rsi     # 0x23c63
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x218(%rbp), %rsi
callq 0x3060
leaq -0x578(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x3290
leaq -0x578(%rbp), %r14
movq %r14, %rdi
leaq -0x29(%rbp), %rsi
callq 0x22273
movl %eax, %r15d
movq %r14, %rdi
callq 0x3100
testb %r15b, %r15b
jne 0xd62c
movq %r13, %rdi
leaq 0x16669(%rip), %rsi     # 0x23c80
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
leaq -0x218(%rbp), %rdi
xorl %esi, %esi
callq 0x11e17
movsd %xmm0, -0x68(%rbp)
cmpb $0x6e, -0x29(%rbp)
je 0xd5b1
movq %r13, %rdi
leaq 0x16662(%rip), %rsi     # 0x23cb5
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x3060
leaq -0x558(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
callq 0x3290
leaq -0x558(%rbp), %r14
movq %r14, %rdi
leaq -0x29(%rbp), %rsi
callq 0x21d78
movl %eax, %r15d
movq %r14, %rdi
callq 0x3100
testb %r15b, %r15b
je 0xd6d4
leaq -0x770(%rbp), %r14
movq %r14, %rdi
leaq -0x1f8(%rbp), %rsi
pushq $0x18
popq %rdx
callq 0x3300
movq %r14, %rdi
leaq -0x38(%rbp), %rsi
callq 0x3150
movq %r14, %rdi
callq 0x3170
jmp 0xd6f3
movq %r13, %rdi
leaq 0x165f0(%rip), %rsi     # 0x23cce
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd649
movq %r13, %rdi
leaq 0x16605(%rip), %rsi     # 0x23d0c
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x178(%rbp), %rsi
callq 0x3060
leaq -0x538(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x3290
leaq -0x538(%rbp), %r14
movq %r14, %rdi
leaq -0x29(%rbp), %rsi
callq 0x222ff
movl %eax, %r15d
movq %r14, %rdi
callq 0x3100
testb %r15b, %r15b
jne 0xd778
movq %r13, %rdi
leaq 0x165d3(%rip), %rsi     # 0x23d36
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd6fd
movq %r13, %rdi
leaq 0x165e5(%rip), %rsi     # 0x23d71
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x198(%rbp), %rsi
callq 0x3060
leaq -0x198(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x2238b
testb %al, %al
jne 0xd7db
movq %r13, %rdi
leaq 0x165cb(%rip), %rsi     # 0x23d91
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd782
cmpb $0x6e, -0x2b(%rbp)
movsbl -0x2c(%rbp), %eax
movl %eax, -0x34(%rbp)
jne 0xdb09
movq -0x40(%rbp), %rax
movl 0x28(%rax), %eax
movq %rax, -0x58(%rbp)
movq %r13, %rdi
leaq 0x165c0(%rip), %rsi     # 0x23dc7
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3060
leaq -0xc8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x22480
testb %al, %al
jne 0xd856
movq %r13, %rdi
leaq 0x1659e(%rip), %rsi     # 0x23ddf
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd7fd
movq %r13, %rdi
leaq 0x1659e(%rip), %rsi     # 0x23e04
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0xe8(%rbp), %rsi
callq 0x3060
leaq -0xe8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x2238b
testb %al, %al
jne 0xd8b5
movq %r13, %rdi
leaq 0x164f1(%rip), %rsi     # 0x23d91
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xd85c
movl -0x30(%rbp), %r15d
leaq -0x4d8(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x3290
leaq -0x4b8(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x3290
leaq -0x498(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x3290
leaq -0x478(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x3290
leaq -0x458(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x3290
leaq -0x438(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x3290
leaq -0x418(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x3290
movl -0x38(%rbp), %eax
movq %rax, -0x50(%rbp)
leaq -0x3f8(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x3290
leaq -0x3d8(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x3290
leaq -0x3b8(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3290
leaq -0x518(%rbp), %r14
movq %r14, %rdi
leaq -0xe8(%rbp), %rsi
callq 0x3290
subq $0x8, %rsp
leaq -0x900(%rbp), %rdi
movl %r15d, %esi
leaq -0x4d8(%rbp), %rdx
leaq -0x4b8(%rbp), %rcx
leaq -0x498(%rbp), %r8
movl -0x34(%rbp), %r9d
movsd -0x68(%rbp), %xmm0
pushq %r14
leaq -0x3b8(%rbp), %rax
pushq %rax
leaq -0x3d8(%rbp), %rax
pushq %rax
leaq -0x3f8(%rbp), %rax
pushq %rax
pushq -0x50(%rbp)
leaq -0x418(%rbp), %rax
pushq %rax
leaq -0x438(%rbp), %rax
pushq %rax
leaq -0x458(%rbp), %rax
pushq %rax
leaq -0x478(%rbp), %rax
pushq %rax
callq 0x5146
addq $0x50, %rsp
movl -0x30(%rbp), %eax
movl %eax, -0x770(%rbp)
leaq -0x768(%rbp), %rdi
leaq -0x900(%rbp), %rsi
callq 0x1209a
movq -0x40(%rbp), %r14
movq %r14, %rdi
leaq -0x770(%rbp), %rsi
callq 0x128c2
leaq -0x768(%rbp), %rdi
callq 0x543c
leaq -0x900(%rbp), %rdi
callq 0x543c
leaq -0x518(%rbp), %rdi
callq 0x3100
leaq -0x3b8(%rbp), %rdi
callq 0x3100
leaq -0x3d8(%rbp), %rdi
callq 0x3100
leaq -0x3f8(%rbp), %rdi
callq 0x3100
leaq -0x418(%rbp), %rdi
callq 0x3100
leaq -0x438(%rbp), %rdi
callq 0x3100
leaq -0x458(%rbp), %rdi
callq 0x3100
leaq -0x478(%rbp), %rdi
callq 0x3100
leaq -0x498(%rbp), %rdi
callq 0x3100
leaq -0x4b8(%rbp), %rdi
callq 0x3100
leaq -0x4d8(%rbp), %rdi
callq 0x3100
movq -0x58(%rbp), %rax
cmpq %rax, 0x28(%r14)
jne 0xde0f
movq %r13, %rdi
leaq 0x16336(%rip), %rsi     # 0x23e25
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
jmp 0xd0ab
movq -0x48(%rbp), %rax
movl 0x28(%rax), %eax
movq %rax, -0x58(%rbp)
movq %r13, %rdi
leaq 0x16335(%rip), %rsi     # 0x23e53
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3060
leaq -0xc8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x22480
testb %al, %al
jne 0xdb6d
movq %r13, %rdi
leaq 0x16287(%rip), %rsi     # 0x23ddf
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xdb14
movq %r13, %rdi
leaq 0x16287(%rip), %rsi     # 0x23e04
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0xe8(%rbp), %rsi
callq 0x3060
leaq -0xe8(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0x2238b
testb %al, %al
jne 0xdbc4
movq %r13, %rdi
leaq 0x161da(%rip), %rsi     # 0x23d91
callq 0x31f0
movq %rax, %rdi
callq 0x3110
cmpb $0x6e, -0x29(%rbp)
je 0xdb73
movl -0x30(%rbp), %r14d
leaq -0x398(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x3290
leaq -0x378(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x3290
leaq -0x358(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x3290
leaq -0x338(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x3290
leaq -0x318(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x3290
leaq -0x2f8(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x3290
leaq -0x2d8(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x3290
movl -0x38(%rbp), %eax
movq %rax, -0x50(%rbp)
leaq -0x2b8(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x3290
leaq -0x298(%rbp), %rdi
leaq -0x198(%rbp), %rsi
callq 0x3290
leaq -0x278(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x3290
movl %r14d, -0x5c(%rbp)
leaq -0x4f8(%rbp), %r15
movq %r15, %rdi
leaq -0xe8(%rbp), %rsi
callq 0x3290
subq $0x8, %rsp
leaq -0x900(%rbp), %r14
movq %r14, %rdi
movl -0x5c(%rbp), %esi
leaq -0x398(%rbp), %rdx
leaq -0x378(%rbp), %rcx
leaq -0x358(%rbp), %r8
movl -0x34(%rbp), %r9d
movsd -0x68(%rbp), %xmm0
pushq %r15
leaq -0x278(%rbp), %rax
pushq %rax
leaq -0x298(%rbp), %rax
pushq %rax
leaq -0x2b8(%rbp), %rax
pushq %rax
pushq -0x50(%rbp)
leaq -0x2d8(%rbp), %rax
pushq %rax
leaq -0x2f8(%rbp), %rax
pushq %rax
leaq -0x318(%rbp), %rax
pushq %rax
leaq -0x338(%rbp), %rax
pushq %rax
callq 0x5478
addq $0x50, %rsp
movl -0x30(%rbp), %eax
movl %eax, -0x770(%rbp)
leaq -0x768(%rbp), %rdi
movq %r14, %rsi
callq 0x122ea
movq -0x48(%rbp), %r14
movq %r14, %rdi
leaq -0x770(%rbp), %rsi
callq 0x12ae8
leaq -0x768(%rbp), %rdi
callq 0x5a18
leaq -0x900(%rbp), %rdi
callq 0x5a18
leaq -0x4f8(%rbp), %rdi
callq 0x3100
leaq -0x278(%rbp), %rdi
callq 0x3100
leaq -0x298(%rbp), %rdi
callq 0x3100
leaq -0x2b8(%rbp), %rdi
callq 0x3100
leaq -0x2d8(%rbp), %rdi
callq 0x3100
leaq -0x2f8(%rbp), %rdi
callq 0x3100
leaq -0x318(%rbp), %rdi
callq 0x3100
leaq -0x338(%rbp), %rdi
callq 0x3100
leaq -0x358(%rbp), %rdi
callq 0x3100
leaq -0x378(%rbp), %rdi
callq 0x3100
leaq -0x398(%rbp), %rdi
callq 0x3100
movq -0x58(%rbp), %rax
cmpq %rax, 0x28(%r14)
jne 0xde0f
movq %r13, %rdi
leaq 0x16028(%rip), %rsi     # 0x23e25
callq 0x31f0
movq %rax, %rdi
callq 0x3110
jmp 0xd0ab
movq %r13, %rdi
leaq 0x16055(%rip), %rsi     # 0x23e6e
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rax, %rdi
callq 0x3110
movq %r13, %rdi
leaq 0x16056(%rip), %rsi     # 0x23e8e
callq 0x31f0
movq %rax, %rdi
callq 0x3110
movq %rbx, %rdi
leaq -0x2a(%rbp), %rsi
callq 0x3280
cmpb $0x73, -0x2a(%rbp)
je 0xd063
movq -0x40(%rbp), %r12
cmpq $0x0, 0x28(%r12)
movq -0x48(%rbp), %r15
je 0xdebb
leaq 0x16041(%rip), %rsi     # 0x23eb3
leaq -0xd00(%rbp), %rdi
pushq $0x10
popq %rdx
callq 0x3040
movq 0x18(%r12), %r14
addq $0x8, %r12
leaq -0xd00(%rbp), %rbx
cmpq %r12, %r14
je 0xdeaf
leaq 0x28(%r14), %rsi
movq %rbx, %rdi
callq 0x7354
movq %r14, %rdi
callq 0x3160
movq %rax, %r14
jmp 0xde91
leaq -0xd00(%rbp), %rdi
callq 0x32a0
cmpq $0x0, 0x28(%r15)
je 0xdf11
leaq 0x15ffb(%rip), %rsi     # 0x23ec4
leaq -0xb00(%rbp), %rdi
pushq $0x10
popq %rdx
callq 0x3040
movq 0x18(%r15), %r14
addq $0x8, %r15
leaq -0xb00(%rbp), %rbx
cmpq %r15, %r14
je 0xdf05
leaq 0x28(%r14), %rsi
movq %rbx, %rdi
callq 0x776c
movq %r14, %rdi
callq 0x3160
movq %rax, %r14
jmp 0xdee7
leaq -0xb00(%rbp), %rdi
callq 0x32a0
leaq -0xb00(%rbp), %rdi
callq 0x32e0
leaq -0xd00(%rbp), %rdi
callq 0x32e0
leaq -0x1f8(%rbp), %rdi
callq 0x3100
leaq -0x88(%rbp), %rdi
callq 0x3100
leaq -0x218(%rbp), %rdi
callq 0x3100
leaq -0x238(%rbp), %rdi
callq 0x3100
leaq -0xa8(%rbp), %rdi
callq 0x3100
leaq -0x178(%rbp), %rdi
callq 0x3100
leaq -0xc8(%rbp), %rdi
callq 0x3100
leaq -0x198(%rbp), %rdi
callq 0x3100
leaq -0xe8(%rbp), %rdi
callq 0x3100
leaq -0x108(%rbp), %rdi
callq 0x3100
leaq -0x138(%rbp), %rdi
callq 0x3100
leaq -0x158(%rbp), %rdi
callq 0x3100
leaq -0x1b8(%rbp), %rdi
callq 0x3100
leaq -0x1d8(%rbp), %rdi
callq 0x3100
leaq -0x258(%rbp), %rdi
callq 0x3100
addq $0xcd8, %rsp            # imm = 0xCD8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
jmp 0xe278
movq %rax, %rbx
jmp 0xe284
jmp 0xe269
jmp 0xe269
jmp 0xe269
movq %rax, %rbx
jmp 0xe0e5
movq %rax, %rbx
jmp 0xe0f1
jmp 0xe269
movq %rax, %rbx
jmp 0xe0c1
movq %rax, %rbx
jmp 0xe0cd
movq %rax, %rbx
jmp 0xe0d9
movq %rax, %rbx
jmp 0xe091
movq %rax, %rbx
jmp 0xe09d
movq %rax, %rbx
jmp 0xe0a9
movq %rax, %rbx
jmp 0xe0b5
movq %rax, %rbx
leaq -0x768(%rbp), %rdi
callq 0x543c
jmp 0xe063
movq %rax, %rbx
leaq -0x900(%rbp), %rdi
callq 0x543c
jmp 0xe074
movq %rax, %rbx
leaq -0x518(%rbp), %rdi
callq 0x3100
jmp 0xe085
movq %rax, %rbx
leaq -0x3b8(%rbp), %rdi
callq 0x3100
leaq -0x3d8(%rbp), %rdi
callq 0x3100
leaq -0x3f8(%rbp), %rdi
callq 0x3100
leaq -0x418(%rbp), %rdi
callq 0x3100
leaq -0x438(%rbp), %rdi
callq 0x3100
leaq -0x458(%rbp), %rdi
callq 0x3100
leaq -0x478(%rbp), %rdi
callq 0x3100
leaq -0x498(%rbp), %rdi
callq 0x3100
leaq -0x4b8(%rbp), %rdi
callq 0x3100
leaq -0x4d8(%rbp), %rdi
jmp 0xe242
movq %rax, %rbx
jmp 0xe166
movq %rax, %rbx
jmp 0xe15a
movq %rax, %rbx
jmp 0xe14e
movq %rax, %rbx
jmp 0xe142
movq %rax, %rbx
jmp 0xe136
movq %rax, %rbx
jmp 0xe12a
movq %rax, %rbx
leaq -0x768(%rbp), %rdi
callq 0x5a18
leaq -0x900(%rbp), %rdi
callq 0x5a18
leaq -0x4f8(%rbp), %rdi
callq 0x3100
leaq -0x278(%rbp), %rdi
callq 0x3100
leaq -0x298(%rbp), %rdi
callq 0x3100
leaq -0x2b8(%rbp), %rdi
callq 0x3100
leaq -0x2d8(%rbp), %rdi
callq 0x3100
leaq -0x2f8(%rbp), %rdi
callq 0x3100
leaq -0x318(%rbp), %rdi
callq 0x3100
leaq -0x338(%rbp), %rdi
callq 0x3100
leaq -0x358(%rbp), %rdi
callq 0x3100
leaq -0x378(%rbp), %rdi
callq 0x3100
leaq -0x398(%rbp), %rdi
jmp 0xe242
jmp 0xe269
movq %rax, %rbx
jmp 0xe1ae
movq %rax, %rbx
jmp 0xe1a2
movq %rax, %rbx
jmp 0xe196
movq %rax, %rbx
jmp 0xe18a
movq %rax, %rbx
jmp 0xe17e
movq %rax, %rbx
jmp 0xe172
jmp 0xe269
jmp 0xe269
jmp 0xe1eb
jmp 0xe269
movq %rax, %rbx
leaq -0x770(%rbp), %rdi
callq 0x3170
jmp 0xe26c
movq %rax, %rbx
leaq -0x538(%rbp), %rdi
jmp 0xe242
movq %rax, %rbx
leaq -0x558(%rbp), %rdi
jmp 0xe242
movq %rax, %rbx
leaq -0x578(%rbp), %rdi
jmp 0xe242
movq %rax, %rbx
leaq -0x5d8(%rbp), %rdi
jmp 0xe242
movq %rax, %rbx
leaq -0x598(%rbp), %rdi
jmp 0xe242
movq %rax, %rbx
leaq -0x5b8(%rbp), %rdi
callq 0x3100
jmp 0xe26c
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
jmp 0xe269
movq %rax, %rbx
leaq -0xb00(%rbp), %rdi
callq 0x32e0
leaq -0xd00(%rbp), %rdi
callq 0x32e0
leaq -0x1f8(%rbp), %rdi
callq 0x3100
leaq -0x88(%rbp), %rdi
callq 0x3100
leaq -0x218(%rbp), %rdi
callq 0x3100
leaq -0x238(%rbp), %rdi
callq 0x3100
leaq -0xa8(%rbp), %rdi
callq 0x3100
leaq -0x178(%rbp), %rdi
callq 0x3100
leaq -0xc8(%rbp), %rdi
callq 0x3100
leaq -0x198(%rbp), %rdi
callq 0x3100
leaq -0xe8(%rbp), %rdi
callq 0x3100
leaq -0x108(%rbp), %rdi
callq 0x3100
leaq -0x138(%rbp), %rdi
callq 0x3100
leaq -0x158(%rbp), %rdi
callq 0x3100
leaq -0x1b8(%rbp), %rdi
callq 0x3100
leaq -0x1d8(%rbp), %rdi
callq 0x3100
leaq -0x258(%rbp), %rdi
callq 0x3100
movq %rbx, %rdi
callq 0x3370