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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0xd0000(%rsp),%r11
L62:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L62
  sub    $0x38,%rsp
  mov    %edi,0x14(%rsp)
  lea    0x10020(%rsp),%rbx
  mov    %rsi,%r12
  mov    0x8(%rsi),%rsi
  mov    %rbx,%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0xd0028(%rsp)
  xor    %eax,%eax
  call   <iie_load_PPM@plt>
  lea    0x40020(%rsp),%rcx
  mov    %rbx,%r10
  lea    0x70020(%rsp),%r8
  lea    0xa0020(%rsp),%r9
  mov    %r8,%r11
  mov    %rcx,%rdi
L15:
  mov    %r10,%rdx
  xor    %eax,%eax
  nop
L48:
  movzbl (%rdx),%esi
  add    $0x3,%rdx
  mov    %sil,(%rdi,%rax,1)
  movzbl -0x2(%rdx),%esi
  mov    %sil,0x1(%r8,%rax,1)
  movzbl -0x1(%rdx),%esi
  mov    %sil,0x2(%r9,%rax,1)
  add    $0x3,%rax
  cmp    $0x300,%rax
  jne    L48
  add    $0x300,%rdi
  add    $0x300,%r10
  add    $0x300,%r8
  add    $0x300,%r9
  cmp    %r11,%rdi
  jne    L15
  lea    0x20(%rsp),%rbx
  lea    0x300(%rcx),%r14
  movapd D137(%rip),%xmm14
  pxor   %xmm7,%xmm7
  mov    %rbx,0x18(%rsp)
  lea    0x70021(%rsp),%r13
  mov    %r14,%r11
  lea    0xa0022(%rsp),%rbp
  lea    0x30300(%rcx),%r15
L17:
  mov    %rbx,%r8
  mov    %rbp,%rdi
  mov    %r13,%rsi
  nopl   0x0(%rax,%rax,1)
