user: What would the C source look like for the assembly code provided here?

```asm
<flt>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  push   %r14
  mov    %r8d,%r14d
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %esi,%ebx
  sub    $0x78,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x68(%rsp)
  xor    %eax,%eax
  and    $0x10,%r14d
  je     L2
  mov    %r14d,(%rsp)
  and    $0xfffffffe,%r8d
  mov    $0x20,%ebp
L176:
  xor    %r13d,%r13d
  test   $0x2,%r8b
  je     L17
  pxor   %xmm1,%xmm1
  comisd %xmm0,%xmm1
  ja     L123
  test   $0x4,%r8b
  jne    L4
  test   $0x8,%r8b
  je     L17
  sub    $0x1,%ebx
  mov    $0x20,%r13d
  nopl   0x0(%rax)
L17:
  and    $0x20,%r8d
  mov    %ecx,0x8(%rsp)
  movsbl %cl,%esi
  lea    0x10(%rsp),%r12
  mov    %r8d,0x4(%rsp)
  test   %edx,%edx
  js     L95
  mov    %r12,%rdi
  mov    %edx,0xc(%rsp)
  call   <cfltcvt@plt>
  mov    0x4(%rsp),%ecx
  test   %ecx,%ecx
  mov    0x8(%rsp),%ecx
  je     L16
  mov    0xc(%rsp),%edx
  test   %edx,%edx
  jne    L128
  mov    %r12,%rdi
  call   <forcdecpt@plt>
  nopl   0x0(%rax)
L128:
  mov    %r12,%rdi
  call   <strlen@plt>
  mov    (%rsp),%edx
  mov    %eax,%ecx
  sub    %eax,%ebx
  test   %edx,%edx
  jne    L34
  lea    -0x1(%rbx),%eax
  test   %ebx,%ebx
  jle    L173
  mov    %eax,%ebx
  mov    %r15,%rdi
  mov    $0x20,%esi
  mov    %ecx,(%rsp)
  add    $0x1,%rbx
  mov    %rbx,%rdx
  add    %rbx,%r15
  mov    $0xffffffff,%ebx
  call   <memset@plt>
  mov    (%rsp),%ecx
L34:
  test   %r13b,%r13b
  je     L87
  mov    %r13b,(%r15)
  add    $0x1,%r15
L87:
  test   %r14d,%r14d
  jne    L195
  lea    -0x1(%rbx),%eax
  test   %ebx,%ebx
  jle    L150
  mov    %eax,%ebx
  mov    %r15,%rdi
  movsbl %bpl,%esi
  mov    %ecx,(%rsp)
  add    $0x1,%rbx
  mov    %rbx,%rdx
  add    %rbx,%r15
  mov    $0xffffffff,%ebx
  call   <memset@plt>
  mov    (%rsp),%ecx
L195:
  test   %ecx,%ecx
  jle    L55
  movslq %ecx,%rbp
  mov    %r15,%rdi
  mov    %r12,%rsi
  mov    %rbp,%rdx
  add    %rbp,%r15
  call   <memcpy@plt>
L55:
  test   %ebx,%ebx
  jle    L189
  movslq %ebx,%rbx
  mov    $0x20,%esi
  mov    %r15,%rdi
  mov    %rbx,%rdx
  call   <memset@plt>
  lea    (%r15,%rbx,1),%rax
L63:
  mov    0x68(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L144
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L95:
  mov    $0x6,%edx
  mov    %r12,%rdi
  call   <cfltcvt@plt>
  mov    0x4(%rsp),%eax
  test   %eax,%eax
  jne    L128
  mov    0x8(%rsp),%ecx
L16:
  cmp    $0x67,%cl
  jne    L128
  mov    %r12,%rdi
  call   <cropzeros@plt>
  jmp    L128
  nopl   0x0(%rax,%rax,1)
L2:
  mov    %r8d,%eax
  and    $0x11,%eax
  mov    %eax,(%rsp)
  mov    %r8d,%eax
  and    $0x1,%eax
  cmp    $0x1,%eax
  sbb    %ebp,%ebp
  and    $0xfffffff0,%ebp
  add    $0x30,%ebp
  jmp    L176
  nop
L123:
  xorpd  D3(%rip),%xmm0
  sub    $0x1,%ebx
  mov    $0x2d,%r13d
  jmp    L17
  cs nopw 0x0(%rax,%rax,1)
L4:
  sub    $0x1,%ebx
  mov    $0x2b,%r13d
  jmp    L17
L173:
  mov    %eax,%ebx
  jmp    L34
L150:
  mov    %eax,%ebx
  jmp    L195
  nopl   0x0(%rax)
L189:
  mov    %r15,%rax
  jmp    L63
L144:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D3
datatype: f32[4]

tool: {"D3": [0.0,-0.0,0.0,0.0]}

assistant: ```c
char *flt(char *str, double num, int size, int precision, char fmt, int flags) {
  char tmp[80];
  char c, sign;
  int n, i;
  if (flags & 16)
    flags &= ~1;
  c = (flags & 1) ? '0' : ' ';
  sign = 0;
  if (flags & 2) {
    if (num < 0.0) {
      sign = '-';
      num = -num;
      size--;
    } else if (flags & 4) {
      sign = '+';
      size--;
    } else if (flags & 8) {
      sign = ' ';
      size--;
    }
  }
  if (precision < 0)
    precision = 6;
  cfltcvt(num, tmp, fmt, precision);
  if ((flags & 32) && precision == 0)
    forcdecpt(tmp);
  if (fmt == 'g' && !(flags & 32))
    cropzeros(tmp);
  n = strlen(tmp);
  size -= n;
  if (!(flags & (1 | 16)))
    while (size-- > 0)
      *str++ = ' ';
  if (sign)
    *str++ = sign;
  if (!(flags & 16))
    while (size-- > 0)
      *str++ = c;
  for (i = 0; i < n; i++)
    *str++ = tmp[i];
  while (size-- > 0)
    *str++ = ' ';
  return str;
}
```