// File: /workspace/github_cpp_makefile_star2_O3/KJTang[P]SimpleCompiler/VirtualMachine.cpp
// Function: VirtualMachine::execute()
bool VirtualMachine::execute() {
    getNextWord();
    while (true) {
        switch (curWord) {
            case (int)OP::EXIT: {
                #ifdef DEBUG
                std::cout<<"-- exit"<<std::endl;
                #endif
                while (!this->data.empty()) {
                    delete[] this->data.back();
                    delete[] this->dataFlag.back();
                    this->data.pop_back();
                    this->dataFlag.pop_back();
                }
                return true;
            }
            case (int)OP::NOP: {
                #ifdef DEBUG
                std::cout<<"-- nop"<<std::endl;
                #endif
                getNextWord();
                break;
            }
            case (int)OP::PRIT: {
                #ifdef DEBUG
                std::cout<<"-- prit"<<std::endl;
                #endif
                std::cout<<this->stack.top()<<std::endl;
                this->stack.pop();
                getNextWord();
                break;
            }
            case (int)OP::SCAN: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- scan "<<this->curWord<<std::endl;
                #endif
                int pos = this->eipStack.size();
                while (pos != -1) {
                    if (this->dataFlag[pos][this->curWord]) {
                        std::cin>>this->data[pos][this->curWord];
                        getNextWord();
                        break;
                    } else {
                        --pos;
                    }
                }
                if (pos == -1) {
                    #ifdef DEBUG
                    std::cout<<"variable not found"<<std::endl;
                    #endif
                    return false;
                }
                break;
            }
            case (int)OP::ADD: {
                #ifdef DEBUG
                std::cout<<"-- add"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(a+b);
                getNextWord();
                break;
            }
            case (int)OP::SUB: {
                #ifdef DEBUG
                std::cout<<"-- sub"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b-a);
                getNextWord();
                break;
            }
            case (int)OP::MUL: {
                #ifdef DEBUG
                std::cout<<"-- mul"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(a*b);
                getNextWord();
                break;
            }
            case (int)OP::DIV: {
                #ifdef DEBUG
                std::cout<<"-- div"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b/a);
                getNextWord();
                break;
            }
            case (int)OP::GT: {
                #ifdef DEBUG
                std::cout<<"-- gt"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b>a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::LT: {
                #ifdef DEBUG
                std::cout<<"-- lt"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b<a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::GTE: {
                #ifdef DEBUG
                std::cout<<"-- gte"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b>=a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::LTE: {
                #ifdef DEBUG
                std::cout<<"-- lte"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b<=a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::EQU: {
                #ifdef DEBUG
                std::cout<<"-- gt"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b==a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::NE: {
                #ifdef DEBUG
                std::cout<<"-- lt"<<std::endl;
                #endif
                int a = this->stack.top();
                this->stack.pop();
                int b = this->stack.top();
                this->stack.pop();
                this->stack.push(b!=a?1:0);
                getNextWord();
                break;
            }
            case (int)OP::DUP: {
                #ifdef DEBUG
                std::cout<<"-- dup"<<std::endl;
                #endif
                this->stack.push(this->stack.top());
                getNextWord();
                break;
            }
            case (int)OP::POP: {
                #ifdef DEBUG
                std::cout<<"-- pop"<<std::endl;
                #endif
                this->stack.pop();
                getNextWord();
                break;
            }
            case (int)OP::PUSH: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- push "<<curWord<<std::endl;
                #endif
                this->stack.push(curWord);
                getNextWord();
                break;
            }
            case (int)OP::JZ: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- jz "<<this->curWord<<" "<<binCode[curWord]<<std::endl;
                #endif
                if (this->stack.top() == 0) {
                    this->eip = curWord;
                }
                this->stack.pop();
                getNextWord();
                break;
            }
            case (int)OP::JMP: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- jmp "<<this->curWord<<std::endl;
                #endif
                this->eip = curWord;
                getNextWord();
                break;
            }
            case (int)OP::INT: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- int "<<this->curWord<<std::endl;
                #endif
                this->dataFlag[this->eipStack.size()][this->curWord] = true;
                getNextWord();
                break;
            }
            case (int)OP::LOAD: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- load "<<this->curWord<<std::endl;
                #endif
                int pos = this->eipStack.size();
                while (pos != -1) {
                    if (this->dataFlag[pos][this->curWord]) {
                        this->stack.push(this->data[pos][this->curWord]);
                        getNextWord();
                        break;
                    } else {
                        --pos;
                    }    
                }
                if (pos == -1) {
                    #ifdef DEBUG
                    std::cout<<"variable "<<this->curWord<<" not found"<<std::endl;
                    #endif
                    return false;
                }
                break;
            }
            case (int)OP::SAVE: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- save "<<this->curWord<<std::endl;
                #endif
                int pos = this->eipStack.size();
                while (pos != -1) {
                    if (this->dataFlag[pos][this->curWord]) {
                        this->data[pos][this->curWord] = this->stack.top();
                        this->stack.pop();
                        getNextWord();
                        break;
                    } else {
                        --pos;
                    }
                }
                if (pos == -1) {
                    #ifdef DEBUG
                    std::cout<<"variable not found"<<std::endl;
                    #endif
                    return false;
                }
                break;
            }
            case (int)OP::CALL: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- call "<<this->curWord<<std::endl;
                #endif
                this->eipStack.push(this->eip);
                this->eip = this->curWord;
                int *local = new int[DATA_SEG_SIZE];
                this->data.push_back(local);
                bool *localFlag = new bool[DATA_SEG_SIZE];
                memset(localFlag, false, DATA_SEG_SIZE);
                this->dataFlag.push_back(localFlag);
                getNextWord();
                break;
            }
            case (int)OP::FUNC: {
                getNextWord();
                #ifdef DEBUG
                std::cout<<"-- func "<<this->curWord<<std::endl;
                #endif
                while (this->curWord != (int)OP::ENDF) {
                    getNextWord();
                }
                break;
            }
            case (int)OP::RET: {
                #ifdef DEBUG
                std::cout<<"-- ret "<<this->eipStack.top()<<std::endl;
                #endif
                this->eip = this->eipStack.top();
                this->eipStack.pop();
                getNextWord();
                delete[] this->data.back();
                delete[] this->dataFlag.back();
                this->data.pop_back();
                this->dataFlag.pop_back();
                break;
            }
            case (int)OP::ENDF: {
                #ifdef DEBUG
                std::cout<<"-- endf"<<std::endl;
                #endif
                getNextWord();
                break;
            }
            default: {
                #ifdef DEBUG
                std::cout<<"-- unknown: "<<this->curWord<<std::endl;
                #endif
                return false;
            }
        }
        #ifdef DEBUG
        this->printStack();
        this->printData();
        #endif
    }
    return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
leaq 0x98(%rdi), %rax
movq %rax, -0x38(%rbp)
movslq 0x98(%rdi), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rdi)
movq (%rdi), %rcx
movl (%rcx,%rax,4), %eax
leaq 0xf0(%rdi), %rcx
movq %rcx, -0x40(%rbp)
movl %eax, 0xf0(%rdi)
leaq 0xa0(%rdi), %rcx
movq %rcx, -0x50(%rbp)
leaq 0x68(%rdi), %rcx
movq %rcx, -0x58(%rbp)
leaq 0x80(%rdi), %rcx
movq %rcx, -0x48(%rbp)
leaq 0x18(%rdi), %r12
leaq 0x1f69(%rip), %r15      # 0xf3b8
xorl %r13d, %r13d
cmpl $0x1a, %eax
ja 0xde2f
movl %eax, %eax
movslq (%r15,%rax,4), %rax
addq %r15, %rax
jmpq *%rax
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd47d
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %esi
movq 0x6b49(%rip), %rdi      # 0x13fd0
callq 0x3320
movq %rax, %r13
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x31d0
movsbl %al, %esi
movq %r13, %rdi
callq 0x3040
movq %rax, %rdi
callq 0x3150
jmp 0xdced
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rcx
movslq (%rcx,%rax,4), %rax
movl %eax, 0xf0(%rbx)
leal 0x1(%rax), %edx
movl %edx, 0x98(%rbx)
jmp 0xdd08
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd4fd
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd520
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
movq %r12, %rdi
callq 0xe228
xorl %eax, %eax
cmpl %r14d, %r13d
sete %al
jmp 0xdafa
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd550
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd573
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
imull -0x4(%rax), %r13d
jmp 0xd74c
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd594
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd5b7
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
movq %r12, %rdi
callq 0xe228
movl %r13d, %eax
cltd
idivl %r14d
jmp 0xdafa
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd5e6
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd609
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
movq %r12, %rdi
callq 0xe228
xorl %eax, %eax
cmpl %r14d, %r13d
setl %al
jmp 0xdafa
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd639
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd65c
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
movq %r12, %rdi
callq 0xe228
xorl %eax, %eax
cmpl %r14d, %r13d
setle %al
jmp 0xdafa
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd68c
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd6af
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
addl -0x4(%rax), %r13d
jmp 0xd74c
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd6cf
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd6f2
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
movq %r12, %rdi
callq 0xe228
xorl %eax, %eax
cmpl %r14d, %r13d
setge %al
jmp 0xdafa
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd722
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd745
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
subl %r14d, %r13d
movq %r12, %rdi
callq 0xe228
movl %r13d, -0x30(%rbp)
movq 0x48(%rbx), %rax
movq 0x58(%rbx), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xdb1d
movl %r13d, (%rax)
jmp 0xdb61
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd78c
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xd7af
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
movq %r12, %rdi
callq 0xe228
xorl %eax, %eax
cmpl %r14d, %r13d
setne %al
jmp 0xdafa
movslq 0x98(%rbx), %rdx
leal 0x1(%rdx), %eax
movl %eax, 0x98(%rbx)
movq (%rbx), %rax
movq 0xc0(%rbx), %rcx
movslq (%rax,%rdx,4), %rsi
movl %esi, 0xf0(%rbx)
movq 0xe8(%rbx), %rdx
movq %rdx, %rdi
subq 0xc8(%rbx), %rdi
shrq $0x3, %rdi
cmpq $0x1, %rdx
adcq $-0x1, %rdi
movq 0xd0(%rbx), %rdx
subq 0xd8(%rbx), %rdx
shlq $0x7, %rdi
shrq $0x2, %rdx
subq 0xb0(%rbx), %rcx
shrq $0x2, %rcx
addq %rdx, %rcx
addq %rdi, %rcx
cmpl $-0x1, %ecx
je 0xde2c
movq -0x48(%rbp), %rdx
movq (%rdx), %rdx
movslq %ecx, %rcx
movq -0x38(%rbp), %r14
movq -0x40(%rbp), %r13
movq (%rdx,%rcx,8), %rdi
cmpb $0x1, (%rdi,%rsi)
je 0xdc96
addq $-0x1, %rcx
jb 0xd84b
jmp 0xde2c
movslq 0x98(%rbx), %rdx
leal 0x1(%rdx), %eax
movl %eax, 0x98(%rbx)
movq (%rbx), %rax
movq 0x48(%rbx), %rcx
movl (%rax,%rdx,4), %edx
movl %edx, 0xf0(%rbx)
movq 0x58(%rbx), %rsi
addq $-0x4, %rsi
cmpq %rsi, %rcx
je 0xdd30
movl %edx, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x48(%rbx)
movq -0x38(%rbp), %rsi
movq -0x40(%rbp), %r14
jmp 0xdd46
movslq 0x98(%rbx), %rax
leaq 0x1(%rax), %rcx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rcx
movq 0xc0(%rbx), %rdx
movslq (%rcx,%rax,4), %rsi
movl %esi, 0xf0(%rbx)
movq 0xe8(%rbx), %rdi
movq %rdi, %r8
subq 0xc8(%rbx), %r8
shrq $0x3, %r8
cmpq $0x1, %rdi
adcq $-0x1, %r8
movq 0xd0(%rbx), %rdi
subq 0xd8(%rbx), %rdi
subq 0xb0(%rbx), %rdx
shlq $0xa, %r8
addq 0x80(%rbx), %r8
leaq (%r8,%rdi,2), %rdi
movq (%rdi,%rdx,2), %rdx
movb $0x1, (%rdx,%rsi)
leal 0x2(%rax), %edx
movl %edx, 0x98(%rbx)
movl 0x4(%rcx,%rax,4), %eax
movl %eax, 0xf0(%rbx)
jmp 0xd44f
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rdx
movq 0xc0(%rbx), %rcx
movslq (%rdx,%rax,4), %rax
movl %eax, 0xf0(%rbx)
movq 0xe8(%rbx), %rdx
movq %rdx, %rsi
subq 0xc8(%rbx), %rsi
shrq $0x3, %rsi
cmpq $0x1, %rdx
adcq $-0x1, %rsi
movq 0xd0(%rbx), %rdx
subq 0xd8(%rbx), %rdx
shlq $0x7, %rsi
shrq $0x2, %rdx
subq 0xb0(%rbx), %rcx
shrq $0x2, %rcx
addq %rdx, %rcx
addq %rsi, %rcx
cmpl $-0x1, %ecx
je 0xde2c
movq -0x48(%rbp), %rdx
movq (%rdx), %rdx
movslq %ecx, %rcx
movq (%rdx,%rcx,8), %rsi
cmpb $0x1, (%rsi,%rax)
je 0xdcc8
addq $-0x1, %rcx
jb 0xd9ad
jmp 0xde2c
movslq 0x98(%rbx), %rcx
leal 0x1(%rcx), %eax
movl %eax, 0x98(%rbx)
movq (%rbx), %rdx
movq 0xc0(%rbx), %rax
movslq (%rdx,%rcx,4), %rsi
movl %esi, 0xf0(%rbx)
movq 0xe8(%rbx), %rcx
movq %rcx, %rdx
subq 0xc8(%rbx), %rdx
shrq $0x3, %rdx
cmpq $0x1, %rcx
adcq $-0x1, %rdx
movq 0xd0(%rbx), %rcx
subq 0xd8(%rbx), %rcx
shlq $0x7, %rdx
shrq $0x2, %rcx
subq 0xb0(%rbx), %rax
shrq $0x2, %rax
addq %rcx, %rax
addq %rdx, %rax
cmpl $-0x1, %eax
je 0xde2c
movq -0x48(%rbp), %rcx
movq (%rcx), %rcx
cltq
movq (%rcx,%rax,8), %rdx
cmpb $0x1, (%rdx,%rsi)
je 0xdd16
addq $-0x1, %rax
jb 0xda40
jmp 0xde2c
movslq 0x98(%rbx), %rdx
leal 0x1(%rdx), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rsi
movl (%rsi,%rdx,4), %edi
movl %edi, 0xf0(%rbx)
movl $0x1a, %eax
cmpl $0x1a, %edi
je 0xd44f
movslq %ecx, %rcx
leaq (%rsi,%rcx,4), %rcx
addl $0x2, %edx
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %r8
movl %edx, (%rdi)
movl (%rcx), %esi
movl %esi, (%r8)
addq $0x4, %rcx
incl %edx
cmpl $0x1a, %esi
jne 0xda95
jmp 0xd44f
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xdac3
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r14d
movq %r12, %rdi
callq 0xe228
movq 0x48(%rbx), %rax
cmpq 0x50(%rbx), %rax
jne 0xdae6
movq 0x60(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %r13d
movq %r12, %rdi
callq 0xe228
xorl %eax, %eax
cmpl %r14d, %r13d
setg %al
movl %eax, -0x30(%rbp)
movq 0x48(%rbx), %rcx
movq 0x58(%rbx), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0xdb1d
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x48(%rbx)
jmp 0xdcf5
leaq -0x30(%rbp), %rsi
movq %r12, %rdi
callq 0xb64a
jmp 0xdcf5
movq 0x48(%rbx), %rax
movq %rax, %rsi
cmpq 0x50(%rbx), %rax
jne 0xdb48
movq 0x60(%rbx), %rcx
movl $0x200, %esi            # imm = 0x200
addq -0x8(%rcx), %rsi
addq $-0x4, %rsi
movq 0x58(%rbx), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xdd59
movl (%rsi), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x48(%rbx)
jmp 0xdcf5
movq 0xd0(%rbx), %rax
cmpq 0xd8(%rbx), %rax
jne 0xdb8e
movq 0xe8(%rbx), %rcx
movl $0x200, %eax            # imm = 0x200
addq -0x8(%rcx), %rax
movl -0x4(%rax), %eax
movl %eax, 0x98(%rbx)
movq -0x50(%rbp), %rdi
callq 0xe228
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rcx
movq 0x70(%rbx), %rdx
movl (%rcx,%rax,4), %eax
movl %eax, 0xf0(%rbx)
movq -0x8(%rdx), %rdi
testq %rdi, %rdi
je 0xdbce
callq 0x3270
movq 0x88(%rbx), %rax
movq -0x8(%rax), %rdi
testq %rdi, %rdi
je 0xdbea
callq 0x3270
movq 0x88(%rbx), %rax
addq $-0x8, 0x70(%rbx)
addq $-0x8, %rax
movq %rax, 0x88(%rbx)
movl 0xf0(%rbx), %eax
jmp 0xd44f
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rdx
movq 0x48(%rbx), %rcx
movl (%rdx,%rax,4), %eax
movl %eax, 0xf0(%rbx)
cmpq 0x50(%rbx), %rcx
jne 0xdc38
movq 0x60(%rbx), %rdx
movl $0x200, %ecx            # imm = 0x200
addq -0x8(%rdx), %rcx
cmpl $0x0, -0x4(%rcx)
jne 0xdced
movq -0x38(%rbp), %rcx
movl %eax, (%rcx)
jmp 0xdced
movslq 0x98(%rbx), %rdx
leal 0x1(%rdx), %eax
movl %eax, 0x98(%rbx)
movq (%rbx), %rsi
movq 0xd0(%rbx), %rcx
movl (%rsi,%rdx,4), %edx
movl %edx, 0xf0(%rbx)
movq 0xe0(%rbx), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0xdd63
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0xd0(%rbx)
jmp 0xdd70
movq 0x68(%rbx), %rdx
shlq $0x2, %rsi
addq (%rdx,%rcx,8), %rsi
movq 0x48(%rbx), %rcx
movq 0x58(%rbx), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0xde0c
movl (%rsi), %edx
movl %edx, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x48(%rbx)
jmp 0xde17
movq 0x48(%rbx), %rdx
cmpq 0x50(%rbx), %rdx
jne 0xdcdf
movq 0x60(%rbx), %rsi
movl $0x200, %edx            # imm = 0x200
addq -0x8(%rsi), %rdx
movl -0x4(%rdx), %edx
movq 0x68(%rbx), %rsi
movq (%rsi,%rcx,8), %rcx
movl %edx, (%rcx,%rax,4)
movq %r12, %rdi
callq 0xe228
movslq 0x98(%rbx), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x98(%rbx)
movq (%rbx), %rcx
movl (%rcx,%rax,4), %eax
movl %eax, 0xf0(%rbx)
jmp 0xd44f
movq 0x68(%rbx), %rcx
shlq $0x2, %rsi
addq (%rcx,%rax,8), %rsi
movq 0x62b7(%rip), %rdi      # 0x13fe0
callq 0x3140
jmp 0xdcf5
movq %r12, %rdi
movq -0x40(%rbp), %r14
movq %r14, %rsi
callq 0xe27a
movq (%rbx), %rax
movq -0x38(%rbp), %rsi
movslq (%rsi), %rcx
leal 0x1(%rcx), %edx
movl %edx, (%rsi)
movl (%rax,%rcx,4), %eax
movl %eax, (%r14)
jmp 0xd44f
movq %r12, %rdi
callq 0xe27a
jmp 0xdcf5
movq -0x50(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0xe27a
movl 0xf0(%rbx), %eax
movl %eax, 0x98(%rbx)
movl $0x190, %edi            # imm = 0x190
callq 0x3030
movq %rax, -0x30(%rbp)
movq 0x70(%rbx), %rsi
cmpq 0x78(%rbx), %rsi
je 0xdd9e
movq %rax, (%rsi)
addq $0x8, 0x70(%rbx)
jmp 0xddab
leaq -0x30(%rbp), %rdx
movq -0x58(%rbp), %rdi
callq 0xdfd2
movl $0x64, %edi
callq 0x3030
movq %rax, -0x60(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, (%rax)
movups %xmm0, 0x10(%rax)
movups %xmm0, 0x20(%rax)
movups %xmm0, 0x30(%rax)
movups %xmm0, 0x40(%rax)
movups %xmm0, 0x50(%rax)
movl $0x0, 0x60(%rax)
movq 0x88(%rbx), %rsi
cmpq 0x90(%rbx), %rsi
je 0xddfa
movq %rax, (%rsi)
addq $0x8, 0x88(%rbx)
jmp 0xdcf5
leaq -0x60(%rbp), %rdx
movq -0x48(%rbp), %rdi
callq 0xe0ee
jmp 0xdcf5
movq %r12, %rdi
callq 0xe27a
movq (%rbx), %rax
movslq (%r14), %rcx
leal 0x1(%rcx), %edx
movl %edx, (%r14)
movl (%rax,%rcx,4), %eax
movl %eax, (%r13)
jmp 0xd44f
xorl %r13d, %r13d
movl %r13d, %eax
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq 0x70(%rbx), %rax
movb $0x1, %r13b
cmpq %rax, 0x68(%rbx)
je 0xde2f
movq -0x8(%rax), %rdi
testq %rdi, %rdi
je 0xde5c
callq 0x3270
movq 0x88(%rbx), %rcx
movq -0x8(%rcx), %rdi
testq %rdi, %rdi
je 0xde78
callq 0x3270
movq 0x88(%rbx), %rcx
movq 0x68(%rbx), %rdx
movq 0x70(%rbx), %rax
addq $-0x8, %rax
movq %rax, 0x70(%rbx)
addq $-0x8, %rcx
movq %rcx, 0x88(%rbx)
cmpq %rax, %rdx
jne 0xde4e
jmp 0xde2f