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

```asm
<graphMain>:
  endbr64
  push   %r15
  xor    %r15d,%r15d
  push   %r14
  mov    $0x3f800000,%r14d
  push   %r13
  movd   %xmm1,%r13d
  push   %r12
  movd   %xmm0,%r12d
  push   %rbp
  lea    D39(%rip),%rbp
  push   %rbx
  sub    $0x28,%rsp
  movss  %xmm2,0xc(%rsp)
  lea    0x17(%rsp),%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  movb   $0x0,0x17(%rsp)
  movl   $0x3f800000,(%rsp)
  movl   $0x0,0x4(%rsp)
  movl   $0x0,0x8(%rsp)
  jmp    L117
  nopl   0x0(%rax,%rax,1)
L88:
  cmp    $0x2d,%al
  je     L100
  cmp    $0xf,%al
  jne    L51
  movss  D7(%rip),%xmm0
  mulss  (%rsp),%xmm0
  addss  0x4(%rsp),%xmm0
  movss  %xmm0,0x4(%rsp)
L18:
  movss  D0(%rip),%xmm1
  mulss  (%rsp),%xmm1
  xor    %r14d,%r14d
  movd   %r13d,%xmm5
  movss  0x8(%rsp),%xmm7
  movss  0x4(%rsp),%xmm2
  movd   %r12d,%xmm4
  movss  0xc(%rsp),%xmm6
  movaps %xmm7,%xmm0
  movaps %xmm2,%xmm3
  subss  %xmm1,%xmm0
  addss  %xmm1,%xmm3
  subss  %xmm1,%xmm2
  addss  %xmm7,%xmm1
  call   <plotWrapper@plt>
L82:
  movd   %r15d,%xmm7
  pxor   %xmm3,%xmm3
  ucomiss %xmm3,%xmm7
  jp     L170
  jne    L170
L117:
  mov    %rbx,%rdi
  call   <sysGetChar@plt>
  movzbl 0x17(%rsp),%eax
  cmp    $0xa,%al
  je     L89
L189:
  cmp    $0x2b,%al
  jne    L88
  movss  (%rsp),%xmm6
  mov    $0x3f800000,%r14d
  divss  D41(%rip),%xmm6
  movss  %xmm6,(%rsp)
L24:
  movd   %r14d,%xmm4
  pxor   %xmm5,%xmm5
  ucomiss %xmm5,%xmm4
  jp     L18
  je     L82
  jmp    L18
  cs nopw 0x0(%rax,%rax,1)
L51:
  cmp    $0xe,%al
  jne    L70
  movss  (%rsp),%xmm0
  mulss  D7(%rip),%xmm0
  movss  0x4(%rsp),%xmm4
  subss  %xmm0,%xmm4
  movss  %xmm4,0x4(%rsp)
  jmp    L18
  cs nopw 0x0(%rax,%rax,1)
L100:
  movss  D41(%rip),%xmm6
  mulss  (%rsp),%xmm6
  movss  %xmm6,(%rsp)
  jmp    L18
L70:
  cmp    $0xd,%al
  jne    L2
  movss  (%rsp),%xmm0
  mulss  D7(%rip),%xmm0
  movss  0x8(%rsp),%xmm5
  subss  %xmm0,%xmm5
  movss  %xmm5,0x8(%rsp)
  jmp    L18
  nopl   (%rax)
L89:
  xor    %eax,%eax
  mov    $0x3f800000,%r15d
  call   <sysClear@plt>
  mov    $0xff,%ecx
  xor    %esi,%esi
  mov    %rbp,%rdi
  mov    $0xff,%edx
  call   <sysPrintString@plt>
  movzbl 0x17(%rsp),%eax
  jmp    L189
  nopl   0x0(%rax,%rax,1)
L170:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L147
  add    $0x28,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L2:
  cmp    $0xc,%al
  jne    L24
  movss  (%rsp),%xmm0
  mulss  D7(%rip),%xmm0
  addss  0x8(%rsp),%xmm0
  movss  %xmm0,0x8(%rsp)
  jmp    L18
L147:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D39
type_infered: string
name: disassemble_data
arguments: label: D7
type_infered: byte[4]
name: disassemble_data
arguments: label: D0
type_infered: f32
name: disassemble_data
arguments: label: D41
type_infered: f32

tool: D39: Exited plot Successfully


tool: {"D7": [0x00,0x00,0xa0,0x40]}

tool: D0: 10

tool: D41: 1.5

assistant: ```c
int graphMain(float a, float b, float c) {
  float x_r = 10;
  float x_l = -10;
  float y_d = x_l;
  float y_u = x_r;
  float x_offset = 0, y_offset = 0, ready_to_exit = 0, draw = 1;
  float factor = 1;
  char ch = 0;
  while (!ready_to_exit) {
    sysGetChar(&ch);
    if (ch == '\n') {
      sysClear();
      sysPrintString("Exited plot Successfully\n", 0, 255, 255);
      ready_to_exit = 1;
    }
    if (ch == '+') {
      factor /= 1.5;
      draw = 1;
    }
    if (ch == '-') {
      factor *= 1.5;
      draw = 1;
    }
    if (ch == 15) {
      y_offset += (5 * factor);
      draw = 1;
    }
    if (ch == 14) {
      y_offset -= (5 * factor);
      draw = 1;
    }
    if (ch == 13) {
      x_offset -= (5 * factor);
      draw = 1;
    }
    if (ch == 12) {
      x_offset += (5 * factor);
      draw = 1;
    }
    if (draw) {
      draw = 0;
      plotWrapper((x_l * factor) + x_offset, (x_r * factor) + x_offset, (y_d * factor) + y_offset, (y_u * factor) + y_offset, a, b, c);
    }
  }
  return 0;
}
```