user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movabs $0x7325203a52505845,%rax
  movabs $0x544c555345526325,%rdx
  mov    %rax,-0x8b0(%rbp)
  mov    %rdx,-0x8a8(%rbp)
  movl   $0x6425203a,-0x8a0(%rbp)
  movw   $0x6325,-0x89c(%rbp)
  movb   $0x0,-0x89a(%rbp)
  mov    %rax,-0x890(%rbp)
  mov    %rdx,-0x888(%rbp)
  movabs $0x25726f727265203a,%rax
  mov    %rax,-0x880(%rbp)
  movw   $0x63,-0x878(%rbp)
  movabs $0x3828282b342f3631,%rax
  movabs $0x332b34282a29352d,%rdx
  mov    %rax,-0x870(%rbp)
  mov    %rdx,-0x868(%rbp)
  movabs $0x2f30312d29312b29,%rax
  mov    %rax,-0x860(%rbp)
  movl   $0x23392a32,-0x858(%rbp)
  movb   $0x0,-0x854(%rbp)
  movl   $0x0,-0xa50(%rbp)
  movl   $0x0,-0xa4c(%rbp)
  lea    -0x870(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0xa48(%rbp)
  movl   $0x1,-0xa54(%rbp)
  movl   $0x0,-0xa58(%rbp)
  mov    -0xa58(%rbp),%eax
  cltq
  movzbl -0x870(%rbp,%rax,1),%eax
  mov    %al,-0xa5a(%rbp)
  addl   $0x1,-0xa58(%rbp)
  jmp    L407
L283:
  cmpb   $0x2b,-0xa5a(%rbp)
  je     L370
  cmpb   $0x2d,-0xa5a(%rbp)
  jne    L406
  jmp    L370
L212:
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0x3f0(%rbp,%rax,1),%edx
  mov    -0xa54(%rbp),%eax
  cltq
  mov    %dl,-0x7e0(%rbp,%rax,1)
  subl   $0x1,-0xa4c(%rbp)
  addl   $0x1,-0xa54(%rbp)
L370:
  cmpl   $0x0,-0xa4c(%rbp)
  je     L297
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0x3f0(%rbp,%rax,1),%eax
  cmp    $0x28,%al
  jne    L212
L297:
  addl   $0x1,-0xa4c(%rbp)
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0xa5a(%rbp),%edx
  mov    %dl,-0x3f0(%rbp,%rax,1)
  jmp    L80
L406:
  cmpb   $0x2a,-0xa5a(%rbp)
  je     L389
  cmpb   $0x2f,-0xa5a(%rbp)
  jne    L350
  jmp    L389
L157:
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0x3f0(%rbp,%rax,1),%edx
  mov    -0xa54(%rbp),%eax
  cltq
  mov    %dl,-0x7e0(%rbp,%rax,1)
  subl   $0x1,-0xa4c(%rbp)
  addl   $0x1,-0xa54(%rbp)
L389:
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0x3f0(%rbp,%rax,1),%eax
  cmp    $0x2a,%al
  je     L157
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0x3f0(%rbp,%rax,1),%eax
  cmp    $0x2f,%al
  je     L157
  addl   $0x1,-0xa4c(%rbp)
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0xa5a(%rbp),%edx
  mov    %dl,-0x3f0(%rbp,%rax,1)
  jmp    L80
L350:
  cmpb   $0x28,-0xa5a(%rbp)
  jne    L226
  addl   $0x1,-0xa4c(%rbp)
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0xa5a(%rbp),%edx
  mov    %dl,-0x3f0(%rbp,%rax,1)
  jmp    L80
L226:
  cmpb   $0x29,-0xa5a(%rbp)
  jne    L93
  jmp    L81
L332:
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0x3f0(%rbp,%rax,1),%edx
  mov    -0xa54(%rbp),%eax
  cltq
  mov    %dl,-0x7e0(%rbp,%rax,1)
  subl   $0x1,-0xa4c(%rbp)
  addl   $0x1,-0xa54(%rbp)
L81:
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0x3f0(%rbp,%rax,1),%eax
  cmp    $0x28,%al
  jne    L332
  subl   $0x1,-0xa4c(%rbp)
  jmp    L80
L93:
  cmpb   $0x20,-0xa5a(%rbp)
  jne    L308
  movl   $0x1,-0xa44(%rbp)
  jmp    L80
L448:
  mov    -0xa54(%rbp),%eax
  cltq
  movzbl -0xa5a(%rbp),%edx
  mov    %dl,-0x7e0(%rbp,%rax,1)
  addl   $0x1,-0xa54(%rbp)
  mov    -0xa58(%rbp),%eax
  cltq
  movzbl -0x870(%rbp,%rax,1),%eax
  mov    %al,-0xa5a(%rbp)
  addl   $0x1,-0xa58(%rbp)
L308:
  movsbl -0xa5a(%rbp),%eax
  mov    %eax,%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L448
  cmpb   $0x2e,-0xa5a(%rbp)
  je     L448
  subl   $0x1,-0xa58(%rbp)
  mov    -0xa54(%rbp),%eax
  cltq
  movb   $0x20,-0x7e0(%rbp,%rax,1)
  addl   $0x1,-0xa54(%rbp)
L80:
  mov    -0xa58(%rbp),%eax
  cltq
  movzbl -0x870(%rbp,%rax,1),%eax
  mov    %al,-0xa5a(%rbp)
  addl   $0x1,-0xa58(%rbp)
L407:
  cmpb   $0x23,-0xa5a(%rbp)
  jne    L283
  jmp    L122
L384:
  mov    -0xa4c(%rbp),%eax
  cltq
  movzbl -0x3f0(%rbp,%rax,1),%edx
  mov    -0xa54(%rbp),%eax
  cltq
  mov    %dl,-0x7e0(%rbp,%rax,1)
  addl   $0x1,-0xa54(%rbp)
  subl   $0x1,-0xa4c(%rbp)
L122:
  cmpl   $0x0,-0xa4c(%rbp)
  jne    L384
  mov    -0xa54(%rbp),%eax
  cltq
  movb   $0x20,-0x7e0(%rbp,%rax,1)
  movl   $0x1,-0xa54(%rbp)
  movl   $0x0,-0xa4c(%rbp)
  mov    -0xa54(%rbp),%eax
  cltq
  movzbl -0x7e0(%rbp,%rax,1),%eax
  mov    %al,-0xa5a(%rbp)
  addl   $0x1,-0xa54(%rbp)
  jmp    L265
L396:
  cmpb   $0x2b,-0xa5a(%rbp)
  jne    L307
  mov    -0xa4c(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0xa40(%rbp,%rax,4),%ecx
  mov    -0xa4c(%rbp),%eax
  cltq
  mov    -0xa40(%rbp,%rax,4),%edx
  mov    -0xa4c(%rbp),%eax
  sub    $0x1,%eax
  add    %ecx,%edx
  cltq
  mov    %edx,-0xa40(%rbp,%rax,4)
  subl   $0x1,-0xa4c(%rbp)
  jmp    L379
L307:
  cmpb   $0x2d,-0xa5a(%rbp)
  jne    L134
  mov    -0xa4c(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0xa40(%rbp,%rax,4),%edx
  mov    -0xa4c(%rbp),%eax
  cltq
  mov    -0xa40(%rbp,%rax,4),%ecx
  mov    -0xa4c(%rbp),%eax
  sub    $0x1,%eax
  sub    %ecx,%edx
  cltq
  mov    %edx,-0xa40(%rbp,%rax,4)
  subl   $0x1,-0xa4c(%rbp)
  jmp    L379
L134:
  cmpb   $0x2a,-0xa5a(%rbp)
  jne    L53
  mov    -0xa4c(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0xa40(%rbp,%rax,4),%edx
  mov    -0xa4c(%rbp),%eax
  cltq
  mov    -0xa40(%rbp,%rax,4),%eax
  mov    -0xa4c(%rbp),%ecx
  sub    $0x1,%ecx
  imul   %eax,%edx
  movslq %ecx,%rax
  mov    %edx,-0xa40(%rbp,%rax,4)
  subl   $0x1,-0xa4c(%rbp)
  jmp    L379
L53:
  cmpb   $0x2f,-0xa5a(%rbp)
  jne    L238
  mov    -0xa4c(%rbp),%eax
  cltq
  mov    -0xa40(%rbp,%rax,4),%eax
  test   %eax,%eax
  je     L344
  mov    -0xa4c(%rbp),%eax
  sub    $0x1,%eax
  cltq
  mov    -0xa40(%rbp,%rax,4),%eax
  mov    -0xa4c(%rbp),%edx
  movslq %edx,%rdx
  mov    -0xa40(%rbp,%rdx,4),%esi
  mov    -0xa4c(%rbp),%ecx
  sub    $0x1,%ecx
  cltd
  idiv   %esi
  mov    %eax,%edx
  movslq %ecx,%rax
  mov    %edx,-0xa40(%rbp,%rax,4)
  jmp    L38
L344:
  movl   $0x1,-0xa50(%rbp)
L38:
  subl   $0x1,-0xa4c(%rbp)
  jmp    L379
L238:
  movl   $0x0,-0xa58(%rbp)
  jmp    L431
L198:
  mov    -0xa58(%rbp),%eax
  cltq
  movzbl -0xa5a(%rbp),%edx
  mov    %dl,-0x850(%rbp,%rax,1)
  addl   $0x1,-0xa58(%rbp)
  mov    -0xa54(%rbp),%eax
  cltq
  movzbl -0x7e0(%rbp,%rax,1),%eax
  mov    %al,-0xa5a(%rbp)
  addl   $0x1,-0xa54(%rbp)
L431:
  movsbl -0xa5a(%rbp),%eax
  mov    %eax,%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L198
  cmpb   $0x2e,-0xa5a(%rbp)
  je     L198
  movb   $0x0,-0xa59(%rbp)
  mov    -0xa58(%rbp),%eax
  cltq
  movzbl -0xa59(%rbp),%edx
  mov    %dl,-0x850(%rbp,%rax,1)
  addl   $0x1,-0xa4c(%rbp)
  lea    -0x850(%rbp),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0xa4c(%rbp),%edx
  movslq %edx,%rdx
  mov    %eax,-0xa40(%rbp,%rdx,4)
L379:
  mov    -0xa54(%rbp),%eax
  cltq
  movzbl -0x7e0(%rbp,%rax,1),%eax
  mov    %al,-0xa5a(%rbp)
  addl   $0x1,-0xa54(%rbp)
L265:
  cmpb   $0x20,-0xa5a(%rbp)
  je     L342
  cmpl   $0x0,-0xa50(%rbp)
  je     L396
L342:
  cmpl   $0x0,-0xa50(%rbp)
  jne    L51
  mov    -0xa4c(%rbp),%eax
  cltq
  mov    -0xa40(%rbp,%rax,4),%edx
  lea    -0x870(%rbp),%rsi
  lea    -0x8b0(%rbp),%rax
  mov    $0xa,%r8d
  mov    %edx,%ecx
  mov    $0xa,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L82
L51:
  lea    -0x870(%rbp),%rsi
  lea    -0x890(%rbp),%rax
  mov    $0xa,%ecx
  mov    $0xa,%edx
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L82:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L258
  call   <__stack_chk_fail@plt>
L258:
  leave
  ret
```

assistant: ```c
int main() {
  char TIPS_T[] = "EXPR: %s%cRESULT: %d%c";
  char TIPS_F[] = "EXPR: %s%cRESULT: error%c";
  char expr[] = "16/4+((8-5)*(4+3)+1)-10/2*9#";
  char post[1000];
  char ss[1000];
  char ch;
  int sum;
  int i;
  int t;
  int z;
  int error = 0;
  int top = 0;
  sum = strlen(expr);
  t = 1;
  i = 0;
  ch = expr[i];
  i += 1;
  while (ch != '#') {
    if (ch == '+' || ch == '-') {
      while (top != 0 && ss[top] != '(') {
        post[t] = ss[top];
        top -= 1;
        t += 1;
      }
      top += 1;
      ss[top] = ch;
    } else if (ch == '*' || ch == '/') {
      while (ss[top] == '*' || ss[top] == '/') {
        post[t] = ss[top];
        top -= 1;
        t += 1;
      }
      top += 1;
      ss[top] = ch;
    } else if (ch == '(') {
      top += 1;
      ss[top] = ch;
    } else if (ch == ')') {
      while (ss[top] != '(') {
        post[t] = ss[top];
        top -= 1;
        t += 1;
      }
      top -= 1;
    } else if (ch == ' ') {
      z = 1;
    } else {
      while (isdigit(ch) || ch == '.') {
        post[t] = ch;
        t += 1;
        ch = expr[i];
        i += 1;
      }
      i -= 1;
      post[t] = ' ';
      t += 1;
    }
    ch = expr[i];
    i += 1;
  }
  while (top != 0) {
    post[t] = ss[top];
    t += 1;
    top -= 1;
  }
  post[t] = ' ';
  int newstack[100];
  char newstr[100];
  t = 1;
  top = 0;
  ch = post[t];
  t = t + 1;
  char temp;
  while (ch != ' ' && error == 0) {
    if (ch == '+') {
      newstack[top - 1] = newstack[top - 1] + newstack[top];
      top -= 1;
    } else if (ch == '-') {
      newstack[top - 1] = newstack[top - 1] - newstack[top];
      top -= 1;
    } else if (ch == '*') {
      newstack[top - 1] = newstack[top - 1] * newstack[top];
      top -= 1;
    } else if (ch == '/') {
      if (newstack[top] != 0)
        newstack[top - 1] = newstack[top - 1] / newstack[top];
      else
        error = 1;
      top -= 1;
    } else {
      i = 0;
      while (isdigit(ch) || ch == '.') {
        newstr[i] = ch;
        i += 1;
        ch = post[t];
        t += 1;
      }
      temp = 0;
      newstr[i] = temp;
      top += 1;
      newstack[top] = atoi(newstr);
    }
    ch = post[t];
    t += 1;
  }
  if (error == 0)
    printf(TIPS_T, expr, 10, newstack[top], 10);
  else
    printf(TIPS_F, expr, 10, 10);
  return 0;
}
```