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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  movss  D219(%rip),%xmm0
  movss  %xmm0,-0x1c(%rbp)
  cmpl   $0x3,-0x24(%rbp)
  jle    L140
  cmpl   $0x5,-0x24(%rbp)
  jle    L35
L140:
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D305(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0xffffffff,%eax
  jmp    L50
L35:
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtol@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D301(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0xc(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtol@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D301(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x8(%rbp)
  mov    -0x30(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtol@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D301(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x4(%rbp)
  cmpl   $0x5,-0x24(%rbp)
  jne    L4
  mov    -0x30(%rbp),%rax
  add    $0x20,%rax
  mov    (%rax),%rax
  mov    $0x10,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <strtol@plt>
  pxor   %xmm0,%xmm0
  cvtsi2ss %rax,%xmm0
  cvtss2sd %xmm0,%xmm0
  movsd  D301(%rip),%xmm1
  divsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x1c(%rbp)
L4:
  pxor   %xmm2,%xmm2
  cvtss2sd -0x1c(%rbp),%xmm2
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd -0x8(%rbp),%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd -0xc(%rbp),%xmm4
  movq   %xmm4,%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D97(%rip),%rax
  mov    %rax,%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  pxor   %xmm1,%xmm1
  cvtss2sd -0xc(%rbp),%xmm1
  movsd  D314(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  pxor   %xmm2,%xmm2
  cvtss2sd -0x8(%rbp),%xmm2
  movsd  D128(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  pxor   %xmm2,%xmm2
  cvtss2sd -0x4(%rbp),%xmm2
  movsd  D196(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0xc(%rbp),%xmm1
  movsd  D312(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd -0x8(%rbp),%xmm2
  movsd  D324(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  pxor   %xmm2,%xmm2
  cvtss2sd -0x4(%rbp),%xmm2
  movsd  D253(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0xc(%rbp),%xmm1
  movsd  D253(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd -0x8(%rbp),%xmm2
  movsd  D108(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtss2sd -0x4(%rbp),%xmm2
  movsd  D180(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x10(%rbp)
  pxor   %xmm2,%xmm2
  cvtss2sd -0x1c(%rbp),%xmm2
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  pxor   %xmm0,%xmm0
  cvtss2sd -0x14(%rbp),%xmm0
  pxor   %xmm5,%xmm5
  cvtss2sd -0x18(%rbp),%xmm5
  movq   %xmm5,%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D125(%rip),%rax
  mov    %rax,%rdi
  mov    $0x4,%eax
  call   <printf@plt>
  movss  -0x14(%rbp),%xmm1
  movss  D11(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x14(%rbp)
  movss  -0x10(%rbp),%xmm1
  movss  D11(%rip),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  comiss -0x18(%rbp),%xmm0
  jbe    L49
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  jmp    L36
L49:
  movss  -0x18(%rbp),%xmm0
  movss  D219(%rip),%xmm1
  comiss %xmm1,%xmm0
  jbe    L36
  movss  D219(%rip),%xmm0
  movss  %xmm0,-0x18(%rbp)
L36:
  pxor   %xmm0,%xmm0
  comiss -0x14(%rbp),%xmm0
  jbe    L52
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  jmp    L14
L52:
  movss  -0x14(%rbp),%xmm0
  movss  D219(%rip),%xmm1
  comiss %xmm1,%xmm0
  jbe    L14
  movss  D219(%rip),%xmm0
  movss  %xmm0,-0x14(%rbp)
L14:
  pxor   %xmm0,%xmm0
  comiss -0x10(%rbp),%xmm0
  jbe    L135
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x10(%rbp)
  jmp    L19
L135:
  movss  -0x10(%rbp),%xmm0
  movss  D219(%rip),%xmm1
  comiss %xmm1,%xmm0
  jbe    L19
  movss  D219(%rip),%xmm0
  movss  %xmm0,-0x10(%rbp)
L19:
  pxor   %xmm0,%xmm0
  comiss -0x1c(%rbp),%xmm0
  jbe    L89
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  jmp    L23
L89:
  movss  -0x1c(%rbp),%xmm0
  movss  D219(%rip),%xmm1
  comiss %xmm1,%xmm0
  jbe    L23
  movss  D219(%rip),%xmm0
  movss  %xmm0,-0x1c(%rbp)
L23:
  pxor   %xmm1,%xmm1
  cvtss2sd -0x10(%rbp),%xmm1
  movsd  D301(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  movzbl %al,%esi
  pxor   %xmm1,%xmm1
  cvtss2sd -0x14(%rbp),%xmm1
  movsd  D301(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  movzbl %al,%ecx
  pxor   %xmm1,%xmm1
  cvtss2sd -0x18(%rbp),%xmm1
  movsd  D301(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  movzbl %al,%edx
  pxor   %xmm1,%xmm1
  cvtss2sd -0x1c(%rbp),%xmm1
  movsd  D212(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  movzbl %al,%eax
  mov    %esi,%r8d
  mov    %eax,%esi
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
L50:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D219
type_guessed: f32
name: unpack_data
arguments: data_label: D113
type_guessed: string
name: unpack_data
arguments: data_label: D305
type_guessed: string
name: unpack_data
arguments: data_label: D301
type_guessed: f64
name: unpack_data
arguments: data_label: D97
type_guessed: string
name: unpack_data
arguments: data_label: D314
type_guessed: f64
name: unpack_data
arguments: data_label: D128
type_guessed: f64
name: unpack_data
arguments: data_label: D196
type_guessed: f64
name: unpack_data
arguments: data_label: D312
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D324
type_guessed: f64
name: unpack_data
arguments: data_label: D253
type_guessed: f64
name: unpack_data
arguments: data_label: D108
type_guessed: f64
name: unpack_data
arguments: data_label: D180
type_guessed: f64
name: unpack_data
arguments: data_label: D125
type_guessed: string
name: unpack_data
arguments: data_label: D11
type_guessed: byte[4]
name: unpack_data
arguments: data_label: D212
type_guessed: f64
name: unpack_data
arguments: data_label: D7
type_guessed: string

tool: D219: 1

tool: D113: Usage: %s red green blue [alpha]


tool: D305: Range is from 00 to FF (hexadecimal expected)

tool: D301: 255

tool: D97: Red: %1.5f	Green: %1.5f	Blue:%1.5f	Alpha:%1.5f


tool: D314: 0.2126

tool: D128: 0.7152

tool: D196: 0.0722

tool: {"D312": [0x3a,0x92,0xcb,0x7f,0x48,0xbf,0xbd,0xbf]}

tool: D324: 0.3838

tool: D253: 0.5

tool: D108: 0.4451

tool: D180: 0.0549

tool: D125: Y: %1.5f	Pb: %1.5f	Pr: %1.5f	Alpha: %1.5f


tool: {"D11": [0x00,0x00,0x00,0x3f]}

tool: D212: 127

tool: D7: Hex value (AYPbPr): %02x%02x%02x%02x


assistant: ```c
int main(int argc, char *argv[]) {
  float red, green, blue, alpha = 1.0;
  float y, pb, pr;
  if (argc < 4 || argc > 5) {
    printf("Usage: %s red green blue [alpha]\n", argv[0]);
    printf("Range is from 00 to FF (hexadecimal expected)\n");
    return -1;
  }
  red = (float)strtol(argv[1], NULL, 16) / 255.0;
  green = (float)strtol(argv[2], NULL, 16) / 255.0;
  blue = (float)strtol(argv[3], NULL, 16) / 255.0;
  if (argc == 5) {
    alpha = (float)strtol(argv[4], NULL, 16) / 255.0;
  }
  printf("Red: %1.5f\tGreen: %1.5f\tBlue:%1.5f\tAlpha:%1.5f\n", red, green, blue, alpha);
  y = 0.2126 * red + 0.7152 * green + 0.0722 * blue;
  pb = -0.1162 * red - 0.3838 * green + 0.5000 * blue;
  pr = 0.5000 * red - 0.4451 * green - 0.0549 * blue;
  printf("Y: %1.5f\tPb: %1.5f\tPr: %1.5f\tAlpha: %1.5f\n", y, pb, pr, alpha);
  pb += 0.5;
  pr += 0.5;
  if (y < 0.0) {
    y = 0.0;
  } else if (y > 1.0) {
    y = 1.0;
  }
  if (pb < 0.0) {
    pb = 0.0;
  } else if (pb > 1.0) {
    pb = 1.0;
  }
  if (pr < 0.0) {
    pr = 0.0;
  } else if (pr > 1.0) {
    pr = 1.0;
  }
  if (alpha < 0.0) {
    alpha = 0.0;
  } else if (alpha > 1.0) {
    alpha = 1.0;
  }
  printf("Hex value (AYPbPr): %02x%02x%02x%02x\n", (unsigned char)(alpha * 127.0), (unsigned char)(y * 255.0), (unsigned char)(pb * 255.0), (unsigned char)(pr * 255.0));
  return 0;
}
```