user: 下面的汇编指令对应的C源代码是什么:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  movl   $0x33333339,0x2a(%rsp)
  movw   $0x3634,0x2e(%rsp)
  movl   $0x38353535,0x25(%rsp)
  movb   $0x33,0x29(%rsp)
  movl   $0x30313234,0x19(%rsp)
  movw   $0x3130,0x17(%rsp)
  movl   $0x2d383739,0x1d(%rsp)
  movl   $0x2d393739,0x21(%rsp)
  lea    0x30(%rsp),%rbx
  mov    %rbx,%rsi
  lea    D25(%rip),%rdi
  call   <scanf@plt>
  mov    %rbx,%rdi
  call   <strlen@plt>
  cmp    $0x11,%eax
  sete   %r14b
  movzbl %r14b,%r14d
  mov    $0x0,%ebx
  mov    $0x0,%r12d
  movl   $0x0,0xc(%rsp)
  mov    $0x0,%r13d
  mov    $0x0,%ebp
  movabs $0x3ff200100000400,%r15
  jmp    L163
L122:
  add    $0x1,%ebp
  cmp    $0x2,%ebp
  jne    L14
  test   %r12d,%r12d
  je     L53
  jmp    L14
L376:
  movsbl %al,%eax
  lea    -0x90(%rax,%rax,2),%eax
  add    %eax,0xc(%rsp)
  jmp    L14
L345:
  mov    $0x0,%r14d
L14:
  add    $0x1,%rbx
L163:
  lea    0x30(%rsp),%rdi
  call   <strlen@plt>
  cmp    %ebx,%eax
  jle    L200
  movzbl 0x30(%rsp,%rbx,1),%eax
  cmp    $0x2d,%al
  je     L122
  cmp    $0x2,%ebp
  jne    L219
  test   %r12d,%r12d
  jne    L219
L53:
  lea    0x1(%rbx),%r12d
  mov    $0x2,%ebp
L219:
  cmp    $0x39,%al
  ja     L345
  bt     %rax,%r15
  jae    L193
  lea    -0x30(%rax),%edx
  cmp    $0x9,%dl
  ja     L14
  add    $0x1,%r13d
  cmp    $0xc,%r13d
  jg     L14
  test   $0x1,%r13b
  je     L376
  movsbl %al,%eax
  mov    0xc(%rsp),%esi
  lea    -0x30(%rsi,%rax,1),%eax
  mov    %eax,0xc(%rsp)
  jmp    L14
L193:
  mov    $0x0,%r14d
  jmp    L14
L200:
  cmp    $0x4,%ebp
  je     L61
  mov    $0x0,%r14d
L145:
  mov    $0x0,%eax
  lea    0x1d(%rsp),%rcx
  lea    0x21(%rsp),%rdi
  mov    $0x0,%esi
  jmp    L101
L61:
  mov    $0xa,%ecx
  mov    0xc(%rsp),%eax
  cltd
  idiv   %ecx
  mov    %edx,%ecx
  test   %edx,%edx
  je     L336
  mov    $0xa,%ecx
  sub    %edx,%ecx
L336:
  movsbl 0x40(%rsp),%eax
  sub    $0x30,%eax
  cmp    %ecx,%eax
  mov    $0x0,%eax
  cmovne %eax,%r14d
  jmp    L145
L197:
  add    $0x1,%rax
  cmp    $0x4,%rax
  je     L381
L101:
  movzbl 0x30(%rsp,%rax,1),%edx
  cmp    (%rax,%rcx,1),%dl
  je     L197
  cmp    (%rax,%rdi,1),%dl
  cmovne %esi,%r14d
  jmp    L197
L381:
  test   %r14d,%r14d
  je     L74
  lea    D56(%rip),%rdi
  call   <printf@plt>
  movslq %r12d,%rax
  movzbl 0x30(%rsp,%rax,1),%eax
  cmp    $0x2d,%al
  je     L84
  lea    0x1(%r12),%edx
  movslq %edx,%rdx
  mov    $0x0,%ecx
  mov    $0x0,%ebx
  mov    $0x0,%r11d
  mov    $0x0,%r9d
  mov    $0x0,%edi
  lea    0x2a(%rsp),%r8
  lea    0x25(%rsp),%r10
  lea    0x19(%rsp),%rbp
  lea    0x17(%rsp),%r13
  jmp    L4
L291:
  add    $0x1,%edi
L261:
  mov    %edx,%esi
  movzbl 0x30(%rsp,%rdx,1),%eax
  add    $0x1,%rcx
  add    $0x1,%rdx
  cmp    $0x2d,%al
  je     L407
