// File: /workspace/github_c_makefile_star2_O0/sisshiki1969[P]monocc/src/codegen.c
// Function: gen
void gen(Node *node) {
  if (!node) return;
  if (verbose) {
    int line = get_line(node->token->str, source_text);
    int file_no = get_file_no(node->token->str);
    fprintf(output, "// Line %d ", line);
    print_node(node);
    fprintf(output, "\n");
    fprintf(output, "\t.loc %d %d\n", file_no, line);
  }

  if (is_binary_op(node->kind)) {
    Type *l_ty = type(node->lhs);
    Type *r_ty = type(node->rhs);
    int reg_mode;
    if (node->kind == ND_LAND) {
      gen_land(node);
      fprintf(output, "\tpush  rax\n");
      return;
    }
    if (node->kind == ND_LOR) {
      gen_lor(node);
      fprintf(output, "\tpush  rax\n");
      return;
    }
    gen(node->lhs);
    gen(node->rhs);

    fprintf(output, "\tpop  rdi\n");
    fprintf(output, "\tpop  rax\n");
    char *cmp_op;

    switch (node->kind) {
      case ND_ADD:
        fprintf(output, "\tadd  rax, rdi\n");
        break;
      case ND_SUB:
        fprintf(output, "\tsub  rax, rdi\n");
        break;
      case ND_MUL:
        fprintf(output, "\timul rax, rdi\n");
        break;
      case ND_DIV:
        fprintf(output, "\tcqo\n");
        fprintf(output, "\tidiv rax, rdi\n");
        break;
      case ND_AND:
        fprintf(output, "\tand  rax, rdi\n");
        break;
      case ND_OR:
        fprintf(output, "\tor   rax, rdi\n");
        break;
      case ND_XOR:
        fprintf(output, "\txor  rax, rdi\n");
        break;
      case ND_SHR:
        fprintf(output, "\tmov  cl , dil\n");
        fprintf(output, "\tshr  rax, cl\n");
        break;
      case ND_SHL:
        fprintf(output, "\tmov  cl , dil\n");
        fprintf(output, "\tshl  rax, cl\n");
        break;

      case ND_EQ:
      case ND_NEQ:
      case ND_GE:
      case ND_GT:
        if (!is_compatible_type(l_ty, r_ty))
          error_at_node(node, "Illegal operation. (Type mismatch)");
        reg_mode = reg_size(get_common_type(l_ty, r_ty));
        switch (node->kind) {
          case ND_EQ:
            cmp_op = "e";
            break;
          case ND_NEQ:
            cmp_op = "ne";
            break;
          case ND_GE:
            cmp_op = "ge";
            break;
          case ND_GT:
            cmp_op = "g";
            break;
        }
        fprintf(output, "\tcmp  %s, %s\n", reg_rax[reg_mode],
                reg_rdi[reg_mode]);
        fprintf(output, "\tset%s al\n", cmp_op);
        fprintf(output, "\tmovzb %s, al\n", reg_rax[1]);
        break;
      default:
        error_at_token(node->token, "gen(): Unimplemented binary op.");
    }
    fprintf(output, "\tpush rax\n");
    return;
  }
  char *label;
  Node *parent;
  switch (node->kind) {
    // statement
    case ND_IF:
      gen_if(node);
      return;
    case ND_WHILE:
      gen_while(node);
      return;
    case ND_FOR:
      gen_for(node);
      return;
    case ND_SWITCH:
      push_loop_switch(node);
      // evaluate const-expr and save as a local var.
      emit_lvar_addr(node->lvar);
      fprintf(output, "\tpush rax\n");
      gen(node->lhs);
      fprintf(output, "\tpop  rdi\n");
      fprintf(output, "\tpop  rax\n");
      fprintf(output, "\tmov  [rax], edi\n");
      gen_stmt(node->rhs);
      emit_jmp(get_break(NULL));
      for (int i = 0; i < vec_len(node->nodes); i++) {
        Node *parent = node->nodes->data[i];
        emit_label(parent->label);
        gen_stmt(parent);
      }
      emit_label(get_break(NULL));
      pop_loop();
      return;
    case ND_BLOCK:
      gen_block(node);
      return;
    case ND_RETURN:
      // TODO: return without expression returns undefined value.
      if (node->lhs) {
        gen(node->lhs);
        fprintf(output, "\tpop  rax\n");
      }
      emit_return(current_fn);
      return;
    case ND_CASE:
      parent = get_inner_switch();
      gen(node->lhs);
      emit_lvar_addr(parent->lvar);
      fprintf(output, "\tmov  eax, [rax]\n");
      fprintf(output, "\tpop  rdi\n");
      fprintf(output, "\tcmp  eax, edi\n");
      label = new_label();
      fprintf(output, "\tje   %s\n", label);
      node->rhs->label = label;
      vec_push(parent->nodes, node->rhs);
      return;
    case ND_DEFAULT:
      label = new_label();
      emit_jmp(label);
      node->lhs->label = label;
      vec_push(parent->nodes, node->lhs);
      return;
    case ND_BREAK:
      emit_jmp(get_break(node->token));
      return;
    case ND_CONTINUE:
      emit_jmp(get_continue(node->token));
      return;

    // expression
    case ND_NUM:
      if (-2147483648 <= node->num_val && node->num_val <= 2147483647)
        fprintf(output, "\tpush %ld\n", node->num_val);
      else {
        fprintf(output, "\tmov  rax, %ld\n", node->num_val);
        fprintf(output, "\tpush rax\n");
      }
      return;
    case ND_LVAR:
    case ND_GVAR:
    case ND_MEMBER:
      if (is_struct(type(node))) {
        gen_addr(node);
      } else {
        gen_addr_to_rax(node);
        load(node);
      }
      return;
    case ND_ADDR:
      gen_addr(node->lhs);
      return;
    case ND_DEREF:
      if (!is_ptr(type(node->lhs)))
        error_at_node(node->lhs,
                      "Illegal operation. (dereference of non-pointer type)");
      gen(node->lhs);
      if (!is_struct(type(node))) {
        fprintf(output, "\tpop  rax\n");
        load(node);
      }
      return;
    case ND_CAST:
      gen(node->lhs);
      cast(type(node->lhs), type(node));
      return;
    case ND_ASSIGN:
      gen_assign(node->lhs, node->rhs);
      return;
    case ND_CALL:
      gen_call(node);
      return;
    case ND_FDECL:
      gen_fdecl(node);
      return;

    case ND_STR:
      gen_addr(node);
      return;
    case ND_NOT:
      gen_lnot(node);
      fprintf(output, "\tpush rax\n");
      return;
    case ND_CMP:
      gen(node->lhs);
      fprintf(output, "\tpop  rax\n");
      fprintf(output, "\tnot  rax\n");
      fprintf(output, "\tpush rax\n");
      return;
  }
  error_at_token(node->token, "gen(): Unimplemented NodeKind.");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0x1b6b
jmp 0x24dc
testb $0x1, 0x1367e(%rip)     # 0x151f0
je 0x1c04
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq 0x20(%rax), %rdi
leaq 0x13675(%rip), %rax     # 0x15200
movq (%rax), %rsi
callq 0x58f0
movl %eax, -0xc(%rbp)
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq 0x20(%rax), %rdi
callq 0x5b80
movl %eax, -0x10(%rbp)
leaq 0x1365f(%rip), %rax     # 0x15210
movq (%rax), %rdi
movl -0xc(%rbp), %edx
leaq 0xdc80(%rip), %rsi      # 0xf83e
movb $0x0, %al
callq 0x10f0
movq -0x8(%rbp), %rdi
callq 0x4300
leaq 0x1363b(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xe4f2(%rip), %rsi      # 0x100d1
movb $0x0, %al
callq 0x10f0
leaq 0x13623(%rip), %rax     # 0x15210
movq (%rax), %rdi
movl -0x10(%rbp), %edx
movl -0xc(%rbp), %ecx
leaq 0xdc4d(%rip), %rsi      # 0xf84a
movb $0x0, %al
callq 0x10f0
movq -0x8(%rbp), %rax
movl (%rax), %edi
callq 0x12c0
testb $0x1, %al
jne 0x1c18
jmp 0x1fa5
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xdda0
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0xdda0
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rax
cmpl $0xc, (%rax)
jne 0x1c69
movq -0x8(%rbp), %rdi
callq 0x3010
leaq 0x135bd(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdbfa(%rip), %rsi      # 0xf857
movb $0x0, %al
callq 0x10f0
jmp 0x24dc
movq -0x8(%rbp), %rax
cmpl $0xd, (%rax)
jne 0x1c98
movq -0x8(%rbp), %rdi
callq 0x31f0
leaq 0x1358e(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdbcb(%rip), %rsi      # 0xf857
movb $0x0, %al
callq 0x10f0
jmp 0x24dc
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x1b50
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x1b50
leaq 0x13557(%rip), %rax     # 0x15210
movq %rax, -0x68(%rbp)
movq (%rax), %rdi
leaq 0xd7a9(%rip), %rsi      # 0xf470
xorl %eax, %eax
movb %al, -0x59(%rbp)
callq 0x10f0
movq -0x68(%rbp), %rcx
movb -0x59(%rbp), %al
movq (%rcx), %rdi
leaq 0xd65e(%rip), %rsi      # 0xf340
callq 0x10f0
movq -0x8(%rbp), %rax
movl (%rax), %eax
addl $-0x4, %eax
movl %eax, %ecx
movq %rcx, -0x58(%rbp)
subl $0xf, %eax
ja 0x1f72
movq -0x58(%rbp), %rax
leaq 0xd3a6(%rip), %rcx      # 0xf0b0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x134f6(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdb3f(%rip), %rsi      # 0xf863
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
leaq 0x134d9(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdb32(%rip), %rsi      # 0xf873
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
leaq 0x134bc(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdb25(%rip), %rsi      # 0xf883
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
leaq 0x1349f(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdb18(%rip), %rsi      # 0xf893
movb $0x0, %al
callq 0x10f0
leaq 0x13487(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdb06(%rip), %rsi      # 0xf899
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
leaq 0x1346a(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdaf9(%rip), %rsi      # 0xf8a9
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
leaq 0x1344d(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdaec(%rip), %rsi      # 0xf8b9
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
leaq 0x13430(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdadf(%rip), %rsi      # 0xf8c9
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
leaq 0x13413(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdad2(%rip), %rsi      # 0xf8d9
movb $0x0, %al
callq 0x10f0
leaq 0x133fb(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdaca(%rip), %rsi      # 0xf8e9
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
leaq 0x133de(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xda9d(%rip), %rsi      # 0xf8d9
movb $0x0, %al
callq 0x10f0
leaq 0x133c6(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xdaa4(%rip), %rsi      # 0xf8f8
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0xdac0
testb $0x1, %al
jne 0x1e83
movq -0x8(%rbp), %rdi
leaq 0xd8f7(%rip), %rsi      # 0xf773
movb $0x0, %al
callq 0x6040
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0xd520
movq %rax, %rdi
callq 0x1680
movl %eax, -0x24(%rbp)
movq -0x8(%rbp), %rax
movl (%rax), %eax
addl $-0x8, %eax
movl %eax, %ecx
movq %rcx, -0x70(%rbp)
subl $0x3, %eax
ja 0x1ef5
movq -0x70(%rbp), %rax
leaq 0xd236(%rip), %rcx      # 0xf0f0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0xed14(%rip), %rax      # 0x10bde
movq %rax, -0x30(%rbp)
jmp 0x1ef5
leaq 0xed10(%rip), %rax      # 0x10be7
movq %rax, -0x30(%rbp)
jmp 0x1ef5
leaq 0xda23(%rip), %rax      # 0xf907
movq %rax, -0x30(%rbp)
jmp 0x1ef5
leaq 0xe210(%rip), %rax      # 0x10101
movq %rax, -0x30(%rbp)
leaq 0x13314(%rip), %rax     # 0x15210
movq (%rax), %rdi
movslq -0x24(%rbp), %rax
leaq 0x131e6(%rip), %rdx     # 0x150f0
shlq $0x2, %rax
addq %rax, %rdx
movslq -0x24(%rbp), %rax
leaq 0x131e4(%rip), %rcx     # 0x15100
shlq $0x2, %rax
addq %rax, %rcx
leaq 0xd9e0(%rip), %rsi      # 0xf90a
movb $0x0, %al
callq 0x10f0
leaq 0x132d8(%rip), %rax     # 0x15210
movq (%rax), %rdi
movq -0x30(%rbp), %rdx
leaq 0xd9d2(%rip), %rsi      # 0xf918
movb $0x0, %al
callq 0x10f0
leaq 0x132bc(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd9c5(%rip), %rsi      # 0xf923
leaq 0x1318b(%rip), %rdx     # 0x150f0
addq $0x4, %rdx
movb $0x0, %al
callq 0x10f0
jmp 0x1f88
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rdi
leaq 0xd9b1(%rip), %rsi      # 0xf932
movb $0x0, %al
callq 0x5d20
leaq 0x13281(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd390(%rip), %rsi      # 0xf329
movb $0x0, %al
callq 0x10f0
jmp 0x24dc
movq -0x8(%rbp), %rax
movl (%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x78(%rbp)
subl $0x26, %eax
ja 0x24c6
movq -0x78(%rbp), %rax
leaq 0xd04d(%rip), %rcx      # 0xf014
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
callq 0x26a0
jmp 0x24dc
movq -0x8(%rbp), %rdi
callq 0x27b0
jmp 0x24dc
movq -0x8(%rbp), %rdi
callq 0x2870
jmp 0x24dc
movq -0x8(%rbp), %rdi
callq 0x1500
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x19d0
leaq 0x131f9(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd308(%rip), %rsi      # 0xf329
movb $0x0, %al
callq 0x10f0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x1b50
leaq 0x131d4(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd42a(%rip), %rsi      # 0xf470
movb $0x0, %al
callq 0x10f0
leaq 0x131bc(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd2e2(%rip), %rsi      # 0xf340
movb $0x0, %al
callq 0x10f0
leaq 0x131a4(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd8dc(%rip), %rsi      # 0xf952
movb $0x0, %al
callq 0x10f0
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x2760
xorl %eax, %eax
movl %eax, %edi
callq 0x15d0
movq %rax, %rdi
callq 0x13c0
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
movl %eax, -0x7c(%rbp)
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
callq 0x4000
movl %eax, %ecx
movl -0x7c(%rbp), %eax
cmpl %ecx, %eax
jge 0x20f6
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq (%rax), %rax
movslq -0x44(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movq 0x40(%rax), %rdi
callq 0x1390
movq -0x50(%rbp), %rdi
callq 0x2760
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x20a2
xorl %eax, %eax
movl %eax, %edi
callq 0x15d0
movq %rax, %rdi
callq 0x1390
callq 0x1570
jmp 0x24dc
movq -0x8(%rbp), %rdi
callq 0x2990
jmp 0x24dc
movq -0x8(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x214f
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x1b50
leaq 0x130d2(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd1f8(%rip), %rsi      # 0xf340
movb $0x0, %al
callq 0x10f0
movq 0x13092(%rip), %rdi     # 0x151e8
callq 0x1440
jmp 0x24dc
callq 0x1610
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x1b50
movq -0x40(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x19d0
leaq 0x13086(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd0f0(%rip), %rsi      # 0xf284
movb $0x0, %al
callq 0x10f0
leaq 0x1306e(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd2c4(%rip), %rsi      # 0xf470
movb $0x0, %al
callq 0x10f0
leaq 0x13056(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd7a0(%rip), %rsi      # 0xf964
movb $0x0, %al
callq 0x10f0
callq 0x1330
movq %rax, -0x38(%rbp)
leaq 0x13035(%rip), %rax     # 0x15210
movq (%rax), %rdi
movq -0x38(%rbp), %rdx
leaq 0xd2bc(%rip), %rsi      # 0xf4a5
movb $0x0, %al
callq 0x10f0
movq -0x38(%rbp), %rcx
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq %rcx, 0x40(%rax)
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x4020
jmp 0x24dc
callq 0x1330
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rdi
callq 0x13c0
movq -0x38(%rbp), %rcx
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq %rcx, 0x40(%rax)
movq -0x40(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x4020
jmp 0x24dc
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rdi
callq 0x15d0
movq %rax, %rdi
callq 0x13c0
jmp 0x24dc
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rdi
callq 0x1590
movq %rax, %rdi
callq 0x13c0
jmp 0x24dc
movq -0x8(%rbp), %rcx
movq $-0x80000000, %rax      # imm = 0x80000000
cmpq 0x20(%rcx), %rax
jg 0x22cb
movq -0x8(%rbp), %rax
cmpq $0x7fffffff, 0x20(%rax) # imm = 0x7FFFFFFF
jg 0x22cb
leaq 0x12f60(%rip), %rax     # 0x15210
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdx
leaq 0xd6b2(%rip), %rsi      # 0xf974
movb $0x0, %al
callq 0x10f0
jmp 0x2303
leaq 0x12f3e(%rip), %rax     # 0x15210
movq (%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdx
leaq 0xd69b(%rip), %rsi      # 0xf97f
movb $0x0, %al
callq 0x10f0
leaq 0x12f1e(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd02d(%rip), %rsi      # 0xf329
movb $0x0, %al
callq 0x10f0
jmp 0x24dc
movq -0x8(%rbp), %rdi
callq 0xdda0
movq %rax, %rdi
callq 0xd3b0
testb $0x1, %al
jne 0x231f
jmp 0x232a
movq -0x8(%rbp), %rdi
callq 0x24f0
jmp 0x233c
movq -0x8(%rbp), %rdi
callq 0x1a60
movq -0x8(%rbp), %rdi
callq 0x1700
jmp 0x24dc
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x24f0
jmp 0x24dc
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xdda0
movq %rax, %rdi
callq 0xd350
testb $0x1, %al
jne 0x2382
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xd614(%rip), %rsi      # 0xf98f
movb $0x0, %al
callq 0x6040
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x1b50
movq -0x8(%rbp), %rdi
callq 0xdda0
movq %rax, %rdi
callq 0xd3b0
testb $0x1, %al
jne 0x23c5
leaq 0x12e65(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xcf8b(%rip), %rsi      # 0xf340
movb $0x0, %al
callq 0x10f0
movq -0x8(%rbp), %rdi
callq 0x1700
jmp 0x24dc
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x1b50
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0xdda0
movq %rax, -0x88(%rbp)
movq -0x8(%rbp), %rdi
callq 0xdda0
movq -0x88(%rbp), %rdi
movq %rax, %rsi
callq 0x1840
jmp 0x24dc
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x3770
jmp 0x24dc
movq -0x8(%rbp), %rdi
callq 0x2ab0
jmp 0x24dc
movq -0x8(%rbp), %rdi
callq 0x2cf0
jmp 0x24dc
movq -0x8(%rbp), %rdi
callq 0x24f0
jmp 0x24dc
movq -0x8(%rbp), %rdi
callq 0x33d0
leaq 0x12db4(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xcec3(%rip), %rsi      # 0xf329
movb $0x0, %al
callq 0x10f0
jmp 0x24dc
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x1b50
leaq 0x12d8d(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xceb3(%rip), %rsi      # 0xf340
movb $0x0, %al
callq 0x10f0
leaq 0x12d75(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xd51f(%rip), %rsi      # 0xf9c4
movb $0x0, %al
callq 0x10f0
leaq 0x12d5d(%rip), %rax     # 0x15210
movq (%rax), %rdi
leaq 0xce6c(%rip), %rsi      # 0xf329
movb $0x0, %al
callq 0x10f0
jmp 0x24dc
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rdi
leaq 0xd4fa(%rip), %rsi      # 0xf9cf
movb $0x0, %al
callq 0x5d20
addq $0x90, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)