user: What is the c source code of the assembly code below?

```asm
<anda>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x58,%rsp
  mov    (%rdi),%r9d
  mov    0x4(%rdi),%esi
  mov    %rdx,(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
L111:
  movslq %r9d,%rax
  lea    0x1(%rsi),%r12d
  movslq %esi,%r11
  mov    %rax,%rdx
  movslq %r12d,%rdi
  shl    $0x4,%rdx
  sub    %rax,%rdx
  lea    0x0(%rbp,%rdx,2),%r10
  mov    %esi,%edx
  movzbl (%r10,%rdi,1),%r13d
  lea    (%r10,%r11,1),%r14
  movzbl -0x1e(%r14),%edi
  cmp    $0x54,%r13b
  jne    L186
  jmp    L202
  nopl   0x0(%rax,%rax,1)
L128:
  mov    %r12d,0x4(%r15)
L193:
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <marca_ghost@plt>
  mov    %rbp,%rdi
  call   <print_maze@plt>
  movslq (%r15),%rax
  movslq 0x4(%r15),%r11
  mov    %rax,%rsi
  lea    0x1(%r11),%r12d
  mov    %rax,%r9
  mov    %r11,%rdx
  shl    $0x4,%rsi
  movslq %r12d,%rdi
  sub    %rax,%rsi
  lea    0x0(%rbp,%rsi,2),%rsi
  movzbl (%rsi,%rdi,1),%r13d
  movzbl -0x1e(%rsi,%r11,1),%edi
L186:
  mov    %rax,%rsi
  shl    $0x4,%rsi
  sub    %rax,%rsi
  lea    0x0(%rbp,%rsi,2),%r10
  cmp    $0x37,%r13b
  je     L21
L129:
  cmp    $0x30,%dil
  jne    L128
  lea    -0x1(%rdx),%esi
  movslq %esi,%rdi
  cmpb   $0x30,(%r10,%rdi,1)
  jne    L210
  movzbl 0x1e(%r10,%r11,1),%edi
  cmp    $0x30,%dil
  je     L186
  add    $0x1,%r9d
  mov    %r9d,(%r15)
  jmp    L193
  nopw   0x0(%rax,%rax,1)
L21:
  lea    -0x1(%rdx),%esi
  movslq %esi,%r14
  cmpb   $0x37,(%r10,%r14,1)
  jne    L129
  cmpb   $0x37,0x1e(%r10,%r11,1)
  je     L175
L122:
  cmp    $0x30,%dil
  jne    L128
L210:
  mov    %esi,0x4(%r15)
  jmp    L193
L175:
  cmp    $0x37,%dil
  jne    L122
  lea    0x2(%r9),%eax
  lea    0x30(%rsp),%rdi
  mov    %r11,0x18(%rsp)
  lea    0x2(%rdx),%r13d
  mov    %r10,0x10(%rsp)
  lea    -0x2(%rdx),%r12d
  mov    %edx,0x20(%rsp)
  lea    -0x2(%r9),%r14d
  mov    %r9d,0x8(%rsp)
  mov    %eax,0x24(%rsp)
  call   <zera_vetor@plt>
  mov    0x10(%rsp),%r10
  movslq %r13d,%rax
  mov    0x20(%rsp),%edx
  mov    0x8(%rsp),%r9d
  mov    0x18(%rsp),%r11
  cmpb   $0x30,(%r10,%rax,1)
  jne    L300
  movslq %r12d,%rax
  cmpb   $0x30,(%r10,%rax,1)
  jne    L267
L308:
  cmpb   $0x30,0x3c(%r10,%r11,1)
  jne    L243
L201:
  cmpb   $0x30,-0x3c(%r10,%r11,1)
  jne    L74
L112:
  mov    0x3c(%rsp),%eax
L269:
  mov    0x30(%rsp),%edi
  mov    0x34(%rsp),%r10d
  mov    0x38(%rsp),%r11d
  movslq (%r15),%rsi
  cmp    %r10d,%edi
  cmovl  %r9d,%ebx
  cmp    %r11d,%edi
  mov    %rsi,%rdx
  cmovl  %r9d,%ebx
  cmp    %eax,%edi
  cmovl  %r9d,%ebx
  cmp    %r10d,%edi
  cmovg  %r13d,%ebx
  cmp    %r11d,%r10d
  cmovl  %r13d,%ebx
  cmp    %eax,%r10d
  cmovl  %r13d,%ebx
  cmp    %r11d,%edi
  cmovg  %r9d,%ebx
  cmp    %r11d,%r10d
  cmovg  %r9d,%ebx
  cmp    %eax,%r11d
  cmovl  %r9d,%ebx
  cmp    %eax,%edi
  mov    %rsi,%r9
  cmovg  %r12d,%ebx
  cmp    %eax,%r10d
  cmovg  %r12d,%ebx
  cmp    %eax,%r11d
  cmovg  %r12d,%ebx
  shl    $0x4,%rdx
  sub    %rsi,%rdx
  movslq 0x4(%r15),%rsi
  add    %rdx,%rdx
  cmp    %ebx,%edi
  je     L127
  cmp    %ebx,%r10d
  je     L190
  cmp    %ebx,%r11d
  je     L164
  cmp    %eax,%ebx
  jne    L111
  add    %rbp,%rdx
  mov    %rbp,%rdi
  movb   $0x42,-0x3c(%rsi,%rdx,1)
  call   <print_maze@plt>
  mov    (%r15),%r9d
  mov    0x4(%r15),%esi
  jmp    L111
L202:
  sub    $0x1,%esi
  movslq %esi,%rsi
  cmpb   $0x54,(%r10,%rsi,1)
  jne    L186
  movzbl 0x1e(%r14),%r13d
  cmp    $0x54,%r13b
  je     L298
  mov    $0x54,%r13d
  jmp    L186
L74:
  mov    (%rsp),%rax
  mov    %r14d,%edi
  mov    $0x2,%esi
  mov    %edx,0x20(%rsp)
  mov    %r9d,0x8(%rsp)
  sub    (%rax),%edi
  call   <pow@plt>
  mov    0x20(%rsp),%edx
  mov    $0x2,%esi
  mov    %rax,%r14
  mov    (%rsp),%rax
  sub    0x4(%rax),%edx
  mov    %edx,%edi
  call   <pow@plt>
  lea    (%r14,%rax,1),%rdi
  call   <sqrt@plt>
  mov    0x8(%rsp),%r9d
  mov    %eax,0x3c(%rsp)
  jmp    L269
L243:
  mov    (%rsp),%rcx
  mov    0x24(%rsp),%edi
  mov    $0x2,%esi
  mov    %r11,0x28(%rsp)
  mov    %r10,0x18(%rsp)
  sub    (%rcx),%edi
  mov    %edx,0x20(%rsp)
  mov    %r9d,0x10(%rsp)
  call   <pow@plt>
  mov    (%rsp),%rcx
  mov    0x20(%rsp),%edi
  mov    $0x2,%esi
  mov    %rax,0x8(%rsp)
  sub    0x4(%rcx),%edi
  call   <pow@plt>
  mov    0x8(%rsp),%rdi
  add    %rax,%rdi
  call   <sqrt@plt>
  mov    0x28(%rsp),%r11
  mov    0x18(%rsp),%r10
  mov    0x10(%rsp),%r9d
  mov    0x20(%rsp),%edx
  mov    %eax,0x38(%rsp)
  cmpb   $0x30,-0x3c(%r10,%r11,1)
  je     L112
  jmp    L74
L267:
  mov    (%rsp),%rax
  mov    %r9d,%edi
  mov    $0x2,%esi
  mov    %edx,0x10(%rsp)
  mov    %r11,0x28(%rsp)
  sub    (%rax),%edi
  mov    %r10,0x18(%rsp)
  mov    %r9d,0x20(%rsp)
  call   <pow@plt>
  mov    (%rsp),%rcx
  mov    $0x2,%esi
  mov    %r12d,%edi
  mov    %rax,0x8(%rsp)
  sub    0x4(%rcx),%edi
  call   <pow@plt>
  mov    0x8(%rsp),%rdi
  add    %rax,%rdi
  call   <sqrt@plt>
  mov    0x28(%rsp),%r11
  mov    0x18(%rsp),%r10
  mov    0x10(%rsp),%edx
  mov    0x20(%rsp),%r9d
  mov    %eax,0x34(%rsp)
  cmpb   $0x30,0x3c(%r10,%r11,1)
  je     L201
  jmp    L243
L300:
  mov    (%rsp),%rax
  mov    %r9d,%edi
  mov    $0x2,%esi
  mov    %edx,0x10(%rsp)
  mov    %r11,0x28(%rsp)
  sub    (%rax),%edi
  mov    %r10,0x18(%rsp)
  mov    %r9d,0x20(%rsp)
  call   <pow@plt>
  mov    (%rsp),%rcx
  mov    $0x2,%esi
  mov    %r13d,%edi
  mov    %rax,0x8(%rsp)
  sub    0x4(%rcx),%edi
  call   <pow@plt>
  mov    0x8(%rsp),%rdi
  add    %rax,%rdi
  call   <sqrt@plt>
  mov    0x18(%rsp),%r10
  mov    0x28(%rsp),%r11
  mov    0x10(%rsp),%edx
  mov    0x20(%rsp),%r9d
  mov    %eax,0x30(%rsp)
  movslq %r12d,%rax
  cmpb   $0x30,(%r10,%rax,1)
  je     L308
  jmp    L267
L298:
  cmp    $0x54,%dil
  jne    L186
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L75
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L127:
  lea    0x2(%rsi),%eax
L356:
  cltq
  add    %rbp,%rdx
  mov    %rbp,%rdi
  movb   $0x42,(%rdx,%rax,1)
  call   <print_maze@plt>
  mov    (%r15),%r9d
  mov    0x4(%r15),%esi
  jmp    L111
L190:
  lea    -0x2(%rsi),%eax
  jmp    L356
L164:
  add    %rbp,%rdx
  mov    %rbp,%rdi
  movb   $0x42,0x3c(%rsi,%rdx,1)
  call   <print_maze@plt>
  mov    (%r15),%r9d
  mov    0x4(%r15),%esi
  jmp    L111
L75:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void anda(int ghost[2], char maze[23][30], int target[2]) {
  int dist[4], i = 0, j = 0, menor = 0, vet[8];
  while (maze[ghost[0]][ghost[1] + 1] != 'T' || maze[ghost[0]][ghost[1] - 1] != 'T' || maze[ghost[0] + 1][ghost[1]] != 'T' || maze[ghost[0] - 1][ghost[1]] != 'T') {
    while (maze[ghost[0]][ghost[1] + 1] != '7' || maze[ghost[0]][ghost[1] - 1] != '7' || maze[ghost[0] + 1][ghost[1]] != '7' || maze[ghost[0] - 1][ghost[1]] != '7') {
      if (maze[ghost[0] - 1][ghost[1]] != '0') {
        ghost[1]++;
        marca_ghost(maze, ghost);
        print_maze(maze);
      } else if (maze[ghost[0]][ghost[1] - 1] != '0') {
        ghost[1]--;
        marca_ghost(maze, ghost);
        print_maze(maze);
      } else if (maze[ghost[0] + 1][ghost[1]] != '0') {
        ghost[0]++;
        marca_ghost(maze, ghost);
        print_maze(maze);
      } else if (maze[ghost[0]][ghost[1] - 1] != '0') {
        ghost[1]--;
        marca_ghost(maze, ghost);
        print_maze(maze);
      }
    }
    if (maze[ghost[0]][ghost[1] + 1] == '7' || (maze[ghost[0]][ghost[1] - 1] == '7') || (maze[ghost[0] + 1][ghost[1]] == '7') || (maze[ghost[0] - 1][ghost[1]] == '7')) {
      vet[0] = ghost[0];
      vet[1] = ghost[1] + 2;
      vet[2] = ghost[0];
      vet[3] = ghost[1] - 2;
      vet[4] = ghost[0] + 2;
      vet[5] = ghost[1];
      vet[6] = ghost[0] - 2;
      vet[7] = ghost[1];
    }
    zera_vetor(dist);
    if (maze[vet[0]][vet[1]] != '0') {
      dist[0] = sqrt(pow((vet[0] - target[0]), 2) + pow((vet[1] - target[1]), 2));
    }
    if (maze[vet[2]][vet[3]] != '0') {
      dist[1] = sqrt(pow((vet[2] - target[0]), 2) + pow((vet[3] - target[1]), 2));
    }
    if (maze[vet[4]][vet[5]] != '0') {
      dist[2] = sqrt(pow((vet[4] - target[0]), 2) + pow((vet[5] - target[1]), 2));
    }
    if (maze[vet[6]][vet[7]] != '0') {
      dist[3] = sqrt(pow((vet[6] - target[0]), 2) + pow((vet[7] - target[1]), 2));
    }
    for (i = 0; i < 4; i++) {
      for (j = 0; j < 4; j++) {
        if (dist[i] < dist[j]) {
          menor = vet[i];
        } else if (dist[j] > dist[i]) {
          menor = vet[j];
        }
      }
    }
    if (menor == dist[0]) {
      maze[ghost[0]][ghost[1] + 2] = 'B';
      print_maze(maze);
    } else if (menor == dist[1]) {
      maze[ghost[0]][ghost[1] - 2] = 'B';
      print_maze(maze);
    } else if (menor == dist[2]) {
      maze[ghost[0] + 2][ghost[1]] = 'B';
      print_maze(maze);
    } else if (menor == dist[3]) {
      maze[ghost[0] - 2][ghost[1]] = 'B';
      print_maze(maze);
    }
  }
}
```