user: Converte this assembly snippet into its equivalent C code:

```asm
<read_geogrid>:
  endbr64
  push   %r15
  mov    %rdx,%r15
  push   %r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x448,%rsp
  mov    0x480(%rsp),%rax
  lea    0x30(%rsp),%r12
  mov    0x498(%rsp),%rbp
  mov    %rax,0x28(%rsp)
  mov    0x488(%rsp),%rax
  mov    %rax,0x20(%rsp)
  mov    0x490(%rsp),%rax
  mov    %rax,0x10(%rsp)
  mov    0x4a0(%rsp),%rax
  mov    %rax,0x18(%rsp)
  mov    %fs:0x28,%rdx
  mov    %rdx,0x438(%rsp)
  xor    %edx,%edx
  movl   $0x0,(%rax)
  mov    (%r9),%eax
  mov    (%rsi),%edx
  mov    %rdi,%rsi
  mov    %r12,%rdi
  mov    (%rcx),%ebx
  mov    %eax,(%rsp)
  mov    (%r8),%r14d
  call   <strncpy@plt>
  movslq 0x0(%r13),%rax
  lea    D80(%rip),%rsi
  mov    %r12,%rdi
  movb   $0x0,0x30(%rsp,%rax,1)
  call   <fopen@plt>
  test   %rax,%rax
  je     L421
  imul   %r14d,%ebx
  mov    0x0(%rbp),%edi
  mov    %rax,%r12
  imul   (%rsp),%ebx
  imul   %ebx,%edi
  call   <malloc@plt>
  mov    0x0(%rbp),%edx
  mov    %r12,%rcx
  mov    $0x1,%esi
  mov    %rax,%rdi
  mov    %rax,%r13
  imul   %ebx,%edx
  call   <fread@plt>
  mov    %r12,%rdi
  mov    %eax,%r14d
  call   <fclose@plt>
  test   %r14d,%r14d
  je     L421
  mov    0x20(%rsp),%rax
  movslq (%rax),%r11
  test   %r11d,%r11d
  je     L862
  xor    %ecx,%ecx
  mov    $0x1,%edi
  mov    $0x2,%r8d
  xor    %eax,%eax
  mov    $0x3,%esi
  mov    $0x2,%r9d
  xor    %edx,%edx
  mov    $0x1,%r11d
L675:
  mov    0x0(%rbp),%ebp
  cmp    $0x3,%ebp
  je     L175
  jg     L4
  cmp    $0x1,%ebp
  je     L617
  cmp    $0x2,%ebp
  jne    L632
  test   %ebx,%ebx
  jle    L461
  mov    0x28(%rsp),%rax
  mov    %ebx,%esi
  movslq %edx,%r8
  lea    -0x1(%rbx),%ebp
  lea    -0x1(%rsi,%rsi,1),%rcx
  lea    (%r15,%rsi,4),%r12
  mov    (%rax),%eax
  lea    0x0(%r13,%r8,1),%rsi
  test   %eax,%eax
  lea    (%r11,%r13,1),%rax
  lea    (%rax,%rcx,1),%rdx
  setne  %dil
  cmp    %rdx,%r15
  setae  %r9b
  cmp    %rax,%r12
  setbe  %dl
  add    %rsi,%rcx
  or     %edx,%r9d
  cmp    %rcx,%r15
  setae  %dl
  cmp    %rsi,%r12
  setbe  %cl
  or     %ecx,%edx
  test   %dl,%r9b
  je     L644
  cmp    $0xf,%ebp
  jbe    L644
  mov    %edi,%edx
  mov    %ebp,%ecx
  add    $0x10,%rsi
  mov    %r8,%r9
  shl    $0x1f,%edx
  shr    $0x4,%ecx
  sub    %r11,%r9
  sub    %rax,%rsi
  sar    $0x1f,%edx
  shl    $0x5,%rcx
  pxor   %xmm5,%xmm5
  pxor   %xmm4,%xmm4
  movd   %edx,%xmm6
  movdqa D94(%rip),%xmm0
  add    %rax,%rcx
  mov    %r15,%rdx
  pshufd $0x0,%xmm6,%xmm3
  movdqa D60(%rip),%xmm7
  movdqa D66(%rip),%xmm6
  nopl   0x0(%rax,%rax,1)
L935:
  movdqu (%rax),%xmm1
  movdqu 0x10(%rax),%xmm2
  movdqa %xmm6,%xmm14
  add    $0x40,%rdx
  movdqu (%rsi,%rax,1),%xmm8
  pand   %xmm0,%xmm2
  pand   %xmm0,%xmm1
  packuswb %xmm2,%xmm1
  movdqu (%r9,%rax,1),%xmm2
  pand   %xmm0,%xmm8
  add    $0x20,%rax
  movdqa %xmm1,%xmm11
  punpckhbw %xmm5,%xmm1
  pand   %xmm0,%xmm2
  psllw  $0x8,%xmm1
  punpcklbw %xmm5,%xmm11
  packuswb %xmm8,%xmm2
  psllw  $0x8,%xmm11
  movdqa %xmm2,%xmm8
  punpckhbw %xmm5,%xmm2
  punpcklbw %xmm5,%xmm8
  por    %xmm2,%xmm1
  por    %xmm8,%xmm11
  movdqa %xmm1,%xmm12
  punpckhwd %xmm4,%xmm1
  movdqa %xmm11,%xmm13
  punpckhwd %xmm4,%xmm11
  punpcklwd %xmm4,%xmm12
  punpcklwd %xmm4,%xmm13
  movdqa %xmm11,%xmm9
  movdqa %xmm12,%xmm8
  movdqa %xmm13,%xmm10
  pcmpgtd %xmm7,%xmm9
  paddd  %xmm13,%xmm14
  pcmpgtd %xmm7,%xmm10
  pcmpgtd %xmm7,%xmm8
  movdqa %xmm1,%xmm2
  pcmpgtd %xmm7,%xmm2
  pand   %xmm3,%xmm9
  pand   %xmm3,%xmm10
  pand   %xmm3,%xmm8
  pand   %xmm10,%xmm14
  pandn  %xmm13,%xmm10
  movdqa %xmm6,%xmm13
  paddd  %xmm11,%xmm13
  pand   %xmm3,%xmm2
  por    %xmm14,%xmm10
  pand   %xmm9,%xmm13
  pandn  %xmm11,%xmm9
  movdqa %xmm6,%xmm11
  cvtdq2ps %xmm10,%xmm10
  paddd  %xmm12,%xmm11
  por    %xmm13,%xmm9
  movups %xmm10,-0x40(%rdx)
  pand   %xmm8,%xmm11
  pandn  %xmm12,%xmm8
  cvtdq2ps %xmm9,%xmm9
  movups %xmm9,-0x30(%rdx)
  por    %xmm11,%xmm8
  movdqa %xmm6,%xmm11
  paddd  %xmm1,%xmm11
  cvtdq2ps %xmm8,%xmm8
  movups %xmm8,-0x20(%rdx)
  pand   %xmm2,%xmm11
  pandn  %xmm1,%xmm2
  por    %xmm11,%xmm2
  cvtdq2ps %xmm2,%xmm1
  movups %xmm1,-0x10(%rdx)
  cmp    %rcx,%rax
  jne    L935
  mov    %ebp,%eax
  sub    %r11,%r8
  and    $0xfffffff0,%eax
  lea    (%rax,%rax,1),%edx
  movslq %eax,%rcx
  movslq %edx,%rdx
  add    %r13,%rdx
  add    %r11,%rdx
  nopw   0x0(%rax,%rax,1)
L616:
  movzbl (%rdx),%esi
  movzbl (%r8,%rdx,1),%eax
  shl    $0x8,%esi
  or     %esi,%eax
  cmp    $0x8000,%eax
  jle    L784
  lea    -0x10000(%rax),%esi
  test   %dil,%dil
  cmovne %esi,%eax
L784:
  pxor   %xmm0,%xmm0
  add    $0x2,%rdx
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,(%r15,%rcx,4)
  add    $0x1,%rcx
  cmp    %ecx,%ebx
  jg     L616
L416:
  mov    %r13,%rdi
  call   <free@plt>
  mov    0x10(%rsp),%rax
  movss  (%rax),%xmm0
  ucomiss D57(%rip),%xmm0
  jp     L916
  je     L655
L916:
  mulss  (%r15),%xmm0
  movss  %xmm0,(%r15)
L878:
  mov    0x10(%rsp),%rdi
  mov    %ebp,%eax
  lea    0x4(%r15,%rax,4),%rax
  cmp    %rax,%rdi
  setae  %al
  cmp    %rdi,%r15
  setae  %dl
  or     %dl,%al
  je     L715
  cmp    $0x2,%ebx
  je     L715
  lea    -0x2(%rbx),%eax
  cmp    $0x2,%eax
  jbe    L126
  mov    %ebp,%edx
  movss  (%rdi),%xmm1
  lea    0x4(%r15),%rax
  shr    $0x2,%edx
  sub    $0x1,%edx
  shufps $0x0,%xmm1,%xmm1
  shl    $0x4,%rdx
  lea    0x14(%r15,%rdx,1),%rdx
  xchg   %ax,%ax
L48:
  movups (%rax),%xmm0
  add    $0x10,%rax
  mulps  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rax,%rdx
  jne    L48
  mov    %ebp,%ecx
  and    $0xfffffffc,%ecx
  lea    0x1(%rcx),%edx
  mov    %edx,%eax
  cmp    %ebp,%ecx
  je     L655
  sub    %ecx,%ebx
  lea    -0x1(%rbx),%ebp
  cmp    $0x2,%ebx
  je     L259
L218:
  mov    0x10(%rsp),%rbx
  lea    (%r15,%rdx,4),%rdx
  movq   (%rdx),%xmm0
  movss  (%rbx),%xmm1
  shufps $0xe0,%xmm1,%xmm1
  mulps  %xmm1,%xmm0
  movlps %xmm0,(%rdx)
  mov    %ebp,%edx
  and    $0xfffffffe,%edx
  add    %edx,%eax
  cmp    %ebp,%edx
  je     L655
L259:
  mov    0x10(%rsp),%rbx
  cltq
  lea    (%r15,%rax,4),%rax
  movss  (%rax),%xmm0
  mulss  (%rbx),%xmm0
  movss  %xmm0,(%rax)
L655:
  xor    %eax,%eax
  jmp    L620
  nopl   0x0(%rax)
L421:
  mov    0x18(%rsp),%rax
  movl   $0x1,(%rax)
  mov    $0x1,%eax
L620:
  mov    0x438(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L682
  add    $0x448,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L4:
  cmp    $0x4,%ebp
  jne    L632
  test   %ebx,%ebx
  jle    L461
  lea    (%rsi,%r13,1),%rax
  movslq %ecx,%r14
  movslq %r8d,%rdx
  movslq %edi,%r12
  mov    %rax,%rcx
  lea    0x0(%r13,%rdx,1),%r9
  mov    %rdx,(%rsp)
  lea    -0x1(%rbx),%ebp
  not    %rcx
  lea    0x0(%r13,%r12,1),%r8
  mov    %r12,0x18(%rsp)
  lea    0x0(%r13,%r14,1),%rdi
  mov    %rcx,%rdx
  mov    %r9,%rcx
  mov    %r14,0x20(%rsp)
  add    %r15,%rdx
  not    %rcx
  cmp    $0x3b,%rdx
  seta   %dl
  add    %r15,%rcx
  cmp    $0x3b,%rcx
  seta   %cl
  and    %ecx,%edx
  cmp    $0xf,%ebp
  seta   %cl
  and    %ecx,%edx
  mov    %r8,%rcx
  not    %rcx
  add    %r15,%rcx
  cmp    $0x3b,%rcx
  seta   %cl
  test   %cl,%dl
  je     L196
  mov    %rdi,%rcx
  not    %rcx
  mov    %rcx,%rdx
  add    %r15,%rdx
  cmp    $0x3b,%rdx
  jbe    L196
  mov    %ebp,%r10d
  add    $0x10,%r9
  add    $0x10,%r8
  add    $0x10,%rdi
  shr    $0x4,%r10d
  mov    %r15,%rcx
  lea    0x20(%rax),%rdx
  sub    %rsi,%r14
  mov    %r10d,%r11d
  sub    %rsi,%r12
  pxor   %xmm6,%xmm6
  sub    %rax,%r9
  shl    $0x6,%r11
  sub    %rax,%r8
  pxor   %xmm5,%xmm5
  sub    %rax,%rdi
  lea    (%r11,%rax,1),%r10
  mov    %rax,%r11
  movdqa D94(%rip),%xmm0
  neg    %r11
  mov    %r11,0x28(%rsp)
  mov    (%rsp),%r11
  sub    %rsi,%r11
  nop
L288:
  movdqu (%rax),%xmm2
  movdqu 0x10(%rax),%xmm1
  add    $0x40,%rcx
  movdqu 0x30(%rax),%xmm3
  movdqu (%r9,%rax,1),%xmm4
  pand   %xmm0,%xmm1
  pand   %xmm0,%xmm2
  movdqu (%r9,%rdx,1),%xmm7
  movdqu (%r8,%rdx,1),%xmm9
  packuswb %xmm1,%xmm2
  movdqu (%rdx),%xmm1
  pand   %xmm0,%xmm3
  pand   %xmm0,%xmm4
  pand   %xmm0,%xmm2
  pand   %xmm0,%xmm7
  pand   %xmm0,%xmm9
  movdqu (%rdi,%rax,1),%xmm10
  pand   %xmm0,%xmm1
  movdqu (%rdi,%rdx,1),%xmm11
  add    $0x40,%rdx
  packuswb %xmm3,%xmm1
  pand   %xmm0,%xmm10
  pand   %xmm0,%xmm1
  pand   %xmm0,%xmm11
  packuswb %xmm1,%xmm2
  movdqu (%rax,%r11,1),%xmm1
  movdqa %xmm2,%xmm3
  punpckhbw %xmm6,%xmm2
  pand   %xmm0,%xmm1
  punpcklbw %xmm6,%xmm3
  packuswb %xmm4,%xmm1
  movdqu -0x40(%rdx,%r11,1),%xmm4
  pand   %xmm0,%xmm1
  pand   %xmm0,%xmm4
  packuswb %xmm7,%xmm4
  movdqu (%r8,%rax,1),%xmm7
  add    $0x40,%rax
  pand   %xmm0,%xmm4
  packuswb %xmm4,%xmm1
  movdqu -0x40(%rax,%r12,1),%xmm4
  pand   %xmm0,%xmm7
  movdqa %xmm1,%xmm8
  punpckhbw %xmm6,%xmm1
  pand   %xmm0,%xmm4
  punpcklbw %xmm6,%xmm8
  packuswb %xmm7,%xmm4
  movdqu -0x40(%rdx,%r12,1),%xmm7
  pand   %xmm0,%xmm4
  pand   %xmm0,%xmm7
  packuswb %xmm9,%xmm7
  pand   %xmm0,%xmm7
  packuswb %xmm7,%xmm4
  movdqu -0x40(%rax,%r14,1),%xmm7
  movdqa %xmm4,%xmm9
  punpckhbw %xmm6,%xmm4
  pand   %xmm0,%xmm7
  psllw  $0x8,%xmm4
  punpcklbw %xmm6,%xmm9
  packuswb %xmm10,%xmm7
  movdqu -0x40(%rdx,%r14,1),%xmm10
  psllw  $0x8,%xmm9
  pand   %xmm0,%xmm7
  movdqa %xmm9,%xmm13
  punpckhwd %xmm5,%xmm9
  pand   %xmm0,%xmm10
  punpcklwd %xmm5,%xmm13
  packuswb %xmm11,%xmm10
  pand   %xmm0,%xmm10
  packuswb %xmm10,%xmm7
  movdqa %xmm3,%xmm10
  punpckhwd %xmm5,%xmm3
  movdqa %xmm7,%xmm11
  punpcklwd %xmm5,%xmm10
  punpckhbw %xmm6,%xmm7
  pslld  $0x18,%xmm10
  pslld  $0x18,%xmm3
  punpcklbw %xmm6,%xmm11
  movdqa %xmm11,%xmm12
  punpckhwd %xmm5,%xmm11
  punpcklwd %xmm5,%xmm12
  por    %xmm11,%xmm3
  por    %xmm12,%xmm10
  movdqa %xmm8,%xmm12
  punpckhwd %xmm5,%xmm8
  pslld  $0x10,%xmm8
  punpcklwd %xmm5,%xmm12
  por    %xmm8,%xmm9
  pslld  $0x10,%xmm12
  movdqa %xmm7,%xmm8
  por    %xmm9,%xmm3
  punpcklwd %xmm5,%xmm8
  movdqa %xmm4,%xmm9
  cvtdq2ps %xmm3,%xmm3
  movups %xmm3,-0x30(%rcx)
  movdqa %xmm2,%xmm3
  punpckhwd %xmm5,%xmm2
  punpcklwd %xmm5,%xmm3
  punpcklwd %xmm5,%xmm9
  punpckhwd %xmm5,%xmm4
  pslld  $0x18,%xmm3
  pslld  $0x18,%xmm2
  punpckhwd %xmm5,%xmm7
  por    %xmm8,%xmm3
  movdqa %xmm1,%xmm8
  punpckhwd %xmm5,%xmm1
  punpcklwd %xmm5,%xmm8
  pslld  $0x10,%xmm1
  por    %xmm13,%xmm12
  pslld  $0x10,%xmm8
  por    %xmm4,%xmm1
  por    %xmm2,%xmm7
  por    %xmm9,%xmm8
  por    %xmm12,%xmm10
  por    %xmm7,%xmm1
  por    %xmm8,%xmm3
  cvtdq2ps %xmm10,%xmm10
  cvtdq2ps %xmm1,%xmm1
  movups %xmm10,-0x40(%rcx)
  cvtdq2ps %xmm3,%xmm3
  movups %xmm1,-0x10(%rcx)
  movups %xmm3,-0x20(%rcx)
  cmp    %r10,%rax
  jne    L288
  and    $0xfffffff0,%ebp
  mov    0x28(%rsp),%rax
  mov    0x20(%rsp),%rdi
  lea    0x0(,%rbp,4),%edx
  mov    (%rsp),%r8
  mov    0x18(%rsp),%r9
  movslq %edx,%rdx
  lea    (%r15,%rax,1),%rcx
  sub    %rsi,%rdi
  add    %r13,%rdx
  sub    %rsi,%r8
  sub    %rsi,%r9
  add    %rsi,%rdx
  nopl   (%rax)
L74:
  movzbl (%rdx),%esi
  movzbl (%rdi,%rdx,1),%eax
  pxor   %xmm0,%xmm0
  add    $0x1,%ebp
  shl    $0x18,%esi
  or     %esi,%eax
  movzbl (%r8,%rdx,1),%esi
  shl    $0x10,%esi
  or     %esi,%eax
  movzbl (%r9,%rdx,1),%esi
  shl    $0x8,%esi
  or     %esi,%eax
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,(%rcx,%rdx,1)
  add    $0x4,%rdx
  cmp    %ebp,%ebx
  jg     L74
L609:
  mov    %r13,%rdi
  call   <free@plt>
  mov    0x10(%rsp),%rax
  movss  (%rax),%xmm0
  ucomiss D57(%rip),%xmm0
  jp     L326
  je     L655
L326:
  mulss  (%r15),%xmm0
  lea    -0x1(%rbx),%ebp
  movss  %xmm0,(%r15)
  cmp    $0x1,%ebx
  jg     L878
  xor    %eax,%eax
  jmp    L620
  nopl   (%rax)
L862:
  xor    %esi,%esi
  xor    %r9d,%r9d
  mov    $0x3,%ecx
  mov    $0x2,%edi
  mov    $0x1,%r8d
  mov    $0x2,%eax
  mov    $0x1,%edx
  jmp    L675
  nopl   0x0(%rax)
L632:
  mov    %r13,%rdi
  call   <free@plt>
  mov    0x10(%rsp),%rax
  movss  (%rax),%xmm0
  ucomiss D57(%rip),%xmm0
  jp     L456
  je     L655
L456:
  test   %ebx,%ebx
  jg     L326
  jmp    L655
  nopl   0x0(%rax)
L617:
  test   %ebx,%ebx
  jle    L461
  mov    0x28(%rsp),%rax
  lea    -0x1(%rbx),%ebp
  mov    (%rax),%edx
  mov    %ebx,%eax
  lea    (%r15,%rax,4),%rcx
  test   %edx,%edx
  mov    %r13,%rdx
  setne  %sil
  cmp    %rcx,%r13
  setae  %cl
  add    %r13,%rax
  cmp    %rax,%r15
  setae  %al
  or     %al,%cl
  je     L117
  cmp    $0xe,%ebp
  jbe    L117
  mov    %esi,%eax
  mov    %ebx,%ecx
  movdqa D42(%rip),%xmm7
  pxor   %xmm5,%xmm5
  shl    $0x1f,%eax
  shr    $0x4,%ecx
  pxor   %xmm8,%xmm8
  sar    $0x1f,%eax
  shl    $0x4,%rcx
  movd   %eax,%xmm6
  add    %r13,%rcx
  mov    %r15,%rax
  pshufd $0x0,%xmm6,%xmm4
  movdqa D83(%rip),%xmm6
  nopw   0x0(%rax,%rax,1)
L132:
  movdqu (%rdx),%xmm9
  movdqa %xmm6,%xmm13
  add    $0x10,%rdx
  add    $0x40,%rax
  movdqa %xmm9,%xmm11
  punpckhbw %xmm8,%xmm9
  punpcklbw %xmm8,%xmm11
  movdqa %xmm9,%xmm10
  punpckhwd %xmm5,%xmm9
  movdqa %xmm11,%xmm12
  punpckhwd %xmm5,%xmm11
  punpcklwd %xmm5,%xmm10
  punpcklwd %xmm5,%xmm12
  movdqa %xmm11,%xmm2
  movdqa %xmm10,%xmm0
  movdqa %xmm12,%xmm3
  pcmpgtd %xmm7,%xmm2
  paddd  %xmm12,%xmm13
  pcmpgtd %xmm7,%xmm3
  pcmpgtd %xmm7,%xmm0
  movdqa %xmm9,%xmm1
  pcmpgtd %xmm7,%xmm1
  pand   %xmm4,%xmm2
  pand   %xmm4,%xmm3
  pand   %xmm4,%xmm0
  pand   %xmm3,%xmm13
  pandn  %xmm12,%xmm3
  movdqa %xmm6,%xmm12
  paddd  %xmm11,%xmm12
  pand   %xmm4,%xmm1
  por    %xmm13,%xmm3
  pand   %xmm2,%xmm12
  pandn  %xmm11,%xmm2
  cvtdq2ps %xmm3,%xmm3
  movups %xmm3,-0x40(%rax)
  por    %xmm12,%xmm2
  movdqa %xmm2,%xmm11
  movdqa %xmm6,%xmm2
  paddd  %xmm10,%xmm2
  pand   %xmm0,%xmm2
  pandn  %xmm10,%xmm0
  por    %xmm0,%xmm2
  movdqa %xmm6,%xmm0
  paddd  %xmm9,%xmm0
  pand   %xmm1,%xmm0
  pandn  %xmm9,%xmm1
  por    %xmm0,%xmm1
  cvtdq2ps %xmm11,%xmm0
  movups %xmm0,-0x30(%rax)
  cvtdq2ps %xmm2,%xmm0
  movups %xmm0,-0x20(%rax)
  cvtdq2ps %xmm1,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rcx,%rdx
  jne    L132
  mov    %ebx,%eax
  and    $0xfffffff0,%eax
  test   $0xf,%bl
  je     L416
  movslq %eax,%rdi
  movzbl 0x0(%r13,%rdi,1),%ecx
  cmp    $0x80,%ecx
  jle    L383
  lea    -0x100(%rcx),%edx
  test   %sil,%sil
  cmovne %edx,%ecx
L383:
  pxor   %xmm0,%xmm0
  lea    0x0(,%rdi,4),%rdx
  cvtsi2ss %ecx,%xmm0
  lea    0x1(%rax),%ecx
  movss  %xmm0,(%r15,%rdi,4)
  cmp    %ebx,%ecx
  jge    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L436
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L436:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0x2(%rax),%ecx
  movss  %xmm0,0x4(%r15,%rdx,1)
  cmp    %ebx,%ecx
  jge    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L876
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L876:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0x3(%rax),%ecx
  movss  %xmm0,0x8(%r15,%rdx,1)
  cmp    %ebx,%ecx
  jge    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L129
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L129:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0x4(%rax),%ecx
  movss  %xmm0,0xc(%r15,%rdx,1)
  cmp    %ebx,%ecx
  jge    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L173
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L173:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0x5(%rax),%ecx
  movss  %xmm0,0x10(%r15,%rdx,1)
  cmp    %ecx,%ebx
  jle    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L366
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L366:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0x6(%rax),%ecx
  movss  %xmm0,0x14(%r15,%rdx,1)
  cmp    %ebx,%ecx
  jge    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L468
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L468:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0x7(%rax),%ecx
  movss  %xmm0,0x18(%r15,%rdx,1)
  cmp    %ecx,%ebx
  jle    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L313
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L313:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0x8(%rax),%ecx
  movss  %xmm0,0x1c(%r15,%rdx,1)
  cmp    %ebx,%ecx
  jge    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L822
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L822:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0x9(%rax),%ecx
  movss  %xmm0,0x20(%r15,%rdx,1)
  cmp    %ebx,%ecx
  jge    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L664
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L664:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0xa(%rax),%ecx
  movss  %xmm0,0x24(%r15,%rdx,1)
  cmp    %ecx,%ebx
  jle    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L363
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L363:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0xb(%rax),%ecx
  movss  %xmm0,0x28(%r15,%rdx,1)
  cmp    %ecx,%ebx
  jle    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L40
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L40:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0xc(%rax),%ecx
  movss  %xmm0,0x2c(%r15,%rdx,1)
  cmp    %ecx,%ebx
  jle    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L141
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L141:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ecx,%xmm0
  lea    0xd(%rax),%ecx
  movss  %xmm0,0x30(%r15,%rdx,1)
  cmp    %ecx,%ebx
  jle    L416
  movslq %ecx,%rcx
  movzbl 0x0(%r13,%rcx,1),%ecx
  cmp    $0x80,%ecx
  jle    L79
  lea    -0x100(%rcx),%edi
  test   %sil,%sil
  cmovne %edi,%ecx
L79:
  pxor   %xmm0,%xmm0
  add    $0xe,%eax
  cvtsi2ss %ecx,%xmm0
  movss  %xmm0,0x34(%r15,%rdx,1)
  cmp    %eax,%ebx
  jle    L416
  cltq
  movzbl 0x0(%r13,%rax,1),%eax
  cmp    $0x80,%eax
  jle    L105
  lea    -0x100(%rax),%ecx
  test   %sil,%sil
  cmovne %ecx,%eax
L105:
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,0x38(%r15,%rdx,1)
  jmp    L416
  nopl   (%rax)
L175:
  test   %ebx,%ebx
  jle    L461
  mov    %ebx,%ecx
  mov    0x28(%rsp),%rdi
  mov    %rax,0x18(%rsp)
  lea    -0x1(%rbx),%ebp
  lea    (%rcx,%rcx,2),%r8
  lea    (%r15,%rcx,4),%r12
  mov    (%rdi),%r11d
  lea    0x0(%r13,%rax,1),%rdi
  lea    -0x1(%r13,%r8,1),%rax
  cmp    %rax,%r15
  lea    0x1(%r13),%rcx
  lea    -0x2(%r8),%rdx
  setae  %al
  cmp    %rcx,%r12
  lea    (%r9,%r13,1),%rsi
  setbe  %r8b
  or     %r8d,%eax
  cmp    $0xe,%ebp
  seta   %r8b
  and    %r8d,%eax
  lea    (%rdx,%rsi,1),%r8
  cmp    %r8,%r15
  setae  %r8b
  cmp    %rsi,%r12
  setbe  %r14b
  or     %r14d,%r8d
  test   %r8b,%al
  je     L654
  add    %rdi,%rdx
  cmp    %rdx,%r15
  setae  %al
  cmp    %rdi,%r12
  setbe  %dl
  or     %dl,%al
  je     L654
  mov    %ebx,%eax
  movd   %r11d,%xmm6
  pxor   %xmm4,%xmm4
  mov    %r15,%r8
  shr    $0x4,%eax
  pshufd $0x0,%xmm6,%xmm8
  movdqa D86(%rip),%xmm7
  pxor   %xmm3,%xmm3
  sub    $0x1,%eax
  movdqa D34(%rip),%xmm6
  pxor   %xmm5,%xmm5
  shl    $0x6,%rax
  lea    0x40(%r15,%rax,1),%r10
  nopw   0x0(%rax,%rax,1)
L317:
  movzbl 0x15(%rsi),%edx
  movzbl 0x12(%rsi),%eax
  movzbl 0x2a(%rsi),%r12d
  movzbl (%rsi),%r14d
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0xf(%rsi),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0xc(%rsi),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x9(%rsi),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x6(%rsi),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x3(%rsi),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x2d(%rsi),%eax
  shl    $0x8,%rdx
  shl    $0x8,%rax
  or     %r14,%rdx
  movzbl (%rcx),%r14d
  or     %r12,%rax
  movzbl 0x27(%rsi),%r12d
  mov    %rdx,(%rsp)
  shl    $0x8,%rax
  movzbl 0x15(%rcx),%edx
  or     %r12,%rax
  movzbl 0x24(%rsi),%r12d
  shl    $0x8,%rax
  shl    $0x8,%rdx
  or     %r12,%rax
  movzbl 0x21(%rsi),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl 0x1e(%rsi),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl 0x1b(%rsi),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl 0x18(%rsi),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl 0x2a(%rcx),%r12d
  mov    %rax,0x8(%rsp)
  movzbl 0x12(%rcx),%eax
  movdqa (%rsp),%xmm2
  movdqa (%rsp),%xmm0
  or     %rax,%rdx
  movzbl 0xf(%rcx),%eax
  shl    $0x8,%rdx
  punpcklbw %xmm4,%xmm2
  punpckhbw %xmm4,%xmm0
  or     %rax,%rdx
  movzbl 0xc(%rcx),%eax
  movdqa %xmm2,%xmm10
  punpckhwd %xmm3,%xmm2
  shl    $0x8,%rdx
  pslld  $0x10,%xmm2
  punpcklwd %xmm3,%xmm10
  or     %rax,%rdx
  movzbl 0x9(%rcx),%eax
  pslld  $0x10,%xmm10
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x6(%rcx),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x3(%rcx),%eax
  shl    $0x8,%rdx
  or     %rax,%rdx
  movzbl 0x2d(%rcx),%eax
  shl    $0x8,%rdx
  shl    $0x8,%rax
  or     %r14,%rdx
  or     %r12,%rax
  movzbl 0x27(%rcx),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl 0x24(%rcx),%r12d
  movzbl (%rdi),%r14d
  mov    %rdx,(%rsp)
  shl    $0x8,%rax
  movzbl 0x15(%rdi),%edx
  or     %r12,%rax
  movzbl 0x21(%rcx),%r12d
  shl    $0x8,%rax
  shl    $0x8,%rdx
  or     %r12,%rax
  movzbl 0x1e(%rcx),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl 0x1b(%rcx),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl 0x18(%rcx),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl 0x2a(%rdi),%r12d
  mov    %rax,0x8(%rsp)
  movzbl 0x12(%rdi),%eax
  movdqa (%rsp),%xmm9
  movdqa (%rsp),%xmm1
  or     %rax,%rdx
  movzbl 0xf(%rdi),%eax
  shl    $0x8,%rdx
  punpcklbw %xmm4,%xmm9
  punpckhbw %xmm4,%xmm1
  psllw  $0x8,%xmm9
  psllw  $0x8,%xmm1
  or     %rax,%rdx
  movzbl 0xc(%rdi),%eax
  shl    $0x8,%rdx
  movdqa %xmm9,%xmm13
  punpckhwd %xmm3,%xmm9
  or     %rax,%rdx
  movzbl 0x9(%rdi),%eax
  punpcklwd %xmm3,%xmm13
  por    %xmm9,%xmm2
  shl    $0x8,%rdx
  por    %xmm13,%xmm10
  movdqa %xmm0,%xmm9
  or     %rax,%rdx
  movzbl 0x6(%rdi),%eax
  punpcklwd %xmm3,%xmm9
  punpckhwd %xmm3,%xmm0
  pslld  $0x10,%xmm9
  shl    $0x8,%rdx
  pslld  $0x10,%xmm0
  add    $0x40,%r8
  or     %rax,%rdx
  movzbl 0x3(%rdi),%eax
  add    $0x30,%rsi
  add    $0x30,%rcx
  shl    $0x8,%rdx
  add    $0x30,%rdi
  or     %rax,%rdx
  movzbl -0x3(%rdi),%eax
  shl    $0x8,%rdx
  shl    $0x8,%rax
  or     %r14,%rdx
  or     %r12,%rax
  movzbl -0x9(%rdi),%r12d
  mov    %rdx,(%rsp)
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl -0xc(%rdi),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl -0xf(%rdi),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl -0x12(%rdi),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl -0x15(%rdi),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  movzbl -0x18(%rdi),%r12d
  shl    $0x8,%rax
  or     %r12,%rax
  mov    %rax,0x8(%rsp)
  movdqa (%rsp),%xmm12
  movdqa (%rsp),%xmm11
  punpcklbw %xmm4,%xmm12
  movdqa %xmm12,%xmm13
  punpckhwd %xmm3,%xmm12
  punpckhbw %xmm4,%xmm11
  punpcklwd %xmm3,%xmm13
  por    %xmm12,%xmm2
  movdqa %xmm1,%xmm12
  por    %xmm13,%xmm10
  punpcklwd %xmm3,%xmm12
  punpckhwd %xmm3,%xmm1
  movdqa %xmm10,%xmm13
  por    %xmm12,%xmm9
  movdqa %xmm11,%xmm12
  pcmpgtd %xmm7,%xmm13
  punpcklwd %xmm3,%xmm12
  por    %xmm1,%xmm0
  por    %xmm12,%xmm9
  movdqa %xmm2,%xmm12
  punpckhwd %xmm3,%xmm11
  pcmpgtd %xmm7,%xmm12
  por    %xmm11,%xmm0
  movdqa %xmm10,%xmm14
  pand   %xmm8,%xmm13
  movdqa %xmm9,%xmm11
  paddd  %xmm6,%xmm14
  pcmpeqd %xmm5,%xmm13
  pcmpgtd %xmm7,%xmm11
  movdqa %xmm0,%xmm1
  pand   %xmm8,%xmm12
  pcmpgtd %xmm7,%xmm1
  pcmpeqd %xmm5,%xmm12
  pand   %xmm13,%xmm10
  pandn  %xmm14,%xmm13
  pand   %xmm8,%xmm11
  por    %xmm13,%xmm10
  movdqa %xmm2,%xmm13
  pand   %xmm8,%xmm1
  paddd  %xmm6,%xmm13
  pcmpeqd %xmm5,%xmm11
  pand   %xmm12,%xmm2
  cvtdq2ps %xmm10,%xmm10
  pandn  %xmm13,%xmm12
  pcmpeqd %xmm5,%xmm1
  movups %xmm10,-0x40(%r8)
  por    %xmm12,%xmm2
  movdqa %xmm9,%xmm12
  paddd  %xmm6,%xmm12
  pand   %xmm11,%xmm9
  cvtdq2ps %xmm2,%xmm2
  movups %xmm2,-0x30(%r8)
  pandn  %xmm12,%xmm11
  por    %xmm9,%xmm11
  movdqa %xmm0,%xmm9
  pand   %xmm1,%xmm0
  paddd  %xmm6,%xmm9
  cvtdq2ps %xmm11,%xmm11
  movups %xmm11,-0x20(%r8)
  pandn  %xmm9,%xmm1
  por    %xmm0,%xmm1
  cvtdq2ps %xmm1,%xmm1
  movups %xmm1,-0x10(%r8)
  cmp    %r10,%r8
  jne    L317
  mov    %ebx,%eax
  and    $0xfffffff0,%eax
  test   $0xf,%bl
  je     L416
  lea    (%rax,%rax,2),%edx
  mov    0x18(%rsp),%r8
  mov    $0x1,%edi
  movslq %eax,%rcx
  movslq %edx,%rdx
  sub    %r9,%rdi
  add    %r13,%rdx
  sub    %r9,%r8
  add    %r9,%rdx
  nopl   0x0(%rax,%rax,1)
L122:
  movzbl (%rdx),%esi
  movzbl (%r8,%rdx,1),%eax
  pxor   %xmm0,%xmm0
  shl    $0x10,%esi
  or     %esi,%eax
  movzbl (%rdi,%rdx,1),%esi
  shl    $0x8,%esi
  or     %esi,%eax
  xor    %esi,%esi
  cmp    $0x800000,%eax
  lea    -0x1000000(%rax),%r9d
  setg   %sil
  imul   %r11d,%esi
  test   %esi,%esi
  cmovne %r9d,%eax
  add    $0x3,%rdx
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,(%r15,%rcx,4)
  add    $0x1,%rcx
  cmp    %ecx,%ebx
  jg     L122
  jmp    L416
L654:
  lea    0x4(%rbp,%rbp,2),%rdi
  mov    0x18(%rsp),%r8
  mov    %r15,%rsi
  add    %r13,%rdi
L490:
  movzbl (%rcx),%edx
  movzbl -0x1(%r8,%rcx,1),%eax
  pxor   %xmm0,%xmm0
  shl    $0x8,%edx
  or     %edx,%eax
  movzbl -0x1(%r9,%rcx,1),%edx
  shl    $0x10,%edx
  or     %edx,%eax
  xor    %edx,%edx
  cmp    $0x800000,%eax
  lea    -0x1000000(%rax),%r10d
  setg   %dl
  imul   %r11d,%edx
  test   %edx,%edx
  cmovne %r10d,%eax
  add    $0x3,%rcx
  add    $0x4,%rsi
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,-0x4(%rsi)
  cmp    %rcx,%rdi
  jne    L490
  jmp    L609
L117:
  mov    %r13,%rax
  lea    0x1(%r13,%rbp,1),%rdi
  neg    %rax
  lea    (%r15,%rax,4),%rcx
L797:
  movzbl (%rdx),%eax
  cmp    $0x80,%eax
  jle    L726
  lea    -0x100(%rax),%r8d
  test   %sil,%sil
  cmovne %r8d,%eax
L726:
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,(%rcx,%rdx,4)
  add    $0x1,%rdx
  cmp    %rdx,%rdi
  jne    L797
  jmp    L609
L644:
  mov    %rax,%rdx
  lea    0x2(%r13,%rbp,2),%r9
  sub    %r11,%r8
  neg    %rdx
  add    %r11,%r9
  lea    (%r15,%rdx,2),%rbp
L115:
  movzbl (%rax),%ecx
  movzbl (%r8,%rax,1),%edx
  shl    $0x8,%ecx
  or     %ecx,%edx
  cmp    $0x8000,%edx
  jle    L64
  lea    -0x10000(%rdx),%ecx
  test   %dil,%dil
  cmovne %ecx,%edx
L64:
  pxor   %xmm0,%xmm0
  cvtsi2ss %edx,%xmm0
  movss  %xmm0,0x0(%rbp,%rax,2)
  add    $0x2,%rax
  cmp    %rax,%r9
  jne    L115
  jmp    L609
  nopl   0x0(%rax,%rax,1)
L461:
  mov    %r13,%rdi
  call   <free@plt>
  xor    %eax,%eax
  jmp    L620
  nop
L715:
  lea    -0x2(%rbx),%edx
  mov    0x10(%rsp),%rcx
  lea    0x4(%r15),%rax
  lea    0x8(%r15,%rdx,4),%rdx
  nopl   0x0(%rax)
L55:
  movss  (%rax),%xmm0
  mulss  (%rcx),%xmm0
  add    $0x4,%rax
  movss  %xmm0,-0x4(%rax)
  cmp    %rax,%rdx
  jne    L55
  xor    %eax,%eax
  jmp    L620
L196:
  mov    0x20(%rsp),%r8
  mov    (%rsp),%r9
  lea    0x4(%r13,%rbp,4),%rcx
  mov    %r15,%rdi
  mov    0x18(%rsp),%r11
  add    %rsi,%rcx
  sub    %rax,%rdi
  sub    %rsi,%r8
  sub    %rsi,%r9
  sub    %rsi,%r11
  nopw   0x0(%rax,%rax,1)
L67:
  movzbl (%rax),%esi
  movzbl (%r8,%rax,1),%edx
  pxor   %xmm0,%xmm0
  shl    $0x18,%esi
  or     %esi,%edx
  movzbl (%r9,%rax,1),%esi
  shl    $0x10,%esi
  or     %esi,%edx
  movzbl (%r11,%rax,1),%esi
  shl    $0x8,%esi
  or     %esi,%edx
  cvtsi2ss %edx,%xmm0
  movss  %xmm0,(%rdi,%rax,1)
  add    $0x4,%rax
  cmp    %rcx,%rax
  jne    L67
  jmp    L609
L126:
  mov    $0x1,%eax
  mov    $0x1,%edx
  jmp    L218
L682:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D80
type_infered: string
name: extract_symbolic_data
arguments: label: D94
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D60
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D66
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D57
type_infered: f32
name: extract_symbolic_data
arguments: label: D42
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D83
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D86
type_infered: byte[16]
name: extract_symbolic_data
arguments: label: D34
type_infered: byte[16]

tool: D80: rb

tool: {"D94": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

tool: {"D60": [0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00]}

tool: {"D66": [0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff,0x00,0x00,0xff,0xff]}

tool: D57: 1

tool: {"D42": [0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00]}

tool: {"D83": [0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff]}

tool: {"D86": [0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00]}

tool: {"D34": [0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff]}

assistant: ```c
int read_geogrid(char *fname, int *len, float *rarray, int *nx, int *ny, int *nz, int *isigned, int *endian, float *scalefactor, int *wordsize, int *status) {
  int i, ival, cnt, narray;
  int A2, B2;
  int A3, B3, C3;
  int A4, B4, C4, D4;
  unsigned char *c;
  char local_fname[1024];
  FILE *bfile;
  *status = 0;
  narray = (*nx) * (*ny) * (*nz);
  strncpy(local_fname, fname, *len);
  local_fname[*len] = '\0';
  if (!(bfile = fopen(local_fname, "rb"))) {
    *status = 1;
    return 1;
  }
  c = (unsigned char *)malloc(sizeof(unsigned char) * (*wordsize) * narray);
  cnt = fread((void *)c, sizeof(unsigned char), narray * (*wordsize), bfile);
  fclose(bfile);
  if (cnt == 0) {
    *status = 1;
    return 1;
  }
  if (*endian == 0) {
    A2 = 0;
    B2 = 1;
    A3 = 0;
    B3 = 1;
    C3 = 2;
    A4 = 0;
    B4 = 1;
    C4 = 2;
    D4 = 3;
  } else {
    B2 = 0;
    A2 = 1;
    C3 = 0;
    B3 = 1;
    A3 = 2;
    D4 = 0;
    C4 = 1;
    B4 = 2;
    A4 = 3;
  }
  switch (*wordsize) {
  case 1:
    for (i = 0; i < narray; i++) {
      ival = (int)(c[i]);
      if ((*isigned) && (ival > (1 << 7)))
        ival -= (1 << 8);
      rarray[i] = (float)ival;
    }
    break;
  case 2:
    for (i = 0; i < narray; i++) {
      ival = (int)((c[2 * i + A2] << 8) | (c[2 * i + B2]));
      if ((*isigned) && (ival > (1 << 15)))
        ival -= (1 << 16);
      rarray[i] = (float)ival;
    }
    break;
  case 3:
    for (i = 0; i < narray; i++) {
      ival = (int)((c[3 * i + A3] << 16) | (c[3 * i + B3] << 8) | c[3 * i + C3]);
      if ((*isigned) * (ival > (1 << 23)))
        ival -= (1 << 24);
      rarray[i] = (float)ival;
    }
    break;
  case 4:
    for (i = 0; i < narray; i++) {
      ival = (int)((c[4 * i + A4] << 24) | (c[4 * i + B4] << 16) | (c[4 * i + C4] << 8) | c[4 * i + D4]);
      if ((*isigned) && (ival > (1 << 31)))
        ival -= (1 << 32);
      rarray[i] = (float)ival;
    }
    break;
  }
  free(c);
  if (*scalefactor != 1.0) {
    for (i = 0; i < narray; i++)
      rarray[i] = rarray[i] * (*scalefactor);
  }
  return 0;
}
```