
Bignum_conflict modmul(Bignum_conflict p,Bignum_conflict q,Bignum_conflict mod)

{
  BignumInt *m;
  BignumInt *pBVar1;
  BignumInt *pBVar2;
  BignumInt *pBVar3;
  BignumInt *scratch;
  uint rshift;
  Bignum_conflict pBVar4;
  BignumInt BVar5;
  Bignum_conflict pBVar6;
  int iVar7;
  BignumInt *pBVar8;
  uint len;
  BignumInt mlen;
  BignumInt BVar9;
  
  mlen = *mod;
  if (mod[mlen] == 0) {
    pBVar4 = (Bignum_conflict)
             (*(code *)PTR___assert_fail_000bcb00)
                       (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,
                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,
                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);
    return pBVar4;
  }
  m = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(mlen,4);
  if (0 < (int)mlen) {
    BVar5 = 0;
    pBVar1 = m;
    do {
      *pBVar1 = mod[*mod - BVar5];
      BVar5 = BVar5 + 1;
      pBVar1 = pBVar1 + 1;
    } while (mlen != BVar5);
  }
  len = *p;
  if (*p <= *q) {
    len = *q;
  }
  if ((int)(len << 1) <= (int)mlen) {
    len = (int)mlen / 2 + 1;
  }
  pBVar1 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);
  iVar7 = len - *p;
  if (0 < iVar7) {
    pBVar2 = pBVar1;
    do {
      *pBVar2 = 0;
      pBVar2 = pBVar2 + 1;
    } while (pBVar2 != pBVar1 + iVar7);
  }
  BVar5 = *p;
  if (0 < (int)BVar5) {
    pBVar2 = pBVar1 + iVar7;
    iVar7 = 0;
    do {
      *pBVar2 = p[BVar5 - iVar7];
      iVar7 = iVar7 + 1;
      BVar5 = *p;
      pBVar2 = pBVar2 + 1;
    } while (iVar7 < (int)BVar5);
  }
  pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);
  iVar7 = len - *q;
  if (0 < iVar7) {
    pBVar3 = pBVar2;
    do {
      *pBVar3 = 0;
      pBVar3 = pBVar3 + 1;
    } while (pBVar3 != pBVar2 + iVar7);
  }
  BVar5 = *q;
  if (0 < (int)BVar5) {
    pBVar3 = pBVar2 + iVar7;
    iVar7 = 0;
    do {
      *pBVar3 = q[BVar5 - iVar7];
      iVar7 = iVar7 + 1;
      BVar5 = *q;
      pBVar3 = pBVar3 + 1;
    } while (iVar7 < (int)BVar5);
  }
  BVar5 = len * 2;
  pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(BVar5,4);
  iVar7 = mul_compute_scratch(len);
  scratch = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);
  BVar9 = *m;
  rshift = bn_clz(BVar9);
  if (rshift != 0) {
    BVar9 = BVar9 << (rshift & 0x1f);
    if (1 < (int)mlen) {
      BVar9 = BVar9 | m[1] >> (-rshift & 0x1f);
    }
  }
  BVar9 = reciprocal_word(BVar9);
  internal_mul(pBVar1,pBVar2,pBVar3,len,scratch);
  internal_mod(pBVar3,BVar5,m,mlen,(BignumInt *)0x0,BVar9,rshift);
  BVar9 = mlen;
  if ((int)BVar5 <= (int)mlen) {
    BVar9 = BVar5;
  }
  pBVar4 = newbn(BVar9);
  if (0 < (int)BVar9) {
    pBVar8 = pBVar3 + (BVar5 - BVar9);
    BVar5 = 0;
    do {
      pBVar4[*pBVar4 - BVar5] = *pBVar8;
      BVar5 = BVar5 + 1;
      pBVar8 = pBVar8 + 1;
    } while (BVar9 != BVar5);
  }
  BVar5 = *pBVar4;
  if (1 < BVar5) {
    pBVar6 = pBVar4 + BVar5;
    BVar9 = *pBVar6;
    while (BVar9 == 0) {
      BVar5 = BVar5 - 1;
      *pBVar4 = BVar5;
      if (BVar5 == 1) break;
      pBVar8 = pBVar6 + -1;
      pBVar6 = pBVar6 + -1;
      BVar9 = *pBVar8;
    }
  }
  (*(code *)PTR_smemclr_000bc1e4)(scratch,iVar7 << 2);
  (*(code *)PTR_safefree_000bc1a4)(scratch);
  (*(code *)PTR_smemclr_000bc1e4)(pBVar3,len << 3);
  (*(code *)PTR_safefree_000bc1a4)(pBVar3);
  (*(code *)PTR_smemclr_000bc1e4)(m,mlen * 4);
  (*(code *)PTR_safefree_000bc1a4)(m);
  (*(code *)PTR_smemclr_000bc1e4)(pBVar1,len << 2);
  (*(code *)PTR_safefree_000bc1a4)(pBVar1);
  (*(code *)PTR_smemclr_000bc1e4)(pBVar2,len << 2);
  (*(code *)PTR_safefree_000bc1a4)(pBVar2);
  return pBVar4;
}



uint * modmul(uint *param_1,uint *param_2,int *param_3)

{
  uint *puVar1;
  uint *puVar2;
  undefined4 *puVar3;
  uint uVar4;
  undefined4 *puVar5;
  undefined4 *puVar6;
  int iVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  uint *puVar10;
  int iVar11;
  int iVar12;
  uint *puVar13;
  uint uVar14;
  int iVar15;
  int iVar16;
  uint uVar17;
  
  iVar15 = *param_3;
  if (param_3[iVar15] == 0) {
    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)
                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,
                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,
                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);
    return puVar2;
  }
  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);
  if (0 < iVar15) {
    iVar11 = 0;
    puVar10 = puVar2;
    do {
      *puVar10 = param_3[*param_3 - iVar11];
      iVar11 = iVar11 + 1;
      puVar10 = puVar10 + 1;
    } while (iVar15 != iVar11);
  }
  uVar14 = *param_1;
  if (*param_1 <= *param_2) {
    uVar14 = *param_2;
  }
  if ((int)(uVar14 << 1) <= iVar15) {
    uVar14 = iVar15 / 2 + 1;
  }
  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);
  iVar11 = uVar14 - *param_1;
  if (0 < iVar11) {
    puVar5 = puVar3;
    do {
      *puVar5 = 0;
      puVar5 = puVar5 + 1;
    } while (puVar5 != puVar3 + iVar11);
  }
  uVar4 = *param_1;
  if (0 < (int)uVar4) {
    puVar10 = puVar3 + iVar11;
    iVar11 = 0;
    do {
      *puVar10 = param_1[uVar4 - iVar11];
      iVar11 = iVar11 + 1;
      uVar4 = *param_1;
      puVar10 = puVar10 + 1;
    } while (iVar11 < (int)uVar4);
  }
  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);
  iVar11 = uVar14 - *param_2;
  if (0 < iVar11) {
    puVar6 = puVar5;
    do {
      *puVar6 = 0;
      puVar6 = puVar6 + 1;
    } while (puVar6 != puVar5 + iVar11);
  }
  uVar4 = *param_2;
  if (0 < (int)uVar4) {
    puVar10 = puVar5 + iVar11;
    iVar11 = 0;
    do {
      *puVar10 = param_2[uVar4 - iVar11];
      iVar11 = iVar11 + 1;
      uVar4 = *param_2;
      puVar10 = puVar10 + 1;
    } while (iVar11 < (int)uVar4);
  }
  iVar12 = uVar14 * 2;
  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);
  iVar7 = FUN_0005c4cc(uVar14);
  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);
  uVar17 = *puVar2;
  uVar4 = FUN_0005c510(uVar17);
  if (uVar4 != 0) {
    uVar17 = uVar17 << (uVar4 & 0x1f);
    if (1 < iVar15) {
      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);
    }
  }
  uVar9 = FUN_0005c554(uVar17);
  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);
  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);
  iVar16 = iVar15;
  if (iVar12 <= iVar15) {
    iVar16 = iVar12;
  }
  puVar10 = (uint *)FUN_0005d738(iVar16);
  if (0 < iVar16) {
    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);
    iVar12 = 0;
    do {
      puVar10[*puVar10 - iVar12] = *puVar13;
      iVar12 = iVar12 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar16 != iVar12);
  }
  uVar4 = *puVar10;
  if (1 < uVar4) {
    puVar13 = puVar10 + uVar4;
    uVar17 = *puVar13;
    while (uVar17 == 0) {
      uVar4 = uVar4 - 1;
      *puVar10 = uVar4;
      if (uVar4 == 1) break;
      puVar1 = puVar13 + -1;
      puVar13 = puVar13 + -1;
      uVar17 = *puVar1;
    }
  }
  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);
  (*(code *)PTR_safefree_000bc1a4)(uVar8);
  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);
  (*(code *)PTR_safefree_000bc1a4)(iVar11);
  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);
  (*(code *)PTR_safefree_000bc1a4)(puVar2);
  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);
  (*(code *)PTR_safefree_000bc1a4)(puVar3);
  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);
  (*(code *)PTR_safefree_000bc1a4)(puVar5);
  return puVar10;
}