L42:
  movzbl 0x15(%rcx),%edx
  movzbl 0x12(%rcx),%eax
  pxor   %xmm3,%xmm3
  movzbl 0x2a(%rcx),%r9d
  movzbl (%rcx),%r10d
  movdqa %xmm3,%xmm6
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0xf(%rcx),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0xc(%rcx),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x9(%rcx),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x6(%rcx),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x3(%rcx),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x2d(%rcx),%eax
  shl    $0x8,%rdx
  shl    $0x8,%rax
  or     %r10,%rdx
  movzbl (%rsi),%r10d
  or     %r9,%rax
  movzbl 0x27(%rcx),%r9d
  mov    %rdx,(%rsp)
  shl    $0x8,%rax
  movzbl 0x15(%rsi),%edx
  or     %r9,%rax
  movzbl 0x24(%rcx),%r9d
  shl    $0x8,%rax
  shl    $0x8,%rdx
  or     %r9,%rax
  movzbl 0x21(%rcx),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl 0x1e(%rcx),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl 0x1b(%rcx),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl 0x18(%rcx),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl 0x2a(%rsi),%r9d
  mov    %rax,0x8(%rsp)
  movzbl 0x12(%rsi),%eax
  movdqa (%rsp),%xmm2
  movdqa (%rsp),%xmm1
  or     %rax,%rdx
  movzbl 0xf(%rsi),%eax
  shl    $0x8,%rdx
  punpcklbw %xmm3,%xmm2
  punpckhbw %xmm3,%xmm1
  or     %rax,%rdx
  movzbl 0xc(%rsi),%eax
  movdqa %xmm2,%xmm5
  punpckhwd %xmm7,%xmm2
  shl    $0x8,%rdx
  punpcklwd %xmm7,%xmm5
  movdqa %xmm1,%xmm9
  or     %rax,%rdx
  movzbl 0x9(%rsi),%eax
  cvtdq2pd %xmm5,%xmm0
  pshufd $0xee,%xmm5,%xmm5
  shl    $0x8,%rdx
  cvtdq2pd %xmm5,%xmm5
  punpcklwd %xmm7,%xmm9
  punpckhwd %xmm7,%xmm1
  mulpd  %xmm14,%xmm0
  or     %rax,%rdx
  movzbl 0x6(%rsi),%eax
  mulpd  %xmm14,%xmm5
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x3(%rsi),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x2d(%rsi),%eax
  shl    $0x8,%rdx
  shl    $0x8,%rax
  or     %r10,%rdx
  or     %r9,%rax
  movzbl 0x27(%rsi),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl 0x24(%rsi),%r9d
  movzbl (%rdi),%r10d
  mov    %rdx,(%rsp)
  shl    $0x8,%rax
  movzbl 0x15(%rdi),%edx
  or     %r9,%rax
  movzbl 0x21(%rsi),%r9d
  shl    $0x8,%rax
  shl    $0x8,%rdx
  or     %r9,%rax
  movzbl 0x1e(%rsi),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl 0x1b(%rsi),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl 0x18(%rsi),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl 0x2a(%rdi),%r9d
  mov    %rax,0x8(%rsp)
  movzbl 0x12(%rdi),%eax
  movdqa (%rsp),%xmm12
  movdqa (%rsp),%xmm4
  or     %rax,%rdx
  movzbl 0xf(%rdi),%eax
  shl    $0x8,%rdx
  punpcklbw %xmm3,%xmm12
  punpckhbw %xmm3,%xmm4
  or     %rax,%rdx
  movzbl 0xc(%rdi),%eax
  movdqa %xmm12,%xmm13
  punpckhwd %xmm7,%xmm12
  shl    $0x8,%rdx
  punpcklwd %xmm7,%xmm13
  movdqa %xmm4,%xmm8
  or     %rax,%rdx
  movzbl 0x9(%rdi),%eax
  cvtdq2pd %xmm13,%xmm15
  punpckhwd %xmm7,%xmm4
  shl    $0x8,%rdx
  pshufd $0xee,%xmm13,%xmm13
  punpcklwd %xmm7,%xmm8
  or     %rax,%rdx
  movzbl 0x6(%rdi),%eax
  cvtdq2pd %xmm13,%xmm13
  mulpd  D154(%rip),%xmm15
  shl    $0x8,%rdx
  add    $0x30,%rcx
  add    $0x30,%rsi
  or     %rax,%rdx
  movzbl 0x3(%rdi),%eax
  add    $0x10,%r8
  add    $0x30,%rdi
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl -0x3(%rdi),%eax
  shl    $0x8,%rdx
  shl    $0x8,%rax
  or     %r10,%rdx
  addpd  %xmm15,%xmm0
  or     %r9,%rax
  movzbl -0x9(%rdi),%r9d
  mov    %rdx,(%rsp)
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl -0xc(%rdi),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl -0xf(%rdi),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl -0x12(%rdi),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl -0x15(%rdi),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  movzbl -0x18(%rdi),%r9d
  shl    $0x8,%rax
  or     %r9,%rax
  mov    %rax,0x8(%rsp)
  movdqa (%rsp),%xmm11
  punpcklbw %xmm3,%xmm11
  movdqa (%rsp),%xmm3
  movdqa %xmm11,%xmm10
  punpckhwd %xmm7,%xmm11
  punpcklwd %xmm7,%xmm10
  punpckhbw %xmm6,%xmm3
  cvtdq2pd %xmm10,%xmm15
  pshufd $0xee,%xmm10,%xmm10
  movdqa %xmm3,%xmm6
  punpckhwd %xmm7,%xmm3
  mulpd  D173(%rip),%xmm15
  cvtdq2pd %xmm10,%xmm10
  punpcklwd %xmm7,%xmm6
  mulpd  D154(%rip),%xmm13
  mulpd  D173(%rip),%xmm10
  addpd  %xmm15,%xmm0
  addpd  %xmm13,%xmm5
  cvttpd2dq %xmm0,%xmm0
  addpd  %xmm10,%xmm5
  cvtdq2pd %xmm2,%xmm10
  mulpd  %xmm14,%xmm10
  cvttpd2dq %xmm5,%xmm5
  punpcklqdq %xmm5,%xmm0
  cvtdq2pd %xmm12,%xmm5
  pshufd $0xee,%xmm12,%xmm12
  mulpd  D154(%rip),%xmm5
  cvtdq2pd %xmm12,%xmm12
  mulpd  D154(%rip),%xmm12
  addpd  %xmm5,%xmm10
  cvtdq2pd %xmm11,%xmm5
  pshufd $0xee,%xmm11,%xmm11
  mulpd  D173(%rip),%xmm5
  cvtdq2pd %xmm11,%xmm11
  mulpd  D173(%rip),%xmm11
  addpd  %xmm5,%xmm10
  pshufd $0xee,%xmm2,%xmm5
  movdqa %xmm0,%xmm2
  cvtdq2pd %xmm5,%xmm5
  mulpd  %xmm14,%xmm5
  cvttpd2dq %xmm10,%xmm10
  addpd  %xmm12,%xmm5
  addpd  %xmm11,%xmm5
  cvttpd2dq %xmm5,%xmm5
  punpcklqdq %xmm5,%xmm10
  punpcklwd %xmm10,%xmm0
  punpckhwd %xmm10,%xmm2
  movdqa %xmm0,%xmm5
  punpcklwd %xmm2,%xmm0
  punpckhwd %xmm2,%xmm5
  cvtdq2pd %xmm8,%xmm2
  pshufd $0xee,%xmm8,%xmm8
  mulpd  D154(%rip),%xmm2
  punpcklwd %xmm5,%xmm0
  cvtdq2pd %xmm9,%xmm5
  cvtdq2pd %xmm8,%xmm8
  mulpd  %xmm14,%xmm5
  pand   D40(%rip),%xmm0
  mulpd  D154(%rip),%xmm8
  addpd  %xmm2,%xmm5
  cvtdq2pd %xmm6,%xmm2
  mulpd  D173(%rip),%xmm2
  pshufd $0xee,%xmm6,%xmm6
  cvtdq2pd %xmm6,%xmm6
  mulpd  D173(%rip),%xmm6
  addpd  %xmm2,%xmm5
  pshufd $0xee,%xmm9,%xmm2
  cvtdq2pd %xmm2,%xmm2
  mulpd  %xmm14,%xmm2
  cvttpd2dq %xmm5,%xmm5
  addpd  %xmm8,%xmm2
  addpd  %xmm6,%xmm2
  cvtdq2pd %xmm4,%xmm6
  mulpd  D154(%rip),%xmm6
  pshufd $0xee,%xmm4,%xmm4
  cvtdq2pd %xmm4,%xmm4
  mulpd  D154(%rip),%xmm4
  cvttpd2dq %xmm2,%xmm2
  punpcklqdq %xmm2,%xmm5
  cvtdq2pd %xmm1,%xmm2
  pshufd $0xee,%xmm1,%xmm1
  mulpd  %xmm14,%xmm2
  cvtdq2pd %xmm1,%xmm1
  mulpd  %xmm14,%xmm1
  addpd  %xmm6,%xmm2
  cvtdq2pd %xmm3,%xmm6
  pshufd $0xee,%xmm3,%xmm3
  mulpd  D173(%rip),%xmm6
  cvtdq2pd %xmm3,%xmm3
  addpd  %xmm4,%xmm1
  mulpd  D173(%rip),%xmm3
  addpd  %xmm6,%xmm2
  addpd  %xmm3,%xmm1
  movdqa %xmm5,%xmm3
  cvttpd2dq %xmm2,%xmm2
  cvttpd2dq %xmm1,%xmm1
  punpcklqdq %xmm1,%xmm2
  movdqa %xmm5,%xmm1
  punpcklwd %xmm2,%xmm1
  punpckhwd %xmm2,%xmm3
  movdqa %xmm1,%xmm2
  punpcklwd %xmm3,%xmm1
  punpckhwd %xmm3,%xmm2
  punpcklwd %xmm2,%xmm1
  pand   D40(%rip),%xmm1
  packuswb %xmm1,%xmm0
  movaps %xmm0,-0x10(%r8)
  cmp    %r11,%rcx
  jne    L42
  add    $0x300,%r11
  mov    %r14,%rcx
  add    $0x300,%r13
  add    $0x300,%rbp
  add    $0x100,%rbx
  cmp    %r15,%r11
  je     L5
  add    $0x300,%r14
  jmp    L17
