// File: /workspace/github_cpp_makefile_star2_O2/malcolmyeh[P]CC3K/buff.cc
// Function: Buff::dealDamage[abi:cxx11](Character*)
std::string Buff::dealDamage(Character *opponent)
{
    double amount;
    double lifesteal;
    std::string combatMsg;
    std::string defender = opponent->getRace();
    int attack = this->getAtk();
    int defense = opponent->getDef();

    amount = ceil((100.0 / (100.0 + defense)) * attack);

    if (this->getRace() == "Elf")
    {
        if (this->getHP() < 35)
        {
            if (rand() % 2 == 0)
            {
                this->getPlayer()->heal(15);
                combatMsg += "Elven magic restored 15 HP (HP: " + std::to_string(this->getHP()) + "). ";
            }
        }
        amount = ceil((100.0 / (100.0 + defense)) * attack);

        if (rand() % 10 == 0)
        {
            opponent->getStunned();
            opponent->takeDamage((int)amount);
            combatMsg += "You cast Shockwave dealing " + std::to_string((int)amount) + " damage to " + defender + " (HP: " + std::to_string(opponent->getHP()) + ") and stunning them. ";
        }
        else
        {
            opponent->takeDamage((int)amount);
            combatMsg += "You deal " + std::to_string((int)amount) + " damage to " + defender + " (HP: " + std::to_string(opponent->getHP()) + "). ";
        }
    }
    else if (this->getRace() == "Orc")
    {
        int chance = rand() % 8;
        if (chance == 0)
        {
            //BESERK
            amount *= 1.5;
            lifesteal = amount * 0.25;
            this->getPlayer()->heal((int)lifesteal);
            opponent->takeDamage((int)amount);
            combatMsg = "BESERK! You deal " + std::to_string((int)amount) + " damage to " + defender + " (HP: " + std::to_string(opponent->getHP()) + "). You lifesteal for " + std::to_string((int)lifesteal) + " HP (HP: " + std::to_string(this->getHP()) + "). ";
        }
        else if (chance == 1 || chance == 2)
        {
            //lifesteal
            lifesteal = amount * 0.25;
            this->getPlayer()->heal((int)lifesteal);
            opponent->takeDamage((int)amount);
            combatMsg = "You deal " + std::to_string((int)amount) + " damage to " + defender + " (HP: " + std::to_string(opponent->getHP()) + "). You lifesteal for " + std::to_string((int)lifesteal) + " HP (HP: " + std::to_string(this->getHP()) + "). ";
        }
        else if (chance == 3 || chance == 4)
        {
            //critical hit
            amount *= 1.5;
            opponent->takeDamage((int)amount);
            combatMsg = "You deal " + std::to_string((int)amount) + " damage to " + defender + " (HP: " + std::to_string(opponent->getHP()) + "). ";
        }
        else
        {
            opponent->takeDamage((int)amount);
            combatMsg = "You deal " + std::to_string((int)amount) + " damage to " + defender + " (HP: " + std::to_string(opponent->getHP()) + "). ";
        }
    }
    else if (this->getRace() == "Dwarf")
    {
        int chance = rand() % 40;

        if (chance == 0 || chance == 1)
        {
            //longsword
            this->getPlayer()->increaseAtk(1);
            combatMsg += "You forged a Longsword. Atk increased by 1 (Atk: " + std::to_string(this->getAtk()) + "). ";
        }
        else if (chance == 2)
        {
            //broadsword
            this->getPlayer()->increaseAtk(2);
            combatMsg += "You forged a Broadsword. Atk increased by 2 (Atk: " + std::to_string(this->getAtk()) + "). ";
        }
        else if (chance == 3 || chance == 4)
        {
            //light shield
            this->getPlayer()->increaseDef(1);
            combatMsg += "You forged a Light Shield. Def increased by 1 (Def: " + std::to_string(this->getDef()) + "). ";
        }
        else if (chance == 5)
        {
            //heavy shield
            this->getPlayer()->increaseDef(2);
            combatMsg += "You forged a Heavy Shield. Def increased by 2 (Def: " + std::to_string(this->getDef()) + "). ";
        }
        amount = ceil((100.0 / (100.0 + defense)) * attack);
        opponent->takeDamage((int)amount);
        combatMsg += "You deal " + std::to_string((int)amount) + " damage to " + defender + " (HP: " + std::to_string(opponent->getHP()) + "). ";
    }
    else
    {
        opponent->takeDamage((int)amount);
        combatMsg = "You deal " + std::to_string((int)amount) + " damage to " + defender + " (HP: " + std::to_string(opponent->getHP()) + "). ";
    }
    if (opponent->getHP() == 0)
    {
        combatMsg += defender + " has been slain. You have earned " + std::to_string(opponent->getGold()) + " gold. ";
        this->getPlayer()->updateGold(opponent->getGold());
    }
    return combatMsg;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1e8, %rsp            # imm = 0x1E8
movq %rdi, %rbx
leaq 0x10(%rdi), %rax
movq %rax, (%rdi)
andq $0x0, 0x8(%rdi)
movq %rdx, %r14
movq %rsi, %r15
movb $0x0, 0x10(%rdi)
movq (%rdx), %rax
leaq -0x150(%rbp), %rdi
movq %rdx, %rsi
callq *0x28(%rax)
movq (%r15), %rax
movq %r15, %rdi
callq *0x8(%rax)
movl %eax, %r12d
movq (%r14), %rax
movq %r14, %rdi
callq *0x10(%rax)
cvtsi2sd %eax, %xmm0
movsd 0x21f2(%rip), %xmm1     # 0x108e8
addsd %xmm1, %xmm0
divsd %xmm0, %xmm1
cvtsi2sd %r12d, %xmm0
mulsd %xmm1, %xmm0
callq 0x4030
movsd %xmm0, -0x90(%rbp)
movq (%r15), %rax
leaq -0x88(%rbp), %rdi
movq %r15, %rsi
callq *0x28(%rax)
leaq 0x1f0f(%rip), %rsi      # 0x1063a
leaq -0x88(%rbp), %r12
movq %r12, %rdi
callq 0x4ac7
movl %eax, %r13d
movq %r12, %rdi
callq 0x40e0
testb %r13b, %r13b
je 0xe8df
movq (%r15), %rax
movq %r15, %rdi
callq *0x18(%rax)
cmpl $0x22, %eax
jg 0xe7ed
callq 0x4070
testb $0x1, %al
jne 0xe7ed
movq (%r15), %rax
movq %r15, %rdi
callq *0x68(%rax)
pushq $0xf
popq %rsi
movq %rax, %rdi
callq 0x9152
movq (%r15), %rax
movq %r15, %rdi
callq *0x18(%rax)
leaq -0x48(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq 0x26d6(%rip), %rsi      # 0x10e72
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rdx
callq 0x84f0
leaq 0x2415(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x42b0
leaq -0x88(%rbp), %rdi
callq 0x40e0
leaq -0x68(%rbp), %rdi
callq 0x40e0
leaq -0x48(%rbp), %rdi
callq 0x40e0
callq 0x4070
pushq $0xa
popq %rcx
cltd
idivl %ecx
testl %edx, %edx
je 0xeb6b
cvttsd2si -0x90(%rbp), %r12d
movq (%r14), %rax
movq %r14, %rdi
movl %r12d, %esi
callq *0x48(%rax)
leaq -0xf0(%rbp), %rdi
movl %r12d, %esi
callq 0x851e
leaq 0x2181(%rip), %rsi      # 0x109ac
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x84f0
leaq 0x20ab(%rip), %rdx      # 0x108f0
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x84c7
leaq -0xb0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x9201
leaq 0x23e9(%rip), %rdx      # 0x10c62
leaq -0x48(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x84c7
movq (%r14), %rax
movq %r14, %rdi
callq *0x18(%rax)
leaq -0xd0(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
callq 0x9190
leaq 0x230a(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x42b0
jmp 0xf378
movq (%r15), %rax
leaq -0x88(%rbp), %rdi
movq %r15, %rsi
callq *0x28(%rax)
leaq 0x20aa(%rip), %rsi      # 0x109a0
movq %r12, %rdi
callq 0x4ac7
movl %eax, %r13d
movq %r12, %rdi
callq 0x40e0
testb %r13b, %r13b
je 0xeabd
callq 0x4070
pushq $0x8
popq %rcx
cltd
idivl %ecx
testl %edx, %edx
je 0xed22
cmpl $0x2, %edx
ja 0xef6c
movq (%r15), %rax
movq %r15, %rdi
callq *0x68(%rax)
movsd -0x90(%rbp), %xmm1
movsd 0x2051(%rip), %xmm0     # 0x10998
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %r12d
movq %rax, %rdi
movl %r12d, %esi
callq 0x9152
movsd -0x90(%rbp), %xmm0
cvttsd2si %xmm0, %r13d
movq (%r14), %rax
movq %r14, %rdi
movl %r13d, %esi
callq *0x48(%rax)
leaq -0x1d0(%rbp), %rdi
movl %r13d, %esi
callq 0x851e
leaq 0x2022(%rip), %rsi      # 0x109ac
leaq -0x1f0(%rbp), %rdi
leaq -0x1d0(%rbp), %rdx
callq 0x84f0
leaq 0x1f4c(%rip), %rdx      # 0x108f0
leaq -0x210(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x84c7
leaq -0xd0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x9201
leaq 0x228a(%rip), %rdx      # 0x10c62
leaq -0xf0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x84c7
movq (%r14), %rax
movq %r14, %rdi
callq *0x18(%rax)
leaq -0x1b0(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
leaq -0x1b0(%rbp), %rdx
callq 0x9190
leaq 0x1f93(%rip), %rdx      # 0x109b6
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x84c7
leaq -0x190(%rbp), %rdi
movl %r12d, %esi
callq 0x851e
leaq -0xb0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0x190(%rbp), %rdx
callq 0x9190
leaq 0x1b72(%rip), %rdx      # 0x105d8
leaq -0x48(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x84c7
movq (%r15), %rax
movq %r15, %rdi
callq *0x18(%rax)
leaq -0x170(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0x170(%rbp), %rdx
callq 0x9190
leaq 0x211d(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
jmp 0xeebc
movq (%r15), %rax
leaq -0x88(%rbp), %rdi
movq %r15, %rsi
callq *0x28(%rax)
leaq 0x1f59(%rip), %rsi      # 0x10a2d
movq %r12, %rdi
callq 0x4ac7
movl %eax, %r13d
movq %r12, %rdi
callq 0x40e0
testb %r13b, %r13b
je 0xec52
callq 0x4070
pushq $0x28
popq %rcx
cltd
idivl %ecx
cmpl $0x1, %edx
ja 0xf054
movq (%r15), %rax
movq %r15, %rdi
callq *0x68(%rax)
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x9172
movq (%r15), %rax
movq %r15, %rdi
callq *0x8(%rax)
leaq -0x48(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq 0x1f00(%rip), %rsi      # 0x10a33
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rdx
callq 0x84f0
leaq 0x207e(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x42b0
jmp 0xf280
movq %r14, %rdi
callq 0x8db6
cvttsd2si -0x90(%rbp), %r12d
movq (%r14), %rax
movq %r14, %rdi
movl %r12d, %esi
callq *0x48(%rax)
leaq -0xf0(%rbp), %rdi
movl %r12d, %esi
callq 0x851e
leaq 0x1e58(%rip), %rsi      # 0x109f6
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x84f0
leaq 0x1d38(%rip), %rdx      # 0x108f0
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x84c7
leaq -0xb0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x9201
leaq 0x2076(%rip), %rdx      # 0x10c62
leaq -0x48(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x84c7
movq (%r14), %rax
movq %r14, %rdi
callq *0x18(%rax)
leaq -0xd0(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
callq 0x9190
leaq 0x1de4(%rip), %rdx      # 0x10a12
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x42b0
jmp 0xf378
cvttsd2si -0x90(%rbp), %r12d
movq (%r14), %rax
movq %r14, %rdi
movl %r12d, %esi
callq *0x48(%rax)
leaq -0xf0(%rbp), %rdi
movl %r12d, %esi
callq 0x851e
leaq 0x1d2f(%rip), %rsi      # 0x109ac
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x84f0
leaq 0x1c59(%rip), %rdx      # 0x108f0
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x84c7
leaq -0xb0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x9201
leaq 0x1f97(%rip), %rdx      # 0x10c62
leaq -0x48(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x84c7
movq (%r14), %rax
movq %r14, %rdi
callq *0x18(%rax)
leaq -0xd0(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
callq 0x9190
leaq 0x1eb8(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
jmp 0xf18f
movq (%r15), %rax
movq %r15, %rdi
callq *0x68(%rax)
movsd -0x90(%rbp), %xmm1
mulsd 0x1c55(%rip), %xmm1     # 0x10990
movsd %xmm1, -0x90(%rbp)
movsd 0x1c4d(%rip), %xmm0     # 0x10998
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %r12d
movq %rax, %rdi
movl %r12d, %esi
callq 0x9152
movsd -0x90(%rbp), %xmm0
cvttsd2si %xmm0, %r13d
movq (%r14), %rax
movq %r14, %rdi
movl %r13d, %esi
callq *0x48(%rax)
leaq -0x1d0(%rbp), %rdi
movl %r13d, %esi
callq 0x851e
leaq 0x1c16(%rip), %rsi      # 0x109a4
leaq -0x1f0(%rbp), %rdi
leaq -0x1d0(%rbp), %rdx
callq 0x84f0
leaq 0x1b48(%rip), %rdx      # 0x108f0
leaq -0x210(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x84c7
leaq -0xd0(%rbp), %rdi
leaq -0x210(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x9201
leaq 0x1e86(%rip), %rdx      # 0x10c62
leaq -0xf0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x84c7
movq (%r14), %rax
movq %r14, %rdi
callq *0x18(%rax)
leaq -0x1b0(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
leaq -0x1b0(%rbp), %rdx
callq 0x9190
leaq 0x1b8f(%rip), %rdx      # 0x109b6
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x84c7
leaq -0x190(%rbp), %rdi
movl %r12d, %esi
callq 0x851e
leaq -0xb0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0x190(%rbp), %rdx
callq 0x9190
leaq 0x176e(%rip), %rdx      # 0x105d8
leaq -0x48(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x84c7
movq (%r15), %rax
movq %r15, %rdi
callq *0x18(%rax)
leaq -0x170(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0x170(%rbp), %rdx
callq 0x9190
leaq 0x1d19(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %r12
movq %rbx, %rdi
movq %r12, %rsi
callq 0x41d0
movq %r12, %rdi
callq 0x40e0
leaq -0x68(%rbp), %rdi
callq 0x40e0
leaq -0x170(%rbp), %rdi
callq 0x40e0
leaq -0x48(%rbp), %rdi
callq 0x40e0
leaq -0xb0(%rbp), %rdi
callq 0x40e0
leaq -0x190(%rbp), %rdi
callq 0x40e0
leaq -0x130(%rbp), %rdi
callq 0x40e0
leaq -0x110(%rbp), %rdi
callq 0x40e0
leaq -0x1b0(%rbp), %rdi
callq 0x40e0
leaq -0xf0(%rbp), %rdi
callq 0x40e0
leaq -0xd0(%rbp), %rdi
callq 0x40e0
leaq -0x210(%rbp), %rdi
callq 0x40e0
leaq -0x1f0(%rbp), %rdi
callq 0x40e0
leaq -0x1d0(%rbp), %rdi
jmp 0xf3cd
addl $-0x3, %edx
cmpl $0x1, %edx
ja 0xf0c4
movsd -0x90(%rbp), %xmm0
mulsd 0x1a08(%rip), %xmm0     # 0x10990
cvttsd2si %xmm0, %r12d
movq (%r14), %rax
movq %r14, %rdi
movl %r12d, %esi
callq *0x48(%rax)
leaq -0xf0(%rbp), %rdi
movl %r12d, %esi
callq 0x851e
leaq 0x19fd(%rip), %rsi      # 0x109ac
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x84f0
leaq 0x1927(%rip), %rdx      # 0x108f0
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x84c7
leaq -0xb0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x9201
leaq 0x1c65(%rip), %rdx      # 0x10c62
leaq -0x48(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x84c7
movq (%r14), %rax
movq %r14, %rdi
callq *0x18(%rax)
leaq -0xd0(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
callq 0x9190
leaq 0x1b86(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
jmp 0xf18f
cmpl $0x2, %edx
jne 0xf1a9
movq (%r15), %rax
movq %r15, %rdi
callq *0x68(%rax)
pushq $0x2
popq %rsi
movq %rax, %rdi
callq 0x9172
movq (%r15), %rax
movq %r15, %rdi
callq *0x8(%rax)
leaq -0x48(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq 0x19d9(%rip), %rsi      # 0x10a65
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rdx
callq 0x84f0
leaq 0x1b25(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x42b0
jmp 0xf280
cvttsd2si -0x90(%rbp), %r12d
movq (%r14), %rax
movq %r14, %rdi
movl %r12d, %esi
callq *0x48(%rax)
leaq -0xf0(%rbp), %rdi
movl %r12d, %esi
callq 0x851e
leaq 0x18bd(%rip), %rsi      # 0x109ac
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x84f0
leaq 0x17e7(%rip), %rdx      # 0x108f0
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x84c7
leaq -0xb0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x9201
leaq 0x1b25(%rip), %rdx      # 0x10c62
leaq -0x48(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x84c7
movq (%r14), %rax
movq %r14, %rdi
callq *0x18(%rax)
leaq -0xd0(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
callq 0x9190
leaq 0x1a46(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %r12
movq %rbx, %rdi
movq %r12, %rsi
callq 0x41d0
movq %r12, %rdi
jmp 0xf37f
leal -0x3(%rdx), %eax
cmpl $0x1, %eax
ja 0xf215
movq (%r15), %rax
movq %r15, %rdi
callq *0x68(%rax)
pushq $0x1
popq %rsi
movq %rax, %rdi
callq 0x917c
movq (%r15), %rax
movq %r15, %rdi
callq *0x10(%rax)
leaq -0x48(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq 0x18b8(%rip), %rsi      # 0x10a98
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rdx
callq 0x84f0
leaq 0x19d1(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x42b0
jmp 0xf280
cmpl $0x5, %edx
jne 0xf29e
movq (%r15), %rax
movq %r15, %rdi
callq *0x68(%rax)
pushq $0x2
popq %rsi
movq %rax, %rdi
callq 0x917c
movq (%r15), %rax
movq %r15, %rdi
callq *0x10(%rax)
leaq -0x48(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq 0x1880(%rip), %rsi      # 0x10acd
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rdx
callq 0x84f0
leaq 0x1964(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x42b0
leaq -0x88(%rbp), %rdi
callq 0x40e0
leaq -0x68(%rbp), %rdi
callq 0x40e0
leaq -0x48(%rbp), %rdi
callq 0x40e0
cvttsd2si -0x90(%rbp), %r12d
movq (%r14), %rax
movq %r14, %rdi
movl %r12d, %esi
callq *0x48(%rax)
leaq -0xf0(%rbp), %rdi
movl %r12d, %esi
callq 0x851e
leaq 0x16e3(%rip), %rsi      # 0x109ac
leaq -0x110(%rbp), %rdi
leaq -0xf0(%rbp), %rdx
callq 0x84f0
leaq 0x160d(%rip), %rdx      # 0x108f0
leaq -0x130(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x84c7
leaq -0xb0(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0x150(%rbp), %rdx
callq 0x9201
leaq 0x194b(%rip), %rdx      # 0x10c62
leaq -0x48(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x84c7
movq (%r14), %rax
movq %r14, %rdi
callq *0x18(%rax)
leaq -0xd0(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0xd0(%rbp), %rdx
callq 0x9190
leaq 0x186c(%rip), %rdx      # 0x10bc5
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x42b0
leaq -0x88(%rbp), %rdi
callq 0x40e0
leaq -0x68(%rbp), %rdi
callq 0x40e0
leaq -0xd0(%rbp), %rdi
callq 0x40e0
leaq -0x48(%rbp), %rdi
callq 0x40e0
leaq -0xb0(%rbp), %rdi
callq 0x40e0
leaq -0x130(%rbp), %rdi
callq 0x40e0
leaq -0x110(%rbp), %rdi
callq 0x40e0
leaq -0xf0(%rbp), %rdi
callq 0x40e0
movq (%r14), %rax
movq %r14, %rdi
callq *0x18(%rax)
testl %eax, %eax
jne 0xf494
leaq 0x1512(%rip), %rdx      # 0x108fc
leaq -0x48(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x848f
movq (%r14), %rax
movq %r14, %rdi
callq *0x20(%rax)
leaq -0xb0(%rbp), %rdi
movl %eax, %esi
callq 0x851e
leaq -0x68(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0xb0(%rbp), %rdx
callq 0x9190
leaq 0xf0a(%rip), %rdx       # 0x10336
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x84c7
leaq -0x88(%rbp), %rsi
movq %rbx, %rdi
callq 0x42b0
leaq -0x88(%rbp), %rdi
callq 0x40e0
leaq -0x68(%rbp), %rdi
callq 0x40e0
leaq -0xb0(%rbp), %rdi
callq 0x40e0
leaq -0x48(%rbp), %rdi
callq 0x40e0
movq (%r15), %rax
movq %r15, %rdi
callq *0x68(%rax)
movq %rax, %r15
movq (%r14), %rax
movq %r14, %rdi
callq *0x20(%rax)
movq (%r15), %rcx
movq %r15, %rdi
movl %eax, %esi
callq *(%rcx)
leaq -0x150(%rbp), %rdi
callq 0x40e0
movq %rbx, %rax
addq $0x1e8, %rsp            # imm = 0x1E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xf611
jmp 0xf627
jmp 0xf7c2
jmp 0xf611
jmp 0xf627
jmp 0xf7c2
jmp 0xf7d9
jmp 0xf611
jmp 0xf627
jmp 0xf7c2
jmp 0xf7d9
jmp 0xf714
jmp 0xf714
jmp 0xf722
jmp 0xf722
jmp 0xf733
jmp 0xf733
jmp 0xf738
jmp 0xf738
jmp 0xf73d
jmp 0xf73d
jmp 0xf742
jmp 0xf742
jmp 0xf7d9
jmp 0xf7d9
jmp 0xf611
jmp 0xf627
jmp 0xf7c2
jmp 0xf7d9
jmp 0xf56b
jmp 0xf579
jmp 0xf58d
jmp 0xf595
jmp 0xf59d
jmp 0xf5a5
jmp 0xf5ad
jmp 0xf5b5
jmp 0xf789
jmp 0xf789
jmp 0xf5bd
jmp 0xf5c5
jmp 0xf5cd
jmp 0xf7d9
movq %rax, %r14
leaq -0x68(%rbp), %rdi
callq 0x40e0
jmp 0xf57c
movq %rax, %r14
leaq -0x170(%rbp), %rdi
callq 0x40e0
jmp 0xf656
movq %rax, %r14
jmp 0xf65f
movq %rax, %r14
jmp 0xf66b
movq %rax, %r14
jmp 0xf677
movq %rax, %r14
jmp 0xf683
movq %rax, %r14
jmp 0xf68f
movq %rax, %r14
jmp 0xf6a7
movq %rax, %r14
jmp 0xf6b3
movq %rax, %r14
jmp 0xf6bf
movq %rax, %r14
jmp 0xf6cb
jmp 0xf7d9
jmp 0xf703
jmp 0xf714
jmp 0xf722
jmp 0xf733
jmp 0xf738
jmp 0xf73d
jmp 0xf714
jmp 0xf742
jmp 0xf722
jmp 0xf7d9
jmp 0xf733
movq %rax, %r14
leaq -0x88(%rbp), %rdi
callq 0x40e0
jmp 0xf62a
jmp 0xf738
movq %rax, %r14
leaq -0x68(%rbp), %rdi
jmp 0xf77a
jmp 0xf73d
jmp 0xf7c2
jmp 0xf7d9
jmp 0xf742
jmp 0xf7d9
jmp 0xf653
jmp 0xf6dd
movq %rax, %r14
leaq -0x48(%rbp), %rdi
callq 0x40e0
leaq -0xb0(%rbp), %rdi
callq 0x40e0
leaq -0x190(%rbp), %rdi
callq 0x40e0
leaq -0x130(%rbp), %rdi
callq 0x40e0
leaq -0x110(%rbp), %rdi
callq 0x40e0
leaq -0x1b0(%rbp), %rdi
callq 0x40e0
leaq -0xf0(%rbp), %rdi
callq 0x40e0
leaq -0xd0(%rbp), %rdi
callq 0x40e0
leaq -0x210(%rbp), %rdi
callq 0x40e0
leaq -0x1f0(%rbp), %rdi
callq 0x40e0
leaq -0x1d0(%rbp), %rdi
jmp 0xf7c9
jmp 0xf703
jmp 0xf714
jmp 0xf722
movq %rax, %r14
jmp 0xf69b
jmp 0xf733
jmp 0xf738
jmp 0xf73d
jmp 0xf742
jmp 0xf7d9
jmp 0xf789
jmp 0xf789
jmp 0xf7d9
jmp 0xf7d9
movq %rax, %r14
leaq -0x88(%rbp), %rdi
callq 0x40e0
jmp 0xf717
movq %rax, %r14
leaq -0x68(%rbp), %rdi
callq 0x40e0
jmp 0xf725
movq %rax, %r14
leaq -0xd0(%rbp), %rdi
callq 0x40e0
jmp 0xf78c
movq %rax, %r14
jmp 0xf795
movq %rax, %r14
jmp 0xf7a1
movq %rax, %r14
jmp 0xf7ad
movq %rax, %r14
jmp 0xf7b9
jmp 0xf7d9
jmp 0xf7d9
movq %rax, %r14
leaq -0x88(%rbp), %rdi
callq 0x40e0
jmp 0xf765
movq %rax, %r14
leaq -0x68(%rbp), %rdi
callq 0x40e0
jmp 0xf773
movq %rax, %r14
leaq -0xb0(%rbp), %rdi
callq 0x40e0
jmp 0xf7c5
jmp 0xf7d9
jmp 0xf789
jmp 0xf7d9
jmp 0xf7d9
movq %rax, %r14
leaq -0x48(%rbp), %rdi
callq 0x40e0
leaq -0xb0(%rbp), %rdi
callq 0x40e0
leaq -0x130(%rbp), %rdi
callq 0x40e0
leaq -0x110(%rbp), %rdi
callq 0x40e0
leaq -0xf0(%rbp), %rdi
jmp 0xf7c9
movq %rax, %r14
leaq -0x48(%rbp), %rdi
callq 0x40e0
jmp 0xf7dc
jmp 0xf7d9
jmp 0xf7d9
movq %rax, %r14
jmp 0xf7e8
movq %rax, %r14
leaq -0x150(%rbp), %rdi
callq 0x40e0
movq %rbx, %rdi
callq 0x40e0
movq %r14, %rdi
callq 0x4280