// File: t0mm4rx[P]piscine_cpp/day03/ex01/main.cpp
// Function: main
int main(void)
{
	srand(time(0));
	FragTrap john("John");
	FragTrap micheal("Micheal");
	ScavTrap rose("Rose");

	rose.challengeNewcomer();
	john.rangedAttack("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	john.vaulthunter_dot_exe("Micheal");
	rose.challengeNewcomer();
	micheal.vaulthunter_dot_exe("John");
	micheal.takeDamage(30);
	micheal.meleeAttack("John");
	john.takeDamage(20);

	return (0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x300, %rsp            # imm = 0x300
movl $0x0, -0x4(%rbp)
xorl %eax, %eax
movl %eax, %edi
callq 0x2100
movl %eax, %edi
callq 0x2110
leaq -0x71(%rbp), %rdi
movq %rdi, -0x2b0(%rbp)
callq 0x2210
movq -0x2b0(%rbp), %rdx
leaq 0x1007(%rip), %rsi      # 0x4247
leaq -0x70(%rbp), %rdi
callq 0x3940
jmp 0x324b
leaq -0x50(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x2400
jmp 0x325a
leaq -0x70(%rbp), %rdi
callq 0x2090
leaq -0x71(%rbp), %rdi
callq 0x2150
leaq -0xf1(%rbp), %rdi
movq %rdi, -0x2b8(%rbp)
callq 0x2210
movq -0x2b8(%rbp), %rdx
leaq 0xfbf(%rip), %rsi       # 0x424c
leaq -0xf0(%rbp), %rdi
callq 0x3940
jmp 0x329b
leaq -0xd0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x2400
jmp 0x32b0
leaq -0xf0(%rbp), %rdi
callq 0x2090
leaq -0xf1(%rbp), %rdi
callq 0x2150
leaq -0x161(%rbp), %rdi
movq %rdi, -0x2c0(%rbp)
callq 0x2210
movq -0x2c0(%rbp), %rdx
leaq 0xf6b(%rip), %rsi       # 0x4254
leaq -0x160(%rbp), %rdi
callq 0x3940
jmp 0x32f7
leaq -0x140(%rbp), %rdi
leaq -0x160(%rbp), %rsi
callq 0x2b70
jmp 0x330c
leaq -0x160(%rbp), %rdi
callq 0x2090
leaq -0x161(%rbp), %rdi
callq 0x2150
leaq -0x140(%rbp), %rdi
callq 0x30a0
jmp 0x3332
leaq -0x189(%rbp), %rdi
movq %rdi, -0x2c8(%rbp)
callq 0x2210
movq -0x2c8(%rbp), %rdx
leaq 0xef9(%rip), %rsi       # 0x424c
leaq -0x188(%rbp), %rdi
callq 0x3940
jmp 0x3361
leaq -0x50(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0x2680
jmp 0x3373
leaq -0x188(%rbp), %rdi
callq 0x2090
leaq -0x189(%rbp), %rdi
callq 0x2150
leaq -0x1b1(%rbp), %rdi
movq %rdi, -0x2d0(%rbp)
callq 0x2210
movq -0x2d0(%rbp), %rdx
leaq 0xea0(%rip), %rsi       # 0x424c
leaq -0x1b0(%rbp), %rdi
callq 0x3940
jmp 0x33ba
leaq -0x50(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x2930
jmp 0x33cc
leaq -0x1b0(%rbp), %rdi
callq 0x2090
leaq -0x1b1(%rbp), %rdi
callq 0x2150
leaq -0x1d9(%rbp), %rdi
movq %rdi, -0x2d8(%rbp)
callq 0x2210
movq -0x2d8(%rbp), %rdx
leaq 0xe47(%rip), %rsi       # 0x424c
leaq -0x1d8(%rbp), %rdi
callq 0x3940
jmp 0x3413
leaq -0x50(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0x2930
jmp 0x3425
leaq -0x1d8(%rbp), %rdi
callq 0x2090
leaq -0x1d9(%rbp), %rdi
callq 0x2150
leaq -0x201(%rbp), %rdi
movq %rdi, -0x2e0(%rbp)
callq 0x2210
movq -0x2e0(%rbp), %rdx
leaq 0xdee(%rip), %rsi       # 0x424c
leaq -0x200(%rbp), %rdi
callq 0x3940
jmp 0x346c
leaq -0x50(%rbp), %rdi
leaq -0x200(%rbp), %rsi
callq 0x2930
jmp 0x347e
leaq -0x200(%rbp), %rdi
callq 0x2090
leaq -0x201(%rbp), %rdi
callq 0x2150
leaq -0x229(%rbp), %rdi
movq %rdi, -0x2e8(%rbp)
callq 0x2210
movq -0x2e8(%rbp), %rdx
leaq 0xd95(%rip), %rsi       # 0x424c
leaq -0x228(%rbp), %rdi
callq 0x3940
jmp 0x34c5
leaq -0x50(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x2930
jmp 0x34d7
leaq -0x228(%rbp), %rdi
callq 0x2090
leaq -0x229(%rbp), %rdi
callq 0x2150
leaq -0x251(%rbp), %rdi
movq %rdi, -0x2f0(%rbp)
callq 0x2210
movq -0x2f0(%rbp), %rdx
leaq 0xd3c(%rip), %rsi       # 0x424c
leaq -0x250(%rbp), %rdi
callq 0x3940
jmp 0x351e
leaq -0x50(%rbp), %rdi
leaq -0x250(%rbp), %rsi
callq 0x2930
jmp 0x3530
leaq -0x250(%rbp), %rdi
callq 0x2090
leaq -0x251(%rbp), %rdi
callq 0x2150
leaq -0x140(%rbp), %rdi
callq 0x30a0
jmp 0x3556
leaq -0x279(%rbp), %rdi
movq %rdi, -0x2f8(%rbp)
callq 0x2210
movq -0x2f8(%rbp), %rdx
leaq 0xcd0(%rip), %rsi       # 0x4247
leaq -0x278(%rbp), %rdi
callq 0x3940
jmp 0x3585
leaq -0xd0(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x2930
jmp 0x359a
leaq -0x278(%rbp), %rdi
callq 0x2090
leaq -0x279(%rbp), %rdi
callq 0x2150
leaq -0xd0(%rbp), %rdi
movl $0x1e, %esi
callq 0x27a0
jmp 0x35c5
leaq -0x2a1(%rbp), %rdi
movq %rdi, -0x300(%rbp)
callq 0x2210
movq -0x300(%rbp), %rdx
leaq 0xc61(%rip), %rsi       # 0x4247
leaq -0x2a0(%rbp), %rdi
callq 0x3940
jmp 0x35f4
leaq -0xd0(%rbp), %rdi
leaq -0x2a0(%rbp), %rsi
callq 0x2710
jmp 0x3609
leaq -0x2a0(%rbp), %rdi
callq 0x2090
leaq -0x2a1(%rbp), %rdi
callq 0x2150
leaq -0x50(%rbp), %rdi
movl $0x14, %esi
callq 0x27a0
jmp 0x3631
movl $0x0, -0x4(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x2d80
leaq -0xd0(%rbp), %rdi
callq 0x2610
leaq -0x50(%rbp), %rdi
callq 0x2610
movl -0x4(%rbp), %eax
addq $0x300, %rsp            # imm = 0x300
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x368e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x2090
leaq -0x71(%rbp), %rdi
callq 0x2150
jmp 0x3928
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x36c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x2090
leaq -0xf1(%rbp), %rdi
callq 0x2150
jmp 0x391f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3705
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x2090
leaq -0x161(%rbp), %rdi
callq 0x2150
jmp 0x3913
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3907
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3756
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x188(%rbp), %rdi
callq 0x2090
leaq -0x189(%rbp), %rdi
callq 0x2150
jmp 0x3907
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3793
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x2090
leaq -0x1b1(%rbp), %rdi
callq 0x2150
jmp 0x3907
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x37d0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x1d8(%rbp), %rdi
callq 0x2090
leaq -0x1d9(%rbp), %rdi
callq 0x2150
jmp 0x3907
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x380d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x200(%rbp), %rdi
callq 0x2090
leaq -0x201(%rbp), %rdi
callq 0x2150
jmp 0x3907
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x384a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x228(%rbp), %rdi
callq 0x2090
leaq -0x229(%rbp), %rdi
callq 0x2150
jmp 0x3907
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x3887
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x250(%rbp), %rdi
callq 0x2090
leaq -0x251(%rbp), %rdi
callq 0x2150
jmp 0x3907
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x38c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x278(%rbp), %rdi
callq 0x2090
leaq -0x279(%rbp), %rdi
callq 0x2150
jmp 0x3907
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
jmp 0x38fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x80(%rbp)
movl %eax, -0x84(%rbp)
leaq -0x2a0(%rbp), %rdi
callq 0x2090
leaq -0x2a1(%rbp), %rdi
callq 0x2150
leaq -0x140(%rbp), %rdi
callq 0x2d80
leaq -0xd0(%rbp), %rdi
callq 0x2610
leaq -0x50(%rbp), %rdi
callq 0x2610
movq -0x80(%rbp), %rdi
callq 0x2200
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)