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

```asm
<check_objects>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x128,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x118(%rsp)
  xor    %eax,%eax
  call   <rewind@plt>
  lea    0x10(%rsp),%rdx
  lea    D194(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D152(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    $0xffffffff,%ebp
  lea    D180(%rip),%r15
  lea    D226(%rip),%r14
  jmp    L87
L59:
  lea    D234(%rip),%rcx
  mov    $0x1,%esi
  mov    $0x0,%edi
  call   <assume@plt>
  jmp    L60
L46:
  mov    %rbx,%rdi
  call   <fread_string@plt>
  mov    %rbx,%rdi
  call   <fread_string@plt>
  mov    %rbx,%rdi
  call   <fread_string@plt>
  lea    0xc(%rsp),%r12
  mov    %r12,%rdx
  lea    D222(%rip),%r13
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D108(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D150(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D45(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D147(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D126(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D136(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D203(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D86(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r12,%rdx
  lea    D214(%rip),%r13
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D99(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r12,%rdx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D179(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  lea    D194(%rip),%r12
  jmp    L12
L63:
  mov    %rbx,%rdi
  call   <fread_string@plt>
  mov    %rbx,%rdi
  call   <fread_string@plt>
L12:
  lea    0x10(%rsp),%rdx
  mov    %r12,%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  cmpb   $0x45,0x10(%rsp)
  je     L63
  mov    $0x2,%r12d
L14:
  cmpb   $0x41,0x10(%rsp)
  jne    L87
  lea    0xc(%rsp),%r13
  mov    %r13,%rdx
  lea    D222(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D53(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    %r13,%rdx
  lea    D214(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D181(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  lea    0x10(%rsp),%rdx
  lea    D194(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fscanf@plt>
  mov    %eax,%edi
  lea    D72(%rip),%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  sub    $0x1,%r12d
  jne    L14
L87:
  lea    0x8(%rsp),%rdx
  lea    0x10(%rsp),%rdi
  mov    %r15,%rsi
  call   <sscanf@plt>
  mov    %eax,%edi
  mov    %r14,%rcx
  mov    0x8(%rsp),%edx
  mov    $0x1,%esi
  call   <assume@plt>
  mov    0x8(%rsp),%edx
  cmp    %ebp,%edx
  jl     L59
L60:
  mov    0x8(%rsp),%ebp
  mov    %rbx,%rdi
  call   <fread_string@plt>
  cmpb   $0x24,(%rax)
  jne    L46
  mov    0x118(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L18
  add    $0x128,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L18:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D194
data_type: string
name: parse_data
arguments: data_label: D152
data_type: string
name: parse_data
arguments: data_label: D180
data_type: string
name: parse_data
arguments: data_label: D226
data_type: string
name: parse_data
arguments: data_label: D234
data_type: string
name: parse_data
arguments: data_label: D222
data_type: string
name: parse_data
arguments: data_label: D108
data_type: string
name: parse_data
arguments: data_label: D150
data_type: string
name: parse_data
arguments: data_label: D45
data_type: string
name: parse_data
arguments: data_label: D147
data_type: string
name: parse_data
arguments: data_label: D126
data_type: string
name: parse_data
arguments: data_label: D136
data_type: string
name: parse_data
arguments: data_label: D203
data_type: string
name: parse_data
arguments: data_label: D86
data_type: string
name: parse_data
arguments: data_label: D214
data_type: string
name: parse_data
arguments: data_label: D99
data_type: string
name: parse_data
arguments: data_label: D179
data_type: string
name: parse_data
arguments: data_label: D53
data_type: string
name: parse_data
arguments: data_label: D181
data_type: string
name: parse_data
arguments: data_label: D72
data_type: string

tool: D194:  %s 


tool: D152: First #xxx number

tool: D180:  #%d


tool: D226: Reading #xxx

tool: D234: Error - #'s not in order.

tool: D222:  %d 

tool: D108: Error reading type flag

tool: D150: Extra Flag

tool: D45: wear_flags

tool: D147: value[0]

tool: D126: value[1]

tool: D136: value[2]

tool: D203: value[3]

tool: D86: Weight

tool: D214:  %d 


tool: D99: Cost

tool: D179: Cost Per Day

tool: D53: affected location

tool: D181: Modifier

tool: D72: Next string with E/A/$

assistant: ```c
void check_objects(FILE *fl) {
  int virtual_nr, old_virtual, antal, flag;
  char *temp;
  struct obj_data *obj;
  int tmp, i;
  char chk[256];
  struct extra_descr_data *new_descr;
  old_virtual = -1;
  rewind(fl);
  antal = fscanf(fl, " %s \n", chk);
  assume(antal, 1, virtual_nr, "First #xxx number");
  do {
    antal = sscanf(chk, " #%d\n", &virtual_nr);
    assume(antal, 1, virtual_nr, "Reading #xxx");
    if (old_virtual > virtual_nr)
      assume(0, 1, virtual_nr, "Error - #'s not in order.");
    old_virtual = virtual_nr;
    temp = fread_string(fl);
    if (flag = (*temp != '$')) {
      temp = fread_string(fl);
      temp = fread_string(fl);
      temp = fread_string(fl);
      antal = fscanf(fl, " %d ", &tmp);
      assume(antal, 1, virtual_nr, "Error reading type flag");
      antal = fscanf(fl, " %d ", &tmp);
      assume(antal, 1, virtual_nr, "Extra Flag");
      antal = fscanf(fl, " %d ", &tmp);
      assume(antal, 1, virtual_nr, "wear_flags");
      antal = fscanf(fl, " %d ", &tmp);
      assume(antal, 1, virtual_nr, "value[0]");
      antal = fscanf(fl, " %d ", &tmp);
      assume(antal, 1, virtual_nr, "value[1]");
      antal = fscanf(fl, " %d ", &tmp);
      assume(antal, 1, virtual_nr, "value[2]");
      antal = fscanf(fl, " %d ", &tmp);
      assume(antal, 1, virtual_nr, "value[3]");
      antal = fscanf(fl, " %d ", &tmp);
      assume(antal, 1, virtual_nr, "Weight");
      antal = fscanf(fl, " %d \n", &tmp);
      assume(antal, 1, virtual_nr, "Cost");
      antal = fscanf(fl, " %d \n", &tmp);
      assume(antal, 1, virtual_nr, "Cost Per Day");
      while (fscanf(fl, " %s \n", chk), *chk == 'E') {
        temp = fread_string(fl);
        temp = fread_string(fl);
      }
      for (i = 0; (i < 2) && (*chk == 'A'); i++) {
        antal = fscanf(fl, " %d ", &tmp);
        assume(antal, 1, virtual_nr, "affected location");
        antal = fscanf(fl, " %d \n", &tmp);
        assume(antal, 1, virtual_nr, "Modifier");
        antal = fscanf(fl, " %s \n", chk);
        assume(antal, 1, virtual_nr, "Next string with E/A/$");
      }
    }
  } while (flag);
}
```