// File: ALSchwalm[P]entrospy/entrospy/include/output.hpp
// Function: void print_block_bytes<__gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char>>>>(__gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char>>>, __gnu_cxx::__normal_iterator<unsigned char const*, std::vector<unsigned char, std::allocator<unsigned char>>>, unsigned long, unsigned long, PrintingPolicy const&)
void print_block_bytes(Iter begin, Iter end, uint64_t offset,
                       uint64_t address_width, const PrintingPolicy& policy) {
    const auto BYTES_PER_LINE = 16;
    auto iter = begin;
    for (auto i = 0; i < std::distance(begin, end) / BYTES_PER_LINE; ++i) {
        auto address = offset + BYTES_PER_LINE * i;
        std::cout << boost::format("%1%  ") %
                         boost::io::group(address_format_modifier(
                                              policy.addr_format),
                                          std::setw(address_width),
                                          std::setfill('0'), address);

        auto byte_iter = iter;
        auto line_end = iter + BYTES_PER_LINE;
        for (; byte_iter < line_end; ++byte_iter) {
            std::cout << boost::format("%02x ") %
                             static_cast<unsigned>(*byte_iter);
        }

        line_end -= 1;
        std::cout << "  |";
        for (; iter < line_end; ++iter) {
            std::cout << byte_to_printable(*iter);
        }
        std::cout << byte_to_printable(*iter++) << "|\n";
    }

    if (iter != end) {
        auto byte_iter = iter;
        auto printed = end - begin - (end - iter);

        std::cout << boost::format("%1%  ") %
                         boost::io::group(address_format_modifier(
                                              policy.addr_format),
                                          std::setw(address_width),
                                          std::setfill('0'), offset + printed);
        for (; byte_iter != end; ++byte_iter) {
            std::cout << boost::format("%02x ") %
                             static_cast<unsigned>(*byte_iter);
        }

        auto spacing = BYTES_PER_LINE - ((end - begin) % BYTES_PER_LINE);
        std::cout << std::string(spacing * 3, ' ') << "  |";
        for (; iter < end; ++iter) {
            std::cout << byte_to_printable(*iter);
        }
        std::cout << std::string(spacing, ' ') << "|\n";
    }
}

