user: 请将以下的汇编代码转换成C语言代码:

```asm
<rng_spawn>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xdd0,%rsp
  mov    %rdi,-0xdb8(%rbp)
  mov    %rsi,-0xdc0(%rbp)
  mov    %edx,-0xdc4(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0xdb8(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0xd9c(%rbp)
  mov    -0xdb8(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xd98(%rbp)
  mov    -0xdb8(%rbp),%rax
  add    $0x24,%rax
  mov    %rax,-0xd90(%rbp)
  mov    -0xd98(%rbp),%eax
  add    $0x9,%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0xdb8(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xd88(%rbp)
  mov    -0xdb8(%rbp),%rax
  mov    0x20(%rax),%eax
  mov    %eax,-0xda0(%rbp)
  subl   $0x1,-0xda0(%rbp)
  cmpl   $0x0,-0xda0(%rbp)
  jns    L156
  mov    -0xd98(%rbp),%eax
  sub    $0x1,%eax
  add    %eax,-0xda0(%rbp)
L156:
  mov    -0xda0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd90(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jns    L154
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%edi
  call   <exit@plt>
L154:
  mov    -0xda0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd90(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xda0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xd90(%rbp),%rax
  add    %rcx,%rax
  add    %edx,%edx
  mov    %edx,(%rax)
  mov    -0xdb8(%rbp),%rax
  lea    0x20(%rax),%rdx
  mov    -0xda0(%rbp),%eax
  mov    %eax,(%rdx)
  movl   $0x0,-0xda8(%rbp)
  jmp    L77
L113:
  mov    -0xda8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xdb8(%rbp),%rax
  add    %rdx,%rax
  mov    -0xda8(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0xdc0(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0xda8(%rbp)
L77:
  mov    -0xd9c(%rbp),%eax
  sub    -0xd98(%rbp),%eax
  cmp    %eax,-0xda8(%rbp)
  jl     L113
  mov    -0xda0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd90(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xda0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xd90(%rbp),%rax
  add    %rcx,%rax
  add    $0x2,%edx
  mov    %edx,(%rax)
  mov    -0xdc0(%rbp),%rax
  add    $0x24,%rax
  mov    %rax,-0xd90(%rbp)
  mov    -0xd98(%rbp),%eax
  add    $0x9,%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0xdc0(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0xd88(%rbp)
  mov    -0xda0(%rbp),%eax
  mov    %eax,-0xda4(%rbp)
  movl   $0x0,-0xda8(%rbp)
  jmp    L157
L85:
  mov    -0xda4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd90(%rbp),%rax
  add    %rdx,%rax
  mov    -0xda8(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0xd88(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0xda4(%rbp)
  mov    -0xd98(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0xda4(%rbp)
  jne    L141
  movl   $0x0,-0xda4(%rbp)
L141:
  addl   $0x1,-0xda8(%rbp)
L157:
  mov    -0xd98(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0xda8(%rbp)
  jl     L85
  mov    -0xdc0(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xdc0(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xd88(%rbp),%rax
  add    %rcx,%rax
  add    $0x1,%edx
  mov    %edx,(%rax)
  mov    -0xd88(%rbp),%rax
  mov    (%rax),%edx
  mov    -0xdc0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  xor    %eax,%edx
  mov    -0xd88(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0xd98(%rbp),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0xd88(%rbp),%rax
  add    %rdx,%rax
  movl   $0x0,(%rax)
  mov    -0xdc0(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0xdc0(%rbp),%rax
  add    $0x18,%rax
  sub    $0x1,%edx
  mov    %edx,(%rax)
  mov    -0xdc0(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%edx
  mov    -0xdc0(%rbp),%rax
  add    $0x1c,%rax
  sub    $0x1,%edx
  mov    %edx,(%rax)
  mov    -0xdc0(%rbp),%rax
  mov    0xc(%rax),%eax
  mov    %eax,-0xd94(%rbp)
  movl   $0x0,-0xda4(%rbp)
  jmp    L129
L19:
  movl   $0x0,-0xda8(%rbp)
  jmp    L151
L55:
  mov    -0xda8(%rbp),%edx
  mov    -0xd98(%rbp),%eax
  add    %edx,%eax
  sub    -0xd94(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xda8(%rbp),%eax
  cltq
  mov    %edx,-0xd80(%rbp,%rax,4)
  addl   $0x1,-0xda8(%rbp)
L151:
  mov    -0xda8(%rbp),%eax
  cmp    -0xd94(%rbp),%eax
  jl     L55
  mov    -0xd94(%rbp),%eax
  mov    %eax,-0xda8(%rbp)
  jmp    L41
L147:
  mov    -0xda8(%rbp),%eax
  sub    -0xd94(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd88(%rbp),%rax
  add    %rdx,%rax
  mov    -0xda8(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0xd88(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0xda8(%rbp)
L41:
  mov    -0xda8(%rbp),%eax
  cmp    -0xd98(%rbp),%eax
  jl     L147
  movl   $0x0,-0xda8(%rbp)
  jmp    L34
L23:
  mov    -0xda8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd88(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0xda8(%rbp),%eax
  cltq
  mov    -0xd80(%rbp,%rax,4),%edx
  mov    -0xda8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rsi
  mov    -0xd88(%rbp),%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0xda8(%rbp)
L34:
  mov    -0xda8(%rbp),%eax
  cmp    -0xd94(%rbp),%eax
  jl     L23
  mov    -0xd94(%rbp),%eax
  add    %eax,-0xda4(%rbp)
L129:
  mov    -0xdc0(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xda4(%rbp)
  jl     L19
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L135
  call   <__stack_chk_fail@plt>
L135:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D2
type_guessed: string

tool: D2: 

ALFG:  node limit exceeded



assistant: ```c
void rng_spawn(int *mystate, int *newstate, int spawnNumber) {
  int i, j, l, k, zp, state_size, tmp[861];
  int *reg, *node;
  state_size = mystate[0];
  l = mystate[1];
  node = &(mystate[9]);
  reg = &(mystate[(9 + l - 1)]);
  zp = mystate[8];
  zp = zp - 1;
  if (zp < 0)
    zp += (l - 1);
  if (node[zp] & 0x80000000) {
    printf("\n\nALFG:  node limit exceeded\n\n");
    exit(0);
  }
  node[zp] <<= 1;
  mystate[8] = zp;
  for (i = 0; i < state_size - l; i++)
    newstate[i] = mystate[i];
  node[zp] += 2;
  node = &(newstate[9]);
  reg = &(newstate[(9 + l - 1)]);
  j = zp;
  for (i = 0; i < l - 1; i++) {
    reg[i] = node[j];
    if (++j == (l - 1))
      j = 0;
  }
  reg[newstate[4]] += 1;
  reg[0] ^= newstate[2];
  reg[l - 1] = 0;
  newstate[6] = newstate[1] - 1;
  newstate[7] = newstate[3] - 1;
  k = newstate[3];
  for (j = 0; j < newstate[5]; j += k) {
    for (i = 0; i < k; i++)
      tmp[i] = reg[i + l - k];
    for (i = k; i < l; i++)
      reg[i] = reg[i - k];
    for (i = 0; i < k; i++)
      reg[i] += tmp[i];
  }
}
```