user: Converte this assembly snippet into its equivalent C code:

```asm
<print_equation3>:
  endbr64
  push   %r12
  mov    %esi,%r12d
  push   %rbp
  mov    %edx,%ebp
  push   %rbx
  mov    %edi,%ebx
  lea    D76(%rip),%rdi
  call   <puts@plt>
  test   %ebx,%ebx
  jne    L126
  xor    %eax,%eax
  lea    D43(%rip),%rdi
  call   <printf@plt>
  cmp    $0x1,%r12d
  sete   %al
  cmp    $0xffffffff,%r12d
  sete   %dl
  mov    %eax,%ecx
  mov    %edx,%esi
  test   %ebp,%ebp
  je     L60
  test   %al,%al
  jne    L12
  test   %dl,%dl
  jne    L57
L179:
  test   %ebp,%ebp
  je     L60
L202:
  test   %ebp,%ebp
  jg     L22
  je     L139
  nopl   (%rax)
L122:
  mov    %ebp,%esi
  xor    %eax,%eax
  lea    D63(%rip),%rdi
  neg    %esi
  call   <printf@plt>
  test   %ebx,%ebx
  jle    L197
L80:
  pop    %rbx
  lea    D59(%rip),%rdi
  pop    %rbp
  pop    %r12
  jmp    1060 <puts@plt>
  xchg   %ax,%ax
L126:
  xor    %eax,%eax
  mov    %ebx,%esi
  lea    D46(%rip),%rdi
  call   <printf@plt>
  cmp    $0x1,%r12d
  jne    L64
  test   %ebp,%ebp
  jne    L214
  lea    D91(%rip),%rdi
  call   <puts@plt>
  nopw   0x0(%rax,%rax,1)
L139:
  test   %ebx,%ebx
  jg     L80
L197:
  jne    L52
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L60:
  test   %cl,%cl
  je     L97
  lea    D130(%rip),%rdi
  call   <puts@plt>
  jmp    L139
  nopw   0x0(%rax,%rax,1)
L214:
  lea    D8(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
L66:
  test   %ebp,%ebp
  jle    L122
L22:
  mov    %ebp,%esi
  lea    D56(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L139
L12:
  lea    D87(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L66
L52:
  pop    %rbx
  lea    D123(%rip),%rdi
  pop    %rbp
  pop    %r12
  jmp    1060 <puts@plt>
L97:
  test   %sil,%sil
  je     L202
  lea    D104(%rip),%rdi
  call   <puts@plt>
  jmp    L139
L57:
  lea    D134(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L66
L64:
  add    $0x1,%r12d
  jne    L93
  test   %ebp,%ebp
  jne    L149
  lea    D44(%rip),%rdi
  call   <puts@plt>
  jmp    L139
  nopl   (%rax)
L149:
  lea    D16(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  jmp    L66
L93:
  xor    %esi,%esi
  xor    %ecx,%ecx
  jmp    L179
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D76
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D43
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D63
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D59
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D46
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D91
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D130
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D8
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D56
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D87
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D123
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D104
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D134
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D44
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D16
type_guessed: string

tool: D76: 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

tool: D43: The equation is y = 

tool: D63: - %d


tool: D59: The parabola opens upward.

tool: D46: The equation is y = %dx^2 

tool: D91: + x

tool: D130: x

tool: D8: + x 

tool: D56: + %d


tool: D87: x 

tool: D123: The parabola opens downward.

tool: D104: -x

tool: D134: -x 

tool: D44: - x

tool: D16: - x 

assistant: ```c
void print_equation3(int CoeffA, int CoeffB, int CoeffC) {
  printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
  if (CoeffA == 0)
    printf("The equation is y = ");
  else
    printf("The equation is y = %dx^2 ", CoeffA);
  if (!(CoeffA == 0) && CoeffB == 1 && !(CoeffC == 0))
    printf("+ x ");
  else if (!(CoeffA == 0) && CoeffB == -1 && !(CoeffC == 0))
    printf("- x ");
  else if (!(CoeffA == 0) && CoeffB == 1 && CoeffC == 0)
    printf("+ x\n");
  else if (!(CoeffA == 0) && CoeffB == -1 && CoeffC == 0)
    printf("- x\n");
  else if (!(CoeffC == 0) && CoeffB == 1)
    printf("x ");
  else if (!(CoeffC == 0) && CoeffB == -1)
    printf("-x ");
  else if (CoeffB == 1 && CoeffC == 0)
    printf("x\n");
  else if (CoeffB == -1 && CoeffC == 0)
    printf("-x\n");
  if (CoeffC > 0)
    printf("+ %d\n", CoeffC);
  else if (CoeffC < 0)
    printf("- %d\n", abs(CoeffC));
  if (CoeffA > 0)
    printf("The parabola opens upward.\n");
  else if (CoeffA < 0)
    printf("The parabola opens downward.\n");
  return;
}
```