// File: /workspace/github_cpp_makefile_star2_O2/MichaelXanth[P]RPG_Game/Game/Game.cpp
// Function: Game::DisplayMonstersStats(std::vector<Monster*, std::allocator<Monster*>>&)
void Game::DisplayMonstersStats(vector<Monster *>& monsters)
{
    int heroesNum = heroes.size();
    int monstersNum = monsters.size();

    if (monstersNum < heroesNum)
        cout << "\033[" << ((heroesNum - monstersNum) * 31) / 2 << "C";

    cout << "\033[" << ((monstersNum - 1) * 31) / 2 + 6 << "C";

    cout << "Monsters Statistics" << endl;

    if (monstersNum < heroesNum)
        cout << "\033[" << ((heroesNum - monstersNum) * 31) / 2 << "C";

    for (short int i = 0; i < monstersNum; i++)
        cout << "\033[1;33m+\033[0;34m==============================";

    cout << "\033[1;33m+\033[0m" << endl;

    if (monstersNum < heroesNum)
        cout << "\033[" << ((heroesNum - monstersNum) * 31) / 2 << "C";

    cout << "\033[34m|\033[0m";
    for (short i = 0; i < monstersNum; i++) {
        cout << "Name:         ";
        cout.width(16);
        cout << left << monsters[i]->GetName() << "\033[34m|\033[0m";
    }
    cout << endl;

    if (monstersNum < heroesNum)
        cout << "\033[" << ((heroesNum - monstersNum) * 31) / 2 << "C";

    cout << "\033[34m|\033[0m";
    for (short i = 0; i < monstersNum; i++) {
        cout << "Level:        ";
        cout.width(16);
        cout << left << monsters[i]->GetLevel() << "\033[34m|\033[0m";
    }
    cout << endl;

    if (monstersNum < heroesNum)
        cout << "\033[" << ((heroesNum - monstersNum) * 31) / 2 << "C";

    cout << "\033[34m|\033[0m";
    for (short i = 0; i < monstersNum; i++) {
        string str = to_string(monsters[i]->GetHP()) + "/" + to_string(monsters[i]->GetMaxHP());

        if (monsters[i]->GetHP() >= 2.0 / 3.0 * monsters[i]->GetMaxHP())
            cout << "HP:           \033[38;5;9m";
        else if (monsters[i]->GetHP() >= 1.0 / 3.0 * monsters[i]->GetMaxHP())
            cout << "HP:           \033[38;5;202m";
        else
            cout << "HP:           \033[38;5;2m";

        cout.width(16);
        cout << left << str << "\033[34m|\033[0m";
    }
    cout << endl;

    if (monstersNum < heroesNum)
        cout << "\033[" << ((heroesNum - monstersNum) * 31) / 2 << "C";

    cout << "\033[34m|\033[0m";
    for (short i = 0; i < monstersNum; i++) {
        string str = to_string(monsters[i]->GetMinDamage()) + "-" + to_string(monsters[i]->GetMaxDamage());
        cout << "Damage Range: ";
        cout.width(16);
        cout << left << str << "\033[34m|\033[0m";
    }
    cout << endl;

    if (monstersNum < heroesNum)
        cout << "\033[" << ((heroesNum - monstersNum) * 31) / 2 << "C";

    cout << "\033[34m|\033[0m";
    for (short i = 0; i < monstersNum; i++) {
        cout << "Defence:      ";
        cout.width(16);
        cout << left << monsters[i]->MonsterGetDefence() << "\033[34m|\033[0m";
    }
    cout << endl;

    if (monstersNum < heroesNum)
        cout << "\033[" << ((heroesNum - monstersNum) * 31) / 2 << "C";

    cout << "\033[34m|\033[0m";
    for (short i = 0; i < monstersNum; i++) {
        cout << "Avoidance:    ";
        cout.width(16);
        cout << left << monsters[i]->MonsterGetAvoidance() << "\033[34m|\033[0m";
    }
    cout << endl;

    if (monstersNum < heroesNum)
        cout << "\033[" << ((heroesNum - monstersNum) * 31) / 2 << "C";

    for (short int i = 0; i < monstersNum; i++)
        cout << "\033[1;33m+\033[0;34m==============================";

    cout << "\033[1;33m+\033[0m" << endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rsi, %rbx
movq 0x10(%rdi), %rax
movq 0x8(%rax), %r13
subq (%rax), %r13
shrq $0x3, %r13
movq 0x8(%rsi), %r12
subq (%rsi), %r12
shrq $0x3, %r12
movq 0x1c8d1(%rip), %rdi     # 0x26fc8
leaq 0x10cdd(%rip), %rsi     # 0x1b3db
callq 0x31d0
movq %rax, %rdi
movl %r13d, %eax
pushq $0x2
popq %rcx
subl %r12d, %eax
movq %r12, (%rsp)
jle 0xa7b5
imull $0x1f, %eax, %eax
cltd
idivl %ecx
movl %eax, %ebp
movl %eax, %esi
movl %ecx, %r12d
callq 0x3320
leaq 0x140a4(%rip), %r14     # 0x1e7d6
movq %rax, %rdi
movq %r14, %rsi
callq 0x31d0
movq 0x1c884(%rip), %r15     # 0x26fc8
leaq 0x10c90(%rip), %rsi     # 0x1b3db
movq %r15, %rdi
callq 0x31d0
movq %rax, %rdi
imull $0x1f, (%rsp), %eax
addl $-0x1f, %eax
cltd
idivl %r12d
leal 0x6(%rax), %esi
callq 0x3320
movq %rax, %rdi
movq %r14, %rsi
callq 0x31d0
leaq 0x10cf9(%rip), %rsi     # 0x1b474
movq %r15, %rdi
callq 0x31d0
movq %rax, %rdi
callq 0x30d0
movq %r15, %rdi
leaq 0x10c46(%rip), %rsi     # 0x1b3db
movq (%rsp), %r12
callq 0x31d0
movq %rax, %rdi
movl %ebp, %esi
callq 0x3320
movq %rax, %rdi
movq %r14, %rsi
callq 0x31d0
jmp 0xa7f1
imull $0x1f, %r12d, %eax
addl $-0x1f, %eax
cltd
idivl %ecx
leal 0x6(%rax), %esi
callq 0x3320
leaq 0x14008(%rip), %rsi     # 0x1e7d6
movq %rax, %rdi
callq 0x31d0
movq 0x1c7eb(%rip), %rdi     # 0x26fc8
leaq 0x10c90(%rip), %rsi     # 0x1b474
callq 0x31d0
movq %rax, %rdi
callq 0x30d0
xorl %ebp, %ebp
movq 0x1c7ce(%rip), %r14     # 0x26fc8
leaq 0x10c87(%rip), %r15     # 0x1b488
movswl %bp, %eax
cmpl %r12d, %eax
jge 0xa818
movq %r14, %rdi
movq %r15, %rsi
callq 0x31d0
incl %ebp
jmp 0xa801
movq 0x1c7a9(%rip), %r14     # 0x26fc8
leaq 0x11367(%rip), %rsi     # 0x1bb8d
movq %r14, %rdi
callq 0x31d0
movq %rax, %rdi
callq 0x30d0
movq %r13, 0x10(%rsp)
movl %r13d, %ebp
subl %r12d, %ebp
jle 0xa878
movq 0x1c77e(%rip), %rdi     # 0x26fc8
leaq 0x10b8a(%rip), %rsi     # 0x1b3db
callq 0x31d0
movq %rax, %rdi
imull $0x1f, %ebp, %eax
cltd
pushq $0x2
popq %rcx
idivl %ecx
movl %eax, %esi
callq 0x3320
leaq 0x13f66(%rip), %rsi     # 0x1e7d6
movq %rax, %rdi
callq 0x31d0
leaq 0x11d14(%rip), %rsi     # 0x1c593
movq %r14, %rdi
callq 0x31d0
xorl %ebp, %ebp
leaq 0x10c26(%rip), %r12     # 0x1b4b6
movl $0xffffff4f, %r15d      # imm = 0xFFFFFF4F
leaq 0x18(%rsp), %r13
movswl %bp, %eax
cmpl (%rsp), %eax
jge 0xa90b
movq %r14, %rdi
movq %r12, %rsi
callq 0x31d0
movq (%r14), %rax
movq -0x18(%rax), %rcx
movq $0x10, 0x10(%r14,%rcx)
movq -0x18(%rax), %rax
movl 0x18(%r14,%rax), %ecx
andl %r15d, %ecx
orl $0x20, %ecx
movl %ecx, 0x18(%r14,%rax)
movswq %bp, %rax
movq (%rbx), %rcx
movq (%rcx,%rax,8), %rsi
movq %r13, %rdi
callq 0xced6
movq %r14, %rdi
movq %r13, %rsi
callq 0x3190
movq %rax, %rdi
leaq 0x11c99(%rip), %rsi     # 0x1c593
callq 0x31d0
movq %r13, %rdi
callq 0x30c0
incl %ebp
jmp 0xa89b
movq 0x1c6b6(%rip), %r14     # 0x26fc8
movq %r14, %rdi
callq 0x30d0
movq 0x10(%rsp), %rax
movl %eax, %ebp
subl (%rsp), %ebp
jle 0xa95b
movq 0x1c69b(%rip), %rdi     # 0x26fc8
leaq 0x10aa7(%rip), %rsi     # 0x1b3db
callq 0x31d0
movq %rax, %rdi
imull $0x1f, %ebp, %eax
cltd
pushq $0x2
popq %rcx
idivl %ecx
movl %eax, %esi
callq 0x3320
leaq 0x13e83(%rip), %rsi     # 0x1e7d6
movq %rax, %rdi
callq 0x31d0
leaq 0x11c31(%rip), %r15     # 0x1c593
movq %r14, %rdi
movq %r15, %rsi
callq 0x31d0
xorl %r13d, %r13d
leaq 0x10b4e(%rip), %r12     # 0x1b4c5
movl $0xffffff4f, %ebp       # imm = 0xFFFFFF4F
movswl %r13w, %eax
cmpl (%rsp), %eax
jge 0xa9dd
movq %r14, %rdi
movq %r12, %rsi
callq 0x31d0
movq (%r14), %rax
movq -0x18(%rax), %rcx
movq $0x10, 0x10(%r14,%rcx)
movq -0x18(%rax), %rax
movl 0x18(%r14,%rax), %ecx
andl %ebp, %ecx
orl $0x20, %ecx
movl %ecx, 0x18(%r14,%rax)
movswq %r13w, %rax
movq (%rbx), %rcx
movq (%rcx,%rax,8), %rdi
callq 0xcef2
movl %eax, %esi
movq %r14, %rdi
callq 0x3120
movq %rax, %rdi
movq %r15, %rsi
callq 0x31d0
incl %r13d
jmp 0xa97c
movq 0x1c5e4(%rip), %rdi     # 0x26fc8
callq 0x30d0
movq 0x10(%rsp), %rax
movl %eax, %ebp
movq (%rsp), %r15
subl %r15d, %ebp
jle 0xaa2e
movq 0x1c5c8(%rip), %rdi     # 0x26fc8
leaq 0x109d4(%rip), %rsi     # 0x1b3db
callq 0x31d0
movq %rax, %rdi
imull $0x1f, %ebp, %eax
cltd
pushq $0x2
popq %rcx
idivl %ecx
movl %eax, %esi
callq 0x3320
leaq 0x13db0(%rip), %rsi     # 0x1e7d6
movq %rax, %rdi
callq 0x31d0
leaq 0x11b5e(%rip), %rsi     # 0x1c593
movq 0x1c58c(%rip), %rdi     # 0x26fc8
callq 0x31d0
xorl %ecx, %ecx
leaq 0x38(%rsp), %r12
leaq 0x78(%rsp), %r13
leaq 0x58(%rsp), %r14
movswl %cx, %eax
cmpl %r15d, %eax
jge 0xabce
movl %ecx, 0xc(%rsp)
movswq %cx, %r15
movq (%rbx), %rax
movq (%rax,%r15,8), %rdi
callq 0xcf06
movq %r12, %rdi
movl %eax, %esi
callq 0xbcf1
movq %r13, %rdi
movq %r12, %rsi
leaq 0x10a4b(%rip), %rdx     # 0x1b4d4
callq 0xbcd2
movq (%rbx), %rax
movq (%rax,%r15,8), %rdi
callq 0xcefc
movq %r14, %rdi
movl %eax, %esi
callq 0xbcf1
leaq 0x18(%rsp), %rdi
movq %r13, %rsi
movq %r14, %rdx
callq 0xbc6b
movq %r14, %rbp
movq %r14, %rdi
callq 0x30c0
movq %r13, %r14
movq %r13, %rdi
callq 0x30c0
movq %r12, %r13
movq %r12, %rdi
callq 0x30c0
movq (%rbx), %rax
movq (%rax,%r15,8), %rdi
callq 0xcf06
movl %eax, %r12d
movq (%rbx), %rax
movq (%rax,%r15,8), %rdi
callq 0xcefc
movl %r12d, %ecx
cvtsi2sd %rcx, %xmm0
movl %eax, %eax
cvtsi2sd %rax, %xmm1
mulsd 0x107f1(%rip), %xmm1    # 0x1b2f8
ucomisd %xmm1, %xmm0
leaq 0x109c4(%rip), %rsi     # 0x1b4d6
jae 0xab5a
movq (%rbx), %rax
movq (%rax,%r15,8), %rdi
callq 0xcf06
movl %eax, %r12d
movq (%rbx), %rax
movq (%rax,%r15,8), %rdi
callq 0xcefc
movl %r12d, %ecx
cvtsi2sd %rcx, %xmm0
movl %eax, %eax
cvtsi2sd %rax, %xmm1
mulsd 0x107ba(%rip), %xmm1    # 0x1b300
ucomisd %xmm1, %xmm0
leaq 0x109b7(%rip), %rsi     # 0x1b508
jb 0xab5a
leaq 0x10994(%rip), %rsi     # 0x1b4ee
movq 0x1c467(%rip), %rdi     # 0x26fc8
callq 0x31d0
movq 0x1c45b(%rip), %rdi     # 0x26fc8
movq (%rdi), %rax
movq -0x18(%rax), %rcx
movq $0x10, 0x10(%rdi,%rcx)
movq -0x18(%rax), %rax
movl 0x18(%rdi,%rax), %ecx
movl $0xffffff4f, %edx       # imm = 0xFFFFFF4F
andl %edx, %ecx
orl $0x20, %ecx
movl %ecx, 0x18(%rdi,%rax)
leaq 0x18(%rsp), %rsi
callq 0x3190
movq %rax, %rdi
leaq 0x119ec(%rip), %rsi     # 0x1c593
callq 0x31d0
leaq 0x18(%rsp), %rdi
callq 0x30c0
movl 0xc(%rsp), %ecx
incl %ecx
movq (%rsp), %r15
movq %r13, %r12
movq %r14, %r13
movq %rbp, %r14
jmp 0xaa52
movq 0x1c3f3(%rip), %r14     # 0x26fc8
movq %r14, %rdi
callq 0x30d0
movq 0x10(%rsp), %rax
movl %eax, %ebp
subl %r15d, %ebp
jle 0xac1e
movq 0x1c3d8(%rip), %rdi     # 0x26fc8
leaq 0x107e4(%rip), %rsi     # 0x1b3db
callq 0x31d0
movq %rax, %rdi
imull $0x1f, %ebp, %eax
cltd
pushq $0x2
popq %rcx
idivl %ecx
movl %eax, %esi
callq 0x3320
leaq 0x13bc0(%rip), %rsi     # 0x1e7d6
movq %rax, %rdi
callq 0x31d0
leaq 0x1196e(%rip), %rsi     # 0x1c593
movq %r14, %rdi
callq 0x31d0
xorl %ecx, %ecx
leaq 0x78(%rsp), %r15
leaq 0x58(%rsp), %r12
movswl %cx, %eax
cmpl (%rsp), %eax
jge 0xad20
movl %ecx, 0xc(%rsp)
movswq %cx, %rbp
movq (%rbx), %rax
movq (%rax,%rbp,8), %rdi
callq 0x129c4
leaq 0x38(%rsp), %rdi
movl %eax, %esi
callq 0xbcf1
movq %r15, %rdi
leaq 0x38(%rsp), %rsi
leaq 0x135fc(%rip), %rdx     # 0x1e270
callq 0xbcd2
movq (%rbx), %rax
movq (%rax,%rbp,8), %rdi
callq 0x129ce
movq %r12, %rdi
movl %eax, %esi
callq 0xbcf1
leaq 0x18(%rsp), %r13
movq %r13, %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0xbc6b
movq %r12, %rdi
callq 0x30c0
movq %r15, %rdi
callq 0x30c0
leaq 0x38(%rsp), %rdi
callq 0x30c0
movq %r14, %rdi
leaq 0x128b7(%rip), %rsi     # 0x1d57d
callq 0x31d0
movq (%r14), %rax
movq -0x18(%rax), %rcx
movq $0x10, 0x10(%r14,%rcx)
movq -0x18(%rax), %rax
movl 0x18(%r14,%rax), %ecx
movl $0xffffff4f, %edx       # imm = 0xFFFFFF4F
andl %edx, %ecx
orl $0x20, %ecx
movl %ecx, 0x18(%r14,%rax)
movq %r14, %rdi
movq %r13, %rsi
callq 0x3190
movq %rax, %rdi
leaq 0x1188b(%rip), %rsi     # 0x1c593
callq 0x31d0
movq %r13, %rdi
callq 0x30c0
movl 0xc(%rsp), %ecx
incl %ecx
jmp 0xac39
movq 0x1c2a1(%rip), %r14     # 0x26fc8
movq %r14, %rdi
callq 0x30d0
movq 0x10(%rsp), %rax
movl %eax, %ebp
subl (%rsp), %ebp
jle 0xad70
movq 0x1c286(%rip), %rdi     # 0x26fc8
leaq 0x10692(%rip), %rsi     # 0x1b3db
callq 0x31d0
movq %rax, %rdi
imull $0x1f, %ebp, %eax
cltd
pushq $0x2
popq %rcx
idivl %ecx
movl %eax, %esi
callq 0x3320
leaq 0x13a6e(%rip), %rsi     # 0x1e7d6
movq %rax, %rdi
callq 0x31d0
leaq 0x1181c(%rip), %r15     # 0x1c593
movq %r14, %rdi
movq %r15, %rsi
callq 0x31d0
xorl %r13d, %r13d
leaq 0x10794(%rip), %r12     # 0x1b520
movl $0xffffff4f, %ebp       # imm = 0xFFFFFF4F
movswl %r13w, %eax
cmpl (%rsp), %eax
jge 0xadf2
movq %r14, %rdi
movq %r12, %rsi
callq 0x31d0
movq (%r14), %rax
movq -0x18(%rax), %rcx
movq $0x10, 0x10(%r14,%rcx)
movq -0x18(%rax), %rax
movl 0x18(%r14,%rax), %ecx
andl %ebp, %ecx
orl $0x20, %ecx
movl %ecx, 0x18(%r14,%rax)
movswq %r13w, %rax
movq (%rbx), %rcx
movq (%rcx,%rax,8), %rdi
callq 0x12800
movl %eax, %esi
movq %r14, %rdi
callq 0x3120
movq %rax, %rdi
movq %r15, %rsi
callq 0x31d0
incl %r13d
jmp 0xad91
movq 0x1c1cf(%rip), %r14     # 0x26fc8
movq %r14, %rdi
callq 0x30d0
movq 0x10(%rsp), %rax
movl %eax, %ebp
subl (%rsp), %ebp
jle 0xae42
movq 0x1c1b4(%rip), %rdi     # 0x26fc8
leaq 0x105c0(%rip), %rsi     # 0x1b3db
callq 0x31d0
movq %rax, %rdi
imull $0x1f, %ebp, %eax
cltd
pushq $0x2
popq %rcx
idivl %ecx
movl %eax, %esi
callq 0x3320
leaq 0x1399c(%rip), %rsi     # 0x1e7d6
movq %rax, %rdi
callq 0x31d0
leaq 0x1174a(%rip), %r15     # 0x1c593
movq %r14, %rdi
movq %r15, %rsi
callq 0x31d0
xorl %r13d, %r13d
leaq 0x106d1(%rip), %r12     # 0x1b52f
movl $0xffffff4f, %ebp       # imm = 0xFFFFFF4F
movswl %r13w, %eax
cmpl (%rsp), %eax
jge 0xaec2
movq %r14, %rdi
movq %r12, %rsi
callq 0x31d0
movq (%r14), %rax
movq -0x18(%rax), %rcx
movq $0x10, 0x10(%r14,%rcx)
movq -0x18(%rax), %rax
movl 0x18(%r14,%rax), %ecx
andl %ebp, %ecx
orl $0x20, %ecx
movl %ecx, 0x18(%r14,%rax)
movswq %r13w, %rax
movq (%rbx), %rcx
movq (%rcx,%rax,8), %rdi
callq 0x1280a
movq %r14, %rdi
callq 0x3140
movq %rax, %rdi
movq %r15, %rsi
callq 0x31d0
incl %r13d
jmp 0xae63
movq 0x1c0ff(%rip), %rdi     # 0x26fc8
callq 0x30d0
movq (%rsp), %r15
movq 0x10(%rsp), %rbx
subl %r15d, %ebx
jle 0xaf11
movq 0x1c0e5(%rip), %rdi     # 0x26fc8
leaq 0x104f1(%rip), %rsi     # 0x1b3db
callq 0x31d0
movq %rax, %rdi
imull $0x1f, %ebx, %eax
cltd
pushq $0x2
popq %rcx
idivl %ecx
movl %eax, %esi
callq 0x3320
leaq 0x138cd(%rip), %rsi     # 0x1e7d6
movq %rax, %rdi
callq 0x31d0
xorl %ebp, %ebp
movq 0x1c0ae(%rip), %rbx     # 0x26fc8
leaq 0x10567(%rip), %r14     # 0x1b488
movswl %bp, %eax
cmpl %r15d, %eax
jge 0xaf38
movq %rbx, %rdi
movq %r14, %rsi
callq 0x31d0
incl %ebp
jmp 0xaf21
movq 0x1c089(%rip), %rdi     # 0x26fc8
leaq 0x10c47(%rip), %rsi     # 0x1bb8d
callq 0x31d0
movq %rax, %rdi
callq 0x30d0
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0xaf69
jmp 0xaf6e
movq %rax, %rbx
jmp 0xaf8c
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x30c0
jmp 0xaf82
jmp 0xaf7f
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x30c0
leaq 0x38(%rsp), %rdi
jmp 0xaf9f
jmp 0xaf97
jmp 0xaf97
movq %rax, %rbx
leaq 0x18(%rsp), %rdi
callq 0x30c0
movq %rbx, %rdi
callq 0x3330