// File: Leeingnyo[P]newPuyoC/./board.h
// Function: Board::RotateCCW()
void RotateCCW() {
        if (rotate_t == 0) {
            rotate_t = 1;
            int sub_x = 0, sub_y = 0;
            if (bipuyo) {
                bipuyo->GetDirection(sub_x, sub_y);
            }
            if (sub_x == 1) {
                // MS 일때 
                // 아무 의미 없음 
            } 
            if (sub_y == -1) {
                // 위일 때 
                // |S
                // |M --> |SM 
                // 이면 밀어야 함 
                if (bipuyo_x == 0 || !map[bipuyo_y][bipuyo_x - 1].IsBlank()) {
                    // 근데 
                    // |S|     |M|
                    // |M| --> |S|
                    // 이면 뒤바꿔야 함 
                    if (bipuyo_x == (MAP_WIDTH - 1) || !map[bipuyo_y][bipuyo_x + 1].IsBlank()) {
                        bipuyo_y--;
                        bipuyo->RotateCCW();
                    }
                    else {
                        bipuyo_x++;
                    }
                }
            }
            if (sub_x == -1) {
                // SM 일떄 
                //       M
                // SM -> S
                // 바닥이 있으면 이렇게 
                if (bipuyo_y == (MAP_HEIGHT - 1) || !map[bipuyo_y + 1][bipuyo_x].IsBlank()) {
                    bipuyo_y--;
                }
            }
            if (sub_y == 1) {
                // 아래일 때 
                // M|
                // S| --> MS| 
                // 이면 밀어야 함 
                if (bipuyo_x == (MAP_WIDTH - 1) || !map[bipuyo_y][bipuyo_x + 1].IsBlank()) {
                    // 근데 
                    // |M|     |S|
                    // |S| --> |M|
                    // 이면 뒤바꿔야 함 
                    if (bipuyo_x == 0 || !map[bipuyo_y][bipuyo_x - 1].IsBlank()) {
                        bipuyo_y++;
                        bipuyo->RotateCCW();
                    }
                    else {
                        bipuyo_x--;
                    }
                }
            }
            bipuyo->RotateCCW();
        }
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
cmpl $0x0, 0x88(%rax)
jne 0x9172
movq -0x18(%rbp), %rdi
movl $0x1, 0x88(%rdi)
movl $0x0, -0xc(%rbp)
movl $0x0, -0x10(%rbp)
addq $0x50, %rdi
callq 0xa3d0
testb $0x1, %al
jne 0x8fbc
jmp 0x8fd9
movq -0x18(%rbp), %rdi
addq $0x50, %rdi
callq 0x8930
movq %rax, %rdi
leaq -0xc(%rbp), %rsi
leaq -0x10(%rbp), %rdx
callq 0xa4a0
cmpl $0x1, -0xc(%rbp)
jne 0x8fe1
jmp 0x8fe1
cmpl $-0x1, -0x10(%rbp)
jne 0x907c
movq -0x18(%rbp), %rax
cmpl $0x0, 0x60(%rax)
je 0x901b
movq -0x18(%rbp), %rax
movslq 0x64(%rax), %rcx
imulq $0x6, %rcx, %rcx
movq %rax, %rdi
addq %rcx, %rdi
movl 0x60(%rax), %eax
subl $0x1, %eax
cltq
addq %rax, %rdi
callq 0xb7a0
testb $0x1, %al
jne 0x907a
movq -0x18(%rbp), %rax
cmpl $0x5, 0x60(%rax)
je 0x904b
movq -0x18(%rbp), %rax
movslq 0x64(%rax), %rcx
imulq $0x6, %rcx, %rcx
movq %rax, %rdi
addq %rcx, %rdi
movl 0x60(%rax), %eax
addl $0x1, %eax
cltq
addq %rax, %rdi
callq 0xb7a0
testb $0x1, %al
jne 0x906b
movq -0x18(%rbp), %rdi
movl 0x64(%rdi), %eax
addl $-0x1, %eax
movl %eax, 0x64(%rdi)
addq $0x50, %rdi
callq 0x8930
movq %rax, %rdi
callq 0xb7c0
jmp 0x9078
movq -0x18(%rbp), %rax
movl 0x60(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x60(%rax)
jmp 0x907a
jmp 0x907c
cmpl $-0x1, -0xc(%rbp)
jne 0x90c2
movq -0x18(%rbp), %rax
cmpl $0xc, 0x64(%rax)
je 0x90b3
movq -0x18(%rbp), %rax
movl 0x64(%rax), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
imulq $0x6, %rcx, %rcx
movq %rax, %rdi
addq %rcx, %rdi
movslq 0x60(%rax), %rax
addq %rax, %rdi
callq 0xb7a0
testb $0x1, %al
jne 0x90c0
movq -0x18(%rbp), %rax
movl 0x64(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x64(%rax)
jmp 0x90c2
cmpl $0x1, -0x10(%rbp)
jne 0x915d
movq -0x18(%rbp), %rax
cmpl $0x5, 0x60(%rax)
je 0x90fc
movq -0x18(%rbp), %rax
movslq 0x64(%rax), %rcx
imulq $0x6, %rcx, %rcx
movq %rax, %rdi
addq %rcx, %rdi
movl 0x60(%rax), %eax
addl $0x1, %eax
cltq
addq %rax, %rdi
callq 0xb7a0
testb $0x1, %al
jne 0x915b
movq -0x18(%rbp), %rax
cmpl $0x0, 0x60(%rax)
je 0x912c
movq -0x18(%rbp), %rax
movslq 0x64(%rax), %rcx
imulq $0x6, %rcx, %rcx
movq %rax, %rdi
addq %rcx, %rdi
movl 0x60(%rax), %eax
subl $0x1, %eax
cltq
addq %rax, %rdi
callq 0xb7a0
testb $0x1, %al
jne 0x914c
movq -0x18(%rbp), %rdi
movl 0x64(%rdi), %eax
addl $0x1, %eax
movl %eax, 0x64(%rdi)
addq $0x50, %rdi
callq 0x8930
movq %rax, %rdi
callq 0xb7c0
jmp 0x9159
movq -0x18(%rbp), %rax
movl 0x60(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x60(%rax)
jmp 0x915b
jmp 0x915d
movq -0x18(%rbp), %rdi
addq $0x50, %rdi
callq 0x8930
movq %rax, %rdi
callq 0xb7c0
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax,%rax)