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

```asm
<get_hex_digit>:
  endbr64
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  movzbl (%rdi),%eax
  mov    %al,0x6(%rsp)
  movb   $0x0,0x7(%rsp)
  lea    0x6(%rsp),%rdi
  lea    D24(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xa,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D5(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xa,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D65(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xb,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D73(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xb,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D22(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xc,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D108(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xc,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D74(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xd,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D88(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xd,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D3(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xe,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D106(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xe,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D56(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xf,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  lea    D41(%rip),%rsi
  call   <strcmp@plt>
  mov    %eax,%edx
  mov    $0xf,%eax
  test   %edx,%edx
  je     L60
  lea    0x6(%rsp),%rdi
  call   <atoi@plt>
L60:
  mov    0x8(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L57
  add    $0x18,%rsp
  ret
L57:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D24
type_guessed: string
name: disassemble_data
arguments: data_tag: D5
type_guessed: string
name: disassemble_data
arguments: data_tag: D65
type_guessed: string
name: disassemble_data
arguments: data_tag: D73
type_guessed: string
name: disassemble_data
arguments: data_tag: D22
type_guessed: string
name: disassemble_data
arguments: data_tag: D108
type_guessed: string
name: disassemble_data
arguments: data_tag: D74
type_guessed: string
name: disassemble_data
arguments: data_tag: D88
type_guessed: string
name: disassemble_data
arguments: data_tag: D3
type_guessed: string
name: disassemble_data
arguments: data_tag: D106
type_guessed: string
name: disassemble_data
arguments: data_tag: D56
type_guessed: string
name: disassemble_data
arguments: data_tag: D41
type_guessed: string

tool: D24: a

tool: D5: A

tool: D65: b

tool: D73: B

tool: D22: c

tool: D108: C

tool: D74: d

tool: D88: D

tool: D3: e

tool: D106: E

tool: D56: f

tool: D41: F

assistant: ```c
int get_hex_digit(char *d) {
  char c[2];
  c[0] = *d;
  c[1] = 0;
  if (!strcmp(c, "a") || !strcmp(c, "A"))
    return 10;
  if (!strcmp(c, "b") || !strcmp(c, "B"))
    return 11;
  if (!strcmp(c, "c") || !strcmp(c, "C"))
    return 12;
  if (!strcmp(c, "d") || !strcmp(c, "D"))
    return 13;
  if (!strcmp(c, "e") || !strcmp(c, "E"))
    return 14;
  if (!strcmp(c, "f") || !strcmp(c, "F"))
    return 15;
  return (atoi(c));
}
```