user: What would the C source look like for the assembly code provided here:

```asm
<retorna_funcao>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x20,%rsp
  mov    %rdi,-0x1018(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x1010(%rbp),%rdx
  mov    -0x1018(%rbp),%rax
  lea    D22(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  lea    -0x1010(%rbp),%rax
  lea    D35(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L36
  mov    $0x1,%eax
  jmp    L26
L36:
  lea    -0x1010(%rbp),%rax
  lea    D0(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L135
  mov    $0x2,%eax
  jmp    L26
L135:
  lea    -0x1010(%rbp),%rax
  lea    D63(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L178
  mov    $0x3,%eax
  jmp    L26
L178:
  lea    -0x1010(%rbp),%rax
  lea    D83(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L162
  mov    $0x4,%eax
  jmp    L26
L162:
  lea    -0x1010(%rbp),%rax
  lea    D52(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L44
  mov    $0x5,%eax
  jmp    L26
L44:
  lea    -0x1010(%rbp),%rax
  lea    D82(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L70
  mov    $0x6,%eax
  jmp    L26
L70:
  lea    -0x1010(%rbp),%rax
  lea    D80(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L112
  mov    $0x7,%eax
  jmp    L26
L112:
  lea    -0x1010(%rbp),%rax
  lea    D33(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L122
  mov    $0x8,%eax
  jmp    L26
L122:
  lea    -0x1010(%rbp),%rax
  lea    D4(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  jne    L32
  mov    $0x9,%eax
  jmp    L26
L32:
  mov    $0xffffffff,%eax
L26:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L83
  call   <__stack_chk_fail@plt>
L83:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D22
type_infered: string
name: parse_data
arguments: data_label: D35
type_infered: string
name: parse_data
arguments: data_label: D0
type_infered: string
name: parse_data
arguments: data_label: D63
type_infered: string
name: parse_data
arguments: data_label: D83
type_infered: string
name: parse_data
arguments: data_label: D52
type_infered: string
name: parse_data
arguments: data_label: D82
type_infered: string
name: parse_data
arguments: data_label: D80
type_infered: string
name: parse_data
arguments: data_label: D33
type_infered: string
name: parse_data
arguments: data_label: D4
type_infered: string

tool: D22: %s

tool: D35: USER

tool: D0: PASS

tool: D63: QUIT

tool: D83: SYST

tool: D52: PASV

tool: D82: LIST

tool: D80: RETR

tool: D33: TYPE

tool: D4: STOR

assistant: ```c
int retorna_funcao(char *s) {
  char comando[4096];
  sscanf(s, "%s", comando);
  if (strcmp(comando, "USER") == 0)
    return 1;
  if (strcmp(comando, "PASS") == 0)
    return 2;
  if (strcmp(comando, "QUIT") == 0)
    return 3;
  if (strcmp(comando, "SYST") == 0)
    return 4;
  if (strcmp(comando, "PASV") == 0)
    return 5;
  if (strcmp(comando, "LIST") == 0)
    return 6;
  if (strcmp(comando, "RETR") == 0)
    return 7;
  if (strcmp(comando, "TYPE") == 0)
    return 8;
  if (strcmp(comando, "STOR") == 0)
    return 9;
  return -1;
}
```