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

```asm
<EquationNeedsFields>:
  endbr64
  push   %rbx
  mov    %rdi,%rbx
  mov    $0x0,%eax
  call   <EQ_field_active@plt>
  mov    %rax,%rdx
  mov    $0x0,%eax
  test   %rdx,%rdx
  je     L141
L109:
  pop    %rbx
  ret
L141:
  lea    D26(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D133(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D83(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D27(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D89(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D17(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D25(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D33(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D160(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D46(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D179(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D90(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D4(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D101(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D12(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D57(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D3(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D5(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D81(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  mov    %rax,%rdx
  mov    $0x1,%eax
  test   %rdx,%rdx
  jne    L109
  lea    D196(%rip),%rsi
  mov    %rbx,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  setne  %al
  movzbl %al,%eax
  jmp    L109
```

tool_calls: name: extract_symbolic_data
arguments: tag: D26
datatype: string
name: extract_symbolic_data
arguments: tag: D133
datatype: string
name: extract_symbolic_data
arguments: tag: D83
datatype: string
name: extract_symbolic_data
arguments: tag: D27
datatype: string
name: extract_symbolic_data
arguments: tag: D89
datatype: string
name: extract_symbolic_data
arguments: tag: D17
datatype: string
name: extract_symbolic_data
arguments: tag: D25
datatype: string
name: extract_symbolic_data
arguments: tag: D33
datatype: string
name: extract_symbolic_data
arguments: tag: D160
datatype: string
name: extract_symbolic_data
arguments: tag: D46
datatype: string
name: extract_symbolic_data
arguments: tag: D179
datatype: string
name: extract_symbolic_data
arguments: tag: D90
datatype: string
name: extract_symbolic_data
arguments: tag: D4
datatype: string
name: extract_symbolic_data
arguments: tag: D101
datatype: string
name: extract_symbolic_data
arguments: tag: D12
datatype: string
name: extract_symbolic_data
arguments: tag: D57
datatype: string
name: extract_symbolic_data
arguments: tag: D3
datatype: string
name: extract_symbolic_data
arguments: tag: D5
datatype: string
name: extract_symbolic_data
arguments: tag: D81
datatype: string
name: extract_symbolic_data
arguments: tag: D196
datatype: string

tool: D26: \frac

tool: D133: \sum

tool: D83: \int

tool: D27: \iint

tool: D89: \iiint

tool: D17: \prod

tool: D25: \begin{array}

tool: D33: \left

tool: D160: \right

tool: D46: \root

tool: D179: \sqrt

tool: D90: \over

tool: D4: \stackrel

tool: D101: _

tool: D12: ^

tool: D57: \dfrac

tool: D3: \lim

tool: D5: \liminf

tool: D81: \limsup

tool: D196: \overline

assistant: ```c
int EquationNeedsFields(char *eq) {
  if (EQ_field_active())
    return 0;
  if (strstr(eq, "\\frac"))
    return 1;
  if (strstr(eq, "\\sum"))
    return 1;
  if (strstr(eq, "\\int"))
    return 1;
  if (strstr(eq, "\\iint"))
    return 1;
  if (strstr(eq, "\\iiint"))
    return 1;
  if (strstr(eq, "\\prod"))
    return 1;
  if (strstr(eq, "\\begin{array}"))
    return 1;
  if (strstr(eq, "\\left"))
    return 1;
  if (strstr(eq, "\\right"))
    return 1;
  if (strstr(eq, "\\root"))
    return 1;
  if (strstr(eq, "\\sqrt"))
    return 1;
  if (strstr(eq, "\\over"))
    return 1;
  if (strstr(eq, "\\stackrel"))
    return 1;
  if (strstr(eq, "_") || strstr(eq, "^"))
    return 1;
  if (strstr(eq, "\\dfrac"))
    return 1;
  if (strstr(eq, "\\lim"))
    return 1;
  if (strstr(eq, "\\liminf"))
    return 1;
  if (strstr(eq, "\\limsup"))
    return 1;
  if (strstr(eq, "\\overline"))
    return 1;
  return 0;
}
```