// File: /workspace/github_c_makefile_star2_O0/mikeakohn[P]print_pe/build/../src/pdb.c
// Function: print_pdb_dbi_stream
void print_pdb_dbi_stream(
  struct pdb_dir_t *pdb_dir,
  struct pdb_header_t *pdb_header,
  struct pdb_dbi_t *pdb_dbi,
  FILE *in)
{
  if (pdb_dbi->version_signature == 0)
  {
    read_pdb_dbi_stream(pdb_dir, pdb_header, pdb_dbi, in);
  }

  uint8_t *data = pdb_dir->heap;

#if 0
  read_data(pdb_dir, 3, pdb_header->block_size, in);

  uint8_t *data = pdb_dir->heap;

  pdb_dbi->version_signature = get_int32(data + 0);
  pdb_dbi->version_header = get_uint32(data + 4);
  pdb_dbi->age = get_uint32(data + 8);
  pdb_dbi->global_stream_index = get_int16(data + 12);
  pdb_dbi->build_number = get_int16(data + 14);
  pdb_dbi->public_stream_index = get_int16(data + 16);
  pdb_dbi->pdb_dll_version = get_int16(data + 18);
  pdb_dbi->symbol_record_stream = get_int16(data + 20);
  pdb_dbi->pdb_dll_rbld = get_int16(data + 22);
  pdb_dbi->mod_info_size = get_int32(data + 24);
  pdb_dbi->section_contribution_size = get_int32(data + 28);
  pdb_dbi->section_map_size = get_int32(data + 32);
  pdb_dbi->source_info_size = get_int32(data + 36);
  pdb_dbi->type_server_size = get_int32(data + 40);
  pdb_dbi->mfc_type_server_index = get_uint32(data + 44);
  pdb_dbi->optional_debug_header_size = get_int32(data + 48);
  pdb_dbi->ec_substream_size = get_int32(data + 52);
  pdb_dbi->flags = get_int16(data + 56);
  pdb_dbi->machine = get_uint16(data + 58);
  pdb_dbi->padding = get_uint32(data + 60);
#endif

  printf(" -- DBI Stream --\n");
  printf("         version_signature: %d\n", pdb_dbi->version_signature);
  printf("            version_header: %d\n", pdb_dbi->version_header);
  printf("                       age: %d\n", pdb_dbi->age);
  printf("       global_stream_index: %d\n", pdb_dbi->global_stream_index);
  printf("              build_number: %d\n", pdb_dbi->build_number);
  printf("       public_stream_index: %d\n", pdb_dbi->public_stream_index);
  printf("           pdb_dll_version: %d\n", pdb_dbi->pdb_dll_version);
  printf("      symbol_record_stream: %d\n", pdb_dbi->symbol_record_stream);
  printf("              pdb_dll_rbld: %d\n", pdb_dbi->pdb_dll_rbld);
  printf("             mod_info_size: %d\n", pdb_dbi->mod_info_size);
  printf(" section_contribution_size: %d\n", pdb_dbi->section_contribution_size);
  printf("          section_map_size: %d\n", pdb_dbi->section_map_size);
  printf("          source_info_size: %d\n", pdb_dbi->source_info_size);
  printf("          type_server_size: %d\n", pdb_dbi->type_server_size);
  printf("     mfc_type_server_index: %d\n", pdb_dbi->mfc_type_server_index);
  printf("optional_debug_header_size: %d\n", pdb_dbi->optional_debug_header_size);
  printf("         ec_substream_size: %d\n", pdb_dbi->ec_substream_size);
  printf("                     flags: %d\n", pdb_dbi->flags);
  printf("                   machine: 0x%04x\n", pdb_dbi->machine);
  printf("                   padding: %d\n", pdb_dbi->padding);

  uint8_t *next = data + 64;
  int count = 0;
  uint32_t bytes = 0;
  int i;

  while (bytes < pdb_dbi->mod_info_size)
  {
    printf("       --- module %d ---\n", count);
    printf("            reserved_1: %d\n", get_uint32(next + 0));
    printf("               section: %d\n", get_int16(next + 4));
    printf("             padding_1: %d\n", get_uint16(next + 6));
    printf("                offset: %d\n", get_int32(next + 8));
    printf("                  size: %d\n", get_int32(next + 12));
    printf("       characteristics: 0x%08x\n", get_uint32(next + 16));
    printf("          module_index: %d\n", get_int16(next + 20));
    printf("             padding_2: %d\n", get_uint16(next + 22));
    printf("              data_crc: %08x\n", get_uint32(next + 24));
    printf("             reloc_crc: %08x\n", get_uint32(next + 28));
    printf("                 flags: %d\n", get_uint16(next + 32));
    printf("  module_symbol_stream: %d\n", get_uint16(next + 34));
    printf("      symbol_byte_size: %d\n", get_uint32(next + 36));
    printf("         c11_byte_size: %d\n", get_uint32(next + 40));
    printf("         c13_byte_size: %d\n", get_uint32(next + 44));
    printf("     source_file_count: %d\n", get_uint16(next + 48));
    printf("               padding: %d\n", get_uint16(next + 50));
    printf("            reserved_2: %d\n", get_uint32(next + 52));
    printf("source_file_name_index: %d\n", get_uint32(next + 56));
    printf("   pdb_file_path_index: %d\n", get_uint32(next + 60));
    printf("           module_name: ");

    for (i = 64; next[i] != 0; i++)
    {
      printf("%c", next[i]);
    }
    printf("\n");

    printf("      object_file_name: ");
    i++;
    for (;next[i] != 0; i++)
    {
      printf("%c", next[i]);
    }
    printf("\n");
    i++;

    i = (i + 3) & ~3;

    bytes += i;
    next += i;
    count++;
  }

  uint32_t version = get_uint32(next + 0);

  printf("    -- section contriubtion version: %08x\n", version);

  int length = 28;
  count = 0;
  bytes = 4;
  next += 4;

  if (version == 0xeffe0000 + 20140516) { length += 4; }

  while (bytes < pdb_dbi->section_contribution_size)
  {
    printf("       --- section contribution %d ---\n", count);
    printf("               section: %d\n", get_int16(next + 0));
    printf("             padding_1: %d\n", get_uint16(next + 2));
    printf("                offset: %d\n", get_int32(next + 4));
    printf("                  size: %d\n", get_int32(next + 8));
    printf("       characteristics: 0x%08x\n", get_uint32(next + 12));
    printf("          module_index: %d\n", get_uint16(next + 16));
    printf("             padding_2: %d\n", get_uint16(next + 18));
    printf("              data_crc: 0x%08x\n", get_uint32(next + 20));
    printf("             reloc_crc: 0x%08x\n", get_uint32(next + 24));

    if (version == 0xeffe0000 + 20140516)
    {
      printf("            isect_coff: %d\n", get_uint32(next + 28));
    }

    bytes += length;
    next += length;
    count++;
  }

  printf("    -- section map count=%d log_count=%d\n",
    get_uint16(next + 0),
    get_uint16(next + 2));

  count = 0;
  bytes = 4;
  next += 4;

  while (bytes < pdb_dbi->section_map_size)
  {
    uint16_t flags = get_uint16(next + 0);
    char temp[80];

    sprintf(temp, "%c%c%c %s %c%c%c",
      (flags & 1) != 0 ? 'r' : '-',
      (flags & 2) != 0 ? 'w' : '-',
      (flags & 4) != 0 ? 'e' : '-',
      (flags & 8) != 0 ? "32" : "-",
      (flags & 256) != 0 ? 'S' : '-',
      (flags & 512) != 0 ? 'A' : '-',
      (flags & 1024) != 0 ? 'G' : '-');

    printf("       --- section map entry %d ---\n", count);
    printf("                 flags: 0x%04x %s\n", flags, temp);
    printf("                   ovl: %d\n", get_uint16(next + 2));
    printf("                 group: %d\n", get_uint16(next + 4));
    printf("                 frame: %d\n", get_uint16(next + 6));
    printf("          section_name: %d\n", get_int16(next + 8));
    printf("            class_name: %d\n", get_int16(next + 10));
    printf("                offset: %d\n", get_uint32(next + 12));
    printf("        section_length: %d\n", get_uint32(next + 16));

    bytes += 20;
    next += 20;
    count++;
  }

  uint8_t *save = next;
  int module_count = get_uint16(next + 0);
  int source_file_count = get_uint16(next + 2);

  printf("    -- file_info modules=%d source_files=%d\n",
    module_count, source_file_count);

  bytes = 4;
  int offset = bytes + (module_count * 2);

  for (i = 0; i < module_count; i++)
  {
    printf("   module: indices=%d file_counts=%d\n",
      get_uint16(next + bytes), get_uint16(next + offset));
    bytes += 2;
    offset += 2;
  }

  next += module_count * 4;
  uint8_t *names_buffer = save + (module_count * 4) + (source_file_count * 4) + 4;

  for (i = 0; i < source_file_count; i++)
  {
    offset = get_uint32(next);
    printf("    %04x: %s\n", offset, names_buffer + offset);
    next += 4;
  }

  next = save + pdb_dbi->source_info_size;

  // FIXME: Skiping Type Server Substream.
  next += pdb_dbi->type_server_size;

  // FIXME: Skiping EC Substream.
  next += pdb_dbi->ec_substream_size;

  printf("       --- optional_debug ---\n");

  if (pdb_dbi->optional_debug_header_size >= 22)
  {
    printf("                     fpo_data: %d\n", get_int16(next + 0));
    printf("               exception data: %d\n", get_int16(next + 2));
    printf("                   fixup_data: %d\n", get_int16(next + 4));
    printf("             omap_to_src_data: %d\n", get_int16(next + 6));
    printf("           omap_from_src_data: %d\n", get_int16(next + 8));
    printf("          section_header_data: %d\n", get_int16(next + 10));
    printf("                token_rid_map: %d\n", get_int16(next + 12));
    printf("                        xdata: %d\n", get_int16(next + 14));
    printf("                        pdata: %d\n", get_int16(next + 16));
    printf("                 new_fpo_data: %d\n", get_int16(next + 18));
    printf(" original_section_header_data: %d\n", get_int16(next + 20));
    printf("\n");
  }
    else
  {
    printf("section size is only %d?\n", pdb_dbi->optional_debug_header_size);
  }

  printf("\n\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %rbx
subq $0xd8, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
jne 0x465a
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
callq 0x43e0
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
leaq 0x28c1(%rip), %rdi      # 0x6f2e
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl (%rax), %esi
leaq 0x28c0(%rip), %rdi      # 0x6f41
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x4(%rax), %esi
leaq 0x28cb(%rip), %rdi      # 0x6f61
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x8(%rax), %esi
leaq 0x28d6(%rip), %rdi      # 0x6f81
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movswl 0xc(%rax), %esi
leaq 0x28e0(%rip), %rdi      # 0x6fa1
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movzwl 0xe(%rax), %esi
leaq 0x28ea(%rip), %rdi      # 0x6fc1
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movswl 0x10(%rax), %esi
leaq 0x28f4(%rip), %rdi      # 0x6fe1
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movzwl 0x12(%rax), %esi
leaq 0x28fe(%rip), %rdi      # 0x7001
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movzwl 0x14(%rax), %esi
leaq 0x2908(%rip), %rdi      # 0x7021
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movzwl 0x16(%rax), %esi
leaq 0x2912(%rip), %rdi      # 0x7041
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x18(%rax), %esi
leaq 0x291d(%rip), %rdi      # 0x7061
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x1c(%rax), %esi
leaq 0x2928(%rip), %rdi      # 0x7081
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x20(%rax), %esi
leaq 0x2933(%rip), %rdi      # 0x70a1
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x24(%rax), %esi
leaq 0x293e(%rip), %rdi      # 0x70c1
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x28(%rax), %esi
leaq 0x2949(%rip), %rdi      # 0x70e1
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x2c(%rax), %esi
leaq 0x2954(%rip), %rdi      # 0x7101
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x30(%rax), %esi
leaq 0x295f(%rip), %rdi      # 0x7121
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x34(%rax), %esi
leaq 0x296a(%rip), %rdi      # 0x7141
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movzwl 0x38(%rax), %esi
leaq 0x2974(%rip), %rdi      # 0x7161
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movzwl 0x3a(%rax), %esi
leaq 0x297e(%rip), %rdi      # 0x7181
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
movl 0x3c(%rax), %esi
leaq 0x298d(%rip), %rdi      # 0x71a5
movb $0x0, %al
callq 0x1070
movq -0x30(%rbp), %rax
addq $0x40, %rax
movq %rax, -0x38(%rbp)
movl $0x0, -0x3c(%rbp)
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl 0x18(%rcx), %eax
jae 0x4b93
movl -0x3c(%rbp), %esi
leaq 0x2972(%rip), %rdi      # 0x71c5
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x2973(%rip), %rdi      # 0x71df
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x4, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x2971(%rip), %rdi      # 0x71fb
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x6, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x296f(%rip), %rdi      # 0x7217
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
callq 0x43a0
movl %eax, %esi
leaq 0x296e(%rip), %rdi      # 0x7233
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0xc, %rdi
callq 0x43a0
movl %eax, %esi
leaq 0x1a35(%rip), %rdi      # 0x6317
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x10, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x2ffd(%rip), %rdi      # 0x78fc
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x14, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x2932(%rip), %rdi      # 0x724f
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x16, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x2930(%rip), %rdi      # 0x726b
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x18, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x292f(%rip), %rdi      # 0x7287
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x1c, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x2930(%rip), %rdi      # 0x72a5
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x20, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x27d2(%rip), %rdi      # 0x7165
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x22, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x2912(%rip), %rdi      # 0x72c3
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x24, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x2911(%rip), %rdi      # 0x72df
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x28, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x2910(%rip), %rdi      # 0x72fb
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x2c, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x290f(%rip), %rdi      # 0x7317
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x30, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x290d(%rip), %rdi      # 0x7333
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x32, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x2765(%rip), %rdi      # 0x71a9
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x34, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x28ee(%rip), %rdi      # 0x734f
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x38, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x28ed(%rip), %rdi      # 0x736b
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x3c, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x28ec(%rip), %rdi      # 0x7387
movb $0x0, %al
callq 0x1070
leaq 0x28fa(%rip), %rdi      # 0x73a3
movb $0x0, %al
callq 0x1070
movl $0x40, -0x44(%rbp)
movq -0x38(%rbp), %rax
movslq -0x44(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0x4aed
movq -0x38(%rbp), %rax
movslq -0x44(%rbp), %rcx
movzbl (%rax,%rcx), %esi
leaq 0x29e1(%rip), %rdi      # 0x74bc
movb $0x0, %al
callq 0x1070
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x4ab7
leaq 0x1ae7(%rip), %rdi      # 0x65db
movb $0x0, %al
callq 0x1070
leaq 0x28ba(%rip), %rdi      # 0x73bc
movb $0x0, %al
callq 0x1070
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
movq -0x38(%rbp), %rax
movslq -0x44(%rbp), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0x4b48
movq -0x38(%rbp), %rax
movslq -0x44(%rbp), %rcx
movzbl (%rax,%rcx), %esi
leaq 0x2986(%rip), %rdi      # 0x74bc
movb $0x0, %al
callq 0x1070
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x4b12
leaq 0x1a8c(%rip), %rdi      # 0x65db
movb $0x0, %al
callq 0x1070
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %eax
addl $0x3, %eax
andl $-0x4, %eax
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %eax
addl -0x40(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x44(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x4839
movq -0x38(%rbp), %rdi
callq 0x3c40
movl %eax, -0x48(%rbp)
movl -0x48(%rbp), %esi
leaq 0x282c(%rip), %rdi      # 0x73d5
movb $0x0, %al
callq 0x1070
movl $0x1c, -0x4c(%rbp)
movl $0x0, -0x3c(%rbp)
movl $0x4, -0x40(%rbp)
movq -0x38(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x38(%rbp)
cmpl $0xf13151e4, -0x48(%rbp) # imm = 0xF13151E4
jne 0x4be3
movl -0x4c(%rbp), %eax
addl $0x4, %eax
movl %eax, -0x4c(%rbp)
jmp 0x4be5
movl -0x40(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl 0x1c(%rcx), %eax
jae 0x4d59
movl -0x3c(%rbp), %esi
leaq 0x2801(%rip), %rdi      # 0x7400
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x25e2(%rip), %rdi      # 0x71fb
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x2, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x25e0(%rip), %rdi      # 0x7217
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x4, %rdi
callq 0x43a0
movl %eax, %esi
leaq 0x25df(%rip), %rdi      # 0x7233
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
callq 0x43a0
movl %eax, %esi
leaq 0x16a6(%rip), %rdi      # 0x6317
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0xc, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x2c6e(%rip), %rdi      # 0x78fc
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x10, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x25a3(%rip), %rdi      # 0x724f
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x12, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x25a1(%rip), %rdi      # 0x726b
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x14, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x2741(%rip), %rdi      # 0x7428
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x18, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x2744(%rip), %rdi      # 0x7448
movb $0x0, %al
callq 0x1070
cmpl $0xf13151e4, -0x48(%rbp) # imm = 0xF13151E4
jne 0x4d31
movq -0x38(%rbp), %rdi
addq $0x1c, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x273e(%rip), %rdi      # 0x7468
movb $0x0, %al
callq 0x1070
movl -0x4c(%rbp), %eax
addl -0x40(%rbp), %eax
movl %eax, -0x40(%rbp)
movl -0x4c(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x4be5
movq -0x38(%rbp), %rdi
callq 0x4370
movzwl %ax, %eax
movl %eax, -0xc4(%rbp)
movq -0x38(%rbp), %rdi
addq $0x2, %rdi
callq 0x4370
movl -0xc4(%rbp), %esi
movzwl %ax, %edx
leaq 0x26fc(%rip), %rdi      # 0x7484
movb $0x0, %al
callq 0x1070
movl $0x0, -0x3c(%rbp)
movl $0x4, -0x40(%rbp)
movq -0x38(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x38(%rbp)
movl -0x40(%rbp), %eax
movq -0x20(%rbp), %rcx
cmpl 0x20(%rcx), %eax
jae 0x4fba
movq -0x38(%rbp), %rdi
callq 0x4370
movw %ax, -0x4e(%rbp)
leaq -0xa0(%rbp), %rdi
movzwl -0x4e(%rbp), %ecx
andl $0x1, %ecx
movl $0x2d, %edx
movl $0x72, %eax
cmpl $0x0, %ecx
cmovnel %eax, %edx
movzwl -0x4e(%rbp), %esi
andl $0x2, %esi
movl $0x2d, %ecx
movl $0x77, %eax
cmpl $0x0, %esi
cmovnel %eax, %ecx
movzwl -0x4e(%rbp), %esi
andl $0x4, %esi
movl $0x2d, %r8d
movl $0x65, %eax
cmpl $0x0, %esi
cmovnel %eax, %r8d
movzwl -0x4e(%rbp), %esi
andl $0x8, %esi
leaq 0x269d(%rip), %r9       # 0x74bf
leaq 0x19dc(%rip), %rax      # 0x6805
cmpl $0x0, %esi
cmovneq %rax, %r9
movzwl -0x4e(%rbp), %esi
andl $0x100, %esi            # imm = 0x100
movl $0x2d, %r11d
movl $0x53, %eax
cmpl $0x0, %esi
cmovnel %eax, %r11d
movzwl -0x4e(%rbp), %esi
andl $0x200, %esi            # imm = 0x200
movl $0x2d, %r10d
movl $0x41, %eax
cmpl $0x0, %esi
cmovnel %eax, %r10d
movzwl -0x4e(%rbp), %ebx
andl $0x400, %ebx            # imm = 0x400
movl $0x2d, %eax
movl $0x47, %esi
cmpl $0x0, %ebx
cmovnel %esi, %eax
leaq 0x2625(%rip), %rsi      # 0x74ae
movl %r11d, (%rsp)
movl %r10d, 0x8(%rsp)
movl %eax, 0x10(%rsp)
movb $0x0, %al
callq 0x1100
movl -0x3c(%rbp), %esi
leaq 0x261a(%rip), %rdi      # 0x74c1
movb $0x0, %al
callq 0x1070
movzwl -0x4e(%rbp), %esi
leaq -0xa0(%rbp), %rdx
leaq 0x2626(%rip), %rdi      # 0x74e6
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x2, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x262b(%rip), %rdi      # 0x7509
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x4, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x2629(%rip), %rdi      # 0x7525
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x6, %rdi
callq 0x4370
movzwl %ax, %esi
leaq 0x2627(%rip), %rdi      # 0x7541
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x2625(%rip), %rdi      # 0x755d
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0xa, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x2623(%rip), %rdi      # 0x7579
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0xc, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x22c0(%rip), %rdi      # 0x7233
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x10, %rdi
callq 0x3c40
movl %eax, %esi
leaq 0x2605(%rip), %rdi      # 0x7595
movb $0x0, %al
callq 0x1070
movl -0x40(%rbp), %eax
addl $0x14, %eax
movl %eax, -0x40(%rbp)
movq -0x38(%rbp), %rax
addq $0x14, %rax
movq %rax, -0x38(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x4da9
movq -0x38(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x38(%rbp), %rdi
callq 0x4370
movzwl %ax, %eax
movl %eax, -0xac(%rbp)
movq -0x38(%rbp), %rdi
addq $0x2, %rdi
callq 0x4370
movzwl %ax, %eax
movl %eax, -0xb0(%rbp)
movl -0xac(%rbp), %esi
movl -0xb0(%rbp), %edx
leaq 0x25b1(%rip), %rdi      # 0x75b1
movb $0x0, %al
callq 0x1070
movl $0x4, -0x40(%rbp)
movl -0x40(%rbp), %eax
movl -0xac(%rbp), %ecx
shll %ecx
addl %ecx, %eax
movl %eax, -0xb4(%rbp)
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
cmpl -0xac(%rbp), %eax
jge 0x5098
movq -0x38(%rbp), %rdi
movl -0x40(%rbp), %eax
addq %rax, %rdi
callq 0x4370
movzwl %ax, %eax
movl %eax, -0xc8(%rbp)
movq -0x38(%rbp), %rdi
movslq -0xb4(%rbp), %rax
addq %rax, %rdi
callq 0x4370
movl -0xc8(%rbp), %esi
movzwl %ax, %edx
leaq 0x2570(%rip), %rdi      # 0x75de
movb $0x0, %al
callq 0x1070
movl -0x40(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x40(%rbp)
movl -0xb4(%rbp), %eax
addl $0x2, %eax
movl %eax, -0xb4(%rbp)
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x5028
movl -0xac(%rbp), %ecx
shll $0x2, %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0xa8(%rbp), %rax
movl -0xac(%rbp), %ecx
shll $0x2, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movl -0xb0(%rbp), %ecx
shll $0x2, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
addq $0x4, %rax
movq %rax, -0xc0(%rbp)
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
cmpl -0xb0(%rbp), %eax
jge 0x513c
movq -0x38(%rbp), %rdi
callq 0x3c40
movl %eax, -0xb4(%rbp)
movl -0xb4(%rbp), %esi
movq -0xc0(%rbp), %rdx
movslq -0xb4(%rbp), %rax
addq %rax, %rdx
leaq 0x24e6(%rip), %rdi      # 0x7604
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x38(%rbp)
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x50e6
movq -0xa8(%rbp), %rax
movq -0x20(%rbp), %rcx
movslq 0x24(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movl 0x28(%rax), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movl 0x34(%rax), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
leaq 0x248f(%rip), %rdi      # 0x7612
movb $0x0, %al
callq 0x1070
movq -0x20(%rbp), %rax
cmpl $0x16, 0x30(%rax)
jl 0x52ee
movq -0x38(%rbp), %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x2486(%rip), %rdi      # 0x7631
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x2, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x248b(%rip), %rdi      # 0x7654
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x4, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x2490(%rip), %rdi      # 0x7677
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x6, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x2495(%rip), %rdi      # 0x769a
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x249a(%rip), %rdi      # 0x76bd
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0xa, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x249f(%rip), %rdi      # 0x76e0
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0xc, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x24a4(%rip), %rdi      # 0x7703
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0xe, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x24a9(%rip), %rdi      # 0x7726
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x10, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x24ae(%rip), %rdi      # 0x7749
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x12, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x24b3(%rip), %rdi      # 0x776c
movb $0x0, %al
callq 0x1070
movq -0x38(%rbp), %rdi
addq $0x14, %rdi
callq 0x45f0
movswl %ax, %esi
leaq 0x24b8(%rip), %rdi      # 0x778f
movb $0x0, %al
callq 0x1070
leaq 0x12f6(%rip), %rdi      # 0x65db
movb $0x0, %al
callq 0x1070
jmp 0x5303
movq -0x20(%rbp), %rax
movl 0x30(%rax), %esi
leaq 0x24b6(%rip), %rdi      # 0x77b2
movb $0x0, %al
callq 0x1070
leaq 0x12d0(%rip), %rdi      # 0x65da
movb $0x0, %al
callq 0x1070
addq $0xd8, %rsp
popq %rbx
popq %rbp
retq
nopl (%rax,%rax)