
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention */

Bignum_conflict modpow(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)

{
  int iVar1;
  BignumInt *__n;
  size_t n;
  BignumInt *b;
  BignumInt *a;
  longlong lVar2;
  uint uVar3;
  Bignum_conflict pBVar4;
  uint uVar5;
  Bignum_conflict modulus;
  Bignum_conflict b_00;
  Bignum_conflict b_01;
  BignumInt *n_00;
  BignumInt *pBVar6;
  BignumInt *pBVar7;
  BignumInt *pBVar8;
  BignumInt *pBVar9;
  BignumInt *a_00;
  BignumInt *pBVar10;
  BignumInt *pBVar11;
  uint *puVar12;
  int iVar13;
  BignumInt *pBVar14;
  uint uVar15;
  BignumInt BVar16;
  uint uVar17;
  int iVar18;
  int iVar19;
  BignumInt BVar20;
  BignumInt *pBVar21;
  BignumInt *pBVar22;
  uint uVar23;
  int iVar24;
  bool bVar25;
  int in_stack_ffffff40;
  BignumInt *in_stack_ffffff44;
  uint local_b8;
  BignumInt *local_b0;
  int local_94;
  BignumInt *local_88;
  BignumInt local_78;
  BignumInt *local_60;
  void *local_54;
  size_t local_20;
  
  uVar5 = *mod;
  if (mod[uVar5] == 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");
  }
  uVar3 = mod[1] & 1;
  if (uVar3 == 0) {
    pBVar4 = modpow_simple(base_in,exp,mod);
    return pBVar4;
  }
  if (0x3fffffe < uVar5) goto LAB_00064ab0;
  pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);
  memset(pBVar4,0,(uVar5 + 1) * 4);
  *pBVar4 = uVar5;
  bigdivmod(base_in,mod,pBVar4,(Bignum_conflict)0x0);
  uVar5 = *pBVar4;
  if (1 < uVar5) {
    BVar16 = pBVar4[uVar5];
    while (BVar16 == 0) {
      uVar5 = uVar5 - 1;
      *pBVar4 = uVar5;
      if (uVar5 == 1) break;
      BVar16 = pBVar4[uVar5];
    }
  }
  a = (BignumInt *)*mod;
  if ((int)a * 0x20 < 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");
  }
  uVar5 = (int)a + 1;
  if (0x3fffffe < uVar5) goto LAB_00064ab0;
  modulus = (Bignum_conflict)safemalloc((int)a + 2U,4);
  memset(modulus,0,((int)a + 2U) * 4);
  *modulus = uVar5;
  if ((int)(uVar5 * 0x20) <= (int)a * 0x20) {
                    /* WARNING: Subroutine does not return */
    abort();
  }
  modulus[(int)a + 1] = modulus[(int)a + 1] | 1;
  b_00 = modinv(mod,modulus);
  if (b_00 == (Bignum_conflict)0x0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("inv","sshbn.c",0x443,"modpow");
  }
  b_01 = modmul(pBVar4,modulus,mod);
  smemclr(pBVar4,*pBVar4 * 4 + 4);
  safefree(pBVar4);
  uVar5 = *mod;
  if (0x3fffffe < uVar5) goto LAB_00064ab0;
  pBVar22 = (BignumInt *)((uVar5 + 1) * 4);
  pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);
  memset(pBVar4,0,(size_t)pBVar22);
  *pBVar4 = uVar5;
  bigdivmod(modulus,mod,pBVar4,(Bignum_conflict)0x0);
  uVar5 = *pBVar4;
  if (1 < uVar5) {
    do {
      if (pBVar4[uVar5] != 0) break;
      uVar5 = uVar5 - 1;
      *pBVar4 = uVar5;
    } while (uVar5 != 1);
  }
  smemclr(modulus,*modulus * 4 + 4);
  safefree(modulus);
  n_00 = (BignumInt *)safemalloc((size_t)a,4);
  iVar1 = (int)a + -1;
  pBVar7 = n_00 + iVar1;
  pBVar6 = mod;
  iVar13 = iVar1;
  uVar5 = uVar3;
  if ((int)a < 1) {
    local_60 = (BignumInt *)safemalloc((size_t)a,4);
    smemclr(b_00,*b_00 * 4 + 4);
    safefree(b_00);
    local_54 = safemalloc((size_t)a,4);
    if (-1 < iVar1) goto LAB_000640c0;
    BVar16 = *b_01;
  }
  else {
    do {
      pBVar6 = pBVar6 + 1;
      *pBVar7 = *pBVar6;
      bVar25 = n_00 != pBVar7;
      pBVar7 = pBVar7 + -1;
    } while (bVar25);
    local_60 = (BignumInt *)safemalloc((size_t)a,4);
    pBVar6 = (BignumInt *)0x0;
    pBVar22 = local_60 + iVar1;
    do {
      while ((int)*b_00 <= (int)pBVar6) {
        *pBVar22 = 0;
        pBVar6 = (BignumInt *)((int)pBVar6 + 1);
        pBVar22 = pBVar22 + -1;
        if (a == pBVar6) goto LAB_0006405b;
      }
      iVar18 = (int)pBVar6 + 1;
      pBVar6 = (BignumInt *)((int)pBVar6 + 1);
      *pBVar22 = b_00[iVar18];
      pBVar22 = pBVar22 + -1;
    } while (pBVar6 != a);
LAB_0006405b:
    smemclr(b_00,*b_00 * 4 + 4);
    safefree(b_00);
    local_54 = safemalloc((size_t)a,4);
    pBVar22 = (BignumInt *)((int)a * 4);
    memset(local_54,0,(size_t)pBVar22);
LAB_000640c0:
    do {
      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);
      uVar23 = uVar5 + uVar15;
      uVar17 = local_60[iVar13];
      local_60[iVar13] = ~uVar17 + uVar23;
      iVar13 = iVar13 + -1;
      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);
    } while (iVar13 != -1);
    BVar16 = *b_01;
    if (0 < (int)a) {
      pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);
      pBVar7 = (BignumInt *)0x0;
      if ((int)BVar16 < 1) goto LAB_0006412f;
LAB_00064118:
      *pBVar6 = b_01[(int)pBVar7 + 1];
joined_r0x00064127:
      pBVar7 = (BignumInt *)((int)pBVar7 + 1);
      if (pBVar7 == a) {
        smemclr(b_01,*b_01 * 4 + 4);
        safefree(b_01);
        local_88 = (BignumInt *)safemalloc((int)a * 2,4);
        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);
        pBVar6 = local_88 + (int)a * 2 + -1;
        pBVar7 = (BignumInt *)0x0;
        do {
          if ((int)pBVar7 < (int)*pBVar4) {
            *pBVar6 = pBVar4[(int)pBVar7 + 1];
          }
          else {
            *pBVar6 = 0;
          }
          pBVar6 = pBVar6 + -1;
          pBVar7 = (BignumInt *)((int)pBVar7 + 1);
        } while (a != pBVar7);
        smemclr(pBVar4,*pBVar4 * 4 + 4);
        safefree(pBVar4);
        local_20 = (int)a * 3;
        if (0x32 < (int)a) {
          iVar13 = 0;
          pBVar6 = a;
          do {
            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));
            iVar13 = iVar13 + (int)pBVar6 * 4;
          } while (0x32 < (int)pBVar6);
          local_20 = local_20 + iVar13;
        }
        goto LAB_0006421b;
      }
      pBVar6 = pBVar6 + -1;
      if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;
      goto LAB_00064118;
    }
  }
  smemclr(b_01,BVar16 * 4 + 4);
  safefree(b_01);
  local_88 = (BignumInt *)safemalloc((int)a * 2,4);
  pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);
  smemclr(pBVar4,*pBVar4 * 4 + 4);
  safefree(pBVar4);
  local_20 = (int)a * 3;
LAB_0006421b:
  pBVar6 = (BignumInt *)safemalloc(local_20,4);
  BVar16 = *exp;
  local_78 = 0;
  puVar12 = exp + BVar16;
  if (0 < (int)BVar16) {
    do {
      local_94 = 0x1f;
      do {
        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {
          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;
          iVar24 = (int)a * 2 + -1;
          __n = (BignumInt *)((int)a * 4);
          pBVar7 = pBVar6 + (int)a * 3;
          pBVar9 = pBVar6 + (int)a;
          iVar18 = (int)a >> 1;
          b = pBVar7 + (int)a * 2;
          a_00 = (BignumInt *)((int)a - iVar18);
          iVar13 = (int)a_00 + iVar18 * 2;
          pBVar21 = pBVar8;
          goto LAB_00064370;
        }
        local_94 = local_94 + -1;
      } while (local_94 != -1);
      local_78 = local_78 + 1;
      puVar12 = puVar12 + -1;
    } while (BVar16 != local_78);
  }
  goto LAB_000645c6;
LAB_0006412f:
  *pBVar6 = 0;
  goto joined_r0x00064127;
  while( true ) {
    local_78 = local_78 + 1;
    local_94 = 0x1f;
    if ((int)*exp <= (int)local_78) break;
LAB_00064370:
    do {
      internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);
      pBVar8 = pBVar21 + (int)a;
      if ((int)a < 0x33) {
        if (0 < (int)a) {
          pBVar22 = __n;
          memset(pBVar6,0,(size_t)__n);
        }
        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);
        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {
          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);
          pBVar11 = pBVar9;
          if (pBVar10 < pBVar6) {
            pBVar10 = pBVar6;
          }
          do {
            local_b0 = local_b0 + -1;
            local_b8 = 0;
            pBVar14 = pBVar11;
            puVar12 = local_60 + -1 + (int)a;
            do {
              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +
                      (ulonglong)local_b8;
              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);
              pBVar14[-1] = (BignumInt)lVar2;
              puVar12 = puVar12 + -1;
              pBVar14 = pBVar14 + -1;
            } while (pBVar6 < pBVar14);
            pBVar11 = pBVar11 + -1;
          } while (pBVar10 < pBVar11);
        }
        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);
        if (iVar24 < 0) {
          uVar5 = 0;
        }
        else {
LAB_00064484:
          uVar5 = 0;
          iVar19 = iVar24;
          do {
            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];
            BVar16 = uVar15 + uVar5;
            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);
            pBVar21[iVar19] = BVar16;
            iVar19 = iVar19 + -1;
          } while (iVar19 != -1);
        }
        if (0 < (int)a) goto LAB_000644bf;
LAB_00064525:
        iVar19 = iVar1;
        uVar5 = uVar3;
        if (-1 < iVar1) {
          do {
            uVar15 = pBVar8[iVar19];
            uVar23 = uVar5 + uVar15;
            uVar17 = n_00[iVar19];
            pBVar8[iVar19] = ~uVar17 + uVar23;
            iVar19 = iVar19 + -1;
            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);
          } while (iVar19 != -1);
        }
      }
      else {
        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);
        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);
        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);
        pBVar11 = pBVar7 + iVar13;
        pBVar10 = pBVar6 + iVar18;
        if (0 < (int)a_00) {
          do {
            pBVar14 = pBVar11 + 1;
            *pBVar10 = *pBVar11;
            pBVar11 = pBVar14;
            pBVar10 = pBVar10 + 1;
          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);
        }
        uVar5 = 0;
        iVar19 = iVar18 + -1;
        do {
          uVar15 = (pBVar7 + iVar18)[iVar19];
          uVar17 = uVar15 + pBVar7[iVar19];
          BVar16 = uVar17 + uVar5;
          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);
          pBVar7[iVar19] = BVar16;
          iVar19 = iVar19 + -1;
        } while (iVar19 != -1);
        uVar5 = 0;
        iVar19 = iVar18 + -1;
        do {
          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];
          BVar16 = uVar15 + uVar5;
          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +
                  (uint)CARRY4(uVar15,uVar5);
          pBVar6[iVar19] = BVar16;
          iVar19 = iVar19 + -1;
        } while (iVar19 != -1);
        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);
        if (-1 < iVar24) goto LAB_00064484;
        uVar5 = 0;
LAB_000644bf:
        iVar19 = 0;
        do {
          pBVar8[iVar19] = pBVar21[iVar19];
          pBVar21[iVar19] = 0;
          iVar19 = iVar19 + 1;
        } while (iVar19 < (int)a);
        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;
        BVar16 = *pBVar8;
        BVar20 = *n_00;
        pBVar11 = (BignumInt *)0x0;
        if (BVar20 == BVar16) {
          do {
            pBVar11 = (BignumInt *)((int)pBVar11 + 1);
            if (a == pBVar11) goto LAB_00064525;
            BVar16 = pBVar8[(int)pBVar11];
            BVar20 = n_00[(int)pBVar11];
          } while (BVar16 == BVar20);
        }
        if (BVar20 < BVar16) goto LAB_00064525;
      }
      pBVar8 = local_88;
      if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {
        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);
        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);
        pBVar8 = pBVar21;
        pBVar21 = local_88;
      }
      local_88 = pBVar21;
      local_94 = local_94 + -1;
      pBVar21 = pBVar8;
    } while (local_94 != -1);
  }
LAB_000645c6:
  monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);
  uVar5 = *mod;
  if (uVar5 < 0x3ffffff) {
    puVar12 = (uint *)safemalloc(uVar5 + 1,4);
    memset(puVar12,0,(uVar5 + 1) * 4);
    *puVar12 = uVar5;
    if (0 < (int)a) {
      puVar12[uVar5] = local_88[(int)a];
      pBVar22 = (BignumInt *)0x1;
      if (a != (BignumInt *)0x1) {
        do {
          iVar1 = (int)a + (int)pBVar22;
          iVar13 = *puVar12 - (int)pBVar22;
          pBVar22 = (BignumInt *)((int)pBVar22 + 1);
          puVar12[iVar13] = local_88[iVar1];
        } while (a != pBVar22);
      }
      uVar5 = *puVar12;
    }
    if (1 < uVar5) {
      uVar3 = puVar12[uVar5];
      while (uVar3 == 0) {
        uVar5 = uVar5 - 1;
        *puVar12 = uVar5;
        if (uVar5 == 1) break;
        uVar3 = puVar12[uVar5];
      }
    }
    smemclr(pBVar6,local_20 << 2);
    safefree(pBVar6);
    smemclr(local_88,(int)a * 8);
    safefree(local_88);
    smemclr(pBVar8,(int)a * 8);
    safefree(pBVar8);
    n = (int)a * 4;
    smemclr(local_60,n);
    safefree(local_60);
    smemclr(n_00,n);
    safefree(n_00);
    smemclr(local_54,n);
    safefree(local_54);
    return puVar12;
  }
LAB_00064ab0:
                    /* WARNING: Subroutine does not return */
  newbn((int)in_stack_ffffff44);
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

uint * FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)

{
  int iVar1;
  void *pvVar2;
  size_t __n;
  void *pvVar3;
  longlong lVar4;
  uint uVar5;
  uint *puVar6;
  uint uVar7;
  uint *puVar8;
  int *piVar9;
  int *piVar10;
  uint *puVar11;
  uint *puVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  void *__s;
  void *pvVar16;
  int iVar17;
  void *pvVar18;
  undefined4 *puVar19;
  undefined4 *puVar20;
  int iVar21;
  void *pvVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  undefined4 *puVar26;
  void *pvVar27;
  int iVar28;
  int *piVar29;
  uint uVar30;
  int iVar31;
  bool bVar32;
  uint local_b8;
  uint *local_b0;
  int local_94;
  int local_88;
  int local_78;
  int local_60;
  void *local_54;
  int local_20;
  
  uVar7 = *param_3;
  if (param_3[uVar7] == 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");
  }
  uVar5 = param_3[1] & 1;
  if (uVar5 == 0) {
    puVar6 = (uint *)FUN_00060da0();
    return puVar6;
  }
  if (0x3fffffe < uVar7) goto LAB_00064ab0;
  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);
  memset(puVar6,0,(uVar7 + 1) * 4);
  *puVar6 = uVar7;
  FUN_00060250(0);
  uVar7 = *puVar6;
  if (1 < uVar7) {
    uVar15 = puVar6[uVar7];
    while (uVar15 == 0) {
      uVar7 = uVar7 - 1;
      *puVar6 = uVar7;
      if (uVar7 == 1) break;
      uVar15 = puVar6[uVar7];
    }
  }
  uVar7 = *param_3;
  if ((int)(uVar7 * 0x20) < 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");
  }
  uVar15 = uVar7 + 1;
  if (0x3fffffe < uVar15) goto LAB_00064ab0;
  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);
  memset(puVar8,0,(uVar7 + 2) * 4);
  *puVar8 = uVar15;
  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {
                    /* WARNING: Subroutine does not return */
    abort();
  }
  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;
  piVar9 = (int *)FUN_00063860(param_3,puVar8);
  if (piVar9 == (int *)0x0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("inv","sshbn.c",0x443,"modpow");
  }
  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);
  FUN_00032c20(puVar6,*puVar6 * 4 + 4);
  FUN_00032b40(puVar6);
  uVar15 = *param_3;
  if (0x3fffffe < uVar15) goto LAB_00064ab0;
  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);
  memset(puVar6,0,(uVar15 + 1) * 4);
  *puVar6 = uVar15;
  FUN_00060250(0);
  uVar15 = *puVar6;
  if (1 < uVar15) {
    do {
      if (puVar6[uVar15] != 0) break;
      uVar15 = uVar15 - 1;
      *puVar6 = uVar15;
    } while (uVar15 != 1);
  }
  FUN_00032c20(puVar8,*puVar8 * 4 + 4);
  FUN_00032b40(puVar8);
  puVar11 = (uint *)FUN_000329a0(uVar7,4);
  iVar1 = uVar7 - 1;
  puVar12 = puVar11 + iVar1;
  puVar8 = param_3;
  iVar21 = iVar1;
  uVar15 = uVar5;
  if ((int)uVar7 < 1) {
    local_60 = FUN_000329a0(uVar7,4);
    FUN_00032c20(piVar9,*piVar9 * 4 + 4);
    FUN_00032b40(piVar9);
    local_54 = (void *)FUN_000329a0(uVar7,4);
    if (-1 < iVar1) goto LAB_000640c0;
    iVar21 = *piVar10;
  }
  else {
    do {
      puVar8 = puVar8 + 1;
      *puVar12 = *puVar8;
      bVar32 = puVar11 != puVar12;
      puVar12 = puVar12 + -1;
    } while (bVar32);
    local_60 = FUN_000329a0(uVar7,4);
    uVar13 = 0;
    piVar29 = (int *)(iVar1 * 4 + local_60);
    do {
      while (*piVar9 <= (int)uVar13) {
        *piVar29 = 0;
        uVar13 = uVar13 + 1;
        piVar29 = piVar29 + -1;
        if (uVar7 == uVar13) goto LAB_0006405b;
      }
      iVar24 = uVar13 + 1;
      uVar13 = uVar13 + 1;
      *piVar29 = piVar9[iVar24];
      piVar29 = piVar29 + -1;
    } while (uVar13 != uVar7);
LAB_0006405b:
    FUN_00032c20(piVar9,*piVar9 * 4 + 4);
    FUN_00032b40(piVar9);
    local_54 = (void *)FUN_000329a0(uVar7,4);
    memset(local_54,0,uVar7 * 4);
LAB_000640c0:
    do {
      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);
      uVar30 = uVar15 + uVar13;
      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);
      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;
      iVar21 = iVar21 + -1;
      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);
    } while (iVar21 != -1);
    iVar21 = *piVar10;
    if (0 < (int)uVar7) {
      piVar9 = (int *)((int)local_54 + iVar1 * 4);
      uVar15 = 0;
      if (iVar21 < 1) goto LAB_0006412f;
LAB_00064118:
      *piVar9 = piVar10[uVar15 + 1];
joined_r0x00064127:
      uVar15 = uVar15 + 1;
      if (uVar15 == uVar7) {
        FUN_00032c20(piVar10,*piVar10 * 4 + 4);
        FUN_00032b40(piVar10);
        local_88 = FUN_000329a0(uVar7 * 2,4);
        iVar21 = FUN_000329a0(uVar7 * 2,4);
        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);
        uVar15 = 0;
        do {
          if ((int)uVar15 < (int)*puVar6) {
            *puVar8 = puVar6[uVar15 + 1];
          }
          else {
            *puVar8 = 0;
          }
          puVar8 = puVar8 + -1;
          uVar15 = uVar15 + 1;
        } while (uVar7 != uVar15);
        FUN_00032c20(puVar6,*puVar6 * 4 + 4);
        FUN_00032b40(puVar6);
        local_20 = uVar7 * 3;
        if (0x32 < (int)uVar7) {
          iVar24 = 0;
          uVar15 = uVar7;
          do {
            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;
            iVar24 = iVar24 + uVar15 * 4;
          } while (0x32 < (int)uVar15);
          local_20 = local_20 + iVar24;
        }
        goto LAB_0006421b;
      }
      piVar9 = piVar9 + -1;
      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;
      goto LAB_00064118;
    }
  }
  FUN_00032c20(piVar10,iVar21 * 4 + 4);
  FUN_00032b40(piVar10);
  local_88 = FUN_000329a0(uVar7 * 2,4);
  iVar21 = FUN_000329a0(uVar7 * 2,4);
  FUN_00032c20(puVar6,*puVar6 * 4 + 4);
  FUN_00032b40(puVar6);
  local_20 = uVar7 * 3;
LAB_0006421b:
  __s = (void *)FUN_000329a0(local_20,4);
  iVar24 = *param_2;
  local_78 = 0;
  puVar6 = (uint *)(param_2 + iVar24);
  if (0 < iVar24) {
    do {
      local_94 = 0x1f;
      do {
        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {
          if (iVar24 <= local_78) goto LAB_000645c6;
          iVar31 = uVar7 * 2 + -1;
          __n = uVar7 * 4;
          pvVar2 = (void *)((int)__s + uVar7 * 0xc);
          pvVar16 = (void *)((int)__s + __n);
          iVar25 = (int)uVar7 >> 1;
          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);
          iVar17 = uVar7 - iVar25;
          iVar24 = iVar17 + iVar25 * 2;
          iVar28 = iVar21;
          goto LAB_00064370;
        }
        local_94 = local_94 + -1;
      } while (local_94 != -1);
      local_78 = local_78 + 1;
      puVar6 = puVar6 + -1;
    } while (iVar24 != local_78);
  }
  goto LAB_000645c6;
LAB_0006412f:
  *piVar9 = 0;
  goto joined_r0x00064127;
  while( true ) {
    local_78 = local_78 + 1;
    local_94 = 0x1f;
    if (*param_2 <= local_78) break;
LAB_00064370:
    do {
      FUN_0005f530(uVar7,__s);
      puVar6 = (uint *)(iVar28 + __n);
      if ((int)uVar7 < 0x33) {
        if (0 < (int)uVar7) {
          memset(__s,0,__n);
        }
        local_b0 = puVar6 + uVar7;
        if ((puVar6 < local_b0) && (__s < pvVar16)) {
          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);
          pvVar27 = pvVar16;
          if (pvVar18 < __s) {
            pvVar18 = __s;
          }
          do {
            local_b0 = local_b0 + -1;
            local_b8 = 0;
            pvVar22 = pvVar27;
            puVar8 = (uint *)(local_60 + -4 + __n);
            do {
              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +
                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;
              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);
              *(int *)((int)pvVar22 + -4) = (int)lVar4;
              puVar8 = puVar8 + -1;
              pvVar22 = (void *)((int)pvVar22 + -4);
            } while (__s < pvVar22);
            pvVar27 = (void *)((int)pvVar27 + -4);
          } while (pvVar18 < pvVar27);
        }
        FUN_0005f530(uVar7,pvVar2);
        if (iVar31 < 0) {
          uVar15 = 0;
        }
        else {
LAB_00064484:
          uVar15 = 0;
          iVar21 = iVar31;
          do {
            uVar13 = *(uint *)(iVar28 + iVar21 * 4);
            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);
            uVar30 = uVar14 + uVar13;
            iVar23 = uVar30 + uVar15;
            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);
            *(int *)(iVar28 + iVar21 * 4) = iVar23;
            iVar21 = iVar21 + -1;
          } while (iVar21 != -1);
        }
        if (0 < (int)uVar7) goto LAB_000644bf;
LAB_00064525:
        iVar21 = iVar1;
        uVar15 = uVar5;
        if (-1 < iVar1) {
          do {
            uVar13 = puVar6[iVar21];
            uVar30 = uVar15 + uVar13;
            uVar14 = puVar11[iVar21];
            puVar6[iVar21] = ~uVar14 + uVar30;
            iVar21 = iVar21 + -1;
            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);
          } while (iVar21 != -1);
        }
      }
      else {
        FUN_0005f530(iVar17,pvVar3);
        FUN_0005f970(iVar25,pvVar3);
        FUN_0005f970(iVar25,pvVar3);
        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);
        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);
        if (0 < iVar17) {
          do {
            puVar20 = puVar19 + 1;
            *puVar26 = *puVar19;
            puVar19 = puVar20;
            puVar26 = puVar26 + 1;
          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);
        }
        uVar15 = 0;
        iVar21 = iVar25 + -1;
        do {
          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);
          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);
          uVar30 = uVar14 + uVar13;
          iVar23 = uVar30 + uVar15;
          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);
          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;
          iVar21 = iVar21 + -1;
        } while (iVar21 != -1);
        uVar15 = 0;
        iVar21 = iVar25 + -1;
        do {
          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);
          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);
          uVar30 = uVar14 + uVar13;
          iVar23 = uVar30 + uVar15;
          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);
          *(int *)((int)__s + iVar21 * 4) = iVar23;
          iVar21 = iVar21 + -1;
        } while (iVar21 != -1);
        FUN_0005f530(uVar7,pvVar2);
        if (-1 < iVar31) goto LAB_00064484;
        uVar15 = 0;
LAB_000644bf:
        iVar21 = 0;
        do {
          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);
          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;
          iVar21 = iVar21 + 1;
        } while (iVar21 < (int)uVar7);
        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;
        uVar15 = *puVar6;
        uVar13 = *puVar11;
        uVar14 = 0;
        if (uVar13 == uVar15) {
          do {
            uVar14 = uVar14 + 1;
            if (uVar7 == uVar14) goto LAB_00064525;
            uVar15 = puVar6[uVar14];
            uVar13 = puVar11[uVar14];
          } while (uVar15 == uVar13);
        }
        if (uVar13 < uVar15) goto LAB_00064525;
      }
      iVar21 = local_88;
      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {
        FUN_0005f530(uVar7,__s);
        FUN_0005fba0(__s,uVar7);
        iVar21 = iVar28;
        iVar28 = local_88;
      }
      local_88 = iVar28;
      local_94 = local_94 + -1;
      iVar28 = iVar21;
    } while (local_94 != -1);
  }
LAB_000645c6:
  FUN_0005fba0(__s,uVar7);
  uVar5 = *param_3;
  if (uVar5 < 0x3ffffff) {
    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);
    memset(puVar6,0,(uVar5 + 1) * 4);
    *puVar6 = uVar5;
    if (0 < (int)uVar7) {
      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);
      uVar5 = 1;
      if (uVar7 != 1) {
        do {
          iVar1 = uVar5 * 4;
          iVar24 = *puVar6 - uVar5;
          uVar5 = uVar5 + 1;
          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);
        } while (uVar7 != uVar5);
      }
      uVar5 = *puVar6;
    }
    if (1 < uVar5) {
      uVar15 = puVar6[uVar5];
      while (uVar15 == 0) {
        uVar5 = uVar5 - 1;
        *puVar6 = uVar5;
        if (uVar5 == 1) break;
        uVar15 = puVar6[uVar5];
      }
    }
    FUN_00032c20(__s,local_20 << 2);
    FUN_00032b40(__s);
    FUN_00032c20(local_88,uVar7 * 8);
    FUN_00032b40(local_88);
    FUN_00032c20(iVar21,uVar7 * 8);
    FUN_00032b40(iVar21);
    iVar1 = uVar7 * 4;
    FUN_00032c20(local_60,iVar1);
    FUN_00032b40(local_60);
    FUN_00032c20(puVar11,iVar1);
    FUN_00032b40(puVar11);
    FUN_00032c20(local_54,iVar1);
    FUN_00032b40(local_54);
    return puVar6;
  }
LAB_00064ab0:
                    /* WARNING: Subroutine does not return */
  FUN_0005f500();
}


CALL 0x0001cb7e
ADD EAX,0xd69cb
PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0xac
MOV dword ptr [ESP + 0x50],EAX
MOV EAX,dword ptr [ESP + 0xc4]
MOV EDI,dword ptr [ESP + 0xc0]
MOV dword ptr [ESP + 0x48],EAX
MOV EAX,dword ptr [ESP + 0xc8]
MOV EBP,dword ptr [EAX]
MOV dword ptr [ESP + 0x74],EAX
MOV EBX,dword ptr [EAX + EBP*0x4]
TEST EBX,EBX
JZ 0x00064a6d
MOV EAX,dword ptr [EAX + 0x4]
MOV dword ptr [ESP + 0x4],EAX
AND EAX,0x1
MOV dword ptr [ESP + 0x54],EAX
JZ 0x0006474b
CMP EBP,0x3fffffe
JA 0x00064ab0
SUB ESP,0x8
LEA EDX,[EBP + 0x1]
PUSH 0x4
PUSH EDX
MOV EBX,dword ptr [ESP + 0x60]
MOV dword ptr [ESP + 0x14],EDX
CALL 0x000329a0
MOV EDX,dword ptr [ESP + 0x14]
ADD ESP,0xc
MOV ESI,EAX
SHL EDX,0x2
PUSH EDX
PUSH 0x0
PUSH EAX
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x0001bad0
MOV dword ptr [ESI],EBP
MOV EDX,dword ptr [ESP + 0x84]
MOV EAX,EDI
MOV ECX,ESI
MOV dword ptr [ESP],0x0
CALL 0x00060250
MOV EAX,dword ptr [ESI]
ADD ESP,0x10
CMP EAX,0x1
JBE 0x00063e52
MOV ECX,dword ptr [ESI + EAX*0x4]
TEST ECX,ECX
JNZ 0x00063e52
SUB EAX,0x1
JMP 0x00063e4b
SUB EAX,0x1
MOV EDX,dword ptr [ESI + EAX*0x4 + 0x4]
TEST EDX,EDX
JNZ 0x00063e52
MOV dword ptr [ESI],EAX
CMP EAX,0x1
JNZ 0x00063e40
MOV EAX,dword ptr [ESP + 0x74]
MOV EAX,dword ptr [EAX]
MOV EDI,EAX
MOV dword ptr [ESP + 0x18],EAX
SHL EDI,0x5
JS 0x00064a90
LEA EDX,[EAX + 0x1]
CMP EDX,0x3fffffe
MOV dword ptr [ESP + 0x8],EDX
JA 0x00064ab0
SUB ESP,0x8
LEA EBP,[EAX + 0x2]
PUSH 0x4
PUSH EBP
MOV EBX,dword ptr [ESP + 0x60]
SHL EBP,0x2
CALL 0x000329a0
ADD ESP,0xc
PUSH EBP
PUSH 0x0
MOV dword ptr [ESP + 0x10],EAX
PUSH EAX
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x0001bad0
MOV EDX,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [ESP + 0x14]
ADD ESP,0x10
MOV dword ptr [EAX],EDX
SHL EDX,0x5
CMP EDI,EDX
JGE 0x0001c183
MOV EAX,dword ptr [ESP + 0x4]
SUB ESP,0x8
OR dword ptr [EAX + EBP*0x1 + -0x4],0x1
PUSH EAX
PUSH dword ptr [ESP + 0x80]
CALL 0x00063860
ADD ESP,0x10
MOV EDI,EAX
TEST EAX,EAX
JZ 0x00064a4a
SUB ESP,0x4
PUSH dword ptr [ESP + 0x78]
PUSH dword ptr [ESP + 0xc]
PUSH ESI
CALL 0x00061810
MOV dword ptr [ESP + 0x18],EAX
POP EBP
POP EAX
MOV EAX,dword ptr [ESI]
LEA EAX,[EAX*0x4 + 0x4]
PUSH EAX
PUSH ESI
MOV EBP,dword ptr [ESP + 0x60]
MOV EBX,EBP
CALL 0x00032c20
MOV dword ptr [ESP],ESI
CALL 0x00032b40
MOV EBX,dword ptr [ESP + 0x84]
ADD ESP,0x10
MOV EDX,dword ptr [EBX]
CMP EDX,0x3fffffe
JA 0x00064ab0
MOV dword ptr [ESP + 0xc],EDX
LEA ESI,[EDX + 0x1]
SUB ESP,0x8
MOV EBX,EBP
PUSH 0x4
PUSH ESI
SHL ESI,0x2
MOV dword ptr [ESP + 0x60],EBP
CALL 0x000329a0
ADD ESP,0xc
PUSH ESI
MOV EBP,EAX
PUSH 0x0
PUSH EAX
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x0001bad0
MOV EDX,dword ptr [ESP + 0x1c]
MOV EAX,dword ptr [ESP + 0x14]
MOV ECX,EBP
MOV dword ptr [EBP],EDX
MOV EDX,dword ptr [ESP + 0x84]
MOV dword ptr [ESP],0x0
CALL 0x00060250
MOV EAX,dword ptr [EBP]
ADD ESP,0x10
CMP EAX,0x1
JA 0x00063f9b
JMP 0x00063fa3
SUB EAX,0x1
MOV dword ptr [EBP],EAX
CMP EAX,0x1
JZ 0x00063fa3
MOV EDX,dword ptr [EBP + EAX*0x4]
TEST EDX,EDX
JZ 0x00063f90
SUB ESP,0x8
MOV ESI,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [ESI]
LEA EAX,[EAX*0x4 + 0x4]
PUSH EAX
PUSH ESI
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x00032c20
MOV EBX,dword ptr [ESP + 0x60]
MOV dword ptr [ESP],ESI
CALL 0x00032b40
POP ECX
POP EBX
PUSH 0x4
MOV ESI,dword ptr [ESP + 0x24]
PUSH ESI
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x000329a0
MOV EBX,ESI
LEA ESI,[ESI + -0x1]
MOV dword ptr [ESP + 0x48],EAX
MOV dword ptr [ESP + 0x68],ESI
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x74]
SHL ESI,0x2
ADD EAX,ESI
ADD EDX,0x4
TEST EBX,EBX
JLE 0x00064970
MOV EBX,dword ptr [ESP + 0x38]
JMP 0x00064012
MOV EAX,ECX
MOV ECX,dword ptr [EDX]
ADD EDX,0x4
MOV dword ptr [EAX],ECX
LEA ECX,[EAX + -0x4]
CMP EBX,EAX
JNZ 0x00064010
SUB ESP,0x8
PUSH 0x4
PUSH dword ptr [ESP + 0x24]
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x000329a0
MOV dword ptr [ESP + 0x6c],EAX
ADD ESI,EAX
ADD ESP,0x10
XOR EAX,EAX
LEA ESI,[ESI]
CMP dword ptr [EDI],EAX
JLE 0x00064938
MOV EDX,dword ptr [EDI + EAX*0x4 + 0x4]
SUB ESI,0x4
ADD EAX,0x1
MOV dword ptr [ESI + 0x4],EDX
CMP EAX,dword ptr [ESP + 0x18]
JNZ 0x00064040
MOV EAX,dword ptr [EDI]
SUB ESP,0x8
LEA EAX,[EAX*0x4 + 0x4]
PUSH EAX
PUSH EDI
MOV ESI,dword ptr [ESP + 0x60]
MOV EBX,ESI
CALL 0x00032c20
MOV dword ptr [ESP],EDI
MOV EDI,ESI
CALL 0x00032b40
POP EAX
POP EDX
PUSH 0x4
MOV ESI,dword ptr [ESP + 0x24]
PUSH ESI
CALL 0x000329a0
MOV EBX,EAX
MOV dword ptr [ESP + 0x78],EAX
ADD ESP,0xc
LEA EAX,[ESI*0x4 + 0x0]
PUSH EAX
PUSH 0x0
PUSH EBX
MOV EBX,EDI
CALL 0x0001bad0
ADD ESP,0x10
MOV ESI,dword ptr [ESP + 0x54]
MOV ECX,dword ptr [ESP + 0x58]
MOV dword ptr [ESP + 0x4],EBP
MOV EBX,dword ptr [ESP + 0x5c]
MOV EBP,dword ptr [ESP + 0x68]
NOP
MOV EAX,dword ptr [EBP + ECX*0x4]
XOR EDX,EDX
XOR EDI,EDI
ADD ESI,EAX
MOV EAX,dword ptr [EBX + ECX*0x4]
ADC EDI,EDX
XOR EDX,EDX
NOT EAX
ADD EAX,ESI
ADC EDX,EDI
MOV dword ptr [EBX + ECX*0x4],EAX
SUB ECX,0x1
MOV ESI,EDX
CMP ECX,-0x1
JNZ 0x000640c0
MOV ESI,dword ptr [ESP + 0x18]
MOV EBX,dword ptr [ESP + 0x8]
MOV EBP,dword ptr [ESP + 0x4]
LEA EDI,[ESI + ESI*0x1]
MOV ECX,dword ptr [EBX]
MOV dword ptr [ESP + 0x4],EDI
TEST ESI,ESI
JLE 0x000649cf
MOV EAX,dword ptr [ESP + 0x68]
MOV EDX,dword ptr [ESP + 0x58]
LEA EDX,[EAX + EDX*0x4]
XOR EAX,EAX
CMP ECX,EAX
JLE 0x0006412f
LEA ESI,[ESI]
MOV ECX,dword ptr [EBX + EAX*0x4 + 0x4]
ADD EAX,0x1
SUB EDX,0x4
MOV dword ptr [EDX + 0x4],ECX
CMP EAX,ESI
JZ 0x0006413f
MOV ECX,dword ptr [EBX]
CMP ECX,EAX
JG 0x00064118
ADD EAX,0x1
MOV dword ptr [EDX],0x0
SUB EDX,0x4
CMP ESI,EAX
JNZ 0x00064129
SUB ESP,0x8
MOV EBX,dword ptr [ESP + 0x10]
MOV EAX,dword ptr [EBX]
LEA EAX,[EAX*0x4 + 0x4]
PUSH EAX
MOV dword ptr [ESP + 0x14],EBX
PUSH EBX
MOV ESI,dword ptr [ESP + 0x60]
MOV EBX,ESI
CALL 0x00032c20
POP ECX
PUSH dword ptr [ESP + 0x14]
CALL 0x00032b40
POP ESI
POP EAX
PUSH 0x4
PUSH dword ptr [ESP + 0x10]
CALL 0x000329a0
MOV dword ptr [ESP + 0x44],EAX
POP EAX
POP EDX
PUSH 0x4
PUSH dword ptr [ESP + 0x10]
CALL 0x000329a0
MOV EBX,dword ptr [ESP + 0x44]
MOV ESI,EAX
MOV EAX,dword ptr [ESP + 0x14]
ADD ESP,0x10
LEA EDX,[EBX + EAX*0x4 + -0x4]
XOR EAX,EAX
LEA ESI,[ESI]
NOP
CMP dword ptr [EBP],EAX
JLE 0x00064918
MOV ECX,dword ptr [EBP + EAX*0x4 + 0x4]
SUB EDX,0x4
ADD EAX,0x1
MOV dword ptr [EDX + 0x4],ECX
CMP dword ptr [ESP + 0x18],EAX
JNZ 0x000641a0
MOV EAX,dword ptr [EBP]
SUB ESP,0x8
LEA EAX,[EAX*0x4 + 0x4]
PUSH EAX
PUSH EBP
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x00032c20
MOV EBX,dword ptr [ESP + 0x60]
MOV dword ptr [ESP],EBP
CALL 0x00032b40
MOV EAX,dword ptr [ESP + 0x28]
LEA EBX,[EAX + EAX*0x2]
MOV dword ptr [ESP + 0xac],EBX
ADD ESP,0x10
CMP EAX,0x32
JLE 0x0006421b
XOR EDX,EDX
LEA ESI,[ESI]
NOP
MOV ECX,EAX
SAR ECX,0x1
SUB EAX,ECX
ADD EAX,0x1
LEA EDX,[EDX + EAX*0x4]
CMP EAX,0x32
JG 0x00064200
LEA EAX,[EBX + EDX*0x1]
MOV dword ptr [ESP + 0x9c],EAX
SUB ESP,0x8
PUSH 0x4
PUSH dword ptr [ESP + 0xa8]
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x000329a0
MOV EDX,0x1
MOV dword ptr [ESP + 0x18],EAX
MOV EAX,dword ptr [ESP + 0x58]
ADD ESP,0x10
MOV EBX,dword ptr [EAX]
MOV dword ptr [ESP + 0x44],0x0
LEA EBP,[EAX + EBX*0x4]
TEST EBX,EBX
JLE 0x000645c6
MOV dword ptr [ESP + 0x4],ESI
MOV EAX,dword ptr [EBP]
MOV ECX,0x1f
JMP 0x00064274
SUB ECX,0x1
CMP ECX,-0x1
JZ 0x00064953
MOV ESI,EDX
SHL ESI,CL
TEST ESI,EAX
JZ 0x00064268
MOV ESI,dword ptr [ESP + 0x4]
MOV dword ptr [ESP + 0x28],ECX
CMP EBX,dword ptr [ESP + 0x44]
JLE 0x000645c6
MOV EBX,dword ptr [ESP + 0x18]
MOV EDX,dword ptr [ESP + 0x8]
SUB EDI,0x1
MOV dword ptr [ESP + 0x40],EDI
LEA EAX,[EBX + EBX*0x2]
LEA ECX,[EBX*0x4 + 0x0]
LEA EBP,[EDX + EAX*0x4]
MOV EAX,EDX
MOV EDX,EBX
MOV dword ptr [ESP + 0x3c],ECX
ADD EAX,ECX
SAR EDX,0x1
MOV ECX,dword ptr [ESP + 0x5c]
MOV dword ptr [ESP + 0x20],EBP
MOV dword ptr [ESP + 0x14],EAX
MOV EAX,EBX
LEA EBX,[EBP + EBX*0x8]
MOV dword ptr [ESP + 0x7c],EBX
LEA EBX,[EBP + EDX*0x8]
SUB EAX,EDX
MOV dword ptr [ESP + 0x80],EBX
LEA EBX,[EDX*0x4 + 0x0]
MOV dword ptr [ESP + 0x6c],EBX
MOV EBX,dword ptr [ESP + 0x6c]
MOV dword ptr [ESP + 0x60],EDX
ADD EBX,ECX
MOV dword ptr [ESP + 0x78],EAX
MOV dword ptr [ESP + 0x84],EBX
MOV EBX,dword ptr [ESP + 0x6c]
ADD EBX,EBP
MOV dword ptr [ESP + 0x30],EBX
LEA EBX,[EAX*0x4 + 0x0]
MOV dword ptr [ESP + 0x70],EBX
MOV EBX,dword ptr [ESP + 0x70]
ADD EBX,ECX
MOV ECX,EDX
MOV dword ptr [ESP + 0x88],EBX
MOV EBX,EAX
LEA EAX,[EAX + EDX*0x2]
LEA EDX,[EDX + -0x1]
MOV dword ptr [ESP + 0x64],EDX
MOV EDX,EAX
LEA EDI,[EBP + EAX*0x4]
ADD EAX,EBX
SUB EDX,ECX
MOV EBX,dword ptr [ESP + 0x5c]
MOV ECX,dword ptr [ESP + 0x3c]
LEA EAX,[EBP + EAX*0x4]
SHL EDX,0x2
MOV dword ptr [ESP + 0x98],EAX
MOV EBP,ESI
MOV dword ptr [ESP + 0x8c],EDX
LEA EAX,[EBX + ECX*0x1 + -0x4]
MOV EDX,dword ptr [ESP + 0x8]
ADD EDX,dword ptr [ESP + 0x6c]
MOV dword ptr [ESP + 0x94],EDI
MOV dword ptr [ESP + 0x90],EDX
MOV dword ptr [ESP + 0x2c],EAX
MOV EBX,dword ptr [ESP + 0x3c]
MOV EAX,dword ptr [ESP + 0x34]
SUB ESP,0x8
MOV ECX,EBP
PUSH dword ptr [ESP + 0x10]
MOV EDI,dword ptr [ESP + 0x24]
ADD EAX,EBX
PUSH EDI
MOV EDX,EAX
CALL 0x0005f530
LEA EAX,[EBP + EBX*0x1]
MOV dword ptr [ESP + 0x2c],EAX
ADD ESP,0x10
CMP EDI,0x32
JG 0x000647b0
TEST EDI,EDI
JLE 0x000643c0
SUB ESP,0x4
PUSH dword ptr [ESP + 0x40]
PUSH 0x0
PUSH dword ptr [ESP + 0x14]
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x0001bad0
ADD ESP,0x10
MOV EDI,dword ptr [ESP + 0x1c]
MOV EAX,dword ptr [ESP + 0x3c]
ADD EAX,EDI
LEA EBX,[EAX + -0x4]
MOV dword ptr [ESP + 0xc],EBX
CMP EDI,EAX
JNC 0x00064459
MOV EDI,dword ptr [ESP + 0x8]
MOV EBX,dword ptr [ESP + 0x14]
CMP EDI,EBX
JNC 0x00064459
MOV ESI,dword ptr [ESP + 0x1c]
MOV dword ptr [ESP + 0x4c],EBP
SUB ESI,EAX
MOV EAX,ESI
ADD EAX,EBX
CMP EDI,EAX
CMOVA EAX,EDI
MOV dword ptr [ESP + 0x24],EAX
LEA ESI,[ESI]
MOV dword ptr [ESP + 0x4],0x0
MOV EBP,dword ptr [ESP + 0x2c]
MOV ECX,EBX
NOP
MOV EAX,dword ptr [EBP]
MOV EDI,dword ptr [ESP + 0xc]
MOV dword ptr [ESP + 0x10],EAX
MUL dword ptr [EDI]
MOV ESI,EAX
MOV EAX,dword ptr [ECX + -0x4]
MOV EDI,EDX
XOR EDX,EDX
ADD EAX,ESI
MOV ESI,dword ptr [ESP + 0x4]
ADC EDX,EDI
XOR EDI,EDI
ADD EAX,ESI
ADC EDX,EDI
MOV dword ptr [ECX + -0x4],EAX
SUB EBP,0x4
SUB ECX,0x4
MOV dword ptr [ESP + 0x4],EDX
CMP dword ptr [ESP + 0x8],ECX
JC 0x00064410
SUB dword ptr [ESP + 0xc],0x4
SUB EBX,0x4
CMP dword ptr [ESP + 0x24],EBX
JC 0x00064400
MOV EBP,dword ptr [ESP + 0x4c]
SUB ESP,0x8
PUSH dword ptr [ESP + 0x28]
PUSH dword ptr [ESP + 0x24]
MOV ECX,dword ptr [ESP + 0x24]
MOV EDX,dword ptr [ESP + 0x48]
MOV EAX,dword ptr [ESP + 0x18]
CALL 0x0005f530
ADD ESP,0x10
MOV ESI,dword ptr [ESP + 0x40]
TEST ESI,ESI
JS 0x00064900
MOV EDX,dword ptr [ESP + 0x40]
XOR EAX,EAX
LEA ESI,[ESI]
MOV EBX,dword ptr [ESP + 0x14]
MOV ESI,dword ptr [EBP + EDX*0x4]
XOR EDI,EDI
MOV ECX,dword ptr [EBX + EDX*0x4]
XOR EBX,EBX
ADD ECX,ESI
ADC EBX,EDI
XOR EDI,EDI
ADD ECX,EAX
ADC EBX,EDI
MOV dword ptr [EBP + EDX*0x4],ECX
SUB EDX,0x1
MOV EAX,EBX
CMP EDX,-0x1
JNZ 0x00064490
MOV ECX,dword ptr [ESP + 0x18]
TEST ECX,ECX
JLE 0x00064525
MOV EBX,dword ptr [ESP + 0x18]
MOV ESI,dword ptr [ESP + 0x1c]
XOR EDX,EDX
LEA ESI,[ESI]
MOV ECX,dword ptr [EBP + EDX*0x4]
MOV dword ptr [ESI + EDX*0x4],ECX
MOV dword ptr [EBP + EDX*0x4],0x0
ADD EDX,0x1
CMP EBX,EDX
JG 0x000644d0
TEST EAX,EAX
JNZ 0x00064525
MOV EBX,dword ptr [ESP + 0x18]
TEST EBX,EBX
JLE 0x00064525
MOV EDI,dword ptr [ESP + 0x1c]
MOV ESI,dword ptr [ESP + 0x38]
MOV ECX,dword ptr [EDI]
MOV EDX,dword ptr [ESI]
CMP EDX,ECX
JZ 0x0006451e
JMP 0x00064760
MOV ECX,dword ptr [EDI + EAX*0x4]
MOV EDX,dword ptr [ESI + EAX*0x4]
CMP ECX,EDX
JNZ 0x00064760
ADD EAX,0x1
CMP EBX,EAX
JNZ 0x00064510
MOV EAX,dword ptr [ESP + 0x58]
MOV ESI,dword ptr [ESP + 0x54]
MOV ECX,EAX
TEST EAX,EAX
JS 0x00064568
MOV dword ptr [ESP + 0x4],EBP
MOV EBX,dword ptr [ESP + 0x1c]
MOV EBP,dword ptr [ESP + 0x38]
NOP
MOV EAX,dword ptr [EBX + ECX*0x4]
XOR EDX,EDX
XOR EDI,EDI
ADD ESI,EAX
MOV EAX,dword ptr [EBP + ECX*0x4]
ADC EDI,EDX
XOR EDX,EDX
NOT EAX
ADD EAX,ESI
ADC EDX,EDI
MOV dword ptr [EBX + ECX*0x4],EAX
SUB ECX,0x1
MOV ESI,EDX
CMP ECX,-0x1
JNZ 0x00064540
MOV EBP,dword ptr [ESP + 0x4]
MOV EDI,dword ptr [ESP + 0x48]
MOVZX ECX,byte ptr [ESP + 0x28]
MOV EDX,0x1
MOV EAX,dword ptr [EDI]
SHL EDX,CL
MOV dword ptr [ESP + 0x4],EAX
SUB EAX,dword ptr [ESP + 0x44]
TEST dword ptr [EDI + EAX*0x4],EDX
JNZ 0x00064770
MOV EAX,dword ptr [ESP + 0x34]
MOV dword ptr [ESP + 0x34],EBP
MOV EBP,EAX
SUB dword ptr [ESP + 0x28],0x1
MOV EAX,dword ptr [ESP + 0x28]
CMP EAX,-0x1
JNZ 0x00064370
MOV EDI,dword ptr [ESP + 0x48]
ADD dword ptr [ESP + 0x44],0x1
MOV dword ptr [ESP + 0x28],0x1f
MOV EAX,dword ptr [ESP + 0x44]
CMP dword ptr [EDI],EAX
JG 0x00064370
MOV ESI,EBP
SUB ESP,0x8
PUSH dword ptr [ESP + 0x20]
PUSH dword ptr [ESP + 0x14]
MOV EAX,dword ptr [ESP + 0x44]
MOV ECX,dword ptr [ESP + 0x6c]
MOV EDX,dword ptr [ESP + 0x48]
CALL 0x0005fba0
MOV EAX,dword ptr [ESP + 0x84]
ADD ESP,0x10
MOV EBP,dword ptr [EAX]
CMP EBP,0x3fffffe
JA 0x00064ab0
SUB ESP,0x8
LEA EDI,[EBP + 0x1]
PUSH 0x4
PUSH EDI
MOV EBX,dword ptr [ESP + 0x60]
SHL EDI,0x2
CALL 0x000329a0
MOV dword ptr [ESP + 0x14],EAX
ADD ESP,0xc
PUSH EDI
MOV EDI,EAX
PUSH 0x0
PUSH EAX
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x0001bad0
ADD ESP,0x10
MOV EBX,EDI
MOV dword ptr [EDI],EBP
MOV EDI,dword ptr [ESP + 0x18]
TEST EDI,EDI
JLE 0x0006466f
MOV EDX,dword ptr [ESP + 0x34]
MOV EAX,dword ptr [EDX + EDI*0x4]
LEA ECX,[EDX + EDI*0x4]
MOV dword ptr [EBX + EBP*0x4],EAX
MOV EAX,0x1
MOV EBP,EDI
MOV EBX,dword ptr [ESP + 0x4]
CMP EDI,0x1
JZ 0x00064669
LEA ESI,[ESI]
MOV EDX,dword ptr [EBX]
MOV EDI,dword ptr [ECX + EAX*0x4]
SUB EDX,EAX
ADD EAX,0x1
MOV dword ptr [EBX + EDX*0x4],EDI
CMP EBP,EAX
JNZ 0x00064658
MOV EAX,dword ptr [ESP + 0x4]
MOV EBP,dword ptr [EAX]
CMP EBP,0x1
JBE 0x0006469a
MOV EAX,dword ptr [ESP + 0x4]
MOV EBX,dword ptr [EAX + EBP*0x4]
TEST EBX,EBX
JNZ 0x0006469a
SUB EBP,0x1
JMP 0x00064693
SUB EBP,0x1
MOV ECX,dword ptr [EAX + EBP*0x4 + 0x4]
TEST ECX,ECX
JNZ 0x0006469a
MOV dword ptr [EAX],EBP
CMP EBP,0x1
JNZ 0x00064688
SUB ESP,0x8
MOV EDX,dword ptr [ESP + 0xa4]
SHL EDX,0x2
PUSH EDX
MOV EDI,dword ptr [ESP + 0x14]
PUSH EDI
MOV EBP,dword ptr [ESP + 0x60]
MOV EBX,EBP
CALL 0x00032c20
MOV dword ptr [ESP],EDI
CALL 0x00032b40
MOV EAX,dword ptr [ESP + 0x28]
LEA EDI,[EAX*0x8 + 0x0]
POP EAX
POP EDX
PUSH EDI
PUSH dword ptr [ESP + 0x40]
CALL 0x00032c20
POP ECX
PUSH dword ptr [ESP + 0x40]
CALL 0x00032b40
POP EBP
POP EAX
PUSH EDI
PUSH ESI
CALL 0x00032c20
MOV dword ptr [ESP],ESI
CALL 0x00032b40
MOV EAX,dword ptr [ESP + 0x28]
LEA EDI,[EAX*0x4 + 0x0]
POP EAX
POP EDX
PUSH EDI
MOV EBP,dword ptr [ESP + 0x68]
PUSH EBP
CALL 0x00032c20
MOV dword ptr [ESP],EBP
CALL 0x00032b40
POP ECX
POP ESI
PUSH EDI
MOV EBP,dword ptr [ESP + 0x44]
PUSH EBP
CALL 0x00032c20
MOV dword ptr [ESP],EBP
CALL 0x00032b40
POP EBP
POP EAX
PUSH EDI
MOV EDI,dword ptr [ESP + 0x74]
PUSH EDI
CALL 0x00032c20
MOV dword ptr [ESP],EDI
CALL 0x00032b40
MOV EAX,dword ptr [ESP + 0x14]
ADD ESP,0xbc
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD ESP,0xac
POP EBX
POP ESI
POP EDI
POP EBP
JMP 0x00060da0
CMP ECX,EDX
JA 0x00064525
JMP 0x00064568
SUB ESP,0x8
MOV ESI,dword ptr [ESP + 0x10]
PUSH ESI
MOV EBX,dword ptr [ESP + 0x24]
PUSH EBX
MOV EDI,dword ptr [ESP + 0x44]
MOV EDX,dword ptr [ESP + 0x78]
MOV EAX,dword ptr [ESP + 0x2c]
MOV ECX,EDI
CALL 0x0005f530
POP EAX
POP EDX
PUSH EBX
PUSH ESI
MOV ECX,dword ptr [ESP + 0x6c]
MOV EAX,EDI
MOV EDX,dword ptr [ESP + 0x48]
CALL 0x0005fba0
ADD ESP,0x10
JMP 0x00064595
MOV EDI,dword ptr [ESP + 0x1c]
MOV EAX,dword ptr [ESP + 0x6c]
SUB ESP,0x8
MOV EBX,dword ptr [ESP + 0x84]
ADD EAX,EDI
PUSH EBX
MOV ESI,dword ptr [ESP + 0x84]
PUSH ESI
MOV ECX,dword ptr [ESP + 0x90]
MOV EDX,dword ptr [ESP + 0x94]
CALL 0x0005f530
POP EAX
POP EDX
PUSH EBX
PUSH dword ptr [ESP + 0x6c]
MOV EDX,dword ptr [ESP + 0x98]
MOV EAX,EDI
MOV ECX,dword ptr [ESP + 0x40]
CALL 0x0005f970
MOV EAX,dword ptr [ESP + 0x80]
POP ECX
ADD EAX,EDI
POP EDI
PUSH EBX
PUSH dword ptr [ESP + 0x6c]
MOV ECX,dword ptr [ESP + 0x30]
MOV EDX,dword ptr [ESP + 0x6c]
CALL 0x0005f970
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x90]
MOV EAX,dword ptr [ESP + 0x94]
MOV EBX,dword ptr [ESP + 0x98]
TEST ESI,ESI
JLE 0x00064847
LEA ESI,[ESI]
MOV ECX,dword ptr [EAX]
ADD EAX,0x4
ADD EDX,0x4
MOV dword ptr [EDX + -0x4],ECX
CMP EBX,EAX
JNZ 0x00064838
MOV dword ptr [ESP + 0x4],EBP
MOV EDX,dword ptr [ESP + 0x64]
XOR EAX,EAX
MOV EBP,dword ptr [ESP + 0x20]
LEA ESI,[ESI]
MOV EBX,dword ptr [ESP + 0x30]
MOV ESI,dword ptr [EBP + EDX*0x4]
XOR EDI,EDI
MOV ECX,dword ptr [EBX + EDX*0x4]
XOR EBX,EBX
ADD ECX,ESI
ADC EBX,EDI
XOR EDI,EDI
ADD ECX,EAX
ADC EBX,EDI
MOV dword ptr [EBP + EDX*0x4],ECX
SUB EDX,0x1
MOV EAX,EBX
CMP EDX,-0x1
JNZ 0x00064858
MOV EDI,dword ptr [ESP + 0x20]
MOV EBX,dword ptr [ESP + 0x8c]
XOR EAX,EAX
MOV EDX,dword ptr [ESP + 0x64]
ADD EDI,EBX
MOV EBP,EDI
LEA ESI,[ESI]
MOV EBX,dword ptr [ESP + 0x20]
MOV ESI,dword ptr [EBP + EDX*0x4]
XOR EDI,EDI
MOV ECX,dword ptr [EBX + EDX*0x4]
XOR EBX,EBX
ADD ECX,ESI
ADC EBX,EDI
XOR EDI,EDI
ADD ECX,EAX
MOV EAX,dword ptr [ESP + 0x8]
ADC EBX,EDI
MOV dword ptr [EAX + EDX*0x4],ECX
SUB EDX,0x1
MOV EAX,EBX
CMP EDX,-0x1
JNZ 0x00064898
MOV EBP,dword ptr [ESP + 0x4]
SUB ESP,0x8
PUSH dword ptr [ESP + 0x28]
PUSH dword ptr [ESP + 0x24]
MOV ECX,dword ptr [ESP + 0x24]
MOV EDX,dword ptr [ESP + 0x48]
MOV EAX,dword ptr [ESP + 0x18]
CALL 0x0005f530
ADD ESP,0x10
MOV EAX,dword ptr [ESP + 0x40]
TEST EAX,EAX
JNS 0x00064484
XOR EAX,EAX
JMP 0x000644bf
MOV EBX,dword ptr [ESP + 0x18]
XOR EAX,EAX
TEST EBX,EBX
JG 0x000644bf
JMP 0x00064525
MOV dword ptr [EDX],0x0
ADD EAX,0x1
SUB EDX,0x4
CMP dword ptr [ESP + 0x18],EAX
JNZ 0x000641a0
JMP 0x000641bc
MOV dword ptr [ESI],0x0
ADD EAX,0x1
SUB ESI,0x4
CMP dword ptr [ESP + 0x18],EAX
JNZ 0x00064040
JMP 0x0006405b
ADD dword ptr [ESP + 0x44],0x1
MOV EAX,dword ptr [ESP + 0x44]
SUB EBP,0x4
CMP EBX,EAX
JNZ 0x00064259
MOV ESI,dword ptr [ESP + 0x4]
JMP 0x000645c6
SUB ESP,0x8
PUSH 0x4
PUSH dword ptr [ESP + 0x24]
MOV ESI,dword ptr [ESP + 0x60]
MOV EBX,ESI
CALL 0x000329a0
MOV dword ptr [ESP + 0x6c],EAX
POP EAX
MOV EAX,dword ptr [EDI]
POP EDX
LEA EAX,[EAX*0x4 + 0x4]
PUSH EAX
PUSH EDI
CALL 0x00032c20
MOV dword ptr [ESP],EDI
CALL 0x00032b40
POP ECX
POP ESI
PUSH 0x4
PUSH dword ptr [ESP + 0x24]
CALL 0x000329a0
MOV dword ptr [ESP + 0x78],EAX
ADD ESP,0x10
MOV EDI,dword ptr [ESP + 0x58]
TEST EDI,EDI
JNS 0x000640aa
MOV EAX,dword ptr [ESP + 0x18]
LEA EDI,[EAX + EAX*0x1]
MOV EAX,dword ptr [ESP + 0x8]
MOV ECX,dword ptr [EAX]
SUB ESP,0x8
LEA EAX,[ECX*0x4 + 0x4]
PUSH EAX
PUSH dword ptr [ESP + 0x14]
MOV ESI,dword ptr [ESP + 0x60]
MOV EBX,ESI
CALL 0x00032c20
POP ECX
PUSH dword ptr [ESP + 0x14]
CALL 0x00032b40
POP EAX
POP EDX
PUSH 0x4
PUSH EDI
CALL 0x000329a0
MOV dword ptr [ESP + 0x44],EAX
POP ECX
POP EAX
PUSH 0x4
PUSH EDI
MOV dword ptr [ESP + 0x60],ESI
CALL 0x000329a0
MOV ESI,EAX
POP EAX
MOV EAX,dword ptr [EBP]
POP EDX
LEA EAX,[EAX*0x4 + 0x4]
PUSH EAX
PUSH EBP
MOV EBX,dword ptr [ESP + 0x60]
CALL 0x00032c20
MOV EBX,dword ptr [ESP + 0x60]
MOV dword ptr [ESP],EBP
CALL 0x00032b40
MOV EAX,dword ptr [ESP + 0x28]
LEA EAX,[EAX + EAX*0x2]
MOV dword ptr [ESP + 0xac],EAX
ADD ESP,0x10
JMP 0x0006421b
MOV EBX,dword ptr [ESP + 0x50]
LEA EAX,[EBX + 0xfffae5ac]
PUSH EAX
LEA EAX,[EBX + 0xfffae3f8]
PUSH 0x443
PUSH EAX
LEA EAX,[EBX + 0xfffaf894]
PUSH EAX
CALL 0x0001c000
MOV EBX,dword ptr [ESP + 0x50]
LEA EAX,[EBX + 0xfffae5ac]
PUSH EAX
LEA EAX,[EBX + 0xfffae3f8]
PUSH 0x42c
PUSH EAX
LEA EAX,[EBX + 0xfffae437]
PUSH EAX
CALL 0x0001c000
MOV EBX,dword ptr [ESP + 0x50]
LEA EAX,[EBX + 0xfffae604]
PUSH EAX
LEA EAX,[EBX + 0xfffae3f8]
PUSH 0x51
PUSH EAX
LEA EAX,[EBX + 0xfffae448]
PUSH EAX
CALL 0x0001c000
CALL 0x0005f500
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nuint * FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)\n\n{\n  int iVar1;\n  void *pvVar2;\n  size_t __n;\n  void *pvVar3;\n  longlong lVar4;\n  uint uVar5;\n  uint *puVar6;\n  uint uVar7;\n  uint *puVar8;\n  int *piVar9;\n  int *piVar10;\n  uint *puVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  void *__s;\n  void *pvVar16;\n  int iVar17;\n  void *pvVar18;\n  undefined4 *puVar19;\n  undefined4 *puVar20;\n  int iVar21;\n  void *pvVar22;\n  int iVar23;\n  int iVar24;\n  int iVar25;\n  undefined4 *puVar26;\n  void *pvVar27;\n  int iVar28;\n  int *piVar29;\n  uint uVar30;\n  int iVar31;\n  bool bVar32;\n  uint local_b8;\n  uint *local_b0;\n  int local_94;\n  int local_88;\n  int local_78;\n  int local_60;\n  void *local_54;\n  int local_20;\n  \n  uVar7 = *param_3;\n  if (param_3[uVar7] == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar5 = param_3[1] & 1;\n  if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }\n  if (0x3fffffe < uVar7) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);\n  memset(puVar6,0,(uVar7 + 1) * 4);\n  *puVar6 = uVar7;\n  FUN_00060250(0);\n  uVar7 = *puVar6;\n  if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }\n  uVar7 = *param_3;\n  if ((int)(uVar7 * 0x20) < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar15 = uVar7 + 1;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);\n  memset(puVar8,0,(uVar7 + 2) * 4);\n  *puVar8 = uVar15;\n  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;\n  piVar9 = (int *)FUN_00063860(param_3,puVar8);\n  if (piVar9 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  uVar15 = *param_3;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);\n  memset(puVar6,0,(uVar15 + 1) * 4);\n  *puVar6 = uVar15;\n  FUN_00060250(0);\n  uVar15 = *puVar6;\n  if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }\n  FUN_00032c20(puVar8,*puVar8 * 4 + 4);\n  FUN_00032b40(puVar8);\n  puVar11 = (uint *)FUN_000329a0(uVar7,4);\n  iVar1 = uVar7 - 1;\n  puVar12 = puVar11 + iVar1;\n  puVar8 = param_3;\n  iVar21 = iVar1;\n  uVar15 = uVar5;\n  if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  FUN_00032c20(piVar10,iVar21 * 4 + 4);\n  FUN_00032b40(piVar10);\n  local_88 = FUN_000329a0(uVar7 * 2,4);\n  iVar21 = FUN_000329a0(uVar7 * 2,4);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  local_20 = uVar7 * 3;\nLAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);\n  iVar24 = *param_2;\n  local_78 = 0;\n  puVar6 = (uint *)(param_2 + iVar24);\n  if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *piVar9 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  FUN_0005fba0(__s,uVar7);\n  uVar5 = *param_3;\n  if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }\nLAB_00064ab0:\n                    /* WARNING: Subroutine does not return */\n  FUN_0005f500();\n}\n\n" comment (function_definition "uint * FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)\n\n{\n  int iVar1;\n  void *pvVar2;\n  size_t __n;\n  void *pvVar3;\n  longlong lVar4;\n  uint uVar5;\n  uint *puVar6;\n  uint uVar7;\n  uint *puVar8;\n  int *piVar9;\n  int *piVar10;\n  uint *puVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  void *__s;\n  void *pvVar16;\n  int iVar17;\n  void *pvVar18;\n  undefined4 *puVar19;\n  undefined4 *puVar20;\n  int iVar21;\n  void *pvVar22;\n  int iVar23;\n  int iVar24;\n  int iVar25;\n  undefined4 *puVar26;\n  void *pvVar27;\n  int iVar28;\n  int *piVar29;\n  uint uVar30;\n  int iVar31;\n  bool bVar32;\n  uint local_b8;\n  uint *local_b0;\n  int local_94;\n  int local_88;\n  int local_78;\n  int local_60;\n  void *local_54;\n  int local_20;\n  \n  uVar7 = *param_3;\n  if (param_3[uVar7] == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar5 = param_3[1] & 1;\n  if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }\n  if (0x3fffffe < uVar7) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);\n  memset(puVar6,0,(uVar7 + 1) * 4);\n  *puVar6 = uVar7;\n  FUN_00060250(0);\n  uVar7 = *puVar6;\n  if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }\n  uVar7 = *param_3;\n  if ((int)(uVar7 * 0x20) < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar15 = uVar7 + 1;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);\n  memset(puVar8,0,(uVar7 + 2) * 4);\n  *puVar8 = uVar15;\n  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;\n  piVar9 = (int *)FUN_00063860(param_3,puVar8);\n  if (piVar9 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  uVar15 = *param_3;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);\n  memset(puVar6,0,(uVar15 + 1) * 4);\n  *puVar6 = uVar15;\n  FUN_00060250(0);\n  uVar15 = *puVar6;\n  if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }\n  FUN_00032c20(puVar8,*puVar8 * 4 + 4);\n  FUN_00032b40(puVar8);\n  puVar11 = (uint *)FUN_000329a0(uVar7,4);\n  iVar1 = uVar7 - 1;\n  puVar12 = puVar11 + iVar1;\n  puVar8 = param_3;\n  iVar21 = iVar1;\n  uVar15 = uVar5;\n  if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  FUN_00032c20(piVar10,iVar21 * 4 + 4);\n  FUN_00032b40(piVar10);\n  local_88 = FUN_000329a0(uVar7 * 2,4);\n  iVar21 = FUN_000329a0(uVar7 * 2,4);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  local_20 = uVar7 * 3;\nLAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);\n  iVar24 = *param_2;\n  local_78 = 0;\n  puVar6 = (uint *)(param_2 + iVar24);\n  if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *piVar9 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  FUN_0005fba0(__s,uVar7);\n  uVar5 = *param_3;\n  if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }\nLAB_00064ab0:\n                    /* WARNING: Subroutine does not return */\n  FUN_0005f500();\n}" type_identifier (pointer_declarator "* FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)" * (function_declarator "FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)" identifier (parameter_list "(undefined4 param_1,int *param_2,uint *param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  void *pvVar2;\n  size_t __n;\n  void *pvVar3;\n  longlong lVar4;\n  uint uVar5;\n  uint *puVar6;\n  uint uVar7;\n  uint *puVar8;\n  int *piVar9;\n  int *piVar10;\n  uint *puVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  void *__s;\n  void *pvVar16;\n  int iVar17;\n  void *pvVar18;\n  undefined4 *puVar19;\n  undefined4 *puVar20;\n  int iVar21;\n  void *pvVar22;\n  int iVar23;\n  int iVar24;\n  int iVar25;\n  undefined4 *puVar26;\n  void *pvVar27;\n  int iVar28;\n  int *piVar29;\n  uint uVar30;\n  int iVar31;\n  bool bVar32;\n  uint local_b8;\n  uint *local_b0;\n  int local_94;\n  int local_88;\n  int local_78;\n  int local_60;\n  void *local_54;\n  int local_20;\n  \n  uVar7 = *param_3;\n  if (param_3[uVar7] == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar5 = param_3[1] & 1;\n  if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }\n  if (0x3fffffe < uVar7) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);\n  memset(puVar6,0,(uVar7 + 1) * 4);\n  *puVar6 = uVar7;\n  FUN_00060250(0);\n  uVar7 = *puVar6;\n  if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }\n  uVar7 = *param_3;\n  if ((int)(uVar7 * 0x20) < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar15 = uVar7 + 1;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);\n  memset(puVar8,0,(uVar7 + 2) * 4);\n  *puVar8 = uVar15;\n  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;\n  piVar9 = (int *)FUN_00063860(param_3,puVar8);\n  if (piVar9 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  uVar15 = *param_3;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);\n  memset(puVar6,0,(uVar15 + 1) * 4);\n  *puVar6 = uVar15;\n  FUN_00060250(0);\n  uVar15 = *puVar6;\n  if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }\n  FUN_00032c20(puVar8,*puVar8 * 4 + 4);\n  FUN_00032b40(puVar8);\n  puVar11 = (uint *)FUN_000329a0(uVar7,4);\n  iVar1 = uVar7 - 1;\n  puVar12 = puVar11 + iVar1;\n  puVar8 = param_3;\n  iVar21 = iVar1;\n  uVar15 = uVar5;\n  if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  FUN_00032c20(piVar10,iVar21 * 4 + 4);\n  FUN_00032b40(piVar10);\n  local_88 = FUN_000329a0(uVar7 * 2,4);\n  iVar21 = FUN_000329a0(uVar7 * 2,4);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  local_20 = uVar7 * 3;\nLAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);\n  iVar24 = *param_2;\n  local_78 = 0;\n  puVar6 = (uint *)(param_2 + iVar24);\n  if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *piVar9 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  FUN_0005fba0(__s,uVar7);\n  uVar5 = *param_3;\n  if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }\nLAB_00064ab0:\n                    /* WARNING: Subroutine does not return */\n  FUN_0005f500();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "void *pvVar2;" primitive_type (pointer_declarator "*pvVar2" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (declaration "longlong lVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "int *piVar10;" primitive_type (pointer_declarator "*piVar10" * identifier) ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "uint *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "void *pvVar16;" primitive_type (pointer_declarator "*pvVar16" * identifier) ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "void *pvVar18;" primitive_type (pointer_declarator "*pvVar18" * identifier) ;) (declaration "undefined4 *puVar19;" type_identifier (pointer_declarator "*puVar19" * identifier) ;) (declaration "undefined4 *puVar20;" type_identifier (pointer_declarator "*puVar20" * identifier) ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "void *pvVar22;" primitive_type (pointer_declarator "*pvVar22" * identifier) ;) (declaration "int iVar23;" primitive_type identifier ;) (declaration "int iVar24;" primitive_type identifier ;) (declaration "int iVar25;" primitive_type identifier ;) (declaration "undefined4 *puVar26;" type_identifier (pointer_declarator "*puVar26" * identifier) ;) (declaration "void *pvVar27;" primitive_type (pointer_declarator "*pvVar27" * identifier) ;) (declaration "int iVar28;" primitive_type identifier ;) (declaration "int *piVar29;" primitive_type (pointer_declarator "*piVar29" * identifier) ;) (declaration "uint uVar30;" type_identifier identifier ;) (declaration "int iVar31;" primitive_type identifier ;) (declaration "bool bVar32;" primitive_type identifier ;) (declaration "uint local_b8;" type_identifier identifier ;) (declaration "uint *local_b0;" type_identifier (pointer_declarator "*local_b0" * identifier) ;) (declaration "int local_94;" primitive_type identifier ;) (declaration "int local_88;" primitive_type identifier ;) (declaration "int local_78;" primitive_type identifier ;) (declaration "int local_60;" primitive_type identifier ;) (declaration "void *local_54;" primitive_type (pointer_declarator "*local_54" * identifier) ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "uVar7 = *param_3;" (assignment_expression "uVar7 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (param_3[uVar7] == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }" if (parenthesized_expression "(param_3[uVar7] == 0)" ( (binary_expression "param_3[uVar7] == 0" (subscript_expression "param_3[uVar7]" identifier [ identifier ]) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }" { comment (expression_statement "__assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");" (call_expression "__assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow")" identifier (argument_list "("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow")" ( (string_literal ""mod[mod[0]] != 0"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""modpow"" " string_content ") ))) ;) })) (expression_statement "uVar5 = param_3[1] & 1;" (assignment_expression "uVar5 = param_3[1] & 1" identifier = (binary_expression "param_3[1] & 1" (subscript_expression "param_3[1]" identifier [ number_literal ]) & number_literal)) ;) (if_statement "if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }" { (expression_statement "puVar6 = (uint *)FUN_00060da0();" (assignment_expression "puVar6 = (uint *)FUN_00060da0()" identifier = (cast_expression "(uint *)FUN_00060da0()" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00060da0()" identifier (argument_list "()" ( ))))) ;) (return_statement "return puVar6;" return identifier ;) })) (if_statement "if (0x3fffffe < uVar7) goto LAB_00064ab0;" if (parenthesized_expression "(0x3fffffe < uVar7)" ( (binary_expression "0x3fffffe < uVar7" number_literal < identifier) )) (goto_statement "goto LAB_00064ab0;" goto statement_identifier ;)) (expression_statement "puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);" (assignment_expression "puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar7 + 1,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7 + 1,4)" identifier (argument_list "(uVar7 + 1,4)" ( (binary_expression "uVar7 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(puVar6,0,(uVar7 + 1) * 4);" (call_expression "memset(puVar6,0,(uVar7 + 1) * 4)" identifier (argument_list "(puVar6,0,(uVar7 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar7 + 1) * 4" (parenthesized_expression "(uVar7 + 1)" ( (binary_expression "uVar7 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*puVar6 = uVar7;" (assignment_expression "*puVar6 = uVar7" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "FUN_00060250(0);" (call_expression "FUN_00060250(0)" identifier (argument_list "(0)" ( number_literal ))) ;) (expression_statement "uVar7 = *puVar6;" (assignment_expression "uVar7 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (if_statement "if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }" if (parenthesized_expression "(1 < uVar7)" ( (binary_expression "1 < uVar7" number_literal < identifier) )) (compound_statement "{\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }" { (expression_statement "uVar15 = puVar6[uVar7];" (assignment_expression "uVar15 = puVar6[uVar7]" identifier = (subscript_expression "puVar6[uVar7]" identifier [ identifier ])) ;) (while_statement "while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }" while (parenthesized_expression "(uVar15 == 0)" ( (binary_expression "uVar15 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }" { (expression_statement "uVar7 = uVar7 - 1;" (assignment_expression "uVar7 = uVar7 - 1" identifier = (binary_expression "uVar7 - 1" identifier - number_literal)) ;) (expression_statement "*puVar6 = uVar7;" (assignment_expression "*puVar6 = uVar7" (pointer_expression "*puVar6" * identifier) = identifier) ;) (if_statement "if (uVar7 == 1) break;" if (parenthesized_expression "(uVar7 == 1)" ( (binary_expression "uVar7 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar15 = puVar6[uVar7];" (assignment_expression "uVar15 = puVar6[uVar7]" identifier = (subscript_expression "puVar6[uVar7]" identifier [ identifier ])) ;) })) })) (expression_statement "uVar7 = *param_3;" (assignment_expression "uVar7 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if ((int)(uVar7 * 0x20) < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }" if (parenthesized_expression "((int)(uVar7 * 0x20) < 0)" ( (binary_expression "(int)(uVar7 * 0x20) < 0" (cast_expression "(int)(uVar7 * 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar7 * 0x20)" ( (binary_expression "uVar7 * 0x20" identifier * number_literal) ))) < number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }" { comment (expression_statement "__assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");" (call_expression "__assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2")" identifier (argument_list "("n >= 0","sshbn.c",0x51,"bn_power_2")" ( (string_literal ""n >= 0"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""bn_power_2"" " string_content ") ))) ;) })) (expression_statement "uVar15 = uVar7 + 1;" (assignment_expression "uVar15 = uVar7 + 1" identifier = (binary_expression "uVar7 + 1" identifier + number_literal)) ;) (if_statement "if (0x3fffffe < uVar15) goto LAB_00064ab0;" if (parenthesized_expression "(0x3fffffe < uVar15)" ( (binary_expression "0x3fffffe < uVar15" number_literal < identifier) )) (goto_statement "goto LAB_00064ab0;" goto statement_identifier ;)) (expression_statement "puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);" (assignment_expression "puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar7 + 2,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7 + 2,4)" identifier (argument_list "(uVar7 + 2,4)" ( (binary_expression "uVar7 + 2" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(puVar8,0,(uVar7 + 2) * 4);" (call_expression "memset(puVar8,0,(uVar7 + 2) * 4)" identifier (argument_list "(puVar8,0,(uVar7 + 2) * 4)" ( identifier , number_literal , (binary_expression "(uVar7 + 2) * 4" (parenthesized_expression "(uVar7 + 2)" ( (binary_expression "uVar7 + 2" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*puVar8 = uVar15;" (assignment_expression "*puVar8 = uVar15" (pointer_expression "*puVar8" * identifier) = identifier) ;) (if_statement "if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }" if (parenthesized_expression "((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20))" ( (binary_expression "(int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)" (cast_expression "(int)(uVar15 * 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar15 * 0x20)" ( (binary_expression "uVar15 * 0x20" identifier * number_literal) ))) <= (cast_expression "(int)(uVar7 * 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar7 * 0x20)" ( (binary_expression "uVar7 * 0x20" identifier * number_literal) )))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }" { comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;" (assignment_expression "puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1" (subscript_expression "puVar8[uVar7 + 1]" identifier [ (binary_expression "uVar7 + 1" identifier + number_literal) ]) = (binary_expression "puVar8[uVar7 + 1] | 1" (subscript_expression "puVar8[uVar7 + 1]" identifier [ (binary_expression "uVar7 + 1" identifier + number_literal) ]) | number_literal)) ;) (expression_statement "piVar9 = (int *)FUN_00063860(param_3,puVar8);" (assignment_expression "piVar9 = (int *)FUN_00063860(param_3,puVar8)" identifier = (cast_expression "(int *)FUN_00063860(param_3,puVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00063860(param_3,puVar8)" identifier (argument_list "(param_3,puVar8)" ( identifier , identifier ))))) ;) (if_statement "if (piVar9 == (int *)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }" { comment (expression_statement "__assert_fail("inv","sshbn.c",0x443,"modpow");" (call_expression "__assert_fail("inv","sshbn.c",0x443,"modpow")" identifier (argument_list "("inv","sshbn.c",0x443,"modpow")" ( (string_literal ""inv"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""modpow"" " string_content ") ))) ;) })) (expression_statement "piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);" (assignment_expression "piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3)" identifier = (cast_expression "(int *)FUN_00061810(puVar6,puVar8,param_3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00061810(puVar6,puVar8,param_3)" identifier (argument_list "(puVar6,puVar8,param_3)" ( identifier , identifier , identifier ))))) ;) (expression_statement "FUN_00032c20(puVar6,*puVar6 * 4 + 4);" (call_expression "FUN_00032c20(puVar6,*puVar6 * 4 + 4)" identifier (argument_list "(puVar6,*puVar6 * 4 + 4)" ( identifier , (binary_expression "*puVar6 * 4 + 4" (binary_expression "*puVar6 * 4" (pointer_expression "*puVar6" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(puVar6);" (call_expression "FUN_00032b40(puVar6)" identifier (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "uVar15 = *param_3;" (assignment_expression "uVar15 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (0x3fffffe < uVar15) goto LAB_00064ab0;" if (parenthesized_expression "(0x3fffffe < uVar15)" ( (binary_expression "0x3fffffe < uVar15" number_literal < identifier) )) (goto_statement "goto LAB_00064ab0;" goto statement_identifier ;)) (expression_statement "puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);" (assignment_expression "puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar15 + 1,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar15 + 1,4)" identifier (argument_list "(uVar15 + 1,4)" ( (binary_expression "uVar15 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(puVar6,0,(uVar15 + 1) * 4);" (call_expression "memset(puVar6,0,(uVar15 + 1) * 4)" identifier (argument_list "(puVar6,0,(uVar15 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar15 + 1) * 4" (parenthesized_expression "(uVar15 + 1)" ( (binary_expression "uVar15 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*puVar6 = uVar15;" (assignment_expression "*puVar6 = uVar15" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "FUN_00060250(0);" (call_expression "FUN_00060250(0)" identifier (argument_list "(0)" ( number_literal ))) ;) (expression_statement "uVar15 = *puVar6;" (assignment_expression "uVar15 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (if_statement "if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }" if (parenthesized_expression "(1 < uVar15)" ( (binary_expression "1 < uVar15" number_literal < identifier) )) (compound_statement "{\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }" { (do_statement "do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);" do (compound_statement "{\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    }" { (if_statement "if (puVar6[uVar15] != 0) break;" if (parenthesized_expression "(puVar6[uVar15] != 0)" ( (binary_expression "puVar6[uVar15] != 0" (subscript_expression "puVar6[uVar15]" identifier [ identifier ]) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar15 = uVar15 - 1;" (assignment_expression "uVar15 = uVar15 - 1" identifier = (binary_expression "uVar15 - 1" identifier - number_literal)) ;) (expression_statement "*puVar6 = uVar15;" (assignment_expression "*puVar6 = uVar15" (pointer_expression "*puVar6" * identifier) = identifier) ;) }) while (parenthesized_expression "(uVar15 != 1)" ( (binary_expression "uVar15 != 1" identifier != number_literal) )) ;) })) (expression_statement "FUN_00032c20(puVar8,*puVar8 * 4 + 4);" (call_expression "FUN_00032c20(puVar8,*puVar8 * 4 + 4)" identifier (argument_list "(puVar8,*puVar8 * 4 + 4)" ( identifier , (binary_expression "*puVar8 * 4 + 4" (binary_expression "*puVar8 * 4" (pointer_expression "*puVar8" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(puVar8);" (call_expression "FUN_00032b40(puVar8)" identifier (argument_list "(puVar8)" ( identifier ))) ;) (expression_statement "puVar11 = (uint *)FUN_000329a0(uVar7,4);" (assignment_expression "puVar11 = (uint *)FUN_000329a0(uVar7,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar7,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar1 = uVar7 - 1;" (assignment_expression "iVar1 = uVar7 - 1" identifier = (binary_expression "uVar7 - 1" identifier - number_literal)) ;) (expression_statement "puVar12 = puVar11 + iVar1;" (assignment_expression "puVar12 = puVar11 + iVar1" identifier = (binary_expression "puVar11 + iVar1" identifier + identifier)) ;) (expression_statement "puVar8 = param_3;" (assignment_expression "puVar8 = param_3" identifier = identifier) ;) (expression_statement "iVar21 = iVar1;" (assignment_expression "iVar21 = iVar1" identifier = identifier) ;) (expression_statement "uVar15 = uVar5;" (assignment_expression "uVar15 = uVar5" identifier = identifier) ;) (if_statement "if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" if (parenthesized_expression "((int)uVar7 < 1)" ( (binary_expression "(int)uVar7 < 1" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }" { (expression_statement "local_60 = FUN_000329a0(uVar7,4);" (assignment_expression "local_60 = FUN_000329a0(uVar7,4)" identifier = (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal )))) ;) (expression_statement "FUN_00032c20(piVar9,*piVar9 * 4 + 4);" (call_expression "FUN_00032c20(piVar9,*piVar9 * 4 + 4)" identifier (argument_list "(piVar9,*piVar9 * 4 + 4)" ( identifier , (binary_expression "*piVar9 * 4 + 4" (binary_expression "*piVar9 * 4" (pointer_expression "*piVar9" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(piVar9);" (call_expression "FUN_00032b40(piVar9)" identifier (argument_list "(piVar9)" ( identifier ))) ;) (expression_statement "local_54 = (void *)FUN_000329a0(uVar7,4);" (assignment_expression "local_54 = (void *)FUN_000329a0(uVar7,4)" identifier = (cast_expression "(void *)FUN_000329a0(uVar7,4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal ))))) ;) (if_statement "if (-1 < iVar1) goto LAB_000640c0;" if (parenthesized_expression "(-1 < iVar1)" ( (binary_expression "-1 < iVar1" number_literal < identifier) )) (goto_statement "goto LAB_000640c0;" goto statement_identifier ;)) (expression_statement "iVar21 = *piVar10;" (assignment_expression "iVar21 = *piVar10" identifier = (pointer_expression "*piVar10" * identifier)) ;) }) (else_clause "else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" else (compound_statement "{\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" { (do_statement "do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);" do (compound_statement "{\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    }" { (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "*puVar12 = *puVar8;" (assignment_expression "*puVar12 = *puVar8" (pointer_expression "*puVar12" * identifier) = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "bVar32 = puVar11 != puVar12;" (assignment_expression "bVar32 = puVar11 != puVar12" identifier = (binary_expression "puVar11 != puVar12" identifier != identifier)) ;) (expression_statement "puVar12 = puVar12 + -1;" (assignment_expression "puVar12 = puVar12 + -1" identifier = (binary_expression "puVar12 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar32)" ( identifier )) ;) (expression_statement "local_60 = FUN_000329a0(uVar7,4);" (assignment_expression "local_60 = FUN_000329a0(uVar7,4)" identifier = (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal )))) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "piVar29 = (int *)(iVar1 * 4 + local_60);" (assignment_expression "piVar29 = (int *)(iVar1 * 4 + local_60)" identifier = (cast_expression "(int *)(iVar1 * 4 + local_60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 * 4 + local_60)" ( (binary_expression "iVar1 * 4 + local_60" (binary_expression "iVar1 * 4" identifier * number_literal) + identifier) )))) ;) (do_statement "do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);" do (compound_statement "{\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    }" { (while_statement "while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }" while (parenthesized_expression "(*piVar9 <= (int)uVar13)" ( (binary_expression "*piVar9 <= (int)uVar13" (pointer_expression "*piVar9" * identifier) <= (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }" { (expression_statement "*piVar29 = 0;" (assignment_expression "*piVar29 = 0" (pointer_expression "*piVar29" * identifier) = number_literal) ;) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "piVar29 = piVar29 + -1;" (assignment_expression "piVar29 = piVar29 + -1" identifier = (binary_expression "piVar29 + -1" identifier + number_literal)) ;) (if_statement "if (uVar7 == uVar13) goto LAB_0006405b;" if (parenthesized_expression "(uVar7 == uVar13)" ( (binary_expression "uVar7 == uVar13" identifier == identifier) )) (goto_statement "goto LAB_0006405b;" goto statement_identifier ;)) })) (expression_statement "iVar24 = uVar13 + 1;" (assignment_expression "iVar24 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "*piVar29 = piVar9[iVar24];" (assignment_expression "*piVar29 = piVar9[iVar24]" (pointer_expression "*piVar29" * identifier) = (subscript_expression "piVar9[iVar24]" identifier [ identifier ])) ;) (expression_statement "piVar29 = piVar29 + -1;" (assignment_expression "piVar29 = piVar29 + -1" identifier = (binary_expression "piVar29 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar13 != uVar7)" ( (binary_expression "uVar13 != uVar7" identifier != identifier) )) ;) (labeled_statement "LAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);" statement_identifier : (expression_statement "FUN_00032c20(piVar9,*piVar9 * 4 + 4);" (call_expression "FUN_00032c20(piVar9,*piVar9 * 4 + 4)" identifier (argument_list "(piVar9,*piVar9 * 4 + 4)" ( identifier , (binary_expression "*piVar9 * 4 + 4" (binary_expression "*piVar9 * 4" (pointer_expression "*piVar9" * identifier) * number_literal) + number_literal) ))) ;)) (expression_statement "FUN_00032b40(piVar9);" (call_expression "FUN_00032b40(piVar9)" identifier (argument_list "(piVar9)" ( identifier ))) ;) (expression_statement "local_54 = (void *)FUN_000329a0(uVar7,4);" (assignment_expression "local_54 = (void *)FUN_000329a0(uVar7,4)" identifier = (cast_expression "(void *)FUN_000329a0(uVar7,4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal ))))) ;) (expression_statement "memset(local_54,0,uVar7 * 4);" (call_expression "memset(local_54,0,uVar7 * 4)" identifier (argument_list "(local_54,0,uVar7 * 4)" ( identifier , number_literal , (binary_expression "uVar7 * 4" identifier * number_literal) ))) ;) (labeled_statement "LAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);" statement_identifier : (do_statement "do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);" do (compound_statement "{\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    }" { (expression_statement "uVar13 = *(uint *)((int)local_54 + iVar21 * 4);" (assignment_expression "uVar13 = *(uint *)((int)local_54 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)((int)local_54 + iVar21 * 4)" * (cast_expression "(uint *)((int)local_54 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_54 + iVar21 * 4)" ( (binary_expression "(int)local_54 + iVar21 * 4" (cast_expression "(int)local_54" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar30 = uVar15 + uVar13;" (assignment_expression "uVar30 = uVar15 + uVar13" identifier = (binary_expression "uVar15 + uVar13" identifier + identifier)) ;) (expression_statement "uVar14 = ~*(uint *)(local_60 + iVar21 * 4);" (assignment_expression "uVar14 = ~*(uint *)(local_60 + iVar21 * 4)" identifier = (unary_expression "~*(uint *)(local_60 + iVar21 * 4)" ~ (pointer_expression "*(uint *)(local_60 + iVar21 * 4)" * (cast_expression "(uint *)(local_60 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + iVar21 * 4)" ( (binary_expression "local_60 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) )))))) ;) (expression_statement "*(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;" (assignment_expression "*(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30" (pointer_expression "*(uint *)(local_60 + iVar21 * 4)" * (cast_expression "(uint *)(local_60 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + iVar21 * 4)" ( (binary_expression "local_60 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = (binary_expression "uVar14 + uVar30" identifier + identifier)) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);" (assignment_expression "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30)" identifier = (binary_expression "(uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30)" (cast_expression "(uint)CARRY4(uVar15,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar15,uVar13)" identifier (argument_list "(uVar15,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar14,uVar30)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar14,uVar30)" identifier (argument_list "(uVar14,uVar30)" ( identifier , identifier )))))) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;)) (expression_statement "iVar21 = *piVar10;" (assignment_expression "iVar21 = *piVar10" identifier = (pointer_expression "*piVar10" * identifier)) ;) (if_statement "if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }" { (expression_statement "piVar9 = (int *)((int)local_54 + iVar1 * 4);" (assignment_expression "piVar9 = (int *)((int)local_54 + iVar1 * 4)" identifier = (cast_expression "(int *)((int)local_54 + iVar1 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_54 + iVar1 * 4)" ( (binary_expression "(int)local_54 + iVar1 * 4" (cast_expression "(int)local_54" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar1 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (if_statement "if (iVar21 < 1) goto LAB_0006412f;" if (parenthesized_expression "(iVar21 < 1)" ( (binary_expression "iVar21 < 1" identifier < number_literal) )) (goto_statement "goto LAB_0006412f;" goto statement_identifier ;)) (labeled_statement "LAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];" statement_identifier : (expression_statement "*piVar9 = piVar10[uVar15 + 1];" (assignment_expression "*piVar9 = piVar10[uVar15 + 1]" (pointer_expression "*piVar9" * identifier) = (subscript_expression "piVar10[uVar15 + 1]" identifier [ (binary_expression "uVar15 + 1" identifier + number_literal) ])) ;)) (labeled_statement "joined_r0x00064127:\n      uVar15 = uVar15 + 1;" statement_identifier : (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;)) (if_statement "if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }" if (parenthesized_expression "(uVar15 == uVar7)" ( (binary_expression "uVar15 == uVar7" identifier == identifier) )) (compound_statement "{\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }" { (expression_statement "FUN_00032c20(piVar10,*piVar10 * 4 + 4);" (call_expression "FUN_00032c20(piVar10,*piVar10 * 4 + 4)" identifier (argument_list "(piVar10,*piVar10 * 4 + 4)" ( identifier , (binary_expression "*piVar10 * 4 + 4" (binary_expression "*piVar10 * 4" (pointer_expression "*piVar10" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(piVar10);" (call_expression "FUN_00032b40(piVar10)" identifier (argument_list "(piVar10)" ( identifier ))) ;) (expression_statement "local_88 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "local_88 = FUN_000329a0(uVar7 * 2,4)" identifier = (call_expression "FUN_000329a0(uVar7 * 2,4)" identifier (argument_list "(uVar7 * 2,4)" ( (binary_expression "uVar7 * 2" identifier * number_literal) , number_literal )))) ;) (expression_statement "iVar21 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "iVar21 = FUN_000329a0(uVar7 * 2,4)" identifier = (call_expression "FUN_000329a0(uVar7 * 2,4)" identifier (argument_list "(uVar7 * 2,4)" ( (binary_expression "uVar7 * 2" identifier * number_literal) , number_literal )))) ;) (expression_statement "puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);" (assignment_expression "puVar8 = (uint *)(local_88 + -4 + uVar7 * 8)" identifier = (cast_expression "(uint *)(local_88 + -4 + uVar7 * 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_88 + -4 + uVar7 * 8)" ( (binary_expression "local_88 + -4 + uVar7 * 8" (binary_expression "local_88 + -4" identifier + number_literal) + (binary_expression "uVar7 * 8" identifier * number_literal)) )))) ;) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (do_statement "do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);" do (compound_statement "{\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        }" { (if_statement "if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }" if (parenthesized_expression "((int)uVar15 < (int)*puVar6)" ( (binary_expression "(int)uVar15 < (int)*puVar6" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)*puVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*puVar6" * identifier))) )) (compound_statement "{\n            *puVar8 = puVar6[uVar15 + 1];\n          }" { (expression_statement "*puVar8 = puVar6[uVar15 + 1];" (assignment_expression "*puVar8 = puVar6[uVar15 + 1]" (pointer_expression "*puVar8" * identifier) = (subscript_expression "puVar6[uVar15 + 1]" identifier [ (binary_expression "uVar15 + 1" identifier + number_literal) ])) ;) }) (else_clause "else {\n            *puVar8 = 0;\n          }" else (compound_statement "{\n            *puVar8 = 0;\n          }" { (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" * identifier) = number_literal) ;) }))) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar7 != uVar15)" ( (binary_expression "uVar7 != uVar15" identifier != identifier) )) ;) (expression_statement "FUN_00032c20(puVar6,*puVar6 * 4 + 4);" (call_expression "FUN_00032c20(puVar6,*puVar6 * 4 + 4)" identifier (argument_list "(puVar6,*puVar6 * 4 + 4)" ( identifier , (binary_expression "*puVar6 * 4 + 4" (binary_expression "*puVar6 * 4" (pointer_expression "*puVar6" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(puVar6);" (call_expression "FUN_00032b40(puVar6)" identifier (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "local_20 = uVar7 * 3;" (assignment_expression "local_20 = uVar7 * 3" identifier = (binary_expression "uVar7 * 3" identifier * number_literal)) ;) (if_statement "if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }" if (parenthesized_expression "(0x32 < (int)uVar7)" ( (binary_expression "0x32 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }" { (expression_statement "iVar24 = 0;" (assignment_expression "iVar24 = 0" identifier = number_literal) ;) (expression_statement "uVar15 = uVar7;" (assignment_expression "uVar15 = uVar7" identifier = identifier) ;) (do_statement "do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);" do (compound_statement "{\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          }" { (expression_statement "uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;" (assignment_expression "uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1" identifier = (binary_expression "(uVar15 - ((int)uVar15 >> 1)) + 1" (parenthesized_expression "(uVar15 - ((int)uVar15 >> 1))" ( (binary_expression "uVar15 - ((int)uVar15 >> 1)" identifier - (parenthesized_expression "((int)uVar15 >> 1)" ( (binary_expression "(int)uVar15 >> 1" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) )) + number_literal)) ;) (expression_statement "iVar24 = iVar24 + uVar15 * 4;" (assignment_expression "iVar24 = iVar24 + uVar15 * 4" identifier = (binary_expression "iVar24 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal))) ;) }) while (parenthesized_expression "(0x32 < (int)uVar15)" ( (binary_expression "0x32 < (int)uVar15" number_literal < (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (expression_statement "local_20 = local_20 + iVar24;" (assignment_expression "local_20 = local_20 + iVar24" identifier = (binary_expression "local_20 + iVar24" identifier + identifier)) ;) })) (goto_statement "goto LAB_0006421b;" goto statement_identifier ;) })) (expression_statement "piVar9 = piVar9 + -1;" (assignment_expression "piVar9 = piVar9 + -1" identifier = (binary_expression "piVar9 + -1" identifier + number_literal)) ;) (if_statement "if (*piVar10 <= (int)uVar15) goto LAB_0006412f;" if (parenthesized_expression "(*piVar10 <= (int)uVar15)" ( (binary_expression "*piVar10 <= (int)uVar15" (pointer_expression "*piVar10" * identifier) <= (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_0006412f;" goto statement_identifier ;)) (goto_statement "goto LAB_00064118;" goto statement_identifier ;) })) }))) (expression_statement "FUN_00032c20(piVar10,iVar21 * 4 + 4);" (call_expression "FUN_00032c20(piVar10,iVar21 * 4 + 4)" identifier (argument_list "(piVar10,iVar21 * 4 + 4)" ( identifier , (binary_expression "iVar21 * 4 + 4" (binary_expression "iVar21 * 4" identifier * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(piVar10);" (call_expression "FUN_00032b40(piVar10)" identifier (argument_list "(piVar10)" ( identifier ))) ;) (expression_statement "local_88 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "local_88 = FUN_000329a0(uVar7 * 2,4)" identifier = (call_expression "FUN_000329a0(uVar7 * 2,4)" identifier (argument_list "(uVar7 * 2,4)" ( (binary_expression "uVar7 * 2" identifier * number_literal) , number_literal )))) ;) (expression_statement "iVar21 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "iVar21 = FUN_000329a0(uVar7 * 2,4)" identifier = (call_expression "FUN_000329a0(uVar7 * 2,4)" identifier (argument_list "(uVar7 * 2,4)" ( (binary_expression "uVar7 * 2" identifier * number_literal) , number_literal )))) ;) (expression_statement "FUN_00032c20(puVar6,*puVar6 * 4 + 4);" (call_expression "FUN_00032c20(puVar6,*puVar6 * 4 + 4)" identifier (argument_list "(puVar6,*puVar6 * 4 + 4)" ( identifier , (binary_expression "*puVar6 * 4 + 4" (binary_expression "*puVar6 * 4" (pointer_expression "*puVar6" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(puVar6);" (call_expression "FUN_00032b40(puVar6)" identifier (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "local_20 = uVar7 * 3;" (assignment_expression "local_20 = uVar7 * 3" identifier = (binary_expression "uVar7 * 3" identifier * number_literal)) ;) (labeled_statement "LAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);" statement_identifier : (expression_statement "__s = (void *)FUN_000329a0(local_20,4);" (assignment_expression "__s = (void *)FUN_000329a0(local_20,4)" identifier = (cast_expression "(void *)FUN_000329a0(local_20,4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(local_20,4)" identifier (argument_list "(local_20,4)" ( identifier , number_literal ))))) ;)) (expression_statement "iVar24 = *param_2;" (assignment_expression "iVar24 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "local_78 = 0;" (assignment_expression "local_78 = 0" identifier = number_literal) ;) (expression_statement "puVar6 = (uint *)(param_2 + iVar24);" (assignment_expression "puVar6 = (uint *)(param_2 + iVar24)" identifier = (cast_expression "(uint *)(param_2 + iVar24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + iVar24)" ( (binary_expression "param_2 + iVar24" identifier + identifier) )))) ;) (if_statement "if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }" if (parenthesized_expression "(0 < iVar24)" ( (binary_expression "0 < iVar24" number_literal < identifier) )) (compound_statement "{\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }" { (do_statement "do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);" do (compound_statement "{\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    }" { (expression_statement "local_94 = 0x1f;" (assignment_expression "local_94 = 0x1f" identifier = number_literal) ;) (do_statement "do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);" do (compound_statement "{\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      }" { (if_statement "if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }" if (parenthesized_expression "((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0)" ( (binary_expression "(1 << ((byte)local_94 & 0x1f) & *puVar6) != 0" (parenthesized_expression "(1 << ((byte)local_94 & 0x1f) & *puVar6)" ( (binary_expression "1 << ((byte)local_94 & 0x1f) & *puVar6" (binary_expression "1 << ((byte)local_94 & 0x1f)" number_literal << (parenthesized_expression "((byte)local_94 & 0x1f)" ( (binary_expression "(byte)local_94 & 0x1f" (cast_expression "(byte)local_94" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) & (pointer_expression "*puVar6" * identifier)) )) != number_literal) )) (compound_statement "{\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }" { (if_statement "if (iVar24 <= local_78) goto LAB_000645c6;" if (parenthesized_expression "(iVar24 <= local_78)" ( (binary_expression "iVar24 <= local_78" identifier <= identifier) )) (goto_statement "goto LAB_000645c6;" goto statement_identifier ;)) (expression_statement "iVar31 = uVar7 * 2 + -1;" (assignment_expression "iVar31 = uVar7 * 2 + -1" identifier = (binary_expression "uVar7 * 2 + -1" (binary_expression "uVar7 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "__n = uVar7 * 4;" (assignment_expression "__n = uVar7 * 4" identifier = (binary_expression "uVar7 * 4" identifier * number_literal)) ;) (expression_statement "pvVar2 = (void *)((int)__s + uVar7 * 0xc);" (assignment_expression "pvVar2 = (void *)((int)__s + uVar7 * 0xc)" identifier = (cast_expression "(void *)((int)__s + uVar7 * 0xc)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__s + uVar7 * 0xc)" ( (binary_expression "(int)__s + uVar7 * 0xc" (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "uVar7 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "pvVar16 = (void *)((int)__s + __n);" (assignment_expression "pvVar16 = (void *)((int)__s + __n)" identifier = (cast_expression "(void *)((int)__s + __n)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__s + __n)" ( (binary_expression "(int)__s + __n" (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "iVar25 = (int)uVar7 >> 1;" (assignment_expression "iVar25 = (int)uVar7 >> 1" identifier = (binary_expression "(int)uVar7 >> 1" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (expression_statement "pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);" (assignment_expression "pvVar3 = (void *)((int)pvVar2 + uVar7 * 8)" identifier = (cast_expression "(void *)((int)pvVar2 + uVar7 * 8)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + uVar7 * 8)" ( (binary_expression "(int)pvVar2 + uVar7 * 8" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "uVar7 * 8" identifier * number_literal)) )))) ;) (expression_statement "iVar17 = uVar7 - iVar25;" (assignment_expression "iVar17 = uVar7 - iVar25" identifier = (binary_expression "uVar7 - iVar25" identifier - identifier)) ;) (expression_statement "iVar24 = iVar17 + iVar25 * 2;" (assignment_expression "iVar24 = iVar17 + iVar25 * 2" identifier = (binary_expression "iVar17 + iVar25 * 2" identifier + (binary_expression "iVar25 * 2" identifier * number_literal))) ;) (expression_statement "iVar28 = iVar21;" (assignment_expression "iVar28 = iVar21" identifier = identifier) ;) (goto_statement "goto LAB_00064370;" goto statement_identifier ;) })) (expression_statement "local_94 = local_94 + -1;" (assignment_expression "local_94 = local_94 + -1" identifier = (binary_expression "local_94 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_94 != -1)" ( (binary_expression "local_94 != -1" identifier != number_literal) )) ;) (expression_statement "local_78 = local_78 + 1;" (assignment_expression "local_78 = local_78 + 1" identifier = (binary_expression "local_78 + 1" identifier + number_literal)) ;) (expression_statement "puVar6 = puVar6 + -1;" (assignment_expression "puVar6 = puVar6 + -1" identifier = (binary_expression "puVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar24 != local_78)" ( (binary_expression "iVar24 != local_78" identifier != identifier) )) ;) })) (goto_statement "goto LAB_000645c6;" goto statement_identifier ;) (labeled_statement "LAB_0006412f:\n  *piVar9 = 0;" statement_identifier : (expression_statement "*piVar9 = 0;" (assignment_expression "*piVar9 = 0" (pointer_expression "*piVar9" * identifier) = number_literal) ;)) (goto_statement "goto joined_r0x00064127;" goto statement_identifier ;) (while_statement "while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }" { (expression_statement "local_78 = local_78 + 1;" (assignment_expression "local_78 = local_78 + 1" identifier = (binary_expression "local_78 + 1" identifier + number_literal)) ;) (expression_statement "local_94 = 0x1f;" (assignment_expression "local_94 = 0x1f" identifier = number_literal) ;) (if_statement "if (*param_2 <= local_78) break;" if (parenthesized_expression "(*param_2 <= local_78)" ( (binary_expression "*param_2 <= local_78" (pointer_expression "*param_2" * identifier) <= identifier) )) (break_statement "break;" break ;)) (labeled_statement "LAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);" statement_identifier : (do_statement "do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);" do (compound_statement "{\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    }" { (expression_statement "FUN_0005f530(uVar7,__s);" (call_expression "FUN_0005f530(uVar7,__s)" identifier (argument_list "(uVar7,__s)" ( identifier , identifier ))) ;) (expression_statement "puVar6 = (uint *)(iVar28 + __n);" (assignment_expression "puVar6 = (uint *)(iVar28 + __n)" identifier = (cast_expression "(uint *)(iVar28 + __n)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + __n)" ( (binary_expression "iVar28 + __n" identifier + identifier) )))) ;) (if_statement "if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }" if (parenthesized_expression "((int)uVar7 < 0x33)" ( (binary_expression "(int)uVar7 < 0x33" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }" { (if_statement "if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          memset(__s,0,__n);\n        }" { (expression_statement "memset(__s,0,__n);" (call_expression "memset(__s,0,__n)" identifier (argument_list "(__s,0,__n)" ( identifier , number_literal , identifier ))) ;) })) (expression_statement "local_b0 = puVar6 + uVar7;" (assignment_expression "local_b0 = puVar6 + uVar7" identifier = (binary_expression "puVar6 + uVar7" identifier + identifier)) ;) (if_statement "if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }" if (parenthesized_expression "((puVar6 < local_b0) && (__s < pvVar16))" ( (binary_expression "(puVar6 < local_b0) && (__s < pvVar16)" (parenthesized_expression "(puVar6 < local_b0)" ( (binary_expression "puVar6 < local_b0" identifier < identifier) )) && (parenthesized_expression "(__s < pvVar16)" ( (binary_expression "__s < pvVar16" identifier < identifier) ))) )) (compound_statement "{\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }" { (expression_statement "pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);" (assignment_expression "pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16)" identifier = (cast_expression "(void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((int)puVar6 - (int)local_b0) + (int)pvVar16)" ( (binary_expression "((int)puVar6 - (int)local_b0) + (int)pvVar16" (parenthesized_expression "((int)puVar6 - (int)local_b0)" ( (binary_expression "(int)puVar6 - (int)local_b0" (cast_expression "(int)puVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)local_b0" ( (type_descriptor "int" primitive_type) ) identifier)) )) + (cast_expression "(int)pvVar16" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "pvVar27 = pvVar16;" (assignment_expression "pvVar27 = pvVar16" identifier = identifier) ;) (if_statement "if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }" if (parenthesized_expression "(pvVar18 < __s)" ( (binary_expression "pvVar18 < __s" identifier < identifier) )) (compound_statement "{\n            pvVar18 = __s;\n          }" { (expression_statement "pvVar18 = __s;" (assignment_expression "pvVar18 = __s" identifier = identifier) ;) })) (do_statement "do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);" do (compound_statement "{\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          }" { (expression_statement "local_b0 = local_b0 + -1;" (assignment_expression "local_b0 = local_b0 + -1" identifier = (binary_expression "local_b0 + -1" identifier + number_literal)) ;) (expression_statement "local_b8 = 0;" (assignment_expression "local_b8 = 0" identifier = number_literal) ;) (expression_statement "pvVar22 = pvVar27;" (assignment_expression "pvVar22 = pvVar27" identifier = identifier) ;) (expression_statement "puVar8 = (uint *)(local_60 + -4 + __n);" (assignment_expression "puVar8 = (uint *)(local_60 + -4 + __n)" identifier = (cast_expression "(uint *)(local_60 + -4 + __n)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + -4 + __n)" ( (binary_expression "local_60 + -4 + __n" (binary_expression "local_60 + -4" identifier + number_literal) + identifier) )))) ;) (do_statement "do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);" do (compound_statement "{\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            }" { (expression_statement "lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;" (assignment_expression "lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8" identifier = (binary_expression "(ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8" (binary_expression "(ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4)" (binary_expression "(ulonglong)*puVar8 * (ulonglong)*local_b0" (binary_expression "(ulonglong)*puVar8 * (ulonglong)" (binary_expression "(ulonglong)*puVar8" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) + (binary_expression "(ulonglong)*(uint *)((int)pvVar22 + -4)" (parenthesized_expression "(ulonglong)" ( identifier )) * (cast_expression "(uint *)((int)pvVar22 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar22 + -4)" ( (binary_expression "(int)pvVar22 + -4" (cast_expression "(int)pvVar22" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) + (cast_expression "(ulonglong)local_b8" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "local_b8 = (uint)((ulonglong)lVar4 >> 0x20);" (assignment_expression "local_b8 = (uint)((ulonglong)lVar4 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar4 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar4 >> 0x20)" ( (binary_expression "(ulonglong)lVar4 >> 0x20" (cast_expression "(ulonglong)lVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "*(int *)((int)pvVar22 + -4) = (int)lVar4;" (assignment_expression "*(int *)((int)pvVar22 + -4) = (int)lVar4" (pointer_expression "*(int *)((int)pvVar22 + -4)" * (cast_expression "(int *)((int)pvVar22 + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar22 + -4)" ( (binary_expression "(int)pvVar22 + -4" (cast_expression "(int)pvVar22" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) (expression_statement "pvVar22 = (void *)((int)pvVar22 + -4);" (assignment_expression "pvVar22 = (void *)((int)pvVar22 + -4)" identifier = (cast_expression "(void *)((int)pvVar22 + -4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar22 + -4)" ( (binary_expression "(int)pvVar22 + -4" (cast_expression "(int)pvVar22" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(__s < pvVar22)" ( (binary_expression "__s < pvVar22" identifier < identifier) )) ;) (expression_statement "pvVar27 = (void *)((int)pvVar27 + -4);" (assignment_expression "pvVar27 = (void *)((int)pvVar27 + -4)" identifier = (cast_expression "(void *)((int)pvVar27 + -4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar27 + -4)" ( (binary_expression "(int)pvVar27 + -4" (cast_expression "(int)pvVar27" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(pvVar18 < pvVar27)" ( (binary_expression "pvVar18 < pvVar27" identifier < identifier) )) ;) })) (expression_statement "FUN_0005f530(uVar7,pvVar2);" (call_expression "FUN_0005f530(uVar7,pvVar2)" identifier (argument_list "(uVar7,pvVar2)" ( identifier , identifier ))) ;) (if_statement "if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }" if (parenthesized_expression "(iVar31 < 0)" ( (binary_expression "iVar31 < 0" identifier < number_literal) )) (compound_statement "{\n          uVar15 = 0;\n        }" { (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) }) (else_clause "else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }" else (compound_statement "{\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }" { (labeled_statement "LAB_00064484:\n          uVar15 = 0;" statement_identifier : (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;)) (expression_statement "iVar21 = iVar31;" (assignment_expression "iVar21 = iVar31" identifier = identifier) ;) (do_statement "do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);" do (compound_statement "{\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          }" { (expression_statement "uVar13 = *(uint *)(iVar28 + iVar21 * 4);" (assignment_expression "uVar13 = *(uint *)(iVar28 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)(iVar28 + iVar21 * 4)" * (cast_expression "(uint *)(iVar28 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + iVar21 * 4)" ( (binary_expression "iVar28 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);" (assignment_expression "uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar16 + iVar21 * 4)" * (cast_expression "(uint *)((int)pvVar16 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar16 + iVar21 * 4)" ( (binary_expression "(int)pvVar16 + iVar21 * 4" (cast_expression "(int)pvVar16" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar30 = uVar14 + uVar13;" (assignment_expression "uVar30 = uVar14 + uVar13" identifier = (binary_expression "uVar14 + uVar13" identifier + identifier)) ;) (expression_statement "iVar23 = uVar30 + uVar15;" (assignment_expression "iVar23 = uVar30 + uVar15" identifier = (binary_expression "uVar30 + uVar15" identifier + identifier)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);" (assignment_expression "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" identifier = (binary_expression "(uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (cast_expression "(uint)CARRY4(uVar14,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar14,uVar13)" identifier (argument_list "(uVar14,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar30,uVar15)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar30,uVar15)" identifier (argument_list "(uVar30,uVar15)" ( identifier , identifier )))))) ;) (expression_statement "*(int *)(iVar28 + iVar21 * 4) = iVar23;" (assignment_expression "*(int *)(iVar28 + iVar21 * 4) = iVar23" (pointer_expression "*(int *)(iVar28 + iVar21 * 4)" * (cast_expression "(int *)(iVar28 + iVar21 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + iVar21 * 4)" ( (binary_expression "iVar28 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;) }))) (if_statement "if (0 < (int)uVar7) goto LAB_000644bf;" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_000644bf;" goto statement_identifier ;)) (labeled_statement "LAB_00064525:\n        iVar21 = iVar1;" statement_identifier : (expression_statement "iVar21 = iVar1;" (assignment_expression "iVar21 = iVar1" identifier = identifier) ;)) (expression_statement "uVar15 = uVar5;" (assignment_expression "uVar15 = uVar5" identifier = identifier) ;) (if_statement "if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }" if (parenthesized_expression "(-1 < iVar1)" ( (binary_expression "-1 < iVar1" number_literal < identifier) )) (compound_statement "{\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }" { (do_statement "do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);" do (compound_statement "{\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          }" { (expression_statement "uVar13 = puVar6[iVar21];" (assignment_expression "uVar13 = puVar6[iVar21]" identifier = (subscript_expression "puVar6[iVar21]" identifier [ identifier ])) ;) (expression_statement "uVar30 = uVar15 + uVar13;" (assignment_expression "uVar30 = uVar15 + uVar13" identifier = (binary_expression "uVar15 + uVar13" identifier + identifier)) ;) (expression_statement "uVar14 = puVar11[iVar21];" (assignment_expression "uVar14 = puVar11[iVar21]" identifier = (subscript_expression "puVar11[iVar21]" identifier [ identifier ])) ;) (expression_statement "puVar6[iVar21] = ~uVar14 + uVar30;" (assignment_expression "puVar6[iVar21] = ~uVar14 + uVar30" (subscript_expression "puVar6[iVar21]" identifier [ identifier ]) = (binary_expression "~uVar14 + uVar30" (unary_expression "~uVar14" ~ identifier) + identifier)) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);" (assignment_expression "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30)" identifier = (binary_expression "(uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30)" (cast_expression "(uint)CARRY4(uVar15,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar15,uVar13)" identifier (argument_list "(uVar15,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(~uVar14,uVar30)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(~uVar14,uVar30)" identifier (argument_list "(~uVar14,uVar30)" ( (unary_expression "~uVar14" ~ identifier) , identifier )))))) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;) })) }) (else_clause "else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }" else (compound_statement "{\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }" { (expression_statement "FUN_0005f530(iVar17,pvVar3);" (call_expression "FUN_0005f530(iVar17,pvVar3)" identifier (argument_list "(iVar17,pvVar3)" ( identifier , identifier ))) ;) (expression_statement "FUN_0005f970(iVar25,pvVar3);" (call_expression "FUN_0005f970(iVar25,pvVar3)" identifier (argument_list "(iVar25,pvVar3)" ( identifier , identifier ))) ;) (expression_statement "FUN_0005f970(iVar25,pvVar3);" (call_expression "FUN_0005f970(iVar25,pvVar3)" identifier (argument_list "(iVar25,pvVar3)" ( identifier , identifier ))) ;) (expression_statement "puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);" (assignment_expression "puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4)" identifier = (cast_expression "(undefined4 *)((int)pvVar2 + iVar24 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar24 * 4)" ( (binary_expression "(int)pvVar2 + iVar24 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar24 * 4" identifier * number_literal)) )))) ;) (expression_statement "puVar26 = (undefined4 *)((int)__s + iVar25 * 4);" (assignment_expression "puVar26 = (undefined4 *)((int)__s + iVar25 * 4)" identifier = (cast_expression "(undefined4 *)((int)__s + iVar25 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__s + iVar25 * 4)" ( (binary_expression "(int)__s + iVar25 * 4" (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar25 * 4" identifier * number_literal)) )))) ;) (if_statement "if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }" { (do_statement "do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);" do (compound_statement "{\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          }" { (expression_statement "puVar20 = puVar19 + 1;" (assignment_expression "puVar20 = puVar19 + 1" identifier = (binary_expression "puVar19 + 1" identifier + number_literal)) ;) (expression_statement "*puVar26 = *puVar19;" (assignment_expression "*puVar26 = *puVar19" (pointer_expression "*puVar26" * identifier) = (pointer_expression "*puVar19" * identifier)) ;) (expression_statement "puVar19 = puVar20;" (assignment_expression "puVar19 = puVar20" identifier = identifier) ;) (expression_statement "puVar26 = puVar26 + 1;" (assignment_expression "puVar26 = puVar26 + 1" identifier = (binary_expression "puVar26 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20)" ( (binary_expression "(undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20" (cast_expression "(undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + (iVar24 + iVar17) * 4)" ( (binary_expression "(int)pvVar2 + (iVar24 + iVar17) * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(iVar24 + iVar17) * 4" (parenthesized_expression "(iVar24 + iVar17)" ( (binary_expression "iVar24 + iVar17" identifier + identifier) )) * number_literal)) ))) != identifier) )) ;) })) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = iVar25 + -1;" (assignment_expression "iVar21 = iVar25 + -1" identifier = (binary_expression "iVar25 + -1" identifier + number_literal)) ;) (do_statement "do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);" do (compound_statement "{\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        }" { (expression_statement "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);" (assignment_expression "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4)" * (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);" (assignment_expression "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" * (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4 + iVar25 * 4" (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) + (binary_expression "iVar25 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar30 = uVar14 + uVar13;" (assignment_expression "uVar30 = uVar14 + uVar13" identifier = (binary_expression "uVar14 + uVar13" identifier + identifier)) ;) (expression_statement "iVar23 = uVar30 + uVar15;" (assignment_expression "iVar23 = uVar30 + uVar15" identifier = (binary_expression "uVar30 + uVar15" identifier + identifier)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);" (assignment_expression "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" identifier = (binary_expression "(uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (cast_expression "(uint)CARRY4(uVar14,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar14,uVar13)" identifier (argument_list "(uVar14,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar30,uVar15)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar30,uVar15)" identifier (argument_list "(uVar30,uVar15)" ( identifier , identifier )))))) ;) (expression_statement "*(int *)((int)pvVar2 + iVar21 * 4) = iVar23;" (assignment_expression "*(int *)((int)pvVar2 + iVar21 * 4) = iVar23" (pointer_expression "*(int *)((int)pvVar2 + iVar21 * 4)" * (cast_expression "(int *)((int)pvVar2 + iVar21 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = iVar25 + -1;" (assignment_expression "iVar21 = iVar25 + -1" identifier = (binary_expression "iVar25 + -1" identifier + number_literal)) ;) (do_statement "do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);" do (compound_statement "{\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        }" { (expression_statement "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);" (assignment_expression "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" * (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4" (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) + (binary_expression "(iVar24 - iVar25) * 4" (parenthesized_expression "(iVar24 - iVar25)" ( (binary_expression "iVar24 - iVar25" identifier - identifier) )) * number_literal)) ))))) ;) (expression_statement "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);" (assignment_expression "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4)" * (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar30 = uVar14 + uVar13;" (assignment_expression "uVar30 = uVar14 + uVar13" identifier = (binary_expression "uVar14 + uVar13" identifier + identifier)) ;) (expression_statement "iVar23 = uVar30 + uVar15;" (assignment_expression "iVar23 = uVar30 + uVar15" identifier = (binary_expression "uVar30 + uVar15" identifier + identifier)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);" (assignment_expression "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" identifier = (binary_expression "(uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (cast_expression "(uint)CARRY4(uVar14,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar14,uVar13)" identifier (argument_list "(uVar14,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar30,uVar15)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar30,uVar15)" identifier (argument_list "(uVar30,uVar15)" ( identifier , identifier )))))) ;) (expression_statement "*(int *)((int)__s + iVar21 * 4) = iVar23;" (assignment_expression "*(int *)((int)__s + iVar21 * 4) = iVar23" (pointer_expression "*(int *)((int)__s + iVar21 * 4)" * (cast_expression "(int *)((int)__s + iVar21 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__s + iVar21 * 4)" ( (binary_expression "(int)__s + iVar21 * 4" (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;) (expression_statement "FUN_0005f530(uVar7,pvVar2);" (call_expression "FUN_0005f530(uVar7,pvVar2)" identifier (argument_list "(uVar7,pvVar2)" ( identifier , identifier ))) ;) (if_statement "if (-1 < iVar31) goto LAB_00064484;" if (parenthesized_expression "(-1 < iVar31)" ( (binary_expression "-1 < iVar31" number_literal < identifier) )) (goto_statement "goto LAB_00064484;" goto statement_identifier ;)) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (labeled_statement "LAB_000644bf:\n        iVar21 = 0;" statement_identifier : (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;)) (do_statement "do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);" do (compound_statement "{\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        }" { (expression_statement "puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);" (assignment_expression "puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4)" (subscript_expression "puVar6[iVar21]" identifier [ identifier ]) = (pointer_expression "*(uint *)(iVar28 + iVar21 * 4)" * (cast_expression "(uint *)(iVar28 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + iVar21 * 4)" ( (binary_expression "iVar28 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "*(undefined4 *)(iVar28 + iVar21 * 4) = 0;" (assignment_expression "*(undefined4 *)(iVar28 + iVar21 * 4) = 0" (pointer_expression "*(undefined4 *)(iVar28 + iVar21 * 4)" * (cast_expression "(undefined4 *)(iVar28 + iVar21 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + iVar21 * 4)" ( (binary_expression "iVar28 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "iVar21 = iVar21 + 1;" (assignment_expression "iVar21 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 < (int)uVar7)" ( (binary_expression "iVar21 < (int)uVar7" identifier < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (if_statement "if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;" if (parenthesized_expression "((uVar15 != 0) || ((int)uVar7 < 1))" ( (binary_expression "(uVar15 != 0) || ((int)uVar7 < 1)" (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) || (parenthesized_expression "((int)uVar7 < 1)" ( (binary_expression "(int)uVar7 < 1" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) ))) )) (goto_statement "goto LAB_00064525;" goto statement_identifier ;)) (expression_statement "uVar15 = *puVar6;" (assignment_expression "uVar15 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar13 = *puVar11;" (assignment_expression "uVar13 = *puVar11" identifier = (pointer_expression "*puVar11" * identifier)) ;) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) (if_statement "if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }" if (parenthesized_expression "(uVar13 == uVar15)" ( (binary_expression "uVar13 == uVar15" identifier == identifier) )) (compound_statement "{\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }" { (do_statement "do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);" do (compound_statement "{\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          }" { (expression_statement "uVar14 = uVar14 + 1;" (assignment_expression "uVar14 = uVar14 + 1" identifier = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (if_statement "if (uVar7 == uVar14) goto LAB_00064525;" if (parenthesized_expression "(uVar7 == uVar14)" ( (binary_expression "uVar7 == uVar14" identifier == identifier) )) (goto_statement "goto LAB_00064525;" goto statement_identifier ;)) (expression_statement "uVar15 = puVar6[uVar14];" (assignment_expression "uVar15 = puVar6[uVar14]" identifier = (subscript_expression "puVar6[uVar14]" identifier [ identifier ])) ;) (expression_statement "uVar13 = puVar11[uVar14];" (assignment_expression "uVar13 = puVar11[uVar14]" identifier = (subscript_expression "puVar11[uVar14]" identifier [ identifier ])) ;) }) while (parenthesized_expression "(uVar15 == uVar13)" ( (binary_expression "uVar15 == uVar13" identifier == identifier) )) ;) })) (if_statement "if (uVar13 < uVar15) goto LAB_00064525;" if (parenthesized_expression "(uVar13 < uVar15)" ( (binary_expression "uVar13 < uVar15" identifier < identifier) )) (goto_statement "goto LAB_00064525;" goto statement_identifier ;)) }))) (expression_statement "iVar21 = local_88;" (assignment_expression "iVar21 = local_88" identifier = identifier) ;) (if_statement "if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }" if (parenthesized_expression "((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0)" ( (binary_expression "(param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0" (parenthesized_expression "(param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f))" ( (binary_expression "param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)" (subscript_expression "param_2[*param_2 - local_78]" identifier [ (binary_expression "*param_2 - local_78" (pointer_expression "*param_2" * identifier) - identifier) ]) & (binary_expression "1 << ((byte)local_94 & 0x1f)" number_literal << (parenthesized_expression "((byte)local_94 & 0x1f)" ( (binary_expression "(byte)local_94 & 0x1f" (cast_expression "(byte)local_94" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) )) != number_literal) )) (compound_statement "{\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }" { (expression_statement "FUN_0005f530(uVar7,__s);" (call_expression "FUN_0005f530(uVar7,__s)" identifier (argument_list "(uVar7,__s)" ( identifier , identifier ))) ;) (expression_statement "FUN_0005fba0(__s,uVar7);" (call_expression "FUN_0005fba0(__s,uVar7)" identifier (argument_list "(__s,uVar7)" ( identifier , identifier ))) ;) (expression_statement "iVar21 = iVar28;" (assignment_expression "iVar21 = iVar28" identifier = identifier) ;) (expression_statement "iVar28 = local_88;" (assignment_expression "iVar28 = local_88" identifier = identifier) ;) })) (expression_statement "local_88 = iVar28;" (assignment_expression "local_88 = iVar28" identifier = identifier) ;) (expression_statement "local_94 = local_94 + -1;" (assignment_expression "local_94 = local_94 + -1" identifier = (binary_expression "local_94 + -1" identifier + number_literal)) ;) (expression_statement "iVar28 = iVar21;" (assignment_expression "iVar28 = iVar21" identifier = identifier) ;) }) while (parenthesized_expression "(local_94 != -1)" ( (binary_expression "local_94 != -1" identifier != number_literal) )) ;)) })) (labeled_statement "LAB_000645c6:\n  FUN_0005fba0(__s,uVar7);" statement_identifier : (expression_statement "FUN_0005fba0(__s,uVar7);" (call_expression "FUN_0005fba0(__s,uVar7)" identifier (argument_list "(__s,uVar7)" ( identifier , identifier ))) ;)) (expression_statement "uVar5 = *param_3;" (assignment_expression "uVar5 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }" if (parenthesized_expression "(uVar5 < 0x3ffffff)" ( (binary_expression "uVar5 < 0x3ffffff" identifier < number_literal) )) (compound_statement "{\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }" { (expression_statement "puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);" (assignment_expression "puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar5 + 1,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar5 + 1,4)" identifier (argument_list "(uVar5 + 1,4)" ( (binary_expression "uVar5 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(puVar6,0,(uVar5 + 1) * 4);" (call_expression "memset(puVar6,0,(uVar5 + 1) * 4)" identifier (argument_list "(puVar6,0,(uVar5 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar5 + 1) * 4" (parenthesized_expression "(uVar5 + 1)" ( (binary_expression "uVar5 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*puVar6 = uVar5;" (assignment_expression "*puVar6 = uVar5" (pointer_expression "*puVar6" * identifier) = identifier) ;) (if_statement "if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }" { (expression_statement "puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);" (assignment_expression "puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4)" (subscript_expression "puVar6[uVar5]" identifier [ identifier ]) = (pointer_expression "*(uint *)(local_88 + uVar7 * 4)" * (cast_expression "(uint *)(local_88 + uVar7 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_88 + uVar7 * 4)" ( (binary_expression "local_88 + uVar7 * 4" identifier + (binary_expression "uVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (if_statement "if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }" if (parenthesized_expression "(uVar7 != 1)" ( (binary_expression "uVar7 != 1" identifier != number_literal) )) (compound_statement "{\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }" { (do_statement "do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);" do (compound_statement "{\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        }" { (expression_statement "iVar1 = uVar5 * 4;" (assignment_expression "iVar1 = uVar5 * 4" identifier = (binary_expression "uVar5 * 4" identifier * number_literal)) ;) (expression_statement "iVar24 = *puVar6 - uVar5;" (assignment_expression "iVar24 = *puVar6 - uVar5" identifier = (binary_expression "*puVar6 - uVar5" (pointer_expression "*puVar6" * identifier) - identifier)) ;) (expression_statement "uVar5 = uVar5 + 1;" (assignment_expression "uVar5 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) (expression_statement "puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);" (assignment_expression "puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1)" (subscript_expression "puVar6[iVar24]" identifier [ identifier ]) = (pointer_expression "*(uint *)(local_88 + uVar7 * 4 + iVar1)" * (cast_expression "(uint *)(local_88 + uVar7 * 4 + iVar1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_88 + uVar7 * 4 + iVar1)" ( (binary_expression "local_88 + uVar7 * 4 + iVar1" (binary_expression "local_88 + uVar7 * 4" identifier + (binary_expression "uVar7 * 4" identifier * number_literal)) + identifier) ))))) ;) }) while (parenthesized_expression "(uVar7 != uVar5)" ( (binary_expression "uVar7 != uVar5" identifier != identifier) )) ;) })) (expression_statement "uVar5 = *puVar6;" (assignment_expression "uVar5 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) })) (if_statement "if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }" { (expression_statement "uVar15 = puVar6[uVar5];" (assignment_expression "uVar15 = puVar6[uVar5]" identifier = (subscript_expression "puVar6[uVar5]" identifier [ identifier ])) ;) (while_statement "while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }" while (parenthesized_expression "(uVar15 == 0)" ( (binary_expression "uVar15 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (expression_statement "*puVar6 = uVar5;" (assignment_expression "*puVar6 = uVar5" (pointer_expression "*puVar6" * identifier) = identifier) ;) (if_statement "if (uVar5 == 1) break;" if (parenthesized_expression "(uVar5 == 1)" ( (binary_expression "uVar5 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar15 = puVar6[uVar5];" (assignment_expression "uVar15 = puVar6[uVar5]" identifier = (subscript_expression "puVar6[uVar5]" identifier [ identifier ])) ;) })) })) (expression_statement "FUN_00032c20(__s,local_20 << 2);" (call_expression "FUN_00032c20(__s,local_20 << 2)" identifier (argument_list "(__s,local_20 << 2)" ( identifier , (binary_expression "local_20 << 2" identifier << number_literal) ))) ;) (expression_statement "FUN_00032b40(__s);" (call_expression "FUN_00032b40(__s)" identifier (argument_list "(__s)" ( identifier ))) ;) (expression_statement "FUN_00032c20(local_88,uVar7 * 8);" (call_expression "FUN_00032c20(local_88,uVar7 * 8)" identifier (argument_list "(local_88,uVar7 * 8)" ( identifier , (binary_expression "uVar7 * 8" identifier * number_literal) ))) ;) (expression_statement "FUN_00032b40(local_88);" (call_expression "FUN_00032b40(local_88)" identifier (argument_list "(local_88)" ( identifier ))) ;) (expression_statement "FUN_00032c20(iVar21,uVar7 * 8);" (call_expression "FUN_00032c20(iVar21,uVar7 * 8)" identifier (argument_list "(iVar21,uVar7 * 8)" ( identifier , (binary_expression "uVar7 * 8" identifier * number_literal) ))) ;) (expression_statement "FUN_00032b40(iVar21);" (call_expression "FUN_00032b40(iVar21)" identifier (argument_list "(iVar21)" ( identifier ))) ;) (expression_statement "iVar1 = uVar7 * 4;" (assignment_expression "iVar1 = uVar7 * 4" identifier = (binary_expression "uVar7 * 4" identifier * number_literal)) ;) (expression_statement "FUN_00032c20(local_60,iVar1);" (call_expression "FUN_00032c20(local_60,iVar1)" identifier (argument_list "(local_60,iVar1)" ( identifier , identifier ))) ;) (expression_statement "FUN_00032b40(local_60);" (call_expression "FUN_00032b40(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) (expression_statement "FUN_00032c20(puVar11,iVar1);" (call_expression "FUN_00032c20(puVar11,iVar1)" identifier (argument_list "(puVar11,iVar1)" ( identifier , identifier ))) ;) (expression_statement "FUN_00032b40(puVar11);" (call_expression "FUN_00032b40(puVar11)" identifier (argument_list "(puVar11)" ( identifier ))) ;) (expression_statement "FUN_00032c20(local_54,iVar1);" (call_expression "FUN_00032c20(local_54,iVar1)" identifier (argument_list "(local_54,iVar1)" ( identifier , identifier ))) ;) (expression_statement "FUN_00032b40(local_54);" (call_expression "FUN_00032b40(local_54)" identifier (argument_list "(local_54)" ( identifier ))) ;) (return_statement "return puVar6;" return identifier ;) })) (labeled_statement "LAB_00064ab0:\n                    /* WARNING: Subroutine does not return */\n  FUN_0005f500();" statement_identifier : comment (expression_statement "FUN_0005f500();" (call_expression "FUN_0005f500()" identifier (argument_list "()" ( ))) ;)) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n/* WARNING: Unknown calling convention */\n\nBignum_conflict modpow(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)\n\n{\n  int iVar1;\n  BignumInt *__n;\n  size_t n;\n  BignumInt *b;\n  BignumInt *a;\n  longlong lVar2;\n  uint uVar3;\n  Bignum_conflict pBVar4;\n  uint uVar5;\n  Bignum_conflict modulus;\n  Bignum_conflict b_00;\n  Bignum_conflict b_01;\n  BignumInt *n_00;\n  BignumInt *pBVar6;\n  BignumInt *pBVar7;\n  BignumInt *pBVar8;\n  BignumInt *pBVar9;\n  BignumInt *a_00;\n  BignumInt *pBVar10;\n  BignumInt *pBVar11;\n  uint *puVar12;\n  int iVar13;\n  BignumInt *pBVar14;\n  uint uVar15;\n  BignumInt BVar16;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  BignumInt BVar20;\n  BignumInt *pBVar21;\n  BignumInt *pBVar22;\n  uint uVar23;\n  int iVar24;\n  bool bVar25;\n  int in_stack_ffffff40;\n  BignumInt *in_stack_ffffff44;\n  uint local_b8;\n  BignumInt *local_b0;\n  int local_94;\n  BignumInt *local_88;\n  BignumInt local_78;\n  BignumInt *local_60;\n  void *local_54;\n  size_t local_20;\n  \n  uVar5 = *mod;\n  if (mod[uVar5] == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar3 = mod[1] & 1;\n  if (uVar3 == 0) {\n    pBVar4 = modpow_simple(base_in,exp,mod);\n    return pBVar4;\n  }\n  if (0x3fffffe < uVar5) goto LAB_00064ab0;\n  pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);\n  memset(pBVar4,0,(uVar5 + 1) * 4);\n  *pBVar4 = uVar5;\n  bigdivmod(base_in,mod,pBVar4,(Bignum_conflict)0x0);\n  uVar5 = *pBVar4;\n  if (1 < uVar5) {\n    BVar16 = pBVar4[uVar5];\n    while (BVar16 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n      if (uVar5 == 1) break;\n      BVar16 = pBVar4[uVar5];\n    }\n  }\n  a = (BignumInt *)*mod;\n  if ((int)a * 0x20 < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar5 = (int)a + 1;\n  if (0x3fffffe < uVar5) goto LAB_00064ab0;\n  modulus = (Bignum_conflict)safemalloc((int)a + 2U,4);\n  memset(modulus,0,((int)a + 2U) * 4);\n  *modulus = uVar5;\n  if ((int)(uVar5 * 0x20) <= (int)a * 0x20) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  modulus[(int)a + 1] = modulus[(int)a + 1] | 1;\n  b_00 = modinv(mod,modulus);\n  if (b_00 == (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  b_01 = modmul(pBVar4,modulus,mod);\n  smemclr(pBVar4,*pBVar4 * 4 + 4);\n  safefree(pBVar4);\n  uVar5 = *mod;\n  if (0x3fffffe < uVar5) goto LAB_00064ab0;\n  pBVar22 = (BignumInt *)((uVar5 + 1) * 4);\n  pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);\n  memset(pBVar4,0,(size_t)pBVar22);\n  *pBVar4 = uVar5;\n  bigdivmod(modulus,mod,pBVar4,(Bignum_conflict)0x0);\n  uVar5 = *pBVar4;\n  if (1 < uVar5) {\n    do {\n      if (pBVar4[uVar5] != 0) break;\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n    } while (uVar5 != 1);\n  }\n  smemclr(modulus,*modulus * 4 + 4);\n  safefree(modulus);\n  n_00 = (BignumInt *)safemalloc((size_t)a,4);\n  iVar1 = (int)a + -1;\n  pBVar7 = n_00 + iVar1;\n  pBVar6 = mod;\n  iVar13 = iVar1;\n  uVar5 = uVar3;\n  if ((int)a < 1) {\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    BVar16 = *b_01;\n  }\n  else {\n    do {\n      pBVar6 = pBVar6 + 1;\n      *pBVar7 = *pBVar6;\n      bVar25 = n_00 != pBVar7;\n      pBVar7 = pBVar7 + -1;\n    } while (bVar25);\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    pBVar6 = (BignumInt *)0x0;\n    pBVar22 = local_60 + iVar1;\n    do {\n      while ((int)*b_00 <= (int)pBVar6) {\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }\n      iVar18 = (int)pBVar6 + 1;\n      pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n      *pBVar22 = b_00[iVar18];\n      pBVar22 = pBVar22 + -1;\n    } while (pBVar6 != a);\nLAB_0006405b:\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    pBVar22 = (BignumInt *)((int)a * 4);\n    memset(local_54,0,(size_t)pBVar22);\nLAB_000640c0:\n    do {\n      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);\n      uVar23 = uVar5 + uVar15;\n      uVar17 = local_60[iVar13];\n      local_60[iVar13] = ~uVar17 + uVar23;\n      iVar13 = iVar13 + -1;\n      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n    } while (iVar13 != -1);\n    BVar16 = *b_01;\n    if (0 < (int)a) {\n      pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);\n      pBVar7 = (BignumInt *)0x0;\n      if ((int)BVar16 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *pBVar6 = b_01[(int)pBVar7 + 1];\njoined_r0x00064127:\n      pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n      if (pBVar7 == a) {\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }\n      pBVar6 = pBVar6 + -1;\n      if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  smemclr(b_01,BVar16 * 4 + 4);\n  safefree(b_01);\n  local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n  pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n  smemclr(pBVar4,*pBVar4 * 4 + 4);\n  safefree(pBVar4);\n  local_20 = (int)a * 3;\nLAB_0006421b:\n  pBVar6 = (BignumInt *)safemalloc(local_20,4);\n  BVar16 = *exp;\n  local_78 = 0;\n  puVar12 = exp + BVar16;\n  if (0 < (int)BVar16) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar12 = puVar12 + -1;\n    } while (BVar16 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *pBVar6 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if ((int)*exp <= (int)local_78) break;\nLAB_00064370:\n    do {\n      internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n      pBVar8 = pBVar21 + (int)a;\n      if ((int)a < 0x33) {\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }\n      else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }\n      pBVar8 = local_88;\n      if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }\n      local_88 = pBVar21;\n      local_94 = local_94 + -1;\n      pBVar21 = pBVar8;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n  uVar5 = *mod;\n  if (uVar5 < 0x3ffffff) {\n    puVar12 = (uint *)safemalloc(uVar5 + 1,4);\n    memset(puVar12,0,(uVar5 + 1) * 4);\n    *puVar12 = uVar5;\n    if (0 < (int)a) {\n      puVar12[uVar5] = local_88[(int)a];\n      pBVar22 = (BignumInt *)0x1;\n      if (a != (BignumInt *)0x1) {\n        do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);\n      }\n      uVar5 = *puVar12;\n    }\n    if (1 < uVar5) {\n      uVar3 = puVar12[uVar5];\n      while (uVar3 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar12 = uVar5;\n        if (uVar5 == 1) break;\n        uVar3 = puVar12[uVar5];\n      }\n    }\n    smemclr(pBVar6,local_20 << 2);\n    safefree(pBVar6);\n    smemclr(local_88,(int)a * 8);\n    safefree(local_88);\n    smemclr(pBVar8,(int)a * 8);\n    safefree(pBVar8);\n    n = (int)a * 4;\n    smemclr(local_60,n);\n    safefree(local_60);\n    smemclr(n_00,n);\n    safefree(n_00);\n    smemclr(local_54,n);\n    safefree(local_54);\n    return puVar12;\n  }\nLAB_00064ab0:\n                    /* WARNING: Subroutine does not return */\n  newbn((int)in_stack_ffffff44);\n}\n\n" comment comment (function_definition "Bignum_conflict modpow(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)\n\n{\n  int iVar1;\n  BignumInt *__n;\n  size_t n;\n  BignumInt *b;\n  BignumInt *a;\n  longlong lVar2;\n  uint uVar3;\n  Bignum_conflict pBVar4;\n  uint uVar5;\n  Bignum_conflict modulus;\n  Bignum_conflict b_00;\n  Bignum_conflict b_01;\n  BignumInt *n_00;\n  BignumInt *pBVar6;\n  BignumInt *pBVar7;\n  BignumInt *pBVar8;\n  BignumInt *pBVar9;\n  BignumInt *a_00;\n  BignumInt *pBVar10;\n  BignumInt *pBVar11;\n  uint *puVar12;\n  int iVar13;\n  BignumInt *pBVar14;\n  uint uVar15;\n  BignumInt BVar16;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  BignumInt BVar20;\n  BignumInt *pBVar21;\n  BignumInt *pBVar22;\n  uint uVar23;\n  int iVar24;\n  bool bVar25;\n  int in_stack_ffffff40;\n  BignumInt *in_stack_ffffff44;\n  uint local_b8;\n  BignumInt *local_b0;\n  int local_94;\n  BignumInt *local_88;\n  BignumInt local_78;\n  BignumInt *local_60;\n  void *local_54;\n  size_t local_20;\n  \n  uVar5 = *mod;\n  if (mod[uVar5] == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar3 = mod[1] & 1;\n  if (uVar3 == 0) {\n    pBVar4 = modpow_simple(base_in,exp,mod);\n    return pBVar4;\n  }\n  if (0x3fffffe < uVar5) goto LAB_00064ab0;\n  pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);\n  memset(pBVar4,0,(uVar5 + 1) * 4);\n  *pBVar4 = uVar5;\n  bigdivmod(base_in,mod,pBVar4,(Bignum_conflict)0x0);\n  uVar5 = *pBVar4;\n  if (1 < uVar5) {\n    BVar16 = pBVar4[uVar5];\n    while (BVar16 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n      if (uVar5 == 1) break;\n      BVar16 = pBVar4[uVar5];\n    }\n  }\n  a = (BignumInt *)*mod;\n  if ((int)a * 0x20 < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar5 = (int)a + 1;\n  if (0x3fffffe < uVar5) goto LAB_00064ab0;\n  modulus = (Bignum_conflict)safemalloc((int)a + 2U,4);\n  memset(modulus,0,((int)a + 2U) * 4);\n  *modulus = uVar5;\n  if ((int)(uVar5 * 0x20) <= (int)a * 0x20) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  modulus[(int)a + 1] = modulus[(int)a + 1] | 1;\n  b_00 = modinv(mod,modulus);\n  if (b_00 == (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  b_01 = modmul(pBVar4,modulus,mod);\n  smemclr(pBVar4,*pBVar4 * 4 + 4);\n  safefree(pBVar4);\n  uVar5 = *mod;\n  if (0x3fffffe < uVar5) goto LAB_00064ab0;\n  pBVar22 = (BignumInt *)((uVar5 + 1) * 4);\n  pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);\n  memset(pBVar4,0,(size_t)pBVar22);\n  *pBVar4 = uVar5;\n  bigdivmod(modulus,mod,pBVar4,(Bignum_conflict)0x0);\n  uVar5 = *pBVar4;\n  if (1 < uVar5) {\n    do {\n      if (pBVar4[uVar5] != 0) break;\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n    } while (uVar5 != 1);\n  }\n  smemclr(modulus,*modulus * 4 + 4);\n  safefree(modulus);\n  n_00 = (BignumInt *)safemalloc((size_t)a,4);\n  iVar1 = (int)a + -1;\n  pBVar7 = n_00 + iVar1;\n  pBVar6 = mod;\n  iVar13 = iVar1;\n  uVar5 = uVar3;\n  if ((int)a < 1) {\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    BVar16 = *b_01;\n  }\n  else {\n    do {\n      pBVar6 = pBVar6 + 1;\n      *pBVar7 = *pBVar6;\n      bVar25 = n_00 != pBVar7;\n      pBVar7 = pBVar7 + -1;\n    } while (bVar25);\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    pBVar6 = (BignumInt *)0x0;\n    pBVar22 = local_60 + iVar1;\n    do {\n      while ((int)*b_00 <= (int)pBVar6) {\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }\n      iVar18 = (int)pBVar6 + 1;\n      pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n      *pBVar22 = b_00[iVar18];\n      pBVar22 = pBVar22 + -1;\n    } while (pBVar6 != a);\nLAB_0006405b:\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    pBVar22 = (BignumInt *)((int)a * 4);\n    memset(local_54,0,(size_t)pBVar22);\nLAB_000640c0:\n    do {\n      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);\n      uVar23 = uVar5 + uVar15;\n      uVar17 = local_60[iVar13];\n      local_60[iVar13] = ~uVar17 + uVar23;\n      iVar13 = iVar13 + -1;\n      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n    } while (iVar13 != -1);\n    BVar16 = *b_01;\n    if (0 < (int)a) {\n      pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);\n      pBVar7 = (BignumInt *)0x0;\n      if ((int)BVar16 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *pBVar6 = b_01[(int)pBVar7 + 1];\njoined_r0x00064127:\n      pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n      if (pBVar7 == a) {\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }\n      pBVar6 = pBVar6 + -1;\n      if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  smemclr(b_01,BVar16 * 4 + 4);\n  safefree(b_01);\n  local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n  pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n  smemclr(pBVar4,*pBVar4 * 4 + 4);\n  safefree(pBVar4);\n  local_20 = (int)a * 3;\nLAB_0006421b:\n  pBVar6 = (BignumInt *)safemalloc(local_20,4);\n  BVar16 = *exp;\n  local_78 = 0;\n  puVar12 = exp + BVar16;\n  if (0 < (int)BVar16) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar12 = puVar12 + -1;\n    } while (BVar16 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *pBVar6 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if ((int)*exp <= (int)local_78) break;\nLAB_00064370:\n    do {\n      internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n      pBVar8 = pBVar21 + (int)a;\n      if ((int)a < 0x33) {\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }\n      else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }\n      pBVar8 = local_88;\n      if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }\n      local_88 = pBVar21;\n      local_94 = local_94 + -1;\n      pBVar21 = pBVar8;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n  uVar5 = *mod;\n  if (uVar5 < 0x3ffffff) {\n    puVar12 = (uint *)safemalloc(uVar5 + 1,4);\n    memset(puVar12,0,(uVar5 + 1) * 4);\n    *puVar12 = uVar5;\n    if (0 < (int)a) {\n      puVar12[uVar5] = local_88[(int)a];\n      pBVar22 = (BignumInt *)0x1;\n      if (a != (BignumInt *)0x1) {\n        do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);\n      }\n      uVar5 = *puVar12;\n    }\n    if (1 < uVar5) {\n      uVar3 = puVar12[uVar5];\n      while (uVar3 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar12 = uVar5;\n        if (uVar5 == 1) break;\n        uVar3 = puVar12[uVar5];\n      }\n    }\n    smemclr(pBVar6,local_20 << 2);\n    safefree(pBVar6);\n    smemclr(local_88,(int)a * 8);\n    safefree(local_88);\n    smemclr(pBVar8,(int)a * 8);\n    safefree(pBVar8);\n    n = (int)a * 4;\n    smemclr(local_60,n);\n    safefree(local_60);\n    smemclr(n_00,n);\n    safefree(n_00);\n    smemclr(local_54,n);\n    safefree(local_54);\n    return puVar12;\n  }\nLAB_00064ab0:\n                    /* WARNING: Subroutine does not return */\n  newbn((int)in_stack_ffffff44);\n}" type_identifier (function_declarator "modpow(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)" identifier (parameter_list "(Bignum_conflict base_in,Bignum_conflict exp,Bignum_conflict mod)" ( (parameter_declaration "Bignum_conflict base_in" type_identifier identifier) , (parameter_declaration "Bignum_conflict exp" type_identifier identifier) , (parameter_declaration "Bignum_conflict mod" type_identifier identifier) ))) (compound_statement "{\n  int iVar1;\n  BignumInt *__n;\n  size_t n;\n  BignumInt *b;\n  BignumInt *a;\n  longlong lVar2;\n  uint uVar3;\n  Bignum_conflict pBVar4;\n  uint uVar5;\n  Bignum_conflict modulus;\n  Bignum_conflict b_00;\n  Bignum_conflict b_01;\n  BignumInt *n_00;\n  BignumInt *pBVar6;\n  BignumInt *pBVar7;\n  BignumInt *pBVar8;\n  BignumInt *pBVar9;\n  BignumInt *a_00;\n  BignumInt *pBVar10;\n  BignumInt *pBVar11;\n  uint *puVar12;\n  int iVar13;\n  BignumInt *pBVar14;\n  uint uVar15;\n  BignumInt BVar16;\n  uint uVar17;\n  int iVar18;\n  int iVar19;\n  BignumInt BVar20;\n  BignumInt *pBVar21;\n  BignumInt *pBVar22;\n  uint uVar23;\n  int iVar24;\n  bool bVar25;\n  int in_stack_ffffff40;\n  BignumInt *in_stack_ffffff44;\n  uint local_b8;\n  BignumInt *local_b0;\n  int local_94;\n  BignumInt *local_88;\n  BignumInt local_78;\n  BignumInt *local_60;\n  void *local_54;\n  size_t local_20;\n  \n  uVar5 = *mod;\n  if (mod[uVar5] == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar3 = mod[1] & 1;\n  if (uVar3 == 0) {\n    pBVar4 = modpow_simple(base_in,exp,mod);\n    return pBVar4;\n  }\n  if (0x3fffffe < uVar5) goto LAB_00064ab0;\n  pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);\n  memset(pBVar4,0,(uVar5 + 1) * 4);\n  *pBVar4 = uVar5;\n  bigdivmod(base_in,mod,pBVar4,(Bignum_conflict)0x0);\n  uVar5 = *pBVar4;\n  if (1 < uVar5) {\n    BVar16 = pBVar4[uVar5];\n    while (BVar16 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n      if (uVar5 == 1) break;\n      BVar16 = pBVar4[uVar5];\n    }\n  }\n  a = (BignumInt *)*mod;\n  if ((int)a * 0x20 < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar5 = (int)a + 1;\n  if (0x3fffffe < uVar5) goto LAB_00064ab0;\n  modulus = (Bignum_conflict)safemalloc((int)a + 2U,4);\n  memset(modulus,0,((int)a + 2U) * 4);\n  *modulus = uVar5;\n  if ((int)(uVar5 * 0x20) <= (int)a * 0x20) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }\n  modulus[(int)a + 1] = modulus[(int)a + 1] | 1;\n  b_00 = modinv(mod,modulus);\n  if (b_00 == (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  b_01 = modmul(pBVar4,modulus,mod);\n  smemclr(pBVar4,*pBVar4 * 4 + 4);\n  safefree(pBVar4);\n  uVar5 = *mod;\n  if (0x3fffffe < uVar5) goto LAB_00064ab0;\n  pBVar22 = (BignumInt *)((uVar5 + 1) * 4);\n  pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);\n  memset(pBVar4,0,(size_t)pBVar22);\n  *pBVar4 = uVar5;\n  bigdivmod(modulus,mod,pBVar4,(Bignum_conflict)0x0);\n  uVar5 = *pBVar4;\n  if (1 < uVar5) {\n    do {\n      if (pBVar4[uVar5] != 0) break;\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n    } while (uVar5 != 1);\n  }\n  smemclr(modulus,*modulus * 4 + 4);\n  safefree(modulus);\n  n_00 = (BignumInt *)safemalloc((size_t)a,4);\n  iVar1 = (int)a + -1;\n  pBVar7 = n_00 + iVar1;\n  pBVar6 = mod;\n  iVar13 = iVar1;\n  uVar5 = uVar3;\n  if ((int)a < 1) {\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    BVar16 = *b_01;\n  }\n  else {\n    do {\n      pBVar6 = pBVar6 + 1;\n      *pBVar7 = *pBVar6;\n      bVar25 = n_00 != pBVar7;\n      pBVar7 = pBVar7 + -1;\n    } while (bVar25);\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    pBVar6 = (BignumInt *)0x0;\n    pBVar22 = local_60 + iVar1;\n    do {\n      while ((int)*b_00 <= (int)pBVar6) {\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }\n      iVar18 = (int)pBVar6 + 1;\n      pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n      *pBVar22 = b_00[iVar18];\n      pBVar22 = pBVar22 + -1;\n    } while (pBVar6 != a);\nLAB_0006405b:\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    pBVar22 = (BignumInt *)((int)a * 4);\n    memset(local_54,0,(size_t)pBVar22);\nLAB_000640c0:\n    do {\n      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);\n      uVar23 = uVar5 + uVar15;\n      uVar17 = local_60[iVar13];\n      local_60[iVar13] = ~uVar17 + uVar23;\n      iVar13 = iVar13 + -1;\n      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n    } while (iVar13 != -1);\n    BVar16 = *b_01;\n    if (0 < (int)a) {\n      pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);\n      pBVar7 = (BignumInt *)0x0;\n      if ((int)BVar16 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *pBVar6 = b_01[(int)pBVar7 + 1];\njoined_r0x00064127:\n      pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n      if (pBVar7 == a) {\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }\n      pBVar6 = pBVar6 + -1;\n      if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  smemclr(b_01,BVar16 * 4 + 4);\n  safefree(b_01);\n  local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n  pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n  smemclr(pBVar4,*pBVar4 * 4 + 4);\n  safefree(pBVar4);\n  local_20 = (int)a * 3;\nLAB_0006421b:\n  pBVar6 = (BignumInt *)safemalloc(local_20,4);\n  BVar16 = *exp;\n  local_78 = 0;\n  puVar12 = exp + BVar16;\n  if (0 < (int)BVar16) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar12 = puVar12 + -1;\n    } while (BVar16 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *pBVar6 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if ((int)*exp <= (int)local_78) break;\nLAB_00064370:\n    do {\n      internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n      pBVar8 = pBVar21 + (int)a;\n      if ((int)a < 0x33) {\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }\n      else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }\n      pBVar8 = local_88;\n      if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }\n      local_88 = pBVar21;\n      local_94 = local_94 + -1;\n      pBVar21 = pBVar8;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n  uVar5 = *mod;\n  if (uVar5 < 0x3ffffff) {\n    puVar12 = (uint *)safemalloc(uVar5 + 1,4);\n    memset(puVar12,0,(uVar5 + 1) * 4);\n    *puVar12 = uVar5;\n    if (0 < (int)a) {\n      puVar12[uVar5] = local_88[(int)a];\n      pBVar22 = (BignumInt *)0x1;\n      if (a != (BignumInt *)0x1) {\n        do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);\n      }\n      uVar5 = *puVar12;\n    }\n    if (1 < uVar5) {\n      uVar3 = puVar12[uVar5];\n      while (uVar3 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar12 = uVar5;\n        if (uVar5 == 1) break;\n        uVar3 = puVar12[uVar5];\n      }\n    }\n    smemclr(pBVar6,local_20 << 2);\n    safefree(pBVar6);\n    smemclr(local_88,(int)a * 8);\n    safefree(local_88);\n    smemclr(pBVar8,(int)a * 8);\n    safefree(pBVar8);\n    n = (int)a * 4;\n    smemclr(local_60,n);\n    safefree(local_60);\n    smemclr(n_00,n);\n    safefree(n_00);\n    smemclr(local_54,n);\n    safefree(local_54);\n    return puVar12;\n  }\nLAB_00064ab0:\n                    /* WARNING: Subroutine does not return */\n  newbn((int)in_stack_ffffff44);\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "BignumInt *__n;" type_identifier (pointer_declarator "*__n" * identifier) ;) (declaration "size_t n;" primitive_type identifier ;) (declaration "BignumInt *b;" type_identifier (pointer_declarator "*b" * identifier) ;) (declaration "BignumInt *a;" type_identifier (pointer_declarator "*a" * identifier) ;) (declaration "longlong lVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "Bignum_conflict pBVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "Bignum_conflict modulus;" type_identifier identifier ;) (declaration "Bignum_conflict b_00;" type_identifier identifier ;) (declaration "Bignum_conflict b_01;" type_identifier identifier ;) (declaration "BignumInt *n_00;" type_identifier (pointer_declarator "*n_00" * identifier) ;) (declaration "BignumInt *pBVar6;" type_identifier (pointer_declarator "*pBVar6" * identifier) ;) (declaration "BignumInt *pBVar7;" type_identifier (pointer_declarator "*pBVar7" * identifier) ;) (declaration "BignumInt *pBVar8;" type_identifier (pointer_declarator "*pBVar8" * identifier) ;) (declaration "BignumInt *pBVar9;" type_identifier (pointer_declarator "*pBVar9" * identifier) ;) (declaration "BignumInt *a_00;" type_identifier (pointer_declarator "*a_00" * identifier) ;) (declaration "BignumInt *pBVar10;" type_identifier (pointer_declarator "*pBVar10" * identifier) ;) (declaration "BignumInt *pBVar11;" type_identifier (pointer_declarator "*pBVar11" * identifier) ;) (declaration "uint *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "int iVar13;" primitive_type identifier ;) (declaration "BignumInt *pBVar14;" type_identifier (pointer_declarator "*pBVar14" * identifier) ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "BignumInt BVar16;" type_identifier identifier ;) (declaration "uint uVar17;" type_identifier identifier ;) (declaration "int iVar18;" primitive_type identifier ;) (declaration "int iVar19;" primitive_type identifier ;) (declaration "BignumInt BVar20;" type_identifier identifier ;) (declaration "BignumInt *pBVar21;" type_identifier (pointer_declarator "*pBVar21" * identifier) ;) (declaration "BignumInt *pBVar22;" type_identifier (pointer_declarator "*pBVar22" * identifier) ;) (declaration "uint uVar23;" type_identifier identifier ;) (declaration "int iVar24;" primitive_type identifier ;) (declaration "bool bVar25;" primitive_type identifier ;) (declaration "int in_stack_ffffff40;" primitive_type identifier ;) (declaration "BignumInt *in_stack_ffffff44;" type_identifier (pointer_declarator "*in_stack_ffffff44" * identifier) ;) (declaration "uint local_b8;" type_identifier identifier ;) (declaration "BignumInt *local_b0;" type_identifier (pointer_declarator "*local_b0" * identifier) ;) (declaration "int local_94;" primitive_type identifier ;) (declaration "BignumInt *local_88;" type_identifier (pointer_declarator "*local_88" * identifier) ;) (declaration "BignumInt local_78;" type_identifier identifier ;) (declaration "BignumInt *local_60;" type_identifier (pointer_declarator "*local_60" * identifier) ;) (declaration "void *local_54;" primitive_type (pointer_declarator "*local_54" * identifier) ;) (declaration "size_t local_20;" primitive_type identifier ;) (expression_statement "uVar5 = *mod;" (assignment_expression "uVar5 = *mod" identifier = (pointer_expression "*mod" * identifier)) ;) (if_statement "if (mod[uVar5] == 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }" if (parenthesized_expression "(mod[uVar5] == 0)" ( (binary_expression "mod[uVar5] == 0" (subscript_expression "mod[uVar5]" identifier [ identifier ]) == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }" { comment (expression_statement "__assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");" (call_expression "__assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow")" identifier (argument_list "("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow")" ( (string_literal ""mod[mod[0]] != 0"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""modpow"" " string_content ") ))) ;) })) (expression_statement "uVar3 = mod[1] & 1;" (assignment_expression "uVar3 = mod[1] & 1" identifier = (binary_expression "mod[1] & 1" (subscript_expression "mod[1]" identifier [ number_literal ]) & number_literal)) ;) (if_statement "if (uVar3 == 0) {\n    pBVar4 = modpow_simple(base_in,exp,mod);\n    return pBVar4;\n  }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    pBVar4 = modpow_simple(base_in,exp,mod);\n    return pBVar4;\n  }" { (expression_statement "pBVar4 = modpow_simple(base_in,exp,mod);" (assignment_expression "pBVar4 = modpow_simple(base_in,exp,mod)" identifier = (call_expression "modpow_simple(base_in,exp,mod)" identifier (argument_list "(base_in,exp,mod)" ( identifier , identifier , identifier )))) ;) (return_statement "return pBVar4;" return identifier ;) })) (if_statement "if (0x3fffffe < uVar5) goto LAB_00064ab0;" if (parenthesized_expression "(0x3fffffe < uVar5)" ( (binary_expression "0x3fffffe < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_00064ab0;" goto statement_identifier ;)) (expression_statement "pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);" (assignment_expression "pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4)" identifier = (cast_expression "(Bignum_conflict)safemalloc(uVar5 + 1,4)" ( (type_descriptor "Bignum_conflict" type_identifier) ) (call_expression "safemalloc(uVar5 + 1,4)" identifier (argument_list "(uVar5 + 1,4)" ( (binary_expression "uVar5 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(pBVar4,0,(uVar5 + 1) * 4);" (call_expression "memset(pBVar4,0,(uVar5 + 1) * 4)" identifier (argument_list "(pBVar4,0,(uVar5 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar5 + 1) * 4" (parenthesized_expression "(uVar5 + 1)" ( (binary_expression "uVar5 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*pBVar4 = uVar5;" (assignment_expression "*pBVar4 = uVar5" (pointer_expression "*pBVar4" * identifier) = identifier) ;) (expression_statement "bigdivmod(base_in,mod,pBVar4,(Bignum_conflict)0x0);" (call_expression "bigdivmod(base_in,mod,pBVar4,(Bignum_conflict)0x0)" identifier (argument_list "(base_in,mod,pBVar4,(Bignum_conflict)0x0)" ( identifier , identifier , identifier , (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal) ))) ;) (expression_statement "uVar5 = *pBVar4;" (assignment_expression "uVar5 = *pBVar4" identifier = (pointer_expression "*pBVar4" * identifier)) ;) (if_statement "if (1 < uVar5) {\n    BVar16 = pBVar4[uVar5];\n    while (BVar16 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n      if (uVar5 == 1) break;\n      BVar16 = pBVar4[uVar5];\n    }\n  }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n    BVar16 = pBVar4[uVar5];\n    while (BVar16 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n      if (uVar5 == 1) break;\n      BVar16 = pBVar4[uVar5];\n    }\n  }" { (expression_statement "BVar16 = pBVar4[uVar5];" (assignment_expression "BVar16 = pBVar4[uVar5]" identifier = (subscript_expression "pBVar4[uVar5]" identifier [ identifier ])) ;) (while_statement "while (BVar16 == 0) {\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n      if (uVar5 == 1) break;\n      BVar16 = pBVar4[uVar5];\n    }" while (parenthesized_expression "(BVar16 == 0)" ( (binary_expression "BVar16 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n      if (uVar5 == 1) break;\n      BVar16 = pBVar4[uVar5];\n    }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (expression_statement "*pBVar4 = uVar5;" (assignment_expression "*pBVar4 = uVar5" (pointer_expression "*pBVar4" * identifier) = identifier) ;) (if_statement "if (uVar5 == 1) break;" if (parenthesized_expression "(uVar5 == 1)" ( (binary_expression "uVar5 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "BVar16 = pBVar4[uVar5];" (assignment_expression "BVar16 = pBVar4[uVar5]" identifier = (subscript_expression "pBVar4[uVar5]" identifier [ identifier ])) ;) })) })) (expression_statement "a = (BignumInt *)*mod;" (assignment_expression "a = (BignumInt *)*mod" identifier = (cast_expression "(BignumInt *)*mod" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*mod" * identifier))) ;) (if_statement "if ((int)a * 0x20 < 0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }" if (parenthesized_expression "((int)a * 0x20 < 0)" ( (binary_expression "(int)a * 0x20 < 0" (binary_expression "(int)a * 0x20" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) < number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }" { comment (expression_statement "__assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");" (call_expression "__assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2")" identifier (argument_list "("n >= 0","sshbn.c",0x51,"bn_power_2")" ( (string_literal ""n >= 0"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""bn_power_2"" " string_content ") ))) ;) })) (expression_statement "uVar5 = (int)a + 1;" (assignment_expression "uVar5 = (int)a + 1" identifier = (binary_expression "(int)a + 1" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (if_statement "if (0x3fffffe < uVar5) goto LAB_00064ab0;" if (parenthesized_expression "(0x3fffffe < uVar5)" ( (binary_expression "0x3fffffe < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_00064ab0;" goto statement_identifier ;)) (expression_statement "modulus = (Bignum_conflict)safemalloc((int)a + 2U,4);" (assignment_expression "modulus = (Bignum_conflict)safemalloc((int)a + 2U,4)" identifier = (cast_expression "(Bignum_conflict)safemalloc((int)a + 2U,4)" ( (type_descriptor "Bignum_conflict" type_identifier) ) (call_expression "safemalloc((int)a + 2U,4)" identifier (argument_list "((int)a + 2U,4)" ( (binary_expression "(int)a + 2U" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) , number_literal ))))) ;) (expression_statement "memset(modulus,0,((int)a + 2U) * 4);" (call_expression "memset(modulus,0,((int)a + 2U) * 4)" identifier (argument_list "(modulus,0,((int)a + 2U) * 4)" ( identifier , number_literal , (binary_expression "((int)a + 2U) * 4" (parenthesized_expression "((int)a + 2U)" ( (binary_expression "(int)a + 2U" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )) * number_literal) ))) ;) (expression_statement "*modulus = uVar5;" (assignment_expression "*modulus = uVar5" (pointer_expression "*modulus" * identifier) = identifier) ;) (if_statement "if ((int)(uVar5 * 0x20) <= (int)a * 0x20) {\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }" if (parenthesized_expression "((int)(uVar5 * 0x20) <= (int)a * 0x20)" ( (binary_expression "(int)(uVar5 * 0x20) <= (int)a * 0x20" (cast_expression "(int)(uVar5 * 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar5 * 0x20)" ( (binary_expression "uVar5 * 0x20" identifier * number_literal) ))) <= (binary_expression "(int)a * 0x20" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    abort();\n  }" { comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "modulus[(int)a + 1] = modulus[(int)a + 1] | 1;" (assignment_expression "modulus[(int)a + 1] = modulus[(int)a + 1] | 1" (subscript_expression "modulus[(int)a + 1]" identifier [ (binary_expression "(int)a + 1" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) = (binary_expression "modulus[(int)a + 1] | 1" (subscript_expression "modulus[(int)a + 1]" identifier [ (binary_expression "(int)a + 1" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ]) | number_literal)) ;) (expression_statement "b_00 = modinv(mod,modulus);" (assignment_expression "b_00 = modinv(mod,modulus)" identifier = (call_expression "modinv(mod,modulus)" identifier (argument_list "(mod,modulus)" ( identifier , identifier )))) ;) (if_statement "if (b_00 == (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }" if (parenthesized_expression "(b_00 == (Bignum_conflict)0x0)" ( (binary_expression "b_00 == (Bignum_conflict)0x0" identifier == (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }" { comment (expression_statement "__assert_fail("inv","sshbn.c",0x443,"modpow");" (call_expression "__assert_fail("inv","sshbn.c",0x443,"modpow")" identifier (argument_list "("inv","sshbn.c",0x443,"modpow")" ( (string_literal ""inv"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""modpow"" " string_content ") ))) ;) })) (expression_statement "b_01 = modmul(pBVar4,modulus,mod);" (assignment_expression "b_01 = modmul(pBVar4,modulus,mod)" identifier = (call_expression "modmul(pBVar4,modulus,mod)" identifier (argument_list "(pBVar4,modulus,mod)" ( identifier , identifier , identifier )))) ;) (expression_statement "smemclr(pBVar4,*pBVar4 * 4 + 4);" (call_expression "smemclr(pBVar4,*pBVar4 * 4 + 4)" identifier (argument_list "(pBVar4,*pBVar4 * 4 + 4)" ( identifier , (binary_expression "*pBVar4 * 4 + 4" (binary_expression "*pBVar4 * 4" (pointer_expression "*pBVar4" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "safefree(pBVar4);" (call_expression "safefree(pBVar4)" identifier (argument_list "(pBVar4)" ( identifier ))) ;) (expression_statement "uVar5 = *mod;" (assignment_expression "uVar5 = *mod" identifier = (pointer_expression "*mod" * identifier)) ;) (if_statement "if (0x3fffffe < uVar5) goto LAB_00064ab0;" if (parenthesized_expression "(0x3fffffe < uVar5)" ( (binary_expression "0x3fffffe < uVar5" number_literal < identifier) )) (goto_statement "goto LAB_00064ab0;" goto statement_identifier ;)) (expression_statement "pBVar22 = (BignumInt *)((uVar5 + 1) * 4);" (assignment_expression "pBVar22 = (BignumInt *)((uVar5 + 1) * 4)" identifier = (cast_expression "(BignumInt *)((uVar5 + 1) * 4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((uVar5 + 1) * 4)" ( (binary_expression "(uVar5 + 1) * 4" (parenthesized_expression "(uVar5 + 1)" ( (binary_expression "uVar5 + 1" identifier + number_literal) )) * number_literal) )))) ;) (expression_statement "pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4);" (assignment_expression "pBVar4 = (Bignum_conflict)safemalloc(uVar5 + 1,4)" identifier = (cast_expression "(Bignum_conflict)safemalloc(uVar5 + 1,4)" ( (type_descriptor "Bignum_conflict" type_identifier) ) (call_expression "safemalloc(uVar5 + 1,4)" identifier (argument_list "(uVar5 + 1,4)" ( (binary_expression "uVar5 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(pBVar4,0,(size_t)pBVar22);" (call_expression "memset(pBVar4,0,(size_t)pBVar22)" identifier (argument_list "(pBVar4,0,(size_t)pBVar22)" ( identifier , number_literal , (cast_expression "(size_t)pBVar22" ( (type_descriptor "size_t" primitive_type) ) identifier) ))) ;) (expression_statement "*pBVar4 = uVar5;" (assignment_expression "*pBVar4 = uVar5" (pointer_expression "*pBVar4" * identifier) = identifier) ;) (expression_statement "bigdivmod(modulus,mod,pBVar4,(Bignum_conflict)0x0);" (call_expression "bigdivmod(modulus,mod,pBVar4,(Bignum_conflict)0x0)" identifier (argument_list "(modulus,mod,pBVar4,(Bignum_conflict)0x0)" ( identifier , identifier , identifier , (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal) ))) ;) (expression_statement "uVar5 = *pBVar4;" (assignment_expression "uVar5 = *pBVar4" identifier = (pointer_expression "*pBVar4" * identifier)) ;) (if_statement "if (1 < uVar5) {\n    do {\n      if (pBVar4[uVar5] != 0) break;\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n    } while (uVar5 != 1);\n  }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n    do {\n      if (pBVar4[uVar5] != 0) break;\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n    } while (uVar5 != 1);\n  }" { (do_statement "do {\n      if (pBVar4[uVar5] != 0) break;\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n    } while (uVar5 != 1);" do (compound_statement "{\n      if (pBVar4[uVar5] != 0) break;\n      uVar5 = uVar5 - 1;\n      *pBVar4 = uVar5;\n    }" { (if_statement "if (pBVar4[uVar5] != 0) break;" if (parenthesized_expression "(pBVar4[uVar5] != 0)" ( (binary_expression "pBVar4[uVar5] != 0" (subscript_expression "pBVar4[uVar5]" identifier [ identifier ]) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (expression_statement "*pBVar4 = uVar5;" (assignment_expression "*pBVar4 = uVar5" (pointer_expression "*pBVar4" * identifier) = identifier) ;) }) while (parenthesized_expression "(uVar5 != 1)" ( (binary_expression "uVar5 != 1" identifier != number_literal) )) ;) })) (expression_statement "smemclr(modulus,*modulus * 4 + 4);" (call_expression "smemclr(modulus,*modulus * 4 + 4)" identifier (argument_list "(modulus,*modulus * 4 + 4)" ( identifier , (binary_expression "*modulus * 4 + 4" (binary_expression "*modulus * 4" (pointer_expression "*modulus" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "safefree(modulus);" (call_expression "safefree(modulus)" identifier (argument_list "(modulus)" ( identifier ))) ;) (expression_statement "n_00 = (BignumInt *)safemalloc((size_t)a,4);" (assignment_expression "n_00 = (BignumInt *)safemalloc((size_t)a,4)" identifier = (cast_expression "(BignumInt *)safemalloc((size_t)a,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc((size_t)a,4)" identifier (argument_list "((size_t)a,4)" ( (cast_expression "(size_t)a" ( (type_descriptor "size_t" primitive_type) ) identifier) , number_literal ))))) ;) (expression_statement "iVar1 = (int)a + -1;" (assignment_expression "iVar1 = (int)a + -1" identifier = (binary_expression "(int)a + -1" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "pBVar7 = n_00 + iVar1;" (assignment_expression "pBVar7 = n_00 + iVar1" identifier = (binary_expression "n_00 + iVar1" identifier + identifier)) ;) (expression_statement "pBVar6 = mod;" (assignment_expression "pBVar6 = mod" identifier = identifier) ;) (expression_statement "iVar13 = iVar1;" (assignment_expression "iVar13 = iVar1" identifier = identifier) ;) (expression_statement "uVar5 = uVar3;" (assignment_expression "uVar5 = uVar3" identifier = identifier) ;) (if_statement "if ((int)a < 1) {\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    BVar16 = *b_01;\n  }\n  else {\n    do {\n      pBVar6 = pBVar6 + 1;\n      *pBVar7 = *pBVar6;\n      bVar25 = n_00 != pBVar7;\n      pBVar7 = pBVar7 + -1;\n    } while (bVar25);\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    pBVar6 = (BignumInt *)0x0;\n    pBVar22 = local_60 + iVar1;\n    do {\n      while ((int)*b_00 <= (int)pBVar6) {\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }\n      iVar18 = (int)pBVar6 + 1;\n      pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n      *pBVar22 = b_00[iVar18];\n      pBVar22 = pBVar22 + -1;\n    } while (pBVar6 != a);\nLAB_0006405b:\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    pBVar22 = (BignumInt *)((int)a * 4);\n    memset(local_54,0,(size_t)pBVar22);\nLAB_000640c0:\n    do {\n      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);\n      uVar23 = uVar5 + uVar15;\n      uVar17 = local_60[iVar13];\n      local_60[iVar13] = ~uVar17 + uVar23;\n      iVar13 = iVar13 + -1;\n      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n    } while (iVar13 != -1);\n    BVar16 = *b_01;\n    if (0 < (int)a) {\n      pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);\n      pBVar7 = (BignumInt *)0x0;\n      if ((int)BVar16 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *pBVar6 = b_01[(int)pBVar7 + 1];\njoined_r0x00064127:\n      pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n      if (pBVar7 == a) {\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }\n      pBVar6 = pBVar6 + -1;\n      if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" if (parenthesized_expression "((int)a < 1)" ( (binary_expression "(int)a < 1" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    BVar16 = *b_01;\n  }" { (expression_statement "local_60 = (BignumInt *)safemalloc((size_t)a,4);" (assignment_expression "local_60 = (BignumInt *)safemalloc((size_t)a,4)" identifier = (cast_expression "(BignumInt *)safemalloc((size_t)a,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc((size_t)a,4)" identifier (argument_list "((size_t)a,4)" ( (cast_expression "(size_t)a" ( (type_descriptor "size_t" primitive_type) ) identifier) , number_literal ))))) ;) (expression_statement "smemclr(b_00,*b_00 * 4 + 4);" (call_expression "smemclr(b_00,*b_00 * 4 + 4)" identifier (argument_list "(b_00,*b_00 * 4 + 4)" ( identifier , (binary_expression "*b_00 * 4 + 4" (binary_expression "*b_00 * 4" (pointer_expression "*b_00" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "safefree(b_00);" (call_expression "safefree(b_00)" identifier (argument_list "(b_00)" ( identifier ))) ;) (expression_statement "local_54 = safemalloc((size_t)a,4);" (assignment_expression "local_54 = safemalloc((size_t)a,4)" identifier = (call_expression "safemalloc((size_t)a,4)" identifier (argument_list "((size_t)a,4)" ( (cast_expression "(size_t)a" ( (type_descriptor "size_t" primitive_type) ) identifier) , number_literal )))) ;) (if_statement "if (-1 < iVar1) goto LAB_000640c0;" if (parenthesized_expression "(-1 < iVar1)" ( (binary_expression "-1 < iVar1" number_literal < identifier) )) (goto_statement "goto LAB_000640c0;" goto statement_identifier ;)) (expression_statement "BVar16 = *b_01;" (assignment_expression "BVar16 = *b_01" identifier = (pointer_expression "*b_01" * identifier)) ;) }) (else_clause "else {\n    do {\n      pBVar6 = pBVar6 + 1;\n      *pBVar7 = *pBVar6;\n      bVar25 = n_00 != pBVar7;\n      pBVar7 = pBVar7 + -1;\n    } while (bVar25);\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    pBVar6 = (BignumInt *)0x0;\n    pBVar22 = local_60 + iVar1;\n    do {\n      while ((int)*b_00 <= (int)pBVar6) {\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }\n      iVar18 = (int)pBVar6 + 1;\n      pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n      *pBVar22 = b_00[iVar18];\n      pBVar22 = pBVar22 + -1;\n    } while (pBVar6 != a);\nLAB_0006405b:\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    pBVar22 = (BignumInt *)((int)a * 4);\n    memset(local_54,0,(size_t)pBVar22);\nLAB_000640c0:\n    do {\n      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);\n      uVar23 = uVar5 + uVar15;\n      uVar17 = local_60[iVar13];\n      local_60[iVar13] = ~uVar17 + uVar23;\n      iVar13 = iVar13 + -1;\n      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n    } while (iVar13 != -1);\n    BVar16 = *b_01;\n    if (0 < (int)a) {\n      pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);\n      pBVar7 = (BignumInt *)0x0;\n      if ((int)BVar16 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *pBVar6 = b_01[(int)pBVar7 + 1];\njoined_r0x00064127:\n      pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n      if (pBVar7 == a) {\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }\n      pBVar6 = pBVar6 + -1;\n      if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" else (compound_statement "{\n    do {\n      pBVar6 = pBVar6 + 1;\n      *pBVar7 = *pBVar6;\n      bVar25 = n_00 != pBVar7;\n      pBVar7 = pBVar7 + -1;\n    } while (bVar25);\n    local_60 = (BignumInt *)safemalloc((size_t)a,4);\n    pBVar6 = (BignumInt *)0x0;\n    pBVar22 = local_60 + iVar1;\n    do {\n      while ((int)*b_00 <= (int)pBVar6) {\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }\n      iVar18 = (int)pBVar6 + 1;\n      pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n      *pBVar22 = b_00[iVar18];\n      pBVar22 = pBVar22 + -1;\n    } while (pBVar6 != a);\nLAB_0006405b:\n    smemclr(b_00,*b_00 * 4 + 4);\n    safefree(b_00);\n    local_54 = safemalloc((size_t)a,4);\n    pBVar22 = (BignumInt *)((int)a * 4);\n    memset(local_54,0,(size_t)pBVar22);\nLAB_000640c0:\n    do {\n      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);\n      uVar23 = uVar5 + uVar15;\n      uVar17 = local_60[iVar13];\n      local_60[iVar13] = ~uVar17 + uVar23;\n      iVar13 = iVar13 + -1;\n      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n    } while (iVar13 != -1);\n    BVar16 = *b_01;\n    if (0 < (int)a) {\n      pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);\n      pBVar7 = (BignumInt *)0x0;\n      if ((int)BVar16 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *pBVar6 = b_01[(int)pBVar7 + 1];\njoined_r0x00064127:\n      pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n      if (pBVar7 == a) {\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }\n      pBVar6 = pBVar6 + -1;\n      if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" { (do_statement "do {\n      pBVar6 = pBVar6 + 1;\n      *pBVar7 = *pBVar6;\n      bVar25 = n_00 != pBVar7;\n      pBVar7 = pBVar7 + -1;\n    } while (bVar25);" do (compound_statement "{\n      pBVar6 = pBVar6 + 1;\n      *pBVar7 = *pBVar6;\n      bVar25 = n_00 != pBVar7;\n      pBVar7 = pBVar7 + -1;\n    }" { (expression_statement "pBVar6 = pBVar6 + 1;" (assignment_expression "pBVar6 = pBVar6 + 1" identifier = (binary_expression "pBVar6 + 1" identifier + number_literal)) ;) (expression_statement "*pBVar7 = *pBVar6;" (assignment_expression "*pBVar7 = *pBVar6" (pointer_expression "*pBVar7" * identifier) = (pointer_expression "*pBVar6" * identifier)) ;) (expression_statement "bVar25 = n_00 != pBVar7;" (assignment_expression "bVar25 = n_00 != pBVar7" identifier = (binary_expression "n_00 != pBVar7" identifier != identifier)) ;) (expression_statement "pBVar7 = pBVar7 + -1;" (assignment_expression "pBVar7 = pBVar7 + -1" identifier = (binary_expression "pBVar7 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar25)" ( identifier )) ;) (expression_statement "local_60 = (BignumInt *)safemalloc((size_t)a,4);" (assignment_expression "local_60 = (BignumInt *)safemalloc((size_t)a,4)" identifier = (cast_expression "(BignumInt *)safemalloc((size_t)a,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc((size_t)a,4)" identifier (argument_list "((size_t)a,4)" ( (cast_expression "(size_t)a" ( (type_descriptor "size_t" primitive_type) ) identifier) , number_literal ))))) ;) (expression_statement "pBVar6 = (BignumInt *)0x0;" (assignment_expression "pBVar6 = (BignumInt *)0x0" identifier = (cast_expression "(BignumInt *)0x0" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pBVar22 = local_60 + iVar1;" (assignment_expression "pBVar22 = local_60 + iVar1" identifier = (binary_expression "local_60 + iVar1" identifier + identifier)) ;) (do_statement "do {\n      while ((int)*b_00 <= (int)pBVar6) {\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }\n      iVar18 = (int)pBVar6 + 1;\n      pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n      *pBVar22 = b_00[iVar18];\n      pBVar22 = pBVar22 + -1;\n    } while (pBVar6 != a);" do (compound_statement "{\n      while ((int)*b_00 <= (int)pBVar6) {\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }\n      iVar18 = (int)pBVar6 + 1;\n      pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n      *pBVar22 = b_00[iVar18];\n      pBVar22 = pBVar22 + -1;\n    }" { (while_statement "while ((int)*b_00 <= (int)pBVar6) {\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }" while (parenthesized_expression "((int)*b_00 <= (int)pBVar6)" ( (binary_expression "(int)*b_00 <= (int)pBVar6" (cast_expression "(int)*b_00" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*b_00" * identifier)) <= (cast_expression "(int)pBVar6" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n        *pBVar22 = 0;\n        pBVar6 = (BignumInt *)((int)pBVar6 + 1);\n        pBVar22 = pBVar22 + -1;\n        if (a == pBVar6) goto LAB_0006405b;\n      }" { (expression_statement "*pBVar22 = 0;" (assignment_expression "*pBVar22 = 0" (pointer_expression "*pBVar22" * identifier) = number_literal) ;) (expression_statement "pBVar6 = (BignumInt *)((int)pBVar6 + 1);" (assignment_expression "pBVar6 = (BignumInt *)((int)pBVar6 + 1)" identifier = (cast_expression "(BignumInt *)((int)pBVar6 + 1)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBVar6 + 1)" ( (binary_expression "(int)pBVar6 + 1" (cast_expression "(int)pBVar6" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "pBVar22 = pBVar22 + -1;" (assignment_expression "pBVar22 = pBVar22 + -1" identifier = (binary_expression "pBVar22 + -1" identifier + number_literal)) ;) (if_statement "if (a == pBVar6) goto LAB_0006405b;" if (parenthesized_expression "(a == pBVar6)" ( (binary_expression "a == pBVar6" identifier == identifier) )) (goto_statement "goto LAB_0006405b;" goto statement_identifier ;)) })) (expression_statement "iVar18 = (int)pBVar6 + 1;" (assignment_expression "iVar18 = (int)pBVar6 + 1" identifier = (binary_expression "(int)pBVar6 + 1" (cast_expression "(int)pBVar6" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal)) ;) (expression_statement "pBVar6 = (BignumInt *)((int)pBVar6 + 1);" (assignment_expression "pBVar6 = (BignumInt *)((int)pBVar6 + 1)" identifier = (cast_expression "(BignumInt *)((int)pBVar6 + 1)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBVar6 + 1)" ( (binary_expression "(int)pBVar6 + 1" (cast_expression "(int)pBVar6" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "*pBVar22 = b_00[iVar18];" (assignment_expression "*pBVar22 = b_00[iVar18]" (pointer_expression "*pBVar22" * identifier) = (subscript_expression "b_00[iVar18]" identifier [ identifier ])) ;) (expression_statement "pBVar22 = pBVar22 + -1;" (assignment_expression "pBVar22 = pBVar22 + -1" identifier = (binary_expression "pBVar22 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pBVar6 != a)" ( (binary_expression "pBVar6 != a" identifier != identifier) )) ;) (labeled_statement "LAB_0006405b:\n    smemclr(b_00,*b_00 * 4 + 4);" statement_identifier : (expression_statement "smemclr(b_00,*b_00 * 4 + 4);" (call_expression "smemclr(b_00,*b_00 * 4 + 4)" identifier (argument_list "(b_00,*b_00 * 4 + 4)" ( identifier , (binary_expression "*b_00 * 4 + 4" (binary_expression "*b_00 * 4" (pointer_expression "*b_00" * identifier) * number_literal) + number_literal) ))) ;)) (expression_statement "safefree(b_00);" (call_expression "safefree(b_00)" identifier (argument_list "(b_00)" ( identifier ))) ;) (expression_statement "local_54 = safemalloc((size_t)a,4);" (assignment_expression "local_54 = safemalloc((size_t)a,4)" identifier = (call_expression "safemalloc((size_t)a,4)" identifier (argument_list "((size_t)a,4)" ( (cast_expression "(size_t)a" ( (type_descriptor "size_t" primitive_type) ) identifier) , number_literal )))) ;) (expression_statement "pBVar22 = (BignumInt *)((int)a * 4);" (assignment_expression "pBVar22 = (BignumInt *)((int)a * 4)" identifier = (cast_expression "(BignumInt *)((int)a * 4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)a * 4)" ( (binary_expression "(int)a * 4" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) )))) ;) (expression_statement "memset(local_54,0,(size_t)pBVar22);" (call_expression "memset(local_54,0,(size_t)pBVar22)" identifier (argument_list "(local_54,0,(size_t)pBVar22)" ( identifier , number_literal , (cast_expression "(size_t)pBVar22" ( (type_descriptor "size_t" primitive_type) ) identifier) ))) ;) (labeled_statement "LAB_000640c0:\n    do {\n      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);\n      uVar23 = uVar5 + uVar15;\n      uVar17 = local_60[iVar13];\n      local_60[iVar13] = ~uVar17 + uVar23;\n      iVar13 = iVar13 + -1;\n      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n    } while (iVar13 != -1);" statement_identifier : (do_statement "do {\n      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);\n      uVar23 = uVar5 + uVar15;\n      uVar17 = local_60[iVar13];\n      local_60[iVar13] = ~uVar17 + uVar23;\n      iVar13 = iVar13 + -1;\n      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n    } while (iVar13 != -1);" do (compound_statement "{\n      uVar15 = *(uint *)((int)local_54 + iVar13 * 4);\n      uVar23 = uVar5 + uVar15;\n      uVar17 = local_60[iVar13];\n      local_60[iVar13] = ~uVar17 + uVar23;\n      iVar13 = iVar13 + -1;\n      uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n    }" { (expression_statement "uVar15 = *(uint *)((int)local_54 + iVar13 * 4);" (assignment_expression "uVar15 = *(uint *)((int)local_54 + iVar13 * 4)" identifier = (pointer_expression "*(uint *)((int)local_54 + iVar13 * 4)" * (cast_expression "(uint *)((int)local_54 + iVar13 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_54 + iVar13 * 4)" ( (binary_expression "(int)local_54 + iVar13 * 4" (cast_expression "(int)local_54" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar13 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar23 = uVar5 + uVar15;" (assignment_expression "uVar23 = uVar5 + uVar15" identifier = (binary_expression "uVar5 + uVar15" identifier + identifier)) ;) (expression_statement "uVar17 = local_60[iVar13];" (assignment_expression "uVar17 = local_60[iVar13]" identifier = (subscript_expression "local_60[iVar13]" identifier [ identifier ])) ;) (expression_statement "local_60[iVar13] = ~uVar17 + uVar23;" (assignment_expression "local_60[iVar13] = ~uVar17 + uVar23" (subscript_expression "local_60[iVar13]" identifier [ identifier ]) = (binary_expression "~uVar17 + uVar23" (unary_expression "~uVar17" ~ identifier) + identifier)) ;) (expression_statement "iVar13 = iVar13 + -1;" (assignment_expression "iVar13 = iVar13 + -1" identifier = (binary_expression "iVar13 + -1" identifier + number_literal)) ;) (expression_statement "uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);" (assignment_expression "uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23)" identifier = (binary_expression "(uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23)" (cast_expression "(uint)CARRY4(uVar5,uVar15)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar5,uVar15)" identifier (argument_list "(uVar5,uVar15)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(~uVar17,uVar23)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(~uVar17,uVar23)" identifier (argument_list "(~uVar17,uVar23)" ( (unary_expression "~uVar17" ~ identifier) , identifier )))))) ;) }) while (parenthesized_expression "(iVar13 != -1)" ( (binary_expression "iVar13 != -1" identifier != number_literal) )) ;)) (expression_statement "BVar16 = *b_01;" (assignment_expression "BVar16 = *b_01" identifier = (pointer_expression "*b_01" * identifier)) ;) (if_statement "if (0 < (int)a) {\n      pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);\n      pBVar7 = (BignumInt *)0x0;\n      if ((int)BVar16 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *pBVar6 = b_01[(int)pBVar7 + 1];\njoined_r0x00064127:\n      pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n      if (pBVar7 == a) {\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }\n      pBVar6 = pBVar6 + -1;\n      if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;\n      goto LAB_00064118;\n    }" if (parenthesized_expression "(0 < (int)a)" ( (binary_expression "0 < (int)a" number_literal < (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);\n      pBVar7 = (BignumInt *)0x0;\n      if ((int)BVar16 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *pBVar6 = b_01[(int)pBVar7 + 1];\njoined_r0x00064127:\n      pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n      if (pBVar7 == a) {\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }\n      pBVar6 = pBVar6 + -1;\n      if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;\n      goto LAB_00064118;\n    }" { (expression_statement "pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4);" (assignment_expression "pBVar6 = (BignumInt *)((int)local_54 + iVar1 * 4)" identifier = (cast_expression "(BignumInt *)((int)local_54 + iVar1 * 4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_54 + iVar1 * 4)" ( (binary_expression "(int)local_54 + iVar1 * 4" (cast_expression "(int)local_54" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar1 * 4" identifier * number_literal)) )))) ;) (expression_statement "pBVar7 = (BignumInt *)0x0;" (assignment_expression "pBVar7 = (BignumInt *)0x0" identifier = (cast_expression "(BignumInt *)0x0" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if ((int)BVar16 < 1) goto LAB_0006412f;" if (parenthesized_expression "((int)BVar16 < 1)" ( (binary_expression "(int)BVar16 < 1" (cast_expression "(int)BVar16" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (goto_statement "goto LAB_0006412f;" goto statement_identifier ;)) (labeled_statement "LAB_00064118:\n      *pBVar6 = b_01[(int)pBVar7 + 1];" statement_identifier : (expression_statement "*pBVar6 = b_01[(int)pBVar7 + 1];" (assignment_expression "*pBVar6 = b_01[(int)pBVar7 + 1]" (pointer_expression "*pBVar6" * identifier) = (subscript_expression "b_01[(int)pBVar7 + 1]" identifier [ (binary_expression "(int)pBVar7 + 1" (cast_expression "(int)pBVar7" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ])) ;)) (labeled_statement "joined_r0x00064127:\n      pBVar7 = (BignumInt *)((int)pBVar7 + 1);" statement_identifier : (expression_statement "pBVar7 = (BignumInt *)((int)pBVar7 + 1);" (assignment_expression "pBVar7 = (BignumInt *)((int)pBVar7 + 1)" identifier = (cast_expression "(BignumInt *)((int)pBVar7 + 1)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBVar7 + 1)" ( (binary_expression "(int)pBVar7 + 1" (cast_expression "(int)pBVar7" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;)) (if_statement "if (pBVar7 == a) {\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }" if (parenthesized_expression "(pBVar7 == a)" ( (binary_expression "pBVar7 == a" identifier == identifier) )) (compound_statement "{\n        smemclr(b_01,*b_01 * 4 + 4);\n        safefree(b_01);\n        local_88 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);\n        pBVar6 = local_88 + (int)a * 2 + -1;\n        pBVar7 = (BignumInt *)0x0;\n        do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);\n        smemclr(pBVar4,*pBVar4 * 4 + 4);\n        safefree(pBVar4);\n        local_20 = (int)a * 3;\n        if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }\n        goto LAB_0006421b;\n      }" { (expression_statement "smemclr(b_01,*b_01 * 4 + 4);" (call_expression "smemclr(b_01,*b_01 * 4 + 4)" identifier (argument_list "(b_01,*b_01 * 4 + 4)" ( identifier , (binary_expression "*b_01 * 4 + 4" (binary_expression "*b_01 * 4" (pointer_expression "*b_01" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "safefree(b_01);" (call_expression "safefree(b_01)" identifier (argument_list "(b_01)" ( identifier ))) ;) (expression_statement "local_88 = (BignumInt *)safemalloc((int)a * 2,4);" (assignment_expression "local_88 = (BignumInt *)safemalloc((int)a * 2,4)" identifier = (cast_expression "(BignumInt *)safemalloc((int)a * 2,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc((int)a * 2,4)" identifier (argument_list "((int)a * 2,4)" ( (binary_expression "(int)a * 2" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) , number_literal ))))) ;) (expression_statement "pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);" (assignment_expression "pBVar8 = (BignumInt *)safemalloc((int)a * 2,4)" identifier = (cast_expression "(BignumInt *)safemalloc((int)a * 2,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc((int)a * 2,4)" identifier (argument_list "((int)a * 2,4)" ( (binary_expression "(int)a * 2" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) , number_literal ))))) ;) (expression_statement "pBVar6 = local_88 + (int)a * 2 + -1;" (assignment_expression "pBVar6 = local_88 + (int)a * 2 + -1" identifier = (binary_expression "local_88 + (int)a * 2 + -1" (binary_expression "local_88 + (int)a * 2" identifier + (binary_expression "(int)a * 2" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) + number_literal)) ;) (expression_statement "pBVar7 = (BignumInt *)0x0;" (assignment_expression "pBVar7 = (BignumInt *)0x0" identifier = (cast_expression "(BignumInt *)0x0" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (do_statement "do {\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        } while (a != pBVar7);" do (compound_statement "{\n          if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }\n          pBVar6 = pBVar6 + -1;\n          pBVar7 = (BignumInt *)((int)pBVar7 + 1);\n        }" { (if_statement "if ((int)pBVar7 < (int)*pBVar4) {\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }\n          else {\n            *pBVar6 = 0;\n          }" if (parenthesized_expression "((int)pBVar7 < (int)*pBVar4)" ( (binary_expression "(int)pBVar7 < (int)*pBVar4" (cast_expression "(int)pBVar7" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)*pBVar4" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pBVar4" * identifier))) )) (compound_statement "{\n            *pBVar6 = pBVar4[(int)pBVar7 + 1];\n          }" { (expression_statement "*pBVar6 = pBVar4[(int)pBVar7 + 1];" (assignment_expression "*pBVar6 = pBVar4[(int)pBVar7 + 1]" (pointer_expression "*pBVar6" * identifier) = (subscript_expression "pBVar4[(int)pBVar7 + 1]" identifier [ (binary_expression "(int)pBVar7 + 1" (cast_expression "(int)pBVar7" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ])) ;) }) (else_clause "else {\n            *pBVar6 = 0;\n          }" else (compound_statement "{\n            *pBVar6 = 0;\n          }" { (expression_statement "*pBVar6 = 0;" (assignment_expression "*pBVar6 = 0" (pointer_expression "*pBVar6" * identifier) = number_literal) ;) }))) (expression_statement "pBVar6 = pBVar6 + -1;" (assignment_expression "pBVar6 = pBVar6 + -1" identifier = (binary_expression "pBVar6 + -1" identifier + number_literal)) ;) (expression_statement "pBVar7 = (BignumInt *)((int)pBVar7 + 1);" (assignment_expression "pBVar7 = (BignumInt *)((int)pBVar7 + 1)" identifier = (cast_expression "(BignumInt *)((int)pBVar7 + 1)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBVar7 + 1)" ( (binary_expression "(int)pBVar7 + 1" (cast_expression "(int)pBVar7" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(a != pBVar7)" ( (binary_expression "a != pBVar7" identifier != identifier) )) ;) (expression_statement "smemclr(pBVar4,*pBVar4 * 4 + 4);" (call_expression "smemclr(pBVar4,*pBVar4 * 4 + 4)" identifier (argument_list "(pBVar4,*pBVar4 * 4 + 4)" ( identifier , (binary_expression "*pBVar4 * 4 + 4" (binary_expression "*pBVar4 * 4" (pointer_expression "*pBVar4" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "safefree(pBVar4);" (call_expression "safefree(pBVar4)" identifier (argument_list "(pBVar4)" ( identifier ))) ;) (expression_statement "local_20 = (int)a * 3;" (assignment_expression "local_20 = (int)a * 3" identifier = (binary_expression "(int)a * 3" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (if_statement "if (0x32 < (int)a) {\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }" if (parenthesized_expression "(0x32 < (int)a)" ( (binary_expression "0x32 < (int)a" number_literal < (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          iVar13 = 0;\n          pBVar6 = a;\n          do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);\n          local_20 = local_20 + iVar13;\n        }" { (expression_statement "iVar13 = 0;" (assignment_expression "iVar13 = 0" identifier = number_literal) ;) (expression_statement "pBVar6 = a;" (assignment_expression "pBVar6 = a" identifier = identifier) ;) (do_statement "do {\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          } while (0x32 < (int)pBVar6);" do (compound_statement "{\n            pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));\n            iVar13 = iVar13 + (int)pBVar6 * 4;\n          }" { (expression_statement "pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)));" (assignment_expression "pBVar6 = (BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)))" identifier = (cast_expression "(BignumInt *)((int)pBVar6 + (1 - ((int)pBVar6 >> 1)))" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBVar6 + (1 - ((int)pBVar6 >> 1)))" ( (binary_expression "(int)pBVar6 + (1 - ((int)pBVar6 >> 1))" (cast_expression "(int)pBVar6" ( (type_descriptor "int" primitive_type) ) identifier) + (parenthesized_expression "(1 - ((int)pBVar6 >> 1))" ( (binary_expression "1 - ((int)pBVar6 >> 1)" number_literal - (parenthesized_expression "((int)pBVar6 >> 1)" ( (binary_expression "(int)pBVar6 >> 1" (cast_expression "(int)pBVar6" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) ))) )))) ;) (expression_statement "iVar13 = iVar13 + (int)pBVar6 * 4;" (assignment_expression "iVar13 = iVar13 + (int)pBVar6 * 4" identifier = (binary_expression "iVar13 + (int)pBVar6 * 4" identifier + (binary_expression "(int)pBVar6 * 4" (cast_expression "(int)pBVar6" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal))) ;) }) while (parenthesized_expression "(0x32 < (int)pBVar6)" ( (binary_expression "0x32 < (int)pBVar6" number_literal < (cast_expression "(int)pBVar6" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (expression_statement "local_20 = local_20 + iVar13;" (assignment_expression "local_20 = local_20 + iVar13" identifier = (binary_expression "local_20 + iVar13" identifier + identifier)) ;) })) (goto_statement "goto LAB_0006421b;" goto statement_identifier ;) })) (expression_statement "pBVar6 = pBVar6 + -1;" (assignment_expression "pBVar6 = pBVar6 + -1" identifier = (binary_expression "pBVar6 + -1" identifier + number_literal)) ;) (if_statement "if ((int)*b_01 <= (int)pBVar7) goto LAB_0006412f;" if (parenthesized_expression "((int)*b_01 <= (int)pBVar7)" ( (binary_expression "(int)*b_01 <= (int)pBVar7" (cast_expression "(int)*b_01" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*b_01" * identifier)) <= (cast_expression "(int)pBVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_0006412f;" goto statement_identifier ;)) (goto_statement "goto LAB_00064118;" goto statement_identifier ;) })) }))) (expression_statement "smemclr(b_01,BVar16 * 4 + 4);" (call_expression "smemclr(b_01,BVar16 * 4 + 4)" identifier (argument_list "(b_01,BVar16 * 4 + 4)" ( identifier , (binary_expression "BVar16 * 4 + 4" (binary_expression "BVar16 * 4" identifier * number_literal) + number_literal) ))) ;) (expression_statement "safefree(b_01);" (call_expression "safefree(b_01)" identifier (argument_list "(b_01)" ( identifier ))) ;) (expression_statement "local_88 = (BignumInt *)safemalloc((int)a * 2,4);" (assignment_expression "local_88 = (BignumInt *)safemalloc((int)a * 2,4)" identifier = (cast_expression "(BignumInt *)safemalloc((int)a * 2,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc((int)a * 2,4)" identifier (argument_list "((int)a * 2,4)" ( (binary_expression "(int)a * 2" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) , number_literal ))))) ;) (expression_statement "pBVar8 = (BignumInt *)safemalloc((int)a * 2,4);" (assignment_expression "pBVar8 = (BignumInt *)safemalloc((int)a * 2,4)" identifier = (cast_expression "(BignumInt *)safemalloc((int)a * 2,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc((int)a * 2,4)" identifier (argument_list "((int)a * 2,4)" ( (binary_expression "(int)a * 2" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) , number_literal ))))) ;) (expression_statement "smemclr(pBVar4,*pBVar4 * 4 + 4);" (call_expression "smemclr(pBVar4,*pBVar4 * 4 + 4)" identifier (argument_list "(pBVar4,*pBVar4 * 4 + 4)" ( identifier , (binary_expression "*pBVar4 * 4 + 4" (binary_expression "*pBVar4 * 4" (pointer_expression "*pBVar4" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "safefree(pBVar4);" (call_expression "safefree(pBVar4)" identifier (argument_list "(pBVar4)" ( identifier ))) ;) (expression_statement "local_20 = (int)a * 3;" (assignment_expression "local_20 = (int)a * 3" identifier = (binary_expression "(int)a * 3" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (labeled_statement "LAB_0006421b:\n  pBVar6 = (BignumInt *)safemalloc(local_20,4);" statement_identifier : (expression_statement "pBVar6 = (BignumInt *)safemalloc(local_20,4);" (assignment_expression "pBVar6 = (BignumInt *)safemalloc(local_20,4)" identifier = (cast_expression "(BignumInt *)safemalloc(local_20,4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc(local_20,4)" identifier (argument_list "(local_20,4)" ( identifier , number_literal ))))) ;)) (expression_statement "BVar16 = *exp;" (assignment_expression "BVar16 = *exp" identifier = (pointer_expression "*exp" * identifier)) ;) (expression_statement "local_78 = 0;" (assignment_expression "local_78 = 0" identifier = number_literal) ;) (expression_statement "puVar12 = exp + BVar16;" (assignment_expression "puVar12 = exp + BVar16" identifier = (binary_expression "exp + BVar16" identifier + identifier)) ;) (if_statement "if (0 < (int)BVar16) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar12 = puVar12 + -1;\n    } while (BVar16 != local_78);\n  }" if (parenthesized_expression "(0 < (int)BVar16)" ( (binary_expression "0 < (int)BVar16" number_literal < (cast_expression "(int)BVar16" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar12 = puVar12 + -1;\n    } while (BVar16 != local_78);\n  }" { (do_statement "do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar12 = puVar12 + -1;\n    } while (BVar16 != local_78);" do (compound_statement "{\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar12 = puVar12 + -1;\n    }" { (expression_statement "local_94 = 0x1f;" (assignment_expression "local_94 = 0x1f" identifier = number_literal) ;) (do_statement "do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);" do (compound_statement "{\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      }" { (if_statement "if ((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0) {\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }" if (parenthesized_expression "((1 << ((byte)local_94 & 0x1f) & *puVar12) != 0)" ( (binary_expression "(1 << ((byte)local_94 & 0x1f) & *puVar12) != 0" (parenthesized_expression "(1 << ((byte)local_94 & 0x1f) & *puVar12)" ( (binary_expression "1 << ((byte)local_94 & 0x1f) & *puVar12" (binary_expression "1 << ((byte)local_94 & 0x1f)" number_literal << (parenthesized_expression "((byte)local_94 & 0x1f)" ( (binary_expression "(byte)local_94 & 0x1f" (cast_expression "(byte)local_94" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) & (pointer_expression "*puVar12" * identifier)) )) != number_literal) )) (compound_statement "{\n          if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;\n          iVar24 = (int)a * 2 + -1;\n          __n = (BignumInt *)((int)a * 4);\n          pBVar7 = pBVar6 + (int)a * 3;\n          pBVar9 = pBVar6 + (int)a;\n          iVar18 = (int)a >> 1;\n          b = pBVar7 + (int)a * 2;\n          a_00 = (BignumInt *)((int)a - iVar18);\n          iVar13 = (int)a_00 + iVar18 * 2;\n          pBVar21 = pBVar8;\n          goto LAB_00064370;\n        }" { (if_statement "if ((int)BVar16 <= (int)local_78) goto LAB_000645c6;" if (parenthesized_expression "((int)BVar16 <= (int)local_78)" ( (binary_expression "(int)BVar16 <= (int)local_78" (cast_expression "(int)BVar16" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)local_78" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_000645c6;" goto statement_identifier ;)) (expression_statement "iVar24 = (int)a * 2 + -1;" (assignment_expression "iVar24 = (int)a * 2 + -1" identifier = (binary_expression "(int)a * 2 + -1" (binary_expression "(int)a * 2" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) + number_literal)) ;) (expression_statement "__n = (BignumInt *)((int)a * 4);" (assignment_expression "__n = (BignumInt *)((int)a * 4)" identifier = (cast_expression "(BignumInt *)((int)a * 4)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)a * 4)" ( (binary_expression "(int)a * 4" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) )))) ;) (expression_statement "pBVar7 = pBVar6 + (int)a * 3;" (assignment_expression "pBVar7 = pBVar6 + (int)a * 3" identifier = (binary_expression "pBVar6 + (int)a * 3" identifier + (binary_expression "(int)a * 3" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal))) ;) (expression_statement "pBVar9 = pBVar6 + (int)a;" (assignment_expression "pBVar9 = pBVar6 + (int)a" identifier = (binary_expression "pBVar6 + (int)a" identifier + (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "iVar18 = (int)a >> 1;" (assignment_expression "iVar18 = (int)a >> 1" identifier = (binary_expression "(int)a >> 1" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (expression_statement "b = pBVar7 + (int)a * 2;" (assignment_expression "b = pBVar7 + (int)a * 2" identifier = (binary_expression "pBVar7 + (int)a * 2" identifier + (binary_expression "(int)a * 2" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal))) ;) (expression_statement "a_00 = (BignumInt *)((int)a - iVar18);" (assignment_expression "a_00 = (BignumInt *)((int)a - iVar18)" identifier = (cast_expression "(BignumInt *)((int)a - iVar18)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)a - iVar18)" ( (binary_expression "(int)a - iVar18" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) - identifier) )))) ;) (expression_statement "iVar13 = (int)a_00 + iVar18 * 2;" (assignment_expression "iVar13 = (int)a_00 + iVar18 * 2" identifier = (binary_expression "(int)a_00 + iVar18 * 2" (cast_expression "(int)a_00" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar18 * 2" identifier * number_literal))) ;) (expression_statement "pBVar21 = pBVar8;" (assignment_expression "pBVar21 = pBVar8" identifier = identifier) ;) (goto_statement "goto LAB_00064370;" goto statement_identifier ;) })) (expression_statement "local_94 = local_94 + -1;" (assignment_expression "local_94 = local_94 + -1" identifier = (binary_expression "local_94 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_94 != -1)" ( (binary_expression "local_94 != -1" identifier != number_literal) )) ;) (expression_statement "local_78 = local_78 + 1;" (assignment_expression "local_78 = local_78 + 1" identifier = (binary_expression "local_78 + 1" identifier + number_literal)) ;) (expression_statement "puVar12 = puVar12 + -1;" (assignment_expression "puVar12 = puVar12 + -1" identifier = (binary_expression "puVar12 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(BVar16 != local_78)" ( (binary_expression "BVar16 != local_78" identifier != identifier) )) ;) })) (goto_statement "goto LAB_000645c6;" goto statement_identifier ;) (labeled_statement "LAB_0006412f:\n  *pBVar6 = 0;" statement_identifier : (expression_statement "*pBVar6 = 0;" (assignment_expression "*pBVar6 = 0" (pointer_expression "*pBVar6" * identifier) = number_literal) ;)) (goto_statement "goto joined_r0x00064127;" goto statement_identifier ;) (while_statement "while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if ((int)*exp <= (int)local_78) break;\nLAB_00064370:\n    do {\n      internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n      pBVar8 = pBVar21 + (int)a;\n      if ((int)a < 0x33) {\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }\n      else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }\n      pBVar8 = local_88;\n      if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }\n      local_88 = pBVar21;\n      local_94 = local_94 + -1;\n      pBVar21 = pBVar8;\n    } while (local_94 != -1);\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if ((int)*exp <= (int)local_78) break;\nLAB_00064370:\n    do {\n      internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n      pBVar8 = pBVar21 + (int)a;\n      if ((int)a < 0x33) {\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }\n      else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }\n      pBVar8 = local_88;\n      if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }\n      local_88 = pBVar21;\n      local_94 = local_94 + -1;\n      pBVar21 = pBVar8;\n    } while (local_94 != -1);\n  }" { (expression_statement "local_78 = local_78 + 1;" (assignment_expression "local_78 = local_78 + 1" identifier = (binary_expression "local_78 + 1" identifier + number_literal)) ;) (expression_statement "local_94 = 0x1f;" (assignment_expression "local_94 = 0x1f" identifier = number_literal) ;) (if_statement "if ((int)*exp <= (int)local_78) break;" if (parenthesized_expression "((int)*exp <= (int)local_78)" ( (binary_expression "(int)*exp <= (int)local_78" (cast_expression "(int)*exp" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*exp" * identifier)) <= (cast_expression "(int)local_78" ( (type_descriptor "int" primitive_type) ) identifier)) )) (break_statement "break;" break ;)) (labeled_statement "LAB_00064370:\n    do {\n      internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n      pBVar8 = pBVar21 + (int)a;\n      if ((int)a < 0x33) {\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }\n      else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }\n      pBVar8 = local_88;\n      if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }\n      local_88 = pBVar21;\n      local_94 = local_94 + -1;\n      pBVar21 = pBVar8;\n    } while (local_94 != -1);" statement_identifier : (do_statement "do {\n      internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n      pBVar8 = pBVar21 + (int)a;\n      if ((int)a < 0x33) {\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }\n      else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }\n      pBVar8 = local_88;\n      if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }\n      local_88 = pBVar21;\n      local_94 = local_94 + -1;\n      pBVar21 = pBVar8;\n    } while (local_94 != -1);" do (compound_statement "{\n      internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n      pBVar8 = pBVar21 + (int)a;\n      if ((int)a < 0x33) {\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }\n      else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }\n      pBVar8 = local_88;\n      if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }\n      local_88 = pBVar21;\n      local_94 = local_94 + -1;\n      pBVar21 = pBVar8;\n    }" { (expression_statement "internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);" (call_expression "internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" identifier (argument_list "(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "pBVar8 = pBVar21 + (int)a;" (assignment_expression "pBVar8 = pBVar21 + (int)a" identifier = (binary_expression "pBVar21 + (int)a" identifier + (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (if_statement "if ((int)a < 0x33) {\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }\n      else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }" if (parenthesized_expression "((int)a < 0x33)" ( (binary_expression "(int)a < 0x33" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }\n        local_b0 = (BignumInt *)((int)__n + (int)pBVar8);\n        if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }\n        if (0 < (int)a) goto LAB_000644bf;\nLAB_00064525:\n        iVar19 = iVar1;\n        uVar5 = uVar3;\n        if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }\n      }" { (if_statement "if (0 < (int)a) {\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }" if (parenthesized_expression "(0 < (int)a)" ( (binary_expression "0 < (int)a" number_literal < (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          pBVar22 = __n;\n          memset(pBVar6,0,(size_t)__n);\n        }" { (expression_statement "pBVar22 = __n;" (assignment_expression "pBVar22 = __n" identifier = identifier) ;) (expression_statement "memset(pBVar6,0,(size_t)__n);" (call_expression "memset(pBVar6,0,(size_t)__n)" identifier (argument_list "(pBVar6,0,(size_t)__n)" ( identifier , number_literal , (cast_expression "(size_t)__n" ( (type_descriptor "size_t" primitive_type) ) identifier) ))) ;) })) (expression_statement "local_b0 = (BignumInt *)((int)__n + (int)pBVar8);" (assignment_expression "local_b0 = (BignumInt *)((int)__n + (int)pBVar8)" identifier = (cast_expression "(BignumInt *)((int)__n + (int)pBVar8)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__n + (int)pBVar8)" ( (binary_expression "(int)__n + (int)pBVar8" (cast_expression "(int)__n" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)pBVar8" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (if_statement "if ((pBVar8 < local_b0) && (pBVar6 < pBVar9)) {\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }" if (parenthesized_expression "((pBVar8 < local_b0) && (pBVar6 < pBVar9))" ( (binary_expression "(pBVar8 < local_b0) && (pBVar6 < pBVar9)" (parenthesized_expression "(pBVar8 < local_b0)" ( (binary_expression "pBVar8 < local_b0" identifier < identifier) )) && (parenthesized_expression "(pBVar6 < pBVar9)" ( (binary_expression "pBVar6 < pBVar9" identifier < identifier) ))) )) (compound_statement "{\n          pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);\n          pBVar11 = pBVar9;\n          if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);\n        }" { (expression_statement "pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9);" (assignment_expression "pBVar10 = (BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9)" identifier = (cast_expression "(BignumInt *)(((int)pBVar8 - (int)local_b0) + (int)pBVar9)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((int)pBVar8 - (int)local_b0) + (int)pBVar9)" ( (binary_expression "((int)pBVar8 - (int)local_b0) + (int)pBVar9" (parenthesized_expression "((int)pBVar8 - (int)local_b0)" ( (binary_expression "(int)pBVar8 - (int)local_b0" (cast_expression "(int)pBVar8" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)local_b0" ( (type_descriptor "int" primitive_type) ) identifier)) )) + (cast_expression "(int)pBVar9" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "pBVar11 = pBVar9;" (assignment_expression "pBVar11 = pBVar9" identifier = identifier) ;) (if_statement "if (pBVar10 < pBVar6) {\n            pBVar10 = pBVar6;\n          }" if (parenthesized_expression "(pBVar10 < pBVar6)" ( (binary_expression "pBVar10 < pBVar6" identifier < identifier) )) (compound_statement "{\n            pBVar10 = pBVar6;\n          }" { (expression_statement "pBVar10 = pBVar6;" (assignment_expression "pBVar10 = pBVar6" identifier = identifier) ;) })) (do_statement "do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          } while (pBVar10 < pBVar11);" do (compound_statement "{\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pBVar14 = pBVar11;\n            puVar12 = local_60 + -1 + (int)a;\n            do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);\n            pBVar11 = pBVar11 + -1;\n          }" { (expression_statement "local_b0 = local_b0 + -1;" (assignment_expression "local_b0 = local_b0 + -1" identifier = (binary_expression "local_b0 + -1" identifier + number_literal)) ;) (expression_statement "local_b8 = 0;" (assignment_expression "local_b8 = 0" identifier = number_literal) ;) (expression_statement "pBVar14 = pBVar11;" (assignment_expression "pBVar14 = pBVar11" identifier = identifier) ;) (expression_statement "puVar12 = local_60 + -1 + (int)a;" (assignment_expression "puVar12 = local_60 + -1 + (int)a" identifier = (binary_expression "local_60 + -1 + (int)a" (binary_expression "local_60 + -1" identifier + number_literal) + (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (do_statement "do {\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            } while (pBVar6 < pBVar14);" do (compound_statement "{\n              lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar2 >> 0x20);\n              pBVar14[-1] = (BignumInt)lVar2;\n              puVar12 = puVar12 + -1;\n              pBVar14 = pBVar14 + -1;\n            }" { (expression_statement "lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8;" (assignment_expression "lVar2 = (ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8" identifier = (binary_expression "(ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1] +\n                      (ulonglong)local_b8" (binary_expression "(ulonglong)*puVar12 * (ulonglong)*local_b0 + (ulonglong)pBVar14[-1]" (binary_expression "(ulonglong)*puVar12 * (ulonglong)*local_b0" (binary_expression "(ulonglong)*puVar12 * (ulonglong)" (binary_expression "(ulonglong)*puVar12" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) + (cast_expression "(ulonglong)pBVar14[-1]" ( (type_descriptor "ulonglong" type_identifier) ) (subscript_expression "pBVar14[-1]" identifier [ number_literal ]))) + (cast_expression "(ulonglong)local_b8" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "local_b8 = (uint)((ulonglong)lVar2 >> 0x20);" (assignment_expression "local_b8 = (uint)((ulonglong)lVar2 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar2 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar2 >> 0x20)" ( (binary_expression "(ulonglong)lVar2 >> 0x20" (cast_expression "(ulonglong)lVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "pBVar14[-1] = (BignumInt)lVar2;" (assignment_expression "pBVar14[-1] = (BignumInt)lVar2" (subscript_expression "pBVar14[-1]" identifier [ number_literal ]) = (cast_expression "(BignumInt)lVar2" ( (type_descriptor "BignumInt" type_identifier) ) identifier)) ;) (expression_statement "puVar12 = puVar12 + -1;" (assignment_expression "puVar12 = puVar12 + -1" identifier = (binary_expression "puVar12 + -1" identifier + number_literal)) ;) (expression_statement "pBVar14 = pBVar14 + -1;" (assignment_expression "pBVar14 = pBVar14 + -1" identifier = (binary_expression "pBVar14 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pBVar6 < pBVar14)" ( (binary_expression "pBVar6 < pBVar14" identifier < identifier) )) ;) (expression_statement "pBVar11 = pBVar11 + -1;" (assignment_expression "pBVar11 = pBVar11 + -1" identifier = (binary_expression "pBVar11 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pBVar10 < pBVar11)" ( (binary_expression "pBVar10 < pBVar11" identifier < identifier) )) ;) })) (expression_statement "internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);" (call_expression "internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" identifier (argument_list "(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (iVar24 < 0) {\n          uVar5 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }" if (parenthesized_expression "(iVar24 < 0)" ( (binary_expression "iVar24 < 0" identifier < number_literal) )) (compound_statement "{\n          uVar5 = 0;\n        }" { (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) }) (else_clause "else {\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }" else (compound_statement "{\nLAB_00064484:\n          uVar5 = 0;\n          iVar19 = iVar24;\n          do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);\n        }" { (labeled_statement "LAB_00064484:\n          uVar5 = 0;" statement_identifier : (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;)) (expression_statement "iVar19 = iVar24;" (assignment_expression "iVar19 = iVar24" identifier = identifier) ;) (do_statement "do {\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          } while (iVar19 != -1);" do (compound_statement "{\n            uVar15 = pBVar9[iVar19] + pBVar21[iVar19];\n            BVar16 = uVar15 + uVar5;\n            uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);\n            pBVar21[iVar19] = BVar16;\n            iVar19 = iVar19 + -1;\n          }" { (expression_statement "uVar15 = pBVar9[iVar19] + pBVar21[iVar19];" (assignment_expression "uVar15 = pBVar9[iVar19] + pBVar21[iVar19]" identifier = (binary_expression "pBVar9[iVar19] + pBVar21[iVar19]" (subscript_expression "pBVar9[iVar19]" identifier [ identifier ]) + (subscript_expression "pBVar21[iVar19]" identifier [ identifier ]))) ;) (expression_statement "BVar16 = uVar15 + uVar5;" (assignment_expression "BVar16 = uVar15 + uVar5" identifier = (binary_expression "uVar15 + uVar5" identifier + identifier)) ;) (expression_statement "uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5);" (assignment_expression "uVar5 = (uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5)" identifier = (binary_expression "(uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19]) + (uint)CARRY4(uVar15,uVar5)" (cast_expression "(uint)CARRY4(pBVar9[iVar19],pBVar21[iVar19])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(pBVar9[iVar19],pBVar21[iVar19])" identifier (argument_list "(pBVar9[iVar19],pBVar21[iVar19])" ( (subscript_expression "pBVar9[iVar19]" identifier [ identifier ]) , (subscript_expression "pBVar21[iVar19]" identifier [ identifier ]) )))) + (cast_expression "(uint)CARRY4(uVar15,uVar5)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar15,uVar5)" identifier (argument_list "(uVar15,uVar5)" ( identifier , identifier )))))) ;) (expression_statement "pBVar21[iVar19] = BVar16;" (assignment_expression "pBVar21[iVar19] = BVar16" (subscript_expression "pBVar21[iVar19]" identifier [ identifier ]) = identifier) ;) (expression_statement "iVar19 = iVar19 + -1;" (assignment_expression "iVar19 = iVar19 + -1" identifier = (binary_expression "iVar19 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 != -1)" ( (binary_expression "iVar19 != -1" identifier != number_literal) )) ;) }))) (if_statement "if (0 < (int)a) goto LAB_000644bf;" if (parenthesized_expression "(0 < (int)a)" ( (binary_expression "0 < (int)a" number_literal < (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_000644bf;" goto statement_identifier ;)) (labeled_statement "LAB_00064525:\n        iVar19 = iVar1;" statement_identifier : (expression_statement "iVar19 = iVar1;" (assignment_expression "iVar19 = iVar1" identifier = identifier) ;)) (expression_statement "uVar5 = uVar3;" (assignment_expression "uVar5 = uVar3" identifier = identifier) ;) (if_statement "if (-1 < iVar1) {\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }" if (parenthesized_expression "(-1 < iVar1)" ( (binary_expression "-1 < iVar1" number_literal < identifier) )) (compound_statement "{\n          do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);\n        }" { (do_statement "do {\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          } while (iVar19 != -1);" do (compound_statement "{\n            uVar15 = pBVar8[iVar19];\n            uVar23 = uVar5 + uVar15;\n            uVar17 = n_00[iVar19];\n            pBVar8[iVar19] = ~uVar17 + uVar23;\n            iVar19 = iVar19 + -1;\n            uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);\n          }" { (expression_statement "uVar15 = pBVar8[iVar19];" (assignment_expression "uVar15 = pBVar8[iVar19]" identifier = (subscript_expression "pBVar8[iVar19]" identifier [ identifier ])) ;) (expression_statement "uVar23 = uVar5 + uVar15;" (assignment_expression "uVar23 = uVar5 + uVar15" identifier = (binary_expression "uVar5 + uVar15" identifier + identifier)) ;) (expression_statement "uVar17 = n_00[iVar19];" (assignment_expression "uVar17 = n_00[iVar19]" identifier = (subscript_expression "n_00[iVar19]" identifier [ identifier ])) ;) (expression_statement "pBVar8[iVar19] = ~uVar17 + uVar23;" (assignment_expression "pBVar8[iVar19] = ~uVar17 + uVar23" (subscript_expression "pBVar8[iVar19]" identifier [ identifier ]) = (binary_expression "~uVar17 + uVar23" (unary_expression "~uVar17" ~ identifier) + identifier)) ;) (expression_statement "iVar19 = iVar19 + -1;" (assignment_expression "iVar19 = iVar19 + -1" identifier = (binary_expression "iVar19 + -1" identifier + number_literal)) ;) (expression_statement "uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23);" (assignment_expression "uVar5 = (uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23)" identifier = (binary_expression "(uint)CARRY4(uVar5,uVar15) + (uint)CARRY4(~uVar17,uVar23)" (cast_expression "(uint)CARRY4(uVar5,uVar15)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar5,uVar15)" identifier (argument_list "(uVar5,uVar15)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(~uVar17,uVar23)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(~uVar17,uVar23)" identifier (argument_list "(~uVar17,uVar23)" ( (unary_expression "~uVar17" ~ identifier) , identifier )))))) ;) }) while (parenthesized_expression "(iVar19 != -1)" ( (binary_expression "iVar19 != -1" identifier != number_literal) )) ;) })) }) (else_clause "else {\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }" else (compound_statement "{\n        internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);\n        internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);\n        pBVar11 = pBVar7 + iVar13;\n        pBVar10 = pBVar6 + iVar18;\n        if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        uVar5 = 0;\n        iVar19 = iVar18 + -1;\n        do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);\n        internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        if (-1 < iVar24) goto LAB_00064484;\n        uVar5 = 0;\nLAB_000644bf:\n        iVar19 = 0;\n        do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);\n        if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;\n        BVar16 = *pBVar8;\n        BVar20 = *n_00;\n        pBVar11 = (BignumInt *)0x0;\n        if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }\n        if (BVar20 < BVar16) goto LAB_00064525;\n      }" { (expression_statement "internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44);" (call_expression "internal_mul(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" identifier (argument_list "(a_00,b,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b);" (call_expression "internal_mul_low(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b)" identifier (argument_list "(pBVar8,local_60 + (int)a_00,pBVar7 + iVar18,iVar18,b)" ( identifier , (binary_expression "local_60 + (int)a_00" identifier + (cast_expression "(int)a_00" ( (type_descriptor "int" primitive_type) ) identifier)) , (binary_expression "pBVar7 + iVar18" identifier + identifier) , identifier , identifier ))) ;) (expression_statement "internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b);" (call_expression "internal_mul_low(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b)" identifier (argument_list "(pBVar8 + (int)a_00,local_60,pBVar7,iVar18,b)" ( (binary_expression "pBVar8 + (int)a_00" identifier + (cast_expression "(int)a_00" ( (type_descriptor "int" primitive_type) ) identifier)) , identifier , identifier , identifier , identifier ))) ;) (expression_statement "pBVar11 = pBVar7 + iVar13;" (assignment_expression "pBVar11 = pBVar7 + iVar13" identifier = (binary_expression "pBVar7 + iVar13" identifier + identifier)) ;) (expression_statement "pBVar10 = pBVar6 + iVar18;" (assignment_expression "pBVar10 = pBVar6 + iVar18" identifier = (binary_expression "pBVar6 + iVar18" identifier + identifier)) ;) (if_statement "if (0 < (int)a_00) {\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }" if (parenthesized_expression "(0 < (int)a_00)" ( (binary_expression "0 < (int)a_00" number_literal < (cast_expression "(int)a_00" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);\n        }" { (do_statement "do {\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          } while (pBVar7 + iVar13 + (int)a_00 != pBVar14);" do (compound_statement "{\n            pBVar14 = pBVar11 + 1;\n            *pBVar10 = *pBVar11;\n            pBVar11 = pBVar14;\n            pBVar10 = pBVar10 + 1;\n          }" { (expression_statement "pBVar14 = pBVar11 + 1;" (assignment_expression "pBVar14 = pBVar11 + 1" identifier = (binary_expression "pBVar11 + 1" identifier + number_literal)) ;) (expression_statement "*pBVar10 = *pBVar11;" (assignment_expression "*pBVar10 = *pBVar11" (pointer_expression "*pBVar10" * identifier) = (pointer_expression "*pBVar11" * identifier)) ;) (expression_statement "pBVar11 = pBVar14;" (assignment_expression "pBVar11 = pBVar14" identifier = identifier) ;) (expression_statement "pBVar10 = pBVar10 + 1;" (assignment_expression "pBVar10 = pBVar10 + 1" identifier = (binary_expression "pBVar10 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pBVar7 + iVar13 + (int)a_00 != pBVar14)" ( (binary_expression "pBVar7 + iVar13 + (int)a_00 != pBVar14" (binary_expression "pBVar7 + iVar13 + (int)a_00" (binary_expression "pBVar7 + iVar13" identifier + identifier) + (cast_expression "(int)a_00" ( (type_descriptor "int" primitive_type) ) identifier)) != identifier) )) ;) })) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "iVar19 = iVar18 + -1;" (assignment_expression "iVar19 = iVar18 + -1" identifier = (binary_expression "iVar18 + -1" identifier + number_literal)) ;) (do_statement "do {\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);" do (compound_statement "{\n          uVar15 = (pBVar7 + iVar18)[iVar19];\n          uVar17 = uVar15 + pBVar7[iVar19];\n          BVar16 = uVar17 + uVar5;\n          uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);\n          pBVar7[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        }" { (expression_statement "uVar15 = (pBVar7 + iVar18)[iVar19];" (assignment_expression "uVar15 = (pBVar7 + iVar18)[iVar19]" identifier = (subscript_expression "(pBVar7 + iVar18)[iVar19]" (parenthesized_expression "(pBVar7 + iVar18)" ( (binary_expression "pBVar7 + iVar18" identifier + identifier) )) [ identifier ])) ;) (expression_statement "uVar17 = uVar15 + pBVar7[iVar19];" (assignment_expression "uVar17 = uVar15 + pBVar7[iVar19]" identifier = (binary_expression "uVar15 + pBVar7[iVar19]" identifier + (subscript_expression "pBVar7[iVar19]" identifier [ identifier ]))) ;) (expression_statement "BVar16 = uVar17 + uVar5;" (assignment_expression "BVar16 = uVar17 + uVar5" identifier = (binary_expression "uVar17 + uVar5" identifier + identifier)) ;) (expression_statement "uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5);" (assignment_expression "uVar5 = (uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5)" identifier = (binary_expression "(uint)CARRY4(uVar15,pBVar7[iVar19]) + (uint)CARRY4(uVar17,uVar5)" (cast_expression "(uint)CARRY4(uVar15,pBVar7[iVar19])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar15,pBVar7[iVar19])" identifier (argument_list "(uVar15,pBVar7[iVar19])" ( identifier , (subscript_expression "pBVar7[iVar19]" identifier [ identifier ]) )))) + (cast_expression "(uint)CARRY4(uVar17,uVar5)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar17,uVar5)" identifier (argument_list "(uVar17,uVar5)" ( identifier , identifier )))))) ;) (expression_statement "pBVar7[iVar19] = BVar16;" (assignment_expression "pBVar7[iVar19] = BVar16" (subscript_expression "pBVar7[iVar19]" identifier [ identifier ]) = identifier) ;) (expression_statement "iVar19 = iVar19 + -1;" (assignment_expression "iVar19 = iVar19 + -1" identifier = (binary_expression "iVar19 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 != -1)" ( (binary_expression "iVar19 != -1" identifier != number_literal) )) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (expression_statement "iVar19 = iVar18 + -1;" (assignment_expression "iVar19 = iVar18 + -1" identifier = (binary_expression "iVar18 + -1" identifier + number_literal)) ;) (do_statement "do {\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        } while (iVar19 != -1);" do (compound_statement "{\n          uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];\n          BVar16 = uVar15 + uVar5;\n          uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);\n          pBVar6[iVar19] = BVar16;\n          iVar19 = iVar19 + -1;\n        }" { (expression_statement "uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19];" (assignment_expression "uVar15 = pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19]" identifier = (binary_expression "pBVar7[iVar19] + pBVar7[(iVar13 - iVar18) + iVar19]" (subscript_expression "pBVar7[iVar19]" identifier [ identifier ]) + (subscript_expression "pBVar7[(iVar13 - iVar18) + iVar19]" identifier [ (binary_expression "(iVar13 - iVar18) + iVar19" (parenthesized_expression "(iVar13 - iVar18)" ( (binary_expression "iVar13 - iVar18" identifier - identifier) )) + identifier) ]))) ;) (expression_statement "BVar16 = uVar15 + uVar5;" (assignment_expression "BVar16 = uVar15 + uVar5" identifier = (binary_expression "uVar15 + uVar5" identifier + identifier)) ;) (expression_statement "uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5);" (assignment_expression "uVar5 = (uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5)" identifier = (binary_expression "(uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19]) +\n                  (uint)CARRY4(uVar15,uVar5)" (cast_expression "(uint)CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19])" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19])" identifier (argument_list "(pBVar7[iVar19],pBVar7[(iVar13 - iVar18) + iVar19])" ( (subscript_expression "pBVar7[iVar19]" identifier [ identifier ]) , (subscript_expression "pBVar7[(iVar13 - iVar18) + iVar19]" identifier [ (binary_expression "(iVar13 - iVar18) + iVar19" (parenthesized_expression "(iVar13 - iVar18)" ( (binary_expression "iVar13 - iVar18" identifier - identifier) )) + identifier) ]) )))) + (cast_expression "(uint)CARRY4(uVar15,uVar5)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar15,uVar5)" identifier (argument_list "(uVar15,uVar5)" ( identifier , identifier )))))) ;) (expression_statement "pBVar6[iVar19] = BVar16;" (assignment_expression "pBVar6[iVar19] = BVar16" (subscript_expression "pBVar6[iVar19]" identifier [ identifier ]) = identifier) ;) (expression_statement "iVar19 = iVar19 + -1;" (assignment_expression "iVar19 = iVar19 + -1" identifier = (binary_expression "iVar19 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 != -1)" ( (binary_expression "iVar19 != -1" identifier != number_literal) )) ;) (expression_statement "internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44);" (call_expression "internal_mul(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" identifier (argument_list "(a,pBVar7,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (if_statement "if (-1 < iVar24) goto LAB_00064484;" if (parenthesized_expression "(-1 < iVar24)" ( (binary_expression "-1 < iVar24" number_literal < identifier) )) (goto_statement "goto LAB_00064484;" goto statement_identifier ;)) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (labeled_statement "LAB_000644bf:\n        iVar19 = 0;" statement_identifier : (expression_statement "iVar19 = 0;" (assignment_expression "iVar19 = 0" identifier = number_literal) ;)) (do_statement "do {\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        } while (iVar19 < (int)a);" do (compound_statement "{\n          pBVar8[iVar19] = pBVar21[iVar19];\n          pBVar21[iVar19] = 0;\n          iVar19 = iVar19 + 1;\n        }" { (expression_statement "pBVar8[iVar19] = pBVar21[iVar19];" (assignment_expression "pBVar8[iVar19] = pBVar21[iVar19]" (subscript_expression "pBVar8[iVar19]" identifier [ identifier ]) = (subscript_expression "pBVar21[iVar19]" identifier [ identifier ])) ;) (expression_statement "pBVar21[iVar19] = 0;" (assignment_expression "pBVar21[iVar19] = 0" (subscript_expression "pBVar21[iVar19]" identifier [ identifier ]) = number_literal) ;) (expression_statement "iVar19 = iVar19 + 1;" (assignment_expression "iVar19 = iVar19 + 1" identifier = (binary_expression "iVar19 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar19 < (int)a)" ( (binary_expression "iVar19 < (int)a" identifier < (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (if_statement "if ((uVar5 != 0) || ((int)a < 1)) goto LAB_00064525;" if (parenthesized_expression "((uVar5 != 0) || ((int)a < 1))" ( (binary_expression "(uVar5 != 0) || ((int)a < 1)" (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) || (parenthesized_expression "((int)a < 1)" ( (binary_expression "(int)a < 1" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) ))) )) (goto_statement "goto LAB_00064525;" goto statement_identifier ;)) (expression_statement "BVar16 = *pBVar8;" (assignment_expression "BVar16 = *pBVar8" identifier = (pointer_expression "*pBVar8" * identifier)) ;) (expression_statement "BVar20 = *n_00;" (assignment_expression "BVar20 = *n_00" identifier = (pointer_expression "*n_00" * identifier)) ;) (expression_statement "pBVar11 = (BignumInt *)0x0;" (assignment_expression "pBVar11 = (BignumInt *)0x0" identifier = (cast_expression "(BignumInt *)0x0" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (BVar20 == BVar16) {\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }" if (parenthesized_expression "(BVar20 == BVar16)" ( (binary_expression "BVar20 == BVar16" identifier == identifier) )) (compound_statement "{\n          do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);\n        }" { (do_statement "do {\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          } while (BVar16 == BVar20);" do (compound_statement "{\n            pBVar11 = (BignumInt *)((int)pBVar11 + 1);\n            if (a == pBVar11) goto LAB_00064525;\n            BVar16 = pBVar8[(int)pBVar11];\n            BVar20 = n_00[(int)pBVar11];\n          }" { (expression_statement "pBVar11 = (BignumInt *)((int)pBVar11 + 1);" (assignment_expression "pBVar11 = (BignumInt *)((int)pBVar11 + 1)" identifier = (cast_expression "(BignumInt *)((int)pBVar11 + 1)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBVar11 + 1)" ( (binary_expression "(int)pBVar11 + 1" (cast_expression "(int)pBVar11" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (if_statement "if (a == pBVar11) goto LAB_00064525;" if (parenthesized_expression "(a == pBVar11)" ( (binary_expression "a == pBVar11" identifier == identifier) )) (goto_statement "goto LAB_00064525;" goto statement_identifier ;)) (expression_statement "BVar16 = pBVar8[(int)pBVar11];" (assignment_expression "BVar16 = pBVar8[(int)pBVar11]" identifier = (subscript_expression "pBVar8[(int)pBVar11]" identifier [ (cast_expression "(int)pBVar11" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (expression_statement "BVar20 = n_00[(int)pBVar11];" (assignment_expression "BVar20 = n_00[(int)pBVar11]" identifier = (subscript_expression "n_00[(int)pBVar11]" identifier [ (cast_expression "(int)pBVar11" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) }) while (parenthesized_expression "(BVar16 == BVar20)" ( (binary_expression "BVar16 == BVar20" identifier == identifier) )) ;) })) (if_statement "if (BVar20 < BVar16) goto LAB_00064525;" if (parenthesized_expression "(BVar20 < BVar16)" ( (binary_expression "BVar20 < BVar16" identifier < identifier) )) (goto_statement "goto LAB_00064525;" goto statement_identifier ;)) }))) (expression_statement "pBVar8 = local_88;" (assignment_expression "pBVar8 = local_88" identifier = identifier) ;) (if_statement "if ((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }" if (parenthesized_expression "((exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0)" ( (binary_expression "(exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0" (parenthesized_expression "(exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f))" ( (binary_expression "exp[*exp - local_78] & 1 << ((byte)local_94 & 0x1f)" (subscript_expression "exp[*exp - local_78]" identifier [ (binary_expression "*exp - local_78" (pointer_expression "*exp" * identifier) - identifier) ]) & (binary_expression "1 << ((byte)local_94 & 0x1f)" number_literal << (parenthesized_expression "((byte)local_94 & 0x1f)" ( (binary_expression "(byte)local_94 & 0x1f" (cast_expression "(byte)local_94" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) )) != number_literal) )) (compound_statement "{\n        internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);\n        monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);\n        pBVar8 = pBVar21;\n        pBVar21 = local_88;\n      }" { (expression_statement "internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44);" (call_expression "internal_mul(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" identifier (argument_list "(a,pBVar6,pBVar22,in_stack_ffffff40,in_stack_ffffff44)" ( identifier , identifier , identifier , identifier , identifier ))) ;) (expression_statement "monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);" (call_expression "monty_reduce(local_88,n_00,local_60,pBVar6,(int)a)" identifier (argument_list "(local_88,n_00,local_60,pBVar6,(int)a)" ( identifier , identifier , identifier , identifier , (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;) (expression_statement "pBVar8 = pBVar21;" (assignment_expression "pBVar8 = pBVar21" identifier = identifier) ;) (expression_statement "pBVar21 = local_88;" (assignment_expression "pBVar21 = local_88" identifier = identifier) ;) })) (expression_statement "local_88 = pBVar21;" (assignment_expression "local_88 = pBVar21" identifier = identifier) ;) (expression_statement "local_94 = local_94 + -1;" (assignment_expression "local_94 = local_94 + -1" identifier = (binary_expression "local_94 + -1" identifier + number_literal)) ;) (expression_statement "pBVar21 = pBVar8;" (assignment_expression "pBVar21 = pBVar8" identifier = identifier) ;) }) while (parenthesized_expression "(local_94 != -1)" ( (binary_expression "local_94 != -1" identifier != number_literal) )) ;)) })) (labeled_statement "LAB_000645c6:\n  monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);" statement_identifier : (expression_statement "monty_reduce(local_88,n_00,local_60,pBVar6,(int)a);" (call_expression "monty_reduce(local_88,n_00,local_60,pBVar6,(int)a)" identifier (argument_list "(local_88,n_00,local_60,pBVar6,(int)a)" ( identifier , identifier , identifier , identifier , (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;)) (expression_statement "uVar5 = *mod;" (assignment_expression "uVar5 = *mod" identifier = (pointer_expression "*mod" * identifier)) ;) (if_statement "if (uVar5 < 0x3ffffff) {\n    puVar12 = (uint *)safemalloc(uVar5 + 1,4);\n    memset(puVar12,0,(uVar5 + 1) * 4);\n    *puVar12 = uVar5;\n    if (0 < (int)a) {\n      puVar12[uVar5] = local_88[(int)a];\n      pBVar22 = (BignumInt *)0x1;\n      if (a != (BignumInt *)0x1) {\n        do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);\n      }\n      uVar5 = *puVar12;\n    }\n    if (1 < uVar5) {\n      uVar3 = puVar12[uVar5];\n      while (uVar3 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar12 = uVar5;\n        if (uVar5 == 1) break;\n        uVar3 = puVar12[uVar5];\n      }\n    }\n    smemclr(pBVar6,local_20 << 2);\n    safefree(pBVar6);\n    smemclr(local_88,(int)a * 8);\n    safefree(local_88);\n    smemclr(pBVar8,(int)a * 8);\n    safefree(pBVar8);\n    n = (int)a * 4;\n    smemclr(local_60,n);\n    safefree(local_60);\n    smemclr(n_00,n);\n    safefree(n_00);\n    smemclr(local_54,n);\n    safefree(local_54);\n    return puVar12;\n  }" if (parenthesized_expression "(uVar5 < 0x3ffffff)" ( (binary_expression "uVar5 < 0x3ffffff" identifier < number_literal) )) (compound_statement "{\n    puVar12 = (uint *)safemalloc(uVar5 + 1,4);\n    memset(puVar12,0,(uVar5 + 1) * 4);\n    *puVar12 = uVar5;\n    if (0 < (int)a) {\n      puVar12[uVar5] = local_88[(int)a];\n      pBVar22 = (BignumInt *)0x1;\n      if (a != (BignumInt *)0x1) {\n        do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);\n      }\n      uVar5 = *puVar12;\n    }\n    if (1 < uVar5) {\n      uVar3 = puVar12[uVar5];\n      while (uVar3 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar12 = uVar5;\n        if (uVar5 == 1) break;\n        uVar3 = puVar12[uVar5];\n      }\n    }\n    smemclr(pBVar6,local_20 << 2);\n    safefree(pBVar6);\n    smemclr(local_88,(int)a * 8);\n    safefree(local_88);\n    smemclr(pBVar8,(int)a * 8);\n    safefree(pBVar8);\n    n = (int)a * 4;\n    smemclr(local_60,n);\n    safefree(local_60);\n    smemclr(n_00,n);\n    safefree(n_00);\n    smemclr(local_54,n);\n    safefree(local_54);\n    return puVar12;\n  }" { (expression_statement "puVar12 = (uint *)safemalloc(uVar5 + 1,4);" (assignment_expression "puVar12 = (uint *)safemalloc(uVar5 + 1,4)" identifier = (cast_expression "(uint *)safemalloc(uVar5 + 1,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "safemalloc(uVar5 + 1,4)" identifier (argument_list "(uVar5 + 1,4)" ( (binary_expression "uVar5 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(puVar12,0,(uVar5 + 1) * 4);" (call_expression "memset(puVar12,0,(uVar5 + 1) * 4)" identifier (argument_list "(puVar12,0,(uVar5 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar5 + 1) * 4" (parenthesized_expression "(uVar5 + 1)" ( (binary_expression "uVar5 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*puVar12 = uVar5;" (assignment_expression "*puVar12 = uVar5" (pointer_expression "*puVar12" * identifier) = identifier) ;) (if_statement "if (0 < (int)a) {\n      puVar12[uVar5] = local_88[(int)a];\n      pBVar22 = (BignumInt *)0x1;\n      if (a != (BignumInt *)0x1) {\n        do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);\n      }\n      uVar5 = *puVar12;\n    }" if (parenthesized_expression "(0 < (int)a)" ( (binary_expression "0 < (int)a" number_literal < (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      puVar12[uVar5] = local_88[(int)a];\n      pBVar22 = (BignumInt *)0x1;\n      if (a != (BignumInt *)0x1) {\n        do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);\n      }\n      uVar5 = *puVar12;\n    }" { (expression_statement "puVar12[uVar5] = local_88[(int)a];" (assignment_expression "puVar12[uVar5] = local_88[(int)a]" (subscript_expression "puVar12[uVar5]" identifier [ identifier ]) = (subscript_expression "local_88[(int)a]" identifier [ (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) ])) ;) (expression_statement "pBVar22 = (BignumInt *)0x1;" (assignment_expression "pBVar22 = (BignumInt *)0x1" identifier = (cast_expression "(BignumInt *)0x1" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (a != (BignumInt *)0x1) {\n        do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);\n      }" if (parenthesized_expression "(a != (BignumInt *)0x1)" ( (binary_expression "a != (BignumInt *)0x1" identifier != (cast_expression "(BignumInt *)0x1" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);\n      }" { (do_statement "do {\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        } while (a != pBVar22);" do (compound_statement "{\n          iVar1 = (int)a + (int)pBVar22;\n          iVar13 = *puVar12 - (int)pBVar22;\n          pBVar22 = (BignumInt *)((int)pBVar22 + 1);\n          puVar12[iVar13] = local_88[iVar1];\n        }" { (expression_statement "iVar1 = (int)a + (int)pBVar22;" (assignment_expression "iVar1 = (int)a + (int)pBVar22" identifier = (binary_expression "(int)a + (int)pBVar22" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) + (cast_expression "(int)pBVar22" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "iVar13 = *puVar12 - (int)pBVar22;" (assignment_expression "iVar13 = *puVar12 - (int)pBVar22" identifier = (binary_expression "*puVar12 - (int)pBVar22" (pointer_expression "*puVar12" * identifier) - (cast_expression "(int)pBVar22" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "pBVar22 = (BignumInt *)((int)pBVar22 + 1);" (assignment_expression "pBVar22 = (BignumInt *)((int)pBVar22 + 1)" identifier = (cast_expression "(BignumInt *)((int)pBVar22 + 1)" ( (type_descriptor "BignumInt *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pBVar22 + 1)" ( (binary_expression "(int)pBVar22 + 1" (cast_expression "(int)pBVar22" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) (expression_statement "puVar12[iVar13] = local_88[iVar1];" (assignment_expression "puVar12[iVar13] = local_88[iVar1]" (subscript_expression "puVar12[iVar13]" identifier [ identifier ]) = (subscript_expression "local_88[iVar1]" identifier [ identifier ])) ;) }) while (parenthesized_expression "(a != pBVar22)" ( (binary_expression "a != pBVar22" identifier != identifier) )) ;) })) (expression_statement "uVar5 = *puVar12;" (assignment_expression "uVar5 = *puVar12" identifier = (pointer_expression "*puVar12" * identifier)) ;) })) (if_statement "if (1 < uVar5) {\n      uVar3 = puVar12[uVar5];\n      while (uVar3 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar12 = uVar5;\n        if (uVar5 == 1) break;\n        uVar3 = puVar12[uVar5];\n      }\n    }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar3 = puVar12[uVar5];\n      while (uVar3 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar12 = uVar5;\n        if (uVar5 == 1) break;\n        uVar3 = puVar12[uVar5];\n      }\n    }" { (expression_statement "uVar3 = puVar12[uVar5];" (assignment_expression "uVar3 = puVar12[uVar5]" identifier = (subscript_expression "puVar12[uVar5]" identifier [ identifier ])) ;) (while_statement "while (uVar3 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar12 = uVar5;\n        if (uVar5 == 1) break;\n        uVar3 = puVar12[uVar5];\n      }" while (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar5 = uVar5 - 1;\n        *puVar12 = uVar5;\n        if (uVar5 == 1) break;\n        uVar3 = puVar12[uVar5];\n      }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (expression_statement "*puVar12 = uVar5;" (assignment_expression "*puVar12 = uVar5" (pointer_expression "*puVar12" * identifier) = identifier) ;) (if_statement "if (uVar5 == 1) break;" if (parenthesized_expression "(uVar5 == 1)" ( (binary_expression "uVar5 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = puVar12[uVar5];" (assignment_expression "uVar3 = puVar12[uVar5]" identifier = (subscript_expression "puVar12[uVar5]" identifier [ identifier ])) ;) })) })) (expression_statement "smemclr(pBVar6,local_20 << 2);" (call_expression "smemclr(pBVar6,local_20 << 2)" identifier (argument_list "(pBVar6,local_20 << 2)" ( identifier , (binary_expression "local_20 << 2" identifier << number_literal) ))) ;) (expression_statement "safefree(pBVar6);" (call_expression "safefree(pBVar6)" identifier (argument_list "(pBVar6)" ( identifier ))) ;) (expression_statement "smemclr(local_88,(int)a * 8);" (call_expression "smemclr(local_88,(int)a * 8)" identifier (argument_list "(local_88,(int)a * 8)" ( identifier , (binary_expression "(int)a * 8" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) ))) ;) (expression_statement "safefree(local_88);" (call_expression "safefree(local_88)" identifier (argument_list "(local_88)" ( identifier ))) ;) (expression_statement "smemclr(pBVar8,(int)a * 8);" (call_expression "smemclr(pBVar8,(int)a * 8)" identifier (argument_list "(pBVar8,(int)a * 8)" ( identifier , (binary_expression "(int)a * 8" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal) ))) ;) (expression_statement "safefree(pBVar8);" (call_expression "safefree(pBVar8)" identifier (argument_list "(pBVar8)" ( identifier ))) ;) (expression_statement "n = (int)a * 4;" (assignment_expression "n = (int)a * 4" identifier = (binary_expression "(int)a * 4" (cast_expression "(int)a" ( (type_descriptor "int" primitive_type) ) identifier) * number_literal)) ;) (expression_statement "smemclr(local_60,n);" (call_expression "smemclr(local_60,n)" identifier (argument_list "(local_60,n)" ( identifier , identifier ))) ;) (expression_statement "safefree(local_60);" (call_expression "safefree(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) (expression_statement "smemclr(n_00,n);" (call_expression "smemclr(n_00,n)" identifier (argument_list "(n_00,n)" ( identifier , identifier ))) ;) (expression_statement "safefree(n_00);" (call_expression "safefree(n_00)" identifier (argument_list "(n_00)" ( identifier ))) ;) (expression_statement "smemclr(local_54,n);" (call_expression "smemclr(local_54,n)" identifier (argument_list "(local_54,n)" ( identifier , identifier ))) ;) (expression_statement "safefree(local_54);" (call_expression "safefree(local_54)" identifier (argument_list "(local_54)" ( identifier ))) ;) (return_statement "return puVar12;" return identifier ;) })) (labeled_statement "LAB_00064ab0:\n                    /* WARNING: Subroutine does not return */\n  newbn((int)in_stack_ffffff44);" statement_identifier : comment (expression_statement "newbn((int)in_stack_ffffff44);" (call_expression "newbn((int)in_stack_ffffff44)" identifier (argument_list "((int)in_stack_ffffff44)" ( (cast_expression "(int)in_stack_ffffff44" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;)) })))
(translation_unit "uint * FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)\n\n{\n  int iVar1;\n  void *pvVar2;\n  size_t __n;\n  void *pvVar3;\n  longlong lVar4;\n  uint uVar5;\n  uint *puVar6;\n  uint uVar7;\n  uint *puVar8;\n  int *piVar9;\n  int *piVar10;\n  uint *puVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  void *__s;\n  void *pvVar16;\n  int iVar17;\n  void *pvVar18;\n  undefined4 *puVar19;\n  undefined4 *puVar20;\n  int iVar21;\n  void *pvVar22;\n  int iVar23;\n  int iVar24;\n  int iVar25;\n  undefined4 *puVar26;\n  void *pvVar27;\n  int iVar28;\n  int *piVar29;\n  uint uVar30;\n  int iVar31;\n  bool bVar32;\n  uint local_b8;\n  uint *local_b0;\n  int local_94;\n  int local_88;\n  int local_78;\n  int local_60;\n  void *local_54;\n  int local_20;\n  \n  uVar7 = *param_3;\n  if (param_3[uVar7] == 0) {\n                    \n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar5 = param_3[1] & 1;\n  if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }\n  if (0x3fffffe < uVar7) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);\n  memset(puVar6,0,(uVar7 + 1) * 4);\n  *puVar6 = uVar7;\n  FUN_00060250(0);\n  uVar7 = *puVar6;\n  if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }\n  uVar7 = *param_3;\n  if ((int)(uVar7 * 0x20) < 0) {\n                    \n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar15 = uVar7 + 1;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);\n  memset(puVar8,0,(uVar7 + 2) * 4);\n  *puVar8 = uVar15;\n  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    \n    abort();\n  }\n  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;\n  piVar9 = (int *)FUN_00063860(param_3,puVar8);\n  if (piVar9 == (int *)0x0) {\n                    \n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  uVar15 = *param_3;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);\n  memset(puVar6,0,(uVar15 + 1) * 4);\n  *puVar6 = uVar15;\n  FUN_00060250(0);\n  uVar15 = *puVar6;\n  if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }\n  FUN_00032c20(puVar8,*puVar8 * 4 + 4);\n  FUN_00032b40(puVar8);\n  puVar11 = (uint *)FUN_000329a0(uVar7,4);\n  iVar1 = uVar7 - 1;\n  puVar12 = puVar11 + iVar1;\n  puVar8 = param_3;\n  iVar21 = iVar1;\n  uVar15 = uVar5;\n  if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  FUN_00032c20(piVar10,iVar21 * 4 + 4);\n  FUN_00032b40(piVar10);\n  local_88 = FUN_000329a0(uVar7 * 2,4);\n  iVar21 = FUN_000329a0(uVar7 * 2,4);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  local_20 = uVar7 * 3;\nLAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);\n  iVar24 = *param_2;\n  local_78 = 0;\n  puVar6 = (uint *)(param_2 + iVar24);\n  if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *piVar9 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  FUN_0005fba0(__s,uVar7);\n  uVar5 = *param_3;\n  if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }\nLAB_00064ab0:\n                    \n  FUN_0005f500();\n}\n\n" (function_definition "uint * FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)\n\n{\n  int iVar1;\n  void *pvVar2;\n  size_t __n;\n  void *pvVar3;\n  longlong lVar4;\n  uint uVar5;\n  uint *puVar6;\n  uint uVar7;\n  uint *puVar8;\n  int *piVar9;\n  int *piVar10;\n  uint *puVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  void *__s;\n  void *pvVar16;\n  int iVar17;\n  void *pvVar18;\n  undefined4 *puVar19;\n  undefined4 *puVar20;\n  int iVar21;\n  void *pvVar22;\n  int iVar23;\n  int iVar24;\n  int iVar25;\n  undefined4 *puVar26;\n  void *pvVar27;\n  int iVar28;\n  int *piVar29;\n  uint uVar30;\n  int iVar31;\n  bool bVar32;\n  uint local_b8;\n  uint *local_b0;\n  int local_94;\n  int local_88;\n  int local_78;\n  int local_60;\n  void *local_54;\n  int local_20;\n  \n  uVar7 = *param_3;\n  if (param_3[uVar7] == 0) {\n                    \n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar5 = param_3[1] & 1;\n  if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }\n  if (0x3fffffe < uVar7) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);\n  memset(puVar6,0,(uVar7 + 1) * 4);\n  *puVar6 = uVar7;\n  FUN_00060250(0);\n  uVar7 = *puVar6;\n  if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }\n  uVar7 = *param_3;\n  if ((int)(uVar7 * 0x20) < 0) {\n                    \n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar15 = uVar7 + 1;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);\n  memset(puVar8,0,(uVar7 + 2) * 4);\n  *puVar8 = uVar15;\n  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    \n    abort();\n  }\n  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;\n  piVar9 = (int *)FUN_00063860(param_3,puVar8);\n  if (piVar9 == (int *)0x0) {\n                    \n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  uVar15 = *param_3;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);\n  memset(puVar6,0,(uVar15 + 1) * 4);\n  *puVar6 = uVar15;\n  FUN_00060250(0);\n  uVar15 = *puVar6;\n  if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }\n  FUN_00032c20(puVar8,*puVar8 * 4 + 4);\n  FUN_00032b40(puVar8);\n  puVar11 = (uint *)FUN_000329a0(uVar7,4);\n  iVar1 = uVar7 - 1;\n  puVar12 = puVar11 + iVar1;\n  puVar8 = param_3;\n  iVar21 = iVar1;\n  uVar15 = uVar5;\n  if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  FUN_00032c20(piVar10,iVar21 * 4 + 4);\n  FUN_00032b40(piVar10);\n  local_88 = FUN_000329a0(uVar7 * 2,4);\n  iVar21 = FUN_000329a0(uVar7 * 2,4);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  local_20 = uVar7 * 3;\nLAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);\n  iVar24 = *param_2;\n  local_78 = 0;\n  puVar6 = (uint *)(param_2 + iVar24);\n  if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *piVar9 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  FUN_0005fba0(__s,uVar7);\n  uVar5 = *param_3;\n  if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }\nLAB_00064ab0:\n                    \n  FUN_0005f500();\n}" type_identifier (pointer_declarator "* FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)" * (function_declarator "FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)" identifier (parameter_list "(undefined4 param_1,int *param_2,uint *param_3)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) )))) (compound_statement "{\n  int iVar1;\n  void *pvVar2;\n  size_t __n;\n  void *pvVar3;\n  longlong lVar4;\n  uint uVar5;\n  uint *puVar6;\n  uint uVar7;\n  uint *puVar8;\n  int *piVar9;\n  int *piVar10;\n  uint *puVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  void *__s;\n  void *pvVar16;\n  int iVar17;\n  void *pvVar18;\n  undefined4 *puVar19;\n  undefined4 *puVar20;\n  int iVar21;\n  void *pvVar22;\n  int iVar23;\n  int iVar24;\n  int iVar25;\n  undefined4 *puVar26;\n  void *pvVar27;\n  int iVar28;\n  int *piVar29;\n  uint uVar30;\n  int iVar31;\n  bool bVar32;\n  uint local_b8;\n  uint *local_b0;\n  int local_94;\n  int local_88;\n  int local_78;\n  int local_60;\n  void *local_54;\n  int local_20;\n  \n  uVar7 = *param_3;\n  if (param_3[uVar7] == 0) {\n                    \n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar5 = param_3[1] & 1;\n  if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }\n  if (0x3fffffe < uVar7) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);\n  memset(puVar6,0,(uVar7 + 1) * 4);\n  *puVar6 = uVar7;\n  FUN_00060250(0);\n  uVar7 = *puVar6;\n  if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }\n  uVar7 = *param_3;\n  if ((int)(uVar7 * 0x20) < 0) {\n                    \n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar15 = uVar7 + 1;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);\n  memset(puVar8,0,(uVar7 + 2) * 4);\n  *puVar8 = uVar15;\n  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    \n    abort();\n  }\n  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;\n  piVar9 = (int *)FUN_00063860(param_3,puVar8);\n  if (piVar9 == (int *)0x0) {\n                    \n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  uVar15 = *param_3;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);\n  memset(puVar6,0,(uVar15 + 1) * 4);\n  *puVar6 = uVar15;\n  FUN_00060250(0);\n  uVar15 = *puVar6;\n  if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }\n  FUN_00032c20(puVar8,*puVar8 * 4 + 4);\n  FUN_00032b40(puVar8);\n  puVar11 = (uint *)FUN_000329a0(uVar7,4);\n  iVar1 = uVar7 - 1;\n  puVar12 = puVar11 + iVar1;\n  puVar8 = param_3;\n  iVar21 = iVar1;\n  uVar15 = uVar5;\n  if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  FUN_00032c20(piVar10,iVar21 * 4 + 4);\n  FUN_00032b40(piVar10);\n  local_88 = FUN_000329a0(uVar7 * 2,4);\n  iVar21 = FUN_000329a0(uVar7 * 2,4);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  local_20 = uVar7 * 3;\nLAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);\n  iVar24 = *param_2;\n  local_78 = 0;\n  puVar6 = (uint *)(param_2 + iVar24);\n  if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *piVar9 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  FUN_0005fba0(__s,uVar7);\n  uVar5 = *param_3;\n  if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }\nLAB_00064ab0:\n                    \n  FUN_0005f500();\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "void *pvVar2;" primitive_type (pointer_declarator "*pvVar2" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (declaration "longlong lVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "int *piVar9;" primitive_type (pointer_declarator "*piVar9" * identifier) ;) (declaration "int *piVar10;" primitive_type (pointer_declarator "*piVar10" * identifier) ;) (declaration "uint *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "uint *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "void *pvVar16;" primitive_type (pointer_declarator "*pvVar16" * identifier) ;) (declaration "int iVar17;" primitive_type identifier ;) (declaration "void *pvVar18;" primitive_type (pointer_declarator "*pvVar18" * identifier) ;) (declaration "undefined4 *puVar19;" type_identifier (pointer_declarator "*puVar19" * identifier) ;) (declaration "undefined4 *puVar20;" type_identifier (pointer_declarator "*puVar20" * identifier) ;) (declaration "int iVar21;" primitive_type identifier ;) (declaration "void *pvVar22;" primitive_type (pointer_declarator "*pvVar22" * identifier) ;) (declaration "int iVar23;" primitive_type identifier ;) (declaration "int iVar24;" primitive_type identifier ;) (declaration "int iVar25;" primitive_type identifier ;) (declaration "undefined4 *puVar26;" type_identifier (pointer_declarator "*puVar26" * identifier) ;) (declaration "void *pvVar27;" primitive_type (pointer_declarator "*pvVar27" * identifier) ;) (declaration "int iVar28;" primitive_type identifier ;) (declaration "int *piVar29;" primitive_type (pointer_declarator "*piVar29" * identifier) ;) (declaration "uint uVar30;" type_identifier identifier ;) (declaration "int iVar31;" primitive_type identifier ;) (declaration "bool bVar32;" primitive_type identifier ;) (declaration "uint local_b8;" type_identifier identifier ;) (declaration "uint *local_b0;" type_identifier (pointer_declarator "*local_b0" * identifier) ;) (declaration "int local_94;" primitive_type identifier ;) (declaration "int local_88;" primitive_type identifier ;) (declaration "int local_78;" primitive_type identifier ;) (declaration "int local_60;" primitive_type identifier ;) (declaration "void *local_54;" primitive_type (pointer_declarator "*local_54" * identifier) ;) (declaration "int local_20;" primitive_type identifier ;) (expression_statement "uVar7 = *param_3;" (assignment_expression "uVar7 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (param_3[uVar7] == 0) {\n                    \n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }" if (parenthesized_expression "(param_3[uVar7] == 0)" ( (binary_expression "param_3[uVar7] == 0" (subscript_expression "param_3[uVar7]" identifier [ identifier ]) == number_literal) )) (compound_statement "{\n                    \n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }" { (expression_statement "__assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");" (call_expression "__assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow")" identifier (argument_list "("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow")" ( (string_literal ""mod[mod[0]] != 0"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""modpow"" " string_content ") ))) ;) })) (expression_statement "uVar5 = param_3[1] & 1;" (assignment_expression "uVar5 = param_3[1] & 1" identifier = (binary_expression "param_3[1] & 1" (subscript_expression "param_3[1]" identifier [ number_literal ]) & number_literal)) ;) (if_statement "if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }" { (expression_statement "puVar6 = (uint *)FUN_00060da0();" (assignment_expression "puVar6 = (uint *)FUN_00060da0()" identifier = (cast_expression "(uint *)FUN_00060da0()" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00060da0()" identifier (argument_list "()" ( ))))) ;) (return_statement "return puVar6;" return identifier ;) })) (if_statement "if (0x3fffffe < uVar7) goto LAB_00064ab0;" if (parenthesized_expression "(0x3fffffe < uVar7)" ( (binary_expression "0x3fffffe < uVar7" number_literal < identifier) )) (goto_statement "goto LAB_00064ab0;" goto statement_identifier ;)) (expression_statement "puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);" (assignment_expression "puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar7 + 1,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7 + 1,4)" identifier (argument_list "(uVar7 + 1,4)" ( (binary_expression "uVar7 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(puVar6,0,(uVar7 + 1) * 4);" (call_expression "memset(puVar6,0,(uVar7 + 1) * 4)" identifier (argument_list "(puVar6,0,(uVar7 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar7 + 1) * 4" (parenthesized_expression "(uVar7 + 1)" ( (binary_expression "uVar7 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*puVar6 = uVar7;" (assignment_expression "*puVar6 = uVar7" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "FUN_00060250(0);" (call_expression "FUN_00060250(0)" identifier (argument_list "(0)" ( number_literal ))) ;) (expression_statement "uVar7 = *puVar6;" (assignment_expression "uVar7 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (if_statement "if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }" if (parenthesized_expression "(1 < uVar7)" ( (binary_expression "1 < uVar7" number_literal < identifier) )) (compound_statement "{\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }" { (expression_statement "uVar15 = puVar6[uVar7];" (assignment_expression "uVar15 = puVar6[uVar7]" identifier = (subscript_expression "puVar6[uVar7]" identifier [ identifier ])) ;) (while_statement "while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }" while (parenthesized_expression "(uVar15 == 0)" ( (binary_expression "uVar15 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }" { (expression_statement "uVar7 = uVar7 - 1;" (assignment_expression "uVar7 = uVar7 - 1" identifier = (binary_expression "uVar7 - 1" identifier - number_literal)) ;) (expression_statement "*puVar6 = uVar7;" (assignment_expression "*puVar6 = uVar7" (pointer_expression "*puVar6" * identifier) = identifier) ;) (if_statement "if (uVar7 == 1) break;" if (parenthesized_expression "(uVar7 == 1)" ( (binary_expression "uVar7 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar15 = puVar6[uVar7];" (assignment_expression "uVar15 = puVar6[uVar7]" identifier = (subscript_expression "puVar6[uVar7]" identifier [ identifier ])) ;) })) })) (expression_statement "uVar7 = *param_3;" (assignment_expression "uVar7 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if ((int)(uVar7 * 0x20) < 0) {\n                    \n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }" if (parenthesized_expression "((int)(uVar7 * 0x20) < 0)" ( (binary_expression "(int)(uVar7 * 0x20) < 0" (cast_expression "(int)(uVar7 * 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar7 * 0x20)" ( (binary_expression "uVar7 * 0x20" identifier * number_literal) ))) < number_literal) )) (compound_statement "{\n                    \n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }" { (expression_statement "__assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");" (call_expression "__assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2")" identifier (argument_list "("n >= 0","sshbn.c",0x51,"bn_power_2")" ( (string_literal ""n >= 0"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""bn_power_2"" " string_content ") ))) ;) })) (expression_statement "uVar15 = uVar7 + 1;" (assignment_expression "uVar15 = uVar7 + 1" identifier = (binary_expression "uVar7 + 1" identifier + number_literal)) ;) (if_statement "if (0x3fffffe < uVar15) goto LAB_00064ab0;" if (parenthesized_expression "(0x3fffffe < uVar15)" ( (binary_expression "0x3fffffe < uVar15" number_literal < identifier) )) (goto_statement "goto LAB_00064ab0;" goto statement_identifier ;)) (expression_statement "puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);" (assignment_expression "puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar7 + 2,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7 + 2,4)" identifier (argument_list "(uVar7 + 2,4)" ( (binary_expression "uVar7 + 2" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(puVar8,0,(uVar7 + 2) * 4);" (call_expression "memset(puVar8,0,(uVar7 + 2) * 4)" identifier (argument_list "(puVar8,0,(uVar7 + 2) * 4)" ( identifier , number_literal , (binary_expression "(uVar7 + 2) * 4" (parenthesized_expression "(uVar7 + 2)" ( (binary_expression "uVar7 + 2" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*puVar8 = uVar15;" (assignment_expression "*puVar8 = uVar15" (pointer_expression "*puVar8" * identifier) = identifier) ;) (if_statement "if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    \n    abort();\n  }" if (parenthesized_expression "((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20))" ( (binary_expression "(int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)" (cast_expression "(int)(uVar15 * 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar15 * 0x20)" ( (binary_expression "uVar15 * 0x20" identifier * number_literal) ))) <= (cast_expression "(int)(uVar7 * 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar7 * 0x20)" ( (binary_expression "uVar7 * 0x20" identifier * number_literal) )))) )) (compound_statement "{\n                    \n    abort();\n  }" { (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;" (assignment_expression "puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1" (subscript_expression "puVar8[uVar7 + 1]" identifier [ (binary_expression "uVar7 + 1" identifier + number_literal) ]) = (binary_expression "puVar8[uVar7 + 1] | 1" (subscript_expression "puVar8[uVar7 + 1]" identifier [ (binary_expression "uVar7 + 1" identifier + number_literal) ]) | number_literal)) ;) (expression_statement "piVar9 = (int *)FUN_00063860(param_3,puVar8);" (assignment_expression "piVar9 = (int *)FUN_00063860(param_3,puVar8)" identifier = (cast_expression "(int *)FUN_00063860(param_3,puVar8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00063860(param_3,puVar8)" identifier (argument_list "(param_3,puVar8)" ( identifier , identifier ))))) ;) (if_statement "if (piVar9 == (int *)0x0) {\n                    \n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }" if (parenthesized_expression "(piVar9 == (int *)0x0)" ( (binary_expression "piVar9 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                    \n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }" { (expression_statement "__assert_fail("inv","sshbn.c",0x443,"modpow");" (call_expression "__assert_fail("inv","sshbn.c",0x443,"modpow")" identifier (argument_list "("inv","sshbn.c",0x443,"modpow")" ( (string_literal ""inv"" " string_content ") , (string_literal ""sshbn.c"" " string_content ") , number_literal , (string_literal ""modpow"" " string_content ") ))) ;) })) (expression_statement "piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);" (assignment_expression "piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3)" identifier = (cast_expression "(int *)FUN_00061810(puVar6,puVar8,param_3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00061810(puVar6,puVar8,param_3)" identifier (argument_list "(puVar6,puVar8,param_3)" ( identifier , identifier , identifier ))))) ;) (expression_statement "FUN_00032c20(puVar6,*puVar6 * 4 + 4);" (call_expression "FUN_00032c20(puVar6,*puVar6 * 4 + 4)" identifier (argument_list "(puVar6,*puVar6 * 4 + 4)" ( identifier , (binary_expression "*puVar6 * 4 + 4" (binary_expression "*puVar6 * 4" (pointer_expression "*puVar6" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(puVar6);" (call_expression "FUN_00032b40(puVar6)" identifier (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "uVar15 = *param_3;" (assignment_expression "uVar15 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (0x3fffffe < uVar15) goto LAB_00064ab0;" if (parenthesized_expression "(0x3fffffe < uVar15)" ( (binary_expression "0x3fffffe < uVar15" number_literal < identifier) )) (goto_statement "goto LAB_00064ab0;" goto statement_identifier ;)) (expression_statement "puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);" (assignment_expression "puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar15 + 1,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar15 + 1,4)" identifier (argument_list "(uVar15 + 1,4)" ( (binary_expression "uVar15 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(puVar6,0,(uVar15 + 1) * 4);" (call_expression "memset(puVar6,0,(uVar15 + 1) * 4)" identifier (argument_list "(puVar6,0,(uVar15 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar15 + 1) * 4" (parenthesized_expression "(uVar15 + 1)" ( (binary_expression "uVar15 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*puVar6 = uVar15;" (assignment_expression "*puVar6 = uVar15" (pointer_expression "*puVar6" * identifier) = identifier) ;) (expression_statement "FUN_00060250(0);" (call_expression "FUN_00060250(0)" identifier (argument_list "(0)" ( number_literal ))) ;) (expression_statement "uVar15 = *puVar6;" (assignment_expression "uVar15 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (if_statement "if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }" if (parenthesized_expression "(1 < uVar15)" ( (binary_expression "1 < uVar15" number_literal < identifier) )) (compound_statement "{\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }" { (do_statement "do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);" do (compound_statement "{\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    }" { (if_statement "if (puVar6[uVar15] != 0) break;" if (parenthesized_expression "(puVar6[uVar15] != 0)" ( (binary_expression "puVar6[uVar15] != 0" (subscript_expression "puVar6[uVar15]" identifier [ identifier ]) != number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar15 = uVar15 - 1;" (assignment_expression "uVar15 = uVar15 - 1" identifier = (binary_expression "uVar15 - 1" identifier - number_literal)) ;) (expression_statement "*puVar6 = uVar15;" (assignment_expression "*puVar6 = uVar15" (pointer_expression "*puVar6" * identifier) = identifier) ;) }) while (parenthesized_expression "(uVar15 != 1)" ( (binary_expression "uVar15 != 1" identifier != number_literal) )) ;) })) (expression_statement "FUN_00032c20(puVar8,*puVar8 * 4 + 4);" (call_expression "FUN_00032c20(puVar8,*puVar8 * 4 + 4)" identifier (argument_list "(puVar8,*puVar8 * 4 + 4)" ( identifier , (binary_expression "*puVar8 * 4 + 4" (binary_expression "*puVar8 * 4" (pointer_expression "*puVar8" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(puVar8);" (call_expression "FUN_00032b40(puVar8)" identifier (argument_list "(puVar8)" ( identifier ))) ;) (expression_statement "puVar11 = (uint *)FUN_000329a0(uVar7,4);" (assignment_expression "puVar11 = (uint *)FUN_000329a0(uVar7,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar7,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal ))))) ;) (expression_statement "iVar1 = uVar7 - 1;" (assignment_expression "iVar1 = uVar7 - 1" identifier = (binary_expression "uVar7 - 1" identifier - number_literal)) ;) (expression_statement "puVar12 = puVar11 + iVar1;" (assignment_expression "puVar12 = puVar11 + iVar1" identifier = (binary_expression "puVar11 + iVar1" identifier + identifier)) ;) (expression_statement "puVar8 = param_3;" (assignment_expression "puVar8 = param_3" identifier = identifier) ;) (expression_statement "iVar21 = iVar1;" (assignment_expression "iVar21 = iVar1" identifier = identifier) ;) (expression_statement "uVar15 = uVar5;" (assignment_expression "uVar15 = uVar5" identifier = identifier) ;) (if_statement "if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" if (parenthesized_expression "((int)uVar7 < 1)" ( (binary_expression "(int)uVar7 < 1" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }" { (expression_statement "local_60 = FUN_000329a0(uVar7,4);" (assignment_expression "local_60 = FUN_000329a0(uVar7,4)" identifier = (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal )))) ;) (expression_statement "FUN_00032c20(piVar9,*piVar9 * 4 + 4);" (call_expression "FUN_00032c20(piVar9,*piVar9 * 4 + 4)" identifier (argument_list "(piVar9,*piVar9 * 4 + 4)" ( identifier , (binary_expression "*piVar9 * 4 + 4" (binary_expression "*piVar9 * 4" (pointer_expression "*piVar9" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(piVar9);" (call_expression "FUN_00032b40(piVar9)" identifier (argument_list "(piVar9)" ( identifier ))) ;) (expression_statement "local_54 = (void *)FUN_000329a0(uVar7,4);" (assignment_expression "local_54 = (void *)FUN_000329a0(uVar7,4)" identifier = (cast_expression "(void *)FUN_000329a0(uVar7,4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal ))))) ;) (if_statement "if (-1 < iVar1) goto LAB_000640c0;" if (parenthesized_expression "(-1 < iVar1)" ( (binary_expression "-1 < iVar1" number_literal < identifier) )) (goto_statement "goto LAB_000640c0;" goto statement_identifier ;)) (expression_statement "iVar21 = *piVar10;" (assignment_expression "iVar21 = *piVar10" identifier = (pointer_expression "*piVar10" * identifier)) ;) }) (else_clause "else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" else (compound_statement "{\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" { (do_statement "do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);" do (compound_statement "{\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    }" { (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" identifier = (binary_expression "puVar8 + 1" identifier + number_literal)) ;) (expression_statement "*puVar12 = *puVar8;" (assignment_expression "*puVar12 = *puVar8" (pointer_expression "*puVar12" * identifier) = (pointer_expression "*puVar8" * identifier)) ;) (expression_statement "bVar32 = puVar11 != puVar12;" (assignment_expression "bVar32 = puVar11 != puVar12" identifier = (binary_expression "puVar11 != puVar12" identifier != identifier)) ;) (expression_statement "puVar12 = puVar12 + -1;" (assignment_expression "puVar12 = puVar12 + -1" identifier = (binary_expression "puVar12 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(bVar32)" ( identifier )) ;) (expression_statement "local_60 = FUN_000329a0(uVar7,4);" (assignment_expression "local_60 = FUN_000329a0(uVar7,4)" identifier = (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal )))) ;) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (expression_statement "piVar29 = (int *)(iVar1 * 4 + local_60);" (assignment_expression "piVar29 = (int *)(iVar1 * 4 + local_60)" identifier = (cast_expression "(int *)(iVar1 * 4 + local_60)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 * 4 + local_60)" ( (binary_expression "iVar1 * 4 + local_60" (binary_expression "iVar1 * 4" identifier * number_literal) + identifier) )))) ;) (do_statement "do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);" do (compound_statement "{\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    }" { (while_statement "while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }" while (parenthesized_expression "(*piVar9 <= (int)uVar13)" ( (binary_expression "*piVar9 <= (int)uVar13" (pointer_expression "*piVar9" * identifier) <= (cast_expression "(int)uVar13" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }" { (expression_statement "*piVar29 = 0;" (assignment_expression "*piVar29 = 0" (pointer_expression "*piVar29" * identifier) = number_literal) ;) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "piVar29 = piVar29 + -1;" (assignment_expression "piVar29 = piVar29 + -1" identifier = (binary_expression "piVar29 + -1" identifier + number_literal)) ;) (if_statement "if (uVar7 == uVar13) goto LAB_0006405b;" if (parenthesized_expression "(uVar7 == uVar13)" ( (binary_expression "uVar7 == uVar13" identifier == identifier) )) (goto_statement "goto LAB_0006405b;" goto statement_identifier ;)) })) (expression_statement "iVar24 = uVar13 + 1;" (assignment_expression "iVar24 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" identifier = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "*piVar29 = piVar9[iVar24];" (assignment_expression "*piVar29 = piVar9[iVar24]" (pointer_expression "*piVar29" * identifier) = (subscript_expression "piVar9[iVar24]" identifier [ identifier ])) ;) (expression_statement "piVar29 = piVar29 + -1;" (assignment_expression "piVar29 = piVar29 + -1" identifier = (binary_expression "piVar29 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar13 != uVar7)" ( (binary_expression "uVar13 != uVar7" identifier != identifier) )) ;) (labeled_statement "LAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);" statement_identifier : (expression_statement "FUN_00032c20(piVar9,*piVar9 * 4 + 4);" (call_expression "FUN_00032c20(piVar9,*piVar9 * 4 + 4)" identifier (argument_list "(piVar9,*piVar9 * 4 + 4)" ( identifier , (binary_expression "*piVar9 * 4 + 4" (binary_expression "*piVar9 * 4" (pointer_expression "*piVar9" * identifier) * number_literal) + number_literal) ))) ;)) (expression_statement "FUN_00032b40(piVar9);" (call_expression "FUN_00032b40(piVar9)" identifier (argument_list "(piVar9)" ( identifier ))) ;) (expression_statement "local_54 = (void *)FUN_000329a0(uVar7,4);" (assignment_expression "local_54 = (void *)FUN_000329a0(uVar7,4)" identifier = (cast_expression "(void *)FUN_000329a0(uVar7,4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar7,4)" identifier (argument_list "(uVar7,4)" ( identifier , number_literal ))))) ;) (expression_statement "memset(local_54,0,uVar7 * 4);" (call_expression "memset(local_54,0,uVar7 * 4)" identifier (argument_list "(local_54,0,uVar7 * 4)" ( identifier , number_literal , (binary_expression "uVar7 * 4" identifier * number_literal) ))) ;) (labeled_statement "LAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);" statement_identifier : (do_statement "do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);" do (compound_statement "{\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    }" { (expression_statement "uVar13 = *(uint *)((int)local_54 + iVar21 * 4);" (assignment_expression "uVar13 = *(uint *)((int)local_54 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)((int)local_54 + iVar21 * 4)" * (cast_expression "(uint *)((int)local_54 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_54 + iVar21 * 4)" ( (binary_expression "(int)local_54 + iVar21 * 4" (cast_expression "(int)local_54" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar30 = uVar15 + uVar13;" (assignment_expression "uVar30 = uVar15 + uVar13" identifier = (binary_expression "uVar15 + uVar13" identifier + identifier)) ;) (expression_statement "uVar14 = ~*(uint *)(local_60 + iVar21 * 4);" (assignment_expression "uVar14 = ~*(uint *)(local_60 + iVar21 * 4)" identifier = (unary_expression "~*(uint *)(local_60 + iVar21 * 4)" ~ (pointer_expression "*(uint *)(local_60 + iVar21 * 4)" * (cast_expression "(uint *)(local_60 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + iVar21 * 4)" ( (binary_expression "local_60 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) )))))) ;) (expression_statement "*(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;" (assignment_expression "*(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30" (pointer_expression "*(uint *)(local_60 + iVar21 * 4)" * (cast_expression "(uint *)(local_60 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + iVar21 * 4)" ( (binary_expression "local_60 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = (binary_expression "uVar14 + uVar30" identifier + identifier)) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);" (assignment_expression "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30)" identifier = (binary_expression "(uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30)" (cast_expression "(uint)CARRY4(uVar15,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar15,uVar13)" identifier (argument_list "(uVar15,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar14,uVar30)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar14,uVar30)" identifier (argument_list "(uVar14,uVar30)" ( identifier , identifier )))))) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;)) (expression_statement "iVar21 = *piVar10;" (assignment_expression "iVar21 = *piVar10" identifier = (pointer_expression "*piVar10" * identifier)) ;) (if_statement "if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }" { (expression_statement "piVar9 = (int *)((int)local_54 + iVar1 * 4);" (assignment_expression "piVar9 = (int *)((int)local_54 + iVar1 * 4)" identifier = (cast_expression "(int *)((int)local_54 + iVar1 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)local_54 + iVar1 * 4)" ( (binary_expression "(int)local_54 + iVar1 * 4" (cast_expression "(int)local_54" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar1 * 4" identifier * number_literal)) )))) ;) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (if_statement "if (iVar21 < 1) goto LAB_0006412f;" if (parenthesized_expression "(iVar21 < 1)" ( (binary_expression "iVar21 < 1" identifier < number_literal) )) (goto_statement "goto LAB_0006412f;" goto statement_identifier ;)) (labeled_statement "LAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];" statement_identifier : (expression_statement "*piVar9 = piVar10[uVar15 + 1];" (assignment_expression "*piVar9 = piVar10[uVar15 + 1]" (pointer_expression "*piVar9" * identifier) = (subscript_expression "piVar10[uVar15 + 1]" identifier [ (binary_expression "uVar15 + 1" identifier + number_literal) ])) ;)) (labeled_statement "joined_r0x00064127:\n      uVar15 = uVar15 + 1;" statement_identifier : (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;)) (if_statement "if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }" if (parenthesized_expression "(uVar15 == uVar7)" ( (binary_expression "uVar15 == uVar7" identifier == identifier) )) (compound_statement "{\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }" { (expression_statement "FUN_00032c20(piVar10,*piVar10 * 4 + 4);" (call_expression "FUN_00032c20(piVar10,*piVar10 * 4 + 4)" identifier (argument_list "(piVar10,*piVar10 * 4 + 4)" ( identifier , (binary_expression "*piVar10 * 4 + 4" (binary_expression "*piVar10 * 4" (pointer_expression "*piVar10" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(piVar10);" (call_expression "FUN_00032b40(piVar10)" identifier (argument_list "(piVar10)" ( identifier ))) ;) (expression_statement "local_88 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "local_88 = FUN_000329a0(uVar7 * 2,4)" identifier = (call_expression "FUN_000329a0(uVar7 * 2,4)" identifier (argument_list "(uVar7 * 2,4)" ( (binary_expression "uVar7 * 2" identifier * number_literal) , number_literal )))) ;) (expression_statement "iVar21 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "iVar21 = FUN_000329a0(uVar7 * 2,4)" identifier = (call_expression "FUN_000329a0(uVar7 * 2,4)" identifier (argument_list "(uVar7 * 2,4)" ( (binary_expression "uVar7 * 2" identifier * number_literal) , number_literal )))) ;) (expression_statement "puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);" (assignment_expression "puVar8 = (uint *)(local_88 + -4 + uVar7 * 8)" identifier = (cast_expression "(uint *)(local_88 + -4 + uVar7 * 8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_88 + -4 + uVar7 * 8)" ( (binary_expression "local_88 + -4 + uVar7 * 8" (binary_expression "local_88 + -4" identifier + number_literal) + (binary_expression "uVar7 * 8" identifier * number_literal)) )))) ;) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (do_statement "do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);" do (compound_statement "{\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        }" { (if_statement "if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }" if (parenthesized_expression "((int)uVar15 < (int)*puVar6)" ( (binary_expression "(int)uVar15 < (int)*puVar6" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) < (cast_expression "(int)*puVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*puVar6" * identifier))) )) (compound_statement "{\n            *puVar8 = puVar6[uVar15 + 1];\n          }" { (expression_statement "*puVar8 = puVar6[uVar15 + 1];" (assignment_expression "*puVar8 = puVar6[uVar15 + 1]" (pointer_expression "*puVar8" * identifier) = (subscript_expression "puVar6[uVar15 + 1]" identifier [ (binary_expression "uVar15 + 1" identifier + number_literal) ])) ;) }) (else_clause "else {\n            *puVar8 = 0;\n          }" else (compound_statement "{\n            *puVar8 = 0;\n          }" { (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" * identifier) = number_literal) ;) }))) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" identifier = (binary_expression "uVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar7 != uVar15)" ( (binary_expression "uVar7 != uVar15" identifier != identifier) )) ;) (expression_statement "FUN_00032c20(puVar6,*puVar6 * 4 + 4);" (call_expression "FUN_00032c20(puVar6,*puVar6 * 4 + 4)" identifier (argument_list "(puVar6,*puVar6 * 4 + 4)" ( identifier , (binary_expression "*puVar6 * 4 + 4" (binary_expression "*puVar6 * 4" (pointer_expression "*puVar6" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(puVar6);" (call_expression "FUN_00032b40(puVar6)" identifier (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "local_20 = uVar7 * 3;" (assignment_expression "local_20 = uVar7 * 3" identifier = (binary_expression "uVar7 * 3" identifier * number_literal)) ;) (if_statement "if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }" if (parenthesized_expression "(0x32 < (int)uVar7)" ( (binary_expression "0x32 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }" { (expression_statement "iVar24 = 0;" (assignment_expression "iVar24 = 0" identifier = number_literal) ;) (expression_statement "uVar15 = uVar7;" (assignment_expression "uVar15 = uVar7" identifier = identifier) ;) (do_statement "do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);" do (compound_statement "{\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          }" { (expression_statement "uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;" (assignment_expression "uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1" identifier = (binary_expression "(uVar15 - ((int)uVar15 >> 1)) + 1" (parenthesized_expression "(uVar15 - ((int)uVar15 >> 1))" ( (binary_expression "uVar15 - ((int)uVar15 >> 1)" identifier - (parenthesized_expression "((int)uVar15 >> 1)" ( (binary_expression "(int)uVar15 >> 1" (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ))) )) + number_literal)) ;) (expression_statement "iVar24 = iVar24 + uVar15 * 4;" (assignment_expression "iVar24 = iVar24 + uVar15 * 4" identifier = (binary_expression "iVar24 + uVar15 * 4" identifier + (binary_expression "uVar15 * 4" identifier * number_literal))) ;) }) while (parenthesized_expression "(0x32 < (int)uVar15)" ( (binary_expression "0x32 < (int)uVar15" number_literal < (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (expression_statement "local_20 = local_20 + iVar24;" (assignment_expression "local_20 = local_20 + iVar24" identifier = (binary_expression "local_20 + iVar24" identifier + identifier)) ;) })) (goto_statement "goto LAB_0006421b;" goto statement_identifier ;) })) (expression_statement "piVar9 = piVar9 + -1;" (assignment_expression "piVar9 = piVar9 + -1" identifier = (binary_expression "piVar9 + -1" identifier + number_literal)) ;) (if_statement "if (*piVar10 <= (int)uVar15) goto LAB_0006412f;" if (parenthesized_expression "(*piVar10 <= (int)uVar15)" ( (binary_expression "*piVar10 <= (int)uVar15" (pointer_expression "*piVar10" * identifier) <= (cast_expression "(int)uVar15" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_0006412f;" goto statement_identifier ;)) (goto_statement "goto LAB_00064118;" goto statement_identifier ;) })) }))) (expression_statement "FUN_00032c20(piVar10,iVar21 * 4 + 4);" (call_expression "FUN_00032c20(piVar10,iVar21 * 4 + 4)" identifier (argument_list "(piVar10,iVar21 * 4 + 4)" ( identifier , (binary_expression "iVar21 * 4 + 4" (binary_expression "iVar21 * 4" identifier * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(piVar10);" (call_expression "FUN_00032b40(piVar10)" identifier (argument_list "(piVar10)" ( identifier ))) ;) (expression_statement "local_88 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "local_88 = FUN_000329a0(uVar7 * 2,4)" identifier = (call_expression "FUN_000329a0(uVar7 * 2,4)" identifier (argument_list "(uVar7 * 2,4)" ( (binary_expression "uVar7 * 2" identifier * number_literal) , number_literal )))) ;) (expression_statement "iVar21 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "iVar21 = FUN_000329a0(uVar7 * 2,4)" identifier = (call_expression "FUN_000329a0(uVar7 * 2,4)" identifier (argument_list "(uVar7 * 2,4)" ( (binary_expression "uVar7 * 2" identifier * number_literal) , number_literal )))) ;) (expression_statement "FUN_00032c20(puVar6,*puVar6 * 4 + 4);" (call_expression "FUN_00032c20(puVar6,*puVar6 * 4 + 4)" identifier (argument_list "(puVar6,*puVar6 * 4 + 4)" ( identifier , (binary_expression "*puVar6 * 4 + 4" (binary_expression "*puVar6 * 4" (pointer_expression "*puVar6" * identifier) * number_literal) + number_literal) ))) ;) (expression_statement "FUN_00032b40(puVar6);" (call_expression "FUN_00032b40(puVar6)" identifier (argument_list "(puVar6)" ( identifier ))) ;) (expression_statement "local_20 = uVar7 * 3;" (assignment_expression "local_20 = uVar7 * 3" identifier = (binary_expression "uVar7 * 3" identifier * number_literal)) ;) (labeled_statement "LAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);" statement_identifier : (expression_statement "__s = (void *)FUN_000329a0(local_20,4);" (assignment_expression "__s = (void *)FUN_000329a0(local_20,4)" identifier = (cast_expression "(void *)FUN_000329a0(local_20,4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(local_20,4)" identifier (argument_list "(local_20,4)" ( identifier , number_literal ))))) ;)) (expression_statement "iVar24 = *param_2;" (assignment_expression "iVar24 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "local_78 = 0;" (assignment_expression "local_78 = 0" identifier = number_literal) ;) (expression_statement "puVar6 = (uint *)(param_2 + iVar24);" (assignment_expression "puVar6 = (uint *)(param_2 + iVar24)" identifier = (cast_expression "(uint *)(param_2 + iVar24)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + iVar24)" ( (binary_expression "param_2 + iVar24" identifier + identifier) )))) ;) (if_statement "if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }" if (parenthesized_expression "(0 < iVar24)" ( (binary_expression "0 < iVar24" number_literal < identifier) )) (compound_statement "{\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }" { (do_statement "do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);" do (compound_statement "{\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    }" { (expression_statement "local_94 = 0x1f;" (assignment_expression "local_94 = 0x1f" identifier = number_literal) ;) (do_statement "do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);" do (compound_statement "{\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      }" { (if_statement "if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }" if (parenthesized_expression "((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0)" ( (binary_expression "(1 << ((byte)local_94 & 0x1f) & *puVar6) != 0" (parenthesized_expression "(1 << ((byte)local_94 & 0x1f) & *puVar6)" ( (binary_expression "1 << ((byte)local_94 & 0x1f) & *puVar6" (binary_expression "1 << ((byte)local_94 & 0x1f)" number_literal << (parenthesized_expression "((byte)local_94 & 0x1f)" ( (binary_expression "(byte)local_94 & 0x1f" (cast_expression "(byte)local_94" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) ))) & (pointer_expression "*puVar6" * identifier)) )) != number_literal) )) (compound_statement "{\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }" { (if_statement "if (iVar24 <= local_78) goto LAB_000645c6;" if (parenthesized_expression "(iVar24 <= local_78)" ( (binary_expression "iVar24 <= local_78" identifier <= identifier) )) (goto_statement "goto LAB_000645c6;" goto statement_identifier ;)) (expression_statement "iVar31 = uVar7 * 2 + -1;" (assignment_expression "iVar31 = uVar7 * 2 + -1" identifier = (binary_expression "uVar7 * 2 + -1" (binary_expression "uVar7 * 2" identifier * number_literal) + number_literal)) ;) (expression_statement "__n = uVar7 * 4;" (assignment_expression "__n = uVar7 * 4" identifier = (binary_expression "uVar7 * 4" identifier * number_literal)) ;) (expression_statement "pvVar2 = (void *)((int)__s + uVar7 * 0xc);" (assignment_expression "pvVar2 = (void *)((int)__s + uVar7 * 0xc)" identifier = (cast_expression "(void *)((int)__s + uVar7 * 0xc)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__s + uVar7 * 0xc)" ( (binary_expression "(int)__s + uVar7 * 0xc" (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "uVar7 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "pvVar16 = (void *)((int)__s + __n);" (assignment_expression "pvVar16 = (void *)((int)__s + __n)" identifier = (cast_expression "(void *)((int)__s + __n)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__s + __n)" ( (binary_expression "(int)__s + __n" (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "iVar25 = (int)uVar7 >> 1;" (assignment_expression "iVar25 = (int)uVar7 >> 1" identifier = (binary_expression "(int)uVar7 >> 1" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal)) ;) (expression_statement "pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);" (assignment_expression "pvVar3 = (void *)((int)pvVar2 + uVar7 * 8)" identifier = (cast_expression "(void *)((int)pvVar2 + uVar7 * 8)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + uVar7 * 8)" ( (binary_expression "(int)pvVar2 + uVar7 * 8" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "uVar7 * 8" identifier * number_literal)) )))) ;) (expression_statement "iVar17 = uVar7 - iVar25;" (assignment_expression "iVar17 = uVar7 - iVar25" identifier = (binary_expression "uVar7 - iVar25" identifier - identifier)) ;) (expression_statement "iVar24 = iVar17 + iVar25 * 2;" (assignment_expression "iVar24 = iVar17 + iVar25 * 2" identifier = (binary_expression "iVar17 + iVar25 * 2" identifier + (binary_expression "iVar25 * 2" identifier * number_literal))) ;) (expression_statement "iVar28 = iVar21;" (assignment_expression "iVar28 = iVar21" identifier = identifier) ;) (goto_statement "goto LAB_00064370;" goto statement_identifier ;) })) (expression_statement "local_94 = local_94 + -1;" (assignment_expression "local_94 = local_94 + -1" identifier = (binary_expression "local_94 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_94 != -1)" ( (binary_expression "local_94 != -1" identifier != number_literal) )) ;) (expression_statement "local_78 = local_78 + 1;" (assignment_expression "local_78 = local_78 + 1" identifier = (binary_expression "local_78 + 1" identifier + number_literal)) ;) (expression_statement "puVar6 = puVar6 + -1;" (assignment_expression "puVar6 = puVar6 + -1" identifier = (binary_expression "puVar6 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar24 != local_78)" ( (binary_expression "iVar24 != local_78" identifier != identifier) )) ;) })) (goto_statement "goto LAB_000645c6;" goto statement_identifier ;) (labeled_statement "LAB_0006412f:\n  *piVar9 = 0;" statement_identifier : (expression_statement "*piVar9 = 0;" (assignment_expression "*piVar9 = 0" (pointer_expression "*piVar9" * identifier) = number_literal) ;)) (goto_statement "goto joined_r0x00064127;" goto statement_identifier ;) (while_statement "while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }" { (expression_statement "local_78 = local_78 + 1;" (assignment_expression "local_78 = local_78 + 1" identifier = (binary_expression "local_78 + 1" identifier + number_literal)) ;) (expression_statement "local_94 = 0x1f;" (assignment_expression "local_94 = 0x1f" identifier = number_literal) ;) (if_statement "if (*param_2 <= local_78) break;" if (parenthesized_expression "(*param_2 <= local_78)" ( (binary_expression "*param_2 <= local_78" (pointer_expression "*param_2" * identifier) <= identifier) )) (break_statement "break;" break ;)) (labeled_statement "LAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);" statement_identifier : (do_statement "do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);" do (compound_statement "{\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    }" { (expression_statement "FUN_0005f530(uVar7,__s);" (call_expression "FUN_0005f530(uVar7,__s)" identifier (argument_list "(uVar7,__s)" ( identifier , identifier ))) ;) (expression_statement "puVar6 = (uint *)(iVar28 + __n);" (assignment_expression "puVar6 = (uint *)(iVar28 + __n)" identifier = (cast_expression "(uint *)(iVar28 + __n)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + __n)" ( (binary_expression "iVar28 + __n" identifier + identifier) )))) ;) (if_statement "if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }" if (parenthesized_expression "((int)uVar7 < 0x33)" ( (binary_expression "(int)uVar7 < 0x33" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) )) (compound_statement "{\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }" { (if_statement "if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n          memset(__s,0,__n);\n        }" { (expression_statement "memset(__s,0,__n);" (call_expression "memset(__s,0,__n)" identifier (argument_list "(__s,0,__n)" ( identifier , number_literal , identifier ))) ;) })) (expression_statement "local_b0 = puVar6 + uVar7;" (assignment_expression "local_b0 = puVar6 + uVar7" identifier = (binary_expression "puVar6 + uVar7" identifier + identifier)) ;) (if_statement "if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }" if (parenthesized_expression "((puVar6 < local_b0) && (__s < pvVar16))" ( (binary_expression "(puVar6 < local_b0) && (__s < pvVar16)" (parenthesized_expression "(puVar6 < local_b0)" ( (binary_expression "puVar6 < local_b0" identifier < identifier) )) && (parenthesized_expression "(__s < pvVar16)" ( (binary_expression "__s < pvVar16" identifier < identifier) ))) )) (compound_statement "{\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }" { (expression_statement "pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);" (assignment_expression "pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16)" identifier = (cast_expression "(void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((int)puVar6 - (int)local_b0) + (int)pvVar16)" ( (binary_expression "((int)puVar6 - (int)local_b0) + (int)pvVar16" (parenthesized_expression "((int)puVar6 - (int)local_b0)" ( (binary_expression "(int)puVar6 - (int)local_b0" (cast_expression "(int)puVar6" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)local_b0" ( (type_descriptor "int" primitive_type) ) identifier)) )) + (cast_expression "(int)pvVar16" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "pvVar27 = pvVar16;" (assignment_expression "pvVar27 = pvVar16" identifier = identifier) ;) (if_statement "if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }" if (parenthesized_expression "(pvVar18 < __s)" ( (binary_expression "pvVar18 < __s" identifier < identifier) )) (compound_statement "{\n            pvVar18 = __s;\n          }" { (expression_statement "pvVar18 = __s;" (assignment_expression "pvVar18 = __s" identifier = identifier) ;) })) (do_statement "do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);" do (compound_statement "{\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          }" { (expression_statement "local_b0 = local_b0 + -1;" (assignment_expression "local_b0 = local_b0 + -1" identifier = (binary_expression "local_b0 + -1" identifier + number_literal)) ;) (expression_statement "local_b8 = 0;" (assignment_expression "local_b8 = 0" identifier = number_literal) ;) (expression_statement "pvVar22 = pvVar27;" (assignment_expression "pvVar22 = pvVar27" identifier = identifier) ;) (expression_statement "puVar8 = (uint *)(local_60 + -4 + __n);" (assignment_expression "puVar8 = (uint *)(local_60 + -4 + __n)" identifier = (cast_expression "(uint *)(local_60 + -4 + __n)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_60 + -4 + __n)" ( (binary_expression "local_60 + -4 + __n" (binary_expression "local_60 + -4" identifier + number_literal) + identifier) )))) ;) (do_statement "do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);" do (compound_statement "{\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            }" { (expression_statement "lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;" (assignment_expression "lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8" identifier = (binary_expression "(ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8" (binary_expression "(ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4)" (binary_expression "(ulonglong)*puVar8 * (ulonglong)*local_b0" (binary_expression "(ulonglong)*puVar8 * (ulonglong)" (binary_expression "(ulonglong)*puVar8" (parenthesized_expression "(ulonglong)" ( identifier )) * identifier) * (parenthesized_expression "(ulonglong)" ( identifier ))) * identifier) + (binary_expression "(ulonglong)*(uint *)((int)pvVar22 + -4)" (parenthesized_expression "(ulonglong)" ( identifier )) * (cast_expression "(uint *)((int)pvVar22 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar22 + -4)" ( (binary_expression "(int)pvVar22 + -4" (cast_expression "(int)pvVar22" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) + (cast_expression "(ulonglong)local_b8" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "local_b8 = (uint)((ulonglong)lVar4 >> 0x20);" (assignment_expression "local_b8 = (uint)((ulonglong)lVar4 >> 0x20)" identifier = (call_expression "(uint)((ulonglong)lVar4 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulonglong)lVar4 >> 0x20)" ( (binary_expression "(ulonglong)lVar4 >> 0x20" (cast_expression "(ulonglong)lVar4" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "*(int *)((int)pvVar22 + -4) = (int)lVar4;" (assignment_expression "*(int *)((int)pvVar22 + -4) = (int)lVar4" (pointer_expression "*(int *)((int)pvVar22 + -4)" * (cast_expression "(int *)((int)pvVar22 + -4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar22 + -4)" ( (binary_expression "(int)pvVar22 + -4" (cast_expression "(int)pvVar22" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (cast_expression "(int)lVar4" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" identifier = (binary_expression "puVar8 + -1" identifier + number_literal)) ;) (expression_statement "pvVar22 = (void *)((int)pvVar22 + -4);" (assignment_expression "pvVar22 = (void *)((int)pvVar22 + -4)" identifier = (cast_expression "(void *)((int)pvVar22 + -4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar22 + -4)" ( (binary_expression "(int)pvVar22 + -4" (cast_expression "(int)pvVar22" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(__s < pvVar22)" ( (binary_expression "__s < pvVar22" identifier < identifier) )) ;) (expression_statement "pvVar27 = (void *)((int)pvVar27 + -4);" (assignment_expression "pvVar27 = (void *)((int)pvVar27 + -4)" identifier = (cast_expression "(void *)((int)pvVar27 + -4)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar27 + -4)" ( (binary_expression "(int)pvVar27 + -4" (cast_expression "(int)pvVar27" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(pvVar18 < pvVar27)" ( (binary_expression "pvVar18 < pvVar27" identifier < identifier) )) ;) })) (expression_statement "FUN_0005f530(uVar7,pvVar2);" (call_expression "FUN_0005f530(uVar7,pvVar2)" identifier (argument_list "(uVar7,pvVar2)" ( identifier , identifier ))) ;) (if_statement "if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }" if (parenthesized_expression "(iVar31 < 0)" ( (binary_expression "iVar31 < 0" identifier < number_literal) )) (compound_statement "{\n          uVar15 = 0;\n        }" { (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) }) (else_clause "else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }" else (compound_statement "{\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }" { (labeled_statement "LAB_00064484:\n          uVar15 = 0;" statement_identifier : (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;)) (expression_statement "iVar21 = iVar31;" (assignment_expression "iVar21 = iVar31" identifier = identifier) ;) (do_statement "do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);" do (compound_statement "{\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          }" { (expression_statement "uVar13 = *(uint *)(iVar28 + iVar21 * 4);" (assignment_expression "uVar13 = *(uint *)(iVar28 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)(iVar28 + iVar21 * 4)" * (cast_expression "(uint *)(iVar28 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + iVar21 * 4)" ( (binary_expression "iVar28 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);" (assignment_expression "uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar16 + iVar21 * 4)" * (cast_expression "(uint *)((int)pvVar16 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar16 + iVar21 * 4)" ( (binary_expression "(int)pvVar16 + iVar21 * 4" (cast_expression "(int)pvVar16" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar30 = uVar14 + uVar13;" (assignment_expression "uVar30 = uVar14 + uVar13" identifier = (binary_expression "uVar14 + uVar13" identifier + identifier)) ;) (expression_statement "iVar23 = uVar30 + uVar15;" (assignment_expression "iVar23 = uVar30 + uVar15" identifier = (binary_expression "uVar30 + uVar15" identifier + identifier)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);" (assignment_expression "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" identifier = (binary_expression "(uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (cast_expression "(uint)CARRY4(uVar14,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar14,uVar13)" identifier (argument_list "(uVar14,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar30,uVar15)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar30,uVar15)" identifier (argument_list "(uVar30,uVar15)" ( identifier , identifier )))))) ;) (expression_statement "*(int *)(iVar28 + iVar21 * 4) = iVar23;" (assignment_expression "*(int *)(iVar28 + iVar21 * 4) = iVar23" (pointer_expression "*(int *)(iVar28 + iVar21 * 4)" * (cast_expression "(int *)(iVar28 + iVar21 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + iVar21 * 4)" ( (binary_expression "iVar28 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;) }))) (if_statement "if (0 < (int)uVar7) goto LAB_000644bf;" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_000644bf;" goto statement_identifier ;)) (labeled_statement "LAB_00064525:\n        iVar21 = iVar1;" statement_identifier : (expression_statement "iVar21 = iVar1;" (assignment_expression "iVar21 = iVar1" identifier = identifier) ;)) (expression_statement "uVar15 = uVar5;" (assignment_expression "uVar15 = uVar5" identifier = identifier) ;) (if_statement "if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }" if (parenthesized_expression "(-1 < iVar1)" ( (binary_expression "-1 < iVar1" number_literal < identifier) )) (compound_statement "{\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }" { (do_statement "do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);" do (compound_statement "{\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          }" { (expression_statement "uVar13 = puVar6[iVar21];" (assignment_expression "uVar13 = puVar6[iVar21]" identifier = (subscript_expression "puVar6[iVar21]" identifier [ identifier ])) ;) (expression_statement "uVar30 = uVar15 + uVar13;" (assignment_expression "uVar30 = uVar15 + uVar13" identifier = (binary_expression "uVar15 + uVar13" identifier + identifier)) ;) (expression_statement "uVar14 = puVar11[iVar21];" (assignment_expression "uVar14 = puVar11[iVar21]" identifier = (subscript_expression "puVar11[iVar21]" identifier [ identifier ])) ;) (expression_statement "puVar6[iVar21] = ~uVar14 + uVar30;" (assignment_expression "puVar6[iVar21] = ~uVar14 + uVar30" (subscript_expression "puVar6[iVar21]" identifier [ identifier ]) = (binary_expression "~uVar14 + uVar30" (unary_expression "~uVar14" ~ identifier) + identifier)) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);" (assignment_expression "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30)" identifier = (binary_expression "(uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30)" (cast_expression "(uint)CARRY4(uVar15,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar15,uVar13)" identifier (argument_list "(uVar15,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(~uVar14,uVar30)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(~uVar14,uVar30)" identifier (argument_list "(~uVar14,uVar30)" ( (unary_expression "~uVar14" ~ identifier) , identifier )))))) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;) })) }) (else_clause "else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }" else (compound_statement "{\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }" { (expression_statement "FUN_0005f530(iVar17,pvVar3);" (call_expression "FUN_0005f530(iVar17,pvVar3)" identifier (argument_list "(iVar17,pvVar3)" ( identifier , identifier ))) ;) (expression_statement "FUN_0005f970(iVar25,pvVar3);" (call_expression "FUN_0005f970(iVar25,pvVar3)" identifier (argument_list "(iVar25,pvVar3)" ( identifier , identifier ))) ;) (expression_statement "FUN_0005f970(iVar25,pvVar3);" (call_expression "FUN_0005f970(iVar25,pvVar3)" identifier (argument_list "(iVar25,pvVar3)" ( identifier , identifier ))) ;) (expression_statement "puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);" (assignment_expression "puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4)" identifier = (cast_expression "(undefined4 *)((int)pvVar2 + iVar24 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar24 * 4)" ( (binary_expression "(int)pvVar2 + iVar24 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar24 * 4" identifier * number_literal)) )))) ;) (expression_statement "puVar26 = (undefined4 *)((int)__s + iVar25 * 4);" (assignment_expression "puVar26 = (undefined4 *)((int)__s + iVar25 * 4)" identifier = (cast_expression "(undefined4 *)((int)__s + iVar25 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__s + iVar25 * 4)" ( (binary_expression "(int)__s + iVar25 * 4" (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar25 * 4" identifier * number_literal)) )))) ;) (if_statement "if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }" if (parenthesized_expression "(0 < iVar17)" ( (binary_expression "0 < iVar17" number_literal < identifier) )) (compound_statement "{\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }" { (do_statement "do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);" do (compound_statement "{\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          }" { (expression_statement "puVar20 = puVar19 + 1;" (assignment_expression "puVar20 = puVar19 + 1" identifier = (binary_expression "puVar19 + 1" identifier + number_literal)) ;) (expression_statement "*puVar26 = *puVar19;" (assignment_expression "*puVar26 = *puVar19" (pointer_expression "*puVar26" * identifier) = (pointer_expression "*puVar19" * identifier)) ;) (expression_statement "puVar19 = puVar20;" (assignment_expression "puVar19 = puVar20" identifier = identifier) ;) (expression_statement "puVar26 = puVar26 + 1;" (assignment_expression "puVar26 = puVar26 + 1" identifier = (binary_expression "puVar26 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20)" ( (binary_expression "(undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20" (cast_expression "(undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + (iVar24 + iVar17) * 4)" ( (binary_expression "(int)pvVar2 + (iVar24 + iVar17) * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "(iVar24 + iVar17) * 4" (parenthesized_expression "(iVar24 + iVar17)" ( (binary_expression "iVar24 + iVar17" identifier + identifier) )) * number_literal)) ))) != identifier) )) ;) })) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = iVar25 + -1;" (assignment_expression "iVar21 = iVar25 + -1" identifier = (binary_expression "iVar25 + -1" identifier + number_literal)) ;) (do_statement "do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);" do (compound_statement "{\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        }" { (expression_statement "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);" (assignment_expression "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4)" * (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);" (assignment_expression "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" * (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4 + iVar25 * 4" (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) + (binary_expression "iVar25 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar30 = uVar14 + uVar13;" (assignment_expression "uVar30 = uVar14 + uVar13" identifier = (binary_expression "uVar14 + uVar13" identifier + identifier)) ;) (expression_statement "iVar23 = uVar30 + uVar15;" (assignment_expression "iVar23 = uVar30 + uVar15" identifier = (binary_expression "uVar30 + uVar15" identifier + identifier)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);" (assignment_expression "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" identifier = (binary_expression "(uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (cast_expression "(uint)CARRY4(uVar14,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar14,uVar13)" identifier (argument_list "(uVar14,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar30,uVar15)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar30,uVar15)" identifier (argument_list "(uVar30,uVar15)" ( identifier , identifier )))))) ;) (expression_statement "*(int *)((int)pvVar2 + iVar21 * 4) = iVar23;" (assignment_expression "*(int *)((int)pvVar2 + iVar21 * 4) = iVar23" (pointer_expression "*(int *)((int)pvVar2 + iVar21 * 4)" * (cast_expression "(int *)((int)pvVar2 + iVar21 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (expression_statement "iVar21 = iVar25 + -1;" (assignment_expression "iVar21 = iVar25 + -1" identifier = (binary_expression "iVar25 + -1" identifier + number_literal)) ;) (do_statement "do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);" do (compound_statement "{\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        }" { (expression_statement "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);" (assignment_expression "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" * (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4" (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) + (binary_expression "(iVar24 - iVar25) * 4" (parenthesized_expression "(iVar24 - iVar25)" ( (binary_expression "iVar24 - iVar25" identifier - identifier) )) * number_literal)) ))))) ;) (expression_statement "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);" (assignment_expression "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4)" identifier = (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4)" * (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + iVar21 * 4)" ( (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar30 = uVar14 + uVar13;" (assignment_expression "uVar30 = uVar14 + uVar13" identifier = (binary_expression "uVar14 + uVar13" identifier + identifier)) ;) (expression_statement "iVar23 = uVar30 + uVar15;" (assignment_expression "iVar23 = uVar30 + uVar15" identifier = (binary_expression "uVar30 + uVar15" identifier + identifier)) ;) (expression_statement "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);" (assignment_expression "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" identifier = (binary_expression "(uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (cast_expression "(uint)CARRY4(uVar14,uVar13)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar14,uVar13)" identifier (argument_list "(uVar14,uVar13)" ( identifier , identifier )))) + (cast_expression "(uint)CARRY4(uVar30,uVar15)" ( (type_descriptor "uint" type_identifier) ) (call_expression "CARRY4(uVar30,uVar15)" identifier (argument_list "(uVar30,uVar15)" ( identifier , identifier )))))) ;) (expression_statement "*(int *)((int)__s + iVar21 * 4) = iVar23;" (assignment_expression "*(int *)((int)__s + iVar21 * 4) = iVar23" (pointer_expression "*(int *)((int)__s + iVar21 * 4)" * (cast_expression "(int *)((int)__s + iVar21 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)__s + iVar21 * 4)" ( (binary_expression "(int)__s + iVar21 * 4" (cast_expression "(int)__s" ( (type_descriptor "int" primitive_type) ) identifier) + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = identifier) ;) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" identifier = (binary_expression "iVar21 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 != -1)" ( (binary_expression "iVar21 != -1" identifier != number_literal) )) ;) (expression_statement "FUN_0005f530(uVar7,pvVar2);" (call_expression "FUN_0005f530(uVar7,pvVar2)" identifier (argument_list "(uVar7,pvVar2)" ( identifier , identifier ))) ;) (if_statement "if (-1 < iVar31) goto LAB_00064484;" if (parenthesized_expression "(-1 < iVar31)" ( (binary_expression "-1 < iVar31" number_literal < identifier) )) (goto_statement "goto LAB_00064484;" goto statement_identifier ;)) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" identifier = number_literal) ;) (labeled_statement "LAB_000644bf:\n        iVar21 = 0;" statement_identifier : (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" identifier = number_literal) ;)) (do_statement "do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);" do (compound_statement "{\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        }" { (expression_statement "puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);" (assignment_expression "puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4)" (subscript_expression "puVar6[iVar21]" identifier [ identifier ]) = (pointer_expression "*(uint *)(iVar28 + iVar21 * 4)" * (cast_expression "(uint *)(iVar28 + iVar21 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + iVar21 * 4)" ( (binary_expression "iVar28 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) ))))) ;) (expression_statement "*(undefined4 *)(iVar28 + iVar21 * 4) = 0;" (assignment_expression "*(undefined4 *)(iVar28 + iVar21 * 4) = 0" (pointer_expression "*(undefined4 *)(iVar28 + iVar21 * 4)" * (cast_expression "(undefined4 *)(iVar28 + iVar21 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar28 + iVar21 * 4)" ( (binary_expression "iVar28 + iVar21 * 4" identifier + (binary_expression "iVar21 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "iVar21 = iVar21 + 1;" (assignment_expression "iVar21 = iVar21 + 1" identifier = (binary_expression "iVar21 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(iVar21 < (int)uVar7)" ( (binary_expression "iVar21 < (int)uVar7" identifier < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) ;) (if_statement "if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;" if (parenthesized_expression "((uVar15 != 0) || ((int)uVar7 < 1))" ( (binary_expression "(uVar15 != 0) || ((int)uVar7 < 1)" (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) || (parenthesized_expression "((int)uVar7 < 1)" ( (binary_expression "(int)uVar7 < 1" (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier) < number_literal) ))) )) (goto_statement "goto LAB_00064525;" goto statement_identifier ;)) (expression_statement "uVar15 = *puVar6;" (assignment_expression "uVar15 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "uVar13 = *puVar11;" (assignment_expression "uVar13 = *puVar11" identifier = (pointer_expression "*puVar11" * identifier)) ;) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" identifier = number_literal) ;) (if_statement "if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }" if (parenthesized_expression "(uVar13 == uVar15)" ( (binary_expression "uVar13 == uVar15" identifier == identifier) )) (compound_statement "{\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }" { (do_statement "do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);" do (compound_statement "{\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          }" { (expression_statement "uVar14 = uVar14 + 1;" (assignment_expression "uVar14 = uVar14 + 1" identifier = (binary_expression "uVar14 + 1" identifier + number_literal)) ;) (if_statement "if (uVar7 == uVar14) goto LAB_00064525;" if (parenthesized_expression "(uVar7 == uVar14)" ( (binary_expression "uVar7 == uVar14" identifier == identifier) )) (goto_statement "goto LAB_00064525;" goto statement_identifier ;)) (expression_statement "uVar15 = puVar6[uVar14];" (assignment_expression "uVar15 = puVar6[uVar14]" identifier = (subscript_expression "puVar6[uVar14]" identifier [ identifier ])) ;) (expression_statement "uVar13 = puVar11[uVar14];" (assignment_expression "uVar13 = puVar11[uVar14]" identifier = (subscript_expression "puVar11[uVar14]" identifier [ identifier ])) ;) }) while (parenthesized_expression "(uVar15 == uVar13)" ( (binary_expression "uVar15 == uVar13" identifier == identifier) )) ;) })) (if_statement "if (uVar13 < uVar15) goto LAB_00064525;" if (parenthesized_expression "(uVar13 < uVar15)" ( (binary_expression "uVar13 < uVar15" identifier < identifier) )) (goto_statement "goto LAB_00064525;" goto statement_identifier ;)) }))) (expression_statement "iVar21 = local_88;" (assignment_expression "iVar21 = local_88" identifier = identifier) ;) (if_statement "if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }" if (parenthesized_expression "((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0)" ( (binary_expression "(param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0" (parenthesized_expression "(param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f))" ( (binary_expression "param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)" (subscript_expression "param_2[*param_2 - local_78]" identifier [ (binary_expression "*param_2 - local_78" (pointer_expression "*param_2" * identifier) - identifier) ]) & (binary_expression "1 << ((byte)local_94 & 0x1f)" number_literal << (parenthesized_expression "((byte)local_94 & 0x1f)" ( (binary_expression "(byte)local_94 & 0x1f" (cast_expression "(byte)local_94" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) )) != number_literal) )) (compound_statement "{\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }" { (expression_statement "FUN_0005f530(uVar7,__s);" (call_expression "FUN_0005f530(uVar7,__s)" identifier (argument_list "(uVar7,__s)" ( identifier , identifier ))) ;) (expression_statement "FUN_0005fba0(__s,uVar7);" (call_expression "FUN_0005fba0(__s,uVar7)" identifier (argument_list "(__s,uVar7)" ( identifier , identifier ))) ;) (expression_statement "iVar21 = iVar28;" (assignment_expression "iVar21 = iVar28" identifier = identifier) ;) (expression_statement "iVar28 = local_88;" (assignment_expression "iVar28 = local_88" identifier = identifier) ;) })) (expression_statement "local_88 = iVar28;" (assignment_expression "local_88 = iVar28" identifier = identifier) ;) (expression_statement "local_94 = local_94 + -1;" (assignment_expression "local_94 = local_94 + -1" identifier = (binary_expression "local_94 + -1" identifier + number_literal)) ;) (expression_statement "iVar28 = iVar21;" (assignment_expression "iVar28 = iVar21" identifier = identifier) ;) }) while (parenthesized_expression "(local_94 != -1)" ( (binary_expression "local_94 != -1" identifier != number_literal) )) ;)) })) (labeled_statement "LAB_000645c6:\n  FUN_0005fba0(__s,uVar7);" statement_identifier : (expression_statement "FUN_0005fba0(__s,uVar7);" (call_expression "FUN_0005fba0(__s,uVar7)" identifier (argument_list "(__s,uVar7)" ( identifier , identifier ))) ;)) (expression_statement "uVar5 = *param_3;" (assignment_expression "uVar5 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }" if (parenthesized_expression "(uVar5 < 0x3ffffff)" ( (binary_expression "uVar5 < 0x3ffffff" identifier < number_literal) )) (compound_statement "{\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }" { (expression_statement "puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);" (assignment_expression "puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4)" identifier = (cast_expression "(uint *)FUN_000329a0(uVar5 + 1,4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000329a0(uVar5 + 1,4)" identifier (argument_list "(uVar5 + 1,4)" ( (binary_expression "uVar5 + 1" identifier + number_literal) , number_literal ))))) ;) (expression_statement "memset(puVar6,0,(uVar5 + 1) * 4);" (call_expression "memset(puVar6,0,(uVar5 + 1) * 4)" identifier (argument_list "(puVar6,0,(uVar5 + 1) * 4)" ( identifier , number_literal , (binary_expression "(uVar5 + 1) * 4" (parenthesized_expression "(uVar5 + 1)" ( (binary_expression "uVar5 + 1" identifier + number_literal) )) * number_literal) ))) ;) (expression_statement "*puVar6 = uVar5;" (assignment_expression "*puVar6 = uVar5" (pointer_expression "*puVar6" * identifier) = identifier) ;) (if_statement "if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }" { (expression_statement "puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);" (assignment_expression "puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4)" (subscript_expression "puVar6[uVar5]" identifier [ identifier ]) = (pointer_expression "*(uint *)(local_88 + uVar7 * 4)" * (cast_expression "(uint *)(local_88 + uVar7 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_88 + uVar7 * 4)" ( (binary_expression "local_88 + uVar7 * 4" identifier + (binary_expression "uVar7 * 4" identifier * number_literal)) ))))) ;) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" identifier = number_literal) ;) (if_statement "if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }" if (parenthesized_expression "(uVar7 != 1)" ( (binary_expression "uVar7 != 1" identifier != number_literal) )) (compound_statement "{\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }" { (do_statement "do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);" do (compound_statement "{\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        }" { (expression_statement "iVar1 = uVar5 * 4;" (assignment_expression "iVar1 = uVar5 * 4" identifier = (binary_expression "uVar5 * 4" identifier * number_literal)) ;) (expression_statement "iVar24 = *puVar6 - uVar5;" (assignment_expression "iVar24 = *puVar6 - uVar5" identifier = (binary_expression "*puVar6 - uVar5" (pointer_expression "*puVar6" * identifier) - identifier)) ;) (expression_statement "uVar5 = uVar5 + 1;" (assignment_expression "uVar5 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) (expression_statement "puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);" (assignment_expression "puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1)" (subscript_expression "puVar6[iVar24]" identifier [ identifier ]) = (pointer_expression "*(uint *)(local_88 + uVar7 * 4 + iVar1)" * (cast_expression "(uint *)(local_88 + uVar7 * 4 + iVar1)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_88 + uVar7 * 4 + iVar1)" ( (binary_expression "local_88 + uVar7 * 4 + iVar1" (binary_expression "local_88 + uVar7 * 4" identifier + (binary_expression "uVar7 * 4" identifier * number_literal)) + identifier) ))))) ;) }) while (parenthesized_expression "(uVar7 != uVar5)" ( (binary_expression "uVar7 != uVar5" identifier != identifier) )) ;) })) (expression_statement "uVar5 = *puVar6;" (assignment_expression "uVar5 = *puVar6" identifier = (pointer_expression "*puVar6" * identifier)) ;) })) (if_statement "if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }" { (expression_statement "uVar15 = puVar6[uVar5];" (assignment_expression "uVar15 = puVar6[uVar5]" identifier = (subscript_expression "puVar6[uVar5]" identifier [ identifier ])) ;) (while_statement "while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }" while (parenthesized_expression "(uVar15 == 0)" ( (binary_expression "uVar15 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }" { (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" identifier = (binary_expression "uVar5 - 1" identifier - number_literal)) ;) (expression_statement "*puVar6 = uVar5;" (assignment_expression "*puVar6 = uVar5" (pointer_expression "*puVar6" * identifier) = identifier) ;) (if_statement "if (uVar5 == 1) break;" if (parenthesized_expression "(uVar5 == 1)" ( (binary_expression "uVar5 == 1" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar15 = puVar6[uVar5];" (assignment_expression "uVar15 = puVar6[uVar5]" identifier = (subscript_expression "puVar6[uVar5]" identifier [ identifier ])) ;) })) })) (expression_statement "FUN_00032c20(__s,local_20 << 2);" (call_expression "FUN_00032c20(__s,local_20 << 2)" identifier (argument_list "(__s,local_20 << 2)" ( identifier , (binary_expression "local_20 << 2" identifier << number_literal) ))) ;) (expression_statement "FUN_00032b40(__s);" (call_expression "FUN_00032b40(__s)" identifier (argument_list "(__s)" ( identifier ))) ;) (expression_statement "FUN_00032c20(local_88,uVar7 * 8);" (call_expression "FUN_00032c20(local_88,uVar7 * 8)" identifier (argument_list "(local_88,uVar7 * 8)" ( identifier , (binary_expression "uVar7 * 8" identifier * number_literal) ))) ;) (expression_statement "FUN_00032b40(local_88);" (call_expression "FUN_00032b40(local_88)" identifier (argument_list "(local_88)" ( identifier ))) ;) (expression_statement "FUN_00032c20(iVar21,uVar7 * 8);" (call_expression "FUN_00032c20(iVar21,uVar7 * 8)" identifier (argument_list "(iVar21,uVar7 * 8)" ( identifier , (binary_expression "uVar7 * 8" identifier * number_literal) ))) ;) (expression_statement "FUN_00032b40(iVar21);" (call_expression "FUN_00032b40(iVar21)" identifier (argument_list "(iVar21)" ( identifier ))) ;) (expression_statement "iVar1 = uVar7 * 4;" (assignment_expression "iVar1 = uVar7 * 4" identifier = (binary_expression "uVar7 * 4" identifier * number_literal)) ;) (expression_statement "FUN_00032c20(local_60,iVar1);" (call_expression "FUN_00032c20(local_60,iVar1)" identifier (argument_list "(local_60,iVar1)" ( identifier , identifier ))) ;) (expression_statement "FUN_00032b40(local_60);" (call_expression "FUN_00032b40(local_60)" identifier (argument_list "(local_60)" ( identifier ))) ;) (expression_statement "FUN_00032c20(puVar11,iVar1);" (call_expression "FUN_00032c20(puVar11,iVar1)" identifier (argument_list "(puVar11,iVar1)" ( identifier , identifier ))) ;) (expression_statement "FUN_00032b40(puVar11);" (call_expression "FUN_00032b40(puVar11)" identifier (argument_list "(puVar11)" ( identifier ))) ;) (expression_statement "FUN_00032c20(local_54,iVar1);" (call_expression "FUN_00032c20(local_54,iVar1)" identifier (argument_list "(local_54,iVar1)" ( identifier , identifier ))) ;) (expression_statement "FUN_00032b40(local_54);" (call_expression "FUN_00032b40(local_54)" identifier (argument_list "(local_54)" ( identifier ))) ;) (return_statement "return puVar6;" return identifier ;) })) (labeled_statement "LAB_00064ab0:\n                    \n  FUN_0005f500();" statement_identifier : (expression_statement "FUN_0005f500();" (call_expression "FUN_0005f500()" identifier (argument_list "()" ( ))) ;)) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * 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 (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * 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 (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (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 IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * 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 (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT) ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ 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 = (subscript_expression IDENT [ IDENT ])) ;) })) })) (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) ))) < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT) ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT * LIT) ))) <= (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT * LIT) )))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) = (binary_expression (subscript_expression IDENT [ (binary_expression IDENT + LIT) ]) | LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (pointer_expression * IDENT) * LIT) + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT) ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ IDENT ]) != LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (pointer_expression * IDENT) * LIT) + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (pointer_expression * IDENT) * LIT) + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT * LIT) + IDENT) )))) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (pointer_expression * IDENT) * LIT) + LIT) ))) ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (binary_expression IDENT * LIT) ))) ;) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (unary_expression ~ (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;)) (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 = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ (binary_expression IDENT + LIT) ])) ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (pointer_expression * IDENT) * LIT) + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT * LIT) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT * LIT) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (subscript_expression IDENT [ (binary_expression IDENT + LIT) ])) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;) }))) (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 (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (pointer_expression * IDENT) * LIT) + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) )) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) }) while (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression IDENT * LIT) + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT * LIT) , LIT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT * LIT) , LIT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression (pointer_expression * IDENT) * LIT) + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , LIT ))))) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) ))) & (pointer_expression * IDENT)) )) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (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) )) ;) })) (goto_statement goto statement_identifier ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = LIT) ;)) (goto_statement goto statement_identifier ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) <= IDENT) )) (break_statement break ;)) (labeled_statement statement_identifier : (do_statement do (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) + (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + IDENT) )))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * (parenthesized_expression ( IDENT ))) * IDENT) + (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) ))))) + (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + LIT) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (binary_expression (unary_expression ~ IDENT) + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (unary_expression ~ IDENT) , IDENT )))))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression (parenthesized_expression ( (binary_expression IDENT + IDENT) )) * LIT)) ))) != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) + (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))) + (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( IDENT , IDENT )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = LIT) ;)) (do_statement do (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ IDENT ])) ;) }) while (parenthesized_expression ( (binary_expression IDENT == IDENT) )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (goto_statement goto statement_identifier ;)) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ (binary_expression (pointer_expression * IDENT) - IDENT) ]) & (binary_expression LIT << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;)) })) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , LIT ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT) ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * IDENT) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (binary_expression IDENT * LIT)) + IDENT) ))))) ;) }) 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 = (subscript_expression IDENT [ 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 = (subscript_expression IDENT [ IDENT ])) ;) })) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT << LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) })))
(function_definition "uint * FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)\n\n{\n  int iVar1;\n  void *pvVar2;\n  size_t __n;\n  void *pvVar3;\n  longlong lVar4;\n  uint uVar5;\n  uint *puVar6;\n  uint uVar7;\n  uint *puVar8;\n  int *piVar9;\n  int *piVar10;\n  uint *puVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  void *__s;\n  void *pvVar16;\n  int iVar17;\n  void *pvVar18;\n  undefined4 *puVar19;\n  undefined4 *puVar20;\n  int iVar21;\n  void *pvVar22;\n  int iVar23;\n  int iVar24;\n  int iVar25;\n  undefined4 *puVar26;\n  void *pvVar27;\n  int iVar28;\n  int *piVar29;\n  uint uVar30;\n  int iVar31;\n  bool bVar32;\n  uint local_b8;\n  uint *local_b0;\n  int local_94;\n  int local_88;\n  int local_78;\n  int local_60;\n  void *local_54;\n  int local_20;\n  \n  uVar7 = *param_3;\n  if (param_3[uVar7] == 0) {\n                    \n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar5 = param_3[1] & 1;\n  if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }\n  if (0x3fffffe < uVar7) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);\n  memset(puVar6,0,(uVar7 + 1) * 4);\n  *puVar6 = uVar7;\n  FUN_00060250(0);\n  uVar7 = *puVar6;\n  if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }\n  uVar7 = *param_3;\n  if ((int)(uVar7 * 0x20) < 0) {\n                    \n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar15 = uVar7 + 1;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);\n  memset(puVar8,0,(uVar7 + 2) * 4);\n  *puVar8 = uVar15;\n  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    \n    abort();\n  }\n  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;\n  piVar9 = (int *)FUN_00063860(param_3,puVar8);\n  if (piVar9 == (int *)0x0) {\n                    \n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  uVar15 = *param_3;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);\n  memset(puVar6,0,(uVar15 + 1) * 4);\n  *puVar6 = uVar15;\n  FUN_00060250(0);\n  uVar15 = *puVar6;\n  if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }\n  FUN_00032c20(puVar8,*puVar8 * 4 + 4);\n  FUN_00032b40(puVar8);\n  puVar11 = (uint *)FUN_000329a0(uVar7,4);\n  iVar1 = uVar7 - 1;\n  puVar12 = puVar11 + iVar1;\n  puVar8 = param_3;\n  iVar21 = iVar1;\n  uVar15 = uVar5;\n  if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  FUN_00032c20(piVar10,iVar21 * 4 + 4);\n  FUN_00032b40(piVar10);\n  local_88 = FUN_000329a0(uVar7 * 2,4);\n  iVar21 = FUN_000329a0(uVar7 * 2,4);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  local_20 = uVar7 * 3;\nLAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);\n  iVar24 = *param_2;\n  local_78 = 0;\n  puVar6 = (uint *)(param_2 + iVar24);\n  if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *piVar9 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  FUN_0005fba0(__s,uVar7);\n  uVar5 = *param_3;\n  if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }\nLAB_00064ab0:\n                    \n  FUN_0005f500();\n}" (type_identifier "uint") (pointer_declarator "* FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)" (* "*") (function_declarator "FUN_00063d80(undefined4 param_1,int *param_2,uint *param_3)" (identifier "FUN_00063d80") (parameter_list "(undefined4 param_1,int *param_2,uint *param_3)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")")))) (compound_statement "{\n  int iVar1;\n  void *pvVar2;\n  size_t __n;\n  void *pvVar3;\n  longlong lVar4;\n  uint uVar5;\n  uint *puVar6;\n  uint uVar7;\n  uint *puVar8;\n  int *piVar9;\n  int *piVar10;\n  uint *puVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  void *__s;\n  void *pvVar16;\n  int iVar17;\n  void *pvVar18;\n  undefined4 *puVar19;\n  undefined4 *puVar20;\n  int iVar21;\n  void *pvVar22;\n  int iVar23;\n  int iVar24;\n  int iVar25;\n  undefined4 *puVar26;\n  void *pvVar27;\n  int iVar28;\n  int *piVar29;\n  uint uVar30;\n  int iVar31;\n  bool bVar32;\n  uint local_b8;\n  uint *local_b0;\n  int local_94;\n  int local_88;\n  int local_78;\n  int local_60;\n  void *local_54;\n  int local_20;\n  \n  uVar7 = *param_3;\n  if (param_3[uVar7] == 0) {\n                    \n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }\n  uVar5 = param_3[1] & 1;\n  if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }\n  if (0x3fffffe < uVar7) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);\n  memset(puVar6,0,(uVar7 + 1) * 4);\n  *puVar6 = uVar7;\n  FUN_00060250(0);\n  uVar7 = *puVar6;\n  if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }\n  uVar7 = *param_3;\n  if ((int)(uVar7 * 0x20) < 0) {\n                    \n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }\n  uVar15 = uVar7 + 1;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);\n  memset(puVar8,0,(uVar7 + 2) * 4);\n  *puVar8 = uVar15;\n  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    \n    abort();\n  }\n  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;\n  piVar9 = (int *)FUN_00063860(param_3,puVar8);\n  if (piVar9 == (int *)0x0) {\n                    \n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }\n  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  uVar15 = *param_3;\n  if (0x3fffffe < uVar15) goto LAB_00064ab0;\n  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);\n  memset(puVar6,0,(uVar15 + 1) * 4);\n  *puVar6 = uVar15;\n  FUN_00060250(0);\n  uVar15 = *puVar6;\n  if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }\n  FUN_00032c20(puVar8,*puVar8 * 4 + 4);\n  FUN_00032b40(puVar8);\n  puVar11 = (uint *)FUN_000329a0(uVar7,4);\n  iVar1 = uVar7 - 1;\n  puVar12 = puVar11 + iVar1;\n  puVar8 = param_3;\n  iVar21 = iVar1;\n  uVar15 = uVar5;\n  if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }\n  FUN_00032c20(piVar10,iVar21 * 4 + 4);\n  FUN_00032b40(piVar10);\n  local_88 = FUN_000329a0(uVar7 * 2,4);\n  iVar21 = FUN_000329a0(uVar7 * 2,4);\n  FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n  FUN_00032b40(puVar6);\n  local_20 = uVar7 * 3;\nLAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);\n  iVar24 = *param_2;\n  local_78 = 0;\n  puVar6 = (uint *)(param_2 + iVar24);\n  if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }\n  goto LAB_000645c6;\nLAB_0006412f:\n  *piVar9 = 0;\n  goto joined_r0x00064127;\n  while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }\nLAB_000645c6:\n  FUN_0005fba0(__s,uVar7);\n  uVar5 = *param_3;\n  if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }\nLAB_00064ab0:\n                    \n  FUN_0005f500();\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "void *pvVar2;" (primitive_type "void") (pointer_declarator "*pvVar2" (* "*") (identifier "pvVar2")) (; ";")) (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (declaration "void *pvVar3;" (primitive_type "void") (pointer_declarator "*pvVar3" (* "*") (identifier "pvVar3")) (; ";")) (declaration "longlong lVar4;" (type_identifier "longlong") (identifier "lVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint *puVar6;" (type_identifier "uint") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "uint *puVar8;" (type_identifier "uint") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "int *piVar9;" (primitive_type "int") (pointer_declarator "*piVar9" (* "*") (identifier "piVar9")) (; ";")) (declaration "int *piVar10;" (primitive_type "int") (pointer_declarator "*piVar10" (* "*") (identifier "piVar10")) (; ";")) (declaration "uint *puVar11;" (type_identifier "uint") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "uint *puVar12;" (type_identifier "uint") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "uint uVar15;" (type_identifier "uint") (identifier "uVar15") (; ";")) (declaration "void *__s;" (primitive_type "void") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "void *pvVar16;" (primitive_type "void") (pointer_declarator "*pvVar16" (* "*") (identifier "pvVar16")) (; ";")) (declaration "int iVar17;" (primitive_type "int") (identifier "iVar17") (; ";")) (declaration "void *pvVar18;" (primitive_type "void") (pointer_declarator "*pvVar18" (* "*") (identifier "pvVar18")) (; ";")) (declaration "undefined4 *puVar19;" (type_identifier "undefined4") (pointer_declarator "*puVar19" (* "*") (identifier "puVar19")) (; ";")) (declaration "undefined4 *puVar20;" (type_identifier "undefined4") (pointer_declarator "*puVar20" (* "*") (identifier "puVar20")) (; ";")) (declaration "int iVar21;" (primitive_type "int") (identifier "iVar21") (; ";")) (declaration "void *pvVar22;" (primitive_type "void") (pointer_declarator "*pvVar22" (* "*") (identifier "pvVar22")) (; ";")) (declaration "int iVar23;" (primitive_type "int") (identifier "iVar23") (; ";")) (declaration "int iVar24;" (primitive_type "int") (identifier "iVar24") (; ";")) (declaration "int iVar25;" (primitive_type "int") (identifier "iVar25") (; ";")) (declaration "undefined4 *puVar26;" (type_identifier "undefined4") (pointer_declarator "*puVar26" (* "*") (identifier "puVar26")) (; ";")) (declaration "void *pvVar27;" (primitive_type "void") (pointer_declarator "*pvVar27" (* "*") (identifier "pvVar27")) (; ";")) (declaration "int iVar28;" (primitive_type "int") (identifier "iVar28") (; ";")) (declaration "int *piVar29;" (primitive_type "int") (pointer_declarator "*piVar29" (* "*") (identifier "piVar29")) (; ";")) (declaration "uint uVar30;" (type_identifier "uint") (identifier "uVar30") (; ";")) (declaration "int iVar31;" (primitive_type "int") (identifier "iVar31") (; ";")) (declaration "bool bVar32;" (primitive_type "bool") (identifier "bVar32") (; ";")) (declaration "uint local_b8;" (type_identifier "uint") (identifier "local_b8") (; ";")) (declaration "uint *local_b0;" (type_identifier "uint") (pointer_declarator "*local_b0" (* "*") (identifier "local_b0")) (; ";")) (declaration "int local_94;" (primitive_type "int") (identifier "local_94") (; ";")) (declaration "int local_88;" (primitive_type "int") (identifier "local_88") (; ";")) (declaration "int local_78;" (primitive_type "int") (identifier "local_78") (; ";")) (declaration "int local_60;" (primitive_type "int") (identifier "local_60") (; ";")) (declaration "void *local_54;" (primitive_type "void") (pointer_declarator "*local_54" (* "*") (identifier "local_54")) (; ";")) (declaration "int local_20;" (primitive_type "int") (identifier "local_20") (; ";")) (expression_statement "uVar7 = *param_3;" (assignment_expression "uVar7 = *param_3" (identifier "uVar7") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if (param_3[uVar7] == 0) {\n                    \n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }" (if "if") (parenthesized_expression "(param_3[uVar7] == 0)" (( "(") (binary_expression "param_3[uVar7] == 0" (subscript_expression "param_3[uVar7]" (identifier "param_3") ([ "[") (identifier "uVar7") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");\n  }" ({ "{") (expression_statement "__assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");" (call_expression "__assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow")" (identifier "__assert_fail") (argument_list "("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow")" (( "(") (string_literal ""mod[mod[0]] != 0"" (" """) (string_content "mod[mod[0]] != 0") (" """)) (, ",") (string_literal ""sshbn.c"" (" """) (string_content "sshbn.c") (" """)) (, ",") (number_literal "0x42c") (, ",") (string_literal ""modpow"" (" """) (string_content "modpow") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar5 = param_3[1] & 1;" (assignment_expression "uVar5 = param_3[1] & 1" (identifier "uVar5") (= "=") (binary_expression "param_3[1] & 1" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (& "&") (number_literal "1"))) (; ";")) (if_statement "if (uVar5 == 0) {\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    puVar6 = (uint *)FUN_00060da0();\n    return puVar6;\n  }" ({ "{") (expression_statement "puVar6 = (uint *)FUN_00060da0();" (assignment_expression "puVar6 = (uint *)FUN_00060da0()" (identifier "puVar6") (= "=") (cast_expression "(uint *)FUN_00060da0()" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00060da0()" (identifier "FUN_00060da0") (argument_list "()" (( "(") () ")"))))) (; ";")) (return_statement "return puVar6;" (return "return") (identifier "puVar6") (; ";")) (} "}"))) (if_statement "if (0x3fffffe < uVar7) goto LAB_00064ab0;" (if "if") (parenthesized_expression "(0x3fffffe < uVar7)" (( "(") (binary_expression "0x3fffffe < uVar7" (number_literal "0x3fffffe") (< "<") (identifier "uVar7")) () ")")) (goto_statement "goto LAB_00064ab0;" (goto "goto") (statement_identifier "LAB_00064ab0") (; ";"))) (expression_statement "puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);" (assignment_expression "puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4)" (identifier "puVar6") (= "=") (cast_expression "(uint *)FUN_000329a0(uVar7 + 1,4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000329a0(uVar7 + 1,4)" (identifier "FUN_000329a0") (argument_list "(uVar7 + 1,4)" (( "(") (binary_expression "uVar7 + 1" (identifier "uVar7") (+ "+") (number_literal "1")) (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "memset(puVar6,0,(uVar7 + 1) * 4);" (call_expression "memset(puVar6,0,(uVar7 + 1) * 4)" (identifier "memset") (argument_list "(puVar6,0,(uVar7 + 1) * 4)" (( "(") (identifier "puVar6") (, ",") (number_literal "0") (, ",") (binary_expression "(uVar7 + 1) * 4" (parenthesized_expression "(uVar7 + 1)" (( "(") (binary_expression "uVar7 + 1" (identifier "uVar7") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "4")) () ")"))) (; ";")) (expression_statement "*puVar6 = uVar7;" (assignment_expression "*puVar6 = uVar7" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "FUN_00060250(0);" (call_expression "FUN_00060250(0)" (identifier "FUN_00060250") (argument_list "(0)" (( "(") (number_literal "0") () ")"))) (; ";")) (expression_statement "uVar7 = *puVar6;" (assignment_expression "uVar7 = *puVar6" (identifier "uVar7") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (if_statement "if (1 < uVar7) {\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }" (if "if") (parenthesized_expression "(1 < uVar7)" (( "(") (binary_expression "1 < uVar7" (number_literal "1") (< "<") (identifier "uVar7")) () ")")) (compound_statement "{\n    uVar15 = puVar6[uVar7];\n    while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }\n  }" ({ "{") (expression_statement "uVar15 = puVar6[uVar7];" (assignment_expression "uVar15 = puVar6[uVar7]" (identifier "uVar15") (= "=") (subscript_expression "puVar6[uVar7]" (identifier "puVar6") ([ "[") (identifier "uVar7") (] "]"))) (; ";")) (while_statement "while (uVar15 == 0) {\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }" (while "while") (parenthesized_expression "(uVar15 == 0)" (( "(") (binary_expression "uVar15 == 0" (identifier "uVar15") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar7 = uVar7 - 1;\n      *puVar6 = uVar7;\n      if (uVar7 == 1) break;\n      uVar15 = puVar6[uVar7];\n    }" ({ "{") (expression_statement "uVar7 = uVar7 - 1;" (assignment_expression "uVar7 = uVar7 - 1" (identifier "uVar7") (= "=") (binary_expression "uVar7 - 1" (identifier "uVar7") (- "-") (number_literal "1"))) (; ";")) (expression_statement "*puVar6 = uVar7;" (assignment_expression "*puVar6 = uVar7" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (identifier "uVar7")) (; ";")) (if_statement "if (uVar7 == 1) break;" (if "if") (parenthesized_expression "(uVar7 == 1)" (( "(") (binary_expression "uVar7 == 1" (identifier "uVar7") (== "==") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar15 = puVar6[uVar7];" (assignment_expression "uVar15 = puVar6[uVar7]" (identifier "uVar15") (= "=") (subscript_expression "puVar6[uVar7]" (identifier "puVar6") ([ "[") (identifier "uVar7") (] "]"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar7 = *param_3;" (assignment_expression "uVar7 = *param_3" (identifier "uVar7") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if ((int)(uVar7 * 0x20) < 0) {\n                    \n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }" (if "if") (parenthesized_expression "((int)(uVar7 * 0x20) < 0)" (( "(") (binary_expression "(int)(uVar7 * 0x20) < 0" (cast_expression "(int)(uVar7 * 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar7 * 0x20)" (( "(") (binary_expression "uVar7 * 0x20" (identifier "uVar7") (* "*") (number_literal "0x20")) () ")"))) (< "<") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");\n  }" ({ "{") (expression_statement "__assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");" (call_expression "__assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2")" (identifier "__assert_fail") (argument_list "("n >= 0","sshbn.c",0x51,"bn_power_2")" (( "(") (string_literal ""n >= 0"" (" """) (string_content "n >= 0") (" """)) (, ",") (string_literal ""sshbn.c"" (" """) (string_content "sshbn.c") (" """)) (, ",") (number_literal "0x51") (, ",") (string_literal ""bn_power_2"" (" """) (string_content "bn_power_2") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar15 = uVar7 + 1;" (assignment_expression "uVar15 = uVar7 + 1" (identifier "uVar15") (= "=") (binary_expression "uVar7 + 1" (identifier "uVar7") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (0x3fffffe < uVar15) goto LAB_00064ab0;" (if "if") (parenthesized_expression "(0x3fffffe < uVar15)" (( "(") (binary_expression "0x3fffffe < uVar15" (number_literal "0x3fffffe") (< "<") (identifier "uVar15")) () ")")) (goto_statement "goto LAB_00064ab0;" (goto "goto") (statement_identifier "LAB_00064ab0") (; ";"))) (expression_statement "puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);" (assignment_expression "puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4)" (identifier "puVar8") (= "=") (cast_expression "(uint *)FUN_000329a0(uVar7 + 2,4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000329a0(uVar7 + 2,4)" (identifier "FUN_000329a0") (argument_list "(uVar7 + 2,4)" (( "(") (binary_expression "uVar7 + 2" (identifier "uVar7") (+ "+") (number_literal "2")) (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "memset(puVar8,0,(uVar7 + 2) * 4);" (call_expression "memset(puVar8,0,(uVar7 + 2) * 4)" (identifier "memset") (argument_list "(puVar8,0,(uVar7 + 2) * 4)" (( "(") (identifier "puVar8") (, ",") (number_literal "0") (, ",") (binary_expression "(uVar7 + 2) * 4" (parenthesized_expression "(uVar7 + 2)" (( "(") (binary_expression "uVar7 + 2" (identifier "uVar7") (+ "+") (number_literal "2")) () ")")) (* "*") (number_literal "4")) () ")"))) (; ";")) (expression_statement "*puVar8 = uVar15;" (assignment_expression "*puVar8 = uVar15" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (identifier "uVar15")) (; ";")) (if_statement "if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {\n                    \n    abort();\n  }" (if "if") (parenthesized_expression "((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20))" (( "(") (binary_expression "(int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)" (cast_expression "(int)(uVar15 * 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar15 * 0x20)" (( "(") (binary_expression "uVar15 * 0x20" (identifier "uVar15") (* "*") (number_literal "0x20")) () ")"))) (<= "<=") (cast_expression "(int)(uVar7 * 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar7 * 0x20)" (( "(") (binary_expression "uVar7 * 0x20" (identifier "uVar7") (* "*") (number_literal "0x20")) () ")")))) () ")")) (compound_statement "{\n                    \n    abort();\n  }" ({ "{") (expression_statement "abort();" (call_expression "abort()" (identifier "abort") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;" (assignment_expression "puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1" (subscript_expression "puVar8[uVar7 + 1]" (identifier "puVar8") ([ "[") (binary_expression "uVar7 + 1" (identifier "uVar7") (+ "+") (number_literal "1")) (] "]")) (= "=") (binary_expression "puVar8[uVar7 + 1] | 1" (subscript_expression "puVar8[uVar7 + 1]" (identifier "puVar8") ([ "[") (binary_expression "uVar7 + 1" (identifier "uVar7") (+ "+") (number_literal "1")) (] "]")) (| "|") (number_literal "1"))) (; ";")) (expression_statement "piVar9 = (int *)FUN_00063860(param_3,puVar8);" (assignment_expression "piVar9 = (int *)FUN_00063860(param_3,puVar8)" (identifier "piVar9") (= "=") (cast_expression "(int *)FUN_00063860(param_3,puVar8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00063860(param_3,puVar8)" (identifier "FUN_00063860") (argument_list "(param_3,puVar8)" (( "(") (identifier "param_3") (, ",") (identifier "puVar8") () ")"))))) (; ";")) (if_statement "if (piVar9 == (int *)0x0) {\n                    \n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }" (if "if") (parenthesized_expression "(piVar9 == (int *)0x0)" (( "(") (binary_expression "piVar9 == (int *)0x0" (identifier "piVar9") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                    \n    __assert_fail("inv","sshbn.c",0x443,"modpow");\n  }" ({ "{") (expression_statement "__assert_fail("inv","sshbn.c",0x443,"modpow");" (call_expression "__assert_fail("inv","sshbn.c",0x443,"modpow")" (identifier "__assert_fail") (argument_list "("inv","sshbn.c",0x443,"modpow")" (( "(") (string_literal ""inv"" (" """) (string_content "inv") (" """)) (, ",") (string_literal ""sshbn.c"" (" """) (string_content "sshbn.c") (" """)) (, ",") (number_literal "0x443") (, ",") (string_literal ""modpow"" (" """) (string_content "modpow") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);" (assignment_expression "piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3)" (identifier "piVar10") (= "=") (cast_expression "(int *)FUN_00061810(puVar6,puVar8,param_3)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00061810(puVar6,puVar8,param_3)" (identifier "FUN_00061810") (argument_list "(puVar6,puVar8,param_3)" (( "(") (identifier "puVar6") (, ",") (identifier "puVar8") (, ",") (identifier "param_3") () ")"))))) (; ";")) (expression_statement "FUN_00032c20(puVar6,*puVar6 * 4 + 4);" (call_expression "FUN_00032c20(puVar6,*puVar6 * 4 + 4)" (identifier "FUN_00032c20") (argument_list "(puVar6,*puVar6 * 4 + 4)" (( "(") (identifier "puVar6") (, ",") (binary_expression "*puVar6 * 4 + 4" (binary_expression "*puVar6 * 4" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (* "*") (number_literal "4")) (+ "+") (number_literal "4")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(puVar6);" (call_expression "FUN_00032b40(puVar6)" (identifier "FUN_00032b40") (argument_list "(puVar6)" (( "(") (identifier "puVar6") () ")"))) (; ";")) (expression_statement "uVar15 = *param_3;" (assignment_expression "uVar15 = *param_3" (identifier "uVar15") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if (0x3fffffe < uVar15) goto LAB_00064ab0;" (if "if") (parenthesized_expression "(0x3fffffe < uVar15)" (( "(") (binary_expression "0x3fffffe < uVar15" (number_literal "0x3fffffe") (< "<") (identifier "uVar15")) () ")")) (goto_statement "goto LAB_00064ab0;" (goto "goto") (statement_identifier "LAB_00064ab0") (; ";"))) (expression_statement "puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);" (assignment_expression "puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4)" (identifier "puVar6") (= "=") (cast_expression "(uint *)FUN_000329a0(uVar15 + 1,4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000329a0(uVar15 + 1,4)" (identifier "FUN_000329a0") (argument_list "(uVar15 + 1,4)" (( "(") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1")) (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "memset(puVar6,0,(uVar15 + 1) * 4);" (call_expression "memset(puVar6,0,(uVar15 + 1) * 4)" (identifier "memset") (argument_list "(puVar6,0,(uVar15 + 1) * 4)" (( "(") (identifier "puVar6") (, ",") (number_literal "0") (, ",") (binary_expression "(uVar15 + 1) * 4" (parenthesized_expression "(uVar15 + 1)" (( "(") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "4")) () ")"))) (; ";")) (expression_statement "*puVar6 = uVar15;" (assignment_expression "*puVar6 = uVar15" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (identifier "uVar15")) (; ";")) (expression_statement "FUN_00060250(0);" (call_expression "FUN_00060250(0)" (identifier "FUN_00060250") (argument_list "(0)" (( "(") (number_literal "0") () ")"))) (; ";")) (expression_statement "uVar15 = *puVar6;" (assignment_expression "uVar15 = *puVar6" (identifier "uVar15") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (if_statement "if (1 < uVar15) {\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }" (if "if") (parenthesized_expression "(1 < uVar15)" (( "(") (binary_expression "1 < uVar15" (number_literal "1") (< "<") (identifier "uVar15")) () ")")) (compound_statement "{\n    do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);\n  }" ({ "{") (do_statement "do {\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    } while (uVar15 != 1);" (do "do") (compound_statement "{\n      if (puVar6[uVar15] != 0) break;\n      uVar15 = uVar15 - 1;\n      *puVar6 = uVar15;\n    }" ({ "{") (if_statement "if (puVar6[uVar15] != 0) break;" (if "if") (parenthesized_expression "(puVar6[uVar15] != 0)" (( "(") (binary_expression "puVar6[uVar15] != 0" (subscript_expression "puVar6[uVar15]" (identifier "puVar6") ([ "[") (identifier "uVar15") (] "]")) (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar15 = uVar15 - 1;" (assignment_expression "uVar15 = uVar15 - 1" (identifier "uVar15") (= "=") (binary_expression "uVar15 - 1" (identifier "uVar15") (- "-") (number_literal "1"))) (; ";")) (expression_statement "*puVar6 = uVar15;" (assignment_expression "*puVar6 = uVar15" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (identifier "uVar15")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar15 != 1)" (( "(") (binary_expression "uVar15 != 1" (identifier "uVar15") (!= "!=") (number_literal "1")) () ")")) (; ";")) (} "}"))) (expression_statement "FUN_00032c20(puVar8,*puVar8 * 4 + 4);" (call_expression "FUN_00032c20(puVar8,*puVar8 * 4 + 4)" (identifier "FUN_00032c20") (argument_list "(puVar8,*puVar8 * 4 + 4)" (( "(") (identifier "puVar8") (, ",") (binary_expression "*puVar8 * 4 + 4" (binary_expression "*puVar8 * 4" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (* "*") (number_literal "4")) (+ "+") (number_literal "4")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(puVar8);" (call_expression "FUN_00032b40(puVar8)" (identifier "FUN_00032b40") (argument_list "(puVar8)" (( "(") (identifier "puVar8") () ")"))) (; ";")) (expression_statement "puVar11 = (uint *)FUN_000329a0(uVar7,4);" (assignment_expression "puVar11 = (uint *)FUN_000329a0(uVar7,4)" (identifier "puVar11") (= "=") (cast_expression "(uint *)FUN_000329a0(uVar7,4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000329a0(uVar7,4)" (identifier "FUN_000329a0") (argument_list "(uVar7,4)" (( "(") (identifier "uVar7") (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "iVar1 = uVar7 - 1;" (assignment_expression "iVar1 = uVar7 - 1" (identifier "iVar1") (= "=") (binary_expression "uVar7 - 1" (identifier "uVar7") (- "-") (number_literal "1"))) (; ";")) (expression_statement "puVar12 = puVar11 + iVar1;" (assignment_expression "puVar12 = puVar11 + iVar1" (identifier "puVar12") (= "=") (binary_expression "puVar11 + iVar1" (identifier "puVar11") (+ "+") (identifier "iVar1"))) (; ";")) (expression_statement "puVar8 = param_3;" (assignment_expression "puVar8 = param_3" (identifier "puVar8") (= "=") (identifier "param_3")) (; ";")) (expression_statement "iVar21 = iVar1;" (assignment_expression "iVar21 = iVar1" (identifier "iVar21") (= "=") (identifier "iVar1")) (; ";")) (expression_statement "uVar15 = uVar5;" (assignment_expression "uVar15 = uVar5" (identifier "uVar15") (= "=") (identifier "uVar5")) (; ";")) (if_statement "if ((int)uVar7 < 1) {\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }\n  else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" (if "if") (parenthesized_expression "((int)uVar7 < 1)" (( "(") (binary_expression "(int)uVar7 < 1" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    local_60 = FUN_000329a0(uVar7,4);\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    if (-1 < iVar1) goto LAB_000640c0;\n    iVar21 = *piVar10;\n  }" ({ "{") (expression_statement "local_60 = FUN_000329a0(uVar7,4);" (assignment_expression "local_60 = FUN_000329a0(uVar7,4)" (identifier "local_60") (= "=") (call_expression "FUN_000329a0(uVar7,4)" (identifier "FUN_000329a0") (argument_list "(uVar7,4)" (( "(") (identifier "uVar7") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "FUN_00032c20(piVar9,*piVar9 * 4 + 4);" (call_expression "FUN_00032c20(piVar9,*piVar9 * 4 + 4)" (identifier "FUN_00032c20") (argument_list "(piVar9,*piVar9 * 4 + 4)" (( "(") (identifier "piVar9") (, ",") (binary_expression "*piVar9 * 4 + 4" (binary_expression "*piVar9 * 4" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (* "*") (number_literal "4")) (+ "+") (number_literal "4")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(piVar9);" (call_expression "FUN_00032b40(piVar9)" (identifier "FUN_00032b40") (argument_list "(piVar9)" (( "(") (identifier "piVar9") () ")"))) (; ";")) (expression_statement "local_54 = (void *)FUN_000329a0(uVar7,4);" (assignment_expression "local_54 = (void *)FUN_000329a0(uVar7,4)" (identifier "local_54") (= "=") (cast_expression "(void *)FUN_000329a0(uVar7,4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000329a0(uVar7,4)" (identifier "FUN_000329a0") (argument_list "(uVar7,4)" (( "(") (identifier "uVar7") (, ",") (number_literal "4") () ")"))))) (; ";")) (if_statement "if (-1 < iVar1) goto LAB_000640c0;" (if "if") (parenthesized_expression "(-1 < iVar1)" (( "(") (binary_expression "-1 < iVar1" (number_literal "-1") (< "<") (identifier "iVar1")) () ")")) (goto_statement "goto LAB_000640c0;" (goto "goto") (statement_identifier "LAB_000640c0") (; ";"))) (expression_statement "iVar21 = *piVar10;" (assignment_expression "iVar21 = *piVar10" (identifier "iVar21") (= "=") (pointer_expression "*piVar10" (* "*") (identifier "piVar10"))) (; ";")) (} "}")) (else_clause "else {\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" (else "else") (compound_statement "{\n    do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);\n    local_60 = FUN_000329a0(uVar7,4);\n    uVar13 = 0;\n    piVar29 = (int *)(iVar1 * 4 + local_60);\n    do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);\nLAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);\n    FUN_00032b40(piVar9);\n    local_54 = (void *)FUN_000329a0(uVar7,4);\n    memset(local_54,0,uVar7 * 4);\nLAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);\n    iVar21 = *piVar10;\n    if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }\n  }" ({ "{") (do_statement "do {\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    } while (bVar32);" (do "do") (compound_statement "{\n      puVar8 = puVar8 + 1;\n      *puVar12 = *puVar8;\n      bVar32 = puVar11 != puVar12;\n      puVar12 = puVar12 + -1;\n    }" ({ "{") (expression_statement "puVar8 = puVar8 + 1;" (assignment_expression "puVar8 = puVar8 + 1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + 1" (identifier "puVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar12 = *puVar8;" (assignment_expression "*puVar12 = *puVar8" (pointer_expression "*puVar12" (* "*") (identifier "puVar12")) (= "=") (pointer_expression "*puVar8" (* "*") (identifier "puVar8"))) (; ";")) (expression_statement "bVar32 = puVar11 != puVar12;" (assignment_expression "bVar32 = puVar11 != puVar12" (identifier "bVar32") (= "=") (binary_expression "puVar11 != puVar12" (identifier "puVar11") (!= "!=") (identifier "puVar12"))) (; ";")) (expression_statement "puVar12 = puVar12 + -1;" (assignment_expression "puVar12 = puVar12 + -1" (identifier "puVar12") (= "=") (binary_expression "puVar12 + -1" (identifier "puVar12") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar32)" (( "(") (identifier "bVar32") () ")")) (; ";")) (expression_statement "local_60 = FUN_000329a0(uVar7,4);" (assignment_expression "local_60 = FUN_000329a0(uVar7,4)" (identifier "local_60") (= "=") (call_expression "FUN_000329a0(uVar7,4)" (identifier "FUN_000329a0") (argument_list "(uVar7,4)" (( "(") (identifier "uVar7") (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" (identifier "uVar13") (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar29 = (int *)(iVar1 * 4 + local_60);" (assignment_expression "piVar29 = (int *)(iVar1 * 4 + local_60)" (identifier "piVar29") (= "=") (cast_expression "(int *)(iVar1 * 4 + local_60)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 * 4 + local_60)" (( "(") (binary_expression "iVar1 * 4 + local_60" (binary_expression "iVar1 * 4" (identifier "iVar1") (* "*") (number_literal "4")) (+ "+") (identifier "local_60")) () ")")))) (; ";")) (do_statement "do {\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    } while (uVar13 != uVar7);" (do "do") (compound_statement "{\n      while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }\n      iVar24 = uVar13 + 1;\n      uVar13 = uVar13 + 1;\n      *piVar29 = piVar9[iVar24];\n      piVar29 = piVar29 + -1;\n    }" ({ "{") (while_statement "while (*piVar9 <= (int)uVar13) {\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }" (while "while") (parenthesized_expression "(*piVar9 <= (int)uVar13)" (( "(") (binary_expression "*piVar9 <= (int)uVar13" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (<= "<=") (cast_expression "(int)uVar13" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar13"))) () ")")) (compound_statement "{\n        *piVar29 = 0;\n        uVar13 = uVar13 + 1;\n        piVar29 = piVar29 + -1;\n        if (uVar7 == uVar13) goto LAB_0006405b;\n      }" ({ "{") (expression_statement "*piVar29 = 0;" (assignment_expression "*piVar29 = 0" (pointer_expression "*piVar29" (* "*") (identifier "piVar29")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" (identifier "uVar13") (= "=") (binary_expression "uVar13 + 1" (identifier "uVar13") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar29 = piVar29 + -1;" (assignment_expression "piVar29 = piVar29 + -1" (identifier "piVar29") (= "=") (binary_expression "piVar29 + -1" (identifier "piVar29") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (uVar7 == uVar13) goto LAB_0006405b;" (if "if") (parenthesized_expression "(uVar7 == uVar13)" (( "(") (binary_expression "uVar7 == uVar13" (identifier "uVar7") (== "==") (identifier "uVar13")) () ")")) (goto_statement "goto LAB_0006405b;" (goto "goto") (statement_identifier "LAB_0006405b") (; ";"))) (} "}"))) (expression_statement "iVar24 = uVar13 + 1;" (assignment_expression "iVar24 = uVar13 + 1" (identifier "iVar24") (= "=") (binary_expression "uVar13 + 1" (identifier "uVar13") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar13 = uVar13 + 1;" (assignment_expression "uVar13 = uVar13 + 1" (identifier "uVar13") (= "=") (binary_expression "uVar13 + 1" (identifier "uVar13") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*piVar29 = piVar9[iVar24];" (assignment_expression "*piVar29 = piVar9[iVar24]" (pointer_expression "*piVar29" (* "*") (identifier "piVar29")) (= "=") (subscript_expression "piVar9[iVar24]" (identifier "piVar9") ([ "[") (identifier "iVar24") (] "]"))) (; ";")) (expression_statement "piVar29 = piVar29 + -1;" (assignment_expression "piVar29 = piVar29 + -1" (identifier "piVar29") (= "=") (binary_expression "piVar29 + -1" (identifier "piVar29") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar13 != uVar7)" (( "(") (binary_expression "uVar13 != uVar7" (identifier "uVar13") (!= "!=") (identifier "uVar7")) () ")")) (; ";")) (labeled_statement "LAB_0006405b:\n    FUN_00032c20(piVar9,*piVar9 * 4 + 4);" (statement_identifier "LAB_0006405b") (: ":") (expression_statement "FUN_00032c20(piVar9,*piVar9 * 4 + 4);" (call_expression "FUN_00032c20(piVar9,*piVar9 * 4 + 4)" (identifier "FUN_00032c20") (argument_list "(piVar9,*piVar9 * 4 + 4)" (( "(") (identifier "piVar9") (, ",") (binary_expression "*piVar9 * 4 + 4" (binary_expression "*piVar9 * 4" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (* "*") (number_literal "4")) (+ "+") (number_literal "4")) () ")"))) (; ";"))) (expression_statement "FUN_00032b40(piVar9);" (call_expression "FUN_00032b40(piVar9)" (identifier "FUN_00032b40") (argument_list "(piVar9)" (( "(") (identifier "piVar9") () ")"))) (; ";")) (expression_statement "local_54 = (void *)FUN_000329a0(uVar7,4);" (assignment_expression "local_54 = (void *)FUN_000329a0(uVar7,4)" (identifier "local_54") (= "=") (cast_expression "(void *)FUN_000329a0(uVar7,4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000329a0(uVar7,4)" (identifier "FUN_000329a0") (argument_list "(uVar7,4)" (( "(") (identifier "uVar7") (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "memset(local_54,0,uVar7 * 4);" (call_expression "memset(local_54,0,uVar7 * 4)" (identifier "memset") (argument_list "(local_54,0,uVar7 * 4)" (( "(") (identifier "local_54") (, ",") (number_literal "0") (, ",") (binary_expression "uVar7 * 4" (identifier "uVar7") (* "*") (number_literal "4")) () ")"))) (; ";")) (labeled_statement "LAB_000640c0:\n    do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);" (statement_identifier "LAB_000640c0") (: ":") (do_statement "do {\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    } while (iVar21 != -1);" (do "do") (compound_statement "{\n      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);\n      uVar30 = uVar15 + uVar13;\n      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);\n      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;\n      iVar21 = iVar21 + -1;\n      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);\n    }" ({ "{") (expression_statement "uVar13 = *(uint *)((int)local_54 + iVar21 * 4);" (assignment_expression "uVar13 = *(uint *)((int)local_54 + iVar21 * 4)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)((int)local_54 + iVar21 * 4)" (* "*") (cast_expression "(uint *)((int)local_54 + iVar21 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)local_54 + iVar21 * 4)" (( "(") (binary_expression "(int)local_54 + iVar21 * 4" (cast_expression "(int)local_54" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_54")) (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar30 = uVar15 + uVar13;" (assignment_expression "uVar30 = uVar15 + uVar13" (identifier "uVar30") (= "=") (binary_expression "uVar15 + uVar13" (identifier "uVar15") (+ "+") (identifier "uVar13"))) (; ";")) (expression_statement "uVar14 = ~*(uint *)(local_60 + iVar21 * 4);" (assignment_expression "uVar14 = ~*(uint *)(local_60 + iVar21 * 4)" (identifier "uVar14") (= "=") (unary_expression "~*(uint *)(local_60 + iVar21 * 4)" (~ "~") (pointer_expression "*(uint *)(local_60 + iVar21 * 4)" (* "*") (cast_expression "(uint *)(local_60 + iVar21 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + iVar21 * 4)" (( "(") (binary_expression "local_60 + iVar21 * 4" (identifier "local_60") (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")")))))) (; ";")) (expression_statement "*(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;" (assignment_expression "*(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30" (pointer_expression "*(uint *)(local_60 + iVar21 * 4)" (* "*") (cast_expression "(uint *)(local_60 + iVar21 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + iVar21 * 4)" (( "(") (binary_expression "local_60 + iVar21 * 4" (identifier "local_60") (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")")))) (= "=") (binary_expression "uVar14 + uVar30" (identifier "uVar14") (+ "+") (identifier "uVar30"))) (; ";")) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" (identifier "iVar21") (= "=") (binary_expression "iVar21 + -1" (identifier "iVar21") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);" (assignment_expression "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30)" (identifier "uVar15") (= "=") (binary_expression "(uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30)" (cast_expression "(uint)CARRY4(uVar15,uVar13)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar15,uVar13)" (identifier "CARRY4") (argument_list "(uVar15,uVar13)" (( "(") (identifier "uVar15") (, ",") (identifier "uVar13") () ")")))) (+ "+") (cast_expression "(uint)CARRY4(uVar14,uVar30)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar14,uVar30)" (identifier "CARRY4") (argument_list "(uVar14,uVar30)" (( "(") (identifier "uVar14") (, ",") (identifier "uVar30") () ")")))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar21 != -1)" (( "(") (binary_expression "iVar21 != -1" (identifier "iVar21") (!= "!=") (number_literal "-1")) () ")")) (; ";"))) (expression_statement "iVar21 = *piVar10;" (assignment_expression "iVar21 = *piVar10" (identifier "iVar21") (= "=") (pointer_expression "*piVar10" (* "*") (identifier "piVar10"))) (; ";")) (if_statement "if (0 < (int)uVar7) {\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }" (if "if") (parenthesized_expression "(0 < (int)uVar7)" (( "(") (binary_expression "0 < (int)uVar7" (number_literal "0") (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (compound_statement "{\n      piVar9 = (int *)((int)local_54 + iVar1 * 4);\n      uVar15 = 0;\n      if (iVar21 < 1) goto LAB_0006412f;\nLAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];\njoined_r0x00064127:\n      uVar15 = uVar15 + 1;\n      if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }\n      piVar9 = piVar9 + -1;\n      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;\n      goto LAB_00064118;\n    }" ({ "{") (expression_statement "piVar9 = (int *)((int)local_54 + iVar1 * 4);" (assignment_expression "piVar9 = (int *)((int)local_54 + iVar1 * 4)" (identifier "piVar9") (= "=") (cast_expression "(int *)((int)local_54 + iVar1 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)local_54 + iVar1 * 4)" (( "(") (binary_expression "(int)local_54 + iVar1 * 4" (cast_expression "(int)local_54" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_54")) (+ "+") (binary_expression "iVar1 * 4" (identifier "iVar1") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" (identifier "uVar15") (= "=") (number_literal "0")) (; ";")) (if_statement "if (iVar21 < 1) goto LAB_0006412f;" (if "if") (parenthesized_expression "(iVar21 < 1)" (( "(") (binary_expression "iVar21 < 1" (identifier "iVar21") (< "<") (number_literal "1")) () ")")) (goto_statement "goto LAB_0006412f;" (goto "goto") (statement_identifier "LAB_0006412f") (; ";"))) (labeled_statement "LAB_00064118:\n      *piVar9 = piVar10[uVar15 + 1];" (statement_identifier "LAB_00064118") (: ":") (expression_statement "*piVar9 = piVar10[uVar15 + 1];" (assignment_expression "*piVar9 = piVar10[uVar15 + 1]" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (= "=") (subscript_expression "piVar10[uVar15 + 1]" (identifier "piVar10") ([ "[") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1")) (] "]"))) (; ";"))) (labeled_statement "joined_r0x00064127:\n      uVar15 = uVar15 + 1;" (statement_identifier "joined_r0x00064127") (: ":") (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" (identifier "uVar15") (= "=") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1"))) (; ";"))) (if_statement "if (uVar15 == uVar7) {\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }" (if "if") (parenthesized_expression "(uVar15 == uVar7)" (( "(") (binary_expression "uVar15 == uVar7" (identifier "uVar15") (== "==") (identifier "uVar7")) () ")")) (compound_statement "{\n        FUN_00032c20(piVar10,*piVar10 * 4 + 4);\n        FUN_00032b40(piVar10);\n        local_88 = FUN_000329a0(uVar7 * 2,4);\n        iVar21 = FUN_000329a0(uVar7 * 2,4);\n        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);\n        uVar15 = 0;\n        do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);\n        FUN_00032c20(puVar6,*puVar6 * 4 + 4);\n        FUN_00032b40(puVar6);\n        local_20 = uVar7 * 3;\n        if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }\n        goto LAB_0006421b;\n      }" ({ "{") (expression_statement "FUN_00032c20(piVar10,*piVar10 * 4 + 4);" (call_expression "FUN_00032c20(piVar10,*piVar10 * 4 + 4)" (identifier "FUN_00032c20") (argument_list "(piVar10,*piVar10 * 4 + 4)" (( "(") (identifier "piVar10") (, ",") (binary_expression "*piVar10 * 4 + 4" (binary_expression "*piVar10 * 4" (pointer_expression "*piVar10" (* "*") (identifier "piVar10")) (* "*") (number_literal "4")) (+ "+") (number_literal "4")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(piVar10);" (call_expression "FUN_00032b40(piVar10)" (identifier "FUN_00032b40") (argument_list "(piVar10)" (( "(") (identifier "piVar10") () ")"))) (; ";")) (expression_statement "local_88 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "local_88 = FUN_000329a0(uVar7 * 2,4)" (identifier "local_88") (= "=") (call_expression "FUN_000329a0(uVar7 * 2,4)" (identifier "FUN_000329a0") (argument_list "(uVar7 * 2,4)" (( "(") (binary_expression "uVar7 * 2" (identifier "uVar7") (* "*") (number_literal "2")) (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "iVar21 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "iVar21 = FUN_000329a0(uVar7 * 2,4)" (identifier "iVar21") (= "=") (call_expression "FUN_000329a0(uVar7 * 2,4)" (identifier "FUN_000329a0") (argument_list "(uVar7 * 2,4)" (( "(") (binary_expression "uVar7 * 2" (identifier "uVar7") (* "*") (number_literal "2")) (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);" (assignment_expression "puVar8 = (uint *)(local_88 + -4 + uVar7 * 8)" (identifier "puVar8") (= "=") (cast_expression "(uint *)(local_88 + -4 + uVar7 * 8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_88 + -4 + uVar7 * 8)" (( "(") (binary_expression "local_88 + -4 + uVar7 * 8" (binary_expression "local_88 + -4" (identifier "local_88") (+ "+") (number_literal "-4")) (+ "+") (binary_expression "uVar7 * 8" (identifier "uVar7") (* "*") (number_literal "8"))) () ")")))) (; ";")) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" (identifier "uVar15") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        } while (uVar7 != uVar15);" (do "do") (compound_statement "{\n          if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }\n          puVar8 = puVar8 + -1;\n          uVar15 = uVar15 + 1;\n        }" ({ "{") (if_statement "if ((int)uVar15 < (int)*puVar6) {\n            *puVar8 = puVar6[uVar15 + 1];\n          }\n          else {\n            *puVar8 = 0;\n          }" (if "if") (parenthesized_expression "((int)uVar15 < (int)*puVar6)" (( "(") (binary_expression "(int)uVar15 < (int)*puVar6" (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15")) (< "<") (cast_expression "(int)*puVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*puVar6" (* "*") (identifier "puVar6")))) () ")")) (compound_statement "{\n            *puVar8 = puVar6[uVar15 + 1];\n          }" ({ "{") (expression_statement "*puVar8 = puVar6[uVar15 + 1];" (assignment_expression "*puVar8 = puVar6[uVar15 + 1]" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (subscript_expression "puVar6[uVar15 + 1]" (identifier "puVar6") ([ "[") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1")) (] "]"))) (; ";")) (} "}")) (else_clause "else {\n            *puVar8 = 0;\n          }" (else "else") (compound_statement "{\n            *puVar8 = 0;\n          }" ({ "{") (expression_statement "*puVar8 = 0;" (assignment_expression "*puVar8 = 0" (pointer_expression "*puVar8" (* "*") (identifier "puVar8")) (= "=") (number_literal "0")) (; ";")) (} "}")))) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + -1" (identifier "puVar8") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar15 = uVar15 + 1;" (assignment_expression "uVar15 = uVar15 + 1" (identifier "uVar15") (= "=") (binary_expression "uVar15 + 1" (identifier "uVar15") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar7 != uVar15)" (( "(") (binary_expression "uVar7 != uVar15" (identifier "uVar7") (!= "!=") (identifier "uVar15")) () ")")) (; ";")) (expression_statement "FUN_00032c20(puVar6,*puVar6 * 4 + 4);" (call_expression "FUN_00032c20(puVar6,*puVar6 * 4 + 4)" (identifier "FUN_00032c20") (argument_list "(puVar6,*puVar6 * 4 + 4)" (( "(") (identifier "puVar6") (, ",") (binary_expression "*puVar6 * 4 + 4" (binary_expression "*puVar6 * 4" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (* "*") (number_literal "4")) (+ "+") (number_literal "4")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(puVar6);" (call_expression "FUN_00032b40(puVar6)" (identifier "FUN_00032b40") (argument_list "(puVar6)" (( "(") (identifier "puVar6") () ")"))) (; ";")) (expression_statement "local_20 = uVar7 * 3;" (assignment_expression "local_20 = uVar7 * 3" (identifier "local_20") (= "=") (binary_expression "uVar7 * 3" (identifier "uVar7") (* "*") (number_literal "3"))) (; ";")) (if_statement "if (0x32 < (int)uVar7) {\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }" (if "if") (parenthesized_expression "(0x32 < (int)uVar7)" (( "(") (binary_expression "0x32 < (int)uVar7" (number_literal "0x32") (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (compound_statement "{\n          iVar24 = 0;\n          uVar15 = uVar7;\n          do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);\n          local_20 = local_20 + iVar24;\n        }" ({ "{") (expression_statement "iVar24 = 0;" (assignment_expression "iVar24 = 0" (identifier "iVar24") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar15 = uVar7;" (assignment_expression "uVar15 = uVar7" (identifier "uVar15") (= "=") (identifier "uVar7")) (; ";")) (do_statement "do {\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          } while (0x32 < (int)uVar15);" (do "do") (compound_statement "{\n            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;\n            iVar24 = iVar24 + uVar15 * 4;\n          }" ({ "{") (expression_statement "uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;" (assignment_expression "uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1" (identifier "uVar15") (= "=") (binary_expression "(uVar15 - ((int)uVar15 >> 1)) + 1" (parenthesized_expression "(uVar15 - ((int)uVar15 >> 1))" (( "(") (binary_expression "uVar15 - ((int)uVar15 >> 1)" (identifier "uVar15") (- "-") (parenthesized_expression "((int)uVar15 >> 1)" (( "(") (binary_expression "(int)uVar15 >> 1" (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15")) (>> ">>") (number_literal "1")) () ")"))) () ")")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar24 = iVar24 + uVar15 * 4;" (assignment_expression "iVar24 = iVar24 + uVar15 * 4" (identifier "iVar24") (= "=") (binary_expression "iVar24 + uVar15 * 4" (identifier "iVar24") (+ "+") (binary_expression "uVar15 * 4" (identifier "uVar15") (* "*") (number_literal "4")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(0x32 < (int)uVar15)" (( "(") (binary_expression "0x32 < (int)uVar15" (number_literal "0x32") (< "<") (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15"))) () ")")) (; ";")) (expression_statement "local_20 = local_20 + iVar24;" (assignment_expression "local_20 = local_20 + iVar24" (identifier "local_20") (= "=") (binary_expression "local_20 + iVar24" (identifier "local_20") (+ "+") (identifier "iVar24"))) (; ";")) (} "}"))) (goto_statement "goto LAB_0006421b;" (goto "goto") (statement_identifier "LAB_0006421b") (; ";")) (} "}"))) (expression_statement "piVar9 = piVar9 + -1;" (assignment_expression "piVar9 = piVar9 + -1" (identifier "piVar9") (= "=") (binary_expression "piVar9 + -1" (identifier "piVar9") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (*piVar10 <= (int)uVar15) goto LAB_0006412f;" (if "if") (parenthesized_expression "(*piVar10 <= (int)uVar15)" (( "(") (binary_expression "*piVar10 <= (int)uVar15" (pointer_expression "*piVar10" (* "*") (identifier "piVar10")) (<= "<=") (cast_expression "(int)uVar15" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar15"))) () ")")) (goto_statement "goto LAB_0006412f;" (goto "goto") (statement_identifier "LAB_0006412f") (; ";"))) (goto_statement "goto LAB_00064118;" (goto "goto") (statement_identifier "LAB_00064118") (; ";")) (} "}"))) (} "}")))) (expression_statement "FUN_00032c20(piVar10,iVar21 * 4 + 4);" (call_expression "FUN_00032c20(piVar10,iVar21 * 4 + 4)" (identifier "FUN_00032c20") (argument_list "(piVar10,iVar21 * 4 + 4)" (( "(") (identifier "piVar10") (, ",") (binary_expression "iVar21 * 4 + 4" (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4")) (+ "+") (number_literal "4")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(piVar10);" (call_expression "FUN_00032b40(piVar10)" (identifier "FUN_00032b40") (argument_list "(piVar10)" (( "(") (identifier "piVar10") () ")"))) (; ";")) (expression_statement "local_88 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "local_88 = FUN_000329a0(uVar7 * 2,4)" (identifier "local_88") (= "=") (call_expression "FUN_000329a0(uVar7 * 2,4)" (identifier "FUN_000329a0") (argument_list "(uVar7 * 2,4)" (( "(") (binary_expression "uVar7 * 2" (identifier "uVar7") (* "*") (number_literal "2")) (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "iVar21 = FUN_000329a0(uVar7 * 2,4);" (assignment_expression "iVar21 = FUN_000329a0(uVar7 * 2,4)" (identifier "iVar21") (= "=") (call_expression "FUN_000329a0(uVar7 * 2,4)" (identifier "FUN_000329a0") (argument_list "(uVar7 * 2,4)" (( "(") (binary_expression "uVar7 * 2" (identifier "uVar7") (* "*") (number_literal "2")) (, ",") (number_literal "4") () ")")))) (; ";")) (expression_statement "FUN_00032c20(puVar6,*puVar6 * 4 + 4);" (call_expression "FUN_00032c20(puVar6,*puVar6 * 4 + 4)" (identifier "FUN_00032c20") (argument_list "(puVar6,*puVar6 * 4 + 4)" (( "(") (identifier "puVar6") (, ",") (binary_expression "*puVar6 * 4 + 4" (binary_expression "*puVar6 * 4" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (* "*") (number_literal "4")) (+ "+") (number_literal "4")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(puVar6);" (call_expression "FUN_00032b40(puVar6)" (identifier "FUN_00032b40") (argument_list "(puVar6)" (( "(") (identifier "puVar6") () ")"))) (; ";")) (expression_statement "local_20 = uVar7 * 3;" (assignment_expression "local_20 = uVar7 * 3" (identifier "local_20") (= "=") (binary_expression "uVar7 * 3" (identifier "uVar7") (* "*") (number_literal "3"))) (; ";")) (labeled_statement "LAB_0006421b:\n  __s = (void *)FUN_000329a0(local_20,4);" (statement_identifier "LAB_0006421b") (: ":") (expression_statement "__s = (void *)FUN_000329a0(local_20,4);" (assignment_expression "__s = (void *)FUN_000329a0(local_20,4)" (identifier "__s") (= "=") (cast_expression "(void *)FUN_000329a0(local_20,4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000329a0(local_20,4)" (identifier "FUN_000329a0") (argument_list "(local_20,4)" (( "(") (identifier "local_20") (, ",") (number_literal "4") () ")"))))) (; ";"))) (expression_statement "iVar24 = *param_2;" (assignment_expression "iVar24 = *param_2" (identifier "iVar24") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "local_78 = 0;" (assignment_expression "local_78 = 0" (identifier "local_78") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar6 = (uint *)(param_2 + iVar24);" (assignment_expression "puVar6 = (uint *)(param_2 + iVar24)" (identifier "puVar6") (= "=") (cast_expression "(uint *)(param_2 + iVar24)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + iVar24)" (( "(") (binary_expression "param_2 + iVar24" (identifier "param_2") (+ "+") (identifier "iVar24")) () ")")))) (; ";")) (if_statement "if (0 < iVar24) {\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }" (if "if") (parenthesized_expression "(0 < iVar24)" (( "(") (binary_expression "0 < iVar24" (number_literal "0") (< "<") (identifier "iVar24")) () ")")) (compound_statement "{\n    do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);\n  }" ({ "{") (do_statement "do {\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    } while (iVar24 != local_78);" (do "do") (compound_statement "{\n      local_94 = 0x1f;\n      do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);\n      local_78 = local_78 + 1;\n      puVar6 = puVar6 + -1;\n    }" ({ "{") (expression_statement "local_94 = 0x1f;" (assignment_expression "local_94 = 0x1f" (identifier "local_94") (= "=") (number_literal "0x1f")) (; ";")) (do_statement "do {\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      } while (local_94 != -1);" (do "do") (compound_statement "{\n        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }\n        local_94 = local_94 + -1;\n      }" ({ "{") (if_statement "if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }" (if "if") (parenthesized_expression "((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0)" (( "(") (binary_expression "(1 << ((byte)local_94 & 0x1f) & *puVar6) != 0" (parenthesized_expression "(1 << ((byte)local_94 & 0x1f) & *puVar6)" (( "(") (binary_expression "1 << ((byte)local_94 & 0x1f) & *puVar6" (binary_expression "1 << ((byte)local_94 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "((byte)local_94 & 0x1f)" (( "(") (binary_expression "(byte)local_94 & 0x1f" (cast_expression "(byte)local_94" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_94")) (& "&") (number_literal "0x1f")) () ")"))) (& "&") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          if (iVar24 <= local_78) goto LAB_000645c6;\n          iVar31 = uVar7 * 2 + -1;\n          __n = uVar7 * 4;\n          pvVar2 = (void *)((int)__s + uVar7 * 0xc);\n          pvVar16 = (void *)((int)__s + __n);\n          iVar25 = (int)uVar7 >> 1;\n          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);\n          iVar17 = uVar7 - iVar25;\n          iVar24 = iVar17 + iVar25 * 2;\n          iVar28 = iVar21;\n          goto LAB_00064370;\n        }" ({ "{") (if_statement "if (iVar24 <= local_78) goto LAB_000645c6;" (if "if") (parenthesized_expression "(iVar24 <= local_78)" (( "(") (binary_expression "iVar24 <= local_78" (identifier "iVar24") (<= "<=") (identifier "local_78")) () ")")) (goto_statement "goto LAB_000645c6;" (goto "goto") (statement_identifier "LAB_000645c6") (; ";"))) (expression_statement "iVar31 = uVar7 * 2 + -1;" (assignment_expression "iVar31 = uVar7 * 2 + -1" (identifier "iVar31") (= "=") (binary_expression "uVar7 * 2 + -1" (binary_expression "uVar7 * 2" (identifier "uVar7") (* "*") (number_literal "2")) (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "__n = uVar7 * 4;" (assignment_expression "__n = uVar7 * 4" (identifier "__n") (= "=") (binary_expression "uVar7 * 4" (identifier "uVar7") (* "*") (number_literal "4"))) (; ";")) (expression_statement "pvVar2 = (void *)((int)__s + uVar7 * 0xc);" (assignment_expression "pvVar2 = (void *)((int)__s + uVar7 * 0xc)" (identifier "pvVar2") (= "=") (cast_expression "(void *)((int)__s + uVar7 * 0xc)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)__s + uVar7 * 0xc)" (( "(") (binary_expression "(int)__s + uVar7 * 0xc" (cast_expression "(int)__s" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__s")) (+ "+") (binary_expression "uVar7 * 0xc" (identifier "uVar7") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "pvVar16 = (void *)((int)__s + __n);" (assignment_expression "pvVar16 = (void *)((int)__s + __n)" (identifier "pvVar16") (= "=") (cast_expression "(void *)((int)__s + __n)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)__s + __n)" (( "(") (binary_expression "(int)__s + __n" (cast_expression "(int)__s" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__s")) (+ "+") (identifier "__n")) () ")")))) (; ";")) (expression_statement "iVar25 = (int)uVar7 >> 1;" (assignment_expression "iVar25 = (int)uVar7 >> 1" (identifier "iVar25") (= "=") (binary_expression "(int)uVar7 >> 1" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);" (assignment_expression "pvVar3 = (void *)((int)pvVar2 + uVar7 * 8)" (identifier "pvVar3") (= "=") (cast_expression "(void *)((int)pvVar2 + uVar7 * 8)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar2 + uVar7 * 8)" (( "(") (binary_expression "(int)pvVar2 + uVar7 * 8" (cast_expression "(int)pvVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar2")) (+ "+") (binary_expression "uVar7 * 8" (identifier "uVar7") (* "*") (number_literal "8"))) () ")")))) (; ";")) (expression_statement "iVar17 = uVar7 - iVar25;" (assignment_expression "iVar17 = uVar7 - iVar25" (identifier "iVar17") (= "=") (binary_expression "uVar7 - iVar25" (identifier "uVar7") (- "-") (identifier "iVar25"))) (; ";")) (expression_statement "iVar24 = iVar17 + iVar25 * 2;" (assignment_expression "iVar24 = iVar17 + iVar25 * 2" (identifier "iVar24") (= "=") (binary_expression "iVar17 + iVar25 * 2" (identifier "iVar17") (+ "+") (binary_expression "iVar25 * 2" (identifier "iVar25") (* "*") (number_literal "2")))) (; ";")) (expression_statement "iVar28 = iVar21;" (assignment_expression "iVar28 = iVar21" (identifier "iVar28") (= "=") (identifier "iVar21")) (; ";")) (goto_statement "goto LAB_00064370;" (goto "goto") (statement_identifier "LAB_00064370") (; ";")) (} "}"))) (expression_statement "local_94 = local_94 + -1;" (assignment_expression "local_94 = local_94 + -1" (identifier "local_94") (= "=") (binary_expression "local_94 + -1" (identifier "local_94") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_94 != -1)" (( "(") (binary_expression "local_94 != -1" (identifier "local_94") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (expression_statement "local_78 = local_78 + 1;" (assignment_expression "local_78 = local_78 + 1" (identifier "local_78") (= "=") (binary_expression "local_78 + 1" (identifier "local_78") (+ "+") (number_literal "1"))) (; ";")) (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 "(iVar24 != local_78)" (( "(") (binary_expression "iVar24 != local_78" (identifier "iVar24") (!= "!=") (identifier "local_78")) () ")")) (; ";")) (} "}"))) (goto_statement "goto LAB_000645c6;" (goto "goto") (statement_identifier "LAB_000645c6") (; ";")) (labeled_statement "LAB_0006412f:\n  *piVar9 = 0;" (statement_identifier "LAB_0006412f") (: ":") (expression_statement "*piVar9 = 0;" (assignment_expression "*piVar9 = 0" (pointer_expression "*piVar9" (* "*") (identifier "piVar9")) (= "=") (number_literal "0")) (; ";"))) (goto_statement "goto joined_r0x00064127;" (goto "goto") (statement_identifier "joined_r0x00064127") (; ";")) (while_statement "while( true ) {\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    local_78 = local_78 + 1;\n    local_94 = 0x1f;\n    if (*param_2 <= local_78) break;\nLAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);\n  }" ({ "{") (expression_statement "local_78 = local_78 + 1;" (assignment_expression "local_78 = local_78 + 1" (identifier "local_78") (= "=") (binary_expression "local_78 + 1" (identifier "local_78") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "local_94 = 0x1f;" (assignment_expression "local_94 = 0x1f" (identifier "local_94") (= "=") (number_literal "0x1f")) (; ";")) (if_statement "if (*param_2 <= local_78) break;" (if "if") (parenthesized_expression "(*param_2 <= local_78)" (( "(") (binary_expression "*param_2 <= local_78" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (<= "<=") (identifier "local_78")) () ")")) (break_statement "break;" (break "break") (; ";"))) (labeled_statement "LAB_00064370:\n    do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);" (statement_identifier "LAB_00064370") (: ":") (do_statement "do {\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    } while (local_94 != -1);" (do "do") (compound_statement "{\n      FUN_0005f530(uVar7,__s);\n      puVar6 = (uint *)(iVar28 + __n);\n      if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }\n      iVar21 = local_88;\n      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }\n      local_88 = iVar28;\n      local_94 = local_94 + -1;\n      iVar28 = iVar21;\n    }" ({ "{") (expression_statement "FUN_0005f530(uVar7,__s);" (call_expression "FUN_0005f530(uVar7,__s)" (identifier "FUN_0005f530") (argument_list "(uVar7,__s)" (( "(") (identifier "uVar7") (, ",") (identifier "__s") () ")"))) (; ";")) (expression_statement "puVar6 = (uint *)(iVar28 + __n);" (assignment_expression "puVar6 = (uint *)(iVar28 + __n)" (identifier "puVar6") (= "=") (cast_expression "(uint *)(iVar28 + __n)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar28 + __n)" (( "(") (binary_expression "iVar28 + __n" (identifier "iVar28") (+ "+") (identifier "__n")) () ")")))) (; ";")) (if_statement "if ((int)uVar7 < 0x33) {\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }\n      else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }" (if "if") (parenthesized_expression "((int)uVar7 < 0x33)" (( "(") (binary_expression "(int)uVar7 < 0x33" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (< "<") (number_literal "0x33")) () ")")) (compound_statement "{\n        if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }\n        local_b0 = puVar6 + uVar7;\n        if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }\n        FUN_0005f530(uVar7,pvVar2);\n        if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }\n        if (0 < (int)uVar7) goto LAB_000644bf;\nLAB_00064525:\n        iVar21 = iVar1;\n        uVar15 = uVar5;\n        if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }\n      }" ({ "{") (if_statement "if (0 < (int)uVar7) {\n          memset(__s,0,__n);\n        }" (if "if") (parenthesized_expression "(0 < (int)uVar7)" (( "(") (binary_expression "0 < (int)uVar7" (number_literal "0") (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (compound_statement "{\n          memset(__s,0,__n);\n        }" ({ "{") (expression_statement "memset(__s,0,__n);" (call_expression "memset(__s,0,__n)" (identifier "memset") (argument_list "(__s,0,__n)" (( "(") (identifier "__s") (, ",") (number_literal "0") (, ",") (identifier "__n") () ")"))) (; ";")) (} "}"))) (expression_statement "local_b0 = puVar6 + uVar7;" (assignment_expression "local_b0 = puVar6 + uVar7" (identifier "local_b0") (= "=") (binary_expression "puVar6 + uVar7" (identifier "puVar6") (+ "+") (identifier "uVar7"))) (; ";")) (if_statement "if ((puVar6 < local_b0) && (__s < pvVar16)) {\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }" (if "if") (parenthesized_expression "((puVar6 < local_b0) && (__s < pvVar16))" (( "(") (binary_expression "(puVar6 < local_b0) && (__s < pvVar16)" (parenthesized_expression "(puVar6 < local_b0)" (( "(") (binary_expression "puVar6 < local_b0" (identifier "puVar6") (< "<") (identifier "local_b0")) () ")")) (&& "&&") (parenthesized_expression "(__s < pvVar16)" (( "(") (binary_expression "__s < pvVar16" (identifier "__s") (< "<") (identifier "pvVar16")) () ")"))) () ")")) (compound_statement "{\n          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);\n          pvVar27 = pvVar16;\n          if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }\n          do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);\n        }" ({ "{") (expression_statement "pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);" (assignment_expression "pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16)" (identifier "pvVar18") (= "=") (cast_expression "(void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(((int)puVar6 - (int)local_b0) + (int)pvVar16)" (( "(") (binary_expression "((int)puVar6 - (int)local_b0) + (int)pvVar16" (parenthesized_expression "((int)puVar6 - (int)local_b0)" (( "(") (binary_expression "(int)puVar6 - (int)local_b0" (cast_expression "(int)puVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "puVar6")) (- "-") (cast_expression "(int)local_b0" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "local_b0"))) () ")")) (+ "+") (cast_expression "(int)pvVar16" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar16"))) () ")")))) (; ";")) (expression_statement "pvVar27 = pvVar16;" (assignment_expression "pvVar27 = pvVar16" (identifier "pvVar27") (= "=") (identifier "pvVar16")) (; ";")) (if_statement "if (pvVar18 < __s) {\n            pvVar18 = __s;\n          }" (if "if") (parenthesized_expression "(pvVar18 < __s)" (( "(") (binary_expression "pvVar18 < __s" (identifier "pvVar18") (< "<") (identifier "__s")) () ")")) (compound_statement "{\n            pvVar18 = __s;\n          }" ({ "{") (expression_statement "pvVar18 = __s;" (assignment_expression "pvVar18 = __s" (identifier "pvVar18") (= "=") (identifier "__s")) (; ";")) (} "}"))) (do_statement "do {\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          } while (pvVar18 < pvVar27);" (do "do") (compound_statement "{\n            local_b0 = local_b0 + -1;\n            local_b8 = 0;\n            pvVar22 = pvVar27;\n            puVar8 = (uint *)(local_60 + -4 + __n);\n            do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);\n            pvVar27 = (void *)((int)pvVar27 + -4);\n          }" ({ "{") (expression_statement "local_b0 = local_b0 + -1;" (assignment_expression "local_b0 = local_b0 + -1" (identifier "local_b0") (= "=") (binary_expression "local_b0 + -1" (identifier "local_b0") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "local_b8 = 0;" (assignment_expression "local_b8 = 0" (identifier "local_b8") (= "=") (number_literal "0")) (; ";")) (expression_statement "pvVar22 = pvVar27;" (assignment_expression "pvVar22 = pvVar27" (identifier "pvVar22") (= "=") (identifier "pvVar27")) (; ";")) (expression_statement "puVar8 = (uint *)(local_60 + -4 + __n);" (assignment_expression "puVar8 = (uint *)(local_60 + -4 + __n)" (identifier "puVar8") (= "=") (cast_expression "(uint *)(local_60 + -4 + __n)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_60 + -4 + __n)" (( "(") (binary_expression "local_60 + -4 + __n" (binary_expression "local_60 + -4" (identifier "local_60") (+ "+") (number_literal "-4")) (+ "+") (identifier "__n")) () ")")))) (; ";")) (do_statement "do {\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            } while (__s < pvVar22);" (do "do") (compound_statement "{\n              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;\n              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);\n              *(int *)((int)pvVar22 + -4) = (int)lVar4;\n              puVar8 = puVar8 + -1;\n              pvVar22 = (void *)((int)pvVar22 + -4);\n            }" ({ "{") (expression_statement "lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;" (assignment_expression "lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8" (identifier "lVar4") (= "=") (binary_expression "(ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8" (binary_expression "(ulonglong)*puVar8 * (ulonglong)*local_b0 +\n                      (ulonglong)*(uint *)((int)pvVar22 + -4)" (binary_expression "(ulonglong)*puVar8 * (ulonglong)*local_b0" (binary_expression "(ulonglong)*puVar8 * (ulonglong)" (binary_expression "(ulonglong)*puVar8" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (identifier "puVar8")) (* "*") (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")"))) (* "*") (identifier "local_b0")) (+ "+") (binary_expression "(ulonglong)*(uint *)((int)pvVar22 + -4)" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (* "*") (cast_expression "(uint *)((int)pvVar22 + -4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar22 + -4)" (( "(") (binary_expression "(int)pvVar22 + -4" (cast_expression "(int)pvVar22" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar22")) (+ "+") (number_literal "-4")) () ")"))))) (+ "+") (cast_expression "(ulonglong)local_b8" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "local_b8")))) (; ";")) (expression_statement "local_b8 = (uint)((ulonglong)lVar4 >> 0x20);" (assignment_expression "local_b8 = (uint)((ulonglong)lVar4 >> 0x20)" (identifier "local_b8") (= "=") (call_expression "(uint)((ulonglong)lVar4 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulonglong)lVar4 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar4 >> 0x20" (cast_expression "(ulonglong)lVar4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar4")) (>> ">>") (number_literal "0x20")) () ")")))) (; ";")) (expression_statement "*(int *)((int)pvVar22 + -4) = (int)lVar4;" (assignment_expression "*(int *)((int)pvVar22 + -4) = (int)lVar4" (pointer_expression "*(int *)((int)pvVar22 + -4)" (* "*") (cast_expression "(int *)((int)pvVar22 + -4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar22 + -4)" (( "(") (binary_expression "(int)pvVar22 + -4" (cast_expression "(int)pvVar22" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar22")) (+ "+") (number_literal "-4")) () ")")))) (= "=") (cast_expression "(int)lVar4" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "lVar4"))) (; ";")) (expression_statement "puVar8 = puVar8 + -1;" (assignment_expression "puVar8 = puVar8 + -1" (identifier "puVar8") (= "=") (binary_expression "puVar8 + -1" (identifier "puVar8") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "pvVar22 = (void *)((int)pvVar22 + -4);" (assignment_expression "pvVar22 = (void *)((int)pvVar22 + -4)" (identifier "pvVar22") (= "=") (cast_expression "(void *)((int)pvVar22 + -4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar22 + -4)" (( "(") (binary_expression "(int)pvVar22 + -4" (cast_expression "(int)pvVar22" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar22")) (+ "+") (number_literal "-4")) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(__s < pvVar22)" (( "(") (binary_expression "__s < pvVar22" (identifier "__s") (< "<") (identifier "pvVar22")) () ")")) (; ";")) (expression_statement "pvVar27 = (void *)((int)pvVar27 + -4);" (assignment_expression "pvVar27 = (void *)((int)pvVar27 + -4)" (identifier "pvVar27") (= "=") (cast_expression "(void *)((int)pvVar27 + -4)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar27 + -4)" (( "(") (binary_expression "(int)pvVar27 + -4" (cast_expression "(int)pvVar27" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar27")) (+ "+") (number_literal "-4")) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(pvVar18 < pvVar27)" (( "(") (binary_expression "pvVar18 < pvVar27" (identifier "pvVar18") (< "<") (identifier "pvVar27")) () ")")) (; ";")) (} "}"))) (expression_statement "FUN_0005f530(uVar7,pvVar2);" (call_expression "FUN_0005f530(uVar7,pvVar2)" (identifier "FUN_0005f530") (argument_list "(uVar7,pvVar2)" (( "(") (identifier "uVar7") (, ",") (identifier "pvVar2") () ")"))) (; ";")) (if_statement "if (iVar31 < 0) {\n          uVar15 = 0;\n        }\n        else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }" (if "if") (parenthesized_expression "(iVar31 < 0)" (( "(") (binary_expression "iVar31 < 0" (identifier "iVar31") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          uVar15 = 0;\n        }" ({ "{") (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" (identifier "uVar15") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }" (else "else") (compound_statement "{\nLAB_00064484:\n          uVar15 = 0;\n          iVar21 = iVar31;\n          do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);\n        }" ({ "{") (labeled_statement "LAB_00064484:\n          uVar15 = 0;" (statement_identifier "LAB_00064484") (: ":") (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" (identifier "uVar15") (= "=") (number_literal "0")) (; ";"))) (expression_statement "iVar21 = iVar31;" (assignment_expression "iVar21 = iVar31" (identifier "iVar21") (= "=") (identifier "iVar31")) (; ";")) (do_statement "do {\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          } while (iVar21 != -1);" (do "do") (compound_statement "{\n            uVar13 = *(uint *)(iVar28 + iVar21 * 4);\n            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);\n            uVar30 = uVar14 + uVar13;\n            iVar23 = uVar30 + uVar15;\n            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n            *(int *)(iVar28 + iVar21 * 4) = iVar23;\n            iVar21 = iVar21 + -1;\n          }" ({ "{") (expression_statement "uVar13 = *(uint *)(iVar28 + iVar21 * 4);" (assignment_expression "uVar13 = *(uint *)(iVar28 + iVar21 * 4)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)(iVar28 + iVar21 * 4)" (* "*") (cast_expression "(uint *)(iVar28 + iVar21 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar28 + iVar21 * 4)" (( "(") (binary_expression "iVar28 + iVar21 * 4" (identifier "iVar28") (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);" (assignment_expression "uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4)" (identifier "uVar14") (= "=") (pointer_expression "*(uint *)((int)pvVar16 + iVar21 * 4)" (* "*") (cast_expression "(uint *)((int)pvVar16 + iVar21 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar16 + iVar21 * 4)" (( "(") (binary_expression "(int)pvVar16 + iVar21 * 4" (cast_expression "(int)pvVar16" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar16")) (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar30 = uVar14 + uVar13;" (assignment_expression "uVar30 = uVar14 + uVar13" (identifier "uVar30") (= "=") (binary_expression "uVar14 + uVar13" (identifier "uVar14") (+ "+") (identifier "uVar13"))) (; ";")) (expression_statement "iVar23 = uVar30 + uVar15;" (assignment_expression "iVar23 = uVar30 + uVar15" (identifier "iVar23") (= "=") (binary_expression "uVar30 + uVar15" (identifier "uVar30") (+ "+") (identifier "uVar15"))) (; ";")) (expression_statement "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);" (assignment_expression "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (identifier "uVar15") (= "=") (binary_expression "(uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (cast_expression "(uint)CARRY4(uVar14,uVar13)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar14,uVar13)" (identifier "CARRY4") (argument_list "(uVar14,uVar13)" (( "(") (identifier "uVar14") (, ",") (identifier "uVar13") () ")")))) (+ "+") (cast_expression "(uint)CARRY4(uVar30,uVar15)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar30,uVar15)" (identifier "CARRY4") (argument_list "(uVar30,uVar15)" (( "(") (identifier "uVar30") (, ",") (identifier "uVar15") () ")")))))) (; ";")) (expression_statement "*(int *)(iVar28 + iVar21 * 4) = iVar23;" (assignment_expression "*(int *)(iVar28 + iVar21 * 4) = iVar23" (pointer_expression "*(int *)(iVar28 + iVar21 * 4)" (* "*") (cast_expression "(int *)(iVar28 + iVar21 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar28 + iVar21 * 4)" (( "(") (binary_expression "iVar28 + iVar21 * 4" (identifier "iVar28") (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "iVar23")) (; ";")) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" (identifier "iVar21") (= "=") (binary_expression "iVar21 + -1" (identifier "iVar21") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar21 != -1)" (( "(") (binary_expression "iVar21 != -1" (identifier "iVar21") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (} "}")))) (if_statement "if (0 < (int)uVar7) goto LAB_000644bf;" (if "if") (parenthesized_expression "(0 < (int)uVar7)" (( "(") (binary_expression "0 < (int)uVar7" (number_literal "0") (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (goto_statement "goto LAB_000644bf;" (goto "goto") (statement_identifier "LAB_000644bf") (; ";"))) (labeled_statement "LAB_00064525:\n        iVar21 = iVar1;" (statement_identifier "LAB_00064525") (: ":") (expression_statement "iVar21 = iVar1;" (assignment_expression "iVar21 = iVar1" (identifier "iVar21") (= "=") (identifier "iVar1")) (; ";"))) (expression_statement "uVar15 = uVar5;" (assignment_expression "uVar15 = uVar5" (identifier "uVar15") (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (-1 < iVar1) {\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }" (if "if") (parenthesized_expression "(-1 < iVar1)" (( "(") (binary_expression "-1 < iVar1" (number_literal "-1") (< "<") (identifier "iVar1")) () ")")) (compound_statement "{\n          do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);\n        }" ({ "{") (do_statement "do {\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          } while (iVar21 != -1);" (do "do") (compound_statement "{\n            uVar13 = puVar6[iVar21];\n            uVar30 = uVar15 + uVar13;\n            uVar14 = puVar11[iVar21];\n            puVar6[iVar21] = ~uVar14 + uVar30;\n            iVar21 = iVar21 + -1;\n            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);\n          }" ({ "{") (expression_statement "uVar13 = puVar6[iVar21];" (assignment_expression "uVar13 = puVar6[iVar21]" (identifier "uVar13") (= "=") (subscript_expression "puVar6[iVar21]" (identifier "puVar6") ([ "[") (identifier "iVar21") (] "]"))) (; ";")) (expression_statement "uVar30 = uVar15 + uVar13;" (assignment_expression "uVar30 = uVar15 + uVar13" (identifier "uVar30") (= "=") (binary_expression "uVar15 + uVar13" (identifier "uVar15") (+ "+") (identifier "uVar13"))) (; ";")) (expression_statement "uVar14 = puVar11[iVar21];" (assignment_expression "uVar14 = puVar11[iVar21]" (identifier "uVar14") (= "=") (subscript_expression "puVar11[iVar21]" (identifier "puVar11") ([ "[") (identifier "iVar21") (] "]"))) (; ";")) (expression_statement "puVar6[iVar21] = ~uVar14 + uVar30;" (assignment_expression "puVar6[iVar21] = ~uVar14 + uVar30" (subscript_expression "puVar6[iVar21]" (identifier "puVar6") ([ "[") (identifier "iVar21") (] "]")) (= "=") (binary_expression "~uVar14 + uVar30" (unary_expression "~uVar14" (~ "~") (identifier "uVar14")) (+ "+") (identifier "uVar30"))) (; ";")) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" (identifier "iVar21") (= "=") (binary_expression "iVar21 + -1" (identifier "iVar21") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);" (assignment_expression "uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30)" (identifier "uVar15") (= "=") (binary_expression "(uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30)" (cast_expression "(uint)CARRY4(uVar15,uVar13)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar15,uVar13)" (identifier "CARRY4") (argument_list "(uVar15,uVar13)" (( "(") (identifier "uVar15") (, ",") (identifier "uVar13") () ")")))) (+ "+") (cast_expression "(uint)CARRY4(~uVar14,uVar30)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(~uVar14,uVar30)" (identifier "CARRY4") (argument_list "(~uVar14,uVar30)" (( "(") (unary_expression "~uVar14" (~ "~") (identifier "uVar14")) (, ",") (identifier "uVar30") () ")")))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar21 != -1)" (( "(") (binary_expression "iVar21 != -1" (identifier "iVar21") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }" (else "else") (compound_statement "{\n        FUN_0005f530(iVar17,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        FUN_0005f970(iVar25,pvVar3);\n        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);\n        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);\n        if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        uVar15 = 0;\n        iVar21 = iVar25 + -1;\n        do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);\n        FUN_0005f530(uVar7,pvVar2);\n        if (-1 < iVar31) goto LAB_00064484;\n        uVar15 = 0;\nLAB_000644bf:\n        iVar21 = 0;\n        do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);\n        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;\n        uVar15 = *puVar6;\n        uVar13 = *puVar11;\n        uVar14 = 0;\n        if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }\n        if (uVar13 < uVar15) goto LAB_00064525;\n      }" ({ "{") (expression_statement "FUN_0005f530(iVar17,pvVar3);" (call_expression "FUN_0005f530(iVar17,pvVar3)" (identifier "FUN_0005f530") (argument_list "(iVar17,pvVar3)" (( "(") (identifier "iVar17") (, ",") (identifier "pvVar3") () ")"))) (; ";")) (expression_statement "FUN_0005f970(iVar25,pvVar3);" (call_expression "FUN_0005f970(iVar25,pvVar3)" (identifier "FUN_0005f970") (argument_list "(iVar25,pvVar3)" (( "(") (identifier "iVar25") (, ",") (identifier "pvVar3") () ")"))) (; ";")) (expression_statement "FUN_0005f970(iVar25,pvVar3);" (call_expression "FUN_0005f970(iVar25,pvVar3)" (identifier "FUN_0005f970") (argument_list "(iVar25,pvVar3)" (( "(") (identifier "iVar25") (, ",") (identifier "pvVar3") () ")"))) (; ";")) (expression_statement "puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);" (assignment_expression "puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4)" (identifier "puVar19") (= "=") (cast_expression "(undefined4 *)((int)pvVar2 + iVar24 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar2 + iVar24 * 4)" (( "(") (binary_expression "(int)pvVar2 + iVar24 * 4" (cast_expression "(int)pvVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar2")) (+ "+") (binary_expression "iVar24 * 4" (identifier "iVar24") (* "*") (number_literal "4"))) () ")")))) (; ";")) (expression_statement "puVar26 = (undefined4 *)((int)__s + iVar25 * 4);" (assignment_expression "puVar26 = (undefined4 *)((int)__s + iVar25 * 4)" (identifier "puVar26") (= "=") (cast_expression "(undefined4 *)((int)__s + iVar25 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)__s + iVar25 * 4)" (( "(") (binary_expression "(int)__s + iVar25 * 4" (cast_expression "(int)__s" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__s")) (+ "+") (binary_expression "iVar25 * 4" (identifier "iVar25") (* "*") (number_literal "4"))) () ")")))) (; ";")) (if_statement "if (0 < iVar17) {\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }" (if "if") (parenthesized_expression "(0 < iVar17)" (( "(") (binary_expression "0 < iVar17" (number_literal "0") (< "<") (identifier "iVar17")) () ")")) (compound_statement "{\n          do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);\n        }" ({ "{") (do_statement "do {\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);" (do "do") (compound_statement "{\n            puVar20 = puVar19 + 1;\n            *puVar26 = *puVar19;\n            puVar19 = puVar20;\n            puVar26 = puVar26 + 1;\n          }" ({ "{") (expression_statement "puVar20 = puVar19 + 1;" (assignment_expression "puVar20 = puVar19 + 1" (identifier "puVar20") (= "=") (binary_expression "puVar19 + 1" (identifier "puVar19") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*puVar26 = *puVar19;" (assignment_expression "*puVar26 = *puVar19" (pointer_expression "*puVar26" (* "*") (identifier "puVar26")) (= "=") (pointer_expression "*puVar19" (* "*") (identifier "puVar19"))) (; ";")) (expression_statement "puVar19 = puVar20;" (assignment_expression "puVar19 = puVar20" (identifier "puVar19") (= "=") (identifier "puVar20")) (; ";")) (expression_statement "puVar26 = puVar26 + 1;" (assignment_expression "puVar26 = puVar26 + 1" (identifier "puVar26") (= "=") (binary_expression "puVar26 + 1" (identifier "puVar26") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20)" (( "(") (binary_expression "(undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20" (cast_expression "(undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar2 + (iVar24 + iVar17) * 4)" (( "(") (binary_expression "(int)pvVar2 + (iVar24 + iVar17) * 4" (cast_expression "(int)pvVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar2")) (+ "+") (binary_expression "(iVar24 + iVar17) * 4" (parenthesized_expression "(iVar24 + iVar17)" (( "(") (binary_expression "iVar24 + iVar17" (identifier "iVar24") (+ "+") (identifier "iVar17")) () ")")) (* "*") (number_literal "4"))) () ")"))) (!= "!=") (identifier "puVar20")) () ")")) (; ";")) (} "}"))) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" (identifier "uVar15") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar21 = iVar25 + -1;" (assignment_expression "iVar21 = iVar25 + -1" (identifier "iVar21") (= "=") (binary_expression "iVar25 + -1" (identifier "iVar25") (+ "+") (number_literal "-1"))) (; ";")) (do_statement "do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);" (do "do") (compound_statement "{\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        }" ({ "{") (expression_statement "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);" (assignment_expression "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4)" (* "*") (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar2 + iVar21 * 4)" (( "(") (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar2")) (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);" (assignment_expression "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" (identifier "uVar14") (= "=") (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" (* "*") (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar2 + iVar21 * 4 + iVar25 * 4)" (( "(") (binary_expression "(int)pvVar2 + iVar21 * 4 + iVar25 * 4" (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar2")) (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) (+ "+") (binary_expression "iVar25 * 4" (identifier "iVar25") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar30 = uVar14 + uVar13;" (assignment_expression "uVar30 = uVar14 + uVar13" (identifier "uVar30") (= "=") (binary_expression "uVar14 + uVar13" (identifier "uVar14") (+ "+") (identifier "uVar13"))) (; ";")) (expression_statement "iVar23 = uVar30 + uVar15;" (assignment_expression "iVar23 = uVar30 + uVar15" (identifier "iVar23") (= "=") (binary_expression "uVar30 + uVar15" (identifier "uVar30") (+ "+") (identifier "uVar15"))) (; ";")) (expression_statement "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);" (assignment_expression "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (identifier "uVar15") (= "=") (binary_expression "(uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (cast_expression "(uint)CARRY4(uVar14,uVar13)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar14,uVar13)" (identifier "CARRY4") (argument_list "(uVar14,uVar13)" (( "(") (identifier "uVar14") (, ",") (identifier "uVar13") () ")")))) (+ "+") (cast_expression "(uint)CARRY4(uVar30,uVar15)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar30,uVar15)" (identifier "CARRY4") (argument_list "(uVar30,uVar15)" (( "(") (identifier "uVar30") (, ",") (identifier "uVar15") () ")")))))) (; ";")) (expression_statement "*(int *)((int)pvVar2 + iVar21 * 4) = iVar23;" (assignment_expression "*(int *)((int)pvVar2 + iVar21 * 4) = iVar23" (pointer_expression "*(int *)((int)pvVar2 + iVar21 * 4)" (* "*") (cast_expression "(int *)((int)pvVar2 + iVar21 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar2 + iVar21 * 4)" (( "(") (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar2")) (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "iVar23")) (; ";")) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" (identifier "iVar21") (= "=") (binary_expression "iVar21 + -1" (identifier "iVar21") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar21 != -1)" (( "(") (binary_expression "iVar21 != -1" (identifier "iVar21") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" (identifier "uVar15") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar21 = iVar25 + -1;" (assignment_expression "iVar21 = iVar25 + -1" (identifier "iVar21") (= "=") (binary_expression "iVar25 + -1" (identifier "iVar25") (+ "+") (number_literal "-1"))) (; ";")) (do_statement "do {\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        } while (iVar21 != -1);" (do "do") (compound_statement "{\n          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);\n          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);\n          uVar30 = uVar14 + uVar13;\n          iVar23 = uVar30 + uVar15;\n          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);\n          *(int *)((int)__s + iVar21 * 4) = iVar23;\n          iVar21 = iVar21 + -1;\n        }" ({ "{") (expression_statement "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);" (assignment_expression "uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" (* "*") (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4)" (( "(") (binary_expression "(int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4" (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar2")) (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) (+ "+") (binary_expression "(iVar24 - iVar25) * 4" (parenthesized_expression "(iVar24 - iVar25)" (( "(") (binary_expression "iVar24 - iVar25" (identifier "iVar24") (- "-") (identifier "iVar25")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);" (assignment_expression "uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4)" (identifier "uVar14") (= "=") (pointer_expression "*(uint *)((int)pvVar2 + iVar21 * 4)" (* "*") (cast_expression "(uint *)((int)pvVar2 + iVar21 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)pvVar2 + iVar21 * 4)" (( "(") (binary_expression "(int)pvVar2 + iVar21 * 4" (cast_expression "(int)pvVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pvVar2")) (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar30 = uVar14 + uVar13;" (assignment_expression "uVar30 = uVar14 + uVar13" (identifier "uVar30") (= "=") (binary_expression "uVar14 + uVar13" (identifier "uVar14") (+ "+") (identifier "uVar13"))) (; ";")) (expression_statement "iVar23 = uVar30 + uVar15;" (assignment_expression "iVar23 = uVar30 + uVar15" (identifier "iVar23") (= "=") (binary_expression "uVar30 + uVar15" (identifier "uVar30") (+ "+") (identifier "uVar15"))) (; ";")) (expression_statement "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);" (assignment_expression "uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (identifier "uVar15") (= "=") (binary_expression "(uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15)" (cast_expression "(uint)CARRY4(uVar14,uVar13)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar14,uVar13)" (identifier "CARRY4") (argument_list "(uVar14,uVar13)" (( "(") (identifier "uVar14") (, ",") (identifier "uVar13") () ")")))) (+ "+") (cast_expression "(uint)CARRY4(uVar30,uVar15)" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CARRY4(uVar30,uVar15)" (identifier "CARRY4") (argument_list "(uVar30,uVar15)" (( "(") (identifier "uVar30") (, ",") (identifier "uVar15") () ")")))))) (; ";")) (expression_statement "*(int *)((int)__s + iVar21 * 4) = iVar23;" (assignment_expression "*(int *)((int)__s + iVar21 * 4) = iVar23" (pointer_expression "*(int *)((int)__s + iVar21 * 4)" (* "*") (cast_expression "(int *)((int)__s + iVar21 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((int)__s + iVar21 * 4)" (( "(") (binary_expression "(int)__s + iVar21 * 4" (cast_expression "(int)__s" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "__s")) (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "iVar23")) (; ";")) (expression_statement "iVar21 = iVar21 + -1;" (assignment_expression "iVar21 = iVar21 + -1" (identifier "iVar21") (= "=") (binary_expression "iVar21 + -1" (identifier "iVar21") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar21 != -1)" (( "(") (binary_expression "iVar21 != -1" (identifier "iVar21") (!= "!=") (number_literal "-1")) () ")")) (; ";")) (expression_statement "FUN_0005f530(uVar7,pvVar2);" (call_expression "FUN_0005f530(uVar7,pvVar2)" (identifier "FUN_0005f530") (argument_list "(uVar7,pvVar2)" (( "(") (identifier "uVar7") (, ",") (identifier "pvVar2") () ")"))) (; ";")) (if_statement "if (-1 < iVar31) goto LAB_00064484;" (if "if") (parenthesized_expression "(-1 < iVar31)" (( "(") (binary_expression "-1 < iVar31" (number_literal "-1") (< "<") (identifier "iVar31")) () ")")) (goto_statement "goto LAB_00064484;" (goto "goto") (statement_identifier "LAB_00064484") (; ";"))) (expression_statement "uVar15 = 0;" (assignment_expression "uVar15 = 0" (identifier "uVar15") (= "=") (number_literal "0")) (; ";")) (labeled_statement "LAB_000644bf:\n        iVar21 = 0;" (statement_identifier "LAB_000644bf") (: ":") (expression_statement "iVar21 = 0;" (assignment_expression "iVar21 = 0" (identifier "iVar21") (= "=") (number_literal "0")) (; ";"))) (do_statement "do {\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        } while (iVar21 < (int)uVar7);" (do "do") (compound_statement "{\n          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);\n          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;\n          iVar21 = iVar21 + 1;\n        }" ({ "{") (expression_statement "puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);" (assignment_expression "puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4)" (subscript_expression "puVar6[iVar21]" (identifier "puVar6") ([ "[") (identifier "iVar21") (] "]")) (= "=") (pointer_expression "*(uint *)(iVar28 + iVar21 * 4)" (* "*") (cast_expression "(uint *)(iVar28 + iVar21 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar28 + iVar21 * 4)" (( "(") (binary_expression "iVar28 + iVar21 * 4" (identifier "iVar28") (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(iVar28 + iVar21 * 4) = 0;" (assignment_expression "*(undefined4 *)(iVar28 + iVar21 * 4) = 0" (pointer_expression "*(undefined4 *)(iVar28 + iVar21 * 4)" (* "*") (cast_expression "(undefined4 *)(iVar28 + iVar21 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar28 + iVar21 * 4)" (( "(") (binary_expression "iVar28 + iVar21 * 4" (identifier "iVar28") (+ "+") (binary_expression "iVar21 * 4" (identifier "iVar21") (* "*") (number_literal "4"))) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar21 = iVar21 + 1;" (assignment_expression "iVar21 = iVar21 + 1" (identifier "iVar21") (= "=") (binary_expression "iVar21 + 1" (identifier "iVar21") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar21 < (int)uVar7)" (( "(") (binary_expression "iVar21 < (int)uVar7" (identifier "iVar21") (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (; ";")) (if_statement "if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;" (if "if") (parenthesized_expression "((uVar15 != 0) || ((int)uVar7 < 1))" (( "(") (binary_expression "(uVar15 != 0) || ((int)uVar7 < 1)" (parenthesized_expression "(uVar15 != 0)" (( "(") (binary_expression "uVar15 != 0" (identifier "uVar15") (!= "!=") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((int)uVar7 < 1)" (( "(") (binary_expression "(int)uVar7 < 1" (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7")) (< "<") (number_literal "1")) () ")"))) () ")")) (goto_statement "goto LAB_00064525;" (goto "goto") (statement_identifier "LAB_00064525") (; ";"))) (expression_statement "uVar15 = *puVar6;" (assignment_expression "uVar15 = *puVar6" (identifier "uVar15") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "uVar13 = *puVar11;" (assignment_expression "uVar13 = *puVar11" (identifier "uVar13") (= "=") (pointer_expression "*puVar11" (* "*") (identifier "puVar11"))) (; ";")) (expression_statement "uVar14 = 0;" (assignment_expression "uVar14 = 0" (identifier "uVar14") (= "=") (number_literal "0")) (; ";")) (if_statement "if (uVar13 == uVar15) {\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }" (if "if") (parenthesized_expression "(uVar13 == uVar15)" (( "(") (binary_expression "uVar13 == uVar15" (identifier "uVar13") (== "==") (identifier "uVar15")) () ")")) (compound_statement "{\n          do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);\n        }" ({ "{") (do_statement "do {\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          } while (uVar15 == uVar13);" (do "do") (compound_statement "{\n            uVar14 = uVar14 + 1;\n            if (uVar7 == uVar14) goto LAB_00064525;\n            uVar15 = puVar6[uVar14];\n            uVar13 = puVar11[uVar14];\n          }" ({ "{") (expression_statement "uVar14 = uVar14 + 1;" (assignment_expression "uVar14 = uVar14 + 1" (identifier "uVar14") (= "=") (binary_expression "uVar14 + 1" (identifier "uVar14") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar7 == uVar14) goto LAB_00064525;" (if "if") (parenthesized_expression "(uVar7 == uVar14)" (( "(") (binary_expression "uVar7 == uVar14" (identifier "uVar7") (== "==") (identifier "uVar14")) () ")")) (goto_statement "goto LAB_00064525;" (goto "goto") (statement_identifier "LAB_00064525") (; ";"))) (expression_statement "uVar15 = puVar6[uVar14];" (assignment_expression "uVar15 = puVar6[uVar14]" (identifier "uVar15") (= "=") (subscript_expression "puVar6[uVar14]" (identifier "puVar6") ([ "[") (identifier "uVar14") (] "]"))) (; ";")) (expression_statement "uVar13 = puVar11[uVar14];" (assignment_expression "uVar13 = puVar11[uVar14]" (identifier "uVar13") (= "=") (subscript_expression "puVar11[uVar14]" (identifier "puVar11") ([ "[") (identifier "uVar14") (] "]"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar15 == uVar13)" (( "(") (binary_expression "uVar15 == uVar13" (identifier "uVar15") (== "==") (identifier "uVar13")) () ")")) (; ";")) (} "}"))) (if_statement "if (uVar13 < uVar15) goto LAB_00064525;" (if "if") (parenthesized_expression "(uVar13 < uVar15)" (( "(") (binary_expression "uVar13 < uVar15" (identifier "uVar13") (< "<") (identifier "uVar15")) () ")")) (goto_statement "goto LAB_00064525;" (goto "goto") (statement_identifier "LAB_00064525") (; ";"))) (} "}")))) (expression_statement "iVar21 = local_88;" (assignment_expression "iVar21 = local_88" (identifier "iVar21") (= "=") (identifier "local_88")) (; ";")) (if_statement "if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }" (if "if") (parenthesized_expression "((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0)" (( "(") (binary_expression "(param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0" (parenthesized_expression "(param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f))" (( "(") (binary_expression "param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)" (subscript_expression "param_2[*param_2 - local_78]" (identifier "param_2") ([ "[") (binary_expression "*param_2 - local_78" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (- "-") (identifier "local_78")) (] "]")) (& "&") (binary_expression "1 << ((byte)local_94 & 0x1f)" (number_literal "1") (<< "<<") (parenthesized_expression "((byte)local_94 & 0x1f)" (( "(") (binary_expression "(byte)local_94 & 0x1f" (cast_expression "(byte)local_94" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "local_94")) (& "&") (number_literal "0x1f")) () ")")))) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_0005f530(uVar7,__s);\n        FUN_0005fba0(__s,uVar7);\n        iVar21 = iVar28;\n        iVar28 = local_88;\n      }" ({ "{") (expression_statement "FUN_0005f530(uVar7,__s);" (call_expression "FUN_0005f530(uVar7,__s)" (identifier "FUN_0005f530") (argument_list "(uVar7,__s)" (( "(") (identifier "uVar7") (, ",") (identifier "__s") () ")"))) (; ";")) (expression_statement "FUN_0005fba0(__s,uVar7);" (call_expression "FUN_0005fba0(__s,uVar7)" (identifier "FUN_0005fba0") (argument_list "(__s,uVar7)" (( "(") (identifier "__s") (, ",") (identifier "uVar7") () ")"))) (; ";")) (expression_statement "iVar21 = iVar28;" (assignment_expression "iVar21 = iVar28" (identifier "iVar21") (= "=") (identifier "iVar28")) (; ";")) (expression_statement "iVar28 = local_88;" (assignment_expression "iVar28 = local_88" (identifier "iVar28") (= "=") (identifier "local_88")) (; ";")) (} "}"))) (expression_statement "local_88 = iVar28;" (assignment_expression "local_88 = iVar28" (identifier "local_88") (= "=") (identifier "iVar28")) (; ";")) (expression_statement "local_94 = local_94 + -1;" (assignment_expression "local_94 = local_94 + -1" (identifier "local_94") (= "=") (binary_expression "local_94 + -1" (identifier "local_94") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "iVar28 = iVar21;" (assignment_expression "iVar28 = iVar21" (identifier "iVar28") (= "=") (identifier "iVar21")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_94 != -1)" (( "(") (binary_expression "local_94 != -1" (identifier "local_94") (!= "!=") (number_literal "-1")) () ")")) (; ";"))) (} "}"))) (labeled_statement "LAB_000645c6:\n  FUN_0005fba0(__s,uVar7);" (statement_identifier "LAB_000645c6") (: ":") (expression_statement "FUN_0005fba0(__s,uVar7);" (call_expression "FUN_0005fba0(__s,uVar7)" (identifier "FUN_0005fba0") (argument_list "(__s,uVar7)" (( "(") (identifier "__s") (, ",") (identifier "uVar7") () ")"))) (; ";"))) (expression_statement "uVar5 = *param_3;" (assignment_expression "uVar5 = *param_3" (identifier "uVar5") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if (uVar5 < 0x3ffffff) {\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }" (if "if") (parenthesized_expression "(uVar5 < 0x3ffffff)" (( "(") (binary_expression "uVar5 < 0x3ffffff" (identifier "uVar5") (< "<") (number_literal "0x3ffffff")) () ")")) (compound_statement "{\n    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);\n    memset(puVar6,0,(uVar5 + 1) * 4);\n    *puVar6 = uVar5;\n    if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }\n    if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }\n    FUN_00032c20(__s,local_20 << 2);\n    FUN_00032b40(__s);\n    FUN_00032c20(local_88,uVar7 * 8);\n    FUN_00032b40(local_88);\n    FUN_00032c20(iVar21,uVar7 * 8);\n    FUN_00032b40(iVar21);\n    iVar1 = uVar7 * 4;\n    FUN_00032c20(local_60,iVar1);\n    FUN_00032b40(local_60);\n    FUN_00032c20(puVar11,iVar1);\n    FUN_00032b40(puVar11);\n    FUN_00032c20(local_54,iVar1);\n    FUN_00032b40(local_54);\n    return puVar6;\n  }" ({ "{") (expression_statement "puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);" (assignment_expression "puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4)" (identifier "puVar6") (= "=") (cast_expression "(uint *)FUN_000329a0(uVar5 + 1,4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000329a0(uVar5 + 1,4)" (identifier "FUN_000329a0") (argument_list "(uVar5 + 1,4)" (( "(") (binary_expression "uVar5 + 1" (identifier "uVar5") (+ "+") (number_literal "1")) (, ",") (number_literal "4") () ")"))))) (; ";")) (expression_statement "memset(puVar6,0,(uVar5 + 1) * 4);" (call_expression "memset(puVar6,0,(uVar5 + 1) * 4)" (identifier "memset") (argument_list "(puVar6,0,(uVar5 + 1) * 4)" (( "(") (identifier "puVar6") (, ",") (number_literal "0") (, ",") (binary_expression "(uVar5 + 1) * 4" (parenthesized_expression "(uVar5 + 1)" (( "(") (binary_expression "uVar5 + 1" (identifier "uVar5") (+ "+") (number_literal "1")) () ")")) (* "*") (number_literal "4")) () ")"))) (; ";")) (expression_statement "*puVar6 = uVar5;" (assignment_expression "*puVar6 = uVar5" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (0 < (int)uVar7) {\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }" (if "if") (parenthesized_expression "(0 < (int)uVar7)" (( "(") (binary_expression "0 < (int)uVar7" (number_literal "0") (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (compound_statement "{\n      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);\n      uVar5 = 1;\n      if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }\n      uVar5 = *puVar6;\n    }" ({ "{") (expression_statement "puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);" (assignment_expression "puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4)" (subscript_expression "puVar6[uVar5]" (identifier "puVar6") ([ "[") (identifier "uVar5") (] "]")) (= "=") (pointer_expression "*(uint *)(local_88 + uVar7 * 4)" (* "*") (cast_expression "(uint *)(local_88 + uVar7 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_88 + uVar7 * 4)" (( "(") (binary_expression "local_88 + uVar7 * 4" (identifier "local_88") (+ "+") (binary_expression "uVar7 * 4" (identifier "uVar7") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "uVar5 = 1;" (assignment_expression "uVar5 = 1" (identifier "uVar5") (= "=") (number_literal "1")) (; ";")) (if_statement "if (uVar7 != 1) {\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }" (if "if") (parenthesized_expression "(uVar7 != 1)" (( "(") (binary_expression "uVar7 != 1" (identifier "uVar7") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n        do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);\n      }" ({ "{") (do_statement "do {\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        } while (uVar7 != uVar5);" (do "do") (compound_statement "{\n          iVar1 = uVar5 * 4;\n          iVar24 = *puVar6 - uVar5;\n          uVar5 = uVar5 + 1;\n          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);\n        }" ({ "{") (expression_statement "iVar1 = uVar5 * 4;" (assignment_expression "iVar1 = uVar5 * 4" (identifier "iVar1") (= "=") (binary_expression "uVar5 * 4" (identifier "uVar5") (* "*") (number_literal "4"))) (; ";")) (expression_statement "iVar24 = *puVar6 - uVar5;" (assignment_expression "iVar24 = *puVar6 - uVar5" (identifier "iVar24") (= "=") (binary_expression "*puVar6 - uVar5" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (- "-") (identifier "uVar5"))) (; ";")) (expression_statement "uVar5 = uVar5 + 1;" (assignment_expression "uVar5 = uVar5 + 1" (identifier "uVar5") (= "=") (binary_expression "uVar5 + 1" (identifier "uVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);" (assignment_expression "puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1)" (subscript_expression "puVar6[iVar24]" (identifier "puVar6") ([ "[") (identifier "iVar24") (] "]")) (= "=") (pointer_expression "*(uint *)(local_88 + uVar7 * 4 + iVar1)" (* "*") (cast_expression "(uint *)(local_88 + uVar7 * 4 + iVar1)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_88 + uVar7 * 4 + iVar1)" (( "(") (binary_expression "local_88 + uVar7 * 4 + iVar1" (binary_expression "local_88 + uVar7 * 4" (identifier "local_88") (+ "+") (binary_expression "uVar7 * 4" (identifier "uVar7") (* "*") (number_literal "4"))) (+ "+") (identifier "iVar1")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar7 != uVar5)" (( "(") (binary_expression "uVar7 != uVar5" (identifier "uVar7") (!= "!=") (identifier "uVar5")) () ")")) (; ";")) (} "}"))) (expression_statement "uVar5 = *puVar6;" (assignment_expression "uVar5 = *puVar6" (identifier "uVar5") (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (} "}"))) (if_statement "if (1 < uVar5) {\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }" (if "if") (parenthesized_expression "(1 < uVar5)" (( "(") (binary_expression "1 < uVar5" (number_literal "1") (< "<") (identifier "uVar5")) () ")")) (compound_statement "{\n      uVar15 = puVar6[uVar5];\n      while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }\n    }" ({ "{") (expression_statement "uVar15 = puVar6[uVar5];" (assignment_expression "uVar15 = puVar6[uVar5]" (identifier "uVar15") (= "=") (subscript_expression "puVar6[uVar5]" (identifier "puVar6") ([ "[") (identifier "uVar5") (] "]"))) (; ";")) (while_statement "while (uVar15 == 0) {\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }" (while "while") (parenthesized_expression "(uVar15 == 0)" (( "(") (binary_expression "uVar15 == 0" (identifier "uVar15") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar5 = uVar5 - 1;\n        *puVar6 = uVar5;\n        if (uVar5 == 1) break;\n        uVar15 = puVar6[uVar5];\n      }" ({ "{") (expression_statement "uVar5 = uVar5 - 1;" (assignment_expression "uVar5 = uVar5 - 1" (identifier "uVar5") (= "=") (binary_expression "uVar5 - 1" (identifier "uVar5") (- "-") (number_literal "1"))) (; ";")) (expression_statement "*puVar6 = uVar5;" (assignment_expression "*puVar6 = uVar5" (pointer_expression "*puVar6" (* "*") (identifier "puVar6")) (= "=") (identifier "uVar5")) (; ";")) (if_statement "if (uVar5 == 1) break;" (if "if") (parenthesized_expression "(uVar5 == 1)" (( "(") (binary_expression "uVar5 == 1" (identifier "uVar5") (== "==") (number_literal "1")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar15 = puVar6[uVar5];" (assignment_expression "uVar15 = puVar6[uVar5]" (identifier "uVar15") (= "=") (subscript_expression "puVar6[uVar5]" (identifier "puVar6") ([ "[") (identifier "uVar5") (] "]"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "FUN_00032c20(__s,local_20 << 2);" (call_expression "FUN_00032c20(__s,local_20 << 2)" (identifier "FUN_00032c20") (argument_list "(__s,local_20 << 2)" (( "(") (identifier "__s") (, ",") (binary_expression "local_20 << 2" (identifier "local_20") (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(__s);" (call_expression "FUN_00032b40(__s)" (identifier "FUN_00032b40") (argument_list "(__s)" (( "(") (identifier "__s") () ")"))) (; ";")) (expression_statement "FUN_00032c20(local_88,uVar7 * 8);" (call_expression "FUN_00032c20(local_88,uVar7 * 8)" (identifier "FUN_00032c20") (argument_list "(local_88,uVar7 * 8)" (( "(") (identifier "local_88") (, ",") (binary_expression "uVar7 * 8" (identifier "uVar7") (* "*") (number_literal "8")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(local_88);" (call_expression "FUN_00032b40(local_88)" (identifier "FUN_00032b40") (argument_list "(local_88)" (( "(") (identifier "local_88") () ")"))) (; ";")) (expression_statement "FUN_00032c20(iVar21,uVar7 * 8);" (call_expression "FUN_00032c20(iVar21,uVar7 * 8)" (identifier "FUN_00032c20") (argument_list "(iVar21,uVar7 * 8)" (( "(") (identifier "iVar21") (, ",") (binary_expression "uVar7 * 8" (identifier "uVar7") (* "*") (number_literal "8")) () ")"))) (; ";")) (expression_statement "FUN_00032b40(iVar21);" (call_expression "FUN_00032b40(iVar21)" (identifier "FUN_00032b40") (argument_list "(iVar21)" (( "(") (identifier "iVar21") () ")"))) (; ";")) (expression_statement "iVar1 = uVar7 * 4;" (assignment_expression "iVar1 = uVar7 * 4" (identifier "iVar1") (= "=") (binary_expression "uVar7 * 4" (identifier "uVar7") (* "*") (number_literal "4"))) (; ";")) (expression_statement "FUN_00032c20(local_60,iVar1);" (call_expression "FUN_00032c20(local_60,iVar1)" (identifier "FUN_00032c20") (argument_list "(local_60,iVar1)" (( "(") (identifier "local_60") (, ",") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "FUN_00032b40(local_60);" (call_expression "FUN_00032b40(local_60)" (identifier "FUN_00032b40") (argument_list "(local_60)" (( "(") (identifier "local_60") () ")"))) (; ";")) (expression_statement "FUN_00032c20(puVar11,iVar1);" (call_expression "FUN_00032c20(puVar11,iVar1)" (identifier "FUN_00032c20") (argument_list "(puVar11,iVar1)" (( "(") (identifier "puVar11") (, ",") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "FUN_00032b40(puVar11);" (call_expression "FUN_00032b40(puVar11)" (identifier "FUN_00032b40") (argument_list "(puVar11)" (( "(") (identifier "puVar11") () ")"))) (; ";")) (expression_statement "FUN_00032c20(local_54,iVar1);" (call_expression "FUN_00032c20(local_54,iVar1)" (identifier "FUN_00032c20") (argument_list "(local_54,iVar1)" (( "(") (identifier "local_54") (, ",") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "FUN_00032b40(local_54);" (call_expression "FUN_00032b40(local_54)" (identifier "FUN_00032b40") (argument_list "(local_54)" (( "(") (identifier "local_54") () ")"))) (; ";")) (return_statement "return puVar6;" (return "return") (identifier "puVar6") (; ";")) (} "}"))) (labeled_statement "LAB_00064ab0:\n                    \n  FUN_0005f500();" (statement_identifier "LAB_00064ab0") (: ":") (expression_statement "FUN_0005f500();" (call_expression "FUN_0005f500()" (identifier "FUN_0005f500") (argument_list "()" (( "(") () ")"))) (; ";"))) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention */

type_1 function_1(type_1 base_in,type_1 var_28,type_1 mod)

{
  int var_16;
  type_2 *__n;
  size_t n;
  type_2 *b;
  type_2 *var_21;
  type_3 lVar2;
  type_4 var_2;
  type_1 pBVar4;
  type_4 var_4;
  type_1 modulus;
  type_1 var_11;
  type_1 b_01;
  type_2 *var_15;
  type_2 *var_17;
  type_2 *var_18;
  type_2 *var_35;
  type_2 *var_37;
  type_2 *a_00;
  type_2 *var_38;
  type_2 *var_40;
  type_4 *var_32;
  int var_22;
  type_2 *var_39;
  type_4 var_23;
  type_2 var_8;
  type_4 var_44;
  int var_29;
  int var_42;
  type_2 var_45;
  type_2 *var_34;
  type_2 *var_20;
  type_4 var_24;
  int var_41;
  bool bVar25;
  int in_stack_ffffff40;
  type_2 *in_stack_ffffff44;
  type_4 local_b8;
  type_2 *var_36;
  int var_30;
  type_2 *var_26;
  type_2 var_31;
  type_2 *var_19;
  void *local_54;
  size_t var_27;
  
  var_4 = *mod;
  if (mod[var_4] == 0) {
                    /* WARNING: Subroutine does not return */
    var_1("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");
  }
  var_2 = mod[1] & 1;
  if (var_2 == 0) {
    pBVar4 = var_3(base_in,var_28,mod);
    return pBVar4;
  }
  if (0x3fffffe < var_4) goto LAB_00064ab0;
  pBVar4 = (type_1)var_5(var_4 + 1,4);
  var_6(pBVar4,0,(var_4 + 1) * 4);
  *pBVar4 = var_4;
  var_7(base_in,mod,pBVar4,(type_1)0x0);
  var_4 = *pBVar4;
  if (1 < var_4) {
    var_8 = pBVar4[var_4];
    while (var_8 == 0) {
      var_4 = var_4 - 1;
      *pBVar4 = var_4;
      if (var_4 == 1) break;
      var_8 = pBVar4[var_4];
    }
  }
  var_21 = (type_2 *)*mod;
  if ((int)var_21 * 0x20 < 0) {
                    /* WARNING: Subroutine does not return */
    var_1("n >= 0","sshbn.c",0x51,"bn_power_2");
  }
  var_4 = (int)var_21 + 1;
  if (0x3fffffe < var_4) goto LAB_00064ab0;
  modulus = (type_1)var_5((int)var_21 + 2U,4);
  var_6(modulus,0,((int)var_21 + 2U) * 4);
  *modulus = var_4;
  if ((int)(var_4 * 0x20) <= (int)var_21 * 0x20) {
                    /* WARNING: Subroutine does not return */
    var_9();
  }
  modulus[(int)var_21 + 1] = modulus[(int)var_21 + 1] | 1;
  var_11 = var_10(mod,modulus);
  if (var_11 == (type_1)0x0) {
                    /* WARNING: Subroutine does not return */
    var_1("inv","sshbn.c",0x443,"modpow");
  }
  b_01 = var_12(pBVar4,modulus,mod);
  var_13(pBVar4,*pBVar4 * 4 + 4);
  var_14(pBVar4);
  var_4 = *mod;
  if (0x3fffffe < var_4) goto LAB_00064ab0;
  var_20 = (type_2 *)((var_4 + 1) * 4);
  pBVar4 = (type_1)var_5(var_4 + 1,4);
  var_6(pBVar4,0,(size_t)var_20);
  *pBVar4 = var_4;
  var_7(modulus,mod,pBVar4,(type_1)0x0);
  var_4 = *pBVar4;
  if (1 < var_4) {
    do {
      if (pBVar4[var_4] != 0) break;
      var_4 = var_4 - 1;
      *pBVar4 = var_4;
    } while (var_4 != 1);
  }
  var_13(modulus,*modulus * 4 + 4);
  var_14(modulus);
  var_15 = (type_2 *)var_5((size_t)var_21,4);
  var_16 = (int)var_21 + -1;
  var_18 = var_15 + var_16;
  var_17 = mod;
  var_22 = var_16;
  var_4 = var_2;
  if ((int)var_21 < 1) {
    var_19 = (type_2 *)var_5((size_t)var_21,4);
    var_13(var_11,*var_11 * 4 + 4);
    var_14(var_11);
    local_54 = var_5((size_t)var_21,4);
    if (-1 < var_16) goto LAB_000640c0;
    var_8 = *b_01;
  }
  else {
    do {
      var_17 = var_17 + 1;
      *var_18 = *var_17;
      bVar25 = var_15 != var_18;
      var_18 = var_18 + -1;
    } while (bVar25);
    var_19 = (type_2 *)var_5((size_t)var_21,4);
    var_17 = (type_2 *)0x0;
    var_20 = var_19 + var_16;
    do {
      while ((int)*var_11 <= (int)var_17) {
        *var_20 = 0;
        var_17 = (type_2 *)((int)var_17 + 1);
        var_20 = var_20 + -1;
        if (var_21 == var_17) goto LAB_0006405b;
      }
      var_29 = (int)var_17 + 1;
      var_17 = (type_2 *)((int)var_17 + 1);
      *var_20 = var_11[var_29];
      var_20 = var_20 + -1;
    } while (var_17 != var_21);
LAB_0006405b:
    var_13(var_11,*var_11 * 4 + 4);
    var_14(var_11);
    local_54 = var_5((size_t)var_21,4);
    var_20 = (type_2 *)((int)var_21 * 4);
    var_6(local_54,0,(size_t)var_20);
LAB_000640c0:
    do {
      var_23 = *(type_4 *)((int)local_54 + var_22 * 4);
      var_24 = var_4 + var_23;
      var_44 = var_19[var_22];
      var_19[var_22] = ~var_44 + var_24;
      var_22 = var_22 + -1;
      var_4 = (type_4)var_25(var_4,var_23) + (type_4)var_25(~var_44,var_24);
    } while (var_22 != -1);
    var_8 = *b_01;
    if (0 < (int)var_21) {
      var_17 = (type_2 *)((int)local_54 + var_16 * 4);
      var_18 = (type_2 *)0x0;
      if ((int)var_8 < 1) goto LAB_0006412f;
LAB_00064118:
      *var_17 = b_01[(int)var_18 + 1];
joined_r0x00064127:
      var_18 = (type_2 *)((int)var_18 + 1);
      if (var_18 == var_21) {
        var_13(b_01,*b_01 * 4 + 4);
        var_14(b_01);
        var_26 = (type_2 *)var_5((int)var_21 * 2,4);
        var_35 = (type_2 *)var_5((int)var_21 * 2,4);
        var_17 = var_26 + (int)var_21 * 2 + -1;
        var_18 = (type_2 *)0x0;
        do {
          if ((int)var_18 < (int)*pBVar4) {
            *var_17 = pBVar4[(int)var_18 + 1];
          }
          else {
            *var_17 = 0;
          }
          var_17 = var_17 + -1;
          var_18 = (type_2 *)((int)var_18 + 1);
        } while (var_21 != var_18);
        var_13(pBVar4,*pBVar4 * 4 + 4);
        var_14(pBVar4);
        var_27 = (int)var_21 * 3;
        if (0x32 < (int)var_21) {
          var_22 = 0;
          var_17 = var_21;
          do {
            var_17 = (type_2 *)((int)var_17 + (1 - ((int)var_17 >> 1)));
            var_22 = var_22 + (int)var_17 * 4;
          } while (0x32 < (int)var_17);
          var_27 = var_27 + var_22;
        }
        goto LAB_0006421b;
      }
      var_17 = var_17 + -1;
      if ((int)*b_01 <= (int)var_18) goto LAB_0006412f;
      goto LAB_00064118;
    }
  }
  var_13(b_01,var_8 * 4 + 4);
  var_14(b_01);
  var_26 = (type_2 *)var_5((int)var_21 * 2,4);
  var_35 = (type_2 *)var_5((int)var_21 * 2,4);
  var_13(pBVar4,*pBVar4 * 4 + 4);
  var_14(pBVar4);
  var_27 = (int)var_21 * 3;
LAB_0006421b:
  var_17 = (type_2 *)var_5(var_27,4);
  var_8 = *var_28;
  var_31 = 0;
  var_32 = var_28 + var_8;
  if (0 < (int)var_8) {
    do {
      var_30 = 0x1f;
      do {
        if ((1 << ((type_5)var_30 & 0x1f) & *var_32) != 0) {
          if ((int)var_8 <= (int)var_31) goto LAB_000645c6;
          var_41 = (int)var_21 * 2 + -1;
          __n = (type_2 *)((int)var_21 * 4);
          var_18 = var_17 + (int)var_21 * 3;
          var_37 = var_17 + (int)var_21;
          var_29 = (int)var_21 >> 1;
          b = var_18 + (int)var_21 * 2;
          a_00 = (type_2 *)((int)var_21 - var_29);
          var_22 = (int)a_00 + var_29 * 2;
          var_34 = var_35;
          goto LAB_00064370;
        }
        var_30 = var_30 + -1;
      } while (var_30 != -1);
      var_31 = var_31 + 1;
      var_32 = var_32 + -1;
    } while (var_8 != var_31);
  }
  goto LAB_000645c6;
LAB_0006412f:
  *var_17 = 0;
  goto joined_r0x00064127;
  while( true ) {
    var_31 = var_31 + 1;
    var_30 = 0x1f;
    if ((int)*var_28 <= (int)var_31) break;
LAB_00064370:
    do {
      var_33(var_21,var_17,var_20,in_stack_ffffff40,in_stack_ffffff44);
      var_35 = var_34 + (int)var_21;
      if ((int)var_21 < 0x33) {
        if (0 < (int)var_21) {
          var_20 = __n;
          var_6(var_17,0,(size_t)__n);
        }
        var_36 = (type_2 *)((int)__n + (int)var_35);
        if ((var_35 < var_36) && (var_17 < var_37)) {
          var_38 = (type_2 *)(((int)var_35 - (int)var_36) + (int)var_37);
          var_40 = var_37;
          if (var_38 < var_17) {
            var_38 = var_17;
          }
          do {
            var_36 = var_36 + -1;
            local_b8 = 0;
            var_39 = var_40;
            var_32 = var_19 + -1 + (int)var_21;
            do {
              lVar2 = (type_6)*var_32 * (type_6)*var_36 + (type_6)var_39[-1] +
                      (type_6)local_b8;
              local_b8 = (type_4)((type_6)lVar2 >> 0x20);
              var_39[-1] = (type_2)lVar2;
              var_32 = var_32 + -1;
              var_39 = var_39 + -1;
            } while (var_17 < var_39);
            var_40 = var_40 + -1;
          } while (var_38 < var_40);
        }
        var_33(var_21,var_18,var_20,in_stack_ffffff40,in_stack_ffffff44);
        if (var_41 < 0) {
          var_4 = 0;
        }
        else {
LAB_00064484:
          var_4 = 0;
          var_42 = var_41;
          do {
            var_23 = var_37[var_42] + var_34[var_42];
            var_8 = var_23 + var_4;
            var_4 = (type_4)var_25(var_37[var_42],var_34[var_42]) + (type_4)var_25(var_23,var_4);
            var_34[var_42] = var_8;
            var_42 = var_42 + -1;
          } while (var_42 != -1);
        }
        if (0 < (int)var_21) goto LAB_000644bf;
LAB_00064525:
        var_42 = var_16;
        var_4 = var_2;
        if (-1 < var_16) {
          do {
            var_23 = var_35[var_42];
            var_24 = var_4 + var_23;
            var_44 = var_15[var_42];
            var_35[var_42] = ~var_44 + var_24;
            var_42 = var_42 + -1;
            var_4 = (type_4)var_25(var_4,var_23) + (type_4)var_25(~var_44,var_24);
          } while (var_42 != -1);
        }
      }
      else {
        var_33(a_00,b,var_20,in_stack_ffffff40,in_stack_ffffff44);
        var_43(var_35,var_19 + (int)a_00,var_18 + var_29,var_29,b);
        var_43(var_35 + (int)a_00,var_19,var_18,var_29,b);
        var_40 = var_18 + var_22;
        var_38 = var_17 + var_29;
        if (0 < (int)a_00) {
          do {
            var_39 = var_40 + 1;
            *var_38 = *var_40;
            var_40 = var_39;
            var_38 = var_38 + 1;
          } while (var_18 + var_22 + (int)a_00 != var_39);
        }
        var_4 = 0;
        var_42 = var_29 + -1;
        do {
          var_23 = (var_18 + var_29)[var_42];
          var_44 = var_23 + var_18[var_42];
          var_8 = var_44 + var_4;
          var_4 = (type_4)var_25(var_23,var_18[var_42]) + (type_4)var_25(var_44,var_4);
          var_18[var_42] = var_8;
          var_42 = var_42 + -1;
        } while (var_42 != -1);
        var_4 = 0;
        var_42 = var_29 + -1;
        do {
          var_23 = var_18[var_42] + var_18[(var_22 - var_29) + var_42];
          var_8 = var_23 + var_4;
          var_4 = (type_4)var_25(var_18[var_42],var_18[(var_22 - var_29) + var_42]) +
                  (type_4)var_25(var_23,var_4);
          var_17[var_42] = var_8;
          var_42 = var_42 + -1;
        } while (var_42 != -1);
        var_33(var_21,var_18,var_20,in_stack_ffffff40,in_stack_ffffff44);
        if (-1 < var_41) goto LAB_00064484;
        var_4 = 0;
LAB_000644bf:
        var_42 = 0;
        do {
          var_35[var_42] = var_34[var_42];
          var_34[var_42] = 0;
          var_42 = var_42 + 1;
        } while (var_42 < (int)var_21);
        if ((var_4 != 0) || ((int)var_21 < 1)) goto LAB_00064525;
        var_8 = *var_35;
        var_45 = *var_15;
        var_40 = (type_2 *)0x0;
        if (var_45 == var_8) {
          do {
            var_40 = (type_2 *)((int)var_40 + 1);
            if (var_21 == var_40) goto LAB_00064525;
            var_8 = var_35[(int)var_40];
            var_45 = var_15[(int)var_40];
          } while (var_8 == var_45);
        }
        if (var_45 < var_8) goto LAB_00064525;
      }
      var_35 = var_26;
      if ((var_28[*var_28 - var_31] & 1 << ((type_5)var_30 & 0x1f)) != 0) {
        var_33(var_21,var_17,var_20,in_stack_ffffff40,in_stack_ffffff44);
        var_46(var_26,var_15,var_19,var_17,(int)var_21);
        var_35 = var_34;
        var_34 = var_26;
      }
      var_26 = var_34;
      var_30 = var_30 + -1;
      var_34 = var_35;
    } while (var_30 != -1);
  }
LAB_000645c6:
  var_46(var_26,var_15,var_19,var_17,(int)var_21);
  var_4 = *mod;
  if (var_4 < 0x3ffffff) {
    var_32 = (type_4 *)var_5(var_4 + 1,4);
    var_6(var_32,0,(var_4 + 1) * 4);
    *var_32 = var_4;
    if (0 < (int)var_21) {
      var_32[var_4] = var_26[(int)var_21];
      var_20 = (type_2 *)0x1;
      if (var_21 != (type_2 *)0x1) {
        do {
          var_16 = (int)var_21 + (int)var_20;
          var_22 = *var_32 - (int)var_20;
          var_20 = (type_2 *)((int)var_20 + 1);
          var_32[var_22] = var_26[var_16];
        } while (var_21 != var_20);
      }
      var_4 = *var_32;
    }
    if (1 < var_4) {
      var_2 = var_32[var_4];
      while (var_2 == 0) {
        var_4 = var_4 - 1;
        *var_32 = var_4;
        if (var_4 == 1) break;
        var_2 = var_32[var_4];
      }
    }
    var_13(var_17,var_27 << 2);
    var_14(var_17);
    var_13(var_26,(int)var_21 * 8);
    var_14(var_26);
    var_13(var_35,(int)var_21 * 8);
    var_14(var_35);
    n = (int)var_21 * 4;
    var_13(var_19,n);
    var_14(var_19);
    var_13(var_15,n);
    var_14(var_15);
    var_13(local_54,n);
    var_14(local_54);
    return var_32;
  }
LAB_00064ab0:
                    /* WARNING: Subroutine does not return */
  var_47((int)in_stack_ffffff44);
}


(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator 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: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) 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: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) 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: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) 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: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) 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)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) 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 (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (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: (identifier) arguments: (argument_list))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (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: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))) (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: (subscript_expression argument: (identifier) index: (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: (subscript_expression argument: (identifier) index: (identifier)))))))) (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: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (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: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (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: (goto_statement label: (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: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))) (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 (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (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: (pointer_expression argument: (identifier)) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (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) (number_literal)))))) (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: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))))) alternative: (else_clause (compound_statement (do_statement 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: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) 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)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_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)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (binary_expression left: (identifier) right: (number_literal))))) (labeled_statement label: (statement_identifier) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (unary_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (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: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) (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: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal)))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal))))) (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: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (number_literal)))))) alternative: (else_clause (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)))) (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 (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (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: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (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: (number_literal))) (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: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) right: (pointer_expression argument: (identifier)))) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (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: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (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: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (goto_statement label: (statement_identifier)) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) (goto_statement label: (statement_identifier)) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))) consequence: (break_statement)) (labeled_statement label: (statement_identifier) (do_statement body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (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: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))) consequence: (compound_statement (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 (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (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))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (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: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (parenthesized_expression (identifier))) right: (identifier)) right: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) 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: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (labeled_statement label: (statement_identifier) (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: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (goto_statement label: (statement_identifier))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (binary_expression left: (unary_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: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (unary_expression argument: (identifier)) (identifier)))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))))) (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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (do_statement 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: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal))))) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) 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: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (identifier))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))) right: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_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: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (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: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (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: (subscript_expression argument: (identifier) index: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (do_statement body: (compound_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: (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: (subscript_expression argument: (identifier) index: (identifier)) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))))))) 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: (subscript_expression argument: (identifier) index: (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: (subscript_expression argument: (identifier) index: (identifier)))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list)))))))

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

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

{
  int iVar1;
  void *pvVar2;
  size_t __n;
  void *pvVar3;
  longlong lVar4;
  uint uVar5;
  uint *puVar6;
  uint uVar7;
  uint *puVar8;
  int *piVar9;
  int *piVar10;
  uint *puVar11;
  uint *puVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  void *__s;
  void *pvVar16;
  int iVar17;
  void *pvVar18;
  undefined4 *puVar19;
  undefined4 *puVar20;
  int iVar21;
  void *pvVar22;
  int iVar23;
  int iVar24;
  int iVar25;
  undefined4 *puVar26;
  void *pvVar27;
  int iVar28;
  int *piVar29;
  uint uVar30;
  int iVar31;
  bool bVar32;
  uint local_b8;
  uint *local_b0;
  int local_94;
  int local_88;
  int local_78;
  int local_60;
  void *local_54;
  int local_20;
  
  uVar7 = *param_3;
  if (param_3[uVar7] == 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("mod[mod[0]] != 0","sshbn.c",0x42c,"modpow");
  }
  uVar5 = param_3[1] & 1;
  if (uVar5 == 0) {
    puVar6 = (uint *)FUN_00060da0();
    return puVar6;
  }
  if (0x3fffffe < uVar7) goto LAB_00064ab0;
  puVar6 = (uint *)FUN_000329a0(uVar7 + 1,4);
  memset(puVar6,0,(uVar7 + 1) * 4);
  *puVar6 = uVar7;
  FUN_00060250(0);
  uVar7 = *puVar6;
  if (1 < uVar7) {
    uVar15 = puVar6[uVar7];
    while (uVar15 == 0) {
      uVar7 = uVar7 - 1;
      *puVar6 = uVar7;
      if (uVar7 == 1) break;
      uVar15 = puVar6[uVar7];
    }
  }
  uVar7 = *param_3;
  if ((int)(uVar7 * 0x20) < 0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("n >= 0","sshbn.c",0x51,"bn_power_2");
  }
  uVar15 = uVar7 + 1;
  if (0x3fffffe < uVar15) goto LAB_00064ab0;
  puVar8 = (uint *)FUN_000329a0(uVar7 + 2,4);
  memset(puVar8,0,(uVar7 + 2) * 4);
  *puVar8 = uVar15;
  if ((int)(uVar15 * 0x20) <= (int)(uVar7 * 0x20)) {
                    /* WARNING: Subroutine does not return */
    abort();
  }
  puVar8[uVar7 + 1] = puVar8[uVar7 + 1] | 1;
  piVar9 = (int *)FUN_00063860(param_3,puVar8);
  if (piVar9 == (int *)0x0) {
                    /* WARNING: Subroutine does not return */
    __assert_fail("inv","sshbn.c",0x443,"modpow");
  }
  piVar10 = (int *)FUN_00061810(puVar6,puVar8,param_3);
  FUN_00032c20(puVar6,*puVar6 * 4 + 4);
  FUN_00032b40(puVar6);
  uVar15 = *param_3;
  if (0x3fffffe < uVar15) goto LAB_00064ab0;
  puVar6 = (uint *)FUN_000329a0(uVar15 + 1,4);
  memset(puVar6,0,(uVar15 + 1) * 4);
  *puVar6 = uVar15;
  FUN_00060250(0);
  uVar15 = *puVar6;
  if (1 < uVar15) {
    do {
      if (puVar6[uVar15] != 0) break;
      uVar15 = uVar15 - 1;
      *puVar6 = uVar15;
    } while (uVar15 != 1);
  }
  FUN_00032c20(puVar8,*puVar8 * 4 + 4);
  FUN_00032b40(puVar8);
  puVar11 = (uint *)FUN_000329a0(uVar7,4);
  iVar1 = uVar7 - 1;
  puVar12 = puVar11 + iVar1;
  puVar8 = param_3;
  iVar21 = iVar1;
  uVar15 = uVar5;
  if ((int)uVar7 < 1) {
    local_60 = FUN_000329a0(uVar7,4);
    FUN_00032c20(piVar9,*piVar9 * 4 + 4);
    FUN_00032b40(piVar9);
    local_54 = (void *)FUN_000329a0(uVar7,4);
    if (-1 < iVar1) goto LAB_000640c0;
    iVar21 = *piVar10;
  }
  else {
    do {
      puVar8 = puVar8 + 1;
      *puVar12 = *puVar8;
      bVar32 = puVar11 != puVar12;
      puVar12 = puVar12 + -1;
    } while (bVar32);
    local_60 = FUN_000329a0(uVar7,4);
    uVar13 = 0;
    piVar29 = (int *)(iVar1 * 4 + local_60);
    do {
      while (*piVar9 <= (int)uVar13) {
        *piVar29 = 0;
        uVar13 = uVar13 + 1;
        piVar29 = piVar29 + -1;
        if (uVar7 == uVar13) goto LAB_0006405b;
      }
      iVar24 = uVar13 + 1;
      uVar13 = uVar13 + 1;
      *piVar29 = piVar9[iVar24];
      piVar29 = piVar29 + -1;
    } while (uVar13 != uVar7);
LAB_0006405b:
    FUN_00032c20(piVar9,*piVar9 * 4 + 4);
    FUN_00032b40(piVar9);
    local_54 = (void *)FUN_000329a0(uVar7,4);
    memset(local_54,0,uVar7 * 4);
LAB_000640c0:
    do {
      uVar13 = *(uint *)((int)local_54 + iVar21 * 4);
      uVar30 = uVar15 + uVar13;
      uVar14 = ~*(uint *)(local_60 + iVar21 * 4);
      *(uint *)(local_60 + iVar21 * 4) = uVar14 + uVar30;
      iVar21 = iVar21 + -1;
      uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(uVar14,uVar30);
    } while (iVar21 != -1);
    iVar21 = *piVar10;
    if (0 < (int)uVar7) {
      piVar9 = (int *)((int)local_54 + iVar1 * 4);
      uVar15 = 0;
      if (iVar21 < 1) goto LAB_0006412f;
LAB_00064118:
      *piVar9 = piVar10[uVar15 + 1];
joined_r0x00064127:
      uVar15 = uVar15 + 1;
      if (uVar15 == uVar7) {
        FUN_00032c20(piVar10,*piVar10 * 4 + 4);
        FUN_00032b40(piVar10);
        local_88 = FUN_000329a0(uVar7 * 2,4);
        iVar21 = FUN_000329a0(uVar7 * 2,4);
        puVar8 = (uint *)(local_88 + -4 + uVar7 * 8);
        uVar15 = 0;
        do {
          if ((int)uVar15 < (int)*puVar6) {
            *puVar8 = puVar6[uVar15 + 1];
          }
          else {
            *puVar8 = 0;
          }
          puVar8 = puVar8 + -1;
          uVar15 = uVar15 + 1;
        } while (uVar7 != uVar15);
        FUN_00032c20(puVar6,*puVar6 * 4 + 4);
        FUN_00032b40(puVar6);
        local_20 = uVar7 * 3;
        if (0x32 < (int)uVar7) {
          iVar24 = 0;
          uVar15 = uVar7;
          do {
            uVar15 = (uVar15 - ((int)uVar15 >> 1)) + 1;
            iVar24 = iVar24 + uVar15 * 4;
          } while (0x32 < (int)uVar15);
          local_20 = local_20 + iVar24;
        }
        goto LAB_0006421b;
      }
      piVar9 = piVar9 + -1;
      if (*piVar10 <= (int)uVar15) goto LAB_0006412f;
      goto LAB_00064118;
    }
  }
  FUN_00032c20(piVar10,iVar21 * 4 + 4);
  FUN_00032b40(piVar10);
  local_88 = FUN_000329a0(uVar7 * 2,4);
  iVar21 = FUN_000329a0(uVar7 * 2,4);
  FUN_00032c20(puVar6,*puVar6 * 4 + 4);
  FUN_00032b40(puVar6);
  local_20 = uVar7 * 3;
LAB_0006421b:
  __s = (void *)FUN_000329a0(local_20,4);
  iVar24 = *param_2;
  local_78 = 0;
  puVar6 = (uint *)(param_2 + iVar24);
  if (0 < iVar24) {
    do {
      local_94 = 0x1f;
      do {
        if ((1 << ((byte)local_94 & 0x1f) & *puVar6) != 0) {
          if (iVar24 <= local_78) goto LAB_000645c6;
          iVar31 = uVar7 * 2 + -1;
          __n = uVar7 * 4;
          pvVar2 = (void *)((int)__s + uVar7 * 0xc);
          pvVar16 = (void *)((int)__s + __n);
          iVar25 = (int)uVar7 >> 1;
          pvVar3 = (void *)((int)pvVar2 + uVar7 * 8);
          iVar17 = uVar7 - iVar25;
          iVar24 = iVar17 + iVar25 * 2;
          iVar28 = iVar21;
          goto LAB_00064370;
        }
        local_94 = local_94 + -1;
      } while (local_94 != -1);
      local_78 = local_78 + 1;
      puVar6 = puVar6 + -1;
    } while (iVar24 != local_78);
  }
  goto LAB_000645c6;
LAB_0006412f:
  *piVar9 = 0;
  goto joined_r0x00064127;
  while( true ) {
    local_78 = local_78 + 1;
    local_94 = 0x1f;
    if (*param_2 <= local_78) break;
LAB_00064370:
    do {
      FUN_0005f530(uVar7,__s);
      puVar6 = (uint *)(iVar28 + __n);
      if ((int)uVar7 < 0x33) {
        if (0 < (int)uVar7) {
          memset(__s,0,__n);
        }
        local_b0 = puVar6 + uVar7;
        if ((puVar6 < local_b0) && (__s < pvVar16)) {
          pvVar18 = (void *)(((int)puVar6 - (int)local_b0) + (int)pvVar16);
          pvVar27 = pvVar16;
          if (pvVar18 < __s) {
            pvVar18 = __s;
          }
          do {
            local_b0 = local_b0 + -1;
            local_b8 = 0;
            pvVar22 = pvVar27;
            puVar8 = (uint *)(local_60 + -4 + __n);
            do {
              lVar4 = (ulonglong)*puVar8 * (ulonglong)*local_b0 +
                      (ulonglong)*(uint *)((int)pvVar22 + -4) + (ulonglong)local_b8;
              local_b8 = (uint)((ulonglong)lVar4 >> 0x20);
              *(int *)((int)pvVar22 + -4) = (int)lVar4;
              puVar8 = puVar8 + -1;
              pvVar22 = (void *)((int)pvVar22 + -4);
            } while (__s < pvVar22);
            pvVar27 = (void *)((int)pvVar27 + -4);
          } while (pvVar18 < pvVar27);
        }
        FUN_0005f530(uVar7,pvVar2);
        if (iVar31 < 0) {
          uVar15 = 0;
        }
        else {
LAB_00064484:
          uVar15 = 0;
          iVar21 = iVar31;
          do {
            uVar13 = *(uint *)(iVar28 + iVar21 * 4);
            uVar14 = *(uint *)((int)pvVar16 + iVar21 * 4);
            uVar30 = uVar14 + uVar13;
            iVar23 = uVar30 + uVar15;
            uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);
            *(int *)(iVar28 + iVar21 * 4) = iVar23;
            iVar21 = iVar21 + -1;
          } while (iVar21 != -1);
        }
        if (0 < (int)uVar7) goto LAB_000644bf;
LAB_00064525:
        iVar21 = iVar1;
        uVar15 = uVar5;
        if (-1 < iVar1) {
          do {
            uVar13 = puVar6[iVar21];
            uVar30 = uVar15 + uVar13;
            uVar14 = puVar11[iVar21];
            puVar6[iVar21] = ~uVar14 + uVar30;
            iVar21 = iVar21 + -1;
            uVar15 = (uint)CARRY4(uVar15,uVar13) + (uint)CARRY4(~uVar14,uVar30);
          } while (iVar21 != -1);
        }
      }
      else {
        FUN_0005f530(iVar17,pvVar3);
        FUN_0005f970(iVar25,pvVar3);
        FUN_0005f970(iVar25,pvVar3);
        puVar19 = (undefined4 *)((int)pvVar2 + iVar24 * 4);
        puVar26 = (undefined4 *)((int)__s + iVar25 * 4);
        if (0 < iVar17) {
          do {
            puVar20 = puVar19 + 1;
            *puVar26 = *puVar19;
            puVar19 = puVar20;
            puVar26 = puVar26 + 1;
          } while ((undefined4 *)((int)pvVar2 + (iVar24 + iVar17) * 4) != puVar20);
        }
        uVar15 = 0;
        iVar21 = iVar25 + -1;
        do {
          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4);
          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4 + iVar25 * 4);
          uVar30 = uVar14 + uVar13;
          iVar23 = uVar30 + uVar15;
          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);
          *(int *)((int)pvVar2 + iVar21 * 4) = iVar23;
          iVar21 = iVar21 + -1;
        } while (iVar21 != -1);
        uVar15 = 0;
        iVar21 = iVar25 + -1;
        do {
          uVar13 = *(uint *)((int)pvVar2 + iVar21 * 4 + (iVar24 - iVar25) * 4);
          uVar14 = *(uint *)((int)pvVar2 + iVar21 * 4);
          uVar30 = uVar14 + uVar13;
          iVar23 = uVar30 + uVar15;
          uVar15 = (uint)CARRY4(uVar14,uVar13) + (uint)CARRY4(uVar30,uVar15);
          *(int *)((int)__s + iVar21 * 4) = iVar23;
          iVar21 = iVar21 + -1;
        } while (iVar21 != -1);
        FUN_0005f530(uVar7,pvVar2);
        if (-1 < iVar31) goto LAB_00064484;
        uVar15 = 0;
LAB_000644bf:
        iVar21 = 0;
        do {
          puVar6[iVar21] = *(uint *)(iVar28 + iVar21 * 4);
          *(undefined4 *)(iVar28 + iVar21 * 4) = 0;
          iVar21 = iVar21 + 1;
        } while (iVar21 < (int)uVar7);
        if ((uVar15 != 0) || ((int)uVar7 < 1)) goto LAB_00064525;
        uVar15 = *puVar6;
        uVar13 = *puVar11;
        uVar14 = 0;
        if (uVar13 == uVar15) {
          do {
            uVar14 = uVar14 + 1;
            if (uVar7 == uVar14) goto LAB_00064525;
            uVar15 = puVar6[uVar14];
            uVar13 = puVar11[uVar14];
          } while (uVar15 == uVar13);
        }
        if (uVar13 < uVar15) goto LAB_00064525;
      }
      iVar21 = local_88;
      if ((param_2[*param_2 - local_78] & 1 << ((byte)local_94 & 0x1f)) != 0) {
        FUN_0005f530(uVar7,__s);
        FUN_0005fba0(__s,uVar7);
        iVar21 = iVar28;
        iVar28 = local_88;
      }
      local_88 = iVar28;
      local_94 = local_94 + -1;
      iVar28 = iVar21;
    } while (local_94 != -1);
  }
LAB_000645c6:
  FUN_0005fba0(__s,uVar7);
  uVar5 = *param_3;
  if (uVar5 < 0x3ffffff) {
    puVar6 = (uint *)FUN_000329a0(uVar5 + 1,4);
    memset(puVar6,0,(uVar5 + 1) * 4);
    *puVar6 = uVar5;
    if (0 < (int)uVar7) {
      puVar6[uVar5] = *(uint *)(local_88 + uVar7 * 4);
      uVar5 = 1;
      if (uVar7 != 1) {
        do {
          iVar1 = uVar5 * 4;
          iVar24 = *puVar6 - uVar5;
          uVar5 = uVar5 + 1;
          puVar6[iVar24] = *(uint *)(local_88 + uVar7 * 4 + iVar1);
        } while (uVar7 != uVar5);
      }
      uVar5 = *puVar6;
    }
    if (1 < uVar5) {
      uVar15 = puVar6[uVar5];
      while (uVar15 == 0) {
        uVar5 = uVar5 - 1;
        *puVar6 = uVar5;
        if (uVar5 == 1) break;
        uVar15 = puVar6[uVar5];
      }
    }
    FUN_00032c20(__s,local_20 << 2);
    FUN_00032b40(__s);
    FUN_00032c20(local_88,uVar7 * 8);
    FUN_00032b40(local_88);
    FUN_00032c20(iVar21,uVar7 * 8);
    FUN_00032b40(iVar21);
    iVar1 = uVar7 * 4;
    FUN_00032c20(local_60,iVar1);
    FUN_00032b40(local_60);
    FUN_00032c20(puVar11,iVar1);
    FUN_00032b40(puVar11);
    FUN_00032c20(local_54,iVar1);
    FUN_00032b40(local_54);
    return puVar6;
  }
LAB_00064ab0:
                    /* WARNING: Subroutine does not return */
  FUN_0005f500();
}

