// File: /workspace/github_c_makefile_star2_O0/takoeight0821[P]hoc_nyan/src/sema.c
// Function: walk
void walk(Node* node) {
  if (!node) {
    return;
  }

  switch (node->tag) {
  case NINT: {
    break;
  }
  case NVAR: {
    break;
  }
  case NGVAR: {
    break;
  }
  case NADD: {
    walk(node->lhs);
    walk(node->rhs);

    if (!(is_integer_type(type_of(node->lhs)))) {
      type_error(int_type(), node->lhs);
    }
    if (!(is_integer_type(type_of(node->rhs)))) {
      type_error(int_type(), node->rhs);
    }

    rewrite_arith_node(node);
    break;
  }
  case NSUB: {
    walk(node->lhs);
    walk(node->rhs);

    if (!(is_integer_type(node->lhs->type))) {
      type_error(int_type(), node->lhs);
    }
    if (!(is_integer_type(node->rhs->type))) {
      type_error(int_type(), node->rhs);
    }

    rewrite_arith_node(node);
    break;
  }
  case NMUL: {
    walk(node->lhs);
    walk(node->rhs);

    if (!(is_integer_type(node->lhs->type))) {
      type_error(int_type(), node->lhs);
    }
    if (!(is_integer_type(node->rhs->type))) {
      type_error(int_type(), node->rhs);
    }

    node->type = arith_conv(type_of(node->lhs), type_of(node->rhs));
    break;
  }
  case NDIV: {
    walk(node->lhs);
    walk(node->rhs);

    if (!(is_integer_type(node->lhs->type))) {
      type_error(int_type(), node->lhs);
    }
    if (!(is_integer_type(node->rhs->type))) {
      type_error(int_type(), node->rhs);
    }

    node->type = arith_conv(type_of(node->lhs), type_of(node->rhs));
    break;
  }
  case NMOD: {
    walk(node->lhs);
    walk(node->rhs);

    if (!(is_integer_type(node->lhs->type))) {
      type_error(int_type(), node->lhs);
    }
    if (!(is_integer_type(node->rhs->type))) {
      type_error(int_type(), node->rhs);
    }

    node->type = arith_conv(type_of(node->lhs), type_of(node->rhs));
    break;
  }
  case NLT: {
    walk(node->lhs);
    walk(node->rhs);

    if (!(is_integer_type(node->lhs->type))) {
      type_error(int_type(), node->lhs);
    }
    if (!(is_integer_type(node->rhs->type))) {
      type_error(int_type(), node->rhs);
    }

    node->type = int_type();
    break;
  }
  case NLE: {
    walk(node->lhs);
    walk(node->rhs);

    if (!(is_integer_type(node->lhs->type))) {
      type_error(int_type(), node->lhs);
    }
    if (!(is_integer_type(node->rhs->type))) {
      type_error(int_type(), node->rhs);
    }

    node->type = int_type();
    break;
  }
  case NGT: {
    walk(node->lhs);
    walk(node->rhs);

    if (!(is_integer_type(node->lhs->type))) {
      type_error(int_type(), node->lhs);
    }
    if (!(is_integer_type(node->rhs->type))) {
      type_error(int_type(), node->rhs);
    }

    node->type = int_type();
    break;
  }
  case NGE: {
    walk(node->lhs);
    walk(node->rhs);

    if (!(is_integer_type(node->lhs->type))) {
      type_error(int_type(), node->lhs);
    }
    if (!(is_integer_type(node->rhs->type))) {
      type_error(int_type(), node->rhs);
    }

    node->type = int_type();
    break;
  }
  case NEQ: {
    walk(node->lhs);
    walk(node->rhs);

    if (!is_equal_type(node->lhs->type, node->rhs->type)) {
      type_error(type_of(node->lhs), node->rhs);
    }

    node->type = int_type();
    break;
  }
  case NNE: {
    walk(node->lhs);
    walk(node->rhs);

    if (!is_equal_type(node->lhs->type, node->rhs->type)) {
      type_error(type_of(node->lhs), node->rhs);
    }

    node->type = int_type();
    break;
  }
  case NLOGNOT: {
    walk(node->expr);
    if (!is_integer_type(node->expr->type)) {
      type_error(int_type(), node->expr);
    }
    node->type = int_type();
    break;
  }
  case NNOT: {
    walk(node->expr);
    node->type = type_of(node->expr);
    break;
  }
  case NAND: {
    walk(node->lhs);
    walk(node->rhs);
    node->type = arith_conv(type_of(node->lhs), type_of(node->rhs));
    break;
  }
  case NOR: {
    walk(node->lhs);
    walk(node->rhs);
    node->type = arith_conv(type_of(node->lhs), type_of(node->rhs));
    break;
  }
  case NXOR: {
    walk(node->lhs);
    walk(node->rhs);
    node->type = arith_conv(type_of(node->lhs), type_of(node->rhs));
    break;
  }
  case NLOGAND: {
    walk(node->lhs);
    walk(node->rhs);
    node->type = node->rhs->type;
    break;
  }
  case NLOGOR: {
    walk(node->lhs);
    walk(node->rhs);
    node->type = node->rhs->type;
    break;
  }
  case NCOMMA: {
    walk(node->lhs);
    walk(node->rhs);
    node->type = node->rhs->type;
    break;
  }
  case NDEFVAR: {
    /* node->type = NULL; */
    break;
  }
  case NASSIGN: {
    walk(node->lhs);
    walk(node->rhs);

    node->type = node->rhs->type;

    if (!is_assignable(type_of(node->lhs), type_of(node->rhs))) {
      type_error(type_of(node->lhs), node->rhs);
    }

    break;
  }
  case NCALL: {
    for (size_t i = 0; i < node->args->length; i++) {
      walk(node->args->ptr[i]);
    }
    if (streq("__hoc_builtin_va_start", node->name)) {
      node->type = void_type();
    } else {
      node->type = ret_type(node->name);
    }
    break;
  }
  case NADDR: {
    walk(node->expr);
    node->type = ptr_to(type_of(node->expr));
    break;
  }
  case NDEREF: {
    walk(node->expr);

    if (node->expr->type->ty != TY_PTR) {
      type_error(ptr_to(void_type()), node->expr);
    }

    node->type = node->expr->type->ptr_to;
    break;
  }
  case NMEMBER: {
    walk(node->expr);
    node->type = field_type(node->expr->type->fields, node->name);
    break;
  }
  case NEXPR_STMT: {
    walk(node->expr);
    node->type = NULL;
    break;
  }
  case NRETURN: {
    walk(node->expr);
    node->type = NULL;
    break;
  }
  case NIF: {
    walk(node->cond);
    walk(node->then);
    node->type = NULL;
    break;
  }
  case NIFELSE: {
    walk(node->cond);
    walk(node->then);
    walk(node->els);
    node->type = NULL;
    break;
  }
  case NWHILE: {
    walk(node->cond);
    walk(node->body);
    node->type = NULL;
    break;
  }
  case NFOR: {
    walk(node->init);
    walk(node->cond);
    walk(node->step);
    walk(node->body);
    node->type = NULL;
    break;
  }
  case NBLOCK: {
    for (size_t i = 0; i < node->stmts->length; i++) {
      walk(node->stmts->ptr[i]);
    }
    node->type = NULL;
    break;
  }
  case NSIZEOF: {
    walk(node->expr);
    node->type = int_type();
    break;
  }
  case NSWITCH: {
    walk(node->expr);
    node->cases = new_vec();
    vec_push(switches, node);
    walk(node->body);
    node->type = NULL;
    break;
  }
  case NCASE: {
    walk(node->expr);
    walk(node->body);
    node->type = NULL;

    node->name = case_label();
    Node* sw = vec_last(switches);
    vec_push(sw->cases, node);
    break;
  }
  case NDEFAULT: {
    walk(node->body);
    node->type = NULL;

    node->name = case_label();
    Node* sw = vec_last(switches);
    vec_push(sw->cases, node);
  }
  case NBREAK: {
    node->type = NULL;
    break;
  }
  case NCAST:{
    walk(node->expr);
    break;
  }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
jne 0xda28
jmp 0xe6d2
movq -0x8(%rbp), %rax
movl (%rax), %eax
movq %rax, -0x30(%rbp)
subq $0x28, %rax
ja 0xe6d2
movq -0x30(%rbp), %rax
leaq 0x5989(%rip), %rcx      # 0x133d0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0xe6d2
jmp 0xe6d2
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdaa8
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x9f70
movq %rax, %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdad7
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rdi
callq 0xe790
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdb2a
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdb55
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rdi
callq 0xe790
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdba8
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdbd3
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x9f70
movq -0x38(%rbp), %rdi
movq %rax, %rsi
callq 0xe9a0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdc52
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdc7d
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x9f70
movq -0x40(%rbp), %rdi
movq %rax, %rsi
callq 0xe9a0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdcfc
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdd27
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x9f70
movq -0x48(%rbp), %rdi
movq %rax, %rsi
callq 0xe9a0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdda6
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xddd1
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
callq 0x9e90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xde2b
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xde56
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
callq 0x9e90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdeb0
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdedb
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
callq 0x9e90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdf35
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xdf60
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
callq 0x9e90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rsi
callq 0xea40
cmpl $0x0, %eax
jne 0xdfce
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
callq 0x9e90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x10(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rsi
callq 0xea40
cmpl $0x0, %eax
jne 0xe03c
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
callq 0x9e90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x10(%rax), %rdi
callq 0xe6e0
cmpl $0x0, %eax
jne 0xe089
callq 0x9e90
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rsi
callq 0xe730
callq 0x9e90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x9f70
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, -0x50(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x9f70
movq -0x50(%rbp), %rdi
movq %rax, %rsi
callq 0xe9a0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, -0x58(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x9f70
movq -0x58(%rbp), %rdi
movq %rax, %rsi
callq 0xe9a0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, -0x60(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x9f70
movq -0x60(%rbp), %rdi
movq %rax, %rsi
callq 0xe9a0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rax
movq 0x10(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, -0x68(%rbp)
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rdi
callq 0x9f70
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0xeaa0
cmpl $0x0, %eax
jne 0xe2dc
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x9f70
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x20(%rax), %rsi
callq 0xe730
jmp 0xe6d2
movq $0x0, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x50(%rcx), %rcx
cmpq 0x10(%rcx), %rax
jae 0xe321
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0xda10
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
jmp 0xe2e9
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rsi
leaq 0x43b7(%rip), %rdi      # 0x126e7
callq 0xfca0
cmpl $0x0, %eax
je 0xe34c
callq 0x9e50
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe364
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rdi
callq 0xeb20
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x9f70
movq %rax, %rdi
callq 0x9ed0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x10(%rax), %rax
cmpl $0x4, (%rax)
je 0xe3d6
callq 0x9e50
movq %rax, %rdi
callq 0x9ed0
movq %rax, %rdi
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rsi
callq 0xe730
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x10(%rax), %rax
movq 0x18(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x10(%rax), %rax
movq 0x30(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rsi
callq 0xa0b0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x60(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x70(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x78(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xe6d2
movq $0x0, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x30(%rcx), %rcx
cmpq 0x10(%rcx), %rax
jae 0xe582
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0xda10
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0xe54a
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
callq 0x9e90
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
movb $0x0, %al
callq 0x2280
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x88(%rax)
movq 0x90ea(%rip), %rdi      # 0x176c8
movq -0x8(%rbp), %rsi
callq 0x22e0
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
callq 0xebc0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x40(%rax)
movq 0x9080(%rip), %rdi      # 0x176c8
callq 0x2390
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq 0x88(%rax), %rdi
movq -0x8(%rbp), %rsi
callq 0x22e0
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rdi
callq 0xda10
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
callq 0xebc0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x40(%rax)
movq 0x902e(%rip), %rdi      # 0x176c8
callq 0x2390
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rdi
movq -0x8(%rbp), %rsi
callq 0x22e0
movq -0x8(%rbp), %rax
movq $0x0, 0x10(%rax)
jmp 0xe6d2
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0xda10
addq $0x70, %rsp
popq %rbp
retq
nopl (%rax,%rax)