user: 请从给定的汇编指令推导出C源代码：

```asm
<ccode2>:
  endbr64
  sub    $0xc8,%rsp
  movabs $0x700000006,%rdi
  movabs $0x200000001,%rdx
  movabs $0x300000002,%rcx
  mov    %fs:0x28,%rax
  mov    %rax,0xb8(%rsp)
  movabs $0x100000000,%rax
  mov    %rdi,0x18(%rsp)
  movabs $0x500000004,%rsi
  movabs $0x400000003,%r8
  movabs $0x600000005,%rdi
  mov    %rcx,0x8(%rsp)
  mov    %rdx,0x28(%rsp)
  mov    %rdx,0x48(%rsp)
  mov    %rcx,0x68(%rsp)
  mov    %rcx,0x80(%rsp)
  mov    %rax,(%rsp)
  mov    %rax,0x60(%rsp)
  mov    %rax,0x78(%rsp)
  mov    %rax,0xa8(%rsp)
  xor    %eax,%eax
  mov    %rdx,0x90(%rsp)
  mov    %rdx,0xa0(%rsp)
  mov    %rsi,0x10(%rsp)
  movq   $0x8,0x20(%rsp)
  mov    %r8,0x30(%rsp)
  mov    %rdi,0x38(%rsp)
  movq   $0x7,0x40(%rsp)
  mov    %r8,0x50(%rsp)
  mov    %rdi,0x58(%rsp)
  mov    %rsi,0x70(%rsp)
  movq   $0x4,0x88(%rsp)
  movq   $0x3,0x98(%rsp)
  movl   $0x0,0xb0(%rsp)
  call   <rand@plt>
  movslq %eax,%rdx
  mov    %eax,%ecx
  imul   $0xffffffffb60b60b7,%rdx,%rdx
  sar    $0x1f,%ecx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x5,%edx
  sub    %ecx,%edx
  imul   $0x2d,%edx,%edx
  sub    %edx,%eax
  cltq
  cmpl   $0x8,(%rsp,%rax,4)
  ja     L66
  mov    (%rsp,%rax,4),%eax
  lea    D12(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  xchg   %ax,%ax
  lea    D51(%rip),%rax
  nopw   0x0(%rax,%rax,1)
L66:
  mov    0xb8(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L44
  add    $0xc8,%rsp
  ret
  nop
  lea    D47(%rip),%rax
  jmp    L66
  nopl   0x0(%rax)
  lea    D0(%rip),%rax
  jmp    L66
  nopl   0x0(%rax)
  lea    D95(%rip),%rax
  jmp    L66
  nopl   0x0(%rax)
  lea    D67(%rip),%rax
  jmp    L66
  nopl   0x0(%rax)
  lea    D44(%rip),%rax
  jmp    L66
  nopl   0x0(%rax)
  lea    D74(%rip),%rax
  jmp    L66
  nopl   0x0(%rax)
  lea    D71(%rip),%rax
  jmp    L66
  nopl   0x0(%rax)
  lea    D15(%rip),%rax
  jmp    L66
L44:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: tag: D51
data_type: string
name: parse_data
arguments: tag: D47
data_type: string
name: parse_data
arguments: tag: D0
data_type: string
name: parse_data
arguments: tag: D95
data_type: string
name: parse_data
arguments: tag: D67
data_type: string
name: parse_data
arguments: tag: D44
data_type: string
name: parse_data
arguments: tag: D74
data_type: string
name: parse_data
arguments: tag: D71
data_type: string
name: parse_data
arguments: tag: D15
data_type: string

tool: D51: (2)ca(0)

tool: D47: (2)cn(0)

tool: D0: (2)ru(0)

tool: D95: (2)mx(0)

tool: D67: (2)de(0)

tool: D44: (2)tw(0)

tool: D74: (2)bg(0)

tool: D71: (2)uk(0)

tool: D15: (2)in(0)

assistant: ```c
char *ccode2(void) {
  int cca[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 0, 1, 2, 3, 0, 1, 2, 0, 1, 0};
  switch (cca[rand() % 45]) {
  case 0:
    return "(2)ru(0)";
    break;
  case 1:
    return "(2)cn(0)";
    break;
  case 2:
    return "(2)ca(0)";
    break;
  case 3:
    return "(2)tw(0)";
    break;
  case 4:
    return "(2)bg(0)";
    break;
  case 5:
    return "(2)uk(0)";
    break;
  case 6:
    return "(2)in(0)";
    break;
  case 7:
    return "(2)mx(0)";
    break;
  case 8:
    return "(2)de(0)";
    break;
  }
}
```