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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xd0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D209(%rip),%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  movsd  D110(%rip),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  D73(%rip),%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  movsd  D50(%rip),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movsd  D12(%rip),%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  D80(%rip),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  movsd  D53(%rip),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  D20(%rip),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  D110(%rip),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  D60(%rip),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  D134(%rip),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  D60(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  D209(%rip),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  D110(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  D110(%rip),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  D53(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D80(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D73(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D50(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  D20(%rip),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  D12(%rip),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  D134(%rip),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  lea    -0xc0(%rbp),%rax
  mov    $0xb,%esi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <CSPL_Sort_mergesort@plt>
  movq   $0x0,-0xc8(%rbp)
  jmp    L41
L38:
  mov    -0xc8(%rbp),%rax
  mov    -0xc0(%rbp,%rax,8),%rdx
  mov    -0xc8(%rbp),%rax
  movq   %rdx,%xmm0
  mov    %rax,%rsi
  lea    D152(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0xc8(%rbp),%rax
  movsd  -0x60(%rbp,%rax,8),%xmm0
  mov    -0xc8(%rbp),%rax
  movsd  -0xc0(%rbp,%rax,8),%xmm1
  subsd  %xmm1,%xmm0
  movq   D39(%rip),%xmm1
  andpd  %xmm0,%xmm1
  movsd  D136(%rip),%xmm0
  comisd %xmm1,%xmm0
  seta   %al
  xor    $0x1,%eax
  test   %al,%al
  je     L13
  mov    $0x1,%eax
  jmp    L16
L13:
  addq   $0x1,-0xc8(%rbp)
L41:
  cmpq   $0xa,-0xc8(%rbp)
  jle    L38
  mov    $0x0,%eax
L16:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L40
  call   <__stack_chk_fail@plt>
L40:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D209
type_guessed: byte[8]
name: unpack_data
arguments: tag: D110
type_guessed: byte[8]
name: unpack_data
arguments: tag: D73
type_guessed: byte[8]
name: unpack_data
arguments: tag: D50
type_guessed: byte[8]
name: unpack_data
arguments: tag: D12
type_guessed: byte[8]
name: unpack_data
arguments: tag: D80
type_guessed: byte[8]
name: unpack_data
arguments: tag: D53
type_guessed: byte[8]
name: unpack_data
arguments: tag: D20
type_guessed: byte[8]
name: unpack_data
arguments: tag: D60
type_guessed: byte[8]
name: unpack_data
arguments: tag: D134
type_guessed: byte[8]
name: unpack_data
arguments: tag: D152
type_guessed: string
name: unpack_data
arguments: tag: D39
type_guessed: qword
name: unpack_data
arguments: tag: D136
type_guessed: byte[8]

tool: {"D209": [0x00,0x00,0x00,0x00,0x00,0x00,0x2e,0x40]}

tool: {"D110": [0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x40]}

tool: {"D73": [0x00,0x00,0x00,0x00,0x00,0x80,0x41,0x40]}

tool: {"D50": [0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x40]}

tool: {"D12": [0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x40]}

tool: {"D80": [0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x40]}

tool: {"D53": [0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40]}

tool: {"D20": [0x00,0x00,0x00,0x00,0x00,0x80,0x45,0x40]}

tool: {"D60": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

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

tool: D152: CSPL_Sort_mergesort[%ld]=%lf


tool: D39: 9223372036854775807

tool: {"D136": [0x48,0xaf,0xbc,0x9a,0xf2,0xd7,0x7a,0x3e]}

assistant: ```c
int main(void) {
  {
    double data1[11] = {15, 20, 35, 40, 50, 34, 32, 43, 20, 1, 60};
    double ans[11] = {1, 15, 20, 20, 32, 34, 35, 40, 43, 50, 60};
    long i;
    CSPL_Sort_mergesort(data1, 11);
    for (i = 0; i < 11; i++) {
      printf("CSPL_Sort_mergesort[%ld]=%lf\n", i, data1[i]);
      {
        if ((fabs((ans[i]) - (data1[i])) < (1e-7)) == 0)
          return (1);
      };
    }
  }
  return (0);
}
```