user: What is the c source code of the assembly code below:

```asm
<write_line>:
  endbr64
  push   %r14
  push   %r13
  mov    %edx,%r13d
  push   %r12
  mov    %ecx,%r12d
  push   %rbp
  mov    %rdi,%rbp
  movsbl %sil,%edi
  push   %rbx
  call   <hex2ui@plt>
  mov    %eax,%ebx
  test   $0x1,%al
  je     L195
  movsd  D95(%rip),%xmm1
  movsd  D96(%rip),%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L93:
  test   $0x2,%bl
  je     L119
  movsd  D233(%rip),%xmm2
  movsd  D95(%rip),%xmm1
  mov    %rbp,%rdi
  movapd %xmm2,%xmm0
  movq   %xmm2,%r14
  call   <write_wave@plt>
L82:
  test   $0x4,%bl
  je     L57
  movsd  D95(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L192:
  and    $0x8,%ebx
  je     L127
  movsd  D95(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L101:
  movsbl %r13b,%edi
  call   <hex2ui@plt>
  mov    %eax,%ebx
  test   $0x1,%al
  je     L63
  movsd  D95(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L202:
  test   $0x2,%bl
  je     L173
  movsd  D95(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L88:
  test   $0x4,%bl
  je     L212
  movsd  D95(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L20:
  and    $0x8,%ebx
  je     L35
  movsd  D95(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L66:
  movsbl %r12b,%edi
  call   <hex2ui@plt>
  mov    %eax,%ebx
  test   $0x1,%al
  je     L108
  movsd  D95(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L224:
  test   $0x2,%bl
  je     L147
  movsd  D95(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L150:
  test   $0x4,%bl
  je     L46
  movsd  D95(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
L60:
  and    $0x8,%ebx
  movsd  D95(%rip),%xmm1
  jne    L25
  movsd  D127(%rip),%xmm1
L25:
  pop    %rbx
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1070 <write_wave@plt>
  xchg   %ax,%ax
L46:
  movsd  D127(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L60
  nopw   0x0(%rax,%rax,1)
L147:
  movsd  D127(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L150
  nopw   0x0(%rax,%rax,1)
L108:
  movsd  D127(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L224
  nopw   0x0(%rax,%rax,1)
L35:
  movsd  D127(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L66
  nopw   0x0(%rax,%rax,1)
L212:
  movsd  D127(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L20
  nopw   0x0(%rax,%rax,1)
L173:
  movsd  D127(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L88
  nopw   0x0(%rax,%rax,1)
L63:
  movsd  D127(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L202
  nopw   0x0(%rax,%rax,1)
L127:
  movsd  D127(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L101
  nopw   0x0(%rax,%rax,1)
L57:
  movsd  D127(%rip),%xmm1
  movq   %r14,%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L192
  nopw   0x0(%rax,%rax,1)
L119:
  movsd  D233(%rip),%xmm3
  movsd  D127(%rip),%xmm1
  mov    %rbp,%rdi
  movapd %xmm3,%xmm0
  movq   %xmm3,%r14
  call   <write_wave@plt>
  jmp    L82
  cs nopw 0x0(%rax,%rax,1)
L195:
  movsd  D127(%rip),%xmm1
  movsd  D96(%rip),%xmm0
  mov    %rbp,%rdi
  call   <write_wave@plt>
  jmp    L93
```

tool_calls: name: parse_data
arguments: label: D95
type_guessed: f64
name: parse_data
arguments: label: D96
type_guessed: f64
name: parse_data
arguments: label: D233
type_guessed: f64
name: parse_data
arguments: label: D127
type_guessed: f64

tool: D95: 1136

tool: D96: 0.047

tool: D233: 0.063

tool: D127: 568

assistant: ```c
void write_line(FILE *wavfile, char c1, char c2, char c3) {
  unsigned char ui;
  ui = hex2ui(c1);
  if (ui & 0x1)
    write_wave(wavfile, 0.047, 1136.0);
  else
    write_wave(wavfile, 0.047, 568.0);
  if (ui & 0x2)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x4)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x8)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  ui = hex2ui(c2);
  if (ui & 0x1)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x2)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x4)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x8)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  ui = hex2ui(c3);
  if (ui & 0x1)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x2)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x4)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
  if (ui & 0x8)
    write_wave(wavfile, 0.063, 1136.0);
  else
    write_wave(wavfile, 0.063, 568.0);
}
```