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

```asm
<init_amsr_averaged>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %edi,-0xd4(%rbp)
  mov    %esi,-0xd8(%rbp)
  mov    %edx,-0xdc(%rbp)
  mov    %ecx,-0xe0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D71(%rip),%rax
  mov    %rax,-0xc0(%rbp)
  lea    D69(%rip),%rax
  mov    %rax,-0xb8(%rbp)
  lea    D95(%rip),%rax
  mov    %rax,-0xb0(%rbp)
  lea    D115(%rip),%rax
  mov    %rax,-0xa8(%rbp)
  lea    D154(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  lea    D18(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D14(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D28(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D28(%rip),%rax
  mov    %rax,-0x78(%rbp)
  lea    D112(%rip),%rax
  mov    %rax,-0x70(%rbp)
  movsd  D67(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  D120(%rip),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  D158(%rip),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  D87(%rip),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  D4(%rip),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  D143(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x20(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x18(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movl   $0x0,-0xc8(%rbp)
  jmp    L23
L0:
  mov    -0xdc(%rbp),%edx
  mov    -0xd8(%rbp),%esi
  mov    -0xd4(%rbp),%eax
  mov    $0x1,%ecx
  mov    %eax,%edi
  call   <vlistDefVar@plt>
  mov    %eax,-0xc4(%rbp)
  mov    -0xc8(%rbp),%eax
  cltq
  mov    -0xc0(%rbp,%rax,8),%rdx
  mov    -0xc4(%rbp),%ecx
  mov    -0xd4(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <vlistDefVarName@plt>
  mov    -0xc8(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,8),%rdx
  mov    -0xc4(%rbp),%ecx
  mov    -0xd4(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <vlistDefVarUnits@plt>
  mov    -0xc4(%rbp),%ecx
  mov    -0xd4(%rbp),%eax
  mov    $0xd8,%edx
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <vlistDefVarDatatype@plt>
  mov    -0xc4(%rbp),%ecx
  mov    -0xd4(%rbp),%eax
  mov    $0xfe,%edx
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <vlistDefVarMissval@plt>
  mov    -0xc8(%rbp),%eax
  cltq
  mov    -0x60(%rbp,%rax,8),%rcx
  mov    -0xc4(%rbp),%edx
  mov    -0xd4(%rbp),%eax
  movq   %rcx,%xmm0
  mov    %edx,%esi
  mov    %eax,%edi
  call   <vlistDefVarScalefactor@plt>
  mov    -0xc8(%rbp),%eax
  cltq
  mov    -0x30(%rbp,%rax,8),%rcx
  mov    -0xc4(%rbp),%edx
  mov    -0xd4(%rbp),%eax
  movq   %rcx,%xmm0
  mov    %edx,%esi
  mov    %eax,%edi
  call   <vlistDefVarAddoffset@plt>
  addl   $0x1,-0xc8(%rbp)
L23:
  mov    -0xc8(%rbp),%eax
  cmp    -0xe0(%rbp),%eax
  jl     L0
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L18
  call   <__stack_chk_fail@plt>
L18:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D71
data_type: string
name: parse_data
arguments: tag: D69
data_type: string
name: parse_data
arguments: tag: D95
data_type: string
name: parse_data
arguments: tag: D115
data_type: string
name: parse_data
arguments: tag: D154
data_type: string
name: parse_data
arguments: tag: D18
data_type: string
name: parse_data
arguments: tag: D14
data_type: string
name: parse_data
arguments: tag: D28
data_type: string
name: parse_data
arguments: tag: D112
data_type: string
name: parse_data
arguments: tag: D67
data_type: f64
name: parse_data
arguments: tag: D120
data_type: f64
name: parse_data
arguments: tag: D158
data_type: f64
name: parse_data
arguments: tag: D87
data_type: f64
name: parse_data
arguments: tag: D4
data_type: f64
name: parse_data
arguments: tag: D143
data_type: f32[2]

tool: D71: sst

tool: D69: wind

tool: D95: vapor

tool: D115: cloud

tool: D154: rain

tool: D18: deg Celcius

tool: D14: m/s

tool: D28: mm

tool: D112: mm/h

tool: D67: 0.15

tool: D120: 0.2

tool: D158: 0.3

tool: D87: 0.01

tool: D4: 0.1

tool: {"D143": [0.0,-2.125]}

assistant: ```c
void init_amsr_averaged(int vlistID, int gridID, int zaxisID, int nvars) {
  char *name[] = {"sst", "wind", "vapor", "cloud", "rain"};
  char *units[] = {"deg Celcius", "m/s", "mm", "mm", "mm/h"};
  double xscale[] = {0.15, 0.2, 0.3, 0.01, 0.1};
  double xminval[] = {-3., 0., 0., 0., 0.};
  int i, varID;
  for (i = 0; i < nvars; ++i) {
    varID = vlistDefVar(vlistID, gridID, zaxisID, 1);
    vlistDefVarName(vlistID, varID, name[i]);
    vlistDefVarUnits(vlistID, varID, units[i]);
    vlistDefVarDatatype(vlistID, varID, 216);
    vlistDefVarMissval(vlistID, varID, 254);
    vlistDefVarScalefactor(vlistID, varID, xscale[i]);
    vlistDefVarAddoffset(vlistID, varID, xminval[i]);
  }
}
```