user: 请从给定的汇编指令推导出C源代码：

```asm
<tok_is_multi_char_token>:
  endbr64
  push   %rbp
  lea    D36(%rip),%rsi
  mov    %rdi,%rbp
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D147(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D132(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D31(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D107(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D32(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D16(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D159(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D95(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D108(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D156(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D116(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D69(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D150(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D24(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D45(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L8
  lea    D64(%rip),%rsi
  mov    %rbp,%rdi
  call   <strstarts@plt>
  test   %rax,%rax
  jne    L164
  mov    %rbp,%rdi
  lea    D125(%rip),%rsi
  call   <strstarts@plt>
  pop    %rbp
  cmp    $0x1,%rax
  sbb    %eax,%eax
  or     $0x3,%eax
  ret
  nop
L8:
  mov    $0x2,%eax
  pop    %rbp
  ret
L164:
  mov    $0x3,%eax
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: data_label: D36
datatype: string
name: parse_data
arguments: data_label: D147
datatype: string
name: parse_data
arguments: data_label: D132
datatype: string
name: parse_data
arguments: data_label: D31
datatype: string
name: parse_data
arguments: data_label: D107
datatype: string
name: parse_data
arguments: data_label: D32
datatype: string
name: parse_data
arguments: data_label: D16
datatype: string
name: parse_data
arguments: data_label: D159
datatype: string
name: parse_data
arguments: data_label: D95
datatype: string
name: parse_data
arguments: data_label: D108
datatype: string
name: parse_data
arguments: data_label: D156
datatype: string
name: parse_data
arguments: data_label: D116
datatype: string
name: parse_data
arguments: data_label: D69
datatype: string
name: parse_data
arguments: data_label: D150
datatype: string
name: parse_data
arguments: data_label: D24
datatype: string
name: parse_data
arguments: data_label: D45
datatype: string
name: parse_data
arguments: data_label: D64
datatype: string
name: parse_data
arguments: data_label: D125
datatype: string

tool: D36: <<

tool: D147: >>

tool: D132: ==

tool: D31: !=

tool: D107: >=

tool: D32: <=

tool: D16: &&

tool: D159: ||

tool: D95: +=

tool: D108: -=

tool: D156: *=

tool: D116: /=

tool: D69: %=

tool: D150: &=

tool: D24: |=

tool: D45: ^=

tool: D64: <<=

tool: D125: >>=

assistant: ```c
int tok_is_multi_char_token(char *str) {
  if (strstarts(str, "<<"))
    return 2;
  else if (strstarts(str, ">>"))
    return 2;
  else if (strstarts(str, "=="))
    return 2;
  else if (strstarts(str, "!="))
    return 2;
  else if (strstarts(str, ">="))
    return 2;
  else if (strstarts(str, "<="))
    return 2;
  else if (strstarts(str, "&&"))
    return 2;
  else if (strstarts(str, "||"))
    return 2;
  else if (strstarts(str, "+="))
    return 2;
  else if (strstarts(str, "-="))
    return 2;
  else if (strstarts(str, "*="))
    return 2;
  else if (strstarts(str, "/="))
    return 2;
  else if (strstarts(str, "%="))
    return 2;
  else if (strstarts(str, "&="))
    return 2;
  else if (strstarts(str, "|="))
    return 2;
  else if (strstarts(str, "^="))
    return 2;
  else if (strstarts(str, "<<="))
    return 3;
  else if (strstarts(str, ">>="))
    return 3;
  return -1;
}
```