user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<decodeString>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%r12
  movzbl (%rsi),%eax
  test   %al,%al
  je     L254
  mov    %rsi,%rbx
  mov    %edx,%ebp
  lea    0x1(%rsi),%r13
  lea    -0x1(%rdx),%r14d
  test   %edx,%edx
  jne    L203
L254:
  movb   $0x0,(%r12)
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L148:
  mov    $0x2,%edx
  lea    D2(%rip),%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  cmp    $0x1,%r14d
  jbe    L100
  test   %rax,%rax
  jne    L100
  movb   $0x20,(%r12)
  sub    $0x3,%ebp
  add    $0x3,%rbx
  lea    0x1(%r12),%r12
L219:
  lea    0x1(%rbx),%r13
  movzbl (%rbx),%eax
  test   %al,%al
  je     L254
  lea    -0x1(%rbp),%r14d
  test   %ebp,%ebp
  je     L254
L203:
  cmp    $0x25,%al
  je     L148
  mov    %al,(%r12)
  mov    %r14d,%ebp
  mov    %r13,%rbx
  lea    0x1(%r12),%r12
  jmp    L219
L100:
  mov    $0x5,%edx
  lea    D36(%rip),%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  cmp    $0x4,%r14d
  seta   %r15b
  test   %rax,%rax
  jne    L94
  test   %r15b,%r15b
  je     L94
  movb   $0x41,(%r12)
  movb   $0x65,0x1(%r12)
  sub    $0x6,%ebp
  add    $0x6,%rbx
  lea    0x2(%r12),%r12
  jmp    L219
L94:
  mov    $0x5,%edx
  lea    D7(%rip),%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L19
  test   %r15b,%r15b
  je     L19
  movb   $0x55,(%r12)
  movb   $0x65,0x1(%r12)
  sub    $0x6,%ebp
  add    $0x6,%rbx
  lea    0x2(%r12),%r12
  jmp    L219
L19:
  mov    $0x5,%edx
  lea    D50(%rip),%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L228
  test   %r15b,%r15b
  je     L228
  movb   $0x4f,(%r12)
  movb   $0x65,0x1(%r12)
  sub    $0x6,%ebp
  add    $0x6,%rbx
  lea    0x2(%r12),%r12
  jmp    L219
L228:
  mov    $0x5,%edx
  lea    D76(%rip),%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L267
  test   %r15b,%r15b
  je     L267
  movb   $0x61,(%r12)
  movb   $0x65,0x1(%r12)
  sub    $0x6,%ebp
  add    $0x6,%rbx
  lea    0x2(%r12),%r12
  jmp    L219
L267:
  mov    $0x5,%edx
  lea    D9(%rip),%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L178
  test   %r15b,%r15b
  je     L178
  movb   $0x75,(%r12)
  movb   $0x65,0x1(%r12)
  sub    $0x6,%ebp
  add    $0x6,%rbx
  lea    0x2(%r12),%r12
  jmp    L219
L178:
  mov    $0x5,%edx
  lea    D75(%rip),%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L260
  test   %r15b,%r15b
  je     L260
  movb   $0x6f,(%r12)
  movb   $0x65,0x1(%r12)
  sub    $0x6,%ebp
  add    $0x6,%rbx
  lea    0x2(%r12),%r12
  jmp    L219
L260:
  mov    $0x5,%edx
  lea    D18(%rip),%rsi
  mov    %r13,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L86
  test   %r15b,%r15b
  jne    L265
L86:
  mov    %r14d,%ebp
  mov    %r13,%rbx
  jmp    L219
L265:
  movb   $0x73,(%r12)
  movb   $0x73,0x1(%r12)
  sub    $0x6,%ebp
  add    $0x6,%rbx
  lea    0x2(%r12),%r12
  jmp    L219
```

tool_calls: name: unpack_data
arguments: tag: D2
data_type: string
name: unpack_data
arguments: tag: D36
data_type: string
name: unpack_data
arguments: tag: D7
data_type: string
name: unpack_data
arguments: tag: D50
data_type: string
name: unpack_data
arguments: tag: D76
data_type: string
name: unpack_data
arguments: tag: D9
data_type: string
name: unpack_data
arguments: tag: D75
data_type: string
name: unpack_data
arguments: tag: D18
data_type: string

tool: D2: 20

tool: D36: C3%84;

tool: D7: C3%9C;

tool: D50: C3%96;

tool: D76: C3%A4;

tool: D9: C3%BC;

tool: D75: C3%B6;

tool: D18: C3%9F;

assistant: ```c
void decodeString(char *dest, char *src, unsigned int len) {
  char c;
  while ((c = *src++) && len--) {
    if (c == '%') {
      if (strncmp(src, "20", 2) == 0 && len >= 2) {
        *dest++ = ' ';
        len -= 2;
        src += 2;
      } else if (strncmp(src, "C3%84;", 5) == 0 && len >= 5) {
        *dest++ = 'A';
        *dest++ = 'e';
        len -= 5;
        src += 5;
      } else if (strncmp(src, "C3%9C;", 5) == 0 && len >= 5) {
        *dest++ = 'U';
        *dest++ = 'e';
        len -= 5;
        src += 5;
      } else if (strncmp(src, "C3%96;", 5) == 0 && len >= 5) {
        *dest++ = 'O';
        *dest++ = 'e';
        len -= 5;
        src += 5;
      } else if (strncmp(src, "C3%A4;", 5) == 0 && len >= 5) {
        *dest++ = 'a';
        *dest++ = 'e';
        len -= 5;
        src += 5;
      } else if (strncmp(src, "C3%BC;", 5) == 0 && len >= 5) {
        *dest++ = 'u';
        *dest++ = 'e';
        len -= 5;
        src += 5;
      } else if (strncmp(src, "C3%B6;", 5) == 0 && len >= 5) {
        *dest++ = 'o';
        *dest++ = 'e';
        len -= 5;
        src += 5;
      } else if (strncmp(src, "C3%9F;", 5) == 0 && len >= 5) {
        *dest++ = 's';
        *dest++ = 's';
        len -= 5;
        src += 5;
      }
    } else
      *dest++ = c;
  }
  *dest++ = 0;
}
```