lui gp,0x6
addiu gp,gp,0x6834
addu gp,gp,t9
addiu sp,sp,-0x60
sw ra,0x5c(sp)
sw s8,0x58(sp)
sw s7,0x54(sp)
sw s6,0x50(sp)
sw s5,0x4c(sp)
sw s4,0x48(sp)
sw s3,0x44(sp)
sw s2,0x40(sp)
sw s1,0x3c(sp)
sw s0,0x38(sp)
sw gp,0x20(sp)
lw s2,0x0(a2)
sll v0,s2,0x2
sw v0,0x30(sp)
addu v0,a2,v0
lw v0,0x0(v0)
beq v0,zero,0x0005ddcc
_or s3,a0,zero
or s0,a1,zero
or s1,a2,zero
or s4,s2,zero
li a1,0x4
or a0,s2,zero
lw t9,-0x7f9c(gp)
jalr t9
_nop
lw gp,0x20(sp)
blez s2,0x0005d9cc
_or s5,v0,zero
or a0,v0,zero
or v1,zero,zero
lw v0,0x0(s1)
subu v0,v0,v1
sll v0,v0,0x2
addu v0,s1,v0
lw v0,0x0(v0)
sw v0,0x0(a0)
addiu v1,v1,0x1
bne s4,v1,0x0005d9a8
_addiu a0,a0,0x4
lw v0,0x0(s3)
lw v1,0x0(s0)
sltu s1,v1,v0
movz v0,v1,s1
or s1,v0,zero
sll v0,v0,0x1
slt v0,s2,v0
bne v0,zero,0x0005da04
_or s6,s1,zero
srl s1,s2,0x1f
addu s1,s1,s2
sra s1,s1,0x1
addiu s1,s1,0x1
or s6,s1,zero
li a1,0x4
or a0,s1,zero
lw t9,-0x7f9c(gp)
jalr t9
_nop
lw gp,0x20(sp)
lw a0,0x0(s3)
subu a0,s1,a0
blez a0,0x0005da44
_or s4,v0,zero
sll v1,a0,0x2
addu v1,v1,v0
sw zero,0x0(v0)
addiu v0,v0,0x4
bne v0,v1,0x0005da34
_nop
lw v0,0x0(s3)
blez v0,0x0005da80
_sll a0,a0,0x2
addu a0,s4,a0
or v1,zero,zero
subu v0,v0,v1
sll v0,v0,0x2
addu v0,s3,v0
lw v0,0x0(v0)
sw v0,0x0(a0)
addiu v1,v1,0x1
lw v0,0x0(s3)
slt a1,v1,v0
bne a1,zero,0x0005da58
_addiu a0,a0,0x4
li a1,0x4
or a0,s6,zero
lw t9,-0x7f9c(gp)
jalr t9
_nop
lw gp,0x20(sp)
lw a0,0x0(s0)
subu a0,s6,a0
blez a0,0x0005dac0
_or s3,v0,zero
sll v1,a0,0x2
addu v1,v1,v0
sw zero,0x0(v0)
addiu v0,v0,0x4
bne v0,v1,0x0005dab0
_nop
lw v0,0x0(s0)
blez v0,0x0005dafc
_sll a0,a0,0x2
addu a0,s3,a0
or v1,zero,zero
subu v0,v0,v1
sll v0,v0,0x2
addu v0,s0,v0
lw v0,0x0(v0)
sw v0,0x0(a0)
addiu v1,v1,0x1
lw v0,0x0(s0)
slt a1,v1,v0
bne a1,zero,0x0005dad4
_addiu a0,a0,0x4
sll s0,s1,0x1
li a1,0x4
or a0,s0,zero
lw t9,-0x7f9c(gp)
jalr t9
_nop
lw gp,0x20(sp)
sw v0,0x28(sp)
or a0,s1,zero
lw t9,-0x7950(gp)
addiu t9,t9,-0x3b34
bal 0x0005c4cc
_nop
lw gp,0x20(sp)
sw v0,0x34(sp)
li a1,0x4
or a0,v0,zero
lw t9,-0x7f9c(gp)
jalr t9
_nop
lw gp,0x20(sp)
sw v0,0x2c(sp)
lw s7,0x0(s5)
or a0,s7,zero
lw t9,-0x7950(gp)
addiu t9,t9,-0x3af0
bal 0x0005c510
_nop
lw gp,0x20(sp)
beq v0,zero,0x0005db94
_or s8,v0,zero
sllv s7,s7,v0
slti v0,s2,0x2
bne v0,zero,0x0005db94
_subu v0,zero,s8
lw v1,0x4(s5)
srlv v0,v1,v0
or s7,s7,v0
or a0,s7,zero
lw t9,-0x7950(gp)
addiu t9,t9,-0x3aac
bal 0x0005c554
_nop
lw gp,0x20(sp)
or s7,v0,zero
lw v0,0x2c(sp)
sw v0,0x10(sp)
or a3,s1,zero
lw s1,0x28(sp)
or a2,s1,zero
or a1,s3,zero
or a0,s4,zero
lw t9,-0x7950(gp)
addiu t9,t9,-0x3970
bal 0x0005c690
_nop
lw gp,0x20(sp)
sw s8,0x18(sp)
sw s7,0x14(sp)
sw zero,0x10(sp)
or a3,s2,zero
or a2,s5,zero
or a1,s0,zero
or s7,s1,zero
or a0,s1,zero
lw t9,-0x7950(gp)
addiu t9,t9,-0x2f58
bal 0x0005d0a8
_nop
lw gp,0x20(sp)
slt v0,s2,s0
movz s2,s0,v0
or a0,s2,zero
lw t9,-0x7950(gp)
addiu t9,t9,-0x28c8
bal 0x0005d738
_nop
lw gp,0x20(sp)
blez s2,0x0005dc70
_or s1,v0,zero
subu s0,s0,s2
sll s0,s0,0x2
addu s0,s7,s0
or v1,zero,zero
lw a0,0x0(s0)
lw v0,0x0(s1)
subu v0,v0,v1
sll v0,v0,0x2
addu v0,s1,v0
sw a0,0x0(v0)
addiu v1,v1,0x1
bne s2,v1,0x0005dc4c
_addiu s0,s0,0x4
lw v0,0x0(s1)
sltiu v1,v0,0x2
bne v1,zero,0x0005dcac
_sll v1,v0,0x2
addu v1,s1,v1
lw a0,0x0(v1)
bne a0,zero,0x0005dcac
_addiu v0,v0,-0x1
li a1,0x1
beq v0,a1,0x0005dcac
_sw v0,0x0(s1)
lw a0,-0x4(v1)
addiu v0,v0,-0x1
beq a0,zero,0x0005dc94
_addiu v1,v1,-0x4
lw v0,0x34(sp)
sll a1,v0,0x2
lw s0,0x2c(sp)
or a0,s0,zero
lw t9,-0x7f6c(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s0,zero
lw t9,-0x7fac(gp)
jalr t9
_nop
lw gp,0x20(sp)
sll a1,s6,0x3
lw s0,0x28(sp)
or a0,s0,zero
lw t9,-0x7f6c(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s0,zero
lw t9,-0x7fac(gp)
jalr t9
_nop
lw gp,0x20(sp)
lw a1,0x30(sp)
or a0,s5,zero
lw t9,-0x7f6c(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s5,zero
lw t9,-0x7fac(gp)
jalr t9
_nop
lw gp,0x20(sp)
sll s0,s6,0x2
or a1,s0,zero
or a0,s4,zero
lw t9,-0x7f6c(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s4,zero
lw t9,-0x7fac(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a1,s0,zero
or a0,s3,zero
lw t9,-0x7f6c(gp)
jalr t9
_nop
lw gp,0x20(sp)
or a0,s3,zero
lw t9,-0x7fac(gp)
jalr t9
_nop
lw gp,0x20(sp)
or v0,s1,zero
lw ra,0x5c(sp)
lw s8,0x58(sp)
lw s7,0x54(sp)
lw s6,0x50(sp)
lw s5,0x4c(sp)
lw s4,0x48(sp)
lw s3,0x44(sp)
lw s2,0x40(sp)
lw s1,0x3c(sp)
lw s0,0x38(sp)
jr ra
_addiu sp,sp,0x60
lw a3,-0x7fc8(gp)
addiu a3,a3,0x4ebc
li a2,0x4c1
lw a1,-0x7fc8(gp)
addiu a1,a1,0x4cf0
lw a0,-0x7fc8(gp)
addiu a0,a0,0x4d34
lw t9,-0x7650(gp)
jalr t9
_nop
(translation_unit "uint * modmul(uint *param_1,uint *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  uint *puVar10;\n  int iVar11;\n  int iVar12;\n  uint *puVar13;\n  uint uVar14;\n  int iVar15;\n  int iVar16;\n  uint uVar17;\n  \n  iVar15 = *param_3;\n  if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }\n  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);\n  if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }\n  uVar14 = *param_1;\n  if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }\n  if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_1;\n  if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }\n  uVar4 = *param_1;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_2;\n  if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }\n  uVar4 = *param_2;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  iVar12 = uVar14 * 2;\n  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);\n  iVar7 = FUN_0005c4cc(uVar14);\n  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  uVar17 = *puVar2;\n  uVar4 = FUN_0005c510(uVar17);\n  if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }\n  uVar9 = FUN_0005c554(uVar17);\n  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);\n  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);\n  iVar16 = iVar15;\n  if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }\n  puVar10 = (uint *)FUN_0005d738(iVar16);\n  if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }\n  uVar4 = *puVar10;\n  if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(uVar8);\n  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);\n  (*(code *)PTR_safefree_000bc1a4)(iVar11);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);\n  (*(code *)PTR_safefree_000bc1a4)(puVar2);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar5);\n  return puVar10;\n}\n\n" (function_definition "uint * modmul(uint *param_1,uint *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  uint *puVar10;\n  int iVar11;\n  int iVar12;\n  uint *puVar13;\n  uint uVar14;\n  int iVar15;\n  int iVar16;\n  uint uVar17;\n  \n  iVar15 = *param_3;\n  if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }\n  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);\n  if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }\n  uVar14 = *param_1;\n  if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }\n  if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_1;\n  if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }\n  uVar4 = *param_1;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_2;\n  if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }\n  uVar4 = *param_2;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  iVar12 = uVar14 * 2;\n  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);\n  iVar7 = FUN_0005c4cc(uVar14);\n  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  uVar17 = *puVar2;\n  uVar4 = FUN_0005c510(uVar17);\n  if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }\n  uVar9 = FUN_0005c554(uVar17);\n  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);\n  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);\n  iVar16 = iVar15;\n  if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }\n  puVar10 = (uint *)FUN_0005d738(iVar16);\n  if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }\n  uVar4 = *puVar10;\n  if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(uVar8);\n  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);\n  (*(code *)PTR_safefree_000bc1a4)(iVar11);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);\n  (*(code *)PTR_safefree_000bc1a4)(puVar2);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar5);\n  return puVar10;\n}" type_identifier (pointer_declarator "* modmul(uint *param_1,uint *param_2,int *param_3)" * (function_declarator "modmul(uint *param_1,uint *param_2,int *param_3)" identifier (parameter_list "(uint *param_1,uint *param_2,int *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  uint *puVar10;\n  int iVar11;\n  int iVar12;\n  uint *puVar13;\n  uint uVar14;\n  int iVar15;\n  int iVar16;\n  uint uVar17;\n  \n  iVar15 = *param_3;\n  if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }\n  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);\n  if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }\n  uVar14 = *param_1;\n  if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }\n  if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_1;\n  if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }\n  uVar4 = *param_1;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_2;\n  if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }\n  uVar4 = *param_2;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  iVar12 = uVar14 * 2;\n  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);\n  iVar7 = FUN_0005c4cc(uVar14);\n  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  uVar17 = *puVar2;\n  uVar4 = FUN_0005c510(uVar17);\n  if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }\n  uVar9 = FUN_0005c554(uVar17);\n  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);\n  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);\n  iVar16 = iVar15;\n  if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }\n  puVar10 = (uint *)FUN_0005d738(iVar16);\n  if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }\n  uVar4 = *puVar10;\n  if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(uVar8);\n  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);\n  (*(code *)PTR_safefree_000bc1a4)(iVar11);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);\n  (*(code *)PTR_safefree_000bc1a4)(puVar2);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar5);\n  return puVar10;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined4 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "uint uVar17;" type_identifier identifier ;) (expression_statement "iVar15 = *param_3;" (assignment_expression "iVar15 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }" if (parenthesized_expression "(param_3[iVar15] == 0)" ( (binary_expression "param_3[iVar15] == 0" (subscript_expression "param_3[iVar15]" identifier [ identifier ]) == number_literal) )) (compound_statement "{\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }" { (expression_statement "puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);" (assignment_expression "puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" identifier = (cast_expression "(uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" (parenthesized_expression "(*(code *)PTR___assert_fail_000bcb00)" ( (pointer_expression "*(code *)PTR___assert_fail_000bcb00" * (cast_expression "(code *)PTR___assert_fail_000bcb00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" ( (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34" identifier + number_literal) , (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0" identifier + number_literal) , number_literal , (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc" identifier + number_literal) ))))) ;) (return_statement "return puVar2;" return identifier ;) })) (expression_statement "puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);" (assignment_expression "puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4)" identifier = (cast_expression "(uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }" if (parenthesized_expression "(0 < iVar15)" ( (binary_expression "0 < iVar15" number_literal < identifier) )) (compound_statement "{\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }" { (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar10 = puVar2;" (assignment_expression "puVar10 = puVar2" identifier = identifier) ;) (do_statement "do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);" do (compound_statement "{\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    }" { (expression_statement "*puVar10 = param_3[*param_3 - iVar11];" (assignment_expression "*puVar10 = param_3[*param_3 - iVar11]" (pointer_expression "*puVar10" * identifier) = (subscript_expression "param_3[*param_3 - iVar11]" identifier [ (binary_expression "*param_3 - iVar11" (pointer_expression "*param_3" * identifier) - identifier) ])) ;) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar15 != iVar11)" ( (binary_expression "iVar15 != iVar11" identifier != identifier) )) ;) })) (expression_statement "uVar14 = *param_1;" (assignment_expression "uVar14 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }" if (parenthesized_expression "(*param_1 <= *param_2)" ( (binary_expression "*param_1 <= *param_2" (pointer_expression "*param_1" * identifier) <= (pointer_expression "*param_2" * identifier)) )) (compound_statement "{\n    uVar14 = *param_2;\n  }" { (expression_statement "uVar14 = *param_2;" (assignment_expression "uVar14 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) })) (if_statement "if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }" if (parenthesized_expression "((int)(uVar14 << 1) <= iVar15)" ( (binary_expression "(int)(uVar14 << 1) <= iVar15" (cast_expression "(int)(uVar14 << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar14 << 1)" ( (binary_expression "uVar14 << 1" identifier << number_literal) ))) <= identifier) )) (compound_statement "{\n    uVar14 = iVar15 / 2 + 1;\n  }" { (expression_statement "uVar14 = iVar15 / 2 + 1;" (assignment_expression "uVar14 = iVar15 / 2 + 1" identifier = (binary_expression "iVar15 / 2 + 1" (binary_expression "iVar15 / 2" identifier / number_literal) + number_literal)) ;) })) (expression_statement "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);" (assignment_expression "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar14,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar11 = uVar14 - *param_1;" (assignment_expression "iVar11 = uVar14 - *param_1" identifier = (binary_expression "uVar14 - *param_1" identifier - (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }" if (parenthesized_expression "(0 < iVar11)" ( (binary_expression "0 < iVar11" number_literal < identifier) )) (compound_statement "{\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }" { (expression_statement "puVar5 = puVar3;" (assignment_expression "puVar5 = puVar3" identifier = identifier) ;) (do_statement "do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);" do (compound_statement "{\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    }" { (expression_statement "*puVar5 = 0;" (assignment_expression "*puVar5 = 0" (pointer_expression "*puVar5" * identifier) = number_literal) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar5 != puVar3 + iVar11)" ( (binary_expression "puVar5 != puVar3 + iVar11" identifier != (binary_expression "puVar3 + iVar11" identifier + identifier)) )) ;) })) (expression_statement "uVar4 = *param_1;" (assignment_expression "uVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" if (parenthesized_expression "(0 < (int)uVar4)" ( (binary_expression "0 < (int)uVar4" number_literal < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" { (expression_statement "puVar10 = puVar3 + iVar11;" (assignment_expression "puVar10 = puVar3 + iVar11" identifier = (binary_expression "puVar3 + iVar11" identifier + identifier)) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);" do (compound_statement "{\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    }" { (expression_statement "*puVar10 = param_1[uVar4 - iVar11];" (assignment_expression "*puVar10 = param_1[uVar4 - iVar11]" (pointer_expression "*puVar10" * identifier) = (subscript_expression "param_1[uVar4 - iVar11]" identifier [ (binary_expression "uVar4 - iVar11" identifier - identifier) ])) ;) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = *param_1;" (assignment_expression "uVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar11 < (int)uVar4)" ( (binary_expression "iVar11 < (int)uVar4" identifier < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);" (assignment_expression "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar14,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar11 = uVar14 - *param_2;" (assignment_expression "iVar11 = uVar14 - *param_2" identifier = (binary_expression "uVar14 - *param_2" identifier - (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }" if (parenthesized_expression "(0 < iVar11)" ( (binary_expression "0 < iVar11" number_literal < identifier) )) (compound_statement "{\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }" { (expression_statement "puVar6 = puVar5;" (assignment_expression "puVar6 = puVar5" identifier = identifier) ;) (do_statement "do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);" do (compound_statement "{\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    }" { (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" * identifier) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar6 != puVar5 + iVar11)" ( (binary_expression "puVar6 != puVar5 + iVar11" identifier != (binary_expression "puVar5 + iVar11" identifier + identifier)) )) ;) })) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" if (parenthesized_expression "(0 < (int)uVar4)" ( (binary_expression "0 < (int)uVar4" number_literal < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" { (expression_statement "puVar10 = puVar5 + iVar11;" (assignment_expression "puVar10 = puVar5 + iVar11" identifier = (binary_expression "puVar5 + iVar11" identifier + identifier)) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);" do (compound_statement "{\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    }" { (expression_statement "*puVar10 = param_2[uVar4 - iVar11];" (assignment_expression "*puVar10 = param_2[uVar4 - iVar11]" (pointer_expression "*puVar10" * identifier) = (subscript_expression "param_2[uVar4 - iVar11]" identifier [ (binary_expression "uVar4 - iVar11" identifier - identifier) ])) ;) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar11 < (int)uVar4)" ( (binary_expression "iVar11 < (int)uVar4" identifier < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "iVar12 = uVar14 * 2;" (assignment_expression "iVar12 = uVar14 * 2" identifier = (binary_expression "uVar14 * 2" identifier * number_literal)) ;) (expression_statement "iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);" (assignment_expression "iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar12,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar12,4)" ( identifier , number_literal )))) ;) (expression_statement "iVar7 = FUN_0005c4cc(uVar14);" (assignment_expression "iVar7 = FUN_0005c4cc(uVar14)" identifier = (call_expression "FUN_0005c4cc(uVar14)" identifier (argument_list "(uVar14)" ( identifier )))) ;) (expression_statement "uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);" (assignment_expression "uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7,4)" ( identifier , number_literal )))) ;) (expression_statement "uVar17 = *puVar2;" (assignment_expression "uVar17 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "uVar4 = FUN_0005c510(uVar17);" (assignment_expression "uVar4 = FUN_0005c510(uVar17)" identifier = (call_expression "FUN_0005c510(uVar17)" identifier (argument_list "(uVar17)" ( identifier )))) ;) (if_statement "if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }" { (expression_statement "uVar17 = uVar17 << (uVar4 & 0x1f);" (assignment_expression "uVar17 = uVar17 << (uVar4 & 0x1f)" identifier = (binary_expression "uVar17 << (uVar4 & 0x1f)" identifier << (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }" if (parenthesized_expression "(1 < iVar15)" ( (binary_expression "1 < iVar15" number_literal < identifier) )) (compound_statement "{\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }" { (expression_statement "uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);" (assignment_expression "uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f)" identifier = (binary_expression "uVar17 | puVar2[1] >> (-uVar4 & 0x1f)" identifier | (binary_expression "puVar2[1] >> (-uVar4 & 0x1f)" (subscript_expression "puVar2[1]" identifier [ number_literal ]) >> (parenthesized_expression "(-uVar4 & 0x1f)" ( (binary_expression "-uVar4 & 0x1f" (unary_expression "-uVar4" - identifier) & number_literal) ))))) ;) })) })) (expression_statement "uVar9 = FUN_0005c554(uVar17);" (assignment_expression "uVar9 = FUN_0005c554(uVar17)" identifier = (call_expression "FUN_0005c554(uVar17)" identifier (argument_list "(uVar17)" ( identifier )))) ;) (expression_statement "FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);" (call_expression "FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8)" identifier (argument_list "(puVar3,puVar5,iVar11,uVar14,uVar8)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);" (call_expression "FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4)" identifier (argument_list "(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "iVar16 = iVar15;" (assignment_expression "iVar16 = iVar15" identifier = identifier) ;) (if_statement "if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }" if (parenthesized_expression "(iVar12 <= iVar15)" ( (binary_expression "iVar12 <= iVar15" identifier <= identifier) )) (compound_statement "{\n    iVar16 = iVar12;\n  }" { (expression_statement "iVar16 = iVar12;" (assignment_expression "iVar16 = iVar12" identifier = identifier) ;) })) (expression_statement "puVar10 = (uint *)FUN_0005d738(iVar16);" (assignment_expression "puVar10 = (uint *)FUN_0005d738(iVar16)" identifier = (cast_expression "(uint *)FUN_0005d738(iVar16)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005d738(iVar16)" identifier (argument_list "(iVar16)" ( identifier ))))) ;) (if_statement "if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }" if (parenthesized_expression "(0 < iVar16)" ( (binary_expression "0 < iVar16" number_literal < identifier) )) (compound_statement "{\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }" { (expression_statement "puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);" (assignment_expression "puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4)" identifier = (cast_expression "(uint *)(iVar11 + (iVar12 - iVar16) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + (iVar12 - iVar16) * 4)" ( (binary_expression "iVar11 + (iVar12 - iVar16) * 4" identifier + (binary_expression "(iVar12 - iVar16) * 4" (parenthesized_expression "(iVar12 - iVar16)" ( (binary_expression "iVar12 - iVar16" identifier - identifier) )) * number_literal)) )))) ;) (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);" do (compound_statement "{\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    }" { (expression_statement "puVar10[*puVar10 - iVar12] = *puVar13;" (assignment_expression "puVar10[*puVar10 - iVar12] = *puVar13" (subscript_expression "puVar10[*puVar10 - iVar12]" identifier [ (binary_expression "*puVar10 - iVar12" (pointer_expression "*puVar10" * identifier) - identifier) ]) = (pointer_expression "*puVar13" * identifier)) ;) (expression_statement "iVar12 = iVar12 + 1;" (assignment_expression "iVar12 = iVar12 + 1" identifier = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "puVar13 = puVar13 + 1;" (assignment_expression "puVar13 = puVar13 + 1" identifier = (binary_expression "puVar13 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar16 != iVar12)" ( (binary_expression "iVar16 != iVar12" identifier != identifier) )) ;) })) (expression_statement "uVar4 = *puVar10;" (assignment_expression "uVar4 = *puVar10" identifier = (pointer_expression "*puVar10" * identifier)) ;) (if_statement "if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }" if (parenthesized_expression "(1 < uVar4)" ( (binary_expression "1 < uVar4" number_literal < identifier) )) (compound_statement "{\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }" { (expression_statement "puVar13 = puVar10 + uVar4;" (assignment_expression "puVar13 = puVar10 + uVar4" identifier = (binary_expression "puVar10 + uVar4" identifier + identifier)) ;) (expression_statement "uVar17 = *puVar13;" (assignment_expression "uVar17 = *puVar13" identifier = (pointer_expression "*puVar13" * identifier)) ;) (while_statement "while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }" while (parenthesized_expression "(uVar17 == 0)" ( (binary_expression "uVar17 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }" { (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) (expression_statement "*puVar10 = uVar4;" (assignment_expression "*puVar10 = uVar4" (pointer_expression "*puVar10" * identifier) = identifier) ;) (if_statement "if (uVar4 == 1) break;" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar1 = puVar13 + -1;" (assignment_expression "puVar1 = puVar13 + -1" identifier = (binary_expression "puVar13 + -1" identifier + number_literal)) ;) (expression_statement "puVar13 = puVar13 + -1;" (assignment_expression "puVar13 = puVar13 + -1" identifier = (binary_expression "puVar13 + -1" identifier + number_literal)) ;) (expression_statement "uVar17 = *puVar1;" (assignment_expression "uVar17 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) })) })) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8,iVar7 << 2)" ( identifier , (binary_expression "iVar7 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(uVar8);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(uVar8)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar11,uVar14 << 3)" ( identifier , (binary_expression "uVar14 << 3" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(iVar11);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(iVar11)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar11)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar2,iVar15 * 4)" ( identifier , (binary_expression "iVar15 * 4" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(puVar2);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(puVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3,uVar14 << 2)" ( identifier , (binary_expression "uVar14 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(puVar3);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar5,uVar14 << 2)" ( identifier , (binary_expression "uVar14 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(puVar5);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(puVar5)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar5)" ( identifier ))) ;) (return_statement "return puVar10;" return identifier ;) })))
(translation_unit "Bignum_conflict modmul(Bignum_conflict p,Bignum_conflict q,Bignum_conflict mod)\n\n{\n  BignumInt *m;\n  BignumInt *pBVar1;\n  BignumInt *pBVar2;\n  BignumInt *pBVar3;\n  BignumInt *scratch;\n  uint rshift;\n  Bignum_conflict pBVar4;\n  BignumInt BVar5;\n  Bignum_conflict pBVar6;\n  int iVar7;\n  BignumInt *pBVar8;\n  uint len;\n  BignumInt mlen;\n  BignumInt BVar9;\n  \n  mlen = *mod;\n  if (mod[mlen] == 0) {\n    pBVar4 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000bcb00)\n                       (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return pBVar4;\n  }\n  m = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(mlen,4);\n  if (0 < (int)mlen) {\n    BVar5 = 0;\n    pBVar1 = m;\n    do {\n      *pBVar1 = mod[*mod - BVar5];\n      BVar5 = BVar5 + 1;\n      pBVar1 = pBVar1 + 1;\n    } while (mlen != BVar5);\n  }\n  len = *p;\n  if (*p <= *q) {\n    len = *q;\n  }\n  if ((int)(len << 1) <= (int)mlen) {\n    len = (int)mlen / 2 + 1;\n  }\n  pBVar1 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);\n  iVar7 = len - *p;\n  if (0 < iVar7) {\n    pBVar2 = pBVar1;\n    do {\n      *pBVar2 = 0;\n      pBVar2 = pBVar2 + 1;\n    } while (pBVar2 != pBVar1 + iVar7);\n  }\n  BVar5 = *p;\n  if (0 < (int)BVar5) {\n    pBVar2 = pBVar1 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar2 = p[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *p;\n      pBVar2 = pBVar2 + 1;\n    } while (iVar7 < (int)BVar5);\n  }\n  pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);\n  iVar7 = len - *q;\n  if (0 < iVar7) {\n    pBVar3 = pBVar2;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar3 != pBVar2 + iVar7);\n  }\n  BVar5 = *q;\n  if (0 < (int)BVar5) {\n    pBVar3 = pBVar2 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar3 = q[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *q;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar7 < (int)BVar5);\n  }\n  BVar5 = len * 2;\n  pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(BVar5,4);\n  iVar7 = mul_compute_scratch(len);\n  scratch = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  BVar9 = *m;\n  rshift = bn_clz(BVar9);\n  if (rshift != 0) {\n    BVar9 = BVar9 << (rshift & 0x1f);\n    if (1 < (int)mlen) {\n      BVar9 = BVar9 | m[1] >> (-rshift & 0x1f);\n    }\n  }\n  BVar9 = reciprocal_word(BVar9);\n  internal_mul(pBVar1,pBVar2,pBVar3,len,scratch);\n  internal_mod(pBVar3,BVar5,m,mlen,(BignumInt *)0x0,BVar9,rshift);\n  BVar9 = mlen;\n  if ((int)BVar5 <= (int)mlen) {\n    BVar9 = BVar5;\n  }\n  pBVar4 = newbn(BVar9);\n  if (0 < (int)BVar9) {\n    pBVar8 = pBVar3 + (BVar5 - BVar9);\n    BVar5 = 0;\n    do {\n      pBVar4[*pBVar4 - BVar5] = *pBVar8;\n      BVar5 = BVar5 + 1;\n      pBVar8 = pBVar8 + 1;\n    } while (BVar9 != BVar5);\n  }\n  BVar5 = *pBVar4;\n  if (1 < BVar5) {\n    pBVar6 = pBVar4 + BVar5;\n    BVar9 = *pBVar6;\n    while (BVar9 == 0) {\n      BVar5 = BVar5 - 1;\n      *pBVar4 = BVar5;\n      if (BVar5 == 1) break;\n      pBVar8 = pBVar6 + -1;\n      pBVar6 = pBVar6 + -1;\n      BVar9 = *pBVar8;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(scratch,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(scratch);\n  (*(code *)PTR_smemclr_000bc1e4)(pBVar3,len << 3);\n  (*(code *)PTR_safefree_000bc1a4)(pBVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(m,mlen * 4);\n  (*(code *)PTR_safefree_000bc1a4)(m);\n  (*(code *)PTR_smemclr_000bc1e4)(pBVar1,len << 2);\n  (*(code *)PTR_safefree_000bc1a4)(pBVar1);\n  (*(code *)PTR_smemclr_000bc1e4)(pBVar2,len << 2);\n  (*(code *)PTR_safefree_000bc1a4)(pBVar2);\n  return pBVar4;\n}\n\n" (function_definition "Bignum_conflict modmul(Bignum_conflict p,Bignum_conflict q,Bignum_conflict mod)\n\n{\n  BignumInt *m;\n  BignumInt *pBVar1;\n  BignumInt *pBVar2;\n  BignumInt *pBVar3;\n  BignumInt *scratch;\n  uint rshift;\n  Bignum_conflict pBVar4;\n  BignumInt BVar5;\n  Bignum_conflict pBVar6;\n  int iVar7;\n  BignumInt *pBVar8;\n  uint len;\n  BignumInt mlen;\n  BignumInt BVar9;\n  \n  mlen = *mod;\n  if (mod[mlen] == 0) {\n    pBVar4 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000bcb00)\n                       (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return pBVar4;\n  }\n  m = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(mlen,4);\n  if (0 < (int)mlen) {\n    BVar5 = 0;\n    pBVar1 = m;\n    do {\n      *pBVar1 = mod[*mod - BVar5];\n      BVar5 = BVar5 + 1;\n      pBVar1 = pBVar1 + 1;\n    } while (mlen != BVar5);\n  }\n  len = *p;\n  if (*p <= *q) {\n    len = *q;\n  }\n  if ((int)(len << 1) <= (int)mlen) {\n    len = (int)mlen / 2 + 1;\n  }\n  pBVar1 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);\n  iVar7 = len - *p;\n  if (0 < iVar7) {\n    pBVar2 = pBVar1;\n    do {\n      *pBVar2 = 0;\n      pBVar2 = pBVar2 + 1;\n    } while (pBVar2 != pBVar1 + iVar7);\n  }\n  BVar5 = *p;\n  if (0 < (int)BVar5) {\n    pBVar2 = pBVar1 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar2 = p[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *p;\n      pBVar2 = pBVar2 + 1;\n    } while (iVar7 < (int)BVar5);\n  }\n  pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);\n  iVar7 = len - *q;\n  if (0 < iVar7) {\n    pBVar3 = pBVar2;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar3 != pBVar2 + iVar7);\n  }\n  BVar5 = *q;\n  if (0 < (int)BVar5) {\n    pBVar3 = pBVar2 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar3 = q[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *q;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar7 < (int)BVar5);\n  }\n  BVar5 = len * 2;\n  pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(BVar5,4);\n  iVar7 = mul_compute_scratch(len);\n  scratch = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  BVar9 = *m;\n  rshift = bn_clz(BVar9);\n  if (rshift != 0) {\n    BVar9 = BVar9 << (rshift & 0x1f);\n    if (1 < (int)mlen) {\n      BVar9 = BVar9 | m[1] >> (-rshift & 0x1f);\n    }\n  }\n  BVar9 = reciprocal_word(BVar9);\n  internal_mul(pBVar1,pBVar2,pBVar3,len,scratch);\n  internal_mod(pBVar3,BVar5,m,mlen,(BignumInt *)0x0,BVar9,rshift);\n  BVar9 = mlen;\n  if ((int)BVar5 <= (int)mlen) {\n    BVar9 = BVar5;\n  }\n  pBVar4 = newbn(BVar9);\n  if (0 < (int)BVar9) {\n    pBVar8 = pBVar3 + (BVar5 - BVar9);\n    BVar5 = 0;\n    do {\n      pBVar4[*pBVar4 - BVar5] = *pBVar8;\n      BVar5 = BVar5 + 1;\n      pBVar8 = pBVar8 + 1;\n    } while (BVar9 != BVar5);\n  }\n  BVar5 = *pBVar4;\n  if (1 < BVar5) {\n    pBVar6 = pBVar4 + BVar5;\n    BVar9 = *pBVar6;\n    while (BVar9 == 0) {\n      BVar5 = BVar5 - 1;\n      *pBVar4 = BVar5;\n      if (BVar5 == 1) break;\n      pBVar8 = pBVar6 + -1;\n      pBVar6 = pBVar6 + -1;\n      BVar9 = *pBVar8;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(scratch,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(scratch);\n  (*(code *)PTR_smemclr_000bc1e4)(pBVar3,len << 3);\n  (*(code *)PTR_safefree_000bc1a4)(pBVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(m,mlen * 4);\n  (*(code *)PTR_safefree_000bc1a4)(m);\n  (*(code *)PTR_smemclr_000bc1e4)(pBVar1,len << 2);\n  (*(code *)PTR_safefree_000bc1a4)(pBVar1);\n  (*(code *)PTR_smemclr_000bc1e4)(pBVar2,len << 2);\n  (*(code *)PTR_safefree_000bc1a4)(pBVar2);\n  return pBVar4;\n}" type_identifier (function_declarator "modmul(Bignum_conflict p,Bignum_conflict q,Bignum_conflict mod)" identifier (parameter_list "(Bignum_conflict p,Bignum_conflict q,Bignum_conflict mod)" ( (parameter_declaration "Bignum_conflict p" type_identifier identifier) , (parameter_declaration "Bignum_conflict q" type_identifier identifier) , (parameter_declaration "Bignum_conflict mod" type_identifier identifier) ))) (compound_statement "{\n  BignumInt *m;\n  BignumInt *pBVar1;\n  BignumInt *pBVar2;\n  BignumInt *pBVar3;\n  BignumInt *scratch;\n  uint rshift;\n  Bignum_conflict pBVar4;\n  BignumInt BVar5;\n  Bignum_conflict pBVar6;\n  int iVar7;\n  BignumInt *pBVar8;\n  uint len;\n  BignumInt mlen;\n  BignumInt BVar9;\n  \n  mlen = *mod;\n  if (mod[mlen] == 0) {\n    pBVar4 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000bcb00)\n                       (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return pBVar4;\n  }\n  m = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(mlen,4);\n  if (0 < (int)mlen) {\n    BVar5 = 0;\n    pBVar1 = m;\n    do {\n      *pBVar1 = mod[*mod - BVar5];\n      BVar5 = BVar5 + 1;\n      pBVar1 = pBVar1 + 1;\n    } while (mlen != BVar5);\n  }\n  len = *p;\n  if (*p <= *q) {\n    len = *q;\n  }\n  if ((int)(len << 1) <= (int)mlen) {\n    len = (int)mlen / 2 + 1;\n  }\n  pBVar1 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);\n  iVar7 = len - *p;\n  if (0 < iVar7) {\n    pBVar2 = pBVar1;\n    do {\n      *pBVar2 = 0;\n      pBVar2 = pBVar2 + 1;\n    } while (pBVar2 != pBVar1 + iVar7);\n  }\n  BVar5 = *p;\n  if (0 < (int)BVar5) {\n    pBVar2 = pBVar1 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar2 = p[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *p;\n      pBVar2 = pBVar2 + 1;\n    } while (iVar7 < (int)BVar5);\n  }\n  pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);\n  iVar7 = len - *q;\n  if (0 < iVar7) {\n    pBVar3 = pBVar2;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar3 != pBVar2 + iVar7);\n  }\n  BVar5 = *q;\n  if (0 < (int)BVar5) {\n    pBVar3 = pBVar2 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar3 = q[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *q;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar7 < (int)BVar5);\n  }\n  BVar5 = len * 2;\n  pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(BVar5,4);\n  iVar7 = mul_compute_scratch(len);\n  scratch = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  BVar9 = *m;\n  rshift = bn_clz(BVar9);\n  if (rshift != 0) {\n    BVar9 = BVar9 << (rshift & 0x1f);\n    if (1 < (int)mlen) {\n      BVar9 = BVar9 | m[1] >> (-rshift & 0x1f);\n    }\n  }\n  BVar9 = reciprocal_word(BVar9);\n  internal_mul(pBVar1,pBVar2,pBVar3,len,scratch);\n  internal_mod(pBVar3,BVar5,m,mlen,(BignumInt *)0x0,BVar9,rshift);\n  BVar9 = mlen;\n  if ((int)BVar5 <= (int)mlen) {\n    BVar9 = BVar5;\n  }\n  pBVar4 = newbn(BVar9);\n  if (0 < (int)BVar9) {\n    pBVar8 = pBVar3 + (BVar5 - BVar9);\n    BVar5 = 0;\n    do {\n      pBVar4[*pBVar4 - BVar5] = *pBVar8;\n      BVar5 = BVar5 + 1;\n      pBVar8 = pBVar8 + 1;\n    } while (BVar9 != BVar5);\n  }\n  BVar5 = *pBVar4;\n  if (1 < BVar5) {\n    pBVar6 = pBVar4 + BVar5;\n    BVar9 = *pBVar6;\n    while (BVar9 == 0) {\n      BVar5 = BVar5 - 1;\n      *pBVar4 = BVar5;\n      if (BVar5 == 1) break;\n      pBVar8 = pBVar6 + -1;\n      pBVar6 = pBVar6 + -1;\n      BVar9 = *pBVar8;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(scratch,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(scratch);\n  (*(code *)PTR_smemclr_000bc1e4)(pBVar3,len << 3);\n  (*(code *)PTR_safefree_000bc1a4)(pBVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(m,mlen * 4);\n  (*(code *)PTR_safefree_000bc1a4)(m);\n  (*(code *)PTR_smemclr_000bc1e4)(pBVar1,len << 2);\n  (*(code *)PTR_safefree_000bc1a4)(pBVar1);\n  (*(code *)PTR_smemclr_000bc1e4)(pBVar2,len << 2);\n  (*(code *)PTR_safefree_000bc1a4)(pBVar2);\n  return pBVar4;\n}" { (declaration "BignumInt *m;" type_identifier (pointer_declarator "*m" * identifier) ;) (declaration "BignumInt *pBVar1;" type_identifier (pointer_declarator "*pBVar1" * identifier) ;) (declaration "BignumInt *pBVar2;" type_identifier (pointer_declarator "*pBVar2" * identifier) ;) (declaration "BignumInt *pBVar3;" type_identifier (pointer_declarator "*pBVar3" * identifier) ;) (declaration "BignumInt *scratch;" type_identifier (pointer_declarator "*scratch" * identifier) ;) (declaration "uint rshift;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar4;" type_identifier identifier ;) (declaration "BignumInt BVar5;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "BignumInt *pBVar8;" type_identifier (pointer_declarator "*pBVar8" * identifier) ;) (declaration "uint len;" type_identifier identifier ;) (declaration "BignumInt mlen;" type_identifier identifier ;) (declaration "BignumInt BVar9;" type_identifier identifier ;) (expression_statement "mlen = *mod;" (assignment_expression "mlen = *mod" identifier = (pointer_expression "*mod" * identifier)) ;) (if_statement "if (mod[mlen] == 0) {\n    pBVar4 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000bcb00)\n                       (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return pBVar4;\n  }" if (parenthesized_expression "(mod[mlen] == 0)" ( (binary_expression "mod[mlen] == 0" (subscript_expression "mod[mlen]" identifier [ identifier ]) == number_literal) )) (compound_statement "{\n    pBVar4 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000bcb00)\n                       (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return pBVar4;\n  }" { (expression_statement "pBVar4 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000bcb00)\n                       (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);" (assignment_expression "pBVar4 = (Bignum_conflict)\n             (*(code *)PTR___assert_fail_000bcb00)\n                       (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" identifier = (call_expression "(Bignum_conflict)\n             (*(code *)PTR___assert_fail_000bcb00)\n                       (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" (call_expression "(Bignum_conflict)\n             (*(code *)PTR___assert_fail_000bcb00)" (parenthesized_expression "(Bignum_conflict)" ( identifier )) (argument_list "(*(code *)PTR___assert_fail_000bcb00)" ( (pointer_expression "*(code *)PTR___assert_fail_000bcb00" * (cast_expression "(code *)PTR___assert_fail_000bcb00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ))) (argument_list "(PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                        PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" ( (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34" identifier + number_literal) , (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0" identifier + number_literal) , number_literal , (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc" identifier + number_literal) )))) ;) (return_statement "return pBVar4;" return identifier ;) })) (expression_statement "m = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(mlen,4);" (assignment_expression "m = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(mlen,4)" identifier = (cast_expression "(BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(mlen,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(mlen,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(mlen,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < (int)mlen) {\n    BVar5 = 0;\n    pBVar1 = m;\n    do {\n      *pBVar1 = mod[*mod - BVar5];\n      BVar5 = BVar5 + 1;\n      pBVar1 = pBVar1 + 1;\n    } while (mlen != BVar5);\n  }" if (parenthesized_expression "(0 < (int)mlen)" ( (binary_expression "0 < (int)mlen" number_literal < (cast_expression "(int)mlen" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    BVar5 = 0;\n    pBVar1 = m;\n    do {\n      *pBVar1 = mod[*mod - BVar5];\n      BVar5 = BVar5 + 1;\n      pBVar1 = pBVar1 + 1;\n    } while (mlen != BVar5);\n  }" { (expression_statement "BVar5 = 0;" (assignment_expression "BVar5 = 0" identifier = number_literal) ;) (expression_statement "pBVar1 = m;" (assignment_expression "pBVar1 = m" identifier = identifier) ;) (do_statement "do {\n      *pBVar1 = mod[*mod - BVar5];\n      BVar5 = BVar5 + 1;\n      pBVar1 = pBVar1 + 1;\n    } while (mlen != BVar5);" do (compound_statement "{\n      *pBVar1 = mod[*mod - BVar5];\n      BVar5 = BVar5 + 1;\n      pBVar1 = pBVar1 + 1;\n    }" { (expression_statement "*pBVar1 = mod[*mod - BVar5];" (assignment_expression "*pBVar1 = mod[*mod - BVar5]" (pointer_expression "*pBVar1" * identifier) = (subscript_expression "mod[*mod - BVar5]" identifier [ (binary_expression "*mod - BVar5" (pointer_expression "*mod" * identifier) - identifier) ])) ;) (expression_statement "BVar5 = BVar5 + 1;" (assignment_expression "BVar5 = BVar5 + 1" identifier = (binary_expression "BVar5 + 1" identifier + number_literal)) ;) (expression_statement "pBVar1 = pBVar1 + 1;" (assignment_expression "pBVar1 = pBVar1 + 1" identifier = (binary_expression "pBVar1 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(mlen != BVar5)" ( (binary_expression "mlen != BVar5" identifier != identifier) )) ;) })) (expression_statement "len = *p;" (assignment_expression "len = *p" identifier = (pointer_expression "*p" * identifier)) ;) (if_statement "if (*p <= *q) {\n    len = *q;\n  }" if (parenthesized_expression "(*p <= *q)" ( (binary_expression "*p <= *q" (pointer_expression "*p" * identifier) <= (pointer_expression "*q" * identifier)) )) (compound_statement "{\n    len = *q;\n  }" { (expression_statement "len = *q;" (assignment_expression "len = *q" identifier = (pointer_expression "*q" * identifier)) ;) })) (if_statement "if ((int)(len << 1) <= (int)mlen) {\n    len = (int)mlen / 2 + 1;\n  }" if (parenthesized_expression "((int)(len << 1) <= (int)mlen)" ( (binary_expression "(int)(len << 1) <= (int)mlen" (cast_expression "(int)(len << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(len << 1)" ( (binary_expression "len << 1" identifier << number_literal) ))) <= (cast_expression "(int)mlen" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    len = (int)mlen / 2 + 1;\n  }" { (expression_statement "len = (int)mlen / 2 + 1;" (assignment_expression "len = (int)mlen / 2 + 1" identifier = (binary_expression "(int)mlen / 2 + 1" (binary_expression "(int)mlen / 2" (cast_expression "(int)mlen" ( (type_descriptor "int" primitive_type) ) identifier) / number_literal) + number_literal)) ;) })) (expression_statement "pBVar1 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);" (assignment_expression "pBVar1 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4)" identifier = (cast_expression "(BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(len,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(len,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar7 = len - *p;" (assignment_expression "iVar7 = len - *p" identifier = (binary_expression "len - *p" identifier - (pointer_expression "*p" * identifier))) ;) (if_statement "if (0 < iVar7) {\n    pBVar2 = pBVar1;\n    do {\n      *pBVar2 = 0;\n      pBVar2 = pBVar2 + 1;\n    } while (pBVar2 != pBVar1 + iVar7);\n  }" if (parenthesized_expression "(0 < iVar7)" ( (binary_expression "0 < iVar7" number_literal < identifier) )) (compound_statement "{\n    pBVar2 = pBVar1;\n    do {\n      *pBVar2 = 0;\n      pBVar2 = pBVar2 + 1;\n    } while (pBVar2 != pBVar1 + iVar7);\n  }" { (expression_statement "pBVar2 = pBVar1;" (assignment_expression "pBVar2 = pBVar1" identifier = identifier) ;) (do_statement "do {\n      *pBVar2 = 0;\n      pBVar2 = pBVar2 + 1;\n    } while (pBVar2 != pBVar1 + iVar7);" do (compound_statement "{\n      *pBVar2 = 0;\n      pBVar2 = pBVar2 + 1;\n    }" { (expression_statement "*pBVar2 = 0;" (assignment_expression "*pBVar2 = 0" (pointer_expression "*pBVar2" * identifier) = number_literal) ;) (expression_statement "pBVar2 = pBVar2 + 1;" (assignment_expression "pBVar2 = pBVar2 + 1" identifier = (binary_expression "pBVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pBVar2 != pBVar1 + iVar7)" ( (binary_expression "pBVar2 != pBVar1 + iVar7" identifier != (binary_expression "pBVar1 + iVar7" identifier + identifier)) )) ;) })) (expression_statement "BVar5 = *p;" (assignment_expression "BVar5 = *p" identifier = (pointer_expression "*p" * identifier)) ;) (if_statement "if (0 < (int)BVar5) {\n    pBVar2 = pBVar1 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar2 = p[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *p;\n      pBVar2 = pBVar2 + 1;\n    } while (iVar7 < (int)BVar5);\n  }" if (parenthesized_expression "(0 < (int)BVar5)" ( (binary_expression "0 < (int)BVar5" number_literal < (cast_expression "(int)BVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    pBVar2 = pBVar1 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar2 = p[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *p;\n      pBVar2 = pBVar2 + 1;\n    } while (iVar7 < (int)BVar5);\n  }" { (expression_statement "pBVar2 = pBVar1 + iVar7;" (assignment_expression "pBVar2 = pBVar1 + iVar7" identifier = (binary_expression "pBVar1 + iVar7" identifier + identifier)) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n      *pBVar2 = p[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *p;\n      pBVar2 = pBVar2 + 1;\n    } while (iVar7 < (int)BVar5);" do (compound_statement "{\n      *pBVar2 = p[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *p;\n      pBVar2 = pBVar2 + 1;\n    }" { (expression_statement "*pBVar2 = p[BVar5 - iVar7];" (assignment_expression "*pBVar2 = p[BVar5 - iVar7]" (pointer_expression "*pBVar2" * identifier) = (subscript_expression "p[BVar5 - iVar7]" identifier [ (binary_expression "BVar5 - iVar7" identifier - identifier) ])) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "BVar5 = *p;" (assignment_expression "BVar5 = *p" identifier = (pointer_expression "*p" * identifier)) ;) (expression_statement "pBVar2 = pBVar2 + 1;" (assignment_expression "pBVar2 = pBVar2 + 1" identifier = (binary_expression "pBVar2 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 < (int)BVar5)" ( (binary_expression "iVar7 < (int)BVar5" identifier < (cast_expression "(int)BVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4);" (assignment_expression "pBVar2 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4)" identifier = (cast_expression "(BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(len,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(len,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(len,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar7 = len - *q;" (assignment_expression "iVar7 = len - *q" identifier = (binary_expression "len - *q" identifier - (pointer_expression "*q" * identifier))) ;) (if_statement "if (0 < iVar7) {\n    pBVar3 = pBVar2;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar3 != pBVar2 + iVar7);\n  }" if (parenthesized_expression "(0 < iVar7)" ( (binary_expression "0 < iVar7" number_literal < identifier) )) (compound_statement "{\n    pBVar3 = pBVar2;\n    do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar3 != pBVar2 + iVar7);\n  }" { (expression_statement "pBVar3 = pBVar2;" (assignment_expression "pBVar3 = pBVar2" identifier = identifier) ;) (do_statement "do {\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    } while (pBVar3 != pBVar2 + iVar7);" do (compound_statement "{\n      *pBVar3 = 0;\n      pBVar3 = pBVar3 + 1;\n    }" { (expression_statement "*pBVar3 = 0;" (assignment_expression "*pBVar3 = 0" (pointer_expression "*pBVar3" * identifier) = number_literal) ;) (expression_statement "pBVar3 = pBVar3 + 1;" (assignment_expression "pBVar3 = pBVar3 + 1" identifier = (binary_expression "pBVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pBVar3 != pBVar2 + iVar7)" ( (binary_expression "pBVar3 != pBVar2 + iVar7" identifier != (binary_expression "pBVar2 + iVar7" identifier + identifier)) )) ;) })) (expression_statement "BVar5 = *q;" (assignment_expression "BVar5 = *q" identifier = (pointer_expression "*q" * identifier)) ;) (if_statement "if (0 < (int)BVar5) {\n    pBVar3 = pBVar2 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar3 = q[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *q;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar7 < (int)BVar5);\n  }" if (parenthesized_expression "(0 < (int)BVar5)" ( (binary_expression "0 < (int)BVar5" number_literal < (cast_expression "(int)BVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    pBVar3 = pBVar2 + iVar7;\n    iVar7 = 0;\n    do {\n      *pBVar3 = q[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *q;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar7 < (int)BVar5);\n  }" { (expression_statement "pBVar3 = pBVar2 + iVar7;" (assignment_expression "pBVar3 = pBVar2 + iVar7" identifier = (binary_expression "pBVar2 + iVar7" identifier + identifier)) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n      *pBVar3 = q[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *q;\n      pBVar3 = pBVar3 + 1;\n    } while (iVar7 < (int)BVar5);" do (compound_statement "{\n      *pBVar3 = q[BVar5 - iVar7];\n      iVar7 = iVar7 + 1;\n      BVar5 = *q;\n      pBVar3 = pBVar3 + 1;\n    }" { (expression_statement "*pBVar3 = q[BVar5 - iVar7];" (assignment_expression "*pBVar3 = q[BVar5 - iVar7]" (pointer_expression "*pBVar3" * identifier) = (subscript_expression "q[BVar5 - iVar7]" identifier [ (binary_expression "BVar5 - iVar7" identifier - identifier) ])) ;) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "BVar5 = *q;" (assignment_expression "BVar5 = *q" identifier = (pointer_expression "*q" * identifier)) ;) (expression_statement "pBVar3 = pBVar3 + 1;" (assignment_expression "pBVar3 = pBVar3 + 1" identifier = (binary_expression "pBVar3 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar7 < (int)BVar5)" ( (binary_expression "iVar7 < (int)BVar5" identifier < (cast_expression "(int)BVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "BVar5 = len * 2;" (assignment_expression "BVar5 = len * 2" identifier = (binary_expression "len * 2" identifier * number_literal)) ;) (expression_statement "pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(BVar5,4);" (assignment_expression "pBVar3 = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(BVar5,4)" identifier = (cast_expression "(BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(BVar5,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(BVar5,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(BVar5,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar7 = mul_compute_scratch(len);" (assignment_expression "iVar7 = mul_compute_scratch(len)" identifier = (call_expression "mul_compute_scratch(len)" identifier (argument_list "(len)" ( identifier )))) ;) (expression_statement "scratch = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);" (assignment_expression "scratch = (BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4)" identifier = (cast_expression "(BignumInt *)(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7,4)" ( identifier , number_literal ))))) ;) (expression_statement "BVar9 = *m;" (assignment_expression "BVar9 = *m" identifier = (pointer_expression "*m" * identifier)) ;) (expression_statement "rshift = bn_clz(BVar9);" (assignment_expression "rshift = bn_clz(BVar9)" identifier = (call_expression "bn_clz(BVar9)" identifier (argument_list "(BVar9)" ( identifier )))) ;) (if_statement "if (rshift != 0) {\n    BVar9 = BVar9 << (rshift & 0x1f);\n    if (1 < (int)mlen) {\n      BVar9 = BVar9 | m[1] >> (-rshift & 0x1f);\n    }\n  }" if (parenthesized_expression "(rshift != 0)" ( (binary_expression "rshift != 0" identifier != number_literal) )) (compound_statement "{\n    BVar9 = BVar9 << (rshift & 0x1f);\n    if (1 < (int)mlen) {\n      BVar9 = BVar9 | m[1] >> (-rshift & 0x1f);\n    }\n  }" { (expression_statement "BVar9 = BVar9 << (rshift & 0x1f);" (assignment_expression "BVar9 = BVar9 << (rshift & 0x1f)" identifier = (binary_expression "BVar9 << (rshift & 0x1f)" identifier << (parenthesized_expression "(rshift & 0x1f)" ( (binary_expression "rshift & 0x1f" identifier & number_literal) )))) ;) (if_statement "if (1 < (int)mlen) {\n      BVar9 = BVar9 | m[1] >> (-rshift & 0x1f);\n    }" if (parenthesized_expression "(1 < (int)mlen)" ( (binary_expression "1 < (int)mlen" number_literal < (cast_expression "(int)mlen" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      BVar9 = BVar9 | m[1] >> (-rshift & 0x1f);\n    }" { (expression_statement "BVar9 = BVar9 | m[1] >> (-rshift & 0x1f);" (assignment_expression "BVar9 = BVar9 | m[1] >> (-rshift & 0x1f)" identifier = (binary_expression "BVar9 | m[1] >> (-rshift & 0x1f)" identifier | (binary_expression "m[1] >> (-rshift & 0x1f)" (subscript_expression "m[1]" identifier [ number_literal ]) >> (parenthesized_expression "(-rshift & 0x1f)" ( (binary_expression "-rshift & 0x1f" (unary_expression "-rshift" - identifier) & number_literal) ))))) ;) })) })) (expression_statement "BVar9 = reciprocal_word(BVar9);" (assignment_expression "BVar9 = reciprocal_word(BVar9)" identifier = (call_expression "reciprocal_word(BVar9)" identifier (argument_list "(BVar9)" ( identifier )))) ;) (expression_statement "internal_mul(pBVar1,pBVar2,pBVar3,len,scratch);" (call_expression "internal_mul(pBVar1,pBVar2,pBVar3,len,scratch)" identifier (argument_list "(pBVar1,pBVar2,pBVar3,len,scratch)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "internal_mod(pBVar3,BVar5,m,mlen,(BignumInt *)0x0,BVar9,rshift);" (call_expression "internal_mod(pBVar3,BVar5,m,mlen,(BignumInt *)0x0,BVar9,rshift)" identifier (argument_list "(pBVar3,BVar5,m,mlen,(BignumInt *)0x0,BVar9,rshift)" ( identifier , identifier , identifier , identifier , (cast_expression "(BignumInt *)0x0" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , identifier , identifier ))) ;) (expression_statement "BVar9 = mlen;" (assignment_expression "BVar9 = mlen" identifier = identifier) ;) (if_statement "if ((int)BVar5 <= (int)mlen) {\n    BVar9 = BVar5;\n  }" if (parenthesized_expression "((int)BVar5 <= (int)mlen)" ( (binary_expression "(int)BVar5 <= (int)mlen" (cast_expression "(int)BVar5" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)mlen" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    BVar9 = BVar5;\n  }" { (expression_statement "BVar9 = BVar5;" (assignment_expression "BVar9 = BVar5" identifier = identifier) ;) })) (expression_statement "pBVar4 = newbn(BVar9);" (assignment_expression "pBVar4 = newbn(BVar9)" identifier = (call_expression "newbn(BVar9)" identifier (argument_list "(BVar9)" ( identifier )))) ;) (if_statement "if (0 < (int)BVar9) {\n    pBVar8 = pBVar3 + (BVar5 - BVar9);\n    BVar5 = 0;\n    do {\n      pBVar4[*pBVar4 - BVar5] = *pBVar8;\n      BVar5 = BVar5 + 1;\n      pBVar8 = pBVar8 + 1;\n    } while (BVar9 != BVar5);\n  }" if (parenthesized_expression "(0 < (int)BVar9)" ( (binary_expression "0 < (int)BVar9" number_literal < (cast_expression "(int)BVar9" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    pBVar8 = pBVar3 + (BVar5 - BVar9);\n    BVar5 = 0;\n    do {\n      pBVar4[*pBVar4 - BVar5] = *pBVar8;\n      BVar5 = BVar5 + 1;\n      pBVar8 = pBVar8 + 1;\n    } while (BVar9 != BVar5);\n  }" { (expression_statement "pBVar8 = pBVar3 + (BVar5 - BVar9);" (assignment_expression "pBVar8 = pBVar3 + (BVar5 - BVar9)" identifier = (binary_expression "pBVar3 + (BVar5 - BVar9)" identifier + (parenthesized_expression "(BVar5 - BVar9)" ( (binary_expression "BVar5 - BVar9" identifier - identifier) )))) ;) (expression_statement "BVar5 = 0;" (assignment_expression "BVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n      pBVar4[*pBVar4 - BVar5] = *pBVar8;\n      BVar5 = BVar5 + 1;\n      pBVar8 = pBVar8 + 1;\n    } while (BVar9 != BVar5);" do (compound_statement "{\n      pBVar4[*pBVar4 - BVar5] = *pBVar8;\n      BVar5 = BVar5 + 1;\n      pBVar8 = pBVar8 + 1;\n    }" { (expression_statement "pBVar4[*pBVar4 - BVar5] = *pBVar8;" (assignment_expression "pBVar4[*pBVar4 - BVar5] = *pBVar8" (subscript_expression "pBVar4[*pBVar4 - BVar5]" identifier [ (binary_expression "*pBVar4 - BVar5" (pointer_expression "*pBVar4" * identifier) - identifier) ]) = (pointer_expression "*pBVar8" * identifier)) ;) (expression_statement "BVar5 = BVar5 + 1;" (assignment_expression "BVar5 = BVar5 + 1" identifier = (binary_expression "BVar5 + 1" identifier + number_literal)) ;) (expression_statement "pBVar8 = pBVar8 + 1;" (assignment_expression "pBVar8 = pBVar8 + 1" identifier = (binary_expression "pBVar8 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(BVar9 != BVar5)" ( (binary_expression "BVar9 != BVar5" identifier != identifier) )) ;) })) (expression_statement "BVar5 = *pBVar4;" (assignment_expression "BVar5 = *pBVar4" identifier = (pointer_expression "*pBVar4" * identifier)) ;) (if_statement "if (1 < BVar5) {\n    pBVar6 = pBVar4 + BVar5;\n    BVar9 = *pBVar6;\n    while (BVar9 == 0) {\n      BVar5 = BVar5 - 1;\n      *pBVar4 = BVar5;\n      if (BVar5 == 1) break;\n      pBVar8 = pBVar6 + -1;\n      pBVar6 = pBVar6 + -1;\n      BVar9 = *pBVar8;\n    }\n  }" if (parenthesized_expression "(1 < BVar5)" ( (binary_expression "1 < BVar5" number_literal < identifier) )) (compound_statement "{\n    pBVar6 = pBVar4 + BVar5;\n    BVar9 = *pBVar6;\n    while (BVar9 == 0) {\n      BVar5 = BVar5 - 1;\n      *pBVar4 = BVar5;\n      if (BVar5 == 1) break;\n      pBVar8 = pBVar6 + -1;\n      pBVar6 = pBVar6 + -1;\n      BVar9 = *pBVar8;\n    }\n  }" { (expression_statement "pBVar6 = pBVar4 + BVar5;" (assignment_expression "pBVar6 = pBVar4 + BVar5" identifier = (binary_expression "pBVar4 + BVar5" identifier + identifier)) ;) (expression_statement "BVar9 = *pBVar6;" (assignment_expression "BVar9 = *pBVar6" identifier = (pointer_expression "*pBVar6" * identifier)) ;) (while_statement "while (BVar9 == 0) {\n      BVar5 = BVar5 - 1;\n      *pBVar4 = BVar5;\n      if (BVar5 == 1) break;\n      pBVar8 = pBVar6 + -1;\n      pBVar6 = pBVar6 + -1;\n      BVar9 = *pBVar8;\n    }" while (parenthesized_expression "(BVar9 == 0)" ( (binary_expression "BVar9 == 0" identifier == number_literal) )) (compound_statement "{\n      BVar5 = BVar5 - 1;\n      *pBVar4 = BVar5;\n      if (BVar5 == 1) break;\n      pBVar8 = pBVar6 + -1;\n      pBVar6 = pBVar6 + -1;\n      BVar9 = *pBVar8;\n    }" { (expression_statement "BVar5 = BVar5 - 1;" (assignment_expression "BVar5 = BVar5 - 1" identifier = (binary_expression "BVar5 - 1" identifier - number_literal)) ;) (expression_statement "*pBVar4 = BVar5;" (assignment_expression "*pBVar4 = BVar5" (pointer_expression "*pBVar4" * identifier) = identifier) ;) (if_statement "if (BVar5 == 1) break;" if (parenthesized_expression "(BVar5 == 1)" ( (binary_expression "BVar5 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "pBVar8 = pBVar6 + -1;" (assignment_expression "pBVar8 = pBVar6 + -1" identifier = (binary_expression "pBVar6 + -1" identifier + number_literal)) ;) (expression_statement "pBVar6 = pBVar6 + -1;" (assignment_expression "pBVar6 = pBVar6 + -1" identifier = (binary_expression "pBVar6 + -1" identifier + number_literal)) ;) (expression_statement "BVar9 = *pBVar8;" (assignment_expression "BVar9 = *pBVar8" identifier = (pointer_expression "*pBVar8" * identifier)) ;) })) })) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(scratch,iVar7 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(scratch,iVar7 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(scratch,iVar7 << 2)" ( identifier , (binary_expression "iVar7 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(scratch);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(scratch)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(scratch)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(pBVar3,len << 3);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(pBVar3,len << 3)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar3,len << 3)" ( identifier , (binary_expression "len << 3" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(pBVar3);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(pBVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar3)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(m,mlen * 4);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(m,mlen * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(m,mlen * 4)" ( identifier , (binary_expression "mlen * 4" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(m);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(m)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(m)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(pBVar1,len << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(pBVar1,len << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar1,len << 2)" ( identifier , (binary_expression "len << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(pBVar1);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(pBVar1)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar1)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(pBVar2,len << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(pBVar2,len << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar2,len << 2)" ( identifier , (binary_expression "len << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(pBVar2);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(pBVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pBVar2)" ( identifier ))) ;) (return_statement "return pBVar4;" return identifier ;) })))
(translation_unit "uint * modmul(uint *param_1,uint *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  uint *puVar10;\n  int iVar11;\n  int iVar12;\n  uint *puVar13;\n  uint uVar14;\n  int iVar15;\n  int iVar16;\n  uint uVar17;\n  \n  iVar15 = *param_3;\n  if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }\n  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);\n  if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }\n  uVar14 = *param_1;\n  if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }\n  if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_1;\n  if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }\n  uVar4 = *param_1;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_2;\n  if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }\n  uVar4 = *param_2;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  iVar12 = uVar14 * 2;\n  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);\n  iVar7 = FUN_0005c4cc(uVar14);\n  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  uVar17 = *puVar2;\n  uVar4 = FUN_0005c510(uVar17);\n  if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }\n  uVar9 = FUN_0005c554(uVar17);\n  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);\n  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);\n  iVar16 = iVar15;\n  if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }\n  puVar10 = (uint *)FUN_0005d738(iVar16);\n  if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }\n  uVar4 = *puVar10;\n  if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(uVar8);\n  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);\n  (*(code *)PTR_safefree_000bc1a4)(iVar11);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);\n  (*(code *)PTR_safefree_000bc1a4)(puVar2);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar5);\n  return puVar10;\n}\n\n" (function_definition "uint * modmul(uint *param_1,uint *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  uint *puVar10;\n  int iVar11;\n  int iVar12;\n  uint *puVar13;\n  uint uVar14;\n  int iVar15;\n  int iVar16;\n  uint uVar17;\n  \n  iVar15 = *param_3;\n  if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }\n  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);\n  if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }\n  uVar14 = *param_1;\n  if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }\n  if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_1;\n  if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }\n  uVar4 = *param_1;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_2;\n  if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }\n  uVar4 = *param_2;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  iVar12 = uVar14 * 2;\n  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);\n  iVar7 = FUN_0005c4cc(uVar14);\n  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  uVar17 = *puVar2;\n  uVar4 = FUN_0005c510(uVar17);\n  if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }\n  uVar9 = FUN_0005c554(uVar17);\n  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);\n  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);\n  iVar16 = iVar15;\n  if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }\n  puVar10 = (uint *)FUN_0005d738(iVar16);\n  if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }\n  uVar4 = *puVar10;\n  if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(uVar8);\n  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);\n  (*(code *)PTR_safefree_000bc1a4)(iVar11);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);\n  (*(code *)PTR_safefree_000bc1a4)(puVar2);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar5);\n  return puVar10;\n}" type_identifier (pointer_declarator "* modmul(uint *param_1,uint *param_2,int *param_3)" * (function_declarator "modmul(uint *param_1,uint *param_2,int *param_3)" identifier (parameter_list "(uint *param_1,uint *param_2,int *param_3)" ( (parameter_declaration "uint *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  uint *puVar10;\n  int iVar11;\n  int iVar12;\n  uint *puVar13;\n  uint uVar14;\n  int iVar15;\n  int iVar16;\n  uint uVar17;\n  \n  iVar15 = *param_3;\n  if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }\n  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);\n  if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }\n  uVar14 = *param_1;\n  if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }\n  if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_1;\n  if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }\n  uVar4 = *param_1;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_2;\n  if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }\n  uVar4 = *param_2;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  iVar12 = uVar14 * 2;\n  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);\n  iVar7 = FUN_0005c4cc(uVar14);\n  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  uVar17 = *puVar2;\n  uVar4 = FUN_0005c510(uVar17);\n  if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }\n  uVar9 = FUN_0005c554(uVar17);\n  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);\n  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);\n  iVar16 = iVar15;\n  if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }\n  puVar10 = (uint *)FUN_0005d738(iVar16);\n  if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }\n  uVar4 = *puVar10;\n  if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(uVar8);\n  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);\n  (*(code *)PTR_safefree_000bc1a4)(iVar11);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);\n  (*(code *)PTR_safefree_000bc1a4)(puVar2);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar5);\n  return puVar10;\n}" { (declaration "uint *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "undefined4 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "undefined4 *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "undefined4 uVar8;" type_identifier identifier ;) (declaration "undefined4 uVar9;" type_identifier identifier ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint *puVar13;" type_identifier (pointer_declarator "*puVar13" * identifier) ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "int iVar16;" primitive_type identifier ;) (declaration "uint uVar17;" type_identifier identifier ;) (expression_statement "iVar15 = *param_3;" (assignment_expression "iVar15 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }" if (parenthesized_expression "(param_3[iVar15] == 0)" ( (binary_expression "param_3[iVar15] == 0" (subscript_expression "param_3[iVar15]" identifier [ identifier ]) == number_literal) )) (compound_statement "{\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }" { (expression_statement "puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);" (assignment_expression "puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" identifier = (cast_expression "(uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" (parenthesized_expression "(*(code *)PTR___assert_fail_000bcb00)" ( (pointer_expression "*(code *)PTR___assert_fail_000bcb00" * (cast_expression "(code *)PTR___assert_fail_000bcb00" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" ( (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34" identifier + number_literal) , (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0" identifier + number_literal) , number_literal , (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc" identifier + number_literal) ))))) ;) (return_statement "return puVar2;" return identifier ;) })) (expression_statement "puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);" (assignment_expression "puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4)" identifier = (cast_expression "(uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar15,4)" ( identifier , number_literal ))))) ;) (if_statement "if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }" if (parenthesized_expression "(0 < iVar15)" ( (binary_expression "0 < iVar15" number_literal < identifier) )) (compound_statement "{\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }" { (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (expression_statement "puVar10 = puVar2;" (assignment_expression "puVar10 = puVar2" identifier = identifier) ;) (do_statement "do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);" do (compound_statement "{\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    }" { (expression_statement "*puVar10 = param_3[*param_3 - iVar11];" (assignment_expression "*puVar10 = param_3[*param_3 - iVar11]" (pointer_expression "*puVar10" * identifier) = (subscript_expression "param_3[*param_3 - iVar11]" identifier [ (binary_expression "*param_3 - iVar11" (pointer_expression "*param_3" * identifier) - identifier) ])) ;) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar15 != iVar11)" ( (binary_expression "iVar15 != iVar11" identifier != identifier) )) ;) })) (expression_statement "uVar14 = *param_1;" (assignment_expression "uVar14 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }" if (parenthesized_expression "(*param_1 <= *param_2)" ( (binary_expression "*param_1 <= *param_2" (pointer_expression "*param_1" * identifier) <= (pointer_expression "*param_2" * identifier)) )) (compound_statement "{\n    uVar14 = *param_2;\n  }" { (expression_statement "uVar14 = *param_2;" (assignment_expression "uVar14 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) })) (if_statement "if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }" if (parenthesized_expression "((int)(uVar14 << 1) <= iVar15)" ( (binary_expression "(int)(uVar14 << 1) <= iVar15" (cast_expression "(int)(uVar14 << 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar14 << 1)" ( (binary_expression "uVar14 << 1" identifier << number_literal) ))) <= identifier) )) (compound_statement "{\n    uVar14 = iVar15 / 2 + 1;\n  }" { (expression_statement "uVar14 = iVar15 / 2 + 1;" (assignment_expression "uVar14 = iVar15 / 2 + 1" identifier = (binary_expression "iVar15 / 2 + 1" (binary_expression "iVar15 / 2" identifier / number_literal) + number_literal)) ;) })) (expression_statement "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);" (assignment_expression "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar14,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar11 = uVar14 - *param_1;" (assignment_expression "iVar11 = uVar14 - *param_1" identifier = (binary_expression "uVar14 - *param_1" identifier - (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }" if (parenthesized_expression "(0 < iVar11)" ( (binary_expression "0 < iVar11" number_literal < identifier) )) (compound_statement "{\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }" { (expression_statement "puVar5 = puVar3;" (assignment_expression "puVar5 = puVar3" identifier = identifier) ;) (do_statement "do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);" do (compound_statement "{\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    }" { (expression_statement "*puVar5 = 0;" (assignment_expression "*puVar5 = 0" (pointer_expression "*puVar5" * identifier) = number_literal) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar5 != puVar3 + iVar11)" ( (binary_expression "puVar5 != puVar3 + iVar11" identifier != (binary_expression "puVar3 + iVar11" identifier + identifier)) )) ;) })) (expression_statement "uVar4 = *param_1;" (assignment_expression "uVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" if (parenthesized_expression "(0 < (int)uVar4)" ( (binary_expression "0 < (int)uVar4" number_literal < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" { (expression_statement "puVar10 = puVar3 + iVar11;" (assignment_expression "puVar10 = puVar3 + iVar11" identifier = (binary_expression "puVar3 + iVar11" identifier + identifier)) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);" do (compound_statement "{\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    }" { (expression_statement "*puVar10 = param_1[uVar4 - iVar11];" (assignment_expression "*puVar10 = param_1[uVar4 - iVar11]" (pointer_expression "*puVar10" * identifier) = (subscript_expression "param_1[uVar4 - iVar11]" identifier [ (binary_expression "uVar4 - iVar11" identifier - identifier) ])) ;) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = *param_1;" (assignment_expression "uVar4 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar11 < (int)uVar4)" ( (binary_expression "iVar11 < (int)uVar4" identifier < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);" (assignment_expression "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" identifier = (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar14,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar11 = uVar14 - *param_2;" (assignment_expression "iVar11 = uVar14 - *param_2" identifier = (binary_expression "uVar14 - *param_2" identifier - (pointer_expression "*param_2" * identifier))) ;) (if_statement "if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }" if (parenthesized_expression "(0 < iVar11)" ( (binary_expression "0 < iVar11" number_literal < identifier) )) (compound_statement "{\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }" { (expression_statement "puVar6 = puVar5;" (assignment_expression "puVar6 = puVar5" identifier = identifier) ;) (do_statement "do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);" do (compound_statement "{\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    }" { (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" * identifier) = number_literal) ;) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" identifier = (binary_expression "puVar6 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar6 != puVar5 + iVar11)" ( (binary_expression "puVar6 != puVar5 + iVar11" identifier != (binary_expression "puVar5 + iVar11" identifier + identifier)) )) ;) })) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (if_statement "if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" if (parenthesized_expression "(0 < (int)uVar4)" ( (binary_expression "0 < (int)uVar4" number_literal < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" { (expression_statement "puVar10 = puVar5 + iVar11;" (assignment_expression "puVar10 = puVar5 + iVar11" identifier = (binary_expression "puVar5 + iVar11" identifier + identifier)) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (do_statement "do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);" do (compound_statement "{\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    }" { (expression_statement "*puVar10 = param_2[uVar4 - iVar11];" (assignment_expression "*puVar10 = param_2[uVar4 - iVar11]" (pointer_expression "*puVar10" * identifier) = (subscript_expression "param_2[uVar4 - iVar11]" identifier [ (binary_expression "uVar4 - iVar11" identifier - identifier) ])) ;) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" identifier = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" identifier = (binary_expression "puVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar11 < (int)uVar4)" ( (binary_expression "iVar11 < (int)uVar4" identifier < (cast_expression "(int)uVar4" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) })) (expression_statement "iVar12 = uVar14 * 2;" (assignment_expression "iVar12 = uVar14 * 2" identifier = (binary_expression "uVar14 * 2" identifier * number_literal)) ;) (expression_statement "iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);" (assignment_expression "iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar12,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar12,4)" ( identifier , number_literal )))) ;) (expression_statement "iVar7 = FUN_0005c4cc(uVar14);" (assignment_expression "iVar7 = FUN_0005c4cc(uVar14)" identifier = (call_expression "FUN_0005c4cc(uVar14)" identifier (argument_list "(uVar14)" ( identifier )))) ;) (expression_statement "uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);" (assignment_expression "uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4)" identifier = (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" ( (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" * (cast_expression "(code *)PTR_safemalloc_000bc1b4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar7,4)" ( identifier , number_literal )))) ;) (expression_statement "uVar17 = *puVar2;" (assignment_expression "uVar17 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "uVar4 = FUN_0005c510(uVar17);" (assignment_expression "uVar4 = FUN_0005c510(uVar17)" identifier = (call_expression "FUN_0005c510(uVar17)" identifier (argument_list "(uVar17)" ( identifier )))) ;) (if_statement "if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }" if (parenthesized_expression "(uVar4 != 0)" ( (binary_expression "uVar4 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }" { (expression_statement "uVar17 = uVar17 << (uVar4 & 0x1f);" (assignment_expression "uVar17 = uVar17 << (uVar4 & 0x1f)" identifier = (binary_expression "uVar17 << (uVar4 & 0x1f)" identifier << (parenthesized_expression "(uVar4 & 0x1f)" ( (binary_expression "uVar4 & 0x1f" identifier & number_literal) )))) ;) (if_statement "if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }" if (parenthesized_expression "(1 < iVar15)" ( (binary_expression "1 < iVar15" number_literal < identifier) )) (compound_statement "{\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }" { (expression_statement "uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);" (assignment_expression "uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f)" identifier = (binary_expression "uVar17 | puVar2[1] >> (-uVar4 & 0x1f)" identifier | (binary_expression "puVar2[1] >> (-uVar4 & 0x1f)" (subscript_expression "puVar2[1]" identifier [ number_literal ]) >> (parenthesized_expression "(-uVar4 & 0x1f)" ( (binary_expression "-uVar4 & 0x1f" (unary_expression "-uVar4" - identifier) & number_literal) ))))) ;) })) })) (expression_statement "uVar9 = FUN_0005c554(uVar17);" (assignment_expression "uVar9 = FUN_0005c554(uVar17)" identifier = (call_expression "FUN_0005c554(uVar17)" identifier (argument_list "(uVar17)" ( identifier )))) ;) (expression_statement "FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);" (call_expression "FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8)" identifier (argument_list "(puVar3,puVar5,iVar11,uVar14,uVar8)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);" (call_expression "FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4)" identifier (argument_list "(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4)" ( identifier , identifier , identifier , identifier , number_literal , identifier , identifier ))) ;) (expression_statement "iVar16 = iVar15;" (assignment_expression "iVar16 = iVar15" identifier = identifier) ;) (if_statement "if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }" if (parenthesized_expression "(iVar12 <= iVar15)" ( (binary_expression "iVar12 <= iVar15" identifier <= identifier) )) (compound_statement "{\n    iVar16 = iVar12;\n  }" { (expression_statement "iVar16 = iVar12;" (assignment_expression "iVar16 = iVar12" identifier = identifier) ;) })) (expression_statement "puVar10 = (uint *)FUN_0005d738(iVar16);" (assignment_expression "puVar10 = (uint *)FUN_0005d738(iVar16)" identifier = (cast_expression "(uint *)FUN_0005d738(iVar16)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0005d738(iVar16)" identifier (argument_list "(iVar16)" ( identifier ))))) ;) (if_statement "if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }" if (parenthesized_expression "(0 < iVar16)" ( (binary_expression "0 < iVar16" number_literal < identifier) )) (compound_statement "{\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }" { (expression_statement "puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);" (assignment_expression "puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4)" identifier = (cast_expression "(uint *)(iVar11 + (iVar12 - iVar16) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + (iVar12 - iVar16) * 4)" ( (binary_expression "iVar11 + (iVar12 - iVar16) * 4" identifier + (binary_expression "(iVar12 - iVar16) * 4" (parenthesized_expression "(iVar12 - iVar16)" ( (binary_expression "iVar12 - iVar16" identifier - identifier) )) * number_literal)) )))) ;) (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" identifier = number_literal) ;) (do_statement "do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);" do (compound_statement "{\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    }" { (expression_statement "puVar10[*puVar10 - iVar12] = *puVar13;" (assignment_expression "puVar10[*puVar10 - iVar12] = *puVar13" (subscript_expression "puVar10[*puVar10 - iVar12]" identifier [ (binary_expression "*puVar10 - iVar12" (pointer_expression "*puVar10" * identifier) - identifier) ]) = (pointer_expression "*puVar13" * identifier)) ;) (expression_statement "iVar12 = iVar12 + 1;" (assignment_expression "iVar12 = iVar12 + 1" identifier = (binary_expression "iVar12 + 1" identifier + number_literal)) ;) (expression_statement "puVar13 = puVar13 + 1;" (assignment_expression "puVar13 = puVar13 + 1" identifier = (binary_expression "puVar13 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar16 != iVar12)" ( (binary_expression "iVar16 != iVar12" identifier != identifier) )) ;) })) (expression_statement "uVar4 = *puVar10;" (assignment_expression "uVar4 = *puVar10" identifier = (pointer_expression "*puVar10" * identifier)) ;) (if_statement "if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }" if (parenthesized_expression "(1 < uVar4)" ( (binary_expression "1 < uVar4" number_literal < identifier) )) (compound_statement "{\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }" { (expression_statement "puVar13 = puVar10 + uVar4;" (assignment_expression "puVar13 = puVar10 + uVar4" identifier = (binary_expression "puVar10 + uVar4" identifier + identifier)) ;) (expression_statement "uVar17 = *puVar13;" (assignment_expression "uVar17 = *puVar13" identifier = (pointer_expression "*puVar13" * identifier)) ;) (while_statement "while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }" while (parenthesized_expression "(uVar17 == 0)" ( (binary_expression "uVar17 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }" { (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" identifier = (binary_expression "uVar4 - 1" identifier - number_literal)) ;) (expression_statement "*puVar10 = uVar4;" (assignment_expression "*puVar10 = uVar4" (pointer_expression "*puVar10" * identifier) = identifier) ;) (if_statement "if (uVar4 == 1) break;" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "puVar1 = puVar13 + -1;" (assignment_expression "puVar1 = puVar13 + -1" identifier = (binary_expression "puVar13 + -1" identifier + number_literal)) ;) (expression_statement "puVar13 = puVar13 + -1;" (assignment_expression "puVar13 = puVar13 + -1" identifier = (binary_expression "puVar13 + -1" identifier + number_literal)) ;) (expression_statement "uVar17 = *puVar1;" (assignment_expression "uVar17 = *puVar1" identifier = (pointer_expression "*puVar1" * identifier)) ;) })) })) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8,iVar7 << 2)" ( identifier , (binary_expression "iVar7 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(uVar8);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(uVar8)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar8)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar11,uVar14 << 3)" ( identifier , (binary_expression "uVar14 << 3" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(iVar11);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(iVar11)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar11)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar2,iVar15 * 4)" ( identifier , (binary_expression "iVar15 * 4" identifier * number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(puVar2);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(puVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3,uVar14 << 2)" ( identifier , (binary_expression "uVar14 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(puVar3);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar3)" ( identifier ))) ;) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" ( (pointer_expression "*(code *)PTR_smemclr_000bc1e4" * (cast_expression "(code *)PTR_smemclr_000bc1e4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar5,uVar14 << 2)" ( identifier , (binary_expression "uVar14 << 2" identifier << number_literal) ))) ;) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(puVar5);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(puVar5)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" ( (pointer_expression "*(code *)PTR_safefree_000bc1a4" * (cast_expression "(code *)PTR_safefree_000bc1a4" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(puVar5)" ( identifier ))) ;) (return_statement "return puVar10;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ IDENT ]) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) , LIT , (binary_expression IDENT + LIT) ))))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ (binary_expression (pointer_expression * IDENT) - IDENT) ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) <= (pointer_expression * IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT << LIT) ))) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT / LIT) + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , LIT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + IDENT)) )) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , LIT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + IDENT)) )) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ (binary_expression IDENT - IDENT) ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression (subscript_expression IDENT [ LIT ]) >> (parenthesized_expression ( (binary_expression (unary_expression - IDENT) & LIT) ))))) ;) })) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , LIT , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (pointer_expression * IDENT) - IDENT) ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT << LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT << LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT << LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT << LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) })))
(function_definition "uint * modmul(uint *param_1,uint *param_2,int *param_3)\n\n{\n  uint *puVar1;\n  uint *puVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  uint *puVar10;\n  int iVar11;\n  int iVar12;\n  uint *puVar13;\n  uint uVar14;\n  int iVar15;\n  int iVar16;\n  uint uVar17;\n  \n  iVar15 = *param_3;\n  if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }\n  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);\n  if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }\n  uVar14 = *param_1;\n  if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }\n  if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_1;\n  if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }\n  uVar4 = *param_1;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_2;\n  if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }\n  uVar4 = *param_2;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  iVar12 = uVar14 * 2;\n  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);\n  iVar7 = FUN_0005c4cc(uVar14);\n  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  uVar17 = *puVar2;\n  uVar4 = FUN_0005c510(uVar17);\n  if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }\n  uVar9 = FUN_0005c554(uVar17);\n  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);\n  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);\n  iVar16 = iVar15;\n  if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }\n  puVar10 = (uint *)FUN_0005d738(iVar16);\n  if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }\n  uVar4 = *puVar10;\n  if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(uVar8);\n  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);\n  (*(code *)PTR_safefree_000bc1a4)(iVar11);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);\n  (*(code *)PTR_safefree_000bc1a4)(puVar2);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar5);\n  return puVar10;\n}" (type_identifier "uint") (pointer_declarator "* modmul(uint *param_1,uint *param_2,int *param_3)" (* "*") (function_declarator "modmul(uint *param_1,uint *param_2,int *param_3)" (identifier "modmul") (parameter_list "(uint *param_1,uint *param_2,int *param_3)" (( "(") (parameter_declaration "uint *param_1" (type_identifier "uint") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")")))) (compound_statement "{\n  uint *puVar1;\n  uint *puVar2;\n  undefined4 *puVar3;\n  uint uVar4;\n  undefined4 *puVar5;\n  undefined4 *puVar6;\n  int iVar7;\n  undefined4 uVar8;\n  undefined4 uVar9;\n  uint *puVar10;\n  int iVar11;\n  int iVar12;\n  uint *puVar13;\n  uint uVar14;\n  int iVar15;\n  int iVar16;\n  uint uVar17;\n  \n  iVar15 = *param_3;\n  if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }\n  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);\n  if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }\n  uVar14 = *param_1;\n  if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }\n  if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }\n  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_1;\n  if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }\n  uVar4 = *param_1;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);\n  iVar11 = uVar14 - *param_2;\n  if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }\n  uVar4 = *param_2;\n  if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }\n  iVar12 = uVar14 * 2;\n  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);\n  iVar7 = FUN_0005c4cc(uVar14);\n  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);\n  uVar17 = *puVar2;\n  uVar4 = FUN_0005c510(uVar17);\n  if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }\n  uVar9 = FUN_0005c554(uVar17);\n  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);\n  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);\n  iVar16 = iVar15;\n  if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }\n  puVar10 = (uint *)FUN_0005d738(iVar16);\n  if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }\n  uVar4 = *puVar10;\n  if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }\n  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(uVar8);\n  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);\n  (*(code *)PTR_safefree_000bc1a4)(iVar11);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);\n  (*(code *)PTR_safefree_000bc1a4)(puVar2);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar3);\n  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);\n  (*(code *)PTR_safefree_000bc1a4)(puVar5);\n  return puVar10;\n}" ({ "{") (declaration "uint *puVar1;" (type_identifier "uint") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint *puVar2;" (type_identifier "uint") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "undefined4 *puVar5;" (type_identifier "undefined4") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "undefined4 *puVar6;" (type_identifier "undefined4") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "undefined4 uVar8;" (type_identifier "undefined4") (identifier "uVar8") (; ";")) (declaration "undefined4 uVar9;" (type_identifier "undefined4") (identifier "uVar9") (; ";")) (declaration "uint *puVar10;" (type_identifier "uint") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "int iVar11;" (primitive_type "int") (identifier "iVar11") (; ";")) (declaration "int iVar12;" (primitive_type "int") (identifier "iVar12") (; ";")) (declaration "uint *puVar13;" (type_identifier "uint") (pointer_declarator "*puVar13" (* "*") (identifier "puVar13")) (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "int iVar15;" (primitive_type "int") (identifier "iVar15") (; ";")) (declaration "int iVar16;" (primitive_type "int") (identifier "iVar16") (; ";")) (declaration "uint uVar17;" (type_identifier "uint") (identifier "uVar17") (; ";")) (expression_statement "iVar15 = *param_3;" (assignment_expression "iVar15 = *param_3" (identifier "iVar15") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if (param_3[iVar15] == 0) {\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }" (if "if") (parenthesized_expression "(param_3[iVar15] == 0)" (( "(") (binary_expression "param_3[iVar15] == 0" (subscript_expression "param_3[iVar15]" (identifier "param_3") ([ "[") (identifier "iVar15") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);\n    return puVar2;\n  }" ({ "{") (expression_statement "puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);" (assignment_expression "puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" (identifier "puVar2") (= "=") (cast_expression "(uint *)(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR___assert_fail_000bcb00)\n                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" (parenthesized_expression "(*(code *)PTR___assert_fail_000bcb00)" (( "(") (pointer_expression "*(code *)PTR___assert_fail_000bcb00" (* "*") (cast_expression "(code *)PTR___assert_fail_000bcb00" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR___assert_fail_000bcb00"))) () ")")) (argument_list "(PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,\n                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc)" (( "(") (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34" (identifier "PTR_s_Server_sent_command_exit_status___000bc188") (+ "+") (number_literal "0x4d34")) (, ",") (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0" (identifier "PTR_s_Server_sent_command_exit_status___000bc188") (+ "+") (number_literal "0x4cf0")) (, ",") (number_literal "0x4c1") (, ",") (binary_expression "PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc" (identifier "PTR_s_Server_sent_command_exit_status___000bc188") (+ "+") (number_literal "0x4ebc")) () ")"))))) (; ";")) (return_statement "return puVar2;" (return "return") (identifier "puVar2") (; ";")) (} "}"))) (expression_statement "puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);" (assignment_expression "puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4)" (identifier "puVar2") (= "=") (cast_expression "(uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" (* "*") (cast_expression "(code *)PTR_safemalloc_000bc1b4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000bc1b4"))) () ")")) (argument_list "(iVar15,4)" (( "(") (identifier "iVar15") (, ",") (number_literal "4") () ")"))))) (; ";")) (if_statement "if (0 < iVar15) {\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }" (if "if") (parenthesized_expression "(0 < iVar15)" (( "(") (binary_expression "0 < iVar15" (number_literal "0") (< "<") (identifier "iVar15")) () ")")) (compound_statement "{\n    iVar11 = 0;\n    puVar10 = puVar2;\n    do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);\n  }" ({ "{") (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" (identifier "iVar11") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar10 = puVar2;" (assignment_expression "puVar10 = puVar2" (identifier "puVar10") (= "=") (identifier "puVar2")) (; ";")) (do_statement "do {\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    } while (iVar15 != iVar11);" (do "do") (compound_statement "{\n      *puVar10 = param_3[*param_3 - iVar11];\n      iVar11 = iVar11 + 1;\n      puVar10 = puVar10 + 1;\n    }" ({ "{") (expression_statement "*puVar10 = param_3[*param_3 - iVar11];" (assignment_expression "*puVar10 = param_3[*param_3 - iVar11]" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (subscript_expression "param_3[*param_3 - iVar11]" (identifier "param_3") ([ "[") (binary_expression "*param_3 - iVar11" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (- "-") (identifier "iVar11")) (] "]"))) (; ";")) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" (identifier "iVar11") (= "=") (binary_expression "iVar11 + 1" (identifier "iVar11") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + 1" (identifier "puVar10") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar15 != iVar11)" (( "(") (binary_expression "iVar15 != iVar11" (identifier "iVar15") (!= "!=") (identifier "iVar11")) () ")")) (; ";")) (} "}"))) (expression_statement "uVar14 = *param_1;" (assignment_expression "uVar14 = *param_1" (identifier "uVar14") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (*param_1 <= *param_2) {\n    uVar14 = *param_2;\n  }" (if "if") (parenthesized_expression "(*param_1 <= *param_2)" (( "(") (binary_expression "*param_1 <= *param_2" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (<= "<=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")) (compound_statement "{\n    uVar14 = *param_2;\n  }" ({ "{") (expression_statement "uVar14 = *param_2;" (assignment_expression "uVar14 = *param_2" (identifier "uVar14") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (} "}"))) (if_statement "if ((int)(uVar14 << 1) <= iVar15) {\n    uVar14 = iVar15 / 2 + 1;\n  }" (if "if") (parenthesized_expression "((int)(uVar14 << 1) <= iVar15)" (( "(") (binary_expression "(int)(uVar14 << 1) <= iVar15" (cast_expression "(int)(uVar14 << 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar14 << 1)" (( "(") (binary_expression "uVar14 << 1" (identifier "uVar14") (<< "<<") (number_literal "1")) () ")"))) (<= "<=") (identifier "iVar15")) () ")")) (compound_statement "{\n    uVar14 = iVar15 / 2 + 1;\n  }" ({ "{") (expression_statement "uVar14 = iVar15 / 2 + 1;" (assignment_expression "uVar14 = iVar15 / 2 + 1" (identifier "uVar14") (= "=") (binary_expression "iVar15 / 2 + 1" (binary_expression "iVar15 / 2" (identifier "iVar15") (/ "/") (number_literal "2")) (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);" (assignment_expression "puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" (* "*") (cast_expression "(code *)PTR_safemalloc_000bc1b4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000bc1b4"))) () ")")) (argument_list "(uVar14,4)" (( "(") (identifier "uVar14") (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "iVar11 = uVar14 - *param_1;" (assignment_expression "iVar11 = uVar14 - *param_1" (identifier "iVar11") (= "=") (binary_expression "uVar14 - *param_1" (identifier "uVar14") (- "-") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (0 < iVar11) {\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }" (if "if") (parenthesized_expression "(0 < iVar11)" (( "(") (binary_expression "0 < iVar11" (number_literal "0") (< "<") (identifier "iVar11")) () ")")) (compound_statement "{\n    puVar5 = puVar3;\n    do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);\n  }" ({ "{") (expression_statement "puVar5 = puVar3;" (assignment_expression "puVar5 = puVar3" (identifier "puVar5") (= "=") (identifier "puVar3")) (; ";")) (do_statement "do {\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    } while (puVar5 != puVar3 + iVar11);" (do "do") (compound_statement "{\n      *puVar5 = 0;\n      puVar5 = puVar5 + 1;\n    }" ({ "{") (expression_statement "*puVar5 = 0;" (assignment_expression "*puVar5 = 0" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar5 != puVar3 + iVar11)" (( "(") (binary_expression "puVar5 != puVar3 + iVar11" (identifier "puVar5") (!= "!=") (binary_expression "puVar3 + iVar11" (identifier "puVar3") (+ "+") (identifier "iVar11"))) () ")")) (; ";")) (} "}"))) (expression_statement "uVar4 = *param_1;" (assignment_expression "uVar4 = *param_1" (identifier "uVar4") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (0 < (int)uVar4) {\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" (if "if") (parenthesized_expression "(0 < (int)uVar4)" (( "(") (binary_expression "0 < (int)uVar4" (number_literal "0") (< "<") (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4"))) () ")")) (compound_statement "{\n    puVar10 = puVar3 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" ({ "{") (expression_statement "puVar10 = puVar3 + iVar11;" (assignment_expression "puVar10 = puVar3 + iVar11" (identifier "puVar10") (= "=") (binary_expression "puVar3 + iVar11" (identifier "puVar3") (+ "+") (identifier "iVar11"))) (; ";")) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" (identifier "iVar11") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);" (do "do") (compound_statement "{\n      *puVar10 = param_1[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_1;\n      puVar10 = puVar10 + 1;\n    }" ({ "{") (expression_statement "*puVar10 = param_1[uVar4 - iVar11];" (assignment_expression "*puVar10 = param_1[uVar4 - iVar11]" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (subscript_expression "param_1[uVar4 - iVar11]" (identifier "param_1") ([ "[") (binary_expression "uVar4 - iVar11" (identifier "uVar4") (- "-") (identifier "iVar11")) (] "]"))) (; ";")) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" (identifier "iVar11") (= "=") (binary_expression "iVar11 + 1" (identifier "iVar11") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar4 = *param_1;" (assignment_expression "uVar4 = *param_1" (identifier "uVar4") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + 1" (identifier "puVar10") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar11 < (int)uVar4)" (( "(") (binary_expression "iVar11 < (int)uVar4" (identifier "iVar11") (< "<") (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4"))) () ")")) (; ";")) (} "}"))) (expression_statement "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);" (assignment_expression "puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (identifier "puVar5") (= "=") (cast_expression "(undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" (* "*") (cast_expression "(code *)PTR_safemalloc_000bc1b4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000bc1b4"))) () ")")) (argument_list "(uVar14,4)" (( "(") (identifier "uVar14") (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "iVar11 = uVar14 - *param_2;" (assignment_expression "iVar11 = uVar14 - *param_2" (identifier "iVar11") (= "=") (binary_expression "uVar14 - *param_2" (identifier "uVar14") (- "-") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (if_statement "if (0 < iVar11) {\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }" (if "if") (parenthesized_expression "(0 < iVar11)" (( "(") (binary_expression "0 < iVar11" (number_literal "0") (< "<") (identifier "iVar11")) () ")")) (compound_statement "{\n    puVar6 = puVar5;\n    do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);\n  }" ({ "{") (expression_statement "puVar6 = puVar5;" (assignment_expression "puVar6 = puVar5" (identifier "puVar6") (= "=") (identifier "puVar5")) (; ";")) (do_statement "do {\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    } while (puVar6 != puVar5 + iVar11);" (do "do") (compound_statement "{\n      *puVar6 = 0;\n      puVar6 = puVar6 + 1;\n    }" ({ "{") (expression_statement "*puVar6 = 0;" (assignment_expression "*puVar6 = 0" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar6 = puVar6 + 1;" (assignment_expression "puVar6 = puVar6 + 1" (identifier "puVar6") (= "=") (binary_expression "puVar6 + 1" (identifier "puVar6") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar6 != puVar5 + iVar11)" (( "(") (binary_expression "puVar6 != puVar5 + iVar11" (identifier "puVar6") (!= "!=") (binary_expression "puVar5 + iVar11" (identifier "puVar5") (+ "+") (identifier "iVar11"))) () ")")) (; ";")) (} "}"))) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" (identifier "uVar4") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (if_statement "if (0 < (int)uVar4) {\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" (if "if") (parenthesized_expression "(0 < (int)uVar4)" (( "(") (binary_expression "0 < (int)uVar4" (number_literal "0") (< "<") (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4"))) () ")")) (compound_statement "{\n    puVar10 = puVar5 + iVar11;\n    iVar11 = 0;\n    do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);\n  }" ({ "{") (expression_statement "puVar10 = puVar5 + iVar11;" (assignment_expression "puVar10 = puVar5 + iVar11" (identifier "puVar10") (= "=") (binary_expression "puVar5 + iVar11" (identifier "puVar5") (+ "+") (identifier "iVar11"))) (; ";")) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" (identifier "iVar11") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    } while (iVar11 < (int)uVar4);" (do "do") (compound_statement "{\n      *puVar10 = param_2[uVar4 - iVar11];\n      iVar11 = iVar11 + 1;\n      uVar4 = *param_2;\n      puVar10 = puVar10 + 1;\n    }" ({ "{") (expression_statement "*puVar10 = param_2[uVar4 - iVar11];" (assignment_expression "*puVar10 = param_2[uVar4 - iVar11]" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (subscript_expression "param_2[uVar4 - iVar11]" (identifier "param_2") ([ "[") (binary_expression "uVar4 - iVar11" (identifier "uVar4") (- "-") (identifier "iVar11")) (] "]"))) (; ";")) (expression_statement "iVar11 = iVar11 + 1;" (assignment_expression "iVar11 = iVar11 + 1" (identifier "iVar11") (= "=") (binary_expression "iVar11 + 1" (identifier "iVar11") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar4 = *param_2;" (assignment_expression "uVar4 = *param_2" (identifier "uVar4") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "puVar10 = puVar10 + 1;" (assignment_expression "puVar10 = puVar10 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar10 + 1" (identifier "puVar10") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar11 < (int)uVar4)" (( "(") (binary_expression "iVar11 < (int)uVar4" (identifier "iVar11") (< "<") (cast_expression "(int)uVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar4"))) () ")")) (; ";")) (} "}"))) (expression_statement "iVar12 = uVar14 * 2;" (assignment_expression "iVar12 = uVar14 * 2" (identifier "iVar12") (= "=") (binary_expression "uVar14 * 2" (identifier "uVar14") (* "*") (number_literal "2"))) (; ";")) (expression_statement "iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);" (assignment_expression "iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4)" (identifier "iVar11") (= "=") (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar12,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" (* "*") (cast_expression "(code *)PTR_safemalloc_000bc1b4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000bc1b4"))) () ")")) (argument_list "(iVar12,4)" (( "(") (identifier "iVar12") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "iVar7 = FUN_0005c4cc(uVar14);" (assignment_expression "iVar7 = FUN_0005c4cc(uVar14)" (identifier "iVar7") (= "=") (call_expression "FUN_0005c4cc(uVar14)" (identifier "FUN_0005c4cc") (argument_list "(uVar14)" (( "(") (identifier "uVar14") () ")")))) (; ";")) (expression_statement "uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);" (assignment_expression "uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4)" (identifier "uVar8") (= "=") (call_expression "(*(code *)PTR_safemalloc_000bc1b4)(iVar7,4)" (parenthesized_expression "(*(code *)PTR_safemalloc_000bc1b4)" (( "(") (pointer_expression "*(code *)PTR_safemalloc_000bc1b4" (* "*") (cast_expression "(code *)PTR_safemalloc_000bc1b4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safemalloc_000bc1b4"))) () ")")) (argument_list "(iVar7,4)" (( "(") (identifier "iVar7") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "uVar17 = *puVar2;" (assignment_expression "uVar17 = *puVar2" (identifier "uVar17") (= "=") (pointer_expression "*puVar2" (* "*") (identifier "puVar2"))) (; ";")) (expression_statement "uVar4 = FUN_0005c510(uVar17);" (assignment_expression "uVar4 = FUN_0005c510(uVar17)" (identifier "uVar4") (= "=") (call_expression "FUN_0005c510(uVar17)" (identifier "FUN_0005c510") (argument_list "(uVar17)" (( "(") (identifier "uVar17") () ")")))) (; ";")) (if_statement "if (uVar4 != 0) {\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }" (if "if") (parenthesized_expression "(uVar4 != 0)" (( "(") (binary_expression "uVar4 != 0" (identifier "uVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar17 = uVar17 << (uVar4 & 0x1f);\n    if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }\n  }" ({ "{") (expression_statement "uVar17 = uVar17 << (uVar4 & 0x1f);" (assignment_expression "uVar17 = uVar17 << (uVar4 & 0x1f)" (identifier "uVar17") (= "=") (binary_expression "uVar17 << (uVar4 & 0x1f)" (identifier "uVar17") (<< "<<") (parenthesized_expression "(uVar4 & 0x1f)" (( "(") (binary_expression "uVar4 & 0x1f" (identifier "uVar4") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (if_statement "if (1 < iVar15) {\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }" (if "if") (parenthesized_expression "(1 < iVar15)" (( "(") (binary_expression "1 < iVar15" (number_literal "1") (< "<") (identifier "iVar15")) () ")")) (compound_statement "{\n      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);\n    }" ({ "{") (expression_statement "uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);" (assignment_expression "uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f)" (identifier "uVar17") (= "=") (binary_expression "uVar17 | puVar2[1] >> (-uVar4 & 0x1f)" (identifier "uVar17") (| "|") (binary_expression "puVar2[1] >> (-uVar4 & 0x1f)" (subscript_expression "puVar2[1]" (identifier "puVar2") ([ "[") (number_literal "1") (] "]")) (>> ">>") (parenthesized_expression "(-uVar4 & 0x1f)" (( "(") (binary_expression "-uVar4 & 0x1f" (unary_expression "-uVar4" (- "-") (identifier "uVar4")) (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar9 = FUN_0005c554(uVar17);" (assignment_expression "uVar9 = FUN_0005c554(uVar17)" (identifier "uVar9") (= "=") (call_expression "FUN_0005c554(uVar17)" (identifier "FUN_0005c554") (argument_list "(uVar17)" (( "(") (identifier "uVar17") () ")")))) (; ";")) (expression_statement "FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);" (call_expression "FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8)" (identifier "FUN_0005c690") (argument_list "(puVar3,puVar5,iVar11,uVar14,uVar8)" (( "(") (identifier "puVar3") (, ",") (identifier "puVar5") (, ",") (identifier "iVar11") (, ",") (identifier "uVar14") (, ",") (identifier "uVar8") () ")"))) (; ";")) (expression_statement "FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);" (call_expression "FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4)" (identifier "FUN_0005d0a8") (argument_list "(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4)" (( "(") (identifier "iVar11") (, ",") (identifier "iVar12") (, ",") (identifier "puVar2") (, ",") (identifier "iVar15") (, ",") (number_literal "0") (, ",") (identifier "uVar9") (, ",") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "iVar16 = iVar15;" (assignment_expression "iVar16 = iVar15" (identifier "iVar16") (= "=") (identifier "iVar15")) (; ";")) (if_statement "if (iVar12 <= iVar15) {\n    iVar16 = iVar12;\n  }" (if "if") (parenthesized_expression "(iVar12 <= iVar15)" (( "(") (binary_expression "iVar12 <= iVar15" (identifier "iVar12") (<= "<=") (identifier "iVar15")) () ")")) (compound_statement "{\n    iVar16 = iVar12;\n  }" ({ "{") (expression_statement "iVar16 = iVar12;" (assignment_expression "iVar16 = iVar12" (identifier "iVar16") (= "=") (identifier "iVar12")) (; ";")) (} "}"))) (expression_statement "puVar10 = (uint *)FUN_0005d738(iVar16);" (assignment_expression "puVar10 = (uint *)FUN_0005d738(iVar16)" (identifier "puVar10") (= "=") (cast_expression "(uint *)FUN_0005d738(iVar16)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0005d738(iVar16)" (identifier "FUN_0005d738") (argument_list "(iVar16)" (( "(") (identifier "iVar16") () ")"))))) (; ";")) (if_statement "if (0 < iVar16) {\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }" (if "if") (parenthesized_expression "(0 < iVar16)" (( "(") (binary_expression "0 < iVar16" (number_literal "0") (< "<") (identifier "iVar16")) () ")")) (compound_statement "{\n    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);\n    iVar12 = 0;\n    do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);\n  }" ({ "{") (expression_statement "puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);" (assignment_expression "puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4)" (identifier "puVar13") (= "=") (cast_expression "(uint *)(iVar11 + (iVar12 - iVar16) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + (iVar12 - iVar16) * 4)" (( "(") (binary_expression "iVar11 + (iVar12 - iVar16) * 4" (identifier "iVar11") (+ "+") (binary_expression "(iVar12 - iVar16) * 4" (parenthesized_expression "(iVar12 - iVar16)" (( "(") (binary_expression "iVar12 - iVar16" (identifier "iVar12") (- "-") (identifier "iVar16")) () ")")) (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "iVar12 = 0;" (assignment_expression "iVar12 = 0" (identifier "iVar12") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    } while (iVar16 != iVar12);" (do "do") (compound_statement "{\n      puVar10[*puVar10 - iVar12] = *puVar13;\n      iVar12 = iVar12 + 1;\n      puVar13 = puVar13 + 1;\n    }" ({ "{") (expression_statement "puVar10[*puVar10 - iVar12] = *puVar13;" (assignment_expression "puVar10[*puVar10 - iVar12] = *puVar13" (subscript_expression "puVar10[*puVar10 - iVar12]" (identifier "puVar10") ([ "[") (binary_expression "*puVar10 - iVar12" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (- "-") (identifier "iVar12")) (] "]")) (= "=") (pointer_expression "*puVar13" (* "*") (identifier "puVar13"))) (; ";")) (expression_statement "iVar12 = iVar12 + 1;" (assignment_expression "iVar12 = iVar12 + 1" (identifier "iVar12") (= "=") (binary_expression "iVar12 + 1" (identifier "iVar12") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar13 = puVar13 + 1;" (assignment_expression "puVar13 = puVar13 + 1" (identifier "puVar13") (= "=") (binary_expression "puVar13 + 1" (identifier "puVar13") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar16 != iVar12)" (( "(") (binary_expression "iVar16 != iVar12" (identifier "iVar16") (!= "!=") (identifier "iVar12")) () ")")) (; ";")) (} "}"))) (expression_statement "uVar4 = *puVar10;" (assignment_expression "uVar4 = *puVar10" (identifier "uVar4") (= "=") (pointer_expression "*puVar10" (* "*") (identifier "puVar10"))) (; ";")) (if_statement "if (1 < uVar4) {\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }" (if "if") (parenthesized_expression "(1 < uVar4)" (( "(") (binary_expression "1 < uVar4" (number_literal "1") (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\n    puVar13 = puVar10 + uVar4;\n    uVar17 = *puVar13;\n    while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }\n  }" ({ "{") (expression_statement "puVar13 = puVar10 + uVar4;" (assignment_expression "puVar13 = puVar10 + uVar4" (identifier "puVar13") (= "=") (binary_expression "puVar10 + uVar4" (identifier "puVar10") (+ "+") (identifier "uVar4"))) (; ";")) (expression_statement "uVar17 = *puVar13;" (assignment_expression "uVar17 = *puVar13" (identifier "uVar17") (= "=") (pointer_expression "*puVar13" (* "*") (identifier "puVar13"))) (; ";")) (while_statement "while (uVar17 == 0) {\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }" (while "while") (parenthesized_expression "(uVar17 == 0)" (( "(") (binary_expression "uVar17 == 0" (identifier "uVar17") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar4 = uVar4 - 1;\n      *puVar10 = uVar4;\n      if (uVar4 == 1) break;\n      puVar1 = puVar13 + -1;\n      puVar13 = puVar13 + -1;\n      uVar17 = *puVar1;\n    }" ({ "{") (expression_statement "uVar4 = uVar4 - 1;" (assignment_expression "uVar4 = uVar4 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 - 1" (identifier "uVar4") (- "-") (number_literal "1"))) (; ";")) (expression_statement "*puVar10 = uVar4;" (assignment_expression "*puVar10 = uVar4" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (identifier "uVar4")) (; ";")) (if_statement "if (uVar4 == 1) break;" (if "if") (parenthesized_expression "(uVar4 == 1)" (( "(") (binary_expression "uVar4 == 1" (identifier "uVar4") (== "==") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "puVar1 = puVar13 + -1;" (assignment_expression "puVar1 = puVar13 + -1" (identifier "puVar1") (= "=") (binary_expression "puVar13 + -1" (identifier "puVar13") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar13 = puVar13 + -1;" (assignment_expression "puVar13 = puVar13 + -1" (identifier "puVar13") (= "=") (binary_expression "puVar13 + -1" (identifier "puVar13") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar17 = *puVar1;" (assignment_expression "uVar17 = *puVar1" (identifier "uVar17") (= "=") (pointer_expression "*puVar1" (* "*") (identifier "puVar1"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000bc1e4" (* "*") (cast_expression "(code *)PTR_smemclr_000bc1e4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000bc1e4"))) () ")")) (argument_list "(uVar8,iVar7 << 2)" (( "(") (identifier "uVar8") (, ",") (binary_expression "iVar7 << 2" (identifier "iVar7") (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(uVar8);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(uVar8)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" (( "(") (pointer_expression "*(code *)PTR_safefree_000bc1a4" (* "*") (cast_expression "(code *)PTR_safefree_000bc1a4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000bc1a4"))) () ")")) (argument_list "(uVar8)" (( "(") (identifier "uVar8") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000bc1e4" (* "*") (cast_expression "(code *)PTR_smemclr_000bc1e4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000bc1e4"))) () ")")) (argument_list "(iVar11,uVar14 << 3)" (( "(") (identifier "iVar11") (, ",") (binary_expression "uVar14 << 3" (identifier "uVar14") (<< "<<") (number_literal "3")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(iVar11);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(iVar11)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" (( "(") (pointer_expression "*(code *)PTR_safefree_000bc1a4" (* "*") (cast_expression "(code *)PTR_safefree_000bc1a4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000bc1a4"))) () ")")) (argument_list "(iVar11)" (( "(") (identifier "iVar11") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000bc1e4" (* "*") (cast_expression "(code *)PTR_smemclr_000bc1e4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000bc1e4"))) () ")")) (argument_list "(puVar2,iVar15 * 4)" (( "(") (identifier "puVar2") (, ",") (binary_expression "iVar15 * 4" (identifier "iVar15") (* "*") (number_literal "4")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(puVar2);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(puVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" (( "(") (pointer_expression "*(code *)PTR_safefree_000bc1a4" (* "*") (cast_expression "(code *)PTR_safefree_000bc1a4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000bc1a4"))) () ")")) (argument_list "(puVar2)" (( "(") (identifier "puVar2") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000bc1e4" (* "*") (cast_expression "(code *)PTR_smemclr_000bc1e4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000bc1e4"))) () ")")) (argument_list "(puVar3,uVar14 << 2)" (( "(") (identifier "puVar3") (, ",") (binary_expression "uVar14 << 2" (identifier "uVar14") (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(puVar3);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(puVar3)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" (( "(") (pointer_expression "*(code *)PTR_safefree_000bc1a4" (* "*") (cast_expression "(code *)PTR_safefree_000bc1a4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000bc1a4"))) () ")")) (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")"))) (; ";")) (expression_statement "(*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);" (call_expression "(*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2)" (parenthesized_expression "(*(code *)PTR_smemclr_000bc1e4)" (( "(") (pointer_expression "*(code *)PTR_smemclr_000bc1e4" (* "*") (cast_expression "(code *)PTR_smemclr_000bc1e4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_smemclr_000bc1e4"))) () ")")) (argument_list "(puVar5,uVar14 << 2)" (( "(") (identifier "puVar5") (, ",") (binary_expression "uVar14 << 2" (identifier "uVar14") (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "(*(code *)PTR_safefree_000bc1a4)(puVar5);" (call_expression "(*(code *)PTR_safefree_000bc1a4)(puVar5)" (parenthesized_expression "(*(code *)PTR_safefree_000bc1a4)" (( "(") (pointer_expression "*(code *)PTR_safefree_000bc1a4" (* "*") (cast_expression "(code *)PTR_safefree_000bc1a4" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000bc1a4"))) () ")")) (argument_list "(puVar5)" (( "(") (identifier "puVar5") () ")"))) (; ";")) (return_statement "return puVar10;" (return "return") (identifier "puVar10") (; ";")) (} "}")))

type_1 function_1(type_1 p,type_1 q,type_1 mod)

{
  type_2 *m;
  type_2 *var_3;
  type_2 *var_7;
  type_2 *var_8;
  type_2 *scratch;
  type_3 var_11;
  type_1 var_18;
  type_2 var_2;
  type_1 var_19;
  int var_6;
  type_2 *var_17;
  type_3 var_5;
  type_2 var_4;
  type_2 var_12;
  
  var_4 = *mod;
  if (mod[var_4] == 0) {
    var_18 = (type_1)
             (*(type_4 *)PTR___assert_fail_000bcb00)
                       (var_1 + 0x4d34,
                        var_1 + 0x4cf0,0x4c1,
                        var_1 + 0x4ebc);
    return var_18;
  }
  m = (type_2 *)(*(type_4 *)PTR_safemalloc_000bc1b4)(var_4,4);
  if (0 < (int)var_4) {
    var_2 = 0;
    var_3 = m;
    do {
      *var_3 = mod[*mod - var_2];
      var_2 = var_2 + 1;
      var_3 = var_3 + 1;
    } while (var_4 != var_2);
  }
  var_5 = *p;
  if (*p <= *q) {
    var_5 = *q;
  }
  if ((int)(var_5 << 1) <= (int)var_4) {
    var_5 = (int)var_4 / 2 + 1;
  }
  var_3 = (type_2 *)(*(type_4 *)PTR_safemalloc_000bc1b4)(var_5,4);
  var_6 = var_5 - *p;
  if (0 < var_6) {
    var_7 = var_3;
    do {
      *var_7 = 0;
      var_7 = var_7 + 1;
    } while (var_7 != var_3 + var_6);
  }
  var_2 = *p;
  if (0 < (int)var_2) {
    var_7 = var_3 + var_6;
    var_6 = 0;
    do {
      *var_7 = p[var_2 - var_6];
      var_6 = var_6 + 1;
      var_2 = *p;
      var_7 = var_7 + 1;
    } while (var_6 < (int)var_2);
  }
  var_7 = (type_2 *)(*(type_4 *)PTR_safemalloc_000bc1b4)(var_5,4);
  var_6 = var_5 - *q;
  if (0 < var_6) {
    var_8 = var_7;
    do {
      *var_8 = 0;
      var_8 = var_8 + 1;
    } while (var_8 != var_7 + var_6);
  }
  var_2 = *q;
  if (0 < (int)var_2) {
    var_8 = var_7 + var_6;
    var_6 = 0;
    do {
      *var_8 = q[var_2 - var_6];
      var_6 = var_6 + 1;
      var_2 = *q;
      var_8 = var_8 + 1;
    } while (var_6 < (int)var_2);
  }
  var_2 = var_5 * 2;
  var_8 = (type_2 *)(*(type_4 *)PTR_safemalloc_000bc1b4)(var_2,4);
  var_6 = var_9(var_5);
  scratch = (type_2 *)(*(type_4 *)PTR_safemalloc_000bc1b4)(var_6,4);
  var_12 = *m;
  var_11 = var_10(var_12);
  if (var_11 != 0) {
    var_12 = var_12 << (var_11 & 0x1f);
    if (1 < (int)var_4) {
      var_12 = var_12 | m[1] >> (-var_11 & 0x1f);
    }
  }
  var_12 = var_13(var_12);
  var_14(var_3,var_7,var_8,var_5,scratch);
  var_15(var_8,var_2,m,var_4,(type_2 *)0x0,var_12,var_11);
  var_12 = var_4;
  if ((int)var_2 <= (int)var_4) {
    var_12 = var_2;
  }
  var_18 = var_16(var_12);
  if (0 < (int)var_12) {
    var_17 = var_8 + (var_2 - var_12);
    var_2 = 0;
    do {
      var_18[*var_18 - var_2] = *var_17;
      var_2 = var_2 + 1;
      var_17 = var_17 + 1;
    } while (var_12 != var_2);
  }
  var_2 = *var_18;
  if (1 < var_2) {
    var_19 = var_18 + var_2;
    var_12 = *var_19;
    while (var_12 == 0) {
      var_2 = var_2 - 1;
      *var_18 = var_2;
      if (var_2 == 1) break;
      var_17 = var_19 + -1;
      var_19 = var_19 + -1;
      var_12 = *var_17;
    }
  }
  (*(type_4 *)PTR_smemclr_000bc1e4)(scratch,var_6 << 2);
  (*(type_4 *)PTR_safefree_000bc1a4)(scratch);
  (*(type_4 *)PTR_smemclr_000bc1e4)(var_8,var_5 << 3);
  (*(type_4 *)PTR_safefree_000bc1a4)(var_8);
  (*(type_4 *)PTR_smemclr_000bc1e4)(m,var_4 * 4);
  (*(type_4 *)PTR_safefree_000bc1a4)(m);
  (*(type_4 *)PTR_smemclr_000bc1e4)(var_3,var_5 << 2);
  (*(type_4 *)PTR_safefree_000bc1a4)(var_3);
  (*(type_4 *)PTR_smemclr_000bc1e4)(var_7,var_5 << 2);
  (*(type_4 *)PTR_safefree_000bc1a4)(var_7);
  return var_18;
}


(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (binary_expression left: (identifier) right: (number_literal)) (number_literal) (binary_expression left: (identifier) right: (number_literal))))))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (number_literal))))))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (number_literal) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (while_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) arguments: (argument_list (identifier)))) (return_statement (identifier)))))

uint * MASKED(uint *param_1,uint *param_2,int *param_3)

{
  uint *puVar1;
  uint *puVar2;
  undefined4 *puVar3;
  uint uVar4;
  undefined4 *puVar5;
  undefined4 *puVar6;
  int iVar7;
  undefined4 uVar8;
  undefined4 uVar9;
  uint *puVar10;
  int iVar11;
  int iVar12;
  uint *puVar13;
  uint uVar14;
  int iVar15;
  int iVar16;
  uint uVar17;
  
  iVar15 = *param_3;
  if (param_3[iVar15] == 0) {
    puVar2 = (uint *)(*(code *)PTR___assert_fail_000bcb00)
                               (PTR_s_Server_sent_command_exit_status___000bc188 + 0x4d34,
                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4cf0,0x4c1,
                                PTR_s_Server_sent_command_exit_status___000bc188 + 0x4ebc);
    return puVar2;
  }
  puVar2 = (uint *)(*(code *)PTR_safemalloc_000bc1b4)(iVar15,4);
  if (0 < iVar15) {
    iVar11 = 0;
    puVar10 = puVar2;
    do {
      *puVar10 = param_3[*param_3 - iVar11];
      iVar11 = iVar11 + 1;
      puVar10 = puVar10 + 1;
    } while (iVar15 != iVar11);
  }
  uVar14 = *param_1;
  if (*param_1 <= *param_2) {
    uVar14 = *param_2;
  }
  if ((int)(uVar14 << 1) <= iVar15) {
    uVar14 = iVar15 / 2 + 1;
  }
  puVar3 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);
  iVar11 = uVar14 - *param_1;
  if (0 < iVar11) {
    puVar5 = puVar3;
    do {
      *puVar5 = 0;
      puVar5 = puVar5 + 1;
    } while (puVar5 != puVar3 + iVar11);
  }
  uVar4 = *param_1;
  if (0 < (int)uVar4) {
    puVar10 = puVar3 + iVar11;
    iVar11 = 0;
    do {
      *puVar10 = param_1[uVar4 - iVar11];
      iVar11 = iVar11 + 1;
      uVar4 = *param_1;
      puVar10 = puVar10 + 1;
    } while (iVar11 < (int)uVar4);
  }
  puVar5 = (undefined4 *)(*(code *)PTR_safemalloc_000bc1b4)(uVar14,4);
  iVar11 = uVar14 - *param_2;
  if (0 < iVar11) {
    puVar6 = puVar5;
    do {
      *puVar6 = 0;
      puVar6 = puVar6 + 1;
    } while (puVar6 != puVar5 + iVar11);
  }
  uVar4 = *param_2;
  if (0 < (int)uVar4) {
    puVar10 = puVar5 + iVar11;
    iVar11 = 0;
    do {
      *puVar10 = param_2[uVar4 - iVar11];
      iVar11 = iVar11 + 1;
      uVar4 = *param_2;
      puVar10 = puVar10 + 1;
    } while (iVar11 < (int)uVar4);
  }
  iVar12 = uVar14 * 2;
  iVar11 = (*(code *)PTR_safemalloc_000bc1b4)(iVar12,4);
  iVar7 = FUN_0005c4cc(uVar14);
  uVar8 = (*(code *)PTR_safemalloc_000bc1b4)(iVar7,4);
  uVar17 = *puVar2;
  uVar4 = FUN_0005c510(uVar17);
  if (uVar4 != 0) {
    uVar17 = uVar17 << (uVar4 & 0x1f);
    if (1 < iVar15) {
      uVar17 = uVar17 | puVar2[1] >> (-uVar4 & 0x1f);
    }
  }
  uVar9 = FUN_0005c554(uVar17);
  FUN_0005c690(puVar3,puVar5,iVar11,uVar14,uVar8);
  FUN_0005d0a8(iVar11,iVar12,puVar2,iVar15,0,uVar9,uVar4);
  iVar16 = iVar15;
  if (iVar12 <= iVar15) {
    iVar16 = iVar12;
  }
  puVar10 = (uint *)FUN_0005d738(iVar16);
  if (0 < iVar16) {
    puVar13 = (uint *)(iVar11 + (iVar12 - iVar16) * 4);
    iVar12 = 0;
    do {
      puVar10[*puVar10 - iVar12] = *puVar13;
      iVar12 = iVar12 + 1;
      puVar13 = puVar13 + 1;
    } while (iVar16 != iVar12);
  }
  uVar4 = *puVar10;
  if (1 < uVar4) {
    puVar13 = puVar10 + uVar4;
    uVar17 = *puVar13;
    while (uVar17 == 0) {
      uVar4 = uVar4 - 1;
      *puVar10 = uVar4;
      if (uVar4 == 1) break;
      puVar1 = puVar13 + -1;
      puVar13 = puVar13 + -1;
      uVar17 = *puVar1;
    }
  }
  (*(code *)PTR_smemclr_000bc1e4)(uVar8,iVar7 << 2);
  (*(code *)PTR_safefree_000bc1a4)(uVar8);
  (*(code *)PTR_smemclr_000bc1e4)(iVar11,uVar14 << 3);
  (*(code *)PTR_safefree_000bc1a4)(iVar11);
  (*(code *)PTR_smemclr_000bc1e4)(puVar2,iVar15 * 4);
  (*(code *)PTR_safefree_000bc1a4)(puVar2);
  (*(code *)PTR_smemclr_000bc1e4)(puVar3,uVar14 << 2);
  (*(code *)PTR_safefree_000bc1a4)(puVar3);
  (*(code *)PTR_smemclr_000bc1e4)(puVar5,uVar14 << 2);
  (*(code *)PTR_safefree_000bc1a4)(puVar5);
  return puVar10;
}

