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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x14(%rbp),%rax
  mov    %rax,%rsi
  lea    D61(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    -0x14(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %ax,-0x32(%rbp)
  cmpw   $0xa,-0x32(%rbp)
  je     L264
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L264:
  movw   $0x0,-0x34(%rbp)
  jmp    L357
L347:
  movzwl -0x34(%rbp),%eax
  cltq
  movzbl -0x14(%rbp,%rax,1),%eax
  cmp    $0x2f,%al
  jle    L63
  movzwl -0x34(%rbp),%eax
  cltq
  movzbl -0x14(%rbp,%rax,1),%eax
  cmp    $0x39,%al
  jle    L100
L63:
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L100:
  movzwl -0x34(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x34(%rbp)
L357:
  cmpw   $0x9,-0x34(%rbp)
  jbe    L347
  movzbl -0x12(%rbp),%eax
  cmp    $0x35,%al
  jle    L142
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L142:
  movzbl -0x12(%rbp),%eax
  cmp    $0x35,%al
  je     L311
  movzbl -0x12(%rbp),%eax
  cmp    $0x33,%al
  je     L311
  movzbl -0x12(%rbp),%eax
  cmp    $0x31,%al
  jne    L281
L311:
  movzbl -0x11(%rbp),%eax
  cmp    $0x32,%al
  jle    L281
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L281:
  movzbl -0x10(%rbp),%eax
  cmp    $0x33,%al
  jle    L87
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L87:
  movzbl -0x12(%rbp),%eax
  cmp    $0x30,%al
  je     L295
  movzbl -0x12(%rbp),%eax
  cmp    $0x32,%al
  je     L295
  movzbl -0x12(%rbp),%eax
  cmp    $0x34,%al
  jne    L278
L295:
  movzbl -0x11(%rbp),%eax
  cmp    $0x32,%al
  jne    L278
  movzbl -0x10(%rbp),%eax
  cmp    $0x32,%al
  jle    L144
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L144:
  movzbl -0x10(%rbp),%eax
  cmp    $0x32,%al
  jne    L278
  movzbl -0xf(%rbp),%eax
  cmp    $0x39,%al
  jne    L278
  movzbl -0x12(%rbp),%eax
  cmp    $0x34,%al
  je     L278
  movzbl -0x12(%rbp),%eax
  cmp    $0x35,%al
  je     L278
  lea    -0x14(%rbp),%rax
  mov    %rax,%rdi
  call   <dividable_4@plt>
  test   %rax,%rax
  je     L32
  movzbl -0x14(%rbp),%eax
  cmp    $0x30,%al
  jne    L278
  movzbl -0x13(%rbp),%eax
  cmp    $0x30,%al
  jne    L278
L32:
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L278:
  movzbl -0x10(%rbp),%eax
  cmp    $0x33,%al
  jne    L317
  movzbl -0x11(%rbp),%eax
  cmp    $0x34,%al
  je     L53
  movzbl -0x11(%rbp),%eax
  cmp    $0x36,%al
  je     L53
  movzbl -0x11(%rbp),%eax
  cmp    $0x39,%al
  je     L53
  movzbl -0x11(%rbp),%eax
  cmp    $0x31,%al
  jne    L210
  movzbl -0x12(%rbp),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  cltd
  shr    $0x1f,%edx
  add    %edx,%eax
  and    $0x1,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  jne    L210
L53:
  movzbl -0xf(%rbp),%eax
  cmp    $0x30,%al
  jle    L317
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L210:
  movzbl -0xf(%rbp),%eax
  cmp    $0x31,%al
  jle    L317
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L317:
  movw   $0x0,-0x34(%rbp)
  jmp    L171
L376:
  movzwl -0x34(%rbp),%eax
  cltq
  movzbl -0x14(%rbp,%rax,1),%eax
  movsbw %al,%dx
  movzwl -0x34(%rbp),%eax
  sub    $0x30,%edx
  cltq
  mov    %dx,-0x30(%rbp,%rax,2)
  movzwl -0x34(%rbp),%eax
  add    $0x1,%eax
  mov    %ax,-0x34(%rbp)
L171:
  cmpw   $0x9,-0x34(%rbp)
  jbe    L376
  movzwl -0x1e(%rbp),%eax
  movzwl %ax,%esi
  movzwl -0x30(%rbp),%eax
  movzwl %ax,%edx
  movzwl -0x2e(%rbp),%eax
  movzwl %ax,%eax
  add    %eax,%eax
  add    %eax,%edx
  movzwl -0x2c(%rbp),%eax
  movzwl %ax,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  lea    (%rax,%rax,1),%ecx
  movzwl -0x2a(%rbp),%eax
  movzwl %ax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%ecx
  movzwl -0x28(%rbp),%eax
  movzwl %ax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  add    %eax,%ecx
  movzwl -0x26(%rbp),%eax
  movzwl %ax,%edx
  mov    %edx,%eax
  shl    $0x3,%eax
  add    %edx,%eax
  add    %eax,%ecx
  movzwl -0x24(%rbp),%eax
  movzwl %ax,%edx
  mov    %edx,%eax
  shl    $0x3,%eax
  sub    %edx,%eax
  add    %eax,%ecx
  movzwl -0x22(%rbp),%eax
  movzwl %ax,%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%ecx
  movzwl -0x20(%rbp),%eax
  movzwl %ax,%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,%eax
  add    %eax,%ecx
  movslq %ecx,%rax
  imul   $0x2e8ba2e9,%rax,%rax
  shr    $0x20,%rax
  sar    %eax
  mov    %ecx,%edi
  sar    $0x1f,%edi
  sub    %edi,%eax
  mov    %eax,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  sub    %eax,%ecx
  mov    %ecx,%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%edi
  sar    $0x1f,%edi
  sub    %edi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  cmp    %ecx,%esi
  je     L17
  lea    D66(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L185
L17:
  lea    D84(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1,%eax
L185:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L354
  call   <__stack_chk_fail@plt>
L354:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D61
type_infered: string
name: unpack_data
arguments: data_label: D66
type_infered: string
name: unpack_data
arguments: data_label: D84
type_infered: string

tool: D61: %s

tool: D66: 0

tool: D84: 1

assistant: ```c
int main() {
  char input[12];
  short unsigned int i, l, n[10];
  scanf("%s", input);
  l = strlen(input);
  if (l != 10) {
    printf("0");
    return 0;
  }
  for (i = 0; i < 10; i++)
    if (input[i] < '0' || input[i] > '9') {
      printf("0");
      return 0;
    }
  if (input[2] > '5') {
    printf("0");
    return 0;
  }
  if ((input[2] == '5' || input[2] == '3' || input[2] == '1') && input[3] > '2') {
    printf("0");
    return 0;
  }
  if (input[4] > '3') {
    printf("0");
    return 0;
  }
  if ((input[2] == '0' || input[2] == '2' || input[2] == '4') && input[3] == '2') {
    if (input[4] > '2') {
      printf("0");
      return 0;
    }
    if (input[4] == '2' && input[5] == '9' && !((input[2] == '4' || input[2] == '5') || (dividable_4(input) && !(input[0] == '0' && input[1] == '0')))) {
      printf("0");
      return 0;
    }
  }
  if (input[4] == '3') {
    if (input[3] == '4' || input[3] == '6' || input[3] == '9' || (input[3] == '1' && ((int)input[2] - 48) % 2 == 1)) {
      if (input[5] > '0') {
        printf("0");
        return 0;
      }
    } else if (input[5] > '1') {
      printf("0");
      return 0;
    }
  }
  for (i = 0; i < 10; i++)
    n[i] = (short unsigned int)input[i] - 48;
  if (n[9] != ((n[0] * 2 + n[1] * 4 + n[2] * 8 + n[3] * 5 + n[4] * 10 + n[5] * 9 + n[6] * 7 + n[7] * 3 + n[8] * 6) % 11) % 10) {
    printf("0");
    return 0;
  }
  printf("1");
  return 1;
}
```