L5:
  movslq 0x14(%rsp),%rax
  mov    0x18(%rsp),%rdi
  mov    -0x8(%r12,%rax,8),%rsi
  call   <iie_save_PGM@plt>
  mov    0xd0028(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L27
  add    $0xd0038,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L27:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D137
type: f64[2]
name: disassemble_data
arguments: label: D154
type: f64[2]
name: disassemble_data
arguments: label: D173
type: f64[2]
name: disassemble_data
arguments: label: D40
type: byte[16]

tool: {"D137": [0.299,0.299]}

tool: {"D154": [0.587,0.587]}

tool: {"D173": [0.114,0.114]}

tool: {"D40": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

assistant: ```c
int main(int argc, char *argv[]) {
  unsigned char src_image[256][256][3];
  unsigned char red[256][256][3];
  unsigned char green[256][256][3];
  unsigned char blue[256][256][3];
  unsigned char dst_image[256][256];
  int m, n;
  iie_load_PPM(src_image, argv[1]);
  for (m = 0; m < 256; m++) {
    for (n = 0; n < 256; n++) {
      red[m][n][0] = src_image[m][n][0];
      red[m][n][1] = 0;
      red[m][n][2] = 0;
      green[m][n][0] = 0;
      green[m][n][1] = src_image[m][n][1];
      green[m][n][2] = 0;
      blue[m][n][0] = 0;
      blue[m][n][1] = 0;
      blue[m][n][2] = src_image[m][n][2];
    }
  }
  for (m = 0; m < 256; m++) {
    for (n = 0; n < 256; n++) {
      dst_image[m][n] = 0.299 * red[m][n][0] + 0.587 * green[m][n][1] + 0.114 * blue[m][n][2];
    }
  }
  iie_save_PGM(dst_image, argv[argc - 1]);
  return 0;
}
```