user: What is the c source code of the assembly code below?

```asm
<convcode>:
  endbr64
  comisd D51(%rip),%xmm0
  push   %rbp
  mov    %rsi,%rbp
  jb     L227
  cmp    $0x20,%edi
  ja     L53
  movabs $0x100010006,%rax
  bt     %rdi,%rax
  jb     L434
  cmp    $0x1,%edi
  je     L397
  cmp    $0x10,%edi
  jne    L317
L397:
  lea    0x1(%rbp),%r8
L256:
  movzbl 0x1(%rbp),%eax
  cmp    $0x31,%eax
  jne    L317
  cmpb   $0x53,0x1(%r8)
  je     L360
L195:
  cmp    $0x31,%eax
  jne    L317
  cmpb   $0x4c,0x1(%r8)
  jne    L191
  cmpb   $0x0,0x2(%r8)
  je     L303
L191:
  cmp    $0x31,%eax
  jne    L317
  cmpb   $0x58,0x1(%r8)
  jne    L317
  cmpb   $0x0,0x2(%r8)
  je     L303
  nop
L317:
  cmp    $0x20,%edi
  jbe    L105
  jmp    L53
  nopw   0x0(%rax,%rax,1)
L434:
  cmpb   $0x31,0x1(%rsi)
  lea    0x1(%rsi),%r8
  je     L80
L425:
  cmp    $0x10,%edi
  je     L256
  cmp    $0x1,%edi
  je     L256
L105:
  movabs $0x100010002,%rax
  bt     %rdi,%rax
  jb     L463
L53:
  comisd D51(%rip),%xmm0
  jb     L227
L495:
  cmp    $0x4,%edi
  jne    L227
  movzbl 0x1(%rbp),%eax
  lea    0x1(%rbp),%rdi
  cmp    $0x31,%eax
  je     L77
L243:
  cmp    $0x32,%eax
  je     L479
  nopl   (%rax)
L227:
  lea    D132(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L349
  lea    D35(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L349
  lea    D104(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L349
  lea    D159(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L349
  lea    D50(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L382
  lea    D27(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L382
  lea    D36(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L382
  lea    D58(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L382
  lea    D139(%rip),%rsi
  mov    %rbp,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L382
  movb   $0x0,0x2(%rbp)
  pop    %rbp
  ret
  nopl   (%rax)
L349:
  mov    %rbp,%rdi
  lea    D24(%rip),%rsi
  pop    %rbp
  jmp    1060 <strcpy@plt>
L80:
  cmpb   $0x43,0x1(%r8)
  jne    L425
  cmpb   $0x0,0x2(%r8)
  jne    L425
  lea    D63(%rip),%rsi
  mov    %r8,%rdi
  pop    %rbp
  jmp    1060 <strcpy@plt>
  cs nopw 0x0(%rax,%rax,1)
L463:
  movzbl 0x1(%rbp),%eax
  lea    0x1(%rbp),%r8
  cmp    $0x32,%eax
  jne    L495
  cmpb   $0x53,0x1(%r8)
  je     L119
L96:
  cmp    $0x32,%eax
  jne    L495
  cmpb   $0x4c,0x1(%r8)
  je     L166
L415:
  cmp    $0x32,%eax
  jne    L495
  cmpb   $0x58,0x1(%r8)
  jne    L495
  cmpb   $0x0,0x2(%r8)
  je     L76
  jmp    L495
  nopl   0x0(%rax)
L360:
  cmpb   $0x0,0x2(%r8)
  jne    L195
L303:
  lea    D177(%rip),%rsi
  mov    %r8,%rdi
  pop    %rbp
  jmp    1060 <strcpy@plt>
  nopl   0x0(%rax,%rax,1)
L77:
  cmpb   $0x43,0x1(%rdi)
  jne    L243
  cmpb   $0x0,0x2(%rdi)
  jne    L243
  lea    D63(%rip),%rsi
  pop    %rbp
  jmp    1060 <strcpy@plt>
  nopl   0x0(%rax)
L479:
  cmpb   $0x43,0x1(%rdi)
  jne    L227
  cmpb   $0x0,0x2(%rdi)
  jne    L227
  lea    D173(%rip),%rsi
  pop    %rbp
  jmp    1060 <strcpy@plt>
  nopl   0x0(%rax)
L119:
  cmpb   $0x0,0x2(%r8)
  jne    L96
L76:
  lea    D2(%rip),%rsi
  mov    %r8,%rdi
  pop    %rbp
  jmp    1060 <strcpy@plt>
  nopl   0x0(%rax,%rax,1)
L382:
  mov    %rbp,%rdi
  lea    D143(%rip),%rsi
  pop    %rbp
  jmp    1060 <strcpy@plt>
  nopl   0x0(%rax,%rax,1)
L166:
  cmpb   $0x0,0x2(%r8)
  je     L76
  jmp    L415
```

