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

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  mov    %edi,%ebp
  push   %rbx
  mov    %rsi,%rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  mov    D109(%rip),%rax
  mov    %rax,0x8(%rsp)
  mov    D48(%rip),%rax
  mov    %rax,0x10(%rsp)
  xor    %eax,%eax
  call   <initialiseLookupTable@plt>
  cmp    $0x4,%ebp
  je     L4
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  mov    $0x2,%eax
  lea    D73(%rip),%rdi
  call   <writeLookupTableForOctave@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  lea    D151(%rip),%rdi
  mov    %eax,%ebx
  mov    $0x2,%eax
  call   <writeLookupTableForAssembler@plt>
  add    %ebx,%eax
L5:
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L39
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L4:
  mov    0x8(%rbx),%rdi
  lea    0x4(%rsp),%rdx
  lea    D26(%rip),%rsi
  xor    %eax,%eax
  lea    D95(%rip),%r13
  call   <sscanf@plt>
  mov    0x10(%rbx),%rdi
  lea    0x8(%rsp),%rdx
  mov    %r13,%rsi
  mov    %eax,%ebp
  xor    %eax,%eax
  call   <sscanf@plt>
  mov    0x18(%rbx),%rdi
  lea    0x10(%rsp),%rdx
  mov    %r13,%rsi
  mov    %eax,%r12d
  xor    %eax,%eax
  call   <sscanf@plt>
  add    %r12d,%ebp
  add    %eax,%ebp
  cmp    $0x3,%ebp
  je     L11
  lea    D138(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L5
L11:
  mov    0x4(%rsp),%esi
  movsd  0x10(%rsp),%xmm1
  lea    D82(%rip),%rdi
  mov    $0x2,%eax
  movsd  0x8(%rsp),%xmm0
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  mov    $0x2,%eax
  mov    0x4(%rsp),%edi
  call   <sunriseTime@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  mov    0x4(%rsp),%edi
  mov    %eax,%ebx
  mov    $0x2,%eax
  call   <sunsetTime@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  movsd  D8(%rip),%xmm5
  cvtsi2sd %eax,%xmm0
  pxor   %xmm2,%xmm2
  movsd  D29(%rip),%xmm4
  movsd  D33(%rip),%xmm3
  cvtsi2sd %ebx,%xmm1
  lea    D79(%rip),%rdi
  xor    %eax,%eax
  mulsd  %xmm5,%xmm0
  mulsd  %xmm5,%xmm1
  cvttsd2si %xmm0,%ecx
  cvttsd2si %xmm1,%esi
  cvtsi2sd %ecx,%xmm2
  subsd  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sd %esi,%xmm2
  mulsd  %xmm4,%xmm0
  subsd  %xmm2,%xmm1
  mulsd  %xmm4,%xmm1
  addsd  %xmm3,%xmm0
  cvttsd2si %xmm0,%r8d
  addsd  %xmm3,%xmm1
  cvttsd2si %xmm1,%edx
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  mov    $0x2,%eax
  mov    0x4(%rsp),%edi
  call   <lookupSunriseTime@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm0
  mov    0x4(%rsp),%edi
  mov    %eax,%ebx
  mov    $0x2,%eax
  call   <lookupSunsetTime@plt>
  pxor   %xmm0,%xmm0
  pxor   %xmm2,%xmm2
  lea    D102(%rip),%rdi
  cvtsi2sd %eax,%xmm0
  mov    D8(%rip),%rax
  cvtsi2sd %ebx,%xmm2
  movq   %rax,%xmm5
  mov    D29(%rip),%rax
  mulsd  %xmm5,%xmm0
  movq   %rax,%xmm4
  mov    D33(%rip),%rax
  mulsd  %xmm5,%xmm2
  movq   %rax,%xmm3
  xor    %eax,%eax
  cvttsd2si %xmm0,%ecx
  cvttsd2si %xmm2,%esi
  movapd %xmm2,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sd %ecx,%xmm2
  subsd  %xmm2,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sd %esi,%xmm2
  mulsd  %xmm4,%xmm0
  subsd  %xmm2,%xmm1
  mulsd  %xmm4,%xmm1
  addsd  %xmm3,%xmm0
  cvttsd2si %xmm0,%r8d
  addsd  %xmm3,%xmm1
  cvttsd2si %xmm1,%edx
  call   <printf@plt>
  xor    %eax,%eax
  jmp    L5
L39:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D109
type: f64
name: extract_symbolic_data
arguments: data_label: D48
type: byte[8]
name: extract_symbolic_data
arguments: data_label: D73
type: string
name: extract_symbolic_data
arguments: data_label: D151
type: string
name: extract_symbolic_data
arguments: data_label: D26
type: string
name: extract_symbolic_data
arguments: data_label: D95
type: string
name: extract_symbolic_data
arguments: data_label: D138
type: string
name: extract_symbolic_data
arguments: data_label: D82
type: string
name: extract_symbolic_data
arguments: data_label: D8
type: byte[8]
name: extract_symbolic_data
arguments: data_label: D29
type: byte[8]
name: extract_symbolic_data
arguments: data_label: D33
type: f64
name: extract_symbolic_data
arguments: data_label: D79
type: string
name: extract_symbolic_data
arguments: data_label: D102
type: string

tool: D109: 51.509865

tool: {"D48": [0xca,0x52,0xeb,0xfd,0x46,0x3b,0xbe,0xbf]}

tool: D73: lookup.txt

tool: D151: lookup.asm

tool: D26: %d

tool: D95: %lg

tool: D138: Unable to parse arguments.  Expected day, latitude and longitude.

tool: D82: For %g,%g on day %d:


tool: {"D8": [0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x40]}

tool: {"D29": [0x00,0x00,0x00,0x00,0x00,0x00,0x4e,0x40]}

tool: D33: 0.5

tool: D79: Actual: sunrise=%.2d:%.2d, sunset=%.2d:%.2d


tool: D102: Lookup: sunrise=%.2d:%.2d, sunset=%.2d:%.2d


assistant: ```c
int main(int argc, char *argv[]) {
  double latitude = 51.509865;
  double longitude = -0.118092;
  initialiseLookupTable();
  if (argc == 4) {
    double sunrise, sunset;
    int day;
    int success = sscanf(argv[1], "%d", &day) + sscanf(argv[2], "%lg", &latitude) + sscanf(argv[3], "%lg", &longitude);
    if (success != 3) {
      printf("Unable to parse arguments.  "
             "Expected day, latitude and longitude.\n");
      return 1;
    }
    printf("For %g,%g on day %d:\n", latitude, longitude, day);
    sunrise = sunriseTime(day, latitude, longitude);
    sunset = sunsetTime(day, latitude, longitude);
    printf("Actual: sunrise=%.2d:%.2d, sunset=%.2d:%.2d\n", ((int)((sunrise)*24)), ((int)(((sunrise)*24 - ((int)((sunrise)*24))) * 60 + 0.5)), ((int)((sunset)*24)), ((int)(((sunset)*24 - ((int)((sunset)*24))) * 60 + 0.5)));
    sunrise = lookupSunriseTime(day, latitude, longitude);
    sunset = lookupSunsetTime(day, latitude, longitude);
    printf("Lookup: sunrise=%.2d:%.2d, sunset=%.2d:%.2d\n", ((int)((sunrise)*24)), ((int)(((sunrise)*24 - ((int)((sunrise)*24))) * 60 + 0.5)), ((int)((sunset)*24)), ((int)(((sunset)*24 - ((int)((sunset)*24))) * 60 + 0.5)));
    return 0;
  }
  return writeLookupTableForOctave("lookup.txt", latitude, longitude) + writeLookupTableForAssembler("lookup.asm", latitude, longitude);
}
```