user: Demonstrate the C code that generates the assembly output below:

```asm
<getmntent_r>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  sub    $0x60,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %rdx,-0x68(%rbp)
  mov    %ecx,-0x6c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  mov    -0x60(%rbp),%rax
  movl   $0x0,0x24(%rax)
  mov    -0x60(%rbp),%rax
  movl   $0x0,0x20(%rax)
L42:
  mov    -0x58(%rbp),%rdx
  mov    -0x6c(%rbp),%ecx
  mov    -0x68(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  mov    -0x58(%rbp),%rax
  mov    %rax,%rdi
  call   <feof@plt>
  test   %rax,%rax
  je     L49
  mov    $0x0,%eax
  jmp    L4
L49:
  mov    -0x60(%rbp),%rax
  lea    0x20(%rax),%r12
  mov    -0x60(%rbp),%rax
  lea    0x24(%rax),%rbx
  lea    -0x40(%rbp),%rdi
  add    $0x1c,%rdi
  lea    -0x40(%rbp),%rsi
  add    $0x18,%rsi
  lea    -0x40(%rbp),%rcx
  add    $0x14,%rcx
  lea    -0x40(%rbp),%rdx
  add    $0x10,%rdx
  lea    -0x40(%rbp),%r9
  add    $0xc,%r9
  lea    -0x40(%rbp),%r8
  add    $0x8,%r8
  lea    -0x40(%rbp),%rax
  add    $0x4,%rax
  lea    -0x40(%rbp),%r11
  mov    -0x68(%rbp),%r10
  push   %r12
  push   %rbx
  push   %rdi
  push   %rsi
  push   %rcx
  push   %rdx
  mov    %rax,%rcx
  mov    %r11,%rdx
  lea    D2(%rip),%rax
  mov    %rax,%rsi
  mov    %r10,%rdi
  call   <sscanf@plt>
  add    $0x30,%rsp
  mov    %eax,-0x44(%rbp)
  cmpl   $0x1,-0x44(%rbp)
  jle    L42
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x23,%al
  je     L42
  mov    -0x3c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x34(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x2c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x24(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  mov    -0x40(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x38(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%rax
  mov    %rdx,0x8(%rax)
  mov    -0x30(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%rax
  mov    %rdx,0x10(%rax)
  mov    -0x28(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x68(%rbp),%rax
  add    %rax,%rdx
  mov    -0x60(%rbp),%rax
  mov    %rdx,0x18(%rax)
  mov    -0x60(%rbp),%rax
L4:
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L40
  call   <__stack_chk_fail@plt>
L40:
  lea    -0x10(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D2
datatype: string

tool: D2:  %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d

assistant: ```c
struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int buflen) {
  int cnt, n[8];
  mnt->mnt_freq = 0;
  mnt->mnt_passno = 0;
  do {
    fgets(linebuf, buflen, f);
    if (feof(f))
      return NULL;
    cnt = sscanf(linebuf, " %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d", n, n + 1, n + 2, n + 3, n + 4, n + 5, n + 6, n + 7, &mnt->mnt_freq, &mnt->mnt_passno);
  } while (cnt < 2 || linebuf[n[0]] == '#');
  linebuf[n[1]] = 0;
  linebuf[n[3]] = 0;
  linebuf[n[5]] = 0;
  linebuf[n[7]] = 0;
  mnt->mnt_fsname = linebuf + n[0];
  mnt->mnt_dir = linebuf + n[2];
  mnt->mnt_type = linebuf + n[4];
  mnt->mnt_opts = linebuf + n[6];
  return mnt;
}
```