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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x120,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x110(%rbp),%rax
  lea    D274(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0x110(%rbp),%rax
  lea    D315(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D314(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    %eax,-0x114(%rbp)
  cmpl   $0x0,-0x114(%rbp)
  jne    L32
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L57
L32:
  lea    D380(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L57:
  lea    -0x110(%rbp),%rax
  lea    D25(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0x110(%rbp),%rax
  lea    D307(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D226(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    %eax,-0x114(%rbp)
  cmpl   $0x0,-0x114(%rbp)
  jne    L184
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L100
L184:
  lea    D380(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L100:
  lea    -0x110(%rbp),%rax
  lea    D275(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0x110(%rbp),%rax
  lea    D60(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D374(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    %eax,-0x114(%rbp)
  cmpl   $0x0,-0x114(%rbp)
  jne    L14
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L110
L14:
  lea    D380(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L110:
  lea    -0x110(%rbp),%rax
  lea    D45(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0x110(%rbp),%rax
  lea    D268(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D97(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    %eax,-0x114(%rbp)
  cmpl   $0x0,-0x114(%rbp)
  jne    L6
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L163
L6:
  lea    D380(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L163:
  lea    -0x110(%rbp),%rax
  lea    D369(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0x110(%rbp),%rax
  lea    D428(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    %eax,-0x114(%rbp)
  cmpl   $0x0,-0x114(%rbp)
  jne    L183
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L160
L183:
  lea    D380(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L160:
  lea    -0x110(%rbp),%rax
  lea    D260(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0x110(%rbp),%rax
  lea    D217(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D83(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    %eax,-0x114(%rbp)
  cmpl   $0x0,-0x114(%rbp)
  jne    L84
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L152
L84:
  lea    D380(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L152:
  lea    -0x110(%rbp),%rax
  lea    D284(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0x110(%rbp),%rax
  lea    D219(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D270(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    %eax,-0x114(%rbp)
  cmpl   $0x0,-0x114(%rbp)
  jne    L51
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L103
L51:
  lea    D380(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L103:
  lea    -0x110(%rbp),%rax
  lea    D57(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0x110(%rbp),%rax
  lea    D116(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    %eax,-0x114(%rbp)
  cmpl   $0x0,-0x114(%rbp)
  jne    L121
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L35
L121:
  lea    D380(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L35:
  lea    -0x110(%rbp),%rax
  lea    D332(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    -0x110(%rbp),%rax
  lea    D355(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x110(%rbp),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D160(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  mov    %eax,-0x114(%rbp)
  cmpl   $0x0,-0x114(%rbp)
  jne    L148
  lea    D43(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L93
L148:
  lea    D380(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L93:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L132
  call   <__stack_chk_fail@plt>
L132:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D274
type_guessed: string
name: disassemble_data
arguments: label: D315
type_guessed: string
name: disassemble_data
arguments: label: D314
type_guessed: string
name: disassemble_data
arguments: label: D43
type_guessed: string
name: disassemble_data
arguments: label: D380
type_guessed: string
name: disassemble_data
arguments: label: D25
type_guessed: string
name: disassemble_data
arguments: label: D307
type_guessed: string
name: disassemble_data
arguments: label: D226
type_guessed: string
name: disassemble_data
arguments: label: D275
type_guessed: string
name: disassemble_data
arguments: label: D60
type_guessed: string
name: disassemble_data
arguments: label: D374
type_guessed: string
name: disassemble_data
arguments: label: D45
type_guessed: string
name: disassemble_data
arguments: label: D268
type_guessed: string
name: disassemble_data
arguments: label: D97
type_guessed: string
name: disassemble_data
arguments: label: D369
type_guessed: string
name: disassemble_data
arguments: label: D428
type_guessed: string
name: disassemble_data
arguments: label: D58
type_guessed: string
name: disassemble_data
arguments: label: D260
type_guessed: string
name: disassemble_data
arguments: label: D217
type_guessed: string
name: disassemble_data
arguments: label: D83
type_guessed: string
name: disassemble_data
arguments: label: D284
type_guessed: string
name: disassemble_data
arguments: label: D219
type_guessed: string
name: disassemble_data
arguments: label: D270
type_guessed: string
name: disassemble_data
arguments: label: D57
type_guessed: string
name: disassemble_data
arguments: label: D116
type_guessed: string
name: disassemble_data
arguments: label: D7
type_guessed: string
name: disassemble_data
arguments: label: D332
type_guessed: string
name: disassemble_data
arguments: label: D355
type_guessed: string
name: disassemble_data
arguments: label: D160
type_guessed: string

tool: D274: ./enc -i tst/msg0.txt -o tst/msg0.crypto -p fish

tool: D315: ./dec -i tst/msg0.crypto -o tst/msg0.plain -p fish

tool: D314: diff tst/msg0.txt tst/msg0.plain

tool: D43: pass



tool: D380: fail



tool: D25: ./enc -i tst/msg1.txt -o tst/msg1.crypto -p fish

tool: D307: ./dec -i tst/msg1.crypto -o tst/msg1.plain -p fish

tool: D226: diff tst/msg1.txt tst/msg1.plain

tool: D275: ./enc -i tst/msg2.txt -o tst/msg2.crypto -p fish

tool: D60: ./dec -i tst/msg2.crypto -o tst/msg2.plain -p fish

tool: D374: diff tst/msg2.txt tst/msg2.plain

tool: D45: ./emb -c covers/logo.ppm -m tst/msg0.txt -s tst/msg0.ppm

tool: D268: ./ext -s tst/msg0.ppm -m tst/msg0.plain2

tool: D97: diff tst/msg0.txt tst/msg0.plain2

tool: D369: ./emb -c covers/logo.ppm -m tst/msg1.txt -s tst/msg1.ppm

tool: D428: ./ext -s tst/msg1.ppm -m tst/msg1.plain2

tool: D58: diff tst/msg1.txt tst/msg1.plain2

tool: D260: ./emb -c covers/logo.ppm -m tst/msg2.txt -s tst/msg2.ppm

tool: D217: ./ext -s tst/msg2.ppm -m tst/msg2.plain2

tool: D83: diff tst/msg2.txt tst/msg2.plain2

tool: D284: ./encemb -c covers/logo.ppm -m tst/msg0.txt -s tst/msg0.ppm -p fish

tool: D219: ./extdec -s tst/msg0.ppm -m tst/msg0.plain3 -p fish

tool: D270: diff tst/msg0.txt tst/msg0.plain3

tool: D57: ./encemb -c covers/logo.ppm -m tst/msg1.txt -s tst/msg1.ppm -p fish

tool: D116: ./extdec -s tst/msg1.ppm -m tst/msg1.plain3 -p fish

tool: D7: diff tst/msg1.txt tst/msg1.plain3

tool: D332: ./encemb -c covers/logo.ppm -m tst/msg2.txt -s tst/msg2.ppm -p fish

tool: D355: ./extdec -s tst/msg2.ppm -m tst/msg2.plain3 -p fish

tool: D160: diff tst/msg2.txt tst/msg2.plain3

assistant: ```c
int main() {
  char cmd[256];
  int r;
  strcpy(cmd, "./enc -i tst/msg0.txt -o tst/msg0.crypto -p fish");
  printf("%s\n", cmd);
  system(cmd);
  strcpy(cmd, "./dec -i tst/msg0.crypto -o tst/msg0.plain -p fish");
  printf("%s\n", cmd);
  system(cmd);
  r = system("diff tst/msg0.txt tst/msg0.plain");
  (!r) ? printf("pass\n\n") : printf("fail\n\n");
  strcpy(cmd, "./enc -i tst/msg1.txt -o tst/msg1.crypto -p fish");
  printf("%s\n", cmd);
  system(cmd);
  strcpy(cmd, "./dec -i tst/msg1.crypto -o tst/msg1.plain -p fish");
  printf("%s\n", cmd);
  system(cmd);
  r = system("diff tst/msg1.txt tst/msg1.plain");
  (!r) ? printf("pass\n\n") : printf("fail\n\n");
  strcpy(cmd, "./enc -i tst/msg2.txt -o tst/msg2.crypto -p fish");
  printf("%s\n", cmd);
  system(cmd);
  strcpy(cmd, "./dec -i tst/msg2.crypto -o tst/msg2.plain -p fish");
  printf("%s\n", cmd);
  system(cmd);
  r = system("diff tst/msg2.txt tst/msg2.plain");
  (!r) ? printf("pass\n\n") : printf("fail\n\n");
  strcpy(cmd, "./emb -c covers/logo.ppm -m tst/msg0.txt -s tst/msg0.ppm");
  printf("%s\n", cmd);
  system(cmd);
  strcpy(cmd, "./ext -s tst/msg0.ppm -m tst/msg0.plain2");
  printf("%s\n", cmd);
  system(cmd);
  r = system("diff tst/msg0.txt tst/msg0.plain2");
  (!r) ? printf("pass\n\n") : printf("fail\n\n");
  strcpy(cmd, "./emb -c covers/logo.ppm -m tst/msg1.txt -s tst/msg1.ppm");
  printf("%s\n", cmd);
  system(cmd);
  strcpy(cmd, "./ext -s tst/msg1.ppm -m tst/msg1.plain2");
  printf("%s\n", cmd);
  system(cmd);
  r = system("diff tst/msg1.txt tst/msg1.plain2");
  (!r) ? printf("pass\n\n") : printf("fail\n\n");
  strcpy(cmd, "./emb -c covers/logo.ppm -m tst/msg2.txt -s tst/msg2.ppm");
  printf("%s\n", cmd);
  system(cmd);
  strcpy(cmd, "./ext -s tst/msg2.ppm -m tst/msg2.plain2");
  printf("%s\n", cmd);
  system(cmd);
  r = system("diff tst/msg2.txt tst/msg2.plain2");
  (!r) ? printf("pass\n\n") : printf("fail\n\n");
  strcpy(cmd, "./encemb -c covers/logo.ppm -m tst/msg0.txt -s tst/msg0.ppm -p fish");
  printf("%s\n", cmd);
  system(cmd);
  strcpy(cmd, "./extdec -s tst/msg0.ppm -m tst/msg0.plain3 -p fish");
  printf("%s\n", cmd);
  system(cmd);
  r = system("diff tst/msg0.txt tst/msg0.plain3");
  (!r) ? printf("pass\n\n") : printf("fail\n\n");
  strcpy(cmd, "./encemb -c covers/logo.ppm -m tst/msg1.txt -s tst/msg1.ppm -p fish");
  printf("%s\n", cmd);
  system(cmd);
  strcpy(cmd, "./extdec -s tst/msg1.ppm -m tst/msg1.plain3 -p fish");
  printf("%s\n", cmd);
  system(cmd);
  r = system("diff tst/msg1.txt tst/msg1.plain3");
  (!r) ? printf("pass\n\n") : printf("fail\n\n");
  strcpy(cmd, "./encemb -c covers/logo.ppm -m tst/msg2.txt -s tst/msg2.ppm -p fish");
  printf("%s\n", cmd);
  system(cmd);
  strcpy(cmd, "./extdec -s tst/msg2.ppm -m tst/msg2.plain3 -p fish");
  printf("%s\n", cmd);
  system(cmd);
  r = system("diff tst/msg2.txt tst/msg2.plain3");
  (!r) ? printf("pass\n\n") : printf("fail\n\n");
  return 0;
}
```