tool_calls: name: parse_data
arguments: tag: D51
type_guessed: f64
name: parse_data
arguments: tag: D132
type_guessed: string
name: parse_data
arguments: tag: D35
type_guessed: string
name: parse_data
arguments: tag: D104
type_guessed: string
name: parse_data
arguments: tag: D159
type_guessed: string
name: parse_data
arguments: tag: D50
type_guessed: string
name: parse_data
arguments: tag: D27
type_guessed: string
name: parse_data
arguments: tag: D36
type_guessed: string
name: parse_data
arguments: tag: D58
type_guessed: string
name: parse_data
arguments: tag: D139
type_guessed: string
name: parse_data
arguments: tag: D24
type_guessed: string
name: parse_data
arguments: tag: D63
type_guessed: string
name: parse_data
arguments: tag: D177
type_guessed: string
name: parse_data
arguments: tag: D173
type_guessed: string
name: parse_data
arguments: tag: D2
type_guessed: string
name: parse_data
arguments: tag: D143
type_guessed: string

tool: D51: 2.12

tool: D132: C1P

tool: D35: C1W

tool: D104: C1Y

tool: D159: C1N

tool: D50: C2P

tool: D27: C2W

tool: D36: C2Y

tool: D58: C2N

tool: D139: C2D

tool: D24: P1

tool: D63: A

tool: D177: B

tool: D173: D

tool: D2: C

tool: D143: P2

assistant: ```c
void convcode(double ver, int sys, char *type) {
  if (ver >= 2.12 && (sys == 0x01 || sys == 0x10 || sys == 0x02 || sys == 0x20) && !strcmp(type + 1, "1C")) {
    strcpy(type + 1, "A");
  } else if (ver >= 2.12 && (sys == 0x01 || sys == 0x10) && (!strcmp(type + 1, "1S") || !strcmp(type + 1, "1L") || !strcmp(type + 1, "1X"))) {
    strcpy(type + 1, "B");
  } else if (ver >= 2.12 && (sys == 0x01 || sys == 0x10 || sys == 0x20) && (!strcmp(type + 1, "2S") || !strcmp(type + 1, "2L") || !strcmp(type + 1, "2X"))) {
    strcpy(type + 1, "C");
  } else if (ver >= 2.12 && sys == 0x04 && !strcmp(type + 1, "1C")) {
    strcpy(type + 1, "A");
  } else if (ver >= 2.12 && sys == 0x04 && !strcmp(type + 1, "2C")) {
    strcpy(type + 1, "D");
  } else if (!strcmp(type, "C1P") || !strcmp(type, "C1W") || !strcmp(type, "C1Y") || !strcmp(type, "C1N")) {
    strcpy(type, "P1");
  } else if (!strcmp(type, "C2P") || !strcmp(type, "C2W") || !strcmp(type, "C2Y") || !strcmp(type, "C2N") || !strcmp(type, "C2D")) {
    strcpy(type, "P2");
  } else {
    type[2] = '\0';
  }
}
```