user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<hey_bob>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x48,%rsp
  mov    %rdi,-0x48(%rbp)
  movl   $0x1,-0x34(%rbp)
  movq   $0x0,-0x28(%rbp)
  jmp    L83
L91:
  mov    -0x48(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L140
  movl   $0x0,-0x34(%rbp)
  jmp    L90
L140:
  addq   $0x1,-0x28(%rbp)
L83:
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  cmp    %rax,-0x28(%rbp)
  jb     L91
L90:
  cmpl   $0x0,-0x34(%rbp)
  jne    L125
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  test   %eax,%eax
  jne    L195
L125:
  lea    D32(%rip),%rax
  jmp    L141
L195:
  movl   $0x1,-0x30(%rbp)
  movq   $0x0,-0x20(%rbp)
  jmp    L159
L185:
  mov    -0x48(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%ebx
  mov    -0x48(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <toupper@plt>
  cmp    %al,%bl
  je     L80
  movl   $0x0,-0x30(%rbp)
L80:
  addq   $0x1,-0x20(%rbp)
L159:
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  cmp    %rax,-0x20(%rbp)
  jb     L185
  cmpl   $0x0,-0x30(%rbp)
  je     L72
  movl   $0x0,-0x30(%rbp)
  movq   $0x0,-0x18(%rbp)
  jmp    L126
L163:
  mov    -0x48(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isalpha@plt>
  test   %rax,%rax
  je     L112
  movl   $0x1,-0x30(%rbp)
  jmp    L72
L112:
  addq   $0x1,-0x18(%rbp)
L126:
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cltq
  cmp    %rax,-0x18(%rbp)
  jb     L163
L72:
  cmpl   $0x0,-0x30(%rbp)
  je     L196
  lea    D28(%rip),%rax
  jmp    L141
L196:
  mov    -0x48(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  sub    $0x1,%eax
  mov    %eax,-0x2c(%rbp)
  jmp    L170
L86:
  subl   $0x1,-0x2c(%rbp)
L170:
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isspace@plt>
  test   %rax,%rax
  jne    L86
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3f,%al
  jne    L28
  lea    D15(%rip),%rax
  jmp    L141
L28:
  lea    D11(%rip),%rax
L141:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: parse_data
arguments: label: D32
type: string
name: parse_data
arguments: label: D28
type: string
name: parse_data
arguments: label: D15
type: string
name: parse_data
arguments: label: D11
type: string

tool: D32: Fine. Be that way!

tool: D28: Whoa, chill out!

tool: D15: Sure.

tool: D11: Whatever.

assistant: ```c
char *hey_bob(char *text) {
  bool empty = true;
  for (size_t i = 0; i < strlen(text); ++i) {
    if (!isspace(text[i])) {
      empty = false;
      break;
    }
  }
  if (empty || strlen(text) == 0)
    return "Fine. Be that way!";
  bool whoa = true;
  for (size_t i = 0; i < strlen(text); ++i) {
    if (text[i] != toupper(text[i]))
      whoa = false;
  }
  if (whoa) {
    whoa = false;
    for (size_t i = 0; i < strlen(text); ++i) {
      if (isalpha(text[i])) {
        whoa = true;
        break;
      }
    }
  }
  if (whoa)
    return "Whoa, chill out!";
  int last_idx = strlen(text) - 1;
  while (isspace(text[last_idx]))
    last_idx--;
  if (text[last_idx] == '?')
    return "Sure.";
  return "Whatever.";
}
```