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

```asm
<geoXyz2Rae>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  movsd  D55(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    %rax,%rbx
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  movsd  D55(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  add    %rax,%rbx
  mov    -0x28(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  movsd  D55(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  add    %rbx,%rax
  mov    %rax,%rdi
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    -0x30(%rbp),%rdx
  mov    %rax,(%rdx)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  mov    -0x30(%rbp),%rdx
  lea    0x8(%rdx),%rbx
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <atan2@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L57
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L57
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movsd  D9(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L57:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  jbe    L11
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L11
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  movsd  D9(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L11:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  movsd  D55(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mov    %rax,%rbx
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  movsd  D55(%rip),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  add    %rbx,%rax
  mov    %rax,%rdi
  call   <sqrt@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x28(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    -0x30(%rbp),%rdx
  lea    0x10(%rdx),%rbx
  movsd  -0x18(%rbp),%xmm0
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <atan2@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  ja     L34
  jmp    L51
L34:
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm1
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  movsd  D9(%rip),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L51:
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D55
data_type: f64
name: parse_data
arguments: data_tag: D9
data_type: byte[8]

tool: D55: 2

tool: {"D9": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0x40]}

assistant: ```c
void geoXyz2Rae(double xyz_in[], double rae_out[]) {
  double horz_dist;
  rae_out[0] = sqrt(pow(xyz_in[0], 2.0) + pow(xyz_in[1], 2.0) + pow(xyz_in[2], 2.0));
  rae_out[1] = atan2(xyz_in[0], xyz_in[1]);
  if ((xyz_in[0] < 0.0) && (xyz_in[1] < 0.0))
    rae_out[1] += (2.0 * 3.14159265358979323846);
  if ((xyz_in[0] < 0.0) && (xyz_in[1] > 0.0))
    rae_out[1] += (2.0 * 3.14159265358979323846);
  horz_dist = sqrt(pow(xyz_in[0], 2.0) + pow(xyz_in[1], 2.0));
  rae_out[2] = atan2(xyz_in[2], horz_dist);
  if (rae_out[2] < 0.0)
    rae_out[2] += (2.0 * 3.14159265358979323846);
}
```