user: Translate the below assembly code into C programming language:

```asm
<makeextralist>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %edi,%ebx
  mov    %rsi,%rdi
  sub    $0x8,%rsp
  call   <strlen@plt>
  mov    $0x4,%esi
  lea    0xa(%rax),%rdi
  mov    %rax,%r13
  call   <calloc@plt>
  mov    %rax,%r12
  test   %rax,%rax
  je     L16
  mov    %r13,%rdx
  mov    %rbp,%rsi
  mov    %rax,%rdi
  call   <mbstowcs@plt>
  cmp    $0xffffffffffffffff,%rax
  jne    L2
  test   %r13,%r13
  je     L230
  lea    (%r12,%r13,4),%rax
  lea    0x0(%rbp,%r13,1),%rdx
  cmp    %rax,%rbp
  setae  %al
  cmp    %rdx,%r12
  setae  %dl
  or     %dl,%al
  je     L190
  lea    -0x1(%r13),%rax
  cmp    $0xe,%rax
  jbe    L190
  mov    %r13,%rcx
  mov    %rbp,%rdx
  pxor   %xmm5,%xmm5
  mov    %r12,%rax
  and    $0xfffffffffffffff0,%rcx
  pxor   %xmm3,%xmm3
  add    %rbp,%rcx
  nopl   0x0(%rax)
L7:
  movdqu (%rdx),%xmm0
  movdqa %xmm5,%xmm2
  add    $0x10,%rdx
  add    $0x40,%rax
  pcmpgtb %xmm0,%xmm2
  movdqa %xmm0,%xmm1
  punpcklbw %xmm2,%xmm1
  punpckhbw %xmm2,%xmm0
  movdqa %xmm3,%xmm2
  pcmpgtw %xmm1,%xmm2
  movdqa %xmm1,%xmm4
  punpckhwd %xmm2,%xmm1
  punpcklwd %xmm2,%xmm4
  movdqa %xmm0,%xmm2
  movups %xmm1,-0x30(%rax)
  movdqa %xmm3,%xmm1
  pcmpgtw %xmm0,%xmm1
  movups %xmm4,-0x40(%rax)
  punpcklwd %xmm1,%xmm2
  punpckhwd %xmm1,%xmm0
  movups %xmm2,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
  cmp    %rcx,%rdx
  jne    L7
  mov    %r13,%rax
  and    $0xfffffffffffffff0,%rax
  test   $0xf,%r13b
  je     L230
  movsbl 0x0(%rbp,%rax,1),%ecx
  lea    0x0(,%rax,4),%rdx
  mov    %ecx,(%r12,%rax,4)
  lea    0x1(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0x1(%rbp,%rax,1),%ecx
  mov    %ecx,0x4(%r12,%rdx,1)
  lea    0x2(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0x2(%rbp,%rax,1),%ecx
  mov    %ecx,0x8(%r12,%rdx,1)
  lea    0x3(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0x3(%rbp,%rax,1),%ecx
  mov    %ecx,0xc(%r12,%rdx,1)
  lea    0x4(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0x4(%rbp,%rax,1),%ecx
  mov    %ecx,0x10(%r12,%rdx,1)
  lea    0x5(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0x5(%rbp,%rax,1),%ecx
  mov    %ecx,0x14(%r12,%rdx,1)
  lea    0x6(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0x6(%rbp,%rax,1),%ecx
  mov    %ecx,0x18(%r12,%rdx,1)
  lea    0x7(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0x7(%rbp,%rax,1),%ecx
  mov    %ecx,0x1c(%r12,%rdx,1)
  lea    0x8(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0x8(%rbp,%rax,1),%ecx
  mov    %ecx,0x20(%r12,%rdx,1)
  lea    0x9(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0x9(%rbp,%rax,1),%ecx
  mov    %ecx,0x24(%r12,%rdx,1)
  lea    0xa(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0xa(%rbp,%rax,1),%ecx
  mov    %ecx,0x28(%r12,%rdx,1)
  lea    0xb(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0xb(%rbp,%rax,1),%ecx
  mov    %ecx,0x2c(%r12,%rdx,1)
  lea    0xc(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0xc(%rbp,%rax,1),%ecx
  mov    %ecx,0x30(%r12,%rdx,1)
  lea    0xd(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0xd(%rbp,%rax,1),%ecx
  mov    %ecx,0x34(%r12,%rdx,1)
  lea    0xe(%rax),%rcx
  cmp    %rcx,%r13
  jbe    L230
  movsbl 0xe(%rbp,%rax,1),%eax
  mov    %eax,0x38(%r12,%rdx,1)
  nopl   (%rax)
L230:
  lea    (%r12,%r13,4),%rax
  jmp    L83
  xchg   %ax,%ax
L2:
  mov    %r12,%rdi
  call   <wcslen@plt>
  cltq
  lea    (%r12,%rax,4),%rax
L83:
  test   $0x10,%bh
  je     L219
  movdqa D5(%rip),%xmm0
  add    $0x10,%rax
  movups %xmm0,-0x10(%rax)
L219:
  test   $0x4,%bl
  je     L147
  movl   $0x20,(%rax)
  add    $0x4,%rax
L147:
  test   $0x8,%bl
  je     L208
  movl   $0x9,(%rax)
  add    $0x4,%rax
L208:
  test   $0x10,%bl
  je     L30
  movl   $0xa,(%rax)
  add    $0x4,%rax
L30:
  and    $0x40,%ebx
  jne    L180
  movl   $0x5c,(%rax)
  add    $0x4,%rax
L180:
  movl   $0x0,(%rax)
L16:
  add    $0x8,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
  nopl   0x0(%rax,%rax,1)
L190:
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L194:
  movsbl 0x0(%rbp,%rax,1),%edx
  mov    %edx,(%r12,%rax,4)
  add    $0x1,%rax
  cmp    %rax,%r13
  jne    L194
  jmp    L230
```

tool_calls: name: parse_data
arguments: data_label: D5
data_type: byte[16]

tool: {"D5": [0x2a,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x23,0x00,0x00,0x00]}

assistant: ```c
wchar_t *makeextralist(int flags, const char *src) {
  wchar_t *dst, *d;
  size_t len;
  len = strlen(src);
  if ((dst = calloc(len + 10, sizeof(*dst))) == NULL) {
    return NULL;
  }
  if (mbstowcs(dst, src, len) == (size_t)-1) {
    size_t i;
    for (i = 0; i < len; i++) {
      dst[i] = (wint_t)(u_char)src[i];
    }
    d = dst + len;
  } else {
    d = dst + wcslen(dst);
  }
  if (flags & 0x1000) {
    *d++ = L'*';
    *d++ = L'?';
    *d++ = L'[';
    *d++ = L'#';
  }
  if (flags & 0x0004) {
    *d++ = L' ';
  }
  if (flags & 0x0008) {
    *d++ = L'\t';
  }
  if (flags & 0x0010) {
    *d++ = L'\n';
  }
  if ((flags & 0x0040) == 0) {
    *d++ = L'\\';
  }
  *d = L'\0';
  return dst;
}
```