user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<ex1>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x4b0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x64636261,-0xd(%rbp)
  movb   $0x65,-0x9(%rbp)
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  movl   $0x0,-0x4ac(%rbp)
  jmp    L52
L23:
  movl   $0x0,-0x4a8(%rbp)
  jmp    L48
L84:
  mov    $0x0,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x64,%edx,%ecx
  sub    %ecx,%eax
  mov    %eax,%edx
  add    $0x1e,%edx
  mov    -0x4a8(%rbp),%eax
  cltq
  add    $0x1e,%rax
  mov    %edx,-0x4a0(%rbp,%rax,4)
  mov    $0x0,%eax
  call   <rand@plt>
  mov    %eax,%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x4,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  shl    $0x3,%eax
  mov    %edx,%ecx
  sub    %eax,%ecx
  lea    0x1(%rcx),%edx
  mov    -0x4a8(%rbp),%eax
  cltq
  add    $0x1e,%rax
  mov    %edx,-0x420(%rbp,%rax,4)
  movl   $0x0,-0x4a4(%rbp)
  jmp    L8
L31:
  mov    $0x0,%eax
  call   <rand@plt>
  mov    %eax,%ecx
  mov    %ecx,%edx
  mov    $0xcccccccd,%eax
  imul   %rdx,%rax
  shr    $0x20,%rax
  mov    %eax,%edx
  shr    $0x2,%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  sub    %eax,%ecx
  mov    %ecx,%edx
  mov    %edx,%eax
  movzbl -0xd(%rbp,%rax,1),%edx
  mov    -0x4ac(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x4a4(%rbp),%eax
  movslq %eax,%rcx
  mov    %rcx,%rax
  shl    $0x4,%rax
  sub    %rcx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rsi,%rax
  sub    $0x3a0,%rax
  mov    %dl,(%rax)
  addl   $0x1,-0x4a4(%rbp)
L8:
  cmpl   $0x1d,-0x4a4(%rbp)
  jle    L31
  mov    -0x4ac(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x4a8(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x4,%rax
  sub    %rdx,%rax
  add    %rax,%rax
  add    %rbp,%rax
  add    %rcx,%rax
  sub    $0x3a0,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <putchar@plt>
  addl   $0x1,-0x4a8(%rbp)
L48:
  cmpl   $0x1d,-0x4a8(%rbp)
  jle    L84
  mov    -0x4ac(%rbp),%eax
  cltq
  add    $0x1e,%rax
  mov    -0x4a0(%rbp,%rax,4),%eax
  mov    -0x4ac(%rbp),%edx
  movslq %edx,%rdx
  add    $0x1e,%rdx
  mov    -0x420(%rbp,%rdx,4),%edx
  sub    %edx,%eax
  mov    $0x0,%edx
  test   %eax,%eax
  cmovns %eax,%edx
  mov    -0x4ac(%rbp),%eax
  cltq
  add    $0x1e,%rax
  mov    -0x4a0(%rbp,%rax,4),%eax
  mov    -0x4ac(%rbp),%ecx
  movslq %ecx,%rcx
  add    $0x1e,%rcx
  mov    -0x420(%rbp,%rcx,4),%ecx
  sub    %ecx,%eax
  cmp    $0x31,%eax
  jg     L85
  lea    D21(%rip),%rax
  jmp    L70
L85:
  lea    D23(%rip),%rax
L70:
  mov    %edx,%ecx
  mov    %rax,%rdx
  lea    D3(%rip),%rax
  mov    %rax,%rsi
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  addl   $0x1,-0x4ac(%rbp)
L52:
  cmpl   $0x1d,-0x4ac(%rbp)
  jle    L23
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L24
  call   <__stack_chk_fail@plt>
L24:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D21
type_infered: string
name: read_data
arguments: data_tag: D23
type_infered: string
name: read_data
arguments: data_tag: D3
type_infered: string
name: read_data
arguments: data_tag: D31
type_infered: string

tool: D21: Estoque abaixo de 50

tool: D23: 

tool: D3: Quantidade estoque

tool: D31: 
%s ||  %s ||  %d



assistant: ```c
void ex1() {
  int qtdp[1][30], qtdv[1][30];
  char name[30][30], alph[5] = {'a', 'b', 'c', 'd', 'e'};
  srand(time(NULL));
  for (int i = 0; i < 30; i++) {
    for (int k = 0; k < 30; k++) {
      qtdp[1][k] = rand() % 100 + 30;
      qtdv[1][k] = rand() % 40 + 1;
      for (int j = 0; j < 30; j++) {
        name[j][i] = alph[(unsigned int)rand() % 5];
      }
      printf("%c", name[k][i]);
    }
    printf("\n%s ||  %s ||  %d\n\n", "Quantidade estoque", qtdp[1][i] - qtdv[1][i] < 50 ? "Estoque abaixo de 50" : "\b\b\b\b\b", qtdp[1][i] - qtdv[1][i] >= 0 ? qtdp[1][i] - qtdv[1][i] : 0);
  }
}
```