user: 请从给定的汇编指令推导出C源代码:

```asm
<OUTSTRING>:
  endbr64
  push   %r13
  push   %r12
  xor    %r12d,%r12d
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x8,%rsp
  movzbl (%rdi),%eax
  cmp    $0x22,%al
  je     L94
  cmp    $0x27,%al
  jne    L7
  mov    $0x1,%r12d
L94:
  movsbl 0x1(%rbp),%esi
  lea    0x1(%rbp),%rbx
  test   %sil,%sil
  je     L5
  xor    %ebp,%ebp
  lea    D5(%rip),%r13
  jmp    L114
  nopl   0x0(%rax)
L110:
  cmp    $0x27,%sil
  je     L268
  cmp    $0x5c,%sil
  jne    L39
  test   %ebp,%ebp
  jne    L111
  mov    $0x1,%ebp
  nopl   (%rax)
L155:
  movsbl 0x1(%rbx),%esi
  add    $0x1,%rbx
  test   %sil,%sil
  je     L5
L114:
  cmp    $0x6e,%sil
  je     L262
  jle    L110
  cmp    $0x72,%sil
  je     L150
  cmp    $0x74,%sil
  jne    L117
  test   %ebp,%ebp
  je     L144
  mov    $0x9,%edi
  add    $0x1,%rbx
  xor    %ebp,%ebp
  call   <OUTBYTE@plt>
  movsbl (%rbx),%esi
  test   %sil,%sil
  jne    L114
L5:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax)
L39:
  cmp    $0x22,%sil
  jne    L117
  or     %r12d,%ebp
  je     L5
  mov    $0x22,%edi
  xor    %ebp,%ebp
  call   <OUTBYTE@plt>
  jmp    L155
  nopl   0x0(%rax)
L262:
  test   %ebp,%ebp
  je     L133
  mov    $0xa,%edi
  xor    %ebp,%ebp
  call   <OUTBYTE@plt>
  jmp    L155
  nopl   (%rax)
L268:
  xor    $0x1,%ebp
  and    %r12d,%ebp
  jne    L5
  mov    $0x27,%edi
  call   <OUTBYTE@plt>
  jmp    L155
  nop
L117:
  test   %ebp,%ebp
  jne    L280
L158:
  movsbl (%rbx),%edi
  call   <OUTBYTE@plt>
  jmp    L155
  nopl   0x0(%rax)
L150:
  test   %ebp,%ebp
  je     L170
  mov    $0xd,%edi
  xor    %ebp,%ebp
  call   <OUTBYTE@plt>
  jmp    L155
  nopl   (%rax)
L144:
  mov    $0x74,%edi
  call   <OUTBYTE@plt>
  jmp    L155
  nop
L133:
  mov    $0x6e,%edi
  call   <OUTBYTE@plt>
  jmp    L155
  nop
L170:
  mov    $0x72,%edi
  call   <OUTBYTE@plt>
  jmp    L155
  nop
L280:
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <instruction_error@plt>
  jmp    L158
  nopl   0x0(%rax)
L111:
  mov    $0x5c,%edi
  xor    %ebp,%ebp
  call   <OUTBYTE@plt>
  jmp    L155
  nopl   0x0(%rax)
L7:
  lea    D16(%rip),%rdi
  xor    %eax,%eax
  call   <instruction_error@plt>
  jmp    L94
```

tool_calls: name: parse_data
arguments: label: D5
type_infered: string
name: parse_data
arguments: label: D16
type_infered: string

tool: D5: Invalid escape sequence \%c in string

tool: D16: OUTSTRING <INTERNAL ERROR>. Not a string!

assistant: ```c
void OUTSTRING(char *string) {
  int stringt;
  int esc = 0;
  if (*string == '"')
    stringt = 0;
  else if (*string == '\'')
    stringt = 1;
  else
    instruction_error("OUTSTRING <INTERNAL ERROR>. Not a string!");
  string++;
  while (*string) {
    if (*string == '"') {
      if (stringt == 0 && !esc)
        break;
      OUTBYTE('"');
      esc = 0;
    } else if (*string == '\'') {
      if (stringt == 1 && !esc)
        break;
      OUTBYTE('\'');
      esc = 0;
    } else if (*string == 'n') {
      if (esc)
        OUTBYTE('\n');
      else
        OUTBYTE('n');
      esc = 0;
    } else if (*string == 't') {
      if (esc)
        OUTBYTE('\t');
      else
        OUTBYTE('t');
      esc = 0;
    } else if (*string == 'r') {
      if (esc)
        OUTBYTE('\r');
      else
        OUTBYTE('r');
      esc = 0;
    } else if (*string == '\\') {
      if (esc) {
        OUTBYTE('\\');
        esc = 0;
      } else
        esc = 1;
    } else {
      if (esc)
        instruction_error("Invalid escape sequence \\%c in string", *string);
      OUTBYTE(*string);
    }
    string++;
  }
}
```