user: 这段汇编代码用C语言表示是什么样的?

```asm
<G_admin_duration>:
  endbr64
  sub    $0x8,%rsp
  mov    %rsi,%rax
  mov    %edx,%esi
  cmp    $0x5dfc0f00,%edi
  ja     L43
  cmp    $0x1e1337f,%edi
  jg     L21
  cmp    $0x76a6ff,%edi
  jg     L17
  cmp    $0x1517f,%edi
  jg     L104
  cmp    $0xe0f,%edi
  jg     L50
  cmp    $0x3b,%edi
  jle    L28
  pxor   %xmm0,%xmm0
  cvtsi2ss %edi,%xmm0
  divss  D15(%rip),%xmm0
  cvttss2si %xmm0,%ecx
  lea    D118(%rip),%rdx
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  jmp    L31
L43:
  lea    D104(%rip),%rsi
  mov    %rax,%rdi
  call   <Q_strncpyz@plt>
L31:
  add    $0x8,%rsp
  ret
L21:
  pxor   %xmm0,%xmm0
  cvtsi2ss %edi,%xmm0
  divss  D111(%rip),%xmm0
  cvttss2si %xmm0,%ecx
  lea    D113(%rip),%rdx
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  jmp    L31
L17:
  pxor   %xmm0,%xmm0
  cvtsi2ss %edi,%xmm0
  divss  D68(%rip),%xmm0
  cvttss2si %xmm0,%ecx
  lea    D63(%rip),%rdx
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  jmp    L31
L104:
  pxor   %xmm0,%xmm0
  cvtsi2ss %edi,%xmm0
  divss  D40(%rip),%xmm0
  cvttss2si %xmm0,%ecx
  lea    D64(%rip),%rdx
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  jmp    L31
L50:
  pxor   %xmm0,%xmm0
  cvtsi2ss %edi,%xmm0
  divss  D83(%rip),%xmm0
  cvttss2si %xmm0,%ecx
  lea    D96(%rip),%rdx
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  jmp    L31
L28:
  mov    %edi,%ecx
  lea    D99(%rip),%rdx
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  jmp    L31
```

tool_calls: name: read_data
arguments: label: D15
datatype: byte[4]
name: read_data
arguments: label: D118
datatype: string
name: read_data
arguments: label: D104
datatype: string
name: read_data
arguments: label: D111
datatype: byte[4]
name: read_data
arguments: label: D113
datatype: string
name: read_data
arguments: label: D68
datatype: byte[4]
name: read_data
arguments: label: D63
datatype: string
name: read_data
arguments: label: D40
datatype: byte[4]
name: read_data
arguments: label: D64
datatype: string
name: read_data
arguments: label: D83
datatype: byte[4]
name: read_data
arguments: label: D96
datatype: string
name: read_data
arguments: label: D99
datatype: string

tool: {"D15": [0x00,0x00,0x70,0x42]}

tool: D118: %1.1f minutes

tool: D104: PERMANENT

tool: {"D111": [0xc0,0x99,0xf0,0x4b]}

tool: D113: %1.1f years

tool: {"D68": [0x00,0xa8,0x13,0x49]}

tool: D63: %1.1f weeks

tool: {"D40": [0x00,0xc0,0xa8,0x47]}

tool: D64: %1.1f days

tool: {"D83": [0x00,0x00,0x61,0x45]}

tool: D96: %1.1f hours

tool: D99: %i seconds

assistant: ```c
void G_admin_duration(int secs, char *duration, int dursize) {
  if (secs > (60 * 60 * 24 * 365 * 50) || secs < 0) {
    Q_strncpyz(duration, "PERMANENT", dursize);
  } else if (secs >= (60 * 60 * 24 * 365))
    Com_sprintf(duration, dursize, "%1.1f years", (secs / (60 * 60 * 24 * 365.0f)));
  else if (secs >= (60 * 60 * 24 * 90))
    Com_sprintf(duration, dursize, "%1.1f weeks", (secs / (60 * 60 * 24 * 7.0f)));
  else if (secs >= (60 * 60 * 24))
    Com_sprintf(duration, dursize, "%1.1f days", (secs / (60 * 60 * 24.0f)));
  else if (secs >= (60 * 60))
    Com_sprintf(duration, dursize, "%1.1f hours", (secs / (60 * 60.0f)));
  else if (secs >= 60)
    Com_sprintf(duration, dursize, "%1.1f minutes", (secs / 60.0f));
  else {
    Com_sprintf(duration, dursize, "%i seconds", secs);
  }
}
```