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

```asm
<check_simple_cast>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    %rdx,-0x18(%rbp)
  lea    D87(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    D87(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L36
  lea    D78(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    D78(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L122
L36:
  mov    -0x10(%rbp),%rax
  movl   $0x8,(%rax)
  jmp    L123
L122:
  lea    D54(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    D54(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L88
  lea    D79(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    D79(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L91
L88:
  mov    -0x10(%rbp),%rax
  movl   $0x10,(%rax)
  jmp    L123
L91:
  lea    D94(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    D94(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L92
  lea    D19(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    D19(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L78
L92:
  mov    -0x10(%rbp),%rax
  movl   $0x20,(%rax)
  jmp    L123
L78:
  lea    D70(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    D70(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L71
  lea    D93(%rip),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    D93(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L27
L71:
  mov    -0x10(%rbp),%rax
  movl   $0x40,(%rax)
  jmp    L123
L27:
  mov    $0xffffffff,%eax
  jmp    L67
L123:
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x73,%al
  sete   %al
  movzbl %al,%edx
  mov    -0x18(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0x0,%eax
L67:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D87
type_guessed: string
name: extract_symbolic_data
arguments: label: D78
type_guessed: string
name: extract_symbolic_data
arguments: label: D54
type_guessed: string
name: extract_symbolic_data
arguments: label: D79
type_guessed: string
name: extract_symbolic_data
arguments: label: D94
type_guessed: string
name: extract_symbolic_data
arguments: label: D19
type_guessed: string
name: extract_symbolic_data
arguments: label: D70
type_guessed: string
name: extract_symbolic_data
arguments: label: D93
type_guessed: string

tool: D87: (s8)

tool: D78: (u8)

tool: D54: (s16)

tool: D79: (u16)

tool: D94: (s32)

tool: D19: (u32)

tool: D70: (s64)

tool: D93: (u64)

assistant: ```c
int check_simple_cast(const char *cast, int *bits, int *is_signed) {
  if (!strncmp(cast, "(s8)", strlen("(s8)")) || !strncmp(cast, "(u8)", strlen("(u8)")))
    *bits = 8;
  else if (!strncmp(cast, "(s16)", strlen("(s16)")) || !strncmp(cast, "(u16)", strlen("(u16)")))
    *bits = 16;
  else if (!strncmp(cast, "(s32)", strlen("(s32)")) || !strncmp(cast, "(u32)", strlen("(u32)")))
    *bits = 32;
  else if (!strncmp(cast, "(s64)", strlen("(s64)")) || !strncmp(cast, "(u64)", strlen("(u64)")))
    *bits = 64;
  else
    return -1;
  *is_signed = cast[1] == 's' ? 1 : 0;
  return 0;
}
```