user: Converte this assembly snippet into its equivalent C code:

```asm
<error>:
  endbr64
  cmp    $0x4,%edi
  ja     L18
  sub    $0x8,%rsp
  mov    %edx,%r9d
  mov    %edi,%edi
  lea    D211(%rip),%rdx
  movslq (%rdx,%rdi,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  movsbl %sil,%edx
  sub    $0x8,%rsp
  push   %r9
  lea    D105(%rip),%rax
  push   %rax
  push   %r8
  lea    D86(%rip),%r9
  mov    %ecx,%r8d
  lea    D136(%rip),%rcx
  lea    D141(%rip),%rsi
  lea    D50(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x20,%rsp
L10:
  add    $0x8,%rsp
  ret
  movsbl %sil,%edx
  sub    $0x8,%rsp
  push   %r9
  lea    D105(%rip),%rax
  push   %rax
  push   %r8
  lea    D86(%rip),%r9
  mov    %ecx,%r8d
  lea    D136(%rip),%rcx
  lea    D139(%rip),%rsi
  lea    D50(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x20,%rsp
  jmp    L10
  movsbl %sil,%edx
  sub    $0x8,%rsp
  push   %r9
  lea    D105(%rip),%rax
  push   %rax
  push   %r8
  lea    D86(%rip),%r9
  mov    %ecx,%r8d
  lea    D136(%rip),%rcx
  lea    D51(%rip),%rsi
  lea    D50(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x20,%rsp
  jmp    L10
  movsbl %sil,%edx
  sub    $0x8,%rsp
  push   %r9
  lea    D105(%rip),%rax
  push   %rax
  push   %r8
  lea    D86(%rip),%r9
  mov    %ecx,%r8d
  lea    D29(%rip),%rcx
  lea    D106(%rip),%rsi
  lea    D50(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x20,%rsp
  jmp    L10
  movsbl %sil,%edx
  sub    $0x8,%rsp
  push   %r9
  lea    D105(%rip),%rax
  push   %rax
  push   %r8
  lea    D86(%rip),%r9
  mov    %ecx,%r8d
  lea    D20(%rip),%rcx
  lea    D61(%rip),%rsi
  lea    D50(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x20,%rsp
  jmp    L10
L18:
  ret
```

tool_calls: name: read_data
arguments: data_tag: D105
type_infered: string
name: read_data
arguments: data_tag: D86
type_infered: string
name: read_data
arguments: data_tag: D136
type_infered: string
name: read_data
arguments: data_tag: D141
type_infered: string
name: read_data
arguments: data_tag: D50
type_infered: string
name: read_data
arguments: data_tag: D139
type_infered: string
name: read_data
arguments: data_tag: D51
type_infered: string
name: read_data
arguments: data_tag: D29
type_infered: string
name: read_data
arguments: data_tag: D106
type_infered: string
name: read_data
arguments: data_tag: D20
type_infered: string
name: read_data
arguments: data_tag: D61
type_infered: string

tool: D105:  #

tool: D86: , position 

tool: D136: ) @ Line 

tool: D141: 
Missing end symbol (

tool: D50: %s%c%s%d%s%d%s%d

tool: D139: 
Missing start symbol for matching (

tool: D51: 
Mismatched ending symbol (

tool: D29:  quote @ Line 

tool: D106: 
Mismatched 

tool: D20:  @ Line 

tool: D61: 
Missing quote at symbol 

assistant: ```c
void error(int type, char symbol, int location, int line, int line_pos) {
  if (type == 0) {
    printf("%s%c%s%d%s%d%s%d", "\nMissing end symbol (", symbol, ") @ Line ", line, ", position ", line_pos, " #", location);
  } else if (type == 1) {
    printf("%s%c%s%d%s%d%s%d", "\nMissing start symbol for matching (", symbol, ") @ Line ", line, ", position ", line_pos, " #", location);
  } else if (type == 2) {
    printf("%s%c%s%d%s%d%s%d", "\nMismatched ending symbol (", symbol, ") @ Line ", line, ", position ", line_pos, " #", location);
  } else if (type == 3) {
    printf("%s%c%s%d%s%d%s%d", "\nMismatched ", symbol, " quote @ Line ", line, ", position ", line_pos, " #", location);
  } else if (type == 4) {
    printf("%s%c%s%d%s%d%s%d", "\nMissing quote at symbol ", symbol, " @ Line ", line, ", position ", line_pos, " #", location);
  }
}
```