// File: /workspace/github_c_makefile_star2_O3/sisshiki1969[P]monocc/src/tokenize.c
// Function: read_token
Token *read_token(TokContext *ctx) {
  char *p = ctx->p;
  FileInfo *fi = ctx->file_info;
  Token *cur = ctx->cur;
  skip_whitespace(&p);
  if (strncmp(p, "//", 2) == 0) {
    p += 2;
    char *next = strchr(p, '\n');
    p = next + 1;
  } else if (strncmp(p, "/*", 2) == 0) {
    p += 2;
    char *next = strstr(p, "*/");
    if (!next) {
      error_at_char(fi, p - 2, "Comment unclosed at end of file.");
    }
    p = next + 2;
  } else if (strncmp(p, "__LINE__", 8) == 0) {
    cur = new_token(TK_MACRO, cur, p, 8);
    p += 8;
  } else if (isdigit(*p)) {
    bool signed_int = true;
    bool long_int = false;
    long num = *p - '0';
    int len = 1;
    while (isdigit(p[len])) {
      num *= 10;
      num += p[len] - '0';
      len++;
    }
    if (p[len] == 'u' || p[len] == 'U') {
      signed_int = false;
      len++;
    }
    if (p[len] == 'l' || p[len] == 'L') {
      len++;
      long_int = true;
      if (p[len] == 'l' || p[len] == 'L') len++;
    }
    cur = new_token(TK_NUM, cur, p, len);
    p += len;
    if (signed_int) {
      if (long_int) {
        cur->num_ty = new_type_long();
      } else {
        cur->num_ty = new_type_int();
      }
    } else {
      if (long_int) {
        cur->num_ty = new_type_ulong();
      } else {
        cur->num_ty = new_type_uint();
      }
    }
    cur->num_val = num;
  } else if (isalpha(*p) || *p == '_') {
    int len = 1;
    while (is_ident_char(p[len])) len++;

    if (is_reserved(p, len, "return")) {
      cur = new_token(TK_RETURN, cur, p, len);
    } else if (is_reserved(p, len, "if")) {
      cur = new_token(TK_IF, cur, p, len);
    } else if (is_reserved(p, len, "else")) {
      cur = new_token(TK_ELSE, cur, p, len);
    } else if (is_reserved(p, len, "while")) {
      cur = new_token(TK_WHILE, cur, p, len);
    } else if (is_reserved(p, len, "for")) {
      cur = new_token(TK_FOR, cur, p, len);
    } else if (is_reserved(p, len, "switch")) {
      cur = new_token(TK_SWITCH, cur, p, len);
    } else if (is_reserved(p, len, "case")) {
      cur = new_token(TK_CASE, cur, p, len);
    } else if (is_reserved(p, len, "default")) {
      cur = new_token(TK_DEFAULT, cur, p, len);
    } else if (is_reserved(p, len, "break")) {
      cur = new_token(TK_BREAK, cur, p, len);
    } else if (is_reserved(p, len, "continue")) {
      cur = new_token(TK_CONTINUE, cur, p, len);
    } else if (is_reserved(p, len, "int")) {
      cur = new_token(TK_INT, cur, p, len);
    } else if (is_reserved(p, len, "char")) {
      cur = new_token(TK_CHAR, cur, p, len);
    } else if (is_reserved(p, len, "bool")) {
      cur = new_token(TK_BOOL, cur, p, len);
    } else if (is_reserved(p, len, "void")) {
      cur = new_token(TK_VOID, cur, p, len);
    } else if (is_reserved(p, len, "short")) {
      cur = new_token(TK_SHORT, cur, p, len);
    } else if (is_reserved(p, len, "long")) {
      cur = new_token(TK_LONG, cur, p, len);
    } else if (is_reserved(p, len, "signed")) {
      cur = new_token(TK_SIGNED, cur, p, len);
    } else if (is_reserved(p, len, "unsigned")) {
      cur = new_token(TK_UNSIGNED, cur, p, len);
    } else if (is_reserved(p, len, "sizeof")) {
      cur = new_token(TK_SIZEOF, cur, p, len);
    } else if (is_reserved(p, len, "struct")) {
      cur = new_token(TK_STRUCT, cur, p, len);
    } else if (is_reserved(p, len, "enum")) {
      cur = new_token(TK_ENUM, cur, p, len);
    } else if (is_reserved(p, len, "union")) {
      cur = new_token(TK_UNION, cur, p, len);
    } else if (is_reserved(p, len, "typedef")) {
      cur = new_token(TK_TYPEDEF, cur, p, len);
    } else if (is_reserved(p, len, "extern")) {
      cur = new_token(TK_EXTERN, cur, p, len);
    } else {
      cur = new_token(TK_IDENT, cur, p, len);
    }
    p += len;
  } else if (*p == '+') {
    if (*(p + 1) == '=') {
      cur = new_token(TK_ASSIGN_ADD, cur, p, 2);
      p += 2;
    } else if (*(p + 1) == '+') {
      cur = new_token(TK_INC, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_ADD, cur, p++, 1);
  } else if (*p == '-') {
    if (*(p + 1) == '=') {
      cur = new_token(TK_ASSIGN_SUB, cur, p, 2);
      p += 2;
    } else if (*(p + 1) == '-') {
      cur = new_token(TK_DEC, cur, p, 2);
      p += 2;
    } else if (*(p + 1) == '>') {
      cur = new_token(TK_ARROW, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_SUB, cur, p++, 1);
  } else if (*p == '*') {
    if (*(p + 1) == '=') {
      cur = new_token(TK_ASSIGN_MUL, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_MUL, cur, p++, 1);
  } else if (*p == '/') {
    if (*(p + 1) == '=') {
      cur = new_token(TK_ASSIGN_DIV, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_DIV, cur, p++, 1);
  } else if (*p == ',') {
    cur = new_token(TK_COMMA, cur, p++, 1);
  } else if (*p == '~') {
    cur = new_token(TK_TILDA, cur, p++, 1);
  } else if (*p == '=') {
    p++;
    if (*p == '=') {
      cur = new_token(TK_EQ, cur, p - 1, 2);
      p++;
    } else {
      cur = new_token(TK_ASSIGN, cur, p - 1, 1);
    }
  } else if (*p == '>') {
    p++;
    if (*p == '=') {
      cur = new_token(TK_GE, cur, p - 1, 2);
      p++;
    } else if (*p == '>') {
      cur = new_token(TK_SHR, cur, p - 1, 2);
      p++;
    } else {
      cur = new_token(TK_GT, cur, p - 1, 1);
    }
  } else if (*p == '<') {
    p++;
    if (*p == '=') {
      cur = new_token(TK_LE, cur, p - 1, 2);
      p++;
    } else if (*p == '<') {
      cur = new_token(TK_SHL, cur, p - 1, 2);
      p++;
    } else {
      cur = new_token(TK_LT, cur, p - 1, 1);
    }
  } else if (*p == '!') {
    p++;
    if (*p == '=') {
      cur = new_token(TK_NEQ, cur, p - 1, 2);
      p++;
    } else {
      cur = new_token(TK_NOT, cur, p - 1, 1);
    }
  } else if (*p == ';') {
    cur = new_token(TK_SEMI, cur, p++, 1);
  } else if (*p == ':') {
    cur = new_token(TK_COLON, cur, p++, 1);
  } else if (*p == '(') {
    cur = new_token(TK_OP_PAREN, cur, p++, 1);
  } else if (*p == ')') {
    cur = new_token(TK_CL_PAREN, cur, p++, 1);
  } else if (*p == '{') {
    cur = new_token(TK_OP_BRACE, cur, p++, 1);
  } else if (*p == '}') {
    cur = new_token(TK_CL_BRACE, cur, p++, 1);
  } else if (*p == '[') {
    cur = new_token(TK_OP_BRACKET, cur, p++, 1);
  } else if (*p == ']') {
    cur = new_token(TK_CL_BRACKET, cur, p++, 1);
  } else if (*p == '^') {
    cur = new_token(TK_XOR, cur, p++, 1);
  } else if (*p == '&') {
    if (*(p + 1) == '&') {
      cur = new_token(TK_LAND, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_AND, cur, p++, 1);
  } else if (*p == '|') {
    if (*(p + 1) == '|') {
      cur = new_token(TK_LOR, cur, p, 2);
      p += 2;
    } else
      cur = new_token(TK_OR, cur, p++, 1);
  } else if (*p == '.') {
    if (*(p + 1) == '.' && *(p + 2) == '.') {
      cur = new_token(TK_ELLIPSIS, cur, p, 3);
      p += 3;
    } else
      cur = new_token(TK_DOT, cur, p++, 1);
  } else if (*p == '"') {
    p++;
    char *src = p;
    while (*src && *src != '"') {
      if (*src != '\\') {
        src++;
      } else {
        src++;
        switch (*src) {
          case '0':
          case 'a':
          case 'b':
          case 'f':
          case 'n':
          case 'r':
          case 't':
          case '\\':
          case '\'':
          case '\"':
            src++;
            break;
          default:
            error_at_char(fi, src - 1, "Unsupported escape sequence.");
        }
      }
    }
    if (!*src) error_at_char(fi, src - 1, "Missing closing quote.");
    cur = new_token(TK_STR, cur, p, (int)(src - p));
    p = src + 1;
  } else if (*p == '\'') {
    char *org_p = p;
    p++;
    char ch;
    if (*p != '\\') {
      ch = *p;
    } else {
      p++;
      switch (*p) {
        case '0':
          ch = '\0';
          break;
        case 'a':
          ch = '\a';
          break;
        case 'b':
          ch = '\b';
          break;
        case 'f':
          ch = '\f';
          break;
        case 'n':
          ch = '\n';
          break;
        case 'r':
          ch = '\r';
          break;
        case 't':
          ch = '\t';
          break;
        case '\\':
          ch = '\\';
          break;
        case '\'':
          ch = '\'';
          break;
        case '\"':
          ch = '\"';
          break;
        default:
          error_at_token(token, "Unsupported escape sequence.");
      }
    }

    p++;
    if (*p++ != '\'')
      error_at_char(fi, p - 1, "Unexpected token. Expected \"'\".");
    cur = new_token(TK_NUM, cur, org_p, p - org_p);
    cur->num_ty = new_type_char();
    cur->num_val = ch;
  }

  if (ctx->p == p) error_at_char(fi, p, "Illegal character.");

  skip_whitespace(&p);

  ctx->p = p;
  ctx->cur = cur;
  return cur;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %rdi, %r12
movq 0x10(%rdi), %r15
movq (%rdi), %rbp
movq 0x8(%rdi), %r13
xorl %r14d, %r14d
movzbl (%r15,%r14), %ebx
cmpl $0x9, %ebx
je 0x9c6c
cmpl $0x20, %ebx
jne 0x9c71
incq %r14
jmp 0x9c5d
cmpl $0x2f, %ebx
jne 0x9ce8
cmpb $0x2f, 0x1(%r15,%r14)
jne 0x9c9b
leaq (%r15,%r14), %rdi
addq $0x2, %rdi
movl $0xa, %esi
callq 0x10a0
movq %rax, %r15
incq %r15
jmp 0xa957
cmpb $0x2a, 0x1(%r15,%r14)
jne 0x9ce8
movq %r12, %rbx
leaq (%r15,%r14), %rdi
addq $0x2, %rdi
leaq 0x3cce(%rip), %rsi      # 0xd983
callq 0x11b0
movq %rax, %r12
testq %rax, %rax
jne 0x9cd9
addq %r14, %r15
leaq 0x3cba(%rip), %rdx      # 0xd986
movq %rbp, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0x5204
addq $0x2, %r12
movq %r12, %r15
movq %rbx, %r12
jmp 0xa957
movq %r13, 0x10(%rsp)
movq %r12, %r13
movq %rbp, %r12
leaq (%r15,%r14), %rbp
leaq 0x372e(%rip), %rsi      # 0xd42c
movl $0x8, %edx
movq %rbp, %rdi
callq 0x1050
testl %eax, %eax
je 0x9dae
movq %rbp, (%rsp)
movq %r12, 0x8(%rsp)
movsbq %bl, %rbp
callq 0x11c0
movq (%rax), %rax
movzwl (%rax,%rbp,2), %ecx
btl $0xb, %ecx
jb 0x9dea
cmpb $0x5f, %bl
movq %r13, %r12
je 0x9e4b
andl $0x400, %ecx            # imm = 0x400
jne 0x9e4b
movzbl %bpl, %eax
cmpl $0x5c, %eax
movq 0x10(%rsp), %rbx
jg 0x9fb8
leal -0x21(%rax), %ecx
cmpl $0x1d, %ecx
movq 0x8(%rsp), %rbp
ja 0xa0cb
leaq 0x3b64(%rip), %rax      # 0xd8dc
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movb 0x1(%r15,%r14), %bl
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpb $0x3d, %bl
jne 0xa5ce
movl $0x8, (%r13)
jmp 0xa70c
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movl $0x42, (%rax)
movq %rbp, 0x20(%rax)
movl $0x8, 0x28(%rax)
movq 0x10(%rsp), %rcx
movq %rax, 0x8(%rcx)
leaq 0x8(%r15,%r14), %r15
movq %r12, %rbp
movq %r13, %r12
movq %rax, %r13
jmp 0xa957
movq %r13, 0x20(%rsp)
addq $-0x30, %rbp
movb 0x1(%r15,%r14), %cl
movsbq %cl, %rdx
movl $0x1, %r12d
testb $0x8, 0x1(%rax,%rdx,2)
je 0x9e38
movl $0x2, %r12d
leaq (,%rbp,4), %rcx
addq %rbp, %rcx
leaq -0x30(%rdx,%rcx,2), %rbp
leaq (%r15,%r12), %rcx
movb (%r14,%rcx), %cl
movsbq %cl, %rdx
incq %r12
testb $0x8, 0x1(%rax,%rdx,2)
jne 0x9e0f
decl %r12d
movzbl %cl, %eax
orl $0x20, %eax
cmpl $0x75, %eax
jne 0x9ea8
incl %r12d
xorl %r13d, %r13d
jmp 0x9eab
xorl %ebp, %ebp
movq 0x10(%rsp), %rbx
leaq (%r15,%rbp), %rcx
movsbq 0x1(%r14,%rcx), %rcx
incq %rbp
cmpq $0x5f, %rcx
je 0x9e52
movzwl (%rax,%rcx,2), %ecx
andl $0x8, %ecx
jne 0x9e52
movq (%rsp), %r14
leaq (%r14,%rbp), %r15
leaq 0x3b2a(%rip), %rdx      # 0xd9a7
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0x9eef
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x32, (%rax)
jmp 0xa947
movb $0x1, %r13b
movslq %r12d, %rbx
leaq (%r15,%rbx), %rax
movzbl (%r14,%rax), %eax
orl $0x20, %eax
cmpl $0x6c, %eax
jne 0x9ee5
movslq %r12d, %rbx
leaq (%r15,%rbx), %rax
incq %rax
movzbl (%r14,%rax), %eax
orl $0x20, %eax
cmpl $0x6c, %eax
jne 0x9f25
movb $0x1, %al
movl %eax, 0x18(%rsp)
addl $0x2, %r12d
movslq %r12d, %rbx
jmp 0x9f31
movl $0x0, 0x18(%rsp)
jmp 0x9f31
leaq 0x3ab8(%rip), %rdx      # 0xd9ae
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0x9ffc
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x29, (%rax)
jmp 0xa947
movb $0x1, %al
movl %eax, 0x18(%rsp)
incq %rbx
movl %ebx, %r12d
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %rcx
movl $0x1, (%rax)
movq (%rsp), %rax
movq %rax, 0x20(%rcx)
movl %r12d, 0x28(%rcx)
movq 0x10(%rsp), %rax
movq %rcx, (%rsp)
movq %rcx, 0x8(%rax)
addq %rbx, %r15
testb %r13b, %r13b
je 0x9f7f
cmpb $0x0, 0x18(%rsp)
movq 0x20(%rsp), %r12
je 0x9f94
xorl %eax, %eax
callq 0xac68
jmp 0x9fa4
cmpb $0x0, 0x18(%rsp)
movq 0x20(%rsp), %r12
je 0x9f9d
xorl %eax, %eax
callq 0xac70
jmp 0x9fa4
xorl %eax, %eax
callq 0xac48
jmp 0x9fa4
xorl %eax, %eax
callq 0xac50
movq (%rsp), %r13
addq %r14, %r15
movq %rax, 0x18(%r13)
movq %rbp, 0x10(%r13)
jmp 0xa952
leal -0x7b(%rax), %ecx
cmpl $0x3, %ecx
movq 0x8(%rsp), %rbp
ja 0xa060
leaq 0x3984(%rip), %rax      # 0xd954
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x1f, (%rax)
jmp 0xa591
leaq 0x39ae(%rip), %rdx      # 0xd9b1
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa02e
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x2a, (%rax)
jmp 0xa947
leaq 0x3981(%rip), %rdx      # 0xd9b6
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa095
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x2b, (%rax)
jmp 0xa947
cmpl $0x5d, %eax
je 0xa184
cmpl $0x5e, %eax
jne 0xa1a7
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x18, (%rax)
jmp 0xa591
leaq 0x3920(%rip), %rdx      # 0xd9bc
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa52d
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x2c, (%rax)
jmp 0xa947
cmpl $0x5b, %eax
jne 0xa1a7
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x21, (%rax)
jmp 0xa591
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x20, (%rax)
jmp 0xa591
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x27, (%rax)
jmp 0xa591
movb 0x1(%r15,%r14), %al
movb %al, 0x20(%rsp)
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpb $0x7c, 0x20(%rsp)
jne 0xa583
movl $0x15, (%r13)
movq (%rsp), %rax
movq %rax, 0x20(%r13)
movl $0x2, 0x28(%r13)
movq %r13, 0x8(%rbx)
jmp 0xa725
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x22, (%rax)
jmp 0xa591
movq (%rsp), %r15
movq %rbx, %r13
jmp 0xa957
movb 0x1(%r15,%r14), %bl
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpb $0x3d, %bl
jne 0xa5aa
movl $0x7, (%r13)
jmp 0xa70c
movzbl 0x1(%r15,%r14), %ebx
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpl $0x2d, %ebx
je 0xa704
cmpl $0x3e, %ebx
je 0xa6fa
cmpl $0x3d, %ebx
jne 0xa731
movl $0xf, (%r13)
jmp 0xa70c
movq %r12, 0x20(%rsp)
movsbq 0x1(%r15,%r14), %rax
cmpq $0x5c, %rax
jne 0xa5bd
leaq (%r15,%r14), %rbp
addq $0x2, %rbp
movzbl (%rbp), %eax
cmpl $0x61, %eax
jg 0xa75d
cmpl $0x2f, %eax
jle 0xa7ef
cmpl $0x30, %eax
je 0xa85d
cmpl $0x5c, %eax
je 0xa86f
cmpl $0x61, %eax
jne 0xa8f4
movl $0x7, %eax
jmp 0xa87b
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x23, (%rax)
jmp 0xa591
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x1e, (%rax)
jmp 0xa591
movq %r12, 0x20(%rsp)
leaq (%r15,%r14), %r12
incq %r12
movabsq $0x400000000004021, %rbx # imm = 0x400000000004021
movl $0xa2023, %r13d         # imm = 0xA2023
movq %r12, (%rsp)
movzbl (%r12), %eax
cmpl $0x5c, %eax
je 0xa2fe
testl %eax, %eax
je 0xa5e1
cmpl $0x22, %eax
je 0xa5f7
incq %r12
jmp 0xa2de
movzbl 0x1(%r12), %eax
leal -0x61(%rax), %ecx
cmpl $0x13, %ecx
ja 0xa312
btl %ecx, %r13d
jb 0xa320
addl $-0x22, %eax
cmpl $0x3a, %eax
ja 0xa326
btq %rax, %rbx
jae 0xa326
addq $0x2, %r12
jmp 0xa2de
leaq 0x1(%r12), %rbp
movq 0x8(%rsp), %rdi
movq %r12, %rsi
leaq 0x2f9a(%rip), %rdx      # 0xd2d4
xorl %eax, %eax
callq 0x5204
movq %rbp, %r12
movq 0x8(%rsp), %rbp
jmp 0xa2de
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x1d, (%rax)
jmp 0xa591
movb 0x1(%r15,%r14), %bl
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpb $0x26, %bl
jne 0xa63d
movl $0x14, (%r13)
jmp 0xa70c
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x1c, (%rax)
jmp 0xa591
movzbl 0x1(%r15,%r14), %ebx
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpl $0x3c, %ebx
je 0xa6ac
cmpl $0x3d, %ebx
jne 0xa6ca
movl $0xc, (%r13)
jmp 0xa70c
cmpb $0x2e, 0x1(%r15,%r14)
jne 0xa563
cmpb $0x2e, 0x2(%r15,%r14)
jne 0xa563
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x28, (%rax)
movq (%rsp), %rax
movq %rax, 0x20(%r13)
movl $0x3, 0x28(%r13)
movq %r13, 0x8(%rbx)
addq %r14, %r15
addq $0x3, %r15
jmp 0xa957
movb 0x1(%r15,%r14), %bl
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpb $0x3d, %bl
jne 0xa650
movl $0x10, (%r13)
jmp 0xa70c
movzbl 0x1(%r15,%r14), %ebx
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpl $0x2b, %ebx
je 0xa6b6
cmpl $0x3d, %ebx
jne 0xa6da
movl $0xe, (%r13)
jmp 0xa70c
movzbl 0x1(%r15,%r14), %ebx
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpl $0x3e, %ebx
je 0xa6c0
cmpl $0x3d, %ebx
jne 0xa6ea
movl $0xa, (%r13)
jmp 0xa70c
movb 0x1(%r15,%r14), %bl
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
cmpb $0x3d, %bl
jne 0xa663
movl $0x11, (%r13)
jmp 0xa70c
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x24, (%rax)
jmp 0xa591
leaq 0x348c(%rip), %rdx      # 0xd9c0
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa676
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x2d, (%rax)
jmp 0xa947
addq %r14, %r15
incq %r15
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x25, (%rax)
jmp 0xa591
addq %r14, %r15
incq %r15
movl $0x17, (%r13)
movq (%rsp), %rax
movq %rax, 0x20(%r13)
movl $0x1, 0x28(%r13)
movq %r13, 0x8(%rbx)
jmp 0xa957
addq %r14, %r15
incq %r15
movl $0xd, (%r13)
jmp 0xa73f
movq %rax, 0x18(%rsp)
leaq (%r15,%r14), %rbp
incq %rbp
jmp 0xa880
addq %r14, %r15
incq %r15
movl $0x19, (%r13)
jmp 0xa73f
leaq -0x1(%r12), %rsi
leaq 0x3445(%rip), %rdx      # 0xda32
movq %rbp, %rdi
xorl %eax, %eax
callq 0x5204
notl %r15d
addl %r12d, %r15d
subl %r14d, %r15d
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x2, (%rax)
movq (%rsp), %rax
movq %rax, 0x20(%r13)
movl %r15d, 0x28(%r13)
movq 0x10(%rsp), %rax
movq %r13, 0x8(%rax)
incq %r12
movq %r12, %r15
movq 0x20(%rsp), %r12
jmp 0xa957
addq %r14, %r15
incq %r15
movl $0x16, (%r13)
jmp 0xa73f
addq %r14, %r15
incq %r15
movl $0x5, (%r13)
jmp 0xa73f
addq %r14, %r15
incq %r15
movl $0x6, (%r13)
jmp 0xa73f
leaq 0x334a(%rip), %rdx      # 0xd9c7
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa78b
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x2e, (%rax)
jmp 0xa947
movl $0x1b, (%r13)
jmp 0xa70c
movl $0x12, (%r13)
jmp 0xa70c
movl $0x1a, (%r13)
jmp 0xa70c
addq %r14, %r15
incq %r15
movl $0xb, (%r13)
jmp 0xa73f
addq %r14, %r15
incq %r15
movl $0x3, (%r13)
jmp 0xa73f
addq %r14, %r15
incq %r15
movl $0x9, (%r13)
jmp 0xa73f
movl $0x26, (%r13)
jmp 0xa70c
movl $0x13, (%r13)
movq (%rsp), %rax
movq %rax, 0x20(%r13)
movl $0x2, 0x28(%r13)
movq 0x10(%rsp), %rax
movq %r13, 0x8(%rax)
addq %r14, %r15
addq $0x2, %r15
jmp 0xa957
addq %r14, %r15
incq %r15
movl $0x4, (%r13)
movq (%rsp), %rax
movq %rax, 0x20(%r13)
movl $0x1, 0x28(%r13)
movq 0x10(%rsp), %rax
movq %r13, 0x8(%rax)
jmp 0xa957
cmpl $0x6d, %eax
jle 0xa804
cmpl $0x6e, %eax
je 0xa868
cmpl $0x72, %eax
je 0xa876
cmpl $0x74, %eax
jne 0xa8f4
movl $0x9, %eax
jmp 0xa87b
leaq 0x323a(%rip), %rdx      # 0xd9cc
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa7bd
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x2f, (%rax)
jmp 0xa947
leaq 0x3210(%rip), %rdx      # 0xd9d4
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa819
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x30, (%rax)
jmp 0xa947
cmpl $0x22, %eax
je 0xa84f
cmpl $0x27, %eax
jne 0xa8f4
movl $0x27, %eax
jmp 0xa87b
cmpl $0x62, %eax
je 0xa856
cmpl $0x66, %eax
jne 0xa8f4
movl $0xc, %eax
jmp 0xa87b
leaq 0x31ba(%rip), %rdx      # 0xd9da
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa91a
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x31, (%rax)
jmp 0xa947
movl $0x22, %eax
jmp 0xa87b
movl $0x8, %eax
jmp 0xa87b
movq $0x0, 0x18(%rsp)
jmp 0xa880
movl $0xa, %eax
jmp 0xa87b
movl $0x5c, %eax
jmp 0xa87b
movl $0xd, %eax
movq %rax, 0x18(%rsp)
movq %rbx, %r12
cmpb $0x27, 0x1(%rbp)
je 0xa8a0
leaq 0x1(%rbp), %rsi
leaq 0x31b5(%rip), %rdx      # 0xda49
movq 0x8(%rsp), %rdi
xorl %eax, %eax
callq 0x5204
leaq 0x2(%rbp), %rbx
subl %r15d, %ebp
subl %r14d, %ebp
addl $0x2, %ebp
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x1, (%rax)
movq (%rsp), %rax
movq %rax, 0x20(%r13)
movl %ebp, 0x28(%r13)
movq %r13, 0x8(%r12)
xorl %eax, %eax
callq 0xac78
movq %rax, 0x18(%r13)
movq 0x18(%rsp), %rax
movq %rax, 0x10(%r13)
movq %rbx, %r15
movq 0x20(%rsp), %r12
jmp 0xa952
leaq 0x892d(%rip), %rax      # 0x13228
movq (%rax), %rdi
leaq 0x29cf(%rip), %rsi      # 0xd2d4
movq $0x0, 0x18(%rsp)
xorl %eax, %eax
callq 0x52cd
jmp 0xa880
leaq 0x30c2(%rip), %rdx      # 0xd9e3
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa9a1
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x34, (%rax)
movq %r14, 0x20(%rax)
movl %ebp, 0x28(%rax)
movq %rax, 0x8(%rbx)
movq 0x8(%rsp), %rbp
cmpq %r15, 0x10(%r12)
jne 0xa977
leaq 0x3104(%rip), %rdx      # 0xda69
movq %rbp, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0x5204
jmp 0xa977
incq %r15
movzbl (%r15), %eax
cmpl $0x20, %eax
je 0xa974
cmpl $0x9, %eax
je 0xa974
movq %r15, 0x10(%r12)
movq %r13, 0x8(%r12)
movq %r13, %rax
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x303f(%rip), %rdx      # 0xd9e7
movq %r14, %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xa9d3
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x35, (%rax)
jmp 0xac32
leaq 0x3012(%rip), %rdx      # 0xd9ec
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xaa06
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x36, (%rax)
jmp 0xac32
leaq 0x2fe4(%rip), %rdx      # 0xd9f1
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xaa39
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x37, (%rax)
jmp 0xac32
leaq 0x2fb6(%rip), %rdx      # 0xd9f6
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xaa6c
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x38, (%rax)
jmp 0xac32
leaq 0x2f89(%rip), %rdx      # 0xd9fc
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xaa9f
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x39, (%rax)
jmp 0xac32
leaq 0x2f5d(%rip), %rdx      # 0xda03
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xaad2
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x3d, (%rax)
jmp 0xac32
leaq 0x2f28(%rip), %rdx      # 0xda01
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xab05
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x3e, (%rax)
jmp 0xac32
leaq 0x2efe(%rip), %rdx      # 0xda0a
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xab38
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x33, (%rax)
jmp 0xac32
leaq 0x2ed2(%rip), %rdx      # 0xda11
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xab6b
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x3a, (%rax)
jmp 0xac32
leaq 0x2ea6(%rip), %rdx      # 0xda18
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xab9e
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x3b, (%rax)
jmp 0xac32
leaq 0x2e78(%rip), %rdx      # 0xda1d
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xabce
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x3c, (%rax)
jmp 0xac32
leaq 0x2e4e(%rip), %rdx      # 0xda23
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
testb %al, %al
je 0xabfe
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
movl $0x40, (%rax)
jmp 0xac32
leaq 0x2e26(%rip), %rdx      # 0xda2b
movq (%rsp), %rdi
movl %ebp, %esi
callq 0x94e4
movl %eax, %r14d
movl $0x1, %edi
movl $0x30, %esi
callq 0x10d0
movq %rax, %r13
testb %r14b, %r14b
je 0xac32
movl $0x3f, (%r13)
movq (%rsp), %rax
movq %rax, 0x20(%r13)
movl %ebp, 0x28(%r13)
movq %r13, 0x8(%rbx)
jmp 0xa952
nop