user: 请从给定的汇编指令推导出C源代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  lea    -0x9000(%rsp),%r11
L115:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L115
  sub    $0xc60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x9c54(%rbp)
  lea    D14(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x9c60(%rbp),%rax
  mov    %rax,%rsi
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  movl   $0x0,-0x9c5c(%rbp)
  jmp    L66
L148:
  movl   $0x0,-0x9c58(%rbp)
  jmp    L91
L124:
  lea    -0x9c50(%rbp),%rcx
  mov    -0x9c58(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x9c5c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rsi,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    %rax,%rsi
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  addl   $0x1,-0x9c58(%rbp)
L91:
  mov    -0x9c60(%rbp),%eax
  cmp    %eax,-0x9c58(%rbp)
  jl     L124
  addl   $0x1,-0x9c5c(%rbp)
L66:
  mov    -0x9c60(%rbp),%eax
  cmp    %eax,-0x9c5c(%rbp)
  jl     L148
  movl   $0x0,-0x9c5c(%rbp)
  jmp    L50
L93:
  mov    -0x9c5c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x9c58(%rbp)
  jmp    L16
L120:
  mov    -0x9c58(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x9c5c(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    -0x9c50(%rbp,%rax,4),%ecx
  mov    -0x9c5c(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x9c58(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rsi,%rax
  mov    -0x9c50(%rbp,%rax,4),%eax
  cmp    %eax,%ecx
  je     L56
  movl   $0x0,-0x9c54(%rbp)
  jmp    L87
L56:
  addl   $0x1,-0x9c58(%rbp)
L16:
  mov    -0x9c60(%rbp),%eax
  cmp    %eax,-0x9c58(%rbp)
  jl     L120
L87:
  cmpl   $0x0,-0x9c54(%rbp)
  je     L131
  addl   $0x1,-0x9c5c(%rbp)
L50:
  mov    -0x9c60(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x9c5c(%rbp)
  jl     L93
  jmp    L46
L131:
  nop
L46:
  cmpl   $0x0,-0x9c54(%rbp)
  je     L59
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L151
L59:
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L151:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L105
  call   <__stack_chk_fail@plt>
L105:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D14
type: string
name: unpack_data
arguments: data_label: D58
type: string
name: unpack_data
arguments: data_label: D27
type: string
name: unpack_data
arguments: data_label: D28
type: string
name: unpack_data
arguments: data_label: D11
type: string

tool: D14: Vnesete dimenzija na kvadratna matrica: 


tool: D58: %d

tool: D27: Vnesete gi elementite: 


tool: D28: Matricata e SIMETRICHNA vo odnos na glavnata dijagonala


tool: D11: Matricata ne e SIMETRICHNA vo odnos na glavnata dijagonala


assistant: ```c
int main() {
  int a[100][100], n, i, j, simetrichna = 1;
  printf("Vnesete dimenzija na kvadratna matrica: \n");
  scanf("%d", &n);
  printf("Vnesete gi elementite: \n");
  for (i = 0; i < n; ++i)
    for (j = 0; j < n; ++j)
      scanf("%d", &a[i][j]);
  for (i = 0; i < n - 1; ++i) {
    for (j = i + 1; j < n; ++j)
      if (a[i][j] != a[j][i]) {
        simetrichna = 0;
        break;
      }
    if (!simetrichna)
      break;
  }
  if (simetrichna)
    printf("Matricata e SIMETRICHNA vo odnos na glavnata dijagonala\n");
  else
    printf("Matricata ne e SIMETRICHNA vo odnos na glavnata dijagonala\n");
  return 0;
}
```