user: Translate the below assembly code into C programming language:

```asm
<test_json_number_toDouble>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x348,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x338(%rsp)
  xor    %eax,%eax
  lea    D341(%rip),%rdi
  call   <puts@plt>
  lea    D313(%rip),%rdi
  call   <puts@plt>
  lea    0x10(%rsp),%rdi
  mov    $0x64,%ecx
  mov    $0x0,%eax
  rep stos %rax,%es:(%rdi)
  lea    D173(%rip),%rbx
  mov    %rbx,0x10(%rsp)
  lea    D23(%rip),%rax
  mov    %rax,0x18(%rsp)
  lea    D103(%rip),%rax
  mov    %rax,0x20(%rsp)
  lea    D163(%rip),%rax
  mov    %rax,0x28(%rsp)
  lea    D11(%rip),%rax
  mov    %rax,0x30(%rsp)
  lea    D123(%rip),%rax
  mov    %rax,0x38(%rsp)
  lea    D298(%rip),%rax
  mov    %rax,0x40(%rsp)
  lea    D72(%rip),%rax
  mov    %rax,0x48(%rsp)
  lea    D138(%rip),%rax
  mov    %rax,0x50(%rsp)
  lea    D307(%rip),%rax
  mov    %rax,0x58(%rsp)
  lea    D276(%rip),%rax
  mov    %rax,0x60(%rsp)
  lea    D8(%rip),%rax
  mov    %rax,0x68(%rsp)
  lea    D32(%rip),%rax
  mov    %rax,0x70(%rsp)
  lea    D157(%rip),%rax
  mov    %rax,0x78(%rsp)
  lea    D91(%rip),%rax
  mov    %rax,0x80(%rsp)
  lea    D260(%rip),%rax
  mov    %rax,0x88(%rsp)
  lea    D338(%rip),%rax
  mov    %rax,0x90(%rsp)
  lea    D153(%rip),%rax
  mov    %rax,0x98(%rsp)
  lea    D52(%rip),%rax
  mov    %rax,0xa0(%rsp)
  lea    D295(%rip),%rax
  mov    %rax,0xa8(%rsp)
  lea    D368(%rip),%rax
  mov    %rax,0xb0(%rsp)
  lea    D132(%rip),%rax
  mov    %rax,0xb8(%rsp)
  lea    D354(%rip),%rax
  mov    %rax,0xc0(%rsp)
  lea    D357(%rip),%rax
  mov    %rax,0xc8(%rsp)
  lea    D200(%rip),%rax
  mov    %rax,0xd0(%rsp)
  lea    D38(%rip),%rax
  mov    %rax,0xd8(%rsp)
  lea    D7(%rip),%rax
  mov    %rax,0xe0(%rsp)
  lea    D302(%rip),%rax
  mov    %rax,0xe8(%rsp)
  lea    D3(%rip),%rax
  mov    %rax,0xf0(%rsp)
  lea    D362(%rip),%rax
  mov    %rax,0xf8(%rsp)
  lea    D62(%rip),%rax
  mov    %rax,0x100(%rsp)
  mov    $0x1,%ebp
  lea    D108(%rip),%r13
  lea    0x8(%rsp),%r12
  lea    D166(%rip),%r15
  lea    D73(%rip),%r14
  jmp    L12
L26:
  movsd  0x8(%rsp),%xmm0
  mov    %rbx,%rsi
  mov    %r15,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
L28:
  add    $0x1,%rbp
  mov    0x8(%rsp,%rbp,8),%rbx
  test   %rbx,%rbx
  je     L38
L12:
  mov    %ebp,%esi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r12,%rdx
  mov    $0x0,%esi
  mov    %rbx,%rdi
  call   <json_number_toDouble@plt>
  test   %rax,%rax
  je     L26
  mov    %rbx,%rsi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L28
L38:
  lea    D1(%rip),%rdi
  call   <puts@plt>
  mov    0x338(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L31
  add    $0x348,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L31:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D341
type_guessed: string
name: parse_data
arguments: data_tag: D313
type_guessed: string
name: parse_data
arguments: data_tag: D173
type_guessed: string
name: parse_data
arguments: data_tag: D23
type_guessed: string
name: parse_data
arguments: data_tag: D103
type_guessed: string
name: parse_data
arguments: data_tag: D163
type_guessed: string
name: parse_data
arguments: data_tag: D11
type_guessed: string
name: parse_data
arguments: data_tag: D123
type_guessed: string
name: parse_data
arguments: data_tag: D298
type_guessed: string
name: parse_data
arguments: data_tag: D72
type_guessed: string
name: parse_data
arguments: data_tag: D138
type_guessed: string
name: parse_data
arguments: data_tag: D307
type_guessed: string
name: parse_data
arguments: data_tag: D276
type_guessed: string
name: parse_data
arguments: data_tag: D8
type_guessed: string
name: parse_data
arguments: data_tag: D32
type_guessed: string
name: parse_data
arguments: data_tag: D157
type_guessed: string
name: parse_data
arguments: data_tag: D91
type_guessed: string
name: parse_data
arguments: data_tag: D260
type_guessed: string
name: parse_data
arguments: data_tag: D338
type_guessed: string
name: parse_data
arguments: data_tag: D153
type_guessed: string
name: parse_data
arguments: data_tag: D52
type_guessed: string
name: parse_data
arguments: data_tag: D295
type_guessed: string
name: parse_data
arguments: data_tag: D368
type_guessed: string
name: parse_data
arguments: data_tag: D132
type_guessed: string
name: parse_data
arguments: data_tag: D354
type_guessed: string
name: parse_data
arguments: data_tag: D357
type_guessed: string
name: parse_data
arguments: data_tag: D200
type_guessed: string
name: parse_data
arguments: data_tag: D38
type_guessed: string
name: parse_data
arguments: data_tag: D7
type_guessed: string
name: parse_data
arguments: data_tag: D302
type_guessed: string
name: parse_data
arguments: data_tag: D3
type_guessed: string
name: parse_data
arguments: data_tag: D362
type_guessed: string
name: parse_data
arguments: data_tag: D62
type_guessed: string
name: parse_data
arguments: data_tag: D108
type_guessed: string
name: parse_data
arguments: data_tag: D166
type_guessed: string
name: parse_data
arguments: data_tag: D73
type_guessed: string
name: parse_data
arguments: data_tag: D1
type_guessed: string

tool: D341: Test json_number_toDouble

tool: D313: ================================================================================

tool: D173: --123

tool: D23: abc

tool: D103: 123


tool: D163: 456

tool: D11: -

tool: D123: -abc

tool: D298: -123

tool: D72: 0

tool: D138: -0

tool: D307: 0.

tool: D276: .

tool: D8: 0.0

tool: D32: 1.2.3

tool: D157: -10.123

tool: D91: 10.e

tool: D260: 10..

tool: D338: e

tool: D153: -E

tool: D52: -0e12

tool: D295: 10.5e00abc

tool: D368: 10.5E+13

tool: D132: 8.5E-2

tool: D354: 8e

tool: D357: 123E-

tool: D200: 456E+

tool: D38: 9.e

tool: D7: 9.e99

tool: D302: 0ee

tool: 

tool: D362: 0.0eabc

tool: D62: 0.0e-abc

tool: D108: %d. 

tool: D166: %s = %f


tool: D73: %s is not number


tool: D1: ================================================================================


assistant: ```c
void test_json_number_toDouble() {
  puts("Test json_number_toDouble");
  puts("================================================================================");
  char *str[100] = {"--123", "abc", "123\n", "456", "-", "-abc", "-123", "0", "-0", "0.", ".", "0.0", "1.2.3", "-10.123", "10.e", "10..", "e", "-E", "-0e12", "10.5e00abc", "10.5E+13", "8.5E-2", "8e", "123E-", "456E+", "9.e", "9.e99", "0ee", "", "0.0eabc", "0.0e-abc"};
  int i;
  for (i = 0; str[i] != NULL; i++) {
    double number;
    printf("%d. ", i + 1);
    if (json_number_toDouble(str[i], 0, &number) != 0) {
      printf("%s is not number\n", str[i]);
    } else {
      printf("%s = %f\n", str[i], number);
    }
  }
  puts("================================================================================\n");
}
```