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

```asm
<main>:
  endbr64
  push   %r13
  lea    D26(%rip),%rdi
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x7f8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x7e8(%rsp)
  xor    %eax,%eax
  lea    0xc(%rsp),%rsi
  call   <scanf@plt>
  xor    %eax,%eax
  call   <getchar@plt>
  mov    0xc(%rsp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,0xc(%rsp)
  test   %eax,%eax
  je     L59
  lea    0x10(%rsp),%r12
  lea    0x400(%rsp),%r13
  lea    D12(%rip),%rbx
  lea    0x11(%rsp),%rbp
  nopl   0x0(%rax,%rax,1)
L111:
  mov    %r12,%rdi
  call   <gets@plt>
  mov    %r12,%rdi
  call   <strlen@plt>
  pcmpeqd %xmm1,%xmm1
  test   %eax,%eax
  mov    %eax,%edi
  jle    L114
  lea    -0x1(%rdi),%r8d
  mov    %r12,%rax
  mov    %r8,%rdx
  add    %rbp,%r8
  nopl   0x0(%rax,%rax,1)
L10:
  movzbl (%rax),%esi
  mov    %esi,%ecx
  and    $0xffffffdf,%ecx
  sub    $0x41,%ecx
  cmp    $0x19,%cl
  ja     L118
  add    $0x3,%esi
  mov    %sil,(%rax)
L118:
  add    $0x1,%rax
  cmp    %r8,%rax
  jne    L10
  movslq %edx,%rax
  mov    %r13,%rdx
  nopl   (%rax)
L47:
  movzbl (%r12,%rax,1),%ecx
  sub    $0x1,%rax
  add    $0x1,%rdx
  mov    %cl,-0x1(%rdx)
  test   %eax,%eax
  jns    L47
  movslq %edi,%rax
L184:
  movb   $0x0,0x400(%rsp,%rax,1)
  mov    %edi,%eax
  shr    $0x1f,%eax
  add    %edi,%eax
  sar    %eax
  cmp    %eax,%edi
  jle    L165
  mov    %edi,%esi
  sub    %eax,%esi
  lea    -0x1(%rsi),%edx
  cmp    $0xe,%edx
  jbe    L212
  mov    %esi,%edx
  movslq %eax,%rcx
  shr    $0x4,%edx
  add    %r13,%rcx
  lea    -0x1(%rdx),%r8d
  lea    0x10(%rcx),%rdx
  shl    $0x4,%r8
  add    %rdx,%r8
  jmp    L133
  nopl   0x0(%rax)
L61:
  add    $0x10,%rdx
L133:
  movdqu (%rcx),%xmm0
  paddb  %xmm1,%xmm0
  movups %xmm0,(%rcx)
  mov    %rdx,%rcx
  cmp    %r8,%rdx
  jne    L61
  mov    %esi,%ecx
  and    $0xfffffff0,%ecx
  lea    (%rcx,%rax,1),%edx
  cmp    %esi,%ecx
  je     L165
L216:
  sub    %ecx,%esi
  lea    -0x1(%rsi),%r8d
  cmp    $0x6,%r8d
  jbe    L22
  movq   D28(%rip),%xmm2
  cltq
  add    %rcx,%rax
  add    %r13,%rax
  movq   (%rax),%xmm0
  paddb  %xmm2,%xmm0
  movq   %xmm0,(%rax)
  mov    %esi,%eax
  and    $0xfffffff8,%eax
  add    %eax,%edx
  cmp    %eax,%esi
  je     L165
L22:
  movslq %edx,%rax
  subb   $0x1,0x400(%rsp,%rax,1)
  lea    0x1(%rdx),%eax
  cmp    %eax,%edi
  jle    L165
  cltq
  subb   $0x1,0x400(%rsp,%rax,1)
  lea    0x2(%rdx),%eax
  cmp    %eax,%edi
  jle    L165
  cltq
  subb   $0x1,0x400(%rsp,%rax,1)
  lea    0x3(%rdx),%eax
  cmp    %eax,%edi
  jle    L165
  cltq
  subb   $0x1,0x400(%rsp,%rax,1)
  lea    0x4(%rdx),%eax
  cmp    %eax,%edi
  jle    L165
  cltq
  subb   $0x1,0x400(%rsp,%rax,1)
  lea    0x5(%rdx),%eax
  cmp    %eax,%edi
  jle    L165
  cltq
  add    $0x6,%edx
  subb   $0x1,0x400(%rsp,%rax,1)
  cmp    %edx,%edi
  jle    L165
  movslq %edx,%rdx
  subb   $0x1,0x400(%rsp,%rdx,1)
L165:
  mov    %r13,%rsi
  mov    %rbx,%rdi
  call   <printf@plt>
  mov    0xc(%rsp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,0xc(%rsp)
  test   %eax,%eax
  jne    L111
L59:
  mov    0x7e8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L197
  add    $0x7f8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   (%rax)
L114:
  xor    %eax,%eax
  jmp    L184
L212:
  mov    %eax,%edx
  xor    %ecx,%ecx
  jmp    L216
L197:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D26
type_infered: string
name: extract_symbolic_data
arguments: tag: D12
type_infered: string
name: extract_symbolic_data
arguments: tag: D28
type_infered: byte[8]

tool: D26: %d

tool: D12: %s


tool: {"D28": [0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff]}

assistant: ```c
int main() {
  char str[1000], str1[1000];
  int i, k, j, n, m, l, T;
  scanf("%d", &T);
  getchar();
  while (T--) {
    gets(str);
    k = strlen(str);
    for (i = 0; i < k; i++) {
      if ((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))
        str[i] = str[i] + 3;
    }
    n = 0;
    for (j = k - 1; j >= 0; j--) {
      str1[n] = str[j];
      n++;
    }
    str1[n] = '\0';
    l = k / 2;
    for (i = l; i < k; i++) {
      str1[i] = str1[i] - 1;
    }
    printf("%s\n", str1);
  }
}
```