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

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  lea    D93(%rip),%rdi
  call   <printf@plt>
  lea    0x14(%rsp),%rsi
  lea    D97(%rip),%rdi
  call   <scanf@plt>
  lea    D57(%rip),%r13
  lea    D49(%rip),%r12
  lea    D99(%rip),%rbp
  jmp    L9
L41:
  pxor   %xmm1,%xmm1
  cvtss2sd 0x4(%rsp),%xmm1
  cvtss2sd %xmm0,%xmm0
  subsd  D3(%rip),%xmm0
  movapd %xmm1,%xmm2
  mulsd  D73(%rip),%xmm2
  mulsd  %xmm2,%xmm0
  mulsd  D3(%rip),%xmm1
  addsd  %xmm1,%xmm0
  pxor   %xmm5,%xmm5
  cvtsd2ss %xmm0,%xmm5
  movss  %xmm5,0xc(%rsp)
L46:
  mov    %ebx,%esi
  lea    D17(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  pxor   %xmm0,%xmm0
  cvtss2sd 0x8(%rsp),%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd 0xc(%rsp),%xmm2
  pxor   %xmm1,%xmm1
  cvtss2sd 0x4(%rsp),%xmm1
  lea    D96(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  mov    0x14(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x14(%rsp)
  test   %eax,%eax
  jle    L30
L9:
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <get_int@plt>
  mov    %eax,%ebx
  mov    %r12,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <get_float@plt>
  movss  %xmm0,0x4(%rsp)
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <get_float@plt>
  movss  %xmm0,0x8(%rsp)
  comiss D82(%rip),%xmm0
  ja     L41
  movss  0x4(%rsp),%xmm4
  mulss  0x8(%rsp),%xmm4
  movss  %xmm4,0xc(%rsp)
  jmp    L46
L30:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L12
  mov    $0x0,%eax
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L12:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D93
type: string
name: disassemble_data
arguments: data_label: D97
type: string
name: disassemble_data
arguments: data_label: D57
type: string
name: disassemble_data
arguments: data_label: D49
type: string
name: disassemble_data
arguments: data_label: D99
type: string
name: disassemble_data
arguments: data_label: D3
type: f64
name: disassemble_data
arguments: data_label: D73
type: f64
name: disassemble_data
arguments: data_label: D17
type: string
name: disassemble_data
arguments: data_label: D96
type: string
name: disassemble_data
arguments: data_label: D82
type: byte[4]

tool: D93: How many people: 

tool: D97: %d

tool: D57: 
Input ID number: 

tool: D49: Input rate of pay: 

tool: D99: Input hours: 

tool: D3: 40

tool: D73: 1.5

tool: D17: 
ID Number: %d


tool: D96: You've worked %.2f hours, with a rate of $%.2f per hour which equals to a pay of: $%.2f.



tool: {"D82": [0x00,0x00,0x20,0x42]}

assistant: ```c
int main(int argc, char **argv) {
  int id_number, num_people;
  float hours, rate, pay;
  printf("How many people: ");
  scanf("%d", &num_people);
  do {
    printf("\nInput ID number: ");
    id_number = get_int();
    printf("Input rate of pay: ");
    rate = get_float();
    printf("Input hours: ");
    hours = get_float();
    if (hours > 40.0) {
      pay = (40.0 * rate) + ((hours - 40.0) * (rate * 1.5));
    } else {
      pay = hours * rate;
    }
    printf("\nID Number: %d\n", id_number);
    printf("You've worked %.2f hours, with a rate of $%.2f per hour "
           "which equals to a pay of: $%.2f.\n\n",
           hours, rate, pay);
    num_people--;
  } while (num_people > 0);
}
```