// File: /workspace/github_cpp_makefile_star2_O2/Heptagon196[P]Gos/GosVM.cpp
// Function: GosVM::VMExecutable::Write(std::ostream&, bool)
void GosVM::VMExecutable::Write(std::ostream& out, bool prettified) {
    curContent = &getContent();
    auto& cst = getConst();
    if (prettified) {
        StartRead();
        while (readProgress < curContent->length() && readProgress < endPos) {
            out << readProgress << ' ';
            int op = GetOperation();
            out << operatorInfos[op].name << ' ';
            if (op == DEF_CLASS) {
                out << GetParamString() << ' ';
                int len = GetParamInt();
                out << len << ' ';
                while (len--) {
                    out << GetParamString() << ' ';
                }
                out << std::endl;
            } else if (op == ATTR) {
                out << GetParamString() << ' ';
                int len = GetParamInt();
                out << len << ' ';
                while (len--) {
                    out << GetParamString() << ' ';
                }
                out << std::endl;
            } else if (op == DEF_MEMBER_VAR) {
                out << GetParamString() << ' ';
                out << GetParamString() << std::endl;
            } else if (op == DEF_MEMBER_FUNC) {
                out << GetParamString() << ' ';
                out << GetParamString() << ' ';
                int len = GetParamInt();
                out << len << ' ';
                while (len--) {
                    out << GetParamString() << ' ';
                }
                out << GetParamInt() << std::endl;
            } else if (op == DEF_STATIC_VAR) {
                out << GetParamString() << ' ';
                out << GetParamString() << std::endl;
            } else if (op == DEF_STATIC_FUNC) {
                out << GetParamString() << std::endl;
                out << GetParamString() << ' ';
                int len = GetParamInt();
                out << len << ' ';
                while (len--) {
                    out << GetParamString() << ' ';
                }
                out << GetParamInt() << std::endl;
            } else if (op == ALLOC) {
                out << GetParamInt() << std::endl;
            } else if (op == NS) {
                out << GetParamString() << std::endl;
            } else if (op == NEW) {
                out << GetParamString() << ' ';
                out << GetParamInt() << ' ';
                int len = GetParamInt();
                out << len << ' ';
                while (len--) {
                    out << GetParamInt() << ' ';
                }
                out << std::endl;
            } else if (op == NEW_STR) {
                out << GetParamInt() << ' ';
                out << "\"" << GetParamString() << "\"" << std::endl;
            } else if (op == NEW_NUM) {
                int8_t type = GetParamByte();
                out << (int)type << ' ';
                out << GetParamInt() << ' ';
                RTConstNum num = cst.nums[GetParamInt()];
                switch (type) {
                    case 0: out << num.data.i8; break;
                    case 1: out << num.data.i32; break;
                    case 2: out << num.data.i64; break;
                    case 3: out << num.data.f; break;
                    case 4: out << num.data.d; break;
                }
                out << std::endl;
            } else if (op == MOV) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == REF) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == CLONE) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == ARG) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == GET_FIELD) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << ' ';
                out << GetParamString() << std::endl;
            } else if (op == ADD) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == SUB) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == MUL) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == DIV) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == REM) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == AND) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == OR) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == XOR) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == NOT) {
                out << GetParamInt() << std::endl;
            } else if (op == RET) {
                out << GetParamInt() << std::endl;
            } else if (op == JMP) {
                out << GetParamInt() << std::endl;
            } else if (op == IF) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == BOX) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == UNBOX) {
                out << GetParamInt() << ' ';
                out << GetParamInt() << std::endl;
            } else if (op == CALL) {
                out << GetParamInt() << ' ';
                out << GetParamString() << ' ';
                int cnt = GetParamInt();
                out << cnt << ' ';
                while (cnt--) {
                    out << GetParamInt() << ' ';
                }
                out << std::endl;
            }
        }
    } else {
        for (auto [s, id] : cst.strMap) {
            out << (char)STR;
            for (int i = 0; i < 32; i += 8) {
                out << (char)((id >> i) & ((1 << 9) - 1));
            }
            int len = s.length();
            for (int i = 0; i < 32; i += 8) {
                out << (char)((len >> i) & ((1 << 9) - 1));
            }
            out << s;
        }
        for (auto [s, id] : cst.numMap) {
            out << (char)NUM;
            for (int i = 0; i < 32; i += 8) {
                out << (char)((id >> i) & ((1 << 9) - 1));
            }
            int64_t val = s.data.i64;
            for (int i = 0; i < 64; i += 8) {
                out << (char)((val >> i) & ((1 << 9) - 1));
            }
        }
        out << (*curContent);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
movl %edx, %ebp
movq %rsi, %rbx
movq %rdi, %r14
movq (%rdi), %rax
callq *0x10(%rax)
movq %rax, 0x8(%r14)
movq (%r14), %rax
movq %r14, %rdi
callq *0x8(%rax)
testl %ebp, %ebp
movq %rax, 0x8(%rsp)
je 0x78614
movl 0x10(%r14), %esi
movl %esi, 0x18(%r14)
pushq $0x20
popq %rbp
leaq 0x8e5e6(%rip), %r12     # 0x106600
movslq %esi, %rax
movq 0x8(%r14), %rcx
cmpq %rax, 0x8(%rcx)
jbe 0x78719
cmpl 0x14(%r14), %esi
jge 0x78719
movq %rbx, %rdi
callq 0x11540
movq %rax, %rdi
movl %ebp, %esi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movzbl (%rcx,%rax), %r15d
movsbq %r15b, %rsi
shlq $0x5, %rsi
addq %r12, %rsi
movq %rbx, %rdi
callq 0x11320
movq %rax, %rdi
movl %ebp, %esi
callq 0x113d0
decl %r15d
cmpl $0x20, %r15d
ja 0x780e1
leaq 0x30f39(%rip), %rcx     # 0xa8fc4
movslq (%rcx,%r15,4), %rax
addq %rcx, %rax
jmpq *%rax
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movq %rbx, %rdi
callq 0x11540
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movq %rbx, %rdi
callq 0x11540
movq %rax, %rdi
callq 0x111b0
movl 0x18(%r14), %esi
jmp 0x7801a
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
pushq $0x20
popq %rsi
movq %rax, %rdi
jmp 0x78213
movslq 0x18(%r14), %rax
leal 0x1(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movzbl (%rcx,%rax), %r13d
movsbl %r13b, %esi
movq %rbx, %rdi
callq 0x11540
pushq $0x20
popq %r12
movq %rax, %rdi
movl %r12d, %esi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movq %rbx, %rdi
callq 0x11540
movq %rax, %rdi
movl %r12d, %esi
leaq 0x8e49c(%rip), %r12     # 0x106600
movq 0x8(%rsp), %r15
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq %rbx, %rdi
cmpq $0x4, %r13
ja 0x780dc
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movslq (%rcx,%rax), %rax
movq 0x50(%r15), %rcx
movl (%rcx,%rax,8), %esi
movl 0x4(%rcx,%rax,8), %eax
leaq 0x30ea5(%rip), %rcx     # 0xa9048
movslq (%rcx,%r13,4), %rdx
addq %rcx, %rdx
jmpq *%rdx
movsbl %sil, %esi
movq %rbx, %rdi
callq 0x113d0
jmp 0x7860c
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movq %rbx, %rdi
callq 0x11540
pushq $0x20
popq %r12
movq %rax, %rdi
movl %r12d, %esi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movq %rbx, %rdi
callq 0x11540
movq %rax, %rdi
movl %r12d, %esi
leaq 0x8e3ed(%rip), %r12     # 0x106600
callq 0x113d0
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
jmp 0x780d9
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movq %rbx, %rdi
callq 0x11540
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
leaq 0x3152f(%rip), %r12     # 0xa978e
movq %rbx, %rdi
movq %r12, %rsi
callq 0x11340
movq %rax, %r13
movq %r14, %rdi
callq 0x75dda
movq %r13, %rdi
movq %rax, %rsi
callq 0x11320
movq %rax, %rdi
movq %r12, %rsi
leaq 0x8e373(%rip), %r12     # 0x106600
callq 0x11340
jmp 0x780d9
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
pushq $0x20
popq %r12
movq %rax, %rdi
movl %r12d, %esi
callq 0x113d0
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
movq %rax, %rdi
movl %r12d, %esi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %r12d
movq %rbx, %rdi
movl %r12d, %esi
callq 0x11540
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
subl $0x1, %r12d
jb 0x78438
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
jmp 0x782f8
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
pushq $0x20
popq %r12
movq %rax, %rdi
movl %r12d, %esi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movq %rbx, %rdi
callq 0x11540
movq %rax, %rdi
movl %r12d, %esi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movl %esi, %r12d
movq %rbx, %rdi
callq 0x11540
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
subl $0x1, %r12d
jb 0x785bd
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
jmp 0x78384
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
movq %rax, %rdi
callq 0x111b0
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %r12d
movq %rbx, %rdi
movl %r12d, %esi
callq 0x11540
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
subl $0x1, %r12d
jb 0x78438
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
jmp 0x78412
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movq %rbx, %rdi
callq 0x11540
movq %rax, %rdi
jmp 0x785c0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movq %rbx, %rdi
callq 0x11540
pushq $0x20
popq %r12
movq %rax, %rdi
movl %r12d, %esi
callq 0x113d0
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
movq %rax, %rdi
movl %r12d, %esi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
movl %esi, %r12d
movq %rbx, %rdi
callq 0x11540
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
subl $0x1, %r12d
jb 0x785bd
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %esi
jmp 0x784bf
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %r12d
movq %rbx, %rdi
movl %r12d, %esi
callq 0x11540
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
subl $0x1, %r12d
jb 0x785bd
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
jmp 0x78532
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
movslq 0x18(%r14), %rax
leal 0x4(%rax), %ecx
movl %ecx, 0x18(%r14)
movq 0x8(%r14), %rcx
movq (%rcx), %rcx
movl (%rcx,%rax), %r12d
movq %rbx, %rdi
movl %r12d, %esi
callq 0x11540
pushq $0x20
popq %rsi
movq %rax, %rdi
callq 0x113d0
subl $0x1, %r12d
jb 0x785bd
movq %r14, %rdi
callq 0x75dda
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11320
jmp 0x78597
movq %rbx, %rdi
leaq 0x8e039(%rip), %r12     # 0x106600
jmp 0x780dc
shlq $0x20, %rax
orq %rsi, %rax
movq %rax, %xmm0
movq %rbx, %rdi
callq 0x114f0
jmp 0x7860c
shlq $0x20, %rax
orq %rsi, %rax
movq %rbx, %rdi
movq %rax, %rsi
callq 0x11330
jmp 0x7860c
movd %esi, %xmm0
movq %rbx, %rdi
callq 0x112b0
jmp 0x7860c
movq %rbx, %rdi
callq 0x11540
movq %rbx, %rdi
jmp 0x780dc
leaq 0x28(%rax), %rbp
leaq 0x10(%rsp), %r12
movq (%rbp), %rbp
testq %rbp, %rbp
je 0x7869c
leaq 0x8(%rbp), %rsi
movq %r12, %rdi
callq 0x79a0e
movq %rbx, %rdi
pushq $0x8
popq %rsi
callq 0x113d0
xorl %r13d, %r13d
cmpl $0x20, %r13d
jae 0x78660
movl 0x30(%rsp), %eax
movl %r13d, %ecx
sarl %cl, %eax
movsbl %al, %esi
movq %rbx, %rdi
callq 0x113d0
addl $0x8, %r13d
jmp 0x78640
movl 0x18(%rsp), %r15d
xorl %r13d, %r13d
cmpl $0x20, %r13d
jae 0x78687
movl %r15d, %eax
movl %r13d, %ecx
sarl %cl, %eax
movsbl %al, %esi
movq %rbx, %rdi
callq 0x113d0
addl $0x8, %r13d
jmp 0x78668
movq %rbx, %rdi
movq %r12, %rsi
callq 0x11320
movq %r12, %rdi
callq 0x209be
jmp 0x7861d
movq 0x8(%rsp), %rax
addq $0x78, %rax
movq (%rax), %rax
testq %rax, %rax
je 0x7870d
movq 0x8(%rax), %r13
movq %rax, %rbp
movl 0x10(%rax), %r15d
movq %rbx, %rdi
pushq $0x9
popq %rsi
callq 0x113d0
xorl %r12d, %r12d
cmpl $0x20, %r12d
jae 0x786e5
movl %r15d, %eax
movl %r12d, %ecx
sarl %cl, %eax
movsbl %al, %esi
movq %rbx, %rdi
callq 0x113d0
addl $0x8, %r12d
jmp 0x786c6
xorl %r12d, %r12d
cmpq $0x3f, %r12
ja 0x78708
movq %r13, %rax
movl %r12d, %ecx
sarq %cl, %rax
movsbl %al, %esi
movq %rbx, %rdi
callq 0x113d0
addq $0x8, %r12
jmp 0x786e8
movq %rbp, %rax
jmp 0x786a5
movq 0x8(%r14), %rsi
movq %rbx, %rdi
callq 0x11320
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x7872e
jmp 0x7872e
jmp 0x7872e
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x209be
movq %rbx, %rdi
callq 0x11570
nop