user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0xd50,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x2d4c(%rbp)
  movl   $0x0,-0x2d44(%rbp)
  movl   $0x0,-0x2d38(%rbp)
  jmp    L243
L138:
  mov    -0x2d4c(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x44,%al
  jne    L83
  mov    -0x2d4c(%rbp),%eax
  sub    $0x1,%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x2d,%al
  jne    L83
  mov    -0x2d4c(%rbp),%eax
  sub    $0x2,%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x4e,%al
  jne    L83
  mov    -0x2d4c(%rbp),%eax
  sub    $0x3,%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x2d,%al
  jne    L83
  mov    -0x2d4c(%rbp),%eax
  sub    $0x4,%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x45,%al
  jne    L83
  addl   $0x1,-0x2d4c(%rbp)
  jmp    L174
L83:
  addl   $0x1,-0x2d4c(%rbp)
  nop
L243:
  lea    -0x2720(%rbp),%rdx
  mov    -0x2d4c(%rbp),%eax
  cltq
  add    %rdx,%rax
  mov    %rax,%rsi
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  cmp    $0x1,%eax
  je     L138
L174:
  lea    -0x2720(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x2d34(%rbp)
  movl   $0x0,-0x2d3c(%rbp)
  movl   $0x0,-0x2d4c(%rbp)
  jmp    L211
L217:
  mov    -0x2d4c(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x40,%al
  jle    L66
  mov    -0x2d4c(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x5a,%al
  jle    L117
L66:
  mov    -0x2d4c(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x60,%al
  jle    L38
  mov    -0x2d4c(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x7a,%al
  jle    L117
L38:
  mov    -0x2d4c(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x2d,%al
  je     L117
  mov    -0x2d4c(%rbp),%eax
  sub    -0x2d44(%rbp),%eax
  mov    %eax,%edx
  mov    -0x2d3c(%rbp),%eax
  cltq
  mov    %edx,-0x2d30(%rbp,%rax,4)
  mov    -0x2d3c(%rbp),%eax
  cltq
  mov    -0x2d30(%rbp,%rax,4),%eax
  cmp    %eax,-0x2d38(%rbp)
  jge    L26
  mov    -0x2d3c(%rbp),%eax
  cltq
  mov    -0x2d30(%rbp,%rax,4),%eax
  mov    %eax,-0x2d38(%rbp)
  movl   $0x0,-0x2d40(%rbp)
  mov    -0x2d44(%rbp),%eax
  mov    %eax,-0x2d48(%rbp)
  jmp    L198
L131:
  mov    -0x2d48(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x40,%al
  jle    L18
  mov    -0x2d48(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x5a,%al
  jle    L206
L18:
  mov    -0x2d48(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x60,%al
  jle    L113
  mov    -0x2d48(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x7a,%al
  jle    L206
L113:
  mov    -0x2d48(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  cmp    $0x2d,%al
  jne    L61
L206:
  mov    -0x2d48(%rbp),%eax
  cltq
  movzbl -0x2720(%rbp,%rax,1),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <tolower@plt>
  mov    -0x2d40(%rbp),%edx
  movslq %edx,%rdx
  mov    %al,-0x2b70(%rbp,%rdx,1)
  addl   $0x1,-0x2d40(%rbp)
L61:
  addl   $0x1,-0x2d48(%rbp)
L198:
  mov    -0x2d48(%rbp),%eax
  cmp    -0x2d4c(%rbp),%eax
  jl     L131
  mov    -0x2d40(%rbp),%eax
  cltq
  movb   $0x0,-0x2b70(%rbp,%rax,1)
L26:
  mov    -0x2d4c(%rbp),%eax
  mov    %eax,-0x2d44(%rbp)
  addl   $0x1,-0x2d3c(%rbp)
  jmp    L150
L117:
  nop
L150:
  addl   $0x1,-0x2d4c(%rbp)
L211:
  mov    -0x2d4c(%rbp),%eax
  cmp    -0x2d34(%rbp),%eax
  jl     L217
  lea    -0x2b70(%rbp),%rax
  mov    %rax,%rsi
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L19
  call   <__stack_chk_fail@plt>
L19:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D15
datatype: string
name: extract_symbolic_data
arguments: tag: D5
datatype: string

tool: D15: %c

tool: D5: %s


assistant: ```c
int main() {
  int i = 0, j, c = 0, m[110], l, k, len, num = 0;
  char a[10000], b[1100];
  while (scanf("%c", &a[i]) == 1) {
    if (a[i] == 'D' && a[i - 1] == '-' && a[i - 2] == 'N' && a[i - 3] == '-' && a[i - 4] == 'E') {
      i++;
      break;
    } else {
      i++;
      continue;
    }
  }
  len = strlen(a);
  k = 0;
  for (i = 0; i < len; i++) {
    if (a[i] >= 'A' && a[i] <= 'Z' || a[i] >= 'a' && a[i] <= 'z' || a[i] == '-') {
      continue;
    } else {
      m[k] = i - c;
      if (m[k] > num) {
        num = m[k];
        l = 0;
        for (j = c; j < i; j++) {
          if (a[j] >= 'A' && a[j] <= 'Z' || a[j] >= 'a' && a[j] <= 'z' || a[j] == '-') {
            b[l] = tolower(a[j]);
            l++;
          }
        }
        b[l] = '\0';
      }
      c = i;
      k++;
    }
  }
  printf("%s\n", b);
  return 0;
}
```