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

```asm
<test_FKinSpace>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x270,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D45(%rip),%xmm0
  movsd  %xmm0,-0x230(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x228(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x220(%rbp)
  movsd  D142(%rip),%xmm0
  movsd  %xmm0,-0x218(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x210(%rbp)
  movsd  D45(%rip),%xmm0
  movsd  %xmm0,-0x208(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x200(%rbp)
  movsd  D105(%rip),%xmm0
  movsd  %xmm0,-0x1f8(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1f0(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1e8(%rbp)
  movsd  D45(%rip),%xmm0
  movsd  %xmm0,-0x1e0(%rbp)
  movsd  D178(%rip),%xmm0
  movsd  %xmm0,-0x1d8(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1d0(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1c8(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1c0(%rbp)
  movsd  D45(%rip),%xmm0
  movsd  %xmm0,-0x1b8(%rbp)
  movl   $0x6,-0x264(%rbp)
  lea    -0x130(%rbp),%rax
  lea    D12(%rip),%rdx
  mov    $0x24,%ecx
  mov    %rax,%rdi
  mov    %rdx,%rsi
  rep movsq %ds:(%rsi),%es:(%rdi)
  movsd  D68(%rip),%xmm0
  movsd  %xmm0,-0x260(%rbp)
  movsd  D73(%rip),%xmm0
  movsd  %xmm0,-0x258(%rbp)
  movsd  D22(%rip),%xmm0
  movsd  %xmm0,-0x250(%rbp)
  movsd  D165(%rip),%xmm0
  movsd  %xmm0,-0x248(%rbp)
  movsd  D27(%rip),%xmm0
  movsd  %xmm0,-0x240(%rbp)
  movsd  D93(%rip),%xmm0
  movsd  %xmm0,-0x238(%rbp)
  lea    D145(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x268(%rbp)
  jmp    L35
L4:
  mov    -0x268(%rbp),%eax
  cltq
  mov    -0x260(%rbp,%rax,8),%rax
  movq   %rax,%xmm0
  lea    D147(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x268(%rbp)
L35:
  cmpl   $0x5,-0x268(%rbp)
  jle    L4
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    -0x1b0(%rbp),%rdi
  lea    -0x260(%rbp),%rcx
  lea    -0x130(%rbp),%rdx
  mov    -0x264(%rbp),%esi
  lea    -0x230(%rbp),%rax
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <FKinSpace@plt>
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x268(%rbp)
  jmp    L30
L12:
  mov    -0x268(%rbp),%eax
  cltq
  shl    $0x5,%rax
  add    %rbp,%rax
  sub    $0x198,%rax
  movsd  (%rax),%xmm2
  mov    -0x268(%rbp),%eax
  cltq
  shl    $0x5,%rax
  add    %rbp,%rax
  sub    $0x1a0,%rax
  movsd  (%rax),%xmm1
  mov    -0x268(%rbp),%eax
  cltq
  shl    $0x5,%rax
  add    %rbp,%rax
  sub    $0x1a8,%rax
  movsd  (%rax),%xmm0
  mov    -0x268(%rbp),%eax
  cltq
  shl    $0x5,%rax
  add    %rbp,%rax
  sub    $0x1b0,%rax
  mov    (%rax),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D127(%rip),%rax
  mov    %rax,%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  addl   $0x1,-0x268(%rbp)
L30:
  cmpl   $0x3,-0x268(%rbp)
  jle    L12
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L47
  call   <__stack_chk_fail@plt>
L47:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D45
type: f64
name: disassemble_data
arguments: tag: D142
type: f64
name: disassemble_data
arguments: tag: D105
type: f64
name: disassemble_data
arguments: tag: D178
type: f64
name: disassemble_data
arguments: tag: D12
type: string
name: disassemble_data
arguments: tag: D68
type: f64
name: disassemble_data
arguments: tag: D73
type: f64
name: disassemble_data
arguments: tag: D22
type: f64
name: disassemble_data
arguments: tag: D165
type: f64
name: disassemble_data
arguments: tag: D27
type: f64
name: disassemble_data
arguments: tag: D93
type: byte[8]
name: disassemble_data
arguments: tag: D145
type: string
name: disassemble_data
arguments: tag: D147
type: string
name: disassemble_data
arguments: tag: D25
type: string
name: disassemble_data
arguments: tag: D127
type: string

tool: D45: 1

tool: D142: 213

tool: D105: 267.8

tool: D178: 478.95

tool: 

tool: D68: 0.1

tool: D73: 0.2

tool: D22: 0.3

tool: D165: 0.4

tool: D27: 0.5

tool: {"D93": [0x18,0x2d,0x44,0x54,0xfb,0x21,0xe9,0x3f]}

tool: D145: thetalist:

tool: D147: %lf 

tool: D25: T:

tool: D127: %lf %lf %lf %lf


assistant: ```c
void test_FKinSpace() {
  int i;
  double M[4][4] = {1.0000, 0, 0, 213.0000, 0, 1.0000, 0, 267.8000, 0, 0, 1.0000, 478.9500, 0, 0, 0, 1.0000};
  int JoinNum = 6;
  double Slist[6][6] = {0, 0, 0, 0, 0, 0, 0, 1.0000, 1.0000, 1.0000, 0, 1.0000, 1.0000, 0, 0, 0, 1.0000, 0, 0, -151.9000, -395.5500, -395.5500, 110.4000, -478.9500, 0, 0, 0, 0, -213.0000, 0, 0, 0, 0, 213.0000, 0, 213.0000};
  double thetalist[6] = {0.1, 0.2, 0.3, 0.4, 0.5, 3.14159265358979323846 / 4};
  printf("thetalist:\n");
  for (i = 0; i < 6; i++) {
    printf("%lf ", thetalist[i]);
  }
  printf("\n");
  double T[4][4];
  FKinSpace(M, JoinNum, (double *)Slist, thetalist, T);
  printf("T:\n");
  for (i = 0; i < 4; i++) {
    printf("%lf %lf %lf %lf\n", T[i][0], T[i][1], T[i][2], T[i][3]);
  }
  return;
}
```