// Assembly:
subq $0x558, %rsp            # imm = 0x558
movq %rdi, 0x550(%rsp)
movq %rsi, 0x548(%rsp)
movq %rdx, 0x540(%rsp)
movq %rcx, 0x538(%rsp)
movq %r8, 0x530(%rsp)
movl $0x10, 0x52c(%rsp)
movq 0x550(%rsp), %rax
movq %rax, 0x520(%rsp)
movl $0x0, 0x51c(%rsp)
movslq 0x51c(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0x550(%rsp), %rax
movq %rax, 0x510(%rsp)
movq 0x548(%rsp), %rax
movq %rax, 0x508(%rsp)
movq 0x510(%rsp), %rdi
movq 0x508(%rsp), %rsi
callq 0x348e0
movl $0x10, %ecx
cqto
idivq %rcx
movq %rax, %rcx
movq 0x90(%rsp), %rax
cmpq %rcx, %rax
jge 0x32db6
movq 0x540(%rsp), %rax
movl 0x51c(%rsp), %ecx
shll $0x4, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, 0x500(%rsp)
leaq 0x5ae7(%rip), %rsi      # 0x385e6
leaq 0x420(%rsp), %rdi
callq 0xd940
movq 0x530(%rsp), %rax
movl 0x18(%rax), %edi
callq 0x318f0
movq %rax, 0x88(%rsp)
jmp 0x32b26
movl 0x538(%rsp), %edi
callq 0x31960
movl %eax, 0x84(%rsp)
jmp 0x32b3b
movl 0x84(%rsp), %eax
movl %eax, 0x3f8(%rsp)
movl $0x30, %edi
callq 0x31980
movb %al, 0x83(%rsp)
jmp 0x32b5c
movq 0x88(%rsp), %rsi
movb 0x83(%rsp), %al
movb %al, 0x3f7(%rsp)
movl 0x3f8(%rsp), %edx
movzbl 0x3f7(%rsp), %ecx
leaq 0x408(%rsp), %rdi
leaq 0x500(%rsp), %r8
callq 0x31860
jmp 0x32b98
leaq 0x420(%rsp), %rdi
leaq 0x408(%rsp), %rsi
callq 0x31830
movq %rax, 0x78(%rsp)
jmp 0x32bb4
movq 0x78(%rsp), %rsi
movq 0x193f0(%rip), %rdi     # 0x4bfb0
callq 0x2f0c0
jmp 0x32bc7
leaq 0x420(%rsp), %rdi
callq 0xdea0
movq 0x520(%rsp), %rax
movq %rax, 0x3e8(%rsp)
leaq 0x520(%rsp), %rdi
movl $0x10, %esi
callq 0x34920
movq %rax, 0x3e0(%rsp)
leaq 0x3e8(%rsp), %rdi
leaq 0x3e0(%rsp), %rsi
callq 0x34960
testb $0x1, %al
jne 0x32c1c
jmp 0x32ce3
leaq 0x59c9(%rip), %rsi      # 0x385ec
leaq 0x300(%rsp), %rdi
movq %rdi, 0x68(%rsp)
callq 0xd940
leaq 0x3e8(%rsp), %rdi
callq 0x349d0
movq 0x68(%rsp), %rdi
movzbl (%rax), %eax
movl %eax, 0x2fc(%rsp)
leaq 0x2fc(%rsp), %rsi
callq 0x349a0
movq %rax, 0x70(%rsp)
jmp 0x32c65
movq 0x70(%rsp), %rsi
movq 0x1933f(%rip), %rdi     # 0x4bfb0
callq 0x2f0c0
jmp 0x32c78
leaq 0x300(%rsp), %rdi
callq 0xdea0
leaq 0x3e8(%rsp), %rdi
callq 0x349e0
jmp 0x32bfe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x400(%rsp)
movl %eax, 0x3fc(%rsp)
leaq 0x420(%rsp), %rdi
callq 0xdea0
jmp 0x33221
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x400(%rsp)
movl %eax, 0x3fc(%rsp)
leaq 0x300(%rsp), %rdi
callq 0xdea0
jmp 0x33221
leaq 0x3e0(%rsp), %rdi
movl $0x1, %esi
callq 0x34a00
movq 0x192b4(%rip), %rdi     # 0x4bfb0
leaq 0x58ef(%rip), %rsi      # 0x385f2
callq 0xa510
leaq 0x520(%rsp), %rdi
leaq 0x3e0(%rsp), %rsi
callq 0x34960
testb $0x1, %al
jne 0x32d23
jmp 0x32d56
leaq 0x520(%rsp), %rdi
callq 0x349d0
movzbl (%rax), %edi
callq 0x34a30
movq 0x19271(%rip), %rdi     # 0x4bfb0
movsbl %al, %esi
callq 0xa630
leaq 0x520(%rsp), %rdi
callq 0x349e0
jmp 0x32d08
leaq 0x520(%rsp), %rdi
xorl %esi, %esi
callq 0x34a70
movq %rax, 0x2f0(%rsp)
leaq 0x2f0(%rsp), %rdi
callq 0x349d0
movzbl (%rax), %edi
callq 0x34a30
movq 0x19227(%rip), %rdi     # 0x4bfb0
movsbl %al, %esi
callq 0xa630
movq %rax, %rdi
leaq 0x585b(%rip), %rsi      # 0x385f6
callq 0xa510
movl 0x51c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x51c(%rsp)
jmp 0x32a75
leaq 0x520(%rsp), %rdi
leaq 0x548(%rsp), %rsi
callq 0x34ab0
testb $0x1, %al
jne 0x32dd4
jmp 0x33219
movq 0x520(%rsp), %rax
movq %rax, 0x2e8(%rsp)
leaq 0x548(%rsp), %rdi
movq %rdi, 0x50(%rsp)
leaq 0x550(%rsp), %rsi
callq 0x34af0
movq 0x50(%rsp), %rdi
movq %rax, 0x58(%rsp)
leaq 0x520(%rsp), %rsi
callq 0x34af0
movq %rax, %rcx
movq 0x58(%rsp), %rax
subq %rcx, %rax
movq %rax, 0x2e0(%rsp)
leaq 0x57b7(%rip), %rsi      # 0x385e6
leaq 0x200(%rsp), %rdi
callq 0xd940
movq 0x530(%rsp), %rax
movl 0x18(%rax), %edi
callq 0x318f0
movq %rax, 0x60(%rsp)
jmp 0x32e53
movl 0x538(%rsp), %edi
callq 0x31960
movl %eax, 0x4c(%rsp)
jmp 0x32e65
movl 0x4c(%rsp), %eax
movl %eax, 0x1e4(%rsp)
movl $0x30, %edi
callq 0x31980
movb %al, 0x4b(%rsp)
jmp 0x32e80
movq 0x60(%rsp), %rsi
movb 0x4b(%rsp), %al
movb %al, 0x1e3(%rsp)
movq 0x540(%rsp), %rax
movq 0x2e0(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0x1d8(%rsp)
movl 0x1e4(%rsp), %edx
movzbl 0x1e3(%rsp), %ecx
leaq 0x1e8(%rsp), %rdi
leaq 0x1d8(%rsp), %r8
callq 0x34b60
jmp 0x32ed1
leaq 0x200(%rsp), %rdi
leaq 0x1e8(%rsp), %rsi
callq 0x34b30
movq %rax, 0x40(%rsp)
jmp 0x32eed
movq 0x40(%rsp), %rsi
movq 0x190b7(%rip), %rdi     # 0x4bfb0
callq 0x2f0c0
jmp 0x32f00
leaq 0x200(%rsp), %rdi
callq 0xdea0
leaq 0x2e8(%rsp), %rdi
leaq 0x548(%rsp), %rsi
callq 0x34ab0
testb $0x1, %al
jne 0x32f2b
jmp 0x32ff2
leaq 0x56ba(%rip), %rsi      # 0x385ec
leaq 0xf8(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0xd940
leaq 0x2e8(%rsp), %rdi
callq 0x349d0
movq 0x30(%rsp), %rdi
movzbl (%rax), %eax
movl %eax, 0xf4(%rsp)
leaq 0xf4(%rsp), %rsi
callq 0x349a0
movq %rax, 0x38(%rsp)
jmp 0x32f74
movq 0x38(%rsp), %rsi
movq 0x19030(%rip), %rdi     # 0x4bfb0
callq 0x2f0c0
jmp 0x32f87
leaq 0xf8(%rsp), %rdi
callq 0xdea0
leaq 0x2e8(%rsp), %rdi
callq 0x349e0
jmp 0x32f0d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x400(%rsp)
movl %eax, 0x3fc(%rsp)
leaq 0x200(%rsp), %rdi
callq 0xdea0
jmp 0x33221
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x400(%rsp)
movl %eax, 0x3fc(%rsp)
leaq 0xf8(%rsp), %rdi
callq 0xdea0
jmp 0x33221
leaq 0x548(%rsp), %rdi
leaq 0x550(%rsp), %rsi
callq 0x34af0
movq %rax, %rcx
movq %rcx, %rdx
addq $0xf, %rdx
testq %rcx, %rcx
movq %rcx, %rax
cmovsq %rdx, %rax
andq $-0x10, %rax
subq %rcx, %rax
addq $0x10, %rax
movq %rax, 0xe8(%rsp)
movq 0xe8(%rsp), %rax
leaq (%rax,%rax,2), %rax
movq %rax, 0x20(%rsp)
leaq 0xc7(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0xa9d0
movq 0x20(%rsp), %rsi
movq 0x28(%rsp), %rcx
leaq 0xc8(%rsp), %rdi
movl $0x20, %edx
callq 0xa3b0
jmp 0x3306f
movq 0x18f3a(%rip), %rdi     # 0x4bfb0
leaq 0xc8(%rsp), %rsi
callq 0xa490
movq %rax, 0x18(%rsp)
jmp 0x3308a
movq 0x18(%rsp), %rdi
leaq 0x555c(%rip), %rsi      # 0x385f2
callq 0xa510
jmp 0x3309d
leaq 0xc8(%rsp), %rdi
callq 0xab18
leaq 0xc7(%rsp), %rdi
callq 0xa560
leaq 0x520(%rsp), %rdi
leaq 0x548(%rsp), %rsi
callq 0x34960
testb $0x1, %al
jne 0x330d2
jmp 0x3314e
leaq 0x520(%rsp), %rdi
callq 0x349d0
movzbl (%rax), %edi
callq 0x34a30
movq 0x18ec2(%rip), %rdi     # 0x4bfb0
movsbl %al, %esi
callq 0xa630
leaq 0x520(%rsp), %rdi
callq 0x349e0
jmp 0x330b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x400(%rsp)
movl %eax, 0x3fc(%rsp)
jmp 0x3313c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x400(%rsp)
movl %eax, 0x3fc(%rsp)
leaq 0xc8(%rsp), %rdi
callq 0xab18
leaq 0xc7(%rsp), %rdi
callq 0xa560
jmp 0x33221
movq 0xe8(%rsp), %rax
movq %rax, 0x8(%rsp)
leaq 0x9f(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0xa9d0
movq 0x8(%rsp), %rsi
movq 0x10(%rsp), %rcx
leaq 0xa0(%rsp), %rdi
movl $0x20, %edx
callq 0xa3b0
jmp 0x3318b
movq 0x18e1e(%rip), %rdi     # 0x4bfb0
leaq 0xa0(%rsp), %rsi
callq 0xa490
movq %rax, (%rsp)
jmp 0x331a5
movq (%rsp), %rdi
leaq 0x5446(%rip), %rsi      # 0x385f6
callq 0xa510
jmp 0x331b7
leaq 0xa0(%rsp), %rdi
callq 0xab18
leaq 0x9f(%rsp), %rdi
callq 0xa560
jmp 0x33219
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x400(%rsp)
movl %eax, 0x3fc(%rsp)
jmp 0x3320a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x400(%rsp)
movl %eax, 0x3fc(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0xab18
leaq 0x9f(%rsp), %rdi
callq 0xa560
jmp 0x33221
addq $0x558, %rsp            # imm = 0x558
retq
movq 0x400(%rsp), %rdi
callq 0xa9b0
nop