L4:
  cmp    %al,(%rcx,%r8,1)
  je     L291
  cmp    %al,(%rcx,%r10,1)
  je     L98
  cmp    %al,(%rcx,%rbp,1)
  je     L212
  cmp    %al,(%rcx,%r13,1)
  jne    L261
  add    $0x1,%ebx
  jmp    L261
L98:
  add    $0x1,%r9d
  jmp    L261
L212:
  add    $0x1,%r11d
  jmp    L261
L407:
  mov    %esi,%eax
  sub    %r12d,%eax
  cmp    %edi,%eax
  je     L84
  cmp    %r9d,%eax
  je     L350
  cmp    %r11d,%eax
  je     L347
  cmp    %ebx,%eax
  jne    L76
  lea    D20(%rip),%rdi
  call   <printf@plt>
  jmp    L76
L84:
  lea    D64(%rip),%rdi
  call   <printf@plt>
  jmp    L76
L350:
  lea    D46(%rip),%rdi
  call   <printf@plt>
  jmp    L76
L347:
  lea    D33(%rip),%rdi
  call   <printf@plt>
  jmp    L76
L74:
  lea    D16(%rip),%rdi
  call   <printf@plt>
L76:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L295
  mov    $0x0,%eax
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L295:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D25
type_infered: string
name: disassemble_data
arguments: data_label: D56
type_infered: string
name: disassemble_data
arguments: data_label: D20
type_infered: string
name: disassemble_data
arguments: data_label: D64
type_infered: string
name: disassemble_data
arguments: data_label: D46
type_infered: string
name: disassemble_data
arguments: data_label: D33
type_infered: string
name: disassemble_data
arguments: data_label: D16
type_infered: string

tool: D25: %s

tool: D56: 1

tool: D20: 
Pyramid Books

tool: D64: 
Bluebridge

tool: D46: 
Alyson Books

tool: D33: 
FUNimation Productions, Ltd.

tool: D16: 0

assistant: ```c
int main() {
  char ISBN[20];
  int v = 1, d = 0, i = 0, count = 0, digit_check = 0, pub_ptr = 0;
  char pub1[6] = "933346", pub2[5] = "55583", pub3[4] = "4210", pub4[2] = "01";
  char ex1[4] = "978-", ex2[4] = "979-";
  int pub1_result, pub2_result, pub3_result, pub4_result;
  scanf("%s", ISBN);
  if (strlen(ISBN) != 17)
    v = 0;
  for (i = 0; i < strlen(ISBN); i++) {
    if (ISBN[i] == '-')
      d++;
    if (d == 2 && pub_ptr == 0)
      pub_ptr = i + 1;
    if ((ISBN[i] < '0' || ISBN[i] > '9') && ISBN[i] != '-' && ISBN[i] != '\n' && ISBN[i] != ' ')
      v = 0;
    else if (ISBN[i] >= '0' && ISBN[i] <= '9') {
      count++;
      if (count <= 12) {
        if (count % 2)
          digit_check = digit_check + (ISBN[i] - '0');
        else
          digit_check = digit_check + (ISBN[i] - '0') * 3;
      }
    }
  }
  if (d != 4)
    v = 0;
  else {
    digit_check = digit_check % 10;
    if (digit_check)
      digit_check = 10 - digit_check;
    if ((ISBN[16] - '0') != digit_check)
      v = 0;
  }
  for (i = 0; i < 4; i++) {
    if (ISBN[i] != ex1[i] && ISBN[i] != ex2[i])
      v = 0;
  }
  pub1_result = 0;
  pub2_result = 0;
  pub3_result = 0;
  pub4_result = 0;
  if (v) {
    printf("1");
    for (i = pub_ptr; ISBN[i] != '-'; i++) {
      if (ISBN[i] == pub1[i - pub_ptr]) {
        pub1_result++;
      } else if (ISBN[i] == pub2[i - pub_ptr]) {
        pub2_result++;
      } else if (ISBN[i] == pub3[i - pub_ptr]) {
        pub3_result++;
      } else if (ISBN[i] == pub4[i - pub_ptr]) {
        pub4_result++;
      }
    }
    if (i - pub_ptr == pub1_result) {
      printf("\nBluebridge");
    } else if (i - pub_ptr == pub2_result) {
      printf("\nAlyson Books");
    } else if (i - pub_ptr == pub3_result) {
      printf("\nFUNimation Productions, Ltd.");
    } else if (i - pub_ptr == pub4_result) {
      printf("\nPyramid Books");
    }
  } else
    printf("0");
}
```