user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<parhash>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x24(%rbp)
  cmpl   $0x4,-0x24(%rbp)
  je     L115
  cmpl   $0x4,-0x24(%rbp)
  jg     L94
  cmpl   $0x2,-0x24(%rbp)
  je     L35
  cmpl   $0x3,-0x24(%rbp)
  je     L116
  jmp    L94
L35:
  mov    -0x20(%rbp),%rax
  lea    0x9(%rax),%rcx
  mov    -0x20(%rbp),%rax
  mov    $0x8,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jle    L72
  mov    -0x20(%rbp),%rax
  lea    0x9(%rax),%rsi
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rcx
  mov    %rsi,%rdx
  lea    D50(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L17
L72:
  mov    -0x20(%rbp),%rax
  lea    0x9(%rax),%rcx
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  lea    D50(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L17:
  mov    $0x0,%eax
  jmp    L100
L116:
  mov    -0x20(%rbp),%rax
  lea    0x12(%rax),%rcx
  mov    -0x20(%rbp),%rax
  mov    $0x8,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jle    L88
  mov    -0x20(%rbp),%rax
  lea    0x9(%rax),%rcx
  mov    -0x20(%rbp),%rax
  lea    0x12(%rax),%rdx
  mov    -0x20(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %rsi,%r8
  lea    D58(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L69
L88:
  mov    -0x20(%rbp),%rax
  lea    0x12(%rax),%rsi
  mov    -0x20(%rbp),%rax
  lea    0x9(%rax),%rcx
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rsi,%r8
  lea    D58(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L69:
  mov    $0x0,%eax
  jmp    L100
L115:
  mov    -0x20(%rbp),%rax
  lea    0x12(%rax),%rcx
  mov    -0x20(%rbp),%rax
  add    $0x9,%rax
  mov    $0x8,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x4(%rbp)
  cmpl   $0x0,-0x4(%rbp)
  jne    L108
  mov    -0x20(%rbp),%rax
  lea    0x1b(%rax),%rcx
  mov    -0x20(%rbp),%rax
  mov    $0x8,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  mov    %eax,-0x4(%rbp)
L108:
  cmpl   $0x0,-0x4(%rbp)
  jle    L67
  mov    -0x20(%rbp),%rax
  lea    0x9(%rax),%rdi
  mov    -0x20(%rbp),%rax
  lea    0x12(%rax),%rcx
  mov    -0x20(%rbp),%rax
  lea    0x1b(%rax),%rdx
  mov    -0x20(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  mov    %rsi,%r9
  mov    %rdi,%r8
  lea    D4(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L82
L67:
  mov    -0x20(%rbp),%rax
  lea    0x1b(%rax),%rdi
  mov    -0x20(%rbp),%rax
  lea    0x12(%rax),%rsi
  mov    -0x20(%rbp),%rax
  lea    0x9(%rax),%rcx
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdi,%r9
  mov    %rsi,%r8
  lea    D4(%rip),%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <sprintf@plt>
L82:
  mov    $0x0,%eax
  jmp    L100
L94:
  mov    $0x1,%eax
L100:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D50
datatype: string
name: disassemble_data
arguments: tag: D58
datatype: string
name: disassemble_data
arguments: tag: D4
datatype: string

tool: D50: %-8s %-8s

tool: D58: %-8s %-8s %-8s

tool: D4: %-8s %-8s %-8s %-8s

assistant: ```c
bool parhash(char *hash, char att[][8 + 1], int nat) {
  int i;
  switch (nat) {
  case 2:
    if (strncmp(att[0], att[1], 8) > 0)
      sprintf(hash,
              "%-"
              "8s"
              " %-"
              "8s",
              att[1], att[0]);
    else
      sprintf(hash,
              "%-"
              "8s"
              " %-"
              "8s",
              att[0], att[1]);
    return false;
  case 3:
    if (strncmp(att[0], att[2], 8) > 0)
      sprintf(hash,
              "%-"
              "8s"
              " %-"
              "8s"
              " %-"
              "8s",
              att[2], att[1], att[0]);
    else
      sprintf(hash,
              "%-"
              "8s"
              " %-"
              "8s"
              " %-"
              "8s",
              att[0], att[1], att[2]);
    return false;
  case 4:
    if (!(i = strncmp(att[1], att[2], 8)))
      i = strncmp(att[0], att[3], 8);
    if (i > 0)
      sprintf(hash,
              "%-"
              "8s"
              " %-"
              "8s"
              " %-"
              "8s"
              " %-"
              "8s",
              att[3], att[2], att[1], att[0]);
    else
      sprintf(hash,
              "%-"
              "8s"
              " %-"
              "8s"
              " %-"
              "8s"
              " %-"
              "8s",
              att[0], att[1], att[2], att[3]);
    return false;
  default:
    return true;
  }
}
```