user: 下面的汇编指令对应的C源代码是什么:

```asm
<parse_name>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x88,%rsp
  mov    %rdi,%rax
  mov    %rsi,%r14
  mov    %rdx,0x8(%rsp)
  mov    %rcx,0x10(%rsp)
  mov    %r8,0x18(%rsp)
  mov    %r9,%r13
  mov    %fs:0x28,%rdx
  mov    %rdx,0x78(%rsp)
  xor    %edx,%edx
  lea    0x20(%rsp),%rdi
  mov    %rax,%rsi
  call   <strcpy@plt>
  cmpb   $0x0,0x20(%rsp)
  je     L388
  lea    0x20(%rsp),%rbx
L125:
  movsbl (%rbx),%edi
  call   <tolower@plt>
  mov    %al,(%rbx)
  add    $0x1,%rbx
  cmpb   $0x0,(%rbx)
  jne    L125
  movzbl 0x20(%rsp),%r15d
  test   %r15b,%r15b
  je     L158
  mov    $0x0,%ebx
  lea    0x20(%rsp),%r12
  jmp    L330
L158:
  mov    $0x1,%eax
  jmp    L307
L35:
  mov    $0x5,%edx
  lea    D73(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L349
  orl    $0x2,(%r14)
  mov    0x10(%rsp),%rax
  addl   $0xff,(%rax)
L207:
  mov    0x0(%r13),%ecx
  test   %ecx,%ecx
  je     L66
L359:
  test   %r15b,%r15b
  je     L283
L330:
  cmpl   $0x0,0x0(%r13)
  jne    L226
  movslq %ebx,%rbp
  add    %r12,%rbp
  mov    $0x3,%edx
  lea    D32(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L35
  orl    $0x1,(%r14)
  mov    0x8(%rsp),%rax
  addl   $0xff,(%rax)
  jmp    L207
L349:
  mov    $0x4,%edx
  lea    D56(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L148
  orl    $0x4,(%r14)
  mov    0x18(%rsp),%rax
  addl   $0xff,(%rax)
  jmp    L207
L148:
  mov    $0x5,%edx
  lea    D54(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L395
  orl    $0x8,(%r14)
  mov    0x8(%rsp),%rax
  addl   $0xff,(%rax)
  mov    0x10(%rsp),%rax
  addl   $0xff,(%rax)
  mov    0x18(%rsp),%rax
  addl   $0xff,(%rax)
  jmp    L207
L395:
  mov    $0x7,%edx
  lea    D42(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L329
  orl    $0x10,(%r14)
  mov    0x8(%rsp),%rax
  addl   $0xff,(%rax)
  mov    0x18(%rsp),%rax
  addl   $0xff,(%rax)
  jmp    L207
L329:
  mov    $0x6,%edx
  lea    D88(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L169
  orl    $0x20,(%r14)
  mov    0x8(%rsp),%rax
  addl   $0xff,(%rax)
  mov    0x10(%rsp),%rax
  addl   $0xff,(%rax)
  jmp    L207
L169:
  mov    $0x4,%edx
  lea    D69(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L386
  orl    $0x40,(%r14)
  mov    0x18(%rsp),%rax
  addl   $0xff,(%rax)
  mov    0x10(%rsp),%rax
  addl   $0xff,(%rax)
  jmp    L207
L386:
  mov    $0x5,%edx
  lea    D29(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L333
  orl    $0x80,(%r14)
  jmp    L207
L333:
  mov    $0xb,%edx
  lea    D57(%rip),%rsi
  mov    %rbp,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L188
  movl   $0x1,0x0(%r13)
  jmp    L359
L66:
  movslq %ebx,%rax
  movzbl 0x20(%rsp,%rax,1),%edx
  test   $0xdf,%dl
  je     L364
  cmp    $0x2c,%dl
  je     L364
  add    $0x1,%ebx
  movslq %ebx,%rax
L73:
  mov    %eax,%ebx
  movzbl (%rax,%r12,1),%edx
  add    $0x1,%rax
  test   $0xdf,%dl
  je     L364
  cmp    $0x2c,%dl
  jne    L73
L364:
  test   %dl,%dl
  jne    L32
L11:
  test   %ecx,%ecx
  sete   %al
  jmp    L307
L32:
  movslq %ebx,%rax
  movzbl 0x20(%rsp,%rax,1),%r15d
  cmp    $0x2c,%r15b
  je     L160
  cmp    $0x20,%r15b
  jne    L359
L160:
  add    $0x1,%ebx
  movslq %ebx,%rax
L344:
  mov    %eax,%ebx
  movzbl (%rax,%r12,1),%r15d
  add    $0x1,%rax
  cmp    $0x2c,%r15b
  je     L344
  cmp    $0x20,%r15b
  je     L344
  jmp    L359
L226:
  mov    $0x1,%eax
L307:
  movzbl %al,%eax
  mov    0x78(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L144
  add    $0x88,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L388:
  mov    $0x1,%eax
  jmp    L307
L283:
  mov    $0x1,%eax
  jmp    L307
L188:
  mov    $0x1,%ecx
  jmp    L11
L144:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: tag: D73
data_type: string
name: disassemble_data
arguments: tag: D32
data_type: string
name: disassemble_data
arguments: tag: D56
data_type: string
name: disassemble_data
arguments: tag: D54
data_type: string
name: disassemble_data
arguments: tag: D42
data_type: string
name: disassemble_data
arguments: tag: D88
data_type: string
name: disassemble_data
arguments: tag: D69
data_type: string
name: disassemble_data
arguments: tag: D29
data_type: string
name: disassemble_data
arguments: tag: D57
data_type: string

tool: D73: green

tool: D32: red

tool: D56: blue

tool: D54: white

tool: D42: magenta

tool: D88: yellow

tool: D69: cyan

tool: D29: black

tool: D57: transparent

assistant: ```c
int parse_name(name, colors, R, G, B, transparent)
char name[];
int *colors, *R, *G, *B, *transparent;
{
  int i, stringptr = 0, badstring = 0;
  char c, tempstr[80];
  strcpy(tempstr, name);
  for (i = 0, c = tempstr[0]; c != '\0'; c = tempstr[++i])
    tempstr[i] = tolower(tempstr[i]);
  c = tempstr[0];
  while ((c != '\0') && !badstring && !(*transparent)) {
    if (strncmp(tempstr + stringptr, "red", 3) == 0) {
      *colors = *colors | 0x01;
      *R += 255;
    } else if (strncmp(tempstr + stringptr, "green", 5) == 0) {
      *colors = *colors | 0x02;
      *G += 255;
    } else if (strncmp(tempstr + stringptr, "blue", 4) == 0) {
      *colors = *colors | 0x04;
      *B += 255;
    } else if (strncmp(tempstr + stringptr, "white", 5) == 0) {
      *colors = *colors | 0x08;
      *R += 255;
      *G += 255;
      *B += 255;
    } else if (strncmp(tempstr + stringptr, "magenta", 7) == 0) {
      *colors = *colors | 0x10;
      *R += 255;
      *B += 255;
    } else if (strncmp(tempstr + stringptr, "yellow", 6) == 0) {
      *colors = *colors | 0x20;
      *R += 255;
      *G += 255;
    } else if (strncmp(tempstr + stringptr, "cyan", 4) == 0) {
      *colors = *colors | 0x40;
      *B += 255;
      *G += 255;
    } else if (strncmp(tempstr + stringptr, "black", 5) == 0) {
      *colors = *colors | 0x80;
    } else if (strncmp(tempstr + stringptr, "transparent", 11)) {
      *transparent = 1;
    } else {
      badstring = 1;
    }
    if (!badstring && !(*transparent)) {
      for (c = tempstr[stringptr]; ((c != ',') && (c != ' ') && (c != '\0'));)
        c = tempstr[++stringptr];
      if (c != '\0') {
        for (c = tempstr[stringptr]; ((c == ',') || (c == ' '));)
          c = tempstr[++stringptr];
      }
    }
  }
  return (!badstring);
}
```