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

```asm
<escape_character>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %edi,%eax
  mov    %rsi,-0x10(%rbp)
  mov    %al,-0x4(%rbp)
  movsbl -0x4(%rbp),%eax
  cmp    $0x27,%eax
  jg     L31
  test   %eax,%eax
  js     L13
  cmp    $0x27,%eax
  ja     L13
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D73(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D73(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
L31:
  cmp    $0x5c,%eax
  je     L35
  jmp    L13
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D41(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D113(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D135(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D110(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D95(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D103(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D132(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D124(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
L35:
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D98(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D115(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
  mov    -0x10(%rbp),%rax
  mov    $0x5,%edx
  lea    D31(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  jmp    L109
L13:
  cmpb   $0x1f,-0x4(%rbp)
  jle    L159
  cmpb   $0x7f,-0x4(%rbp)
  je     L159
  movzbl -0x4(%rbp),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,%ecx
  lea    D3(%rip),%rdx
  mov    $0x5,%esi
  mov    %rax,%rdi
  call   <snprintf@plt>
  jmp    L109
L159:
  movzbl -0x4(%rbp),%eax
  movzbl %al,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,%ecx
  lea    D83(%rip),%rdx
  mov    $0x5,%esi
  mov    %rax,%rdi
  call   <snprintf@plt>
L109:
  mov    -0x10(%rbp),%rax
  movb   $0x0,0x4(%rax)
  mov    -0x10(%rbp),%rax
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D41
data_type: string
name: disassemble_data
arguments: data_tag: D113
data_type: string
name: disassemble_data
arguments: data_tag: D135
data_type: string
name: disassemble_data
arguments: data_tag: D110
data_type: string
name: disassemble_data
arguments: data_tag: D95
data_type: string
name: disassemble_data
arguments: data_tag: D103
data_type: string
name: disassemble_data
arguments: data_tag: D132
data_type: string
name: disassemble_data
arguments: data_tag: D124
data_type: string
name: disassemble_data
arguments: data_tag: D98
data_type: string
name: disassemble_data
arguments: data_tag: D115
data_type: string
name: disassemble_data
arguments: data_tag: D31
data_type: string
name: disassemble_data
arguments: data_tag: D3
data_type: string
name: disassemble_data
arguments: data_tag: D83
data_type: string

tool: D41: \0

tool: D113: \a

tool: D135: \b

tool: D110: \f

tool: D95: \n

tool: D103: \r

tool: D132: \t

tool: D124: \v

tool: D98: \\

tool: D115: \'

tool: D31: \"

tool: D3: %c

tool: D83: \x%02x

assistant: ```c
const char *escape_character(char ch, char (*buf)[5]) {
  switch (ch) {
  case '\x00':
    strncpy(*buf, "\\0", 5);
    break;
  case '\x07':
    strncpy(*buf, "\\a", 5);
    break;
  case '\x08':
    strncpy(*buf, "\\b", 5);
    break;
  case '\x0c':
    strncpy(*buf, "\\f", 5);
    break;
  case '\x0a':
    strncpy(*buf, "\\n", 5);
    break;
  case '\x0d':
    strncpy(*buf, "\\r", 5);
    break;
  case '\x09':
    strncpy(*buf, "\\t", 5);
    break;
  case '\x0b':
    strncpy(*buf, "\\v", 5);
    break;
  case '\\':
    strncpy(*buf, "\\\\", 5);
    break;
  case '\'':
    strncpy(*buf, "\\\'", 5);
    break;
  case '\"':
    strncpy(*buf, "\\\"", 5);
    break;
  default:
    if (ch >= '\x20' && ch < '\x7f')
      snprintf(*buf, 5, "%c", ch);
    else
      snprintf(*buf, 5, "\\x%02x", (unsigned char)ch);
  }
  (*buf)[4] = '\0';
  return (char *)buf;
}
```