user: What would the C source look like for the assembly code provided here:

```asm
<flu_n_unescape>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rdi,%r12
  mov    %rsi,%r13
  lea    0x1(%rsi),%rdi
  mov    $0x1,%esi
  call   <calloc@plt>
  mov    %rax,%r14
  test   %r13,%r13
  je     L23
  mov    $0x0,%ebp
  mov    $0x0,%ebx
  lea    D6(%rip),%r15
  jmp    L37
L79:
  mov    %al,(%r14,%rbp,1)
  lea    0x1(%rbp),%rbp
  jmp    L31
L42:
  movb   $0x5c,(%r14,%rbp,1)
  lea    0x1(%rbp),%rbp
L88:
  add    $0x1,%rbx
L31:
  add    $0x1,%rbx
  cmp    %rbx,%r13
  jbe    L23
L37:
  movzbl (%r12,%rbx,1),%eax
  cmp    $0x5c,%al
  jne    L79
  movzbl 0x1(%r12,%rbx,1),%eax
  cmp    $0x5c,%al
  je     L42
  cmp    $0x22,%al
  je     L7
  lea    -0x62(%rax),%edx
  cmp    $0x13,%dl
  ja     L30
  ja     L30
  movzbl %dl,%edx
  movslq (%r15,%rdx,4),%rdx
  add    %r15,%rdx
  notrack jmp *%rdx
L7:
  movb   $0x22,(%r14,%rbp,1)
  lea    0x1(%rbp),%rbp
  jmp    L88
  movb   $0x8,(%r14,%rbp,1)
  lea    0x1(%rbp),%rbp
  jmp    L88
  movb   $0xc,(%r14,%rbp,1)
  lea    0x1(%rbp),%rbp
  jmp    L88
  movb   $0xa,(%r14,%rbp,1)
  lea    0x1(%rbp),%rbp
  jmp    L88
  movb   $0xd,(%r14,%rbp,1)
  lea    0x1(%rbp),%rbp
  jmp    L88
  movb   $0x9,(%r14,%rbp,1)
  lea    0x1(%rbp),%rbp
  jmp    L88
  lea    0x2(%r12,%rbx,1),%rdi
  mov    $0x4,%esi
  call   <strndup@plt>
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,0x8(%rsp)
  mov    %rax,%rdi
  call   <strtol@plt>
  mov    %eax,0x4(%rsp)
  mov    0x8(%rsp),%rdi
  call   <free@plt>
  mov    0x4(%rsp),%eax
  cmp    $0x7f,%eax
  ja     L74
  mov    %al,(%r14,%rbp,1)
  lea    0x1(%rbp),%rbp
L135:
  add    $0x4,%rbx
  jmp    L88
L74:
  mov    0x4(%rsp),%ecx
  cmp    $0x7ff,%ecx
  ja     L102
  lea    0x1(%rbp),%rdx
  mov    %ecx,%eax
  shr    $0x6,%eax
  or     $0xffffffc0,%eax
  mov    %al,(%r14,%rbp,1)
  add    $0x2,%rbp
  mov    %ecx,%eax
  and    $0x3f,%eax
  or     $0xffffff80,%eax
  mov    %al,(%r14,%rdx,1)
  jmp    L135
L102:
  mov    0x4(%rsp),%ecx
  mov    %ecx,%eax
  shr    $0xc,%eax
  or     $0xffffffe0,%eax
  mov    %al,(%r14,%rbp,1)
  lea    0x2(%rbp),%rdx
  mov    %ecx,%eax
  shr    $0x6,%eax
  and    $0x3f,%eax
  or     $0xffffff80,%eax
  mov    %al,0x1(%r14,%rbp,1)
  add    $0x3,%rbp
  mov    %ecx,%eax
  and    $0x3f,%eax
  or     $0xffffff80,%eax
  mov    %al,(%r14,%rdx,1)
  jmp    L135
L30:
  lea    0x1(%rbp),%rdx
  movb   $0x5c,(%r14,%rbp,1)
  add    $0x2,%rbp
  mov    %al,(%r14,%rdx,1)
  jmp    L88
L23:
  mov    %r14,%rax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
char *flu_n_unescape(const char *s, size_t n) {
  char *d = calloc(n + 1, sizeof(char));
  for (size_t is = 0, id = 0; is < n; is++) {
    if (s[is] != '\\') {
      d[id++] = s[is];
      continue;
    }
    char c = s[is + 1];
    if (c == '\\')
      d[id++] = '\\';
    else if (c == '"')
      d[id++] = '"';
    else if (c == 'b')
      d[id++] = '\b';
    else if (c == 'f')
      d[id++] = '\f';
    else if (c == 'n')
      d[id++] = '\n';
    else if (c == 'r')
      d[id++] = '\r';
    else if (c == 't')
      d[id++] = '\t';
    else if (c == 'u') {
      char *su = strndup(s + is + 2, 4);
      unsigned int u = strtol(su, NULL, 16);
      free(su);
      if (u < 0x80) {
        d[id++] = (char)u;
      } else if (u < 0x800) {
        d[id++] = (u >> 6) | 0xc0;
        d[id++] = (u & 0x3f) | 0x80;
      } else {
        d[id++] = (u >> 12) | 0xe0;
        d[id++] = ((u >> 6) & 0x3f) | 0x80;
        d[id++] = (u & 0x3f) | 0x80;
      }
      is += 4;
    } else {
      d[id++] = '\\';
      d[id++] = c;
    }
    is++;
  }
  return d;
}
```