user: Translate the below assembly code into C programming language:

```asm
<donJose>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D8(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D88(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D71(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D32(%rip),%rax
  mov    %rax,-0x78(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movl   $0x0,-0x10(%rbp)
  lea    D110(%rip),%rax
  mov    %rax,%rdi
  call   <openPipe@plt>
  mov    %eax,-0x98(%rbp)
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  call   <openPipe@plt>
  mov    %eax,-0x94(%rbp)
  mov    $0x1388,%esi
  mov    $0x3e8,%edi
  call   <randBound@plt>
  mov    %eax,%edi
  call   <sleep@plt>
  mov    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  lea    0x1(%rax),%rdx
  mov    -0x90(%rbp),%rcx
  mov    -0x94(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <write@plt>
  lea    -0x70(%rbp),%rcx
  mov    -0x98(%rbp),%eax
  mov    $0x63,%edx
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <read@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rsi
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1388,%esi
  mov    $0x3e8,%edi
  call   <randBound@plt>
  mov    %eax,%edi
  call   <sleep@plt>
  mov    -0x88(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  lea    0x1(%rax),%rdx
  mov    -0x88(%rbp),%rcx
  mov    -0x94(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <write@plt>
  lea    -0x70(%rbp),%rcx
  mov    -0x98(%rbp),%eax
  mov    $0x63,%edx
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <read@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rsi
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1388,%esi
  mov    $0x3e8,%edi
  call   <randBound@plt>
  mov    %eax,%edi
  call   <sleep@plt>
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  lea    0x1(%rax),%rdx
  mov    -0x80(%rbp),%rcx
  mov    -0x94(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <write@plt>
  lea    -0x70(%rbp),%rcx
  mov    -0x98(%rbp),%eax
  mov    $0x63,%edx
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <read@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rsi
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x1388,%esi
  mov    $0x3e8,%edi
  call   <randBound@plt>
  mov    %eax,%edi
  call   <sleep@plt>
  mov    -0x78(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  lea    0x1(%rax),%rdx
  mov    -0x78(%rbp),%rcx
  mov    -0x94(%rbp),%eax
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <write@plt>
  lea    -0x70(%rbp),%rcx
  mov    -0x98(%rbp),%eax
  mov    $0x63,%edx
  mov    %rcx,%rsi
  mov    %eax,%edi
  call   <read@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rsi
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D110(%rip),%rax
  mov    %rax,%rdi
  call   <closePipe@plt>
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  call   <closePipe@plt>
  nop
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L4
  call   <__stack_chk_fail@plt>
L4:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D8
datatype: string
name: retrieve_data
arguments: label: D88
datatype: string
name: retrieve_data
arguments: label: D71
datatype: string
name: retrieve_data
arguments: label: D32
datatype: string
name: retrieve_data
arguments: label: D110
datatype: string
name: retrieve_data
arguments: label: D9
datatype: string
name: retrieve_data
arguments: label: D31
datatype: string

tool: D8: Hola don Pepito

tool: D88: Paso usted por mi casa?

tool: D71: Vio usted a mi abuela?

tool: D32: Adios don Pepito

tool: D110: PepitoToJose

tool: D9: JoseToPepito

tool: D31: Pepito: %s


assistant: ```c
int donJose() {
  char *msgs[4] = {"Hola don Pepito", "Paso usted por mi casa?", "Vio usted a mi abuela?", "Adios don Pepito"};
  char buffer[100] = {0};
  int me = openPipe("PepitoToJose");
  int pepito = openPipe("JoseToPepito");
  sleep(randBound(1000, 5000));
  write(pepito, msgs[0], strlen(msgs[0]) + 1);
  read(me, buffer, 99);
  printf("Pepito: %s\n", buffer);
  sleep(randBound(1000, 5000));
  write(pepito, msgs[1], strlen(msgs[1]) + 1);
  read(me, buffer, 99);
  printf("Pepito: %s\n", buffer);
  sleep(randBound(1000, 5000));
  write(pepito, msgs[2], strlen(msgs[2]) + 1);
  read(me, buffer, 99);
  printf("Pepito: %s\n", buffer);
  sleep(randBound(1000, 5000));
  write(pepito, msgs[3], strlen(msgs[3]) + 1);
  read(me, buffer, 99);
  printf("Pepito: %s\n", buffer);
  closePipe("PepitoToJose");
  closePipe("JoseToPepito");
}
```