// File: JoshCplusplus[P]Chemistry-Atom-Simulator-/main.cc
// Function: main
int main(){
	system("clear");
	for(int i = 0; i < y_size*x_size; i++){
		board[i] = "*";
	}
	//	print_board();
	cout << "Welcome to Chemistry Simulation, Enter your choice: " << endl;
	int choice;
	while(true){
		cout << "1)Simulate atoms" << endl;
		cout << "2)Check list of available atoms/molecules" << endl;
		cout << "3)Quit" << endl;
		cin >> choice;
		if(choice == 1){
			string name1, name2;
			bool check;
			molecule mol_check;
			while(cin){
				while(cin){
					cout << "Enter Atom 1: ";
					cin >> name1;
					for(auto& c: name1) c = toupper(c);
					if(name1 == "Q") die();
					if(name1.size() == 1) check = check_atom(name1);
					else check = check_mol(name1);
					if(check) break;
					else cout << "Invalid Atom/Molecule" << endl;
				}
				while(cin){
					cout << "Enter Atom2: ";
					cin >> name2;
					for(auto & c: name2) c = toupper(c);
					if(name2 == "Q") die();
					if(name2.size() == 1) check = check_atom(name2);
					else check = check_mol(name2);
					if(check) break;
					else cout << "Invalid Atom/Moleculue" << endl;
				}
				mol_check = find_mol(name1,name2);
				if(mol_check.get_name() == "BAD"){
					cout << "Bad pair of atoms/molecules" << endl;
				}
				else break;
			}
			sim_board(name1, name2,mol_check);

		}
		else if(choice ==2){
			//print list of available atoms/moleculues	
			print_atoms();
		}
		else if(choice == 3){
			die();
		}
	}
	/*	for(int i = 0; i <y_size; i++){
		for(int j =0; j < x_size; j++){
		cout << board[i][j];
		}
		cout << endl;
		}*/
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3a0, %rsp            # imm = 0x3A0
movl $0x0, -0x4(%rbp)
leaq 0x63e6(%rip), %rdi      # 0xb11f
callq 0x2140
movl $0x0, -0x8(%rbp)
cmpl $0x1d1, -0x8(%rbp)      # imm = 0x1D1
jge 0x4d77
movslq -0x8(%rbp), %rax
leaq 0xc927(%rip), %rdi      # 0x11680
shlq $0x5, %rax
addq %rax, %rdi
leaq 0x63fb(%rip), %rsi      # 0xb162
callq 0x2240
movl -0x8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8(%rbp)
jmp 0x4d45
movq 0xc252(%rip), %rdi      # 0x10fd0
leaq 0x6401(%rip), %rsi      # 0xb186
callq 0x21a0
movq %rax, %rdi
movq 0xc22c(%rip), %rsi      # 0x10fc0
callq 0x21c0
movq 0xc230(%rip), %rdi      # 0x10fd0
leaq 0x6414(%rip), %rsi      # 0xb1bb
callq 0x21a0
movq %rax, %rdi
movq 0xc20a(%rip), %rsi      # 0x10fc0
callq 0x21c0
movq 0xc20e(%rip), %rdi      # 0x10fd0
leaq 0x6403(%rip), %rsi      # 0xb1cc
callq 0x21a0
movq %rax, %rdi
movq 0xc1e8(%rip), %rsi      # 0x10fc0
callq 0x21c0
movq 0xc1ec(%rip), %rdi      # 0x10fd0
leaq 0x640b(%rip), %rsi      # 0xb1f6
callq 0x21a0
movq %rax, %rdi
movq 0xc1c6(%rip), %rsi      # 0x10fc0
callq 0x21c0
movq 0xc1da(%rip), %rdi      # 0x10fe0
leaq -0xc(%rbp), %rsi
callq 0x20f0
cmpl $0x1, -0xc(%rbp)
jne 0x555c
leaq -0x30(%rbp), %rdi
callq 0x2260
leaq -0x50(%rbp), %rdi
callq 0x2260
leaq -0xe0(%rbp), %rdi
callq 0x5cc0
jmp 0x4e39
jmp 0x4e3b
movq 0xc19e(%rip), %rdi      # 0x10fe0
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2200
movb %al, -0x361(%rbp)
jmp 0x4e59
movb -0x361(%rbp), %al
testb $0x1, %al
jne 0x4e68
jmp 0x5442
jmp 0x4e6a
movq 0xc16f(%rip), %rdi      # 0x10fe0
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2200
movb %al, -0x362(%rbp)
jmp 0x4e88
movb -0x362(%rbp), %al
testb $0x1, %al
jne 0x4e97
jmp 0x50b4
movq 0xc132(%rip), %rdi      # 0x10fd0
leaq 0x6358(%rip), %rsi      # 0xb1fd
callq 0x21a0
jmp 0x4eac
movq 0xc12d(%rip), %rdi      # 0x10fe0
leaq -0x30(%rbp), %rsi
callq 0x2210
jmp 0x4ebe
leaq -0x30(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0xf8(%rbp), %rdi
callq 0x2150
movq %rax, -0x100(%rbp)
movq -0xf8(%rbp), %rdi
callq 0x20d0
movq %rax, -0x108(%rbp)
leaq -0x100(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x6050
testb $0x1, %al
jne 0x4f08
jmp 0x4f71
leaq -0x100(%rbp), %rdi
callq 0x6090
movq %rax, -0x110(%rbp)
movq -0x110(%rbp), %rax
movsbl (%rax), %edi
callq 0x22f0
movb %al, %cl
movq -0x110(%rbp), %rax
movb %cl, (%rax)
leaq -0x100(%rbp), %rdi
callq 0x60b0
jmp 0x4eef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
jmp 0x5548
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
jmp 0x553c
leaq 0x6294(%rip), %rsi      # 0xb20c
leaq -0x30(%rbp), %rdi
callq 0x60d0
movb %al, -0x363(%rbp)
jmp 0x4f89
movb -0x363(%rbp), %al
testb $0x1, %al
jne 0x4f95
jmp 0x4f9e
callq 0x4230
jmp 0x4f9c
jmp 0x4f9e
leaq -0x30(%rbp), %rdi
callq 0x2110
cmpq $0x1, %rax
jne 0x5012
leaq -0x130(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2090
jmp 0x4fbf
leaq -0x130(%rbp), %rdi
callq 0x4930
movb %al, -0x364(%rbp)
jmp 0x4fd3
movb -0x364(%rbp), %al
andb $0x1, %al
movb %al, -0x51(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x2100
jmp 0x5074
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x2100
jmp 0x553c
leaq -0x150(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2090
jmp 0x5024
leaq -0x150(%rbp), %rdi
callq 0x4880
movb %al, -0x365(%rbp)
jmp 0x5038
movb -0x365(%rbp), %al
andb $0x1, %al
movb %al, -0x51(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x2100
jmp 0x5074
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
leaq -0x150(%rbp), %rdi
callq 0x2100
jmp 0x553c
testb $0x1, -0x51(%rbp)
je 0x507c
jmp 0x50b4
movq 0xbf4d(%rip), %rdi      # 0x10fd0
leaq 0x6184(%rip), %rsi      # 0xb20e
callq 0x21a0
movq %rax, -0x370(%rbp)
jmp 0x5098
movq -0x370(%rbp), %rdi
movq 0xbf1a(%rip), %rsi      # 0x10fc0
callq 0x21c0
jmp 0x50ad
jmp 0x50af
jmp 0x4e6a
jmp 0x50b6
movq 0xbf23(%rip), %rdi      # 0x10fe0
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0x2200
movb %al, -0x371(%rbp)
jmp 0x50d4
movb -0x371(%rbp), %al
testb $0x1, %al
jne 0x50e3
jmp 0x52d2
movq 0xbee6(%rip), %rdi      # 0x10fd0
leaq 0x6133(%rip), %rsi      # 0xb224
callq 0x21a0
jmp 0x50f8
movq 0xbee1(%rip), %rdi      # 0x10fe0
leaq -0x50(%rbp), %rsi
callq 0x2210
jmp 0x510a
leaq -0x50(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rdi
callq 0x2150
movq %rax, -0x160(%rbp)
movq -0x158(%rbp), %rdi
callq 0x20d0
movq %rax, -0x168(%rbp)
leaq -0x160(%rbp), %rdi
leaq -0x168(%rbp), %rsi
callq 0x6050
testb $0x1, %al
jne 0x5154
jmp 0x518f
leaq -0x160(%rbp), %rdi
callq 0x6090
movq %rax, -0x170(%rbp)
movq -0x170(%rbp), %rax
movsbl (%rax), %edi
callq 0x22f0
movb %al, %cl
movq -0x170(%rbp), %rax
movb %cl, (%rax)
leaq -0x160(%rbp), %rdi
callq 0x60b0
jmp 0x513b
leaq 0x6076(%rip), %rsi      # 0xb20c
leaq -0x50(%rbp), %rdi
callq 0x60d0
movb %al, -0x372(%rbp)
jmp 0x51a7
movb -0x372(%rbp), %al
testb $0x1, %al
jne 0x51b3
jmp 0x51bc
callq 0x4230
jmp 0x51ba
jmp 0x51bc
leaq -0x50(%rbp), %rdi
callq 0x2110
cmpq $0x1, %rax
jne 0x5230
leaq -0x190(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2090
jmp 0x51dd
leaq -0x190(%rbp), %rdi
callq 0x4930
movb %al, -0x373(%rbp)
jmp 0x51f1
movb -0x373(%rbp), %al
andb $0x1, %al
movb %al, -0x51(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x2100
jmp 0x5292
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
leaq -0x190(%rbp), %rdi
callq 0x2100
jmp 0x553c
leaq -0x1b0(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2090
jmp 0x5242
leaq -0x1b0(%rbp), %rdi
callq 0x4880
movb %al, -0x374(%rbp)
jmp 0x5256
movb -0x374(%rbp), %al
andb $0x1, %al
movb %al, -0x51(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x2100
jmp 0x5292
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x2100
jmp 0x553c
testb $0x1, -0x51(%rbp)
je 0x529a
jmp 0x52d2
movq 0xbd2f(%rip), %rdi      # 0x10fd0
leaq 0x5f8a(%rip), %rsi      # 0xb232
callq 0x21a0
movq %rax, -0x380(%rbp)
jmp 0x52b6
movq -0x380(%rbp), %rdi
movq 0xbcfc(%rip), %rsi      # 0x10fc0
callq 0x21c0
jmp 0x52cb
jmp 0x52cd
jmp 0x50b6
leaq -0x258(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2090
jmp 0x52e4
leaq -0x278(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2090
jmp 0x52f6
leaq -0x238(%rbp), %rdi
leaq -0x258(%rbp), %rsi
leaq -0x278(%rbp), %rdx
callq 0x4630
jmp 0x5312
leaq -0xe0(%rbp), %rdi
movq %rdi, -0x388(%rbp)
leaq -0x238(%rbp), %rsi
movq %rsi, -0x390(%rbp)
callq 0x6100
movq -0x390(%rbp), %rdi
callq 0x56f0
leaq -0x278(%rbp), %rdi
callq 0x2100
leaq -0x258(%rbp), %rdi
callq 0x2100
movq -0x388(%rbp), %rsi
leaq -0x298(%rbp), %rdi
callq 0x5b40
jmp 0x536c
leaq 0x5ed6(%rip), %rsi      # 0xb249
leaq -0x298(%rbp), %rdi
callq 0x60d0
movb %al, -0x391(%rbp)
jmp 0x5387
leaq -0x298(%rbp), %rdi
callq 0x2100
movb -0x391(%rbp), %al
testb $0x1, %al
jne 0x53a2
jmp 0x543b
movq 0xbc27(%rip), %rdi      # 0x10fd0
leaq 0x5e9d(%rip), %rsi      # 0xb24d
callq 0x21a0
movq %rax, -0x3a0(%rbp)
jmp 0x53be
movq -0x3a0(%rbp), %rdi
movq 0xbbf4(%rip), %rsi      # 0x10fc0
callq 0x21c0
jmp 0x53d3
jmp 0x543d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
jmp 0x5407
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x2100
leaq -0x258(%rbp), %rdi
callq 0x2100
jmp 0x553c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
leaq -0x298(%rbp), %rdi
callq 0x2100
jmp 0x553c
jmp 0x5442
jmp 0x4e3b
leaq -0x2b8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x2090
jmp 0x5454
leaq -0x2d8(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x2090
jmp 0x5466
leaq -0x360(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x5e00
jmp 0x547b
leaq -0x2b8(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
leaq -0x360(%rbp), %rdx
callq 0x4990
jmp 0x5497
leaq -0x360(%rbp), %rdi
callq 0x56f0
leaq -0x2d8(%rbp), %rdi
callq 0x2100
leaq -0x2b8(%rbp), %rdi
callq 0x2100
leaq -0xe0(%rbp), %rdi
callq 0x56f0
leaq -0x50(%rbp), %rdi
callq 0x2100
leaq -0x30(%rbp), %rdi
callq 0x2100
jmp 0x5578
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
jmp 0x5530
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
jmp 0x5524
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xe8(%rbp)
movl %eax, -0xec(%rbp)
leaq -0x360(%rbp), %rdi
callq 0x56f0
leaq -0x2d8(%rbp), %rdi
callq 0x2100
leaq -0x2b8(%rbp), %rdi
callq 0x2100
leaq -0xe0(%rbp), %rdi
callq 0x56f0
leaq -0x50(%rbp), %rdi
callq 0x2100
leaq -0x30(%rbp), %rdi
callq 0x2100
jmp 0x557d
cmpl $0x2, -0xc(%rbp)
jne 0x5569
callq 0x4250
jmp 0x5576
cmpl $0x3, -0xc(%rbp)
jne 0x5574
callq 0x4230
jmp 0x5576
jmp 0x5578
jmp 0x4d99
movq -0xe8(%rbp), %rdi
callq 0x22d0
nopl (%rax)