
mp_limb_t __gmpn_mod_1(mp_srcptr ap,mp_size_t n,mp_limb_t b)

{
  longlong lVar1;
  uint uVar2;
  uint uVar3;
  mp_limb_t mVar4;
  uint uVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  mp_srcptr pmVar9;
  int iVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  
  iVar8 = n * 4;
  if (n == 0) {
    return 0;
  }
  iVar10 = n + -1;
  uVar2 = ap[iVar10];
  if (-1 < (int)b) {
    if (uVar2 < b) {
      n = n + -1;
      if (n == 0) {
        return uVar2;
      }
      uVar5 = (ap + iVar10)[-1];
      uVar3 = uVar2;
      iVar8 = iVar8 + -4;
    }
    else {
      uVar3 = 0;
      uVar5 = uVar2;
    }
    if (b < 0x10000) {
      iVar10 = 0;
      if (0xff < b) {
        iVar10 = 0x18;
      }
      iVar7 = 9;
      if (0xff >= b) {
        iVar7 = 1;
      }
    }
    else {
      iVar10 = 0x10;
      if (0xffffff < b) {
        iVar10 = 8;
      }
      iVar7 = 0x19;
      if (0xffffff >= b) {
        iVar7 = 0x11;
      }
    }
    uVar11 = iVar10 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7];
    uVar2 = b << (uVar11 & 0x1f);
    uVar12 = uVar2 >> 0x10;
    if (uVar12 == 0) {
      trap(7);
    }
    uVar15 = ~uVar2 / uVar12;
    uVar3 = uVar5 >> (0x20 - uVar11 & 0x1f) | uVar3 << (uVar11 & 0x1f);
    uVar13 = (uVar2 & 0xffff) * uVar15;
    uVar6 = ~uVar2 % uVar12 << 0x10 | 0xffff;
    uVar14 = uVar15;
    if (uVar6 < uVar13) {
      uVar6 = uVar6 + uVar2;
      uVar14 = uVar15 - 1;
      if ((uVar2 <= uVar6) && (uVar6 < uVar13)) {
        uVar6 = uVar6 + uVar2;
        uVar14 = uVar15 - 2;
      }
    }
    if (uVar12 == 0) {
      trap(7);
    }
    uVar16 = (uVar6 - uVar13) / uVar12;
    uVar15 = (uVar2 & 0xffff) * uVar16;
    uVar6 = (uVar6 - uVar13) % uVar12 << 0x10 | 0xffff;
    uVar13 = uVar2 + uVar6;
    uVar12 = uVar16;
    if (((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)) && (uVar13 < uVar15)) {
      uVar12 = uVar16 - 2;
    }
    uVar12 = uVar14 << 0x10 | uVar12;
    if (1 < n) {
      pmVar9 = (mp_srcptr)((int)ap + iVar8);
      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;
      uVar14 = uVar5;
      do {
        uVar5 = pmVar9[-2];
        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);
        pmVar9 = pmVar9 + -1;
        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);
        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;
        uVar3 = uVar2;
        if (uVar14 <= (uint)lVar1) {
          uVar3 = 0;
        }
        uVar3 = uVar14 + uVar3;
        if (uVar2 <= uVar3) {
          uVar3 = uVar3 - uVar2;
        }
        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;
        uVar14 = uVar5;
      } while (ap + 1 != pmVar9);
    }
    iVar8 = uVar5 << (uVar11 & 0x1f);
    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12 + CONCAT44(uVar3 + 1,iVar8);
    uVar5 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;
    uVar3 = uVar2;
    if (uVar5 <= (uint)lVar1) {
      uVar3 = 0;
    }
    uVar5 = uVar5 + uVar3;
    if (uVar2 <= uVar5) {
      uVar5 = uVar5 - uVar2;
    }
    return uVar5 >> (uVar11 & 0x1f);
  }
  if (b <= uVar2) {
    uVar2 = uVar2 - b;
  }
  uVar3 = b >> 0x10;
  if (n != 1) {
    if (uVar3 == 0) {
      trap(7);
    }
    uVar14 = ~b / uVar3;
    uVar12 = (b & 0xffff) * uVar14;
    uVar11 = ~b % uVar3 << 0x10 | 0xffff;
    uVar5 = uVar14;
    if (uVar11 < uVar12) {
      uVar11 = uVar11 + b;
      uVar5 = uVar14 - 1;
      if ((b <= uVar11) && (uVar11 < uVar12)) {
        uVar5 = uVar14 - 2;
        uVar11 = uVar11 + b;
      }
    }
    if (uVar3 == 0) {
      trap(7);
    }
    uVar6 = (uVar11 - uVar12) / uVar3;
    uVar14 = (b & 0xffff) * uVar6;
    uVar11 = (uVar11 - uVar12) % uVar3 << 0x10 | 0xffff;
    uVar12 = b + uVar11;
    uVar3 = uVar6;
    if (((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)) && (uVar12 < uVar14)) {
      uVar3 = uVar6 - 2;
    }
    uVar3 = uVar5 << 0x10 | uVar3;
    if (1 < n) {
      pmVar9 = ap + n;
      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;
      do {
        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);
        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;
        mVar4 = b;
        if (uVar2 <= (uint)lVar1) {
          mVar4 = 0;
        }
        uVar2 = uVar2 + mVar4;
        pmVar9 = pmVar9 + -1;
        if (b <= uVar2) {
          uVar2 = uVar2 - b;
        }
        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;
      } while (ap + 1 != pmVar9);
      return uVar2;
    }
  }
  return uVar2;
}



uint __gmpn_mod_1(int param_1,int param_2,uint param_3)

{
  longlong lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint *puVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  
  iVar8 = param_2 * 4;
  if (param_2 == 0) {
    return 0;
  }
  puVar5 = (uint *)(param_1 + iVar8 + -4);
  uVar2 = *puVar5;
  if (-1 < (int)param_3) {
    if (uVar2 < param_3) {
      param_2 = param_2 + -1;
      if (param_2 == 0) {
        return uVar2;
      }
      uVar4 = puVar5[-1];
      uVar3 = uVar2;
      iVar8 = iVar8 + -4;
    }
    else {
      uVar3 = 0;
      uVar4 = uVar2;
    }
    if (param_3 < 0x10000) {
      iVar9 = 0;
      if (0xff < param_3) {
        iVar9 = 0x18;
      }
      iVar7 = 9;
      if (0xff >= param_3) {
        iVar7 = 1;
      }
    }
    else {
      iVar9 = 0x10;
      if (0xffffff < param_3) {
        iVar9 = 8;
      }
      iVar7 = 0x19;
      if (0xffffff >= param_3) {
        iVar7 = 0x11;
      }
    }
    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];
    param_3 = param_3 << (uVar2 & 0x1f);
    uVar10 = param_3 >> 0x10;
    if (uVar10 == 0) {
      trap(7);
    }
    uVar13 = ~param_3 / uVar10;
    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);
    uVar11 = (param_3 & 0xffff) * uVar13;
    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;
    uVar12 = uVar13;
    if (uVar6 < uVar11) {
      uVar6 = uVar6 + param_3;
      uVar12 = uVar13 - 1;
      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {
        uVar6 = uVar6 + param_3;
        uVar12 = uVar13 - 2;
      }
    }
    if (uVar10 == 0) {
      trap(7);
    }
    uVar14 = (uVar6 - uVar11) / uVar10;
    uVar13 = (param_3 & 0xffff) * uVar14;
    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;
    uVar11 = param_3 + uVar6;
    uVar10 = uVar14;
    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {
      uVar10 = uVar14 - 2;
    }
    uVar10 = uVar12 << 0x10 | uVar10;
    if (1 < param_2) {
      iVar8 = param_1 + iVar8;
      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;
      uVar12 = uVar4;
      do {
        uVar4 = *(uint *)(iVar8 + -8);
        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);
        iVar8 = iVar8 + -4;
        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);
        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;
        uVar3 = param_3;
        if (uVar12 <= (uint)lVar1) {
          uVar3 = 0;
        }
        uVar3 = uVar12 + uVar3;
        if (param_3 <= uVar3) {
          uVar3 = uVar3 - param_3;
        }
        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;
        uVar12 = uVar4;
      } while (param_1 + 4 != iVar8);
    }
    iVar8 = uVar4 << (uVar2 & 0x1f);
    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);
    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;
    uVar3 = param_3;
    if (uVar4 <= (uint)lVar1) {
      uVar3 = 0;
    }
    uVar4 = uVar4 + uVar3;
    if (param_3 <= uVar4) {
      uVar4 = uVar4 - param_3;
    }
    return uVar4 >> (uVar2 & 0x1f);
  }
  if (param_3 <= uVar2) {
    uVar2 = uVar2 - param_3;
  }
  uVar3 = param_3 >> 0x10;
  if (param_2 != 1) {
    if (uVar3 == 0) {
      trap(7);
    }
    uVar6 = ~param_3 / uVar3;
    uVar12 = (param_3 & 0xffff) * uVar6;
    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;
    uVar4 = uVar6;
    if (uVar10 < uVar12) {
      uVar10 = uVar10 + param_3;
      uVar4 = uVar6 - 1;
      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {
        uVar4 = uVar6 - 2;
        uVar10 = uVar10 + param_3;
      }
    }
    if (uVar3 == 0) {
      trap(7);
    }
    uVar11 = (uVar10 - uVar12) / uVar3;
    uVar6 = (param_3 & 0xffff) * uVar11;
    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;
    uVar12 = param_3 + uVar10;
    uVar3 = uVar11;
    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {
      uVar3 = uVar11 - 2;
    }
    uVar3 = uVar4 << 0x10 | uVar3;
    if (1 < param_2) {
      iVar8 = param_1 + iVar8;
      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;
      do {
        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));
        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;
        uVar4 = param_3;
        if (uVar2 <= (uint)lVar1) {
          uVar4 = 0;
        }
        uVar2 = uVar2 + uVar4;
        iVar8 = iVar8 + -4;
        if (param_3 <= uVar2) {
          uVar2 = uVar2 - param_3;
        }
        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;
      } while (param_1 + 4 != iVar8);
      return uVar2;
    }
  }
  return uVar2;
}


lui gp,0x6
addiu gp,gp,0x2420
addu gp,gp,t9
beq a1,zero,0x0003ce30
_sll t2,a1,0x2
srl v1,a2,0x1f
addiu t2,t2,-0x4
addu a3,a0,t2
bne v1,zero,0x0003ce68
_lw v0,0x0(a3)
sltu t0,v0,a2
beq t0,zero,0x0003cc68
_nop
addiu a1,a1,-0x1
bne a1,zero,0x0003ce58
_or v1,v0,zero
jr ra
_nop
addiu t2,t2,0x4
lui a3,0x1
sltu a3,a2,a3
bne a3,zero,0x0003ce38
_li t0,0x18
lui a3,0x100
li t0,0x8
li t3,0x10
sltu a3,a2,a3
movz t3,t0,a3
li t1,0x11
li t0,0x19
movn t0,t1,a3
or a3,t0,zero
lw t0,-0x7eb4(gp)
srlv a3,a2,a3
li t5,0x20
addu a3,t0,a3
lbu a3,0x0(a3)
subu t3,t3,a3
sllv a2,a2,t3
subu t5,t5,t3
srl t4,a2,0x10
nor t0,zero,a2
teq t4,zero
divu t0,t4
andi t6,a2,0xffff
srlv a3,v0,t5
sllv v1,v1,t3
or v1,a3,v1
mflo t0
mfhi t1
mul t7,t6,t0
sll t1,t1,0x10
ori a3,t1,0xffff
sltu t1,a3,t7
beq t1,zero,0x0003cd20
_nop
addu a3,a3,a2
sltu t1,a3,a2
bne t1,zero,0x0003cd1c
_addiu t8,t0,-0x1
sltu t1,a3,t7
bne t1,zero,0x0003cf98
_addiu t0,t0,-0x2
or t0,t8,zero
subu a3,a3,t7
teq t4,zero
divu a3,t4
mflo a3
mfhi t4
mul t6,t6,a3
sll t4,t4,0x10
ori t4,t4,0xffff
sltu t1,t4,t6
beq t1,zero,0x0003cd68
_addu t4,a2,t4
sltu t1,t4,a2
bne t1,zero,0x0003cd64
_addiu t7,a3,-0x1
sltu t4,t4,t6
bne t4,zero,0x0003cf90
_nop
or a3,t7,zero
sll t0,t0,0x10
slti a1,a1,0x2
bne a1,zero,0x0003cfa0
_or a3,t0,a3
addu t2,a0,t2
addiu a0,a0,0x4
multu v1,a3
lw a1,-0x8(t2)
addiu t4,v1,0x1
sllv v0,v0,t3
srlv v1,a1,t5
mflo t9
mfhi t8
or v1,v0,v1
addiu t2,t2,-0x4
addu t1,v1,t9
addu t6,t4,t8
sltu t4,t1,t9
addu t4,t4,t6
mul t0,t4,a2
subu v1,v1,t0
or t0,a2,zero
sltu t1,t1,v1
movz t0,zero,t1
addu v1,v1,t0
sltu t0,v1,a2
beq t0,zero,0x0003ce60
_or v0,a1,zero
bne a0,t2,0x0003cd84
_multu v1,a3
multu v1,a3
sllv v0,a1,t3
addiu v1,v1,0x1
mflo t1
mfhi t0
addu a0,v0,t1
addu v1,v1,t0
sltu a1,a0,t1
addu v1,a1,v1
mul a1,v1,a2
or v1,a2,zero
subu v0,v0,a1
sltu a0,a0,v0
movz v1,zero,a0
addu v0,v0,v1
sltu v1,v0,a2
beq v1,zero,0x0003cfa8
_nop
jr ra
_srlv v0,v0,t3
jr ra
_or v0,zero,zero
li t3,0x20
sltiu a3,a2,0x100
movz t3,t0,a3
li t1,0x1
li t0,0x9
movn t0,t1,a3
b 0x0003cca0
_or a3,t0,zero
b 0x0003cc6c
_lw v0,-0x4(a3)
b 0x0003cdd8
_subu v1,v1,a2
sltu v1,v0,a2
bne v1,zero,0x0003ce78
_li v1,0x1
subu v0,v0,a2
beq a1,v1,0x0003cc60
_srl t1,a2,0x10
nor a3,zero,a2
teq t1,zero
divu a3,t1
andi t3,a2,0xffff
mflo a3
mfhi t0
mul t4,t3,a3
sll t0,t0,0x10
ori v1,t0,0xffff
sltu t0,v1,t4
beq t0,zero,0x0003ced4
_nop
addu v1,v1,a2
sltu t0,v1,a2
bne t0,zero,0x0003cfb8
_addiu t5,a3,-0x1
sltu t0,v1,t4
beq t0,zero,0x0003cfb8
_nop
addiu a3,a3,-0x2
addu v1,v1,a2
subu v1,v1,t4
teq t1,zero
divu v1,t1
mflo v1
mfhi t0
mul t3,t3,v1
sll t0,t0,0x10
ori t0,t0,0xffff
sltu t1,t0,t3
beq t1,zero,0x0003cf1c
_addu t0,a2,t0
sltu t1,t0,a2
bne t1,zero,0x0003cfc0
_addiu t4,v1,-0x1
sltu t0,t0,t3
beq t0,zero,0x0003cfc0
_nop
addiu v1,v1,-0x2
sll a3,a3,0x10
slti a1,a1,0x2
bne a1,zero,0x0003cc60
_or t1,a3,v1
addiu t2,t2,0x4
addiu t4,a0,0x4
addu a0,a0,t2
multu v0,t1
lw t0,-0x8(a0)
addiu v0,v0,0x1
mflo t3
mfhi t2
addu a3,t0,t3
addu v1,v0,t2
sltu v0,a3,t3
addu v0,v0,v1
mul v1,v0,a2
subu t0,t0,v1
or v1,a2,zero
sltu v0,a3,t0
movz v1,zero,v0
addu v0,t0,v1
sltu a1,v0,a2
beq a1,zero,0x0003cfb0
_addiu a0,a0,-0x4
bne t4,a0,0x0003cf3c
_multu v0,t1
jr ra
_nop
b 0x0003cd68
_addiu a3,a3,-0x2
b 0x0003cd20
_addu a3,a3,a2
b 0x0003cde0
_or a1,v0,zero
b 0x0003ce28
_subu v0,v0,a2
b 0x0003cf80
_subu v0,v0,a2
b 0x0003ced4
_or a3,t5,zero
b 0x0003cf1c
_or v1,t4,zero
(translation_unit "uint __gmpn_mod_1(int param_1,int param_2,uint param_3)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  \n  iVar8 = param_2 * 4;\n  if (param_2 == 0) {\n    return 0;\n  }\n  puVar5 = (uint *)(param_1 + iVar8 + -4);\n  uVar2 = *puVar5;\n  if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }\n  if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }\n  uVar3 = param_3 >> 0x10;\n  if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}\n\n" (function_definition "uint __gmpn_mod_1(int param_1,int param_2,uint param_3)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  \n  iVar8 = param_2 * 4;\n  if (param_2 == 0) {\n    return 0;\n  }\n  puVar5 = (uint *)(param_1 + iVar8 + -4);\n  uVar2 = *puVar5;\n  if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }\n  if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }\n  uVar3 = param_3 >> 0x10;\n  if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}" type_identifier (function_declarator "__gmpn_mod_1(int param_1,int param_2,uint param_3)" identifier (parameter_list "(int param_1,int param_2,uint param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  \n  iVar8 = param_2 * 4;\n  if (param_2 == 0) {\n    return 0;\n  }\n  puVar5 = (uint *)(param_1 + iVar8 + -4);\n  uVar2 = *puVar5;\n  if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }\n  if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }\n  uVar3 = param_3 >> 0x10;\n  if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (expression_statement "iVar8 = param_2 * 4;" (assignment_expression "iVar8 = param_2 * 4" identifier = (binary_expression "param_2 * 4" identifier * number_literal)) ;) (if_statement "if (param_2 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "puVar5 = (uint *)(param_1 + iVar8 + -4);" (assignment_expression "puVar5 = (uint *)(param_1 + iVar8 + -4)" identifier = (cast_expression "(uint *)(param_1 + iVar8 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar8 + -4)" ( (binary_expression "param_1 + iVar8 + -4" (binary_expression "param_1 + iVar8" identifier + identifier) + number_literal) )))) ;) (expression_statement "uVar2 = *puVar5;" (assignment_expression "uVar2 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (if_statement "if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }" if (parenthesized_expression "(-1 < (int)param_3)" ( (binary_expression "-1 < (int)param_3" number_literal < (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }" { (if_statement "if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }" if (parenthesized_expression "(uVar2 < param_3)" ( (binary_expression "uVar2 < param_3" identifier < identifier) )) (compound_statement "{\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }" { (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (if_statement "if (param_2 == 0) {\n        return uVar2;\n      }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n        return uVar2;\n      }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "uVar4 = puVar5[-1];" (assignment_expression "uVar4 = puVar5[-1]" identifier = (subscript_expression "puVar5[-1]" identifier [ number_literal ])) ;) (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" identifier = identifier) ;) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" identifier = (binary_expression "iVar8 + -4" identifier + number_literal)) ;) }) (else_clause "else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }" else (compound_statement "{\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = uVar2;" (assignment_expression "uVar4 = uVar2" identifier = identifier) ;) }))) (if_statement "if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }" if (parenthesized_expression "(param_3 < 0x10000)" ( (binary_expression "param_3 < 0x10000" identifier < number_literal) )) (compound_statement "{\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }" { (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (if_statement "if (0xff < param_3) {\n        iVar9 = 0x18;\n      }" if (parenthesized_expression "(0xff < param_3)" ( (binary_expression "0xff < param_3" number_literal < identifier) )) (compound_statement "{\n        iVar9 = 0x18;\n      }" { (expression_statement "iVar9 = 0x18;" (assignment_expression "iVar9 = 0x18" identifier = number_literal) ;) })) (expression_statement "iVar7 = 9;" (assignment_expression "iVar7 = 9" identifier = number_literal) ;) (if_statement "if (0xff >= param_3) {\n        iVar7 = 1;\n      }" if (parenthesized_expression "(0xff >= param_3)" ( (binary_expression "0xff >= param_3" number_literal >= identifier) )) (compound_statement "{\n        iVar7 = 1;\n      }" { (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) })) }) (else_clause "else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }" else (compound_statement "{\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }" { (expression_statement "iVar9 = 0x10;" (assignment_expression "iVar9 = 0x10" identifier = number_literal) ;) (if_statement "if (0xffffff < param_3) {\n        iVar9 = 8;\n      }" if (parenthesized_expression "(0xffffff < param_3)" ( (binary_expression "0xffffff < param_3" number_literal < identifier) )) (compound_statement "{\n        iVar9 = 8;\n      }" { (expression_statement "iVar9 = 8;" (assignment_expression "iVar9 = 8" identifier = number_literal) ;) })) (expression_statement "iVar7 = 0x19;" (assignment_expression "iVar7 = 0x19" identifier = number_literal) ;) (if_statement "if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }" if (parenthesized_expression "(0xffffff >= param_3)" ( (binary_expression "0xffffff >= param_3" number_literal >= identifier) )) (compound_statement "{\n        iVar7 = 0x11;\n      }" { (expression_statement "iVar7 = 0x11;" (assignment_expression "iVar7 = 0x11" identifier = number_literal) ;) })) }))) (expression_statement "uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];" (assignment_expression "uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" identifier = (binary_expression "iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" identifier - (cast_expression "(uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" identifier [ (binary_expression "param_3 >> iVar7" identifier >> identifier) ]))))) ;) (expression_statement "param_3 = param_3 << (uVar2 & 0x1f);" (assignment_expression "param_3 = param_3 << (uVar2 & 0x1f)" identifier = (binary_expression "param_3 << (uVar2 & 0x1f)" identifier << (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar10 = param_3 >> 0x10;" (assignment_expression "uVar10 = param_3 >> 0x10" identifier = (binary_expression "param_3 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar10 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar13 = ~param_3 / uVar10;" (assignment_expression "uVar13 = ~param_3 / uVar10" identifier = (binary_expression "~param_3 / uVar10" (unary_expression "~param_3" ~ identifier) / identifier)) ;) (expression_statement "uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);" (assignment_expression "uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f)" identifier = (binary_expression "uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f)" (binary_expression "uVar4 >> (0x20 - uVar2 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar2 & 0x1f)" ( (binary_expression "0x20 - uVar2 & 0x1f" (binary_expression "0x20 - uVar2" number_literal - identifier) & number_literal) ))) | (binary_expression "uVar3 << (uVar2 & 0x1f)" identifier << (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar11 = (param_3 & 0xffff) * uVar13;" (assignment_expression "uVar11 = (param_3 & 0xffff) * uVar13" identifier = (binary_expression "(param_3 & 0xffff) * uVar13" (parenthesized_expression "(param_3 & 0xffff)" ( (binary_expression "param_3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;" (assignment_expression "uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff" identifier = (binary_expression "~param_3 % uVar10 << 0x10 | 0xffff" (binary_expression "~param_3 % uVar10 << 0x10" (binary_expression "~param_3 % uVar10" (unary_expression "~param_3" ~ identifier) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar12 = uVar13;" (assignment_expression "uVar12 = uVar13" identifier = identifier) ;) (if_statement "if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }" if (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) )) (compound_statement "{\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }" { (expression_statement "uVar6 = uVar6 + param_3;" (assignment_expression "uVar6 = uVar6 + param_3" identifier = (binary_expression "uVar6 + param_3" identifier + identifier)) ;) (expression_statement "uVar12 = uVar13 - 1;" (assignment_expression "uVar12 = uVar13 - 1" identifier = (binary_expression "uVar13 - 1" identifier - number_literal)) ;) (if_statement "if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }" if (parenthesized_expression "((param_3 <= uVar6) && (uVar6 < uVar11))" ( (binary_expression "(param_3 <= uVar6) && (uVar6 < uVar11)" (parenthesized_expression "(param_3 <= uVar6)" ( (binary_expression "param_3 <= uVar6" identifier <= identifier) )) && (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) ))) )) (compound_statement "{\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }" { (expression_statement "uVar6 = uVar6 + param_3;" (assignment_expression "uVar6 = uVar6 + param_3" identifier = (binary_expression "uVar6 + param_3" identifier + identifier)) ;) (expression_statement "uVar12 = uVar13 - 2;" (assignment_expression "uVar12 = uVar13 - 2" identifier = (binary_expression "uVar13 - 2" identifier - number_literal)) ;) })) })) (if_statement "if (uVar10 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar14 = (uVar6 - uVar11) / uVar10;" (assignment_expression "uVar14 = (uVar6 - uVar11) / uVar10" identifier = (binary_expression "(uVar6 - uVar11) / uVar10" (parenthesized_expression "(uVar6 - uVar11)" ( (binary_expression "uVar6 - uVar11" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar13 = (param_3 & 0xffff) * uVar14;" (assignment_expression "uVar13 = (param_3 & 0xffff) * uVar14" identifier = (binary_expression "(param_3 & 0xffff) * uVar14" (parenthesized_expression "(param_3 & 0xffff)" ( (binary_expression "param_3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;" (assignment_expression "uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff" identifier = (binary_expression "(uVar6 - uVar11) % uVar10 << 0x10 | 0xffff" (binary_expression "(uVar6 - uVar11) % uVar10 << 0x10" (binary_expression "(uVar6 - uVar11) % uVar10" (parenthesized_expression "(uVar6 - uVar11)" ( (binary_expression "uVar6 - uVar11" identifier - identifier) )) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar11 = param_3 + uVar6;" (assignment_expression "uVar11 = param_3 + uVar6" identifier = (binary_expression "param_3 + uVar6" identifier + identifier)) ;) (expression_statement "uVar10 = uVar14;" (assignment_expression "uVar10 = uVar14" identifier = identifier) ;) (if_statement "if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }" if (parenthesized_expression "(((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13))" ( (binary_expression "((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)" (parenthesized_expression "((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11))" ( (binary_expression "(uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)" (parenthesized_expression "(uVar6 < uVar13)" ( (binary_expression "uVar6 < uVar13" identifier < identifier) )) && (parenthesized_expression "(uVar10 = uVar14 - 1, param_3 <= uVar11)" ( (comma_expression "uVar10 = uVar14 - 1, param_3 <= uVar11" (assignment_expression "uVar10 = uVar14 - 1" identifier = (binary_expression "uVar14 - 1" identifier - number_literal)) , (binary_expression "param_3 <= uVar11" identifier <= identifier)) ))) )) && (parenthesized_expression "(uVar11 < uVar13)" ( (binary_expression "uVar11 < uVar13" identifier < identifier) ))) )) (compound_statement "{\n      uVar10 = uVar14 - 2;\n    }" { (expression_statement "uVar10 = uVar14 - 2;" (assignment_expression "uVar10 = uVar14 - 2" identifier = (binary_expression "uVar14 - 2" identifier - number_literal)) ;) })) (expression_statement "uVar10 = uVar12 << 0x10 | uVar10;" (assignment_expression "uVar10 = uVar12 << 0x10 | uVar10" identifier = (binary_expression "uVar12 << 0x10 | uVar10" (binary_expression "uVar12 << 0x10" identifier << number_literal) | identifier)) ;) (if_statement "if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }" if (parenthesized_expression "(1 < param_2)" ( (binary_expression "1 < param_2" number_literal < identifier) )) (compound_statement "{\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }" { (expression_statement "iVar8 = param_1 + iVar8;" (assignment_expression "iVar8 = param_1 + iVar8" identifier = (binary_expression "param_1 + iVar8" identifier + identifier)) ;) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10" identifier = (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10" (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar12 = uVar4;" (assignment_expression "uVar12 = uVar4" identifier = identifier) ;) (do_statement "do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);" do (compound_statement "{\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      }" { (expression_statement "uVar4 = *(uint *)(iVar8 + -8);" (assignment_expression "uVar4 = *(uint *)(iVar8 + -8)" identifier = (pointer_expression "*(uint *)(iVar8 + -8)" * (cast_expression "(uint *)(iVar8 + -8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + -8)" ( (binary_expression "iVar8 + -8" identifier + number_literal) ))))) ;) (expression_statement "uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);" (assignment_expression "uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f)" identifier = (binary_expression "uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f)" (binary_expression "uVar12 << (uVar2 & 0x1f)" identifier << (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar4 >> (0x20 - uVar2 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar2 & 0x1f)" ( (binary_expression "0x20 - uVar2 & 0x1f" (binary_expression "0x20 - uVar2" number_literal - identifier) & number_literal) ))))) ;) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" identifier = (binary_expression "iVar8 + -4" identifier + number_literal)) ;) (expression_statement "lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);" (assignment_expression "lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12)" identifier = (binary_expression "lVar1 + CONCAT44(uVar3 + 1,uVar12)" identifier + (call_expression "CONCAT44(uVar3 + 1,uVar12)" identifier (argument_list "(uVar3 + 1,uVar12)" ( (binary_expression "uVar3 + 1" identifier + number_literal) , identifier ))))) ;) (expression_statement "uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;" (assignment_expression "uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier = (binary_expression "uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier - (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * param_3" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * identifier))) ;) (expression_statement "uVar3 = param_3;" (assignment_expression "uVar3 = param_3" identifier = identifier) ;) (if_statement "if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }" if (parenthesized_expression "(uVar12 <= (uint)lVar1)" ( (binary_expression "uVar12 <= (uint)lVar1" identifier <= (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n          uVar3 = 0;\n        }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) })) (expression_statement "uVar3 = uVar12 + uVar3;" (assignment_expression "uVar3 = uVar12 + uVar3" identifier = (binary_expression "uVar12 + uVar3" identifier + identifier)) ;) (if_statement "if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }" if (parenthesized_expression "(param_3 <= uVar3)" ( (binary_expression "param_3 <= uVar3" identifier <= identifier) )) (compound_statement "{\n          uVar3 = uVar3 - param_3;\n        }" { (expression_statement "uVar3 = uVar3 - param_3;" (assignment_expression "uVar3 = uVar3 - param_3" identifier = (binary_expression "uVar3 - param_3" identifier - identifier)) ;) })) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10" identifier = (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10" (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar12 = uVar4;" (assignment_expression "uVar12 = uVar4" identifier = identifier) ;) }) while (parenthesized_expression "(param_1 + 4 != iVar8)" ( (binary_expression "param_1 + 4 != iVar8" (binary_expression "param_1 + 4" identifier + number_literal) != identifier) )) ;) })) (expression_statement "iVar8 = uVar4 << (uVar2 & 0x1f);" (assignment_expression "iVar8 = uVar4 << (uVar2 & 0x1f)" identifier = (binary_expression "uVar4 << (uVar2 & 0x1f)" identifier << (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8)" identifier = (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8)" (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10" (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) + (call_expression "CONCAT44(uVar3 + 1,iVar8)" identifier (argument_list "(uVar3 + 1,iVar8)" ( (binary_expression "uVar3 + 1" identifier + number_literal) , identifier ))))) ;) (expression_statement "uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;" (assignment_expression "uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier = (binary_expression "iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier - (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * param_3" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * identifier))) ;) (expression_statement "uVar3 = param_3;" (assignment_expression "uVar3 = param_3" identifier = identifier) ;) (if_statement "if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }" if (parenthesized_expression "(uVar4 <= (uint)lVar1)" ( (binary_expression "uVar4 <= (uint)lVar1" identifier <= (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n      uVar3 = 0;\n    }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) })) (expression_statement "uVar4 = uVar4 + uVar3;" (assignment_expression "uVar4 = uVar4 + uVar3" identifier = (binary_expression "uVar4 + uVar3" identifier + identifier)) ;) (if_statement "if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }" if (parenthesized_expression "(param_3 <= uVar4)" ( (binary_expression "param_3 <= uVar4" identifier <= identifier) )) (compound_statement "{\n      uVar4 = uVar4 - param_3;\n    }" { (expression_statement "uVar4 = uVar4 - param_3;" (assignment_expression "uVar4 = uVar4 - param_3" identifier = (binary_expression "uVar4 - param_3" identifier - identifier)) ;) })) (return_statement "return uVar4 >> (uVar2 & 0x1f);" return (binary_expression "uVar4 >> (uVar2 & 0x1f)" identifier >> (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) ))) ;) })) (if_statement "if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }" if (parenthesized_expression "(param_3 <= uVar2)" ( (binary_expression "param_3 <= uVar2" identifier <= identifier) )) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n  }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) })) (expression_statement "uVar3 = param_3 >> 0x10;" (assignment_expression "uVar3 = param_3 >> 0x10" identifier = (binary_expression "param_3 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }" if (parenthesized_expression "(param_2 != 1)" ( (binary_expression "param_2 != 1" identifier != number_literal) )) (compound_statement "{\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }" { (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar6 = ~param_3 / uVar3;" (assignment_expression "uVar6 = ~param_3 / uVar3" identifier = (binary_expression "~param_3 / uVar3" (unary_expression "~param_3" ~ identifier) / identifier)) ;) (expression_statement "uVar12 = (param_3 & 0xffff) * uVar6;" (assignment_expression "uVar12 = (param_3 & 0xffff) * uVar6" identifier = (binary_expression "(param_3 & 0xffff) * uVar6" (parenthesized_expression "(param_3 & 0xffff)" ( (binary_expression "param_3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;" (assignment_expression "uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff" identifier = (binary_expression "~param_3 % uVar3 << 0x10 | 0xffff" (binary_expression "~param_3 % uVar3 << 0x10" (binary_expression "~param_3 % uVar3" (unary_expression "~param_3" ~ identifier) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar4 = uVar6;" (assignment_expression "uVar4 = uVar6" identifier = identifier) ;) (if_statement "if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }" if (parenthesized_expression "(uVar10 < uVar12)" ( (binary_expression "uVar10 < uVar12" identifier < identifier) )) (compound_statement "{\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }" { (expression_statement "uVar10 = uVar10 + param_3;" (assignment_expression "uVar10 = uVar10 + param_3" identifier = (binary_expression "uVar10 + param_3" identifier + identifier)) ;) (expression_statement "uVar4 = uVar6 - 1;" (assignment_expression "uVar4 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ;) (if_statement "if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }" if (parenthesized_expression "((param_3 <= uVar10) && (uVar10 < uVar12))" ( (binary_expression "(param_3 <= uVar10) && (uVar10 < uVar12)" (parenthesized_expression "(param_3 <= uVar10)" ( (binary_expression "param_3 <= uVar10" identifier <= identifier) )) && (parenthesized_expression "(uVar10 < uVar12)" ( (binary_expression "uVar10 < uVar12" identifier < identifier) ))) )) (compound_statement "{\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }" { (expression_statement "uVar4 = uVar6 - 2;" (assignment_expression "uVar4 = uVar6 - 2" identifier = (binary_expression "uVar6 - 2" identifier - number_literal)) ;) (expression_statement "uVar10 = uVar10 + param_3;" (assignment_expression "uVar10 = uVar10 + param_3" identifier = (binary_expression "uVar10 + param_3" identifier + identifier)) ;) })) })) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = (uVar10 - uVar12) / uVar3;" (assignment_expression "uVar11 = (uVar10 - uVar12) / uVar3" identifier = (binary_expression "(uVar10 - uVar12) / uVar3" (parenthesized_expression "(uVar10 - uVar12)" ( (binary_expression "uVar10 - uVar12" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar6 = (param_3 & 0xffff) * uVar11;" (assignment_expression "uVar6 = (param_3 & 0xffff) * uVar11" identifier = (binary_expression "(param_3 & 0xffff) * uVar11" (parenthesized_expression "(param_3 & 0xffff)" ( (binary_expression "param_3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;" (assignment_expression "uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff" identifier = (binary_expression "(uVar10 - uVar12) % uVar3 << 0x10 | 0xffff" (binary_expression "(uVar10 - uVar12) % uVar3 << 0x10" (binary_expression "(uVar10 - uVar12) % uVar3" (parenthesized_expression "(uVar10 - uVar12)" ( (binary_expression "uVar10 - uVar12" identifier - identifier) )) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar12 = param_3 + uVar10;" (assignment_expression "uVar12 = param_3 + uVar10" identifier = (binary_expression "param_3 + uVar10" identifier + identifier)) ;) (expression_statement "uVar3 = uVar11;" (assignment_expression "uVar3 = uVar11" identifier = identifier) ;) (if_statement "if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }" if (parenthesized_expression "(((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6))" ( (binary_expression "((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)" (parenthesized_expression "((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12))" ( (binary_expression "(uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)" (parenthesized_expression "(uVar10 < uVar6)" ( (binary_expression "uVar10 < uVar6" identifier < identifier) )) && (parenthesized_expression "(uVar3 = uVar11 - 1, param_3 <= uVar12)" ( (comma_expression "uVar3 = uVar11 - 1, param_3 <= uVar12" (assignment_expression "uVar3 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) , (binary_expression "param_3 <= uVar12" identifier <= identifier)) ))) )) && (parenthesized_expression "(uVar12 < uVar6)" ( (binary_expression "uVar12 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n      uVar3 = uVar11 - 2;\n    }" { (expression_statement "uVar3 = uVar11 - 2;" (assignment_expression "uVar3 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) })) (expression_statement "uVar3 = uVar4 << 0x10 | uVar3;" (assignment_expression "uVar3 = uVar4 << 0x10 | uVar3" identifier = (binary_expression "uVar4 << 0x10 | uVar3" (binary_expression "uVar4 << 0x10" identifier << number_literal) | identifier)) ;) (if_statement "if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }" if (parenthesized_expression "(1 < param_2)" ( (binary_expression "1 < param_2" number_literal < identifier) )) (compound_statement "{\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }" { (expression_statement "iVar8 = param_1 + iVar8;" (assignment_expression "iVar8 = param_1 + iVar8" identifier = (binary_expression "param_1 + iVar8" identifier + identifier)) ;) (expression_statement "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;" (assignment_expression "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3" identifier = (binary_expression "(ulonglong)uVar2 * (ulonglong)uVar3" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (do_statement "do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);" do (compound_statement "{\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      }" { (expression_statement "lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));" (assignment_expression "lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8))" identifier = (binary_expression "lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8))" identifier + (call_expression "CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8))" identifier (argument_list "(uVar2 + 1,*(int *)(iVar8 + -8))" ( (binary_expression "uVar2 + 1" identifier + number_literal) , (pointer_expression "*(int *)(iVar8 + -8)" * (cast_expression "(int *)(iVar8 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + -8)" ( (binary_expression "iVar8 + -8" identifier + number_literal) )))) ))))) ;) (expression_statement "uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;" (assignment_expression "uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier = (binary_expression "*(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3" (pointer_expression "*(int *)(iVar8 + -8)" * (cast_expression "(int *)(iVar8 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + -8)" ( (binary_expression "iVar8 + -8" identifier + number_literal) )))) - (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * param_3" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * identifier))) ;) (expression_statement "uVar4 = param_3;" (assignment_expression "uVar4 = param_3" identifier = identifier) ;) (if_statement "if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }" if (parenthesized_expression "(uVar2 <= (uint)lVar1)" ( (binary_expression "uVar2 <= (uint)lVar1" identifier <= (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n          uVar4 = 0;\n        }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) })) (expression_statement "uVar2 = uVar2 + uVar4;" (assignment_expression "uVar2 = uVar2 + uVar4" identifier = (binary_expression "uVar2 + uVar4" identifier + identifier)) ;) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" identifier = (binary_expression "iVar8 + -4" identifier + number_literal)) ;) (if_statement "if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }" if (parenthesized_expression "(param_3 <= uVar2)" ( (binary_expression "param_3 <= uVar2" identifier <= identifier) )) (compound_statement "{\n          uVar2 = uVar2 - param_3;\n        }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) })) (expression_statement "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;" (assignment_expression "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3" identifier = (binary_expression "(ulonglong)uVar2 * (ulonglong)uVar3" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) }) while (parenthesized_expression "(param_1 + 4 != iVar8)" ( (binary_expression "param_1 + 4 != iVar8" (binary_expression "param_1 + 4" identifier + number_literal) != identifier) )) ;) (return_statement "return uVar2;" return identifier ;) })) })) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "mp_limb_t __gmpn_mod_1(mp_srcptr ap,mp_size_t n,mp_limb_t b)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  mp_limb_t mVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  mp_srcptr pmVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint uVar16;\n  \n  iVar8 = n * 4;\n  if (n == 0) {\n    return 0;\n  }\n  iVar10 = n + -1;\n  uVar2 = ap[iVar10];\n  if (-1 < (int)b) {\n    if (uVar2 < b) {\n      n = n + -1;\n      if (n == 0) {\n        return uVar2;\n      }\n      uVar5 = (ap + iVar10)[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar5 = uVar2;\n    }\n    if (b < 0x10000) {\n      iVar10 = 0;\n      if (0xff < b) {\n        iVar10 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= b) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar10 = 0x10;\n      if (0xffffff < b) {\n        iVar10 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= b) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar11 = iVar10 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7];\n    uVar2 = b << (uVar11 & 0x1f);\n    uVar12 = uVar2 >> 0x10;\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar15 = ~uVar2 / uVar12;\n    uVar3 = uVar5 >> (0x20 - uVar11 & 0x1f) | uVar3 << (uVar11 & 0x1f);\n    uVar13 = (uVar2 & 0xffff) * uVar15;\n    uVar6 = ~uVar2 % uVar12 << 0x10 | 0xffff;\n    uVar14 = uVar15;\n    if (uVar6 < uVar13) {\n      uVar6 = uVar6 + uVar2;\n      uVar14 = uVar15 - 1;\n      if ((uVar2 <= uVar6) && (uVar6 < uVar13)) {\n        uVar6 = uVar6 + uVar2;\n        uVar14 = uVar15 - 2;\n      }\n    }\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar16 = (uVar6 - uVar13) / uVar12;\n    uVar15 = (uVar2 & 0xffff) * uVar16;\n    uVar6 = (uVar6 - uVar13) % uVar12 << 0x10 | 0xffff;\n    uVar13 = uVar2 + uVar6;\n    uVar12 = uVar16;\n    if (((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)) && (uVar13 < uVar15)) {\n      uVar12 = uVar16 - 2;\n    }\n    uVar12 = uVar14 << 0x10 | uVar12;\n    if (1 < n) {\n      pmVar9 = (mp_srcptr)((int)ap + iVar8);\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n      uVar14 = uVar5;\n      do {\n        uVar5 = pmVar9[-2];\n        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);\n        pmVar9 = pmVar9 + -1;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);\n        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n        uVar3 = uVar2;\n        if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar14 + uVar3;\n        if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n        uVar14 = uVar5;\n      } while (ap + 1 != pmVar9);\n    }\n    iVar8 = uVar5 << (uVar11 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12 + CONCAT44(uVar3 + 1,iVar8);\n    uVar5 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n    uVar3 = uVar2;\n    if (uVar5 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar5 = uVar5 + uVar3;\n    if (uVar2 <= uVar5) {\n      uVar5 = uVar5 - uVar2;\n    }\n    return uVar5 >> (uVar11 & 0x1f);\n  }\n  if (b <= uVar2) {\n    uVar2 = uVar2 - b;\n  }\n  uVar3 = b >> 0x10;\n  if (n != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar14 = ~b / uVar3;\n    uVar12 = (b & 0xffff) * uVar14;\n    uVar11 = ~b % uVar3 << 0x10 | 0xffff;\n    uVar5 = uVar14;\n    if (uVar11 < uVar12) {\n      uVar11 = uVar11 + b;\n      uVar5 = uVar14 - 1;\n      if ((b <= uVar11) && (uVar11 < uVar12)) {\n        uVar5 = uVar14 - 2;\n        uVar11 = uVar11 + b;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = (uVar11 - uVar12) / uVar3;\n    uVar14 = (b & 0xffff) * uVar6;\n    uVar11 = (uVar11 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = b + uVar11;\n    uVar3 = uVar6;\n    if (((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)) && (uVar12 < uVar14)) {\n      uVar3 = uVar6 - 2;\n    }\n    uVar3 = uVar5 << 0x10 | uVar3;\n    if (1 < n) {\n      pmVar9 = ap + n;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);\n        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;\n        mVar4 = b;\n        if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }\n        uVar2 = uVar2 + mVar4;\n        pmVar9 = pmVar9 + -1;\n        if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (ap + 1 != pmVar9);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}\n\n" (function_definition "mp_limb_t __gmpn_mod_1(mp_srcptr ap,mp_size_t n,mp_limb_t b)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  mp_limb_t mVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  mp_srcptr pmVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint uVar16;\n  \n  iVar8 = n * 4;\n  if (n == 0) {\n    return 0;\n  }\n  iVar10 = n + -1;\n  uVar2 = ap[iVar10];\n  if (-1 < (int)b) {\n    if (uVar2 < b) {\n      n = n + -1;\n      if (n == 0) {\n        return uVar2;\n      }\n      uVar5 = (ap + iVar10)[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar5 = uVar2;\n    }\n    if (b < 0x10000) {\n      iVar10 = 0;\n      if (0xff < b) {\n        iVar10 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= b) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar10 = 0x10;\n      if (0xffffff < b) {\n        iVar10 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= b) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar11 = iVar10 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7];\n    uVar2 = b << (uVar11 & 0x1f);\n    uVar12 = uVar2 >> 0x10;\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar15 = ~uVar2 / uVar12;\n    uVar3 = uVar5 >> (0x20 - uVar11 & 0x1f) | uVar3 << (uVar11 & 0x1f);\n    uVar13 = (uVar2 & 0xffff) * uVar15;\n    uVar6 = ~uVar2 % uVar12 << 0x10 | 0xffff;\n    uVar14 = uVar15;\n    if (uVar6 < uVar13) {\n      uVar6 = uVar6 + uVar2;\n      uVar14 = uVar15 - 1;\n      if ((uVar2 <= uVar6) && (uVar6 < uVar13)) {\n        uVar6 = uVar6 + uVar2;\n        uVar14 = uVar15 - 2;\n      }\n    }\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar16 = (uVar6 - uVar13) / uVar12;\n    uVar15 = (uVar2 & 0xffff) * uVar16;\n    uVar6 = (uVar6 - uVar13) % uVar12 << 0x10 | 0xffff;\n    uVar13 = uVar2 + uVar6;\n    uVar12 = uVar16;\n    if (((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)) && (uVar13 < uVar15)) {\n      uVar12 = uVar16 - 2;\n    }\n    uVar12 = uVar14 << 0x10 | uVar12;\n    if (1 < n) {\n      pmVar9 = (mp_srcptr)((int)ap + iVar8);\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n      uVar14 = uVar5;\n      do {\n        uVar5 = pmVar9[-2];\n        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);\n        pmVar9 = pmVar9 + -1;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);\n        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n        uVar3 = uVar2;\n        if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar14 + uVar3;\n        if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n        uVar14 = uVar5;\n      } while (ap + 1 != pmVar9);\n    }\n    iVar8 = uVar5 << (uVar11 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12 + CONCAT44(uVar3 + 1,iVar8);\n    uVar5 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n    uVar3 = uVar2;\n    if (uVar5 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar5 = uVar5 + uVar3;\n    if (uVar2 <= uVar5) {\n      uVar5 = uVar5 - uVar2;\n    }\n    return uVar5 >> (uVar11 & 0x1f);\n  }\n  if (b <= uVar2) {\n    uVar2 = uVar2 - b;\n  }\n  uVar3 = b >> 0x10;\n  if (n != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar14 = ~b / uVar3;\n    uVar12 = (b & 0xffff) * uVar14;\n    uVar11 = ~b % uVar3 << 0x10 | 0xffff;\n    uVar5 = uVar14;\n    if (uVar11 < uVar12) {\n      uVar11 = uVar11 + b;\n      uVar5 = uVar14 - 1;\n      if ((b <= uVar11) && (uVar11 < uVar12)) {\n        uVar5 = uVar14 - 2;\n        uVar11 = uVar11 + b;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = (uVar11 - uVar12) / uVar3;\n    uVar14 = (b & 0xffff) * uVar6;\n    uVar11 = (uVar11 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = b + uVar11;\n    uVar3 = uVar6;\n    if (((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)) && (uVar12 < uVar14)) {\n      uVar3 = uVar6 - 2;\n    }\n    uVar3 = uVar5 << 0x10 | uVar3;\n    if (1 < n) {\n      pmVar9 = ap + n;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);\n        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;\n        mVar4 = b;\n        if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }\n        uVar2 = uVar2 + mVar4;\n        pmVar9 = pmVar9 + -1;\n        if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (ap + 1 != pmVar9);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}" type_identifier (function_declarator "__gmpn_mod_1(mp_srcptr ap,mp_size_t n,mp_limb_t b)" identifier (parameter_list "(mp_srcptr ap,mp_size_t n,mp_limb_t b)" ( (parameter_declaration "mp_srcptr ap" type_identifier identifier) , (parameter_declaration "mp_size_t n" type_identifier identifier) , (parameter_declaration "mp_limb_t b" type_identifier identifier) ))) (compound_statement "{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  mp_limb_t mVar4;\n  uint uVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  mp_srcptr pmVar9;\n  int iVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  uint uVar15;\n  uint uVar16;\n  \n  iVar8 = n * 4;\n  if (n == 0) {\n    return 0;\n  }\n  iVar10 = n + -1;\n  uVar2 = ap[iVar10];\n  if (-1 < (int)b) {\n    if (uVar2 < b) {\n      n = n + -1;\n      if (n == 0) {\n        return uVar2;\n      }\n      uVar5 = (ap + iVar10)[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar5 = uVar2;\n    }\n    if (b < 0x10000) {\n      iVar10 = 0;\n      if (0xff < b) {\n        iVar10 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= b) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar10 = 0x10;\n      if (0xffffff < b) {\n        iVar10 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= b) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar11 = iVar10 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7];\n    uVar2 = b << (uVar11 & 0x1f);\n    uVar12 = uVar2 >> 0x10;\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar15 = ~uVar2 / uVar12;\n    uVar3 = uVar5 >> (0x20 - uVar11 & 0x1f) | uVar3 << (uVar11 & 0x1f);\n    uVar13 = (uVar2 & 0xffff) * uVar15;\n    uVar6 = ~uVar2 % uVar12 << 0x10 | 0xffff;\n    uVar14 = uVar15;\n    if (uVar6 < uVar13) {\n      uVar6 = uVar6 + uVar2;\n      uVar14 = uVar15 - 1;\n      if ((uVar2 <= uVar6) && (uVar6 < uVar13)) {\n        uVar6 = uVar6 + uVar2;\n        uVar14 = uVar15 - 2;\n      }\n    }\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar16 = (uVar6 - uVar13) / uVar12;\n    uVar15 = (uVar2 & 0xffff) * uVar16;\n    uVar6 = (uVar6 - uVar13) % uVar12 << 0x10 | 0xffff;\n    uVar13 = uVar2 + uVar6;\n    uVar12 = uVar16;\n    if (((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)) && (uVar13 < uVar15)) {\n      uVar12 = uVar16 - 2;\n    }\n    uVar12 = uVar14 << 0x10 | uVar12;\n    if (1 < n) {\n      pmVar9 = (mp_srcptr)((int)ap + iVar8);\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n      uVar14 = uVar5;\n      do {\n        uVar5 = pmVar9[-2];\n        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);\n        pmVar9 = pmVar9 + -1;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);\n        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n        uVar3 = uVar2;\n        if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar14 + uVar3;\n        if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n        uVar14 = uVar5;\n      } while (ap + 1 != pmVar9);\n    }\n    iVar8 = uVar5 << (uVar11 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12 + CONCAT44(uVar3 + 1,iVar8);\n    uVar5 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n    uVar3 = uVar2;\n    if (uVar5 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar5 = uVar5 + uVar3;\n    if (uVar2 <= uVar5) {\n      uVar5 = uVar5 - uVar2;\n    }\n    return uVar5 >> (uVar11 & 0x1f);\n  }\n  if (b <= uVar2) {\n    uVar2 = uVar2 - b;\n  }\n  uVar3 = b >> 0x10;\n  if (n != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar14 = ~b / uVar3;\n    uVar12 = (b & 0xffff) * uVar14;\n    uVar11 = ~b % uVar3 << 0x10 | 0xffff;\n    uVar5 = uVar14;\n    if (uVar11 < uVar12) {\n      uVar11 = uVar11 + b;\n      uVar5 = uVar14 - 1;\n      if ((b <= uVar11) && (uVar11 < uVar12)) {\n        uVar5 = uVar14 - 2;\n        uVar11 = uVar11 + b;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = (uVar11 - uVar12) / uVar3;\n    uVar14 = (b & 0xffff) * uVar6;\n    uVar11 = (uVar11 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = b + uVar11;\n    uVar3 = uVar6;\n    if (((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)) && (uVar12 < uVar14)) {\n      uVar3 = uVar6 - 2;\n    }\n    uVar3 = uVar5 << 0x10 | uVar3;\n    if (1 < n) {\n      pmVar9 = ap + n;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);\n        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;\n        mVar4 = b;\n        if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }\n        uVar2 = uVar2 + mVar4;\n        pmVar9 = pmVar9 + -1;\n        if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (ap + 1 != pmVar9);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "mp_limb_t mVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "mp_srcptr pmVar9;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "uint uVar16;" type_identifier identifier ;) (expression_statement "iVar8 = n * 4;" (assignment_expression "iVar8 = n * 4" identifier = (binary_expression "n * 4" identifier * number_literal)) ;) (if_statement "if (n == 0) {\n    return 0;\n  }" if (parenthesized_expression "(n == 0)" ( (binary_expression "n == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar10 = n + -1;" (assignment_expression "iVar10 = n + -1" identifier = (binary_expression "n + -1" identifier + number_literal)) ;) (expression_statement "uVar2 = ap[iVar10];" (assignment_expression "uVar2 = ap[iVar10]" identifier = (subscript_expression "ap[iVar10]" identifier [ identifier ])) ;) (if_statement "if (-1 < (int)b) {\n    if (uVar2 < b) {\n      n = n + -1;\n      if (n == 0) {\n        return uVar2;\n      }\n      uVar5 = (ap + iVar10)[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar5 = uVar2;\n    }\n    if (b < 0x10000) {\n      iVar10 = 0;\n      if (0xff < b) {\n        iVar10 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= b) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar10 = 0x10;\n      if (0xffffff < b) {\n        iVar10 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= b) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar11 = iVar10 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7];\n    uVar2 = b << (uVar11 & 0x1f);\n    uVar12 = uVar2 >> 0x10;\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar15 = ~uVar2 / uVar12;\n    uVar3 = uVar5 >> (0x20 - uVar11 & 0x1f) | uVar3 << (uVar11 & 0x1f);\n    uVar13 = (uVar2 & 0xffff) * uVar15;\n    uVar6 = ~uVar2 % uVar12 << 0x10 | 0xffff;\n    uVar14 = uVar15;\n    if (uVar6 < uVar13) {\n      uVar6 = uVar6 + uVar2;\n      uVar14 = uVar15 - 1;\n      if ((uVar2 <= uVar6) && (uVar6 < uVar13)) {\n        uVar6 = uVar6 + uVar2;\n        uVar14 = uVar15 - 2;\n      }\n    }\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar16 = (uVar6 - uVar13) / uVar12;\n    uVar15 = (uVar2 & 0xffff) * uVar16;\n    uVar6 = (uVar6 - uVar13) % uVar12 << 0x10 | 0xffff;\n    uVar13 = uVar2 + uVar6;\n    uVar12 = uVar16;\n    if (((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)) && (uVar13 < uVar15)) {\n      uVar12 = uVar16 - 2;\n    }\n    uVar12 = uVar14 << 0x10 | uVar12;\n    if (1 < n) {\n      pmVar9 = (mp_srcptr)((int)ap + iVar8);\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n      uVar14 = uVar5;\n      do {\n        uVar5 = pmVar9[-2];\n        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);\n        pmVar9 = pmVar9 + -1;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);\n        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n        uVar3 = uVar2;\n        if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar14 + uVar3;\n        if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n        uVar14 = uVar5;\n      } while (ap + 1 != pmVar9);\n    }\n    iVar8 = uVar5 << (uVar11 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12 + CONCAT44(uVar3 + 1,iVar8);\n    uVar5 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n    uVar3 = uVar2;\n    if (uVar5 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar5 = uVar5 + uVar3;\n    if (uVar2 <= uVar5) {\n      uVar5 = uVar5 - uVar2;\n    }\n    return uVar5 >> (uVar11 & 0x1f);\n  }" if (parenthesized_expression "(-1 < (int)b)" ( (binary_expression "-1 < (int)b" number_literal < (cast_expression "(int)b" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if (uVar2 < b) {\n      n = n + -1;\n      if (n == 0) {\n        return uVar2;\n      }\n      uVar5 = (ap + iVar10)[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar5 = uVar2;\n    }\n    if (b < 0x10000) {\n      iVar10 = 0;\n      if (0xff < b) {\n        iVar10 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= b) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar10 = 0x10;\n      if (0xffffff < b) {\n        iVar10 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= b) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar11 = iVar10 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7];\n    uVar2 = b << (uVar11 & 0x1f);\n    uVar12 = uVar2 >> 0x10;\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar15 = ~uVar2 / uVar12;\n    uVar3 = uVar5 >> (0x20 - uVar11 & 0x1f) | uVar3 << (uVar11 & 0x1f);\n    uVar13 = (uVar2 & 0xffff) * uVar15;\n    uVar6 = ~uVar2 % uVar12 << 0x10 | 0xffff;\n    uVar14 = uVar15;\n    if (uVar6 < uVar13) {\n      uVar6 = uVar6 + uVar2;\n      uVar14 = uVar15 - 1;\n      if ((uVar2 <= uVar6) && (uVar6 < uVar13)) {\n        uVar6 = uVar6 + uVar2;\n        uVar14 = uVar15 - 2;\n      }\n    }\n    if (uVar12 == 0) {\n      trap(7);\n    }\n    uVar16 = (uVar6 - uVar13) / uVar12;\n    uVar15 = (uVar2 & 0xffff) * uVar16;\n    uVar6 = (uVar6 - uVar13) % uVar12 << 0x10 | 0xffff;\n    uVar13 = uVar2 + uVar6;\n    uVar12 = uVar16;\n    if (((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)) && (uVar13 < uVar15)) {\n      uVar12 = uVar16 - 2;\n    }\n    uVar12 = uVar14 << 0x10 | uVar12;\n    if (1 < n) {\n      pmVar9 = (mp_srcptr)((int)ap + iVar8);\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n      uVar14 = uVar5;\n      do {\n        uVar5 = pmVar9[-2];\n        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);\n        pmVar9 = pmVar9 + -1;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);\n        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n        uVar3 = uVar2;\n        if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar14 + uVar3;\n        if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n        uVar14 = uVar5;\n      } while (ap + 1 != pmVar9);\n    }\n    iVar8 = uVar5 << (uVar11 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12 + CONCAT44(uVar3 + 1,iVar8);\n    uVar5 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n    uVar3 = uVar2;\n    if (uVar5 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar5 = uVar5 + uVar3;\n    if (uVar2 <= uVar5) {\n      uVar5 = uVar5 - uVar2;\n    }\n    return uVar5 >> (uVar11 & 0x1f);\n  }" { (if_statement "if (uVar2 < b) {\n      n = n + -1;\n      if (n == 0) {\n        return uVar2;\n      }\n      uVar5 = (ap + iVar10)[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar5 = uVar2;\n    }" if (parenthesized_expression "(uVar2 < b)" ( (binary_expression "uVar2 < b" identifier < identifier) )) (compound_statement "{\n      n = n + -1;\n      if (n == 0) {\n        return uVar2;\n      }\n      uVar5 = (ap + iVar10)[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }" { (expression_statement "n = n + -1;" (assignment_expression "n = n + -1" identifier = (binary_expression "n + -1" identifier + number_literal)) ;) (if_statement "if (n == 0) {\n        return uVar2;\n      }" if (parenthesized_expression "(n == 0)" ( (binary_expression "n == 0" identifier == number_literal) )) (compound_statement "{\n        return uVar2;\n      }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "uVar5 = (ap + iVar10)[-1];" (assignment_expression "uVar5 = (ap + iVar10)[-1]" identifier = (subscript_expression "(ap + iVar10)[-1]" (parenthesized_expression "(ap + iVar10)" ( (binary_expression "ap + iVar10" identifier + identifier) )) [ number_literal ])) ;) (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" identifier = identifier) ;) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" identifier = (binary_expression "iVar8 + -4" identifier + number_literal)) ;) }) (else_clause "else {\n      uVar3 = 0;\n      uVar5 = uVar2;\n    }" else (compound_statement "{\n      uVar3 = 0;\n      uVar5 = uVar2;\n    }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = uVar2;" (assignment_expression "uVar5 = uVar2" identifier = identifier) ;) }))) (if_statement "if (b < 0x10000) {\n      iVar10 = 0;\n      if (0xff < b) {\n        iVar10 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= b) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar10 = 0x10;\n      if (0xffffff < b) {\n        iVar10 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= b) {\n        iVar7 = 0x11;\n      }\n    }" if (parenthesized_expression "(b < 0x10000)" ( (binary_expression "b < 0x10000" identifier < number_literal) )) (compound_statement "{\n      iVar10 = 0;\n      if (0xff < b) {\n        iVar10 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= b) {\n        iVar7 = 1;\n      }\n    }" { (expression_statement "iVar10 = 0;" (assignment_expression "iVar10 = 0" identifier = number_literal) ;) (if_statement "if (0xff < b) {\n        iVar10 = 0x18;\n      }" if (parenthesized_expression "(0xff < b)" ( (binary_expression "0xff < b" number_literal < identifier) )) (compound_statement "{\n        iVar10 = 0x18;\n      }" { (expression_statement "iVar10 = 0x18;" (assignment_expression "iVar10 = 0x18" identifier = number_literal) ;) })) (expression_statement "iVar7 = 9;" (assignment_expression "iVar7 = 9" identifier = number_literal) ;) (if_statement "if (0xff >= b) {\n        iVar7 = 1;\n      }" if (parenthesized_expression "(0xff >= b)" ( (binary_expression "0xff >= b" number_literal >= identifier) )) (compound_statement "{\n        iVar7 = 1;\n      }" { (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) })) }) (else_clause "else {\n      iVar10 = 0x10;\n      if (0xffffff < b) {\n        iVar10 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= b) {\n        iVar7 = 0x11;\n      }\n    }" else (compound_statement "{\n      iVar10 = 0x10;\n      if (0xffffff < b) {\n        iVar10 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= b) {\n        iVar7 = 0x11;\n      }\n    }" { (expression_statement "iVar10 = 0x10;" (assignment_expression "iVar10 = 0x10" identifier = number_literal) ;) (if_statement "if (0xffffff < b) {\n        iVar10 = 8;\n      }" if (parenthesized_expression "(0xffffff < b)" ( (binary_expression "0xffffff < b" number_literal < identifier) )) (compound_statement "{\n        iVar10 = 8;\n      }" { (expression_statement "iVar10 = 8;" (assignment_expression "iVar10 = 8" identifier = number_literal) ;) })) (expression_statement "iVar7 = 0x19;" (assignment_expression "iVar7 = 0x19" identifier = number_literal) ;) (if_statement "if (0xffffff >= b) {\n        iVar7 = 0x11;\n      }" if (parenthesized_expression "(0xffffff >= b)" ( (binary_expression "0xffffff >= b" number_literal >= identifier) )) (compound_statement "{\n        iVar7 = 0x11;\n      }" { (expression_statement "iVar7 = 0x11;" (assignment_expression "iVar7 = 0x11" identifier = number_literal) ;) })) }))) (expression_statement "uVar11 = iVar10 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7];" (assignment_expression "uVar11 = iVar10 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7]" identifier = (binary_expression "iVar10 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7]" identifier - (cast_expression "(uint)(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)PTR___gmpn_clz_tab_0009718c[b >> iVar7]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "PTR___gmpn_clz_tab_0009718c[b >> iVar7]" identifier [ (binary_expression "b >> iVar7" identifier >> identifier) ]))))) ;) (expression_statement "uVar2 = b << (uVar11 & 0x1f);" (assignment_expression "uVar2 = b << (uVar11 & 0x1f)" identifier = (binary_expression "b << (uVar11 & 0x1f)" identifier << (parenthesized_expression "(uVar11 & 0x1f)" ( (binary_expression "uVar11 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar12 = uVar2 >> 0x10;" (assignment_expression "uVar12 = uVar2 >> 0x10" identifier = (binary_expression "uVar2 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar12 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar12 == 0)" ( (binary_expression "uVar12 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar15 = ~uVar2 / uVar12;" (assignment_expression "uVar15 = ~uVar2 / uVar12" identifier = (binary_expression "~uVar2 / uVar12" (unary_expression "~uVar2" ~ identifier) / identifier)) ;) (expression_statement "uVar3 = uVar5 >> (0x20 - uVar11 & 0x1f) | uVar3 << (uVar11 & 0x1f);" (assignment_expression "uVar3 = uVar5 >> (0x20 - uVar11 & 0x1f) | uVar3 << (uVar11 & 0x1f)" identifier = (binary_expression "uVar5 >> (0x20 - uVar11 & 0x1f) | uVar3 << (uVar11 & 0x1f)" (binary_expression "uVar5 >> (0x20 - uVar11 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar11 & 0x1f)" ( (binary_expression "0x20 - uVar11 & 0x1f" (binary_expression "0x20 - uVar11" number_literal - identifier) & number_literal) ))) | (binary_expression "uVar3 << (uVar11 & 0x1f)" identifier << (parenthesized_expression "(uVar11 & 0x1f)" ( (binary_expression "uVar11 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar13 = (uVar2 & 0xffff) * uVar15;" (assignment_expression "uVar13 = (uVar2 & 0xffff) * uVar15" identifier = (binary_expression "(uVar2 & 0xffff) * uVar15" (parenthesized_expression "(uVar2 & 0xffff)" ( (binary_expression "uVar2 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar6 = ~uVar2 % uVar12 << 0x10 | 0xffff;" (assignment_expression "uVar6 = ~uVar2 % uVar12 << 0x10 | 0xffff" identifier = (binary_expression "~uVar2 % uVar12 << 0x10 | 0xffff" (binary_expression "~uVar2 % uVar12 << 0x10" (binary_expression "~uVar2 % uVar12" (unary_expression "~uVar2" ~ identifier) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar14 = uVar15;" (assignment_expression "uVar14 = uVar15" identifier = identifier) ;) (if_statement "if (uVar6 < uVar13) {\n      uVar6 = uVar6 + uVar2;\n      uVar14 = uVar15 - 1;\n      if ((uVar2 <= uVar6) && (uVar6 < uVar13)) {\n        uVar6 = uVar6 + uVar2;\n        uVar14 = uVar15 - 2;\n      }\n    }" if (parenthesized_expression "(uVar6 < uVar13)" ( (binary_expression "uVar6 < uVar13" identifier < identifier) )) (compound_statement "{\n      uVar6 = uVar6 + uVar2;\n      uVar14 = uVar15 - 1;\n      if ((uVar2 <= uVar6) && (uVar6 < uVar13)) {\n        uVar6 = uVar6 + uVar2;\n        uVar14 = uVar15 - 2;\n      }\n    }" { (expression_statement "uVar6 = uVar6 + uVar2;" (assignment_expression "uVar6 = uVar6 + uVar2" identifier = (binary_expression "uVar6 + uVar2" identifier + identifier)) ;) (expression_statement "uVar14 = uVar15 - 1;" (assignment_expression "uVar14 = uVar15 - 1" identifier = (binary_expression "uVar15 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar2 <= uVar6) && (uVar6 < uVar13)) {\n        uVar6 = uVar6 + uVar2;\n        uVar14 = uVar15 - 2;\n      }" if (parenthesized_expression "((uVar2 <= uVar6) && (uVar6 < uVar13))" ( (binary_expression "(uVar2 <= uVar6) && (uVar6 < uVar13)" (parenthesized_expression "(uVar2 <= uVar6)" ( (binary_expression "uVar2 <= uVar6" identifier <= identifier) )) && (parenthesized_expression "(uVar6 < uVar13)" ( (binary_expression "uVar6 < uVar13" identifier < identifier) ))) )) (compound_statement "{\n        uVar6 = uVar6 + uVar2;\n        uVar14 = uVar15 - 2;\n      }" { (expression_statement "uVar6 = uVar6 + uVar2;" (assignment_expression "uVar6 = uVar6 + uVar2" identifier = (binary_expression "uVar6 + uVar2" identifier + identifier)) ;) (expression_statement "uVar14 = uVar15 - 2;" (assignment_expression "uVar14 = uVar15 - 2" identifier = (binary_expression "uVar15 - 2" identifier - number_literal)) ;) })) })) (if_statement "if (uVar12 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar12 == 0)" ( (binary_expression "uVar12 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar16 = (uVar6 - uVar13) / uVar12;" (assignment_expression "uVar16 = (uVar6 - uVar13) / uVar12" identifier = (binary_expression "(uVar6 - uVar13) / uVar12" (parenthesized_expression "(uVar6 - uVar13)" ( (binary_expression "uVar6 - uVar13" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar15 = (uVar2 & 0xffff) * uVar16;" (assignment_expression "uVar15 = (uVar2 & 0xffff) * uVar16" identifier = (binary_expression "(uVar2 & 0xffff) * uVar16" (parenthesized_expression "(uVar2 & 0xffff)" ( (binary_expression "uVar2 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar6 = (uVar6 - uVar13) % uVar12 << 0x10 | 0xffff;" (assignment_expression "uVar6 = (uVar6 - uVar13) % uVar12 << 0x10 | 0xffff" identifier = (binary_expression "(uVar6 - uVar13) % uVar12 << 0x10 | 0xffff" (binary_expression "(uVar6 - uVar13) % uVar12 << 0x10" (binary_expression "(uVar6 - uVar13) % uVar12" (parenthesized_expression "(uVar6 - uVar13)" ( (binary_expression "uVar6 - uVar13" identifier - identifier) )) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar13 = uVar2 + uVar6;" (assignment_expression "uVar13 = uVar2 + uVar6" identifier = (binary_expression "uVar2 + uVar6" identifier + identifier)) ;) (expression_statement "uVar12 = uVar16;" (assignment_expression "uVar12 = uVar16" identifier = identifier) ;) (if_statement "if (((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)) && (uVar13 < uVar15)) {\n      uVar12 = uVar16 - 2;\n    }" if (parenthesized_expression "(((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)) && (uVar13 < uVar15))" ( (binary_expression "((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)) && (uVar13 < uVar15)" (parenthesized_expression "((uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13))" ( (binary_expression "(uVar6 < uVar15) && (uVar12 = uVar16 - 1, uVar2 <= uVar13)" (parenthesized_expression "(uVar6 < uVar15)" ( (binary_expression "uVar6 < uVar15" identifier < identifier) )) && (parenthesized_expression "(uVar12 = uVar16 - 1, uVar2 <= uVar13)" ( (comma_expression "uVar12 = uVar16 - 1, uVar2 <= uVar13" (assignment_expression "uVar12 = uVar16 - 1" identifier = (binary_expression "uVar16 - 1" identifier - number_literal)) , (binary_expression "uVar2 <= uVar13" identifier <= identifier)) ))) )) && (parenthesized_expression "(uVar13 < uVar15)" ( (binary_expression "uVar13 < uVar15" identifier < identifier) ))) )) (compound_statement "{\n      uVar12 = uVar16 - 2;\n    }" { (expression_statement "uVar12 = uVar16 - 2;" (assignment_expression "uVar12 = uVar16 - 2" identifier = (binary_expression "uVar16 - 2" identifier - number_literal)) ;) })) (expression_statement "uVar12 = uVar14 << 0x10 | uVar12;" (assignment_expression "uVar12 = uVar14 << 0x10 | uVar12" identifier = (binary_expression "uVar14 << 0x10 | uVar12" (binary_expression "uVar14 << 0x10" identifier << number_literal) | identifier)) ;) (if_statement "if (1 < n) {\n      pmVar9 = (mp_srcptr)((int)ap + iVar8);\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n      uVar14 = uVar5;\n      do {\n        uVar5 = pmVar9[-2];\n        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);\n        pmVar9 = pmVar9 + -1;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);\n        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n        uVar3 = uVar2;\n        if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar14 + uVar3;\n        if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n        uVar14 = uVar5;\n      } while (ap + 1 != pmVar9);\n    }" if (parenthesized_expression "(1 < n)" ( (binary_expression "1 < n" number_literal < identifier) )) (compound_statement "{\n      pmVar9 = (mp_srcptr)((int)ap + iVar8);\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n      uVar14 = uVar5;\n      do {\n        uVar5 = pmVar9[-2];\n        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);\n        pmVar9 = pmVar9 + -1;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);\n        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n        uVar3 = uVar2;\n        if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar14 + uVar3;\n        if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n        uVar14 = uVar5;\n      } while (ap + 1 != pmVar9);\n    }" { (expression_statement "pmVar9 = (mp_srcptr)((int)ap + iVar8);" (assignment_expression "pmVar9 = (mp_srcptr)((int)ap + iVar8)" identifier = (call_expression "(mp_srcptr)((int)ap + iVar8)" (parenthesized_expression "(mp_srcptr)" ( identifier )) (argument_list "((int)ap + iVar8)" ( (binary_expression "(int)ap + iVar8" (cast_expression "(int)ap" ( (type_descriptor "int" primitive_type) ) identifier) + identifier) )))) ;) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12" identifier = (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar12" (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar12" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar14 = uVar5;" (assignment_expression "uVar14 = uVar5" identifier = identifier) ;) (do_statement "do {\n        uVar5 = pmVar9[-2];\n        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);\n        pmVar9 = pmVar9 + -1;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);\n        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n        uVar3 = uVar2;\n        if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar14 + uVar3;\n        if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n        uVar14 = uVar5;\n      } while (ap + 1 != pmVar9);" do (compound_statement "{\n        uVar5 = pmVar9[-2];\n        uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);\n        pmVar9 = pmVar9 + -1;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);\n        uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;\n        uVar3 = uVar2;\n        if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar14 + uVar3;\n        if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;\n        uVar14 = uVar5;\n      }" { (expression_statement "uVar5 = pmVar9[-2];" (assignment_expression "uVar5 = pmVar9[-2]" identifier = (subscript_expression "pmVar9[-2]" identifier [ number_literal ])) ;) (expression_statement "uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f);" (assignment_expression "uVar14 = uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f)" identifier = (binary_expression "uVar14 << (uVar11 & 0x1f) | uVar5 >> (0x20 - uVar11 & 0x1f)" (binary_expression "uVar14 << (uVar11 & 0x1f)" identifier << (parenthesized_expression "(uVar11 & 0x1f)" ( (binary_expression "uVar11 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar5 >> (0x20 - uVar11 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar11 & 0x1f)" ( (binary_expression "0x20 - uVar11 & 0x1f" (binary_expression "0x20 - uVar11" number_literal - identifier) & number_literal) ))))) ;) (expression_statement "pmVar9 = pmVar9 + -1;" (assignment_expression "pmVar9 = pmVar9 + -1" identifier = (binary_expression "pmVar9 + -1" identifier + number_literal)) ;) (expression_statement "lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14);" (assignment_expression "lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar14)" identifier = (binary_expression "lVar1 + CONCAT44(uVar3 + 1,uVar14)" identifier + (call_expression "CONCAT44(uVar3 + 1,uVar14)" identifier (argument_list "(uVar3 + 1,uVar14)" ( (binary_expression "uVar3 + 1" identifier + number_literal) , identifier ))))) ;) (expression_statement "uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;" (assignment_expression "uVar14 = uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2" identifier = (binary_expression "uVar14 - (int)((ulonglong)lVar1 >> 0x20) * uVar2" identifier - (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * uVar2" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * identifier))) ;) (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" identifier = identifier) ;) (if_statement "if (uVar14 <= (uint)lVar1) {\n          uVar3 = 0;\n        }" if (parenthesized_expression "(uVar14 <= (uint)lVar1)" ( (binary_expression "uVar14 <= (uint)lVar1" identifier <= (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n          uVar3 = 0;\n        }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) })) (expression_statement "uVar3 = uVar14 + uVar3;" (assignment_expression "uVar3 = uVar14 + uVar3" identifier = (binary_expression "uVar14 + uVar3" identifier + identifier)) ;) (if_statement "if (uVar2 <= uVar3) {\n          uVar3 = uVar3 - uVar2;\n        }" if (parenthesized_expression "(uVar2 <= uVar3)" ( (binary_expression "uVar2 <= uVar3" identifier <= identifier) )) (compound_statement "{\n          uVar3 = uVar3 - uVar2;\n        }" { (expression_statement "uVar3 = uVar3 - uVar2;" (assignment_expression "uVar3 = uVar3 - uVar2" identifier = (binary_expression "uVar3 - uVar2" identifier - identifier)) ;) })) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12;" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12" identifier = (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar12" (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar12" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar14 = uVar5;" (assignment_expression "uVar14 = uVar5" identifier = identifier) ;) }) while (parenthesized_expression "(ap + 1 != pmVar9)" ( (binary_expression "ap + 1 != pmVar9" (binary_expression "ap + 1" identifier + number_literal) != identifier) )) ;) })) (expression_statement "iVar8 = uVar5 << (uVar11 & 0x1f);" (assignment_expression "iVar8 = uVar5 << (uVar11 & 0x1f)" identifier = (binary_expression "uVar5 << (uVar11 & 0x1f)" identifier << (parenthesized_expression "(uVar11 & 0x1f)" ( (binary_expression "uVar11 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12 + CONCAT44(uVar3 + 1,iVar8);" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar12 + CONCAT44(uVar3 + 1,iVar8)" identifier = (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar12 + CONCAT44(uVar3 + 1,iVar8)" (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar12" (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar12" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) + (call_expression "CONCAT44(uVar3 + 1,iVar8)" identifier (argument_list "(uVar3 + 1,iVar8)" ( (binary_expression "uVar3 + 1" identifier + number_literal) , identifier ))))) ;) (expression_statement "uVar5 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * uVar2;" (assignment_expression "uVar5 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * uVar2" identifier = (binary_expression "iVar8 - (int)((ulonglong)lVar1 >> 0x20) * uVar2" identifier - (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * uVar2" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * identifier))) ;) (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" identifier = identifier) ;) (if_statement "if (uVar5 <= (uint)lVar1) {\n      uVar3 = 0;\n    }" if (parenthesized_expression "(uVar5 <= (uint)lVar1)" ( (binary_expression "uVar5 <= (uint)lVar1" identifier <= (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n      uVar3 = 0;\n    }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) })) (expression_statement "uVar5 = uVar5 + uVar3;" (assignment_expression "uVar5 = uVar5 + uVar3" identifier = (binary_expression "uVar5 + uVar3" identifier + identifier)) ;) (if_statement "if (uVar2 <= uVar5) {\n      uVar5 = uVar5 - uVar2;\n    }" if (parenthesized_expression "(uVar2 <= uVar5)" ( (binary_expression "uVar2 <= uVar5" identifier <= identifier) )) (compound_statement "{\n      uVar5 = uVar5 - uVar2;\n    }" { (expression_statement "uVar5 = uVar5 - uVar2;" (assignment_expression "uVar5 = uVar5 - uVar2" identifier = (binary_expression "uVar5 - uVar2" identifier - identifier)) ;) })) (return_statement "return uVar5 >> (uVar11 & 0x1f);" return (binary_expression "uVar5 >> (uVar11 & 0x1f)" identifier >> (parenthesized_expression "(uVar11 & 0x1f)" ( (binary_expression "uVar11 & 0x1f" identifier & number_literal) ))) ;) })) (if_statement "if (b <= uVar2) {\n    uVar2 = uVar2 - b;\n  }" if (parenthesized_expression "(b <= uVar2)" ( (binary_expression "b <= uVar2" identifier <= identifier) )) (compound_statement "{\n    uVar2 = uVar2 - b;\n  }" { (expression_statement "uVar2 = uVar2 - b;" (assignment_expression "uVar2 = uVar2 - b" identifier = (binary_expression "uVar2 - b" identifier - identifier)) ;) })) (expression_statement "uVar3 = b >> 0x10;" (assignment_expression "uVar3 = b >> 0x10" identifier = (binary_expression "b >> 0x10" identifier >> number_literal)) ;) (if_statement "if (n != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar14 = ~b / uVar3;\n    uVar12 = (b & 0xffff) * uVar14;\n    uVar11 = ~b % uVar3 << 0x10 | 0xffff;\n    uVar5 = uVar14;\n    if (uVar11 < uVar12) {\n      uVar11 = uVar11 + b;\n      uVar5 = uVar14 - 1;\n      if ((b <= uVar11) && (uVar11 < uVar12)) {\n        uVar5 = uVar14 - 2;\n        uVar11 = uVar11 + b;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = (uVar11 - uVar12) / uVar3;\n    uVar14 = (b & 0xffff) * uVar6;\n    uVar11 = (uVar11 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = b + uVar11;\n    uVar3 = uVar6;\n    if (((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)) && (uVar12 < uVar14)) {\n      uVar3 = uVar6 - 2;\n    }\n    uVar3 = uVar5 << 0x10 | uVar3;\n    if (1 < n) {\n      pmVar9 = ap + n;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);\n        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;\n        mVar4 = b;\n        if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }\n        uVar2 = uVar2 + mVar4;\n        pmVar9 = pmVar9 + -1;\n        if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (ap + 1 != pmVar9);\n      return uVar2;\n    }\n  }" if (parenthesized_expression "(n != 1)" ( (binary_expression "n != 1" identifier != number_literal) )) (compound_statement "{\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar14 = ~b / uVar3;\n    uVar12 = (b & 0xffff) * uVar14;\n    uVar11 = ~b % uVar3 << 0x10 | 0xffff;\n    uVar5 = uVar14;\n    if (uVar11 < uVar12) {\n      uVar11 = uVar11 + b;\n      uVar5 = uVar14 - 1;\n      if ((b <= uVar11) && (uVar11 < uVar12)) {\n        uVar5 = uVar14 - 2;\n        uVar11 = uVar11 + b;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = (uVar11 - uVar12) / uVar3;\n    uVar14 = (b & 0xffff) * uVar6;\n    uVar11 = (uVar11 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = b + uVar11;\n    uVar3 = uVar6;\n    if (((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)) && (uVar12 < uVar14)) {\n      uVar3 = uVar6 - 2;\n    }\n    uVar3 = uVar5 << 0x10 | uVar3;\n    if (1 < n) {\n      pmVar9 = ap + n;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);\n        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;\n        mVar4 = b;\n        if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }\n        uVar2 = uVar2 + mVar4;\n        pmVar9 = pmVar9 + -1;\n        if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (ap + 1 != pmVar9);\n      return uVar2;\n    }\n  }" { (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar14 = ~b / uVar3;" (assignment_expression "uVar14 = ~b / uVar3" identifier = (binary_expression "~b / uVar3" (unary_expression "~b" ~ identifier) / identifier)) ;) (expression_statement "uVar12 = (b & 0xffff) * uVar14;" (assignment_expression "uVar12 = (b & 0xffff) * uVar14" identifier = (binary_expression "(b & 0xffff) * uVar14" (parenthesized_expression "(b & 0xffff)" ( (binary_expression "b & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar11 = ~b % uVar3 << 0x10 | 0xffff;" (assignment_expression "uVar11 = ~b % uVar3 << 0x10 | 0xffff" identifier = (binary_expression "~b % uVar3 << 0x10 | 0xffff" (binary_expression "~b % uVar3 << 0x10" (binary_expression "~b % uVar3" (unary_expression "~b" ~ identifier) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar5 = uVar14;" (assignment_expression "uVar5 = uVar14" identifier = identifier) ;) (if_statement "if (uVar11 < uVar12) {\n      uVar11 = uVar11 + b;\n      uVar5 = uVar14 - 1;\n      if ((b <= uVar11) && (uVar11 < uVar12)) {\n        uVar5 = uVar14 - 2;\n        uVar11 = uVar11 + b;\n      }\n    }" if (parenthesized_expression "(uVar11 < uVar12)" ( (binary_expression "uVar11 < uVar12" identifier < identifier) )) (compound_statement "{\n      uVar11 = uVar11 + b;\n      uVar5 = uVar14 - 1;\n      if ((b <= uVar11) && (uVar11 < uVar12)) {\n        uVar5 = uVar14 - 2;\n        uVar11 = uVar11 + b;\n      }\n    }" { (expression_statement "uVar11 = uVar11 + b;" (assignment_expression "uVar11 = uVar11 + b" identifier = (binary_expression "uVar11 + b" identifier + identifier)) ;) (expression_statement "uVar5 = uVar14 - 1;" (assignment_expression "uVar5 = uVar14 - 1" identifier = (binary_expression "uVar14 - 1" identifier - number_literal)) ;) (if_statement "if ((b <= uVar11) && (uVar11 < uVar12)) {\n        uVar5 = uVar14 - 2;\n        uVar11 = uVar11 + b;\n      }" if (parenthesized_expression "((b <= uVar11) && (uVar11 < uVar12))" ( (binary_expression "(b <= uVar11) && (uVar11 < uVar12)" (parenthesized_expression "(b <= uVar11)" ( (binary_expression "b <= uVar11" identifier <= identifier) )) && (parenthesized_expression "(uVar11 < uVar12)" ( (binary_expression "uVar11 < uVar12" identifier < identifier) ))) )) (compound_statement "{\n        uVar5 = uVar14 - 2;\n        uVar11 = uVar11 + b;\n      }" { (expression_statement "uVar5 = uVar14 - 2;" (assignment_expression "uVar5 = uVar14 - 2" identifier = (binary_expression "uVar14 - 2" identifier - number_literal)) ;) (expression_statement "uVar11 = uVar11 + b;" (assignment_expression "uVar11 = uVar11 + b" identifier = (binary_expression "uVar11 + b" identifier + identifier)) ;) })) })) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar6 = (uVar11 - uVar12) / uVar3;" (assignment_expression "uVar6 = (uVar11 - uVar12) / uVar3" identifier = (binary_expression "(uVar11 - uVar12) / uVar3" (parenthesized_expression "(uVar11 - uVar12)" ( (binary_expression "uVar11 - uVar12" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar14 = (b & 0xffff) * uVar6;" (assignment_expression "uVar14 = (b & 0xffff) * uVar6" identifier = (binary_expression "(b & 0xffff) * uVar6" (parenthesized_expression "(b & 0xffff)" ( (binary_expression "b & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar11 = (uVar11 - uVar12) % uVar3 << 0x10 | 0xffff;" (assignment_expression "uVar11 = (uVar11 - uVar12) % uVar3 << 0x10 | 0xffff" identifier = (binary_expression "(uVar11 - uVar12) % uVar3 << 0x10 | 0xffff" (binary_expression "(uVar11 - uVar12) % uVar3 << 0x10" (binary_expression "(uVar11 - uVar12) % uVar3" (parenthesized_expression "(uVar11 - uVar12)" ( (binary_expression "uVar11 - uVar12" identifier - identifier) )) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar12 = b + uVar11;" (assignment_expression "uVar12 = b + uVar11" identifier = (binary_expression "b + uVar11" identifier + identifier)) ;) (expression_statement "uVar3 = uVar6;" (assignment_expression "uVar3 = uVar6" identifier = identifier) ;) (if_statement "if (((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)) && (uVar12 < uVar14)) {\n      uVar3 = uVar6 - 2;\n    }" if (parenthesized_expression "(((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)) && (uVar12 < uVar14))" ( (binary_expression "((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)) && (uVar12 < uVar14)" (parenthesized_expression "((uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12))" ( (binary_expression "(uVar11 < uVar14) && (uVar3 = uVar6 - 1, b <= uVar12)" (parenthesized_expression "(uVar11 < uVar14)" ( (binary_expression "uVar11 < uVar14" identifier < identifier) )) && (parenthesized_expression "(uVar3 = uVar6 - 1, b <= uVar12)" ( (comma_expression "uVar3 = uVar6 - 1, b <= uVar12" (assignment_expression "uVar3 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) , (binary_expression "b <= uVar12" identifier <= identifier)) ))) )) && (parenthesized_expression "(uVar12 < uVar14)" ( (binary_expression "uVar12 < uVar14" identifier < identifier) ))) )) (compound_statement "{\n      uVar3 = uVar6 - 2;\n    }" { (expression_statement "uVar3 = uVar6 - 2;" (assignment_expression "uVar3 = uVar6 - 2" identifier = (binary_expression "uVar6 - 2" identifier - number_literal)) ;) })) (expression_statement "uVar3 = uVar5 << 0x10 | uVar3;" (assignment_expression "uVar3 = uVar5 << 0x10 | uVar3" identifier = (binary_expression "uVar5 << 0x10 | uVar3" (binary_expression "uVar5 << 0x10" identifier << number_literal) | identifier)) ;) (if_statement "if (1 < n) {\n      pmVar9 = ap + n;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);\n        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;\n        mVar4 = b;\n        if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }\n        uVar2 = uVar2 + mVar4;\n        pmVar9 = pmVar9 + -1;\n        if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (ap + 1 != pmVar9);\n      return uVar2;\n    }" if (parenthesized_expression "(1 < n)" ( (binary_expression "1 < n" number_literal < identifier) )) (compound_statement "{\n      pmVar9 = ap + n;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);\n        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;\n        mVar4 = b;\n        if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }\n        uVar2 = uVar2 + mVar4;\n        pmVar9 = pmVar9 + -1;\n        if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (ap + 1 != pmVar9);\n      return uVar2;\n    }" { (expression_statement "pmVar9 = ap + n;" (assignment_expression "pmVar9 = ap + n" identifier = (binary_expression "ap + n" identifier + identifier)) ;) (expression_statement "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;" (assignment_expression "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3" identifier = (binary_expression "(ulonglong)uVar2 * (ulonglong)uVar3" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (do_statement "do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);\n        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;\n        mVar4 = b;\n        if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }\n        uVar2 = uVar2 + mVar4;\n        pmVar9 = pmVar9 + -1;\n        if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (ap + 1 != pmVar9);" do (compound_statement "{\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);\n        uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;\n        mVar4 = b;\n        if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }\n        uVar2 = uVar2 + mVar4;\n        pmVar9 = pmVar9 + -1;\n        if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      }" { (expression_statement "lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2]);" (assignment_expression "lVar1 = lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2])" identifier = (binary_expression "lVar1 + CONCAT44(uVar2 + 1,pmVar9[-2])" identifier + (call_expression "CONCAT44(uVar2 + 1,pmVar9[-2])" identifier (argument_list "(uVar2 + 1,pmVar9[-2])" ( (binary_expression "uVar2 + 1" identifier + number_literal) , (subscript_expression "pmVar9[-2]" identifier [ number_literal ]) ))))) ;) (expression_statement "uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b;" (assignment_expression "uVar2 = pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b" identifier = (binary_expression "pmVar9[-2] - (int)((ulonglong)lVar1 >> 0x20) * b" (subscript_expression "pmVar9[-2]" identifier [ number_literal ]) - (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * b" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * identifier))) ;) (expression_statement "mVar4 = b;" (assignment_expression "mVar4 = b" identifier = identifier) ;) (if_statement "if (uVar2 <= (uint)lVar1) {\n          mVar4 = 0;\n        }" if (parenthesized_expression "(uVar2 <= (uint)lVar1)" ( (binary_expression "uVar2 <= (uint)lVar1" identifier <= (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n          mVar4 = 0;\n        }" { (expression_statement "mVar4 = 0;" (assignment_expression "mVar4 = 0" identifier = number_literal) ;) })) (expression_statement "uVar2 = uVar2 + mVar4;" (assignment_expression "uVar2 = uVar2 + mVar4" identifier = (binary_expression "uVar2 + mVar4" identifier + identifier)) ;) (expression_statement "pmVar9 = pmVar9 + -1;" (assignment_expression "pmVar9 = pmVar9 + -1" identifier = (binary_expression "pmVar9 + -1" identifier + number_literal)) ;) (if_statement "if (b <= uVar2) {\n          uVar2 = uVar2 - b;\n        }" if (parenthesized_expression "(b <= uVar2)" ( (binary_expression "b <= uVar2" identifier <= identifier) )) (compound_statement "{\n          uVar2 = uVar2 - b;\n        }" { (expression_statement "uVar2 = uVar2 - b;" (assignment_expression "uVar2 = uVar2 - b" identifier = (binary_expression "uVar2 - b" identifier - identifier)) ;) })) (expression_statement "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;" (assignment_expression "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3" identifier = (binary_expression "(ulonglong)uVar2 * (ulonglong)uVar3" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) }) while (parenthesized_expression "(ap + 1 != pmVar9)" ( (binary_expression "ap + 1 != pmVar9" (binary_expression "ap + 1" identifier + number_literal) != identifier) )) ;) (return_statement "return uVar2;" return identifier ;) })) })) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit "uint __gmpn_mod_1(int param_1,int param_2,uint param_3)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  \n  iVar8 = param_2 * 4;\n  if (param_2 == 0) {\n    return 0;\n  }\n  puVar5 = (uint *)(param_1 + iVar8 + -4);\n  uVar2 = *puVar5;\n  if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }\n  if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }\n  uVar3 = param_3 >> 0x10;\n  if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}\n\n" (function_definition "uint __gmpn_mod_1(int param_1,int param_2,uint param_3)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  \n  iVar8 = param_2 * 4;\n  if (param_2 == 0) {\n    return 0;\n  }\n  puVar5 = (uint *)(param_1 + iVar8 + -4);\n  uVar2 = *puVar5;\n  if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }\n  if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }\n  uVar3 = param_3 >> 0x10;\n  if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}" type_identifier (function_declarator "__gmpn_mod_1(int param_1,int param_2,uint param_3)" identifier (parameter_list "(int param_1,int param_2,uint param_3)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  \n  iVar8 = param_2 * 4;\n  if (param_2 == 0) {\n    return 0;\n  }\n  puVar5 = (uint *)(param_1 + iVar8 + -4);\n  uVar2 = *puVar5;\n  if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }\n  if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }\n  uVar3 = param_3 >> 0x10;\n  if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}" { (declaration "longlong lVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int iVar8;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (expression_statement "iVar8 = param_2 * 4;" (assignment_expression "iVar8 = param_2 * 4" identifier = (binary_expression "param_2 * 4" identifier * number_literal)) ;) (if_statement "if (param_2 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "puVar5 = (uint *)(param_1 + iVar8 + -4);" (assignment_expression "puVar5 = (uint *)(param_1 + iVar8 + -4)" identifier = (cast_expression "(uint *)(param_1 + iVar8 + -4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar8 + -4)" ( (binary_expression "param_1 + iVar8 + -4" (binary_expression "param_1 + iVar8" identifier + identifier) + number_literal) )))) ;) (expression_statement "uVar2 = *puVar5;" (assignment_expression "uVar2 = *puVar5" identifier = (pointer_expression "*puVar5" * identifier)) ;) (if_statement "if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }" if (parenthesized_expression "(-1 < (int)param_3)" ( (binary_expression "-1 < (int)param_3" number_literal < (cast_expression "(int)param_3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }" { (if_statement "if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }" if (parenthesized_expression "(uVar2 < param_3)" ( (binary_expression "uVar2 < param_3" identifier < identifier) )) (compound_statement "{\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }" { (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) (if_statement "if (param_2 == 0) {\n        return uVar2;\n      }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n        return uVar2;\n      }" { (return_statement "return uVar2;" return identifier ;) })) (expression_statement "uVar4 = puVar5[-1];" (assignment_expression "uVar4 = puVar5[-1]" identifier = (subscript_expression "puVar5[-1]" identifier [ number_literal ])) ;) (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" identifier = identifier) ;) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" identifier = (binary_expression "iVar8 + -4" identifier + number_literal)) ;) }) (else_clause "else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }" else (compound_statement "{\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "uVar4 = uVar2;" (assignment_expression "uVar4 = uVar2" identifier = identifier) ;) }))) (if_statement "if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }" if (parenthesized_expression "(param_3 < 0x10000)" ( (binary_expression "param_3 < 0x10000" identifier < number_literal) )) (compound_statement "{\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }" { (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" identifier = number_literal) ;) (if_statement "if (0xff < param_3) {\n        iVar9 = 0x18;\n      }" if (parenthesized_expression "(0xff < param_3)" ( (binary_expression "0xff < param_3" number_literal < identifier) )) (compound_statement "{\n        iVar9 = 0x18;\n      }" { (expression_statement "iVar9 = 0x18;" (assignment_expression "iVar9 = 0x18" identifier = number_literal) ;) })) (expression_statement "iVar7 = 9;" (assignment_expression "iVar7 = 9" identifier = number_literal) ;) (if_statement "if (0xff >= param_3) {\n        iVar7 = 1;\n      }" if (parenthesized_expression "(0xff >= param_3)" ( (binary_expression "0xff >= param_3" number_literal >= identifier) )) (compound_statement "{\n        iVar7 = 1;\n      }" { (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" identifier = number_literal) ;) })) }) (else_clause "else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }" else (compound_statement "{\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }" { (expression_statement "iVar9 = 0x10;" (assignment_expression "iVar9 = 0x10" identifier = number_literal) ;) (if_statement "if (0xffffff < param_3) {\n        iVar9 = 8;\n      }" if (parenthesized_expression "(0xffffff < param_3)" ( (binary_expression "0xffffff < param_3" number_literal < identifier) )) (compound_statement "{\n        iVar9 = 8;\n      }" { (expression_statement "iVar9 = 8;" (assignment_expression "iVar9 = 8" identifier = number_literal) ;) })) (expression_statement "iVar7 = 0x19;" (assignment_expression "iVar7 = 0x19" identifier = number_literal) ;) (if_statement "if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }" if (parenthesized_expression "(0xffffff >= param_3)" ( (binary_expression "0xffffff >= param_3" number_literal >= identifier) )) (compound_statement "{\n        iVar7 = 0x11;\n      }" { (expression_statement "iVar7 = 0x11;" (assignment_expression "iVar7 = 0x11" identifier = number_literal) ;) })) }))) (expression_statement "uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];" (assignment_expression "uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" identifier = (binary_expression "iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" identifier - (cast_expression "(uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" ( (type_descriptor "uint" type_identifier) ) (cast_expression "(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" identifier [ (binary_expression "param_3 >> iVar7" identifier >> identifier) ]))))) ;) (expression_statement "param_3 = param_3 << (uVar2 & 0x1f);" (assignment_expression "param_3 = param_3 << (uVar2 & 0x1f)" identifier = (binary_expression "param_3 << (uVar2 & 0x1f)" identifier << (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar10 = param_3 >> 0x10;" (assignment_expression "uVar10 = param_3 >> 0x10" identifier = (binary_expression "param_3 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar10 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar13 = ~param_3 / uVar10;" (assignment_expression "uVar13 = ~param_3 / uVar10" identifier = (binary_expression "~param_3 / uVar10" (unary_expression "~param_3" ~ identifier) / identifier)) ;) (expression_statement "uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);" (assignment_expression "uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f)" identifier = (binary_expression "uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f)" (binary_expression "uVar4 >> (0x20 - uVar2 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar2 & 0x1f)" ( (binary_expression "0x20 - uVar2 & 0x1f" (binary_expression "0x20 - uVar2" number_literal - identifier) & number_literal) ))) | (binary_expression "uVar3 << (uVar2 & 0x1f)" identifier << (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar11 = (param_3 & 0xffff) * uVar13;" (assignment_expression "uVar11 = (param_3 & 0xffff) * uVar13" identifier = (binary_expression "(param_3 & 0xffff) * uVar13" (parenthesized_expression "(param_3 & 0xffff)" ( (binary_expression "param_3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;" (assignment_expression "uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff" identifier = (binary_expression "~param_3 % uVar10 << 0x10 | 0xffff" (binary_expression "~param_3 % uVar10 << 0x10" (binary_expression "~param_3 % uVar10" (unary_expression "~param_3" ~ identifier) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar12 = uVar13;" (assignment_expression "uVar12 = uVar13" identifier = identifier) ;) (if_statement "if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }" if (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) )) (compound_statement "{\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }" { (expression_statement "uVar6 = uVar6 + param_3;" (assignment_expression "uVar6 = uVar6 + param_3" identifier = (binary_expression "uVar6 + param_3" identifier + identifier)) ;) (expression_statement "uVar12 = uVar13 - 1;" (assignment_expression "uVar12 = uVar13 - 1" identifier = (binary_expression "uVar13 - 1" identifier - number_literal)) ;) (if_statement "if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }" if (parenthesized_expression "((param_3 <= uVar6) && (uVar6 < uVar11))" ( (binary_expression "(param_3 <= uVar6) && (uVar6 < uVar11)" (parenthesized_expression "(param_3 <= uVar6)" ( (binary_expression "param_3 <= uVar6" identifier <= identifier) )) && (parenthesized_expression "(uVar6 < uVar11)" ( (binary_expression "uVar6 < uVar11" identifier < identifier) ))) )) (compound_statement "{\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }" { (expression_statement "uVar6 = uVar6 + param_3;" (assignment_expression "uVar6 = uVar6 + param_3" identifier = (binary_expression "uVar6 + param_3" identifier + identifier)) ;) (expression_statement "uVar12 = uVar13 - 2;" (assignment_expression "uVar12 = uVar13 - 2" identifier = (binary_expression "uVar13 - 2" identifier - number_literal)) ;) })) })) (if_statement "if (uVar10 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar10 == 0)" ( (binary_expression "uVar10 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar14 = (uVar6 - uVar11) / uVar10;" (assignment_expression "uVar14 = (uVar6 - uVar11) / uVar10" identifier = (binary_expression "(uVar6 - uVar11) / uVar10" (parenthesized_expression "(uVar6 - uVar11)" ( (binary_expression "uVar6 - uVar11" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar13 = (param_3 & 0xffff) * uVar14;" (assignment_expression "uVar13 = (param_3 & 0xffff) * uVar14" identifier = (binary_expression "(param_3 & 0xffff) * uVar14" (parenthesized_expression "(param_3 & 0xffff)" ( (binary_expression "param_3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;" (assignment_expression "uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff" identifier = (binary_expression "(uVar6 - uVar11) % uVar10 << 0x10 | 0xffff" (binary_expression "(uVar6 - uVar11) % uVar10 << 0x10" (binary_expression "(uVar6 - uVar11) % uVar10" (parenthesized_expression "(uVar6 - uVar11)" ( (binary_expression "uVar6 - uVar11" identifier - identifier) )) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar11 = param_3 + uVar6;" (assignment_expression "uVar11 = param_3 + uVar6" identifier = (binary_expression "param_3 + uVar6" identifier + identifier)) ;) (expression_statement "uVar10 = uVar14;" (assignment_expression "uVar10 = uVar14" identifier = identifier) ;) (if_statement "if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }" if (parenthesized_expression "(((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13))" ( (binary_expression "((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)" (parenthesized_expression "((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11))" ( (binary_expression "(uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)" (parenthesized_expression "(uVar6 < uVar13)" ( (binary_expression "uVar6 < uVar13" identifier < identifier) )) && (parenthesized_expression "(uVar10 = uVar14 - 1, param_3 <= uVar11)" ( (comma_expression "uVar10 = uVar14 - 1, param_3 <= uVar11" (assignment_expression "uVar10 = uVar14 - 1" identifier = (binary_expression "uVar14 - 1" identifier - number_literal)) , (binary_expression "param_3 <= uVar11" identifier <= identifier)) ))) )) && (parenthesized_expression "(uVar11 < uVar13)" ( (binary_expression "uVar11 < uVar13" identifier < identifier) ))) )) (compound_statement "{\n      uVar10 = uVar14 - 2;\n    }" { (expression_statement "uVar10 = uVar14 - 2;" (assignment_expression "uVar10 = uVar14 - 2" identifier = (binary_expression "uVar14 - 2" identifier - number_literal)) ;) })) (expression_statement "uVar10 = uVar12 << 0x10 | uVar10;" (assignment_expression "uVar10 = uVar12 << 0x10 | uVar10" identifier = (binary_expression "uVar12 << 0x10 | uVar10" (binary_expression "uVar12 << 0x10" identifier << number_literal) | identifier)) ;) (if_statement "if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }" if (parenthesized_expression "(1 < param_2)" ( (binary_expression "1 < param_2" number_literal < identifier) )) (compound_statement "{\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }" { (expression_statement "iVar8 = param_1 + iVar8;" (assignment_expression "iVar8 = param_1 + iVar8" identifier = (binary_expression "param_1 + iVar8" identifier + identifier)) ;) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10" identifier = (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10" (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar12 = uVar4;" (assignment_expression "uVar12 = uVar4" identifier = identifier) ;) (do_statement "do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);" do (compound_statement "{\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      }" { (expression_statement "uVar4 = *(uint *)(iVar8 + -8);" (assignment_expression "uVar4 = *(uint *)(iVar8 + -8)" identifier = (pointer_expression "*(uint *)(iVar8 + -8)" * (cast_expression "(uint *)(iVar8 + -8)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + -8)" ( (binary_expression "iVar8 + -8" identifier + number_literal) ))))) ;) (expression_statement "uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);" (assignment_expression "uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f)" identifier = (binary_expression "uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f)" (binary_expression "uVar12 << (uVar2 & 0x1f)" identifier << (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar4 >> (0x20 - uVar2 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar2 & 0x1f)" ( (binary_expression "0x20 - uVar2 & 0x1f" (binary_expression "0x20 - uVar2" number_literal - identifier) & number_literal) ))))) ;) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" identifier = (binary_expression "iVar8 + -4" identifier + number_literal)) ;) (expression_statement "lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);" (assignment_expression "lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12)" identifier = (binary_expression "lVar1 + CONCAT44(uVar3 + 1,uVar12)" identifier + (call_expression "CONCAT44(uVar3 + 1,uVar12)" identifier (argument_list "(uVar3 + 1,uVar12)" ( (binary_expression "uVar3 + 1" identifier + number_literal) , identifier ))))) ;) (expression_statement "uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;" (assignment_expression "uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier = (binary_expression "uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier - (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * param_3" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * identifier))) ;) (expression_statement "uVar3 = param_3;" (assignment_expression "uVar3 = param_3" identifier = identifier) ;) (if_statement "if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }" if (parenthesized_expression "(uVar12 <= (uint)lVar1)" ( (binary_expression "uVar12 <= (uint)lVar1" identifier <= (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n          uVar3 = 0;\n        }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) })) (expression_statement "uVar3 = uVar12 + uVar3;" (assignment_expression "uVar3 = uVar12 + uVar3" identifier = (binary_expression "uVar12 + uVar3" identifier + identifier)) ;) (if_statement "if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }" if (parenthesized_expression "(param_3 <= uVar3)" ( (binary_expression "param_3 <= uVar3" identifier <= identifier) )) (compound_statement "{\n          uVar3 = uVar3 - param_3;\n        }" { (expression_statement "uVar3 = uVar3 - param_3;" (assignment_expression "uVar3 = uVar3 - param_3" identifier = (binary_expression "uVar3 - param_3" identifier - identifier)) ;) })) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10" identifier = (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10" (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (expression_statement "uVar12 = uVar4;" (assignment_expression "uVar12 = uVar4" identifier = identifier) ;) }) while (parenthesized_expression "(param_1 + 4 != iVar8)" ( (binary_expression "param_1 + 4 != iVar8" (binary_expression "param_1 + 4" identifier + number_literal) != identifier) )) ;) })) (expression_statement "iVar8 = uVar4 << (uVar2 & 0x1f);" (assignment_expression "iVar8 = uVar4 << (uVar2 & 0x1f)" identifier = (binary_expression "uVar4 << (uVar2 & 0x1f)" identifier << (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8)" identifier = (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8)" (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10" (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar10" ( (type_descriptor "ulonglong" type_identifier) ) identifier)) + (call_expression "CONCAT44(uVar3 + 1,iVar8)" identifier (argument_list "(uVar3 + 1,iVar8)" ( (binary_expression "uVar3 + 1" identifier + number_literal) , identifier ))))) ;) (expression_statement "uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;" (assignment_expression "uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier = (binary_expression "iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier - (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * param_3" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * identifier))) ;) (expression_statement "uVar3 = param_3;" (assignment_expression "uVar3 = param_3" identifier = identifier) ;) (if_statement "if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }" if (parenthesized_expression "(uVar4 <= (uint)lVar1)" ( (binary_expression "uVar4 <= (uint)lVar1" identifier <= (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n      uVar3 = 0;\n    }" { (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) })) (expression_statement "uVar4 = uVar4 + uVar3;" (assignment_expression "uVar4 = uVar4 + uVar3" identifier = (binary_expression "uVar4 + uVar3" identifier + identifier)) ;) (if_statement "if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }" if (parenthesized_expression "(param_3 <= uVar4)" ( (binary_expression "param_3 <= uVar4" identifier <= identifier) )) (compound_statement "{\n      uVar4 = uVar4 - param_3;\n    }" { (expression_statement "uVar4 = uVar4 - param_3;" (assignment_expression "uVar4 = uVar4 - param_3" identifier = (binary_expression "uVar4 - param_3" identifier - identifier)) ;) })) (return_statement "return uVar4 >> (uVar2 & 0x1f);" return (binary_expression "uVar4 >> (uVar2 & 0x1f)" identifier >> (parenthesized_expression "(uVar2 & 0x1f)" ( (binary_expression "uVar2 & 0x1f" identifier & number_literal) ))) ;) })) (if_statement "if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }" if (parenthesized_expression "(param_3 <= uVar2)" ( (binary_expression "param_3 <= uVar2" identifier <= identifier) )) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n  }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) })) (expression_statement "uVar3 = param_3 >> 0x10;" (assignment_expression "uVar3 = param_3 >> 0x10" identifier = (binary_expression "param_3 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }" if (parenthesized_expression "(param_2 != 1)" ( (binary_expression "param_2 != 1" identifier != number_literal) )) (compound_statement "{\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }" { (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar6 = ~param_3 / uVar3;" (assignment_expression "uVar6 = ~param_3 / uVar3" identifier = (binary_expression "~param_3 / uVar3" (unary_expression "~param_3" ~ identifier) / identifier)) ;) (expression_statement "uVar12 = (param_3 & 0xffff) * uVar6;" (assignment_expression "uVar12 = (param_3 & 0xffff) * uVar6" identifier = (binary_expression "(param_3 & 0xffff) * uVar6" (parenthesized_expression "(param_3 & 0xffff)" ( (binary_expression "param_3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;" (assignment_expression "uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff" identifier = (binary_expression "~param_3 % uVar3 << 0x10 | 0xffff" (binary_expression "~param_3 % uVar3 << 0x10" (binary_expression "~param_3 % uVar3" (unary_expression "~param_3" ~ identifier) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar4 = uVar6;" (assignment_expression "uVar4 = uVar6" identifier = identifier) ;) (if_statement "if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }" if (parenthesized_expression "(uVar10 < uVar12)" ( (binary_expression "uVar10 < uVar12" identifier < identifier) )) (compound_statement "{\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }" { (expression_statement "uVar10 = uVar10 + param_3;" (assignment_expression "uVar10 = uVar10 + param_3" identifier = (binary_expression "uVar10 + param_3" identifier + identifier)) ;) (expression_statement "uVar4 = uVar6 - 1;" (assignment_expression "uVar4 = uVar6 - 1" identifier = (binary_expression "uVar6 - 1" identifier - number_literal)) ;) (if_statement "if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }" if (parenthesized_expression "((param_3 <= uVar10) && (uVar10 < uVar12))" ( (binary_expression "(param_3 <= uVar10) && (uVar10 < uVar12)" (parenthesized_expression "(param_3 <= uVar10)" ( (binary_expression "param_3 <= uVar10" identifier <= identifier) )) && (parenthesized_expression "(uVar10 < uVar12)" ( (binary_expression "uVar10 < uVar12" identifier < identifier) ))) )) (compound_statement "{\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }" { (expression_statement "uVar4 = uVar6 - 2;" (assignment_expression "uVar4 = uVar6 - 2" identifier = (binary_expression "uVar6 - 2" identifier - number_literal)) ;) (expression_statement "uVar10 = uVar10 + param_3;" (assignment_expression "uVar10 = uVar10 + param_3" identifier = (binary_expression "uVar10 + param_3" identifier + identifier)) ;) })) })) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" if (parenthesized_expression "(uVar3 == 0)" ( (binary_expression "uVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      trap(7);\n    }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = (uVar10 - uVar12) / uVar3;" (assignment_expression "uVar11 = (uVar10 - uVar12) / uVar3" identifier = (binary_expression "(uVar10 - uVar12) / uVar3" (parenthesized_expression "(uVar10 - uVar12)" ( (binary_expression "uVar10 - uVar12" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar6 = (param_3 & 0xffff) * uVar11;" (assignment_expression "uVar6 = (param_3 & 0xffff) * uVar11" identifier = (binary_expression "(param_3 & 0xffff) * uVar11" (parenthesized_expression "(param_3 & 0xffff)" ( (binary_expression "param_3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;" (assignment_expression "uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff" identifier = (binary_expression "(uVar10 - uVar12) % uVar3 << 0x10 | 0xffff" (binary_expression "(uVar10 - uVar12) % uVar3 << 0x10" (binary_expression "(uVar10 - uVar12) % uVar3" (parenthesized_expression "(uVar10 - uVar12)" ( (binary_expression "uVar10 - uVar12" identifier - identifier) )) % identifier) << number_literal) | number_literal)) ;) (expression_statement "uVar12 = param_3 + uVar10;" (assignment_expression "uVar12 = param_3 + uVar10" identifier = (binary_expression "param_3 + uVar10" identifier + identifier)) ;) (expression_statement "uVar3 = uVar11;" (assignment_expression "uVar3 = uVar11" identifier = identifier) ;) (if_statement "if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }" if (parenthesized_expression "(((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6))" ( (binary_expression "((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)" (parenthesized_expression "((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12))" ( (binary_expression "(uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)" (parenthesized_expression "(uVar10 < uVar6)" ( (binary_expression "uVar10 < uVar6" identifier < identifier) )) && (parenthesized_expression "(uVar3 = uVar11 - 1, param_3 <= uVar12)" ( (comma_expression "uVar3 = uVar11 - 1, param_3 <= uVar12" (assignment_expression "uVar3 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) , (binary_expression "param_3 <= uVar12" identifier <= identifier)) ))) )) && (parenthesized_expression "(uVar12 < uVar6)" ( (binary_expression "uVar12 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n      uVar3 = uVar11 - 2;\n    }" { (expression_statement "uVar3 = uVar11 - 2;" (assignment_expression "uVar3 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) })) (expression_statement "uVar3 = uVar4 << 0x10 | uVar3;" (assignment_expression "uVar3 = uVar4 << 0x10 | uVar3" identifier = (binary_expression "uVar4 << 0x10 | uVar3" (binary_expression "uVar4 << 0x10" identifier << number_literal) | identifier)) ;) (if_statement "if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }" if (parenthesized_expression "(1 < param_2)" ( (binary_expression "1 < param_2" number_literal < identifier) )) (compound_statement "{\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }" { (expression_statement "iVar8 = param_1 + iVar8;" (assignment_expression "iVar8 = param_1 + iVar8" identifier = (binary_expression "param_1 + iVar8" identifier + identifier)) ;) (expression_statement "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;" (assignment_expression "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3" identifier = (binary_expression "(ulonglong)uVar2 * (ulonglong)uVar3" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (do_statement "do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);" do (compound_statement "{\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      }" { (expression_statement "lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));" (assignment_expression "lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8))" identifier = (binary_expression "lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8))" identifier + (call_expression "CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8))" identifier (argument_list "(uVar2 + 1,*(int *)(iVar8 + -8))" ( (binary_expression "uVar2 + 1" identifier + number_literal) , (pointer_expression "*(int *)(iVar8 + -8)" * (cast_expression "(int *)(iVar8 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + -8)" ( (binary_expression "iVar8 + -8" identifier + number_literal) )))) ))))) ;) (expression_statement "uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;" (assignment_expression "uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3" identifier = (binary_expression "*(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3" (pointer_expression "*(int *)(iVar8 + -8)" * (cast_expression "(int *)(iVar8 + -8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar8 + -8)" ( (binary_expression "iVar8 + -8" identifier + number_literal) )))) - (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * param_3" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" ( (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) ))) * identifier))) ;) (expression_statement "uVar4 = param_3;" (assignment_expression "uVar4 = param_3" identifier = identifier) ;) (if_statement "if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }" if (parenthesized_expression "(uVar2 <= (uint)lVar1)" ( (binary_expression "uVar2 <= (uint)lVar1" identifier <= (cast_expression "(uint)lVar1" ( (type_descriptor "uint" type_identifier) ) identifier)) )) (compound_statement "{\n          uVar4 = 0;\n        }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) })) (expression_statement "uVar2 = uVar2 + uVar4;" (assignment_expression "uVar2 = uVar2 + uVar4" identifier = (binary_expression "uVar2 + uVar4" identifier + identifier)) ;) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" identifier = (binary_expression "iVar8 + -4" identifier + number_literal)) ;) (if_statement "if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }" if (parenthesized_expression "(param_3 <= uVar2)" ( (binary_expression "param_3 <= uVar2" identifier <= identifier) )) (compound_statement "{\n          uVar2 = uVar2 - param_3;\n        }" { (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" identifier = (binary_expression "uVar2 - param_3" identifier - identifier)) ;) })) (expression_statement "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;" (assignment_expression "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3" identifier = (binary_expression "(ulonglong)uVar2 * (ulonglong)uVar3" (cast_expression "(ulonglong)uVar2" ( (type_descriptor "ulonglong" type_identifier) ) identifier) * (cast_expression "(ulonglong)uVar3" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) }) while (parenthesized_expression "(param_1 + 4 != iVar8)" ( (binary_expression "param_1 + 4 != iVar8" (binary_expression "param_1 + 4" identifier + number_literal) != identifier) )) ;) (return_statement "return uVar2;" return identifier ;) })) })) (return_statement "return uVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (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 IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + 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 { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT >= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT >= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ (binary_expression IDENT >> IDENT) ]))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (unary_expression ~ IDENT) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) ))) | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (unary_expression ~ IDENT) % IDENT) << LIT) | LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (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 = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT - LIT)) , (binary_expression IDENT <= IDENT)) ))) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << LIT) | IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (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 + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) * IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT)) + (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) * IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (return_statement return (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (unary_expression ~ IDENT) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (unary_expression ~ IDENT) % IDENT) << LIT) | LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (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 = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT - LIT)) , (binary_expression IDENT <= IDENT)) ))) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT << LIT) | IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) * IDENT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != IDENT) )) ;) (return_statement return IDENT ;) })) })) (return_statement return IDENT ;) })))
(function_definition "uint __gmpn_mod_1(int param_1,int param_2,uint param_3)\n\n{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  \n  iVar8 = param_2 * 4;\n  if (param_2 == 0) {\n    return 0;\n  }\n  puVar5 = (uint *)(param_1 + iVar8 + -4);\n  uVar2 = *puVar5;\n  if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }\n  if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }\n  uVar3 = param_3 >> 0x10;\n  if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}" (type_identifier "uint") (function_declarator "__gmpn_mod_1(int param_1,int param_2,uint param_3)" (identifier "__gmpn_mod_1") (parameter_list "(int param_1,int param_2,uint param_3)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  longlong lVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint *puVar5;\n  uint uVar6;\n  int iVar7;\n  int iVar8;\n  int iVar9;\n  uint uVar10;\n  uint uVar11;\n  uint uVar12;\n  uint uVar13;\n  uint uVar14;\n  \n  iVar8 = param_2 * 4;\n  if (param_2 == 0) {\n    return 0;\n  }\n  puVar5 = (uint *)(param_1 + iVar8 + -4);\n  uVar2 = *puVar5;\n  if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }\n  if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }\n  uVar3 = param_3 >> 0x10;\n  if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }\n  return uVar2;\n}" ({ "{") (declaration "longlong lVar1;" (type_identifier "longlong") (identifier "lVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint *puVar5;" (type_identifier "uint") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int iVar8;" (primitive_type "int") (identifier "iVar8") (; ";")) (declaration "int iVar9;" (primitive_type "int") (identifier "iVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "uint uVar12;" (type_identifier "uint") (identifier "uVar12") (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (expression_statement "iVar8 = param_2 * 4;" (assignment_expression "iVar8 = param_2 * 4" (identifier "iVar8") (= "=") (binary_expression "param_2 * 4" (identifier "param_2") (* "*") (number_literal "4"))) (; ";")) (if_statement "if (param_2 == 0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "puVar5 = (uint *)(param_1 + iVar8 + -4);" (assignment_expression "puVar5 = (uint *)(param_1 + iVar8 + -4)" (identifier "puVar5") (= "=") (cast_expression "(uint *)(param_1 + iVar8 + -4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + iVar8 + -4)" (( "(") (binary_expression "param_1 + iVar8 + -4" (binary_expression "param_1 + iVar8" (identifier "param_1") (+ "+") (identifier "iVar8")) (+ "+") (number_literal "-4")) () ")")))) (; ";")) (expression_statement "uVar2 = *puVar5;" (assignment_expression "uVar2 = *puVar5" (identifier "uVar2") (= "=") (pointer_expression "*puVar5" (* "*") (identifier "puVar5"))) (; ";")) (if_statement "if (-1 < (int)param_3) {\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }" (if "if") (parenthesized_expression "(-1 < (int)param_3)" (( "(") (binary_expression "-1 < (int)param_3" (number_literal "-1") (< "<") (cast_expression "(int)param_3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_3"))) () ")")) (compound_statement "{\n    if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }\n    if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }\n    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];\n    param_3 = param_3 << (uVar2 & 0x1f);\n    uVar10 = param_3 >> 0x10;\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar13 = ~param_3 / uVar10;\n    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);\n    uVar11 = (param_3 & 0xffff) * uVar13;\n    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;\n    uVar12 = uVar13;\n    if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }\n    if (uVar10 == 0) {\n      trap(7);\n    }\n    uVar14 = (uVar6 - uVar11) / uVar10;\n    uVar13 = (param_3 & 0xffff) * uVar14;\n    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;\n    uVar11 = param_3 + uVar6;\n    uVar10 = uVar14;\n    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }\n    uVar10 = uVar12 << 0x10 | uVar10;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }\n    iVar8 = uVar4 << (uVar2 & 0x1f);\n    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);\n    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n    uVar3 = param_3;\n    if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }\n    uVar4 = uVar4 + uVar3;\n    if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }\n    return uVar4 >> (uVar2 & 0x1f);\n  }" ({ "{") (if_statement "if (uVar2 < param_3) {\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }\n    else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }" (if "if") (parenthesized_expression "(uVar2 < param_3)" (( "(") (binary_expression "uVar2 < param_3" (identifier "uVar2") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n      param_2 = param_2 + -1;\n      if (param_2 == 0) {\n        return uVar2;\n      }\n      uVar4 = puVar5[-1];\n      uVar3 = uVar2;\n      iVar8 = iVar8 + -4;\n    }" ({ "{") (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" (identifier "param_2") (= "=") (binary_expression "param_2 + -1" (identifier "param_2") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (param_2 == 0) {\n        return uVar2;\n      }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return uVar2;\n      }" ({ "{") (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}"))) (expression_statement "uVar4 = puVar5[-1];" (assignment_expression "uVar4 = puVar5[-1]" (identifier "uVar4") (= "=") (subscript_expression "puVar5[-1]" (identifier "puVar5") ([ "[") (number_literal "-1") (] "]"))) (; ";")) (expression_statement "uVar3 = uVar2;" (assignment_expression "uVar3 = uVar2" (identifier "uVar3") (= "=") (identifier "uVar2")) (; ";")) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" (identifier "iVar8") (= "=") (binary_expression "iVar8 + -4" (identifier "iVar8") (+ "+") (number_literal "-4"))) (; ";")) (} "}")) (else_clause "else {\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }" (else "else") (compound_statement "{\n      uVar3 = 0;\n      uVar4 = uVar2;\n    }" ({ "{") (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar4 = uVar2;" (assignment_expression "uVar4 = uVar2" (identifier "uVar4") (= "=") (identifier "uVar2")) (; ";")) (} "}")))) (if_statement "if (param_3 < 0x10000) {\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }\n    else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }" (if "if") (parenthesized_expression "(param_3 < 0x10000)" (( "(") (binary_expression "param_3 < 0x10000" (identifier "param_3") (< "<") (number_literal "0x10000")) () ")")) (compound_statement "{\n      iVar9 = 0;\n      if (0xff < param_3) {\n        iVar9 = 0x18;\n      }\n      iVar7 = 9;\n      if (0xff >= param_3) {\n        iVar7 = 1;\n      }\n    }" ({ "{") (expression_statement "iVar9 = 0;" (assignment_expression "iVar9 = 0" (identifier "iVar9") (= "=") (number_literal "0")) (; ";")) (if_statement "if (0xff < param_3) {\n        iVar9 = 0x18;\n      }" (if "if") (parenthesized_expression "(0xff < param_3)" (( "(") (binary_expression "0xff < param_3" (number_literal "0xff") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n        iVar9 = 0x18;\n      }" ({ "{") (expression_statement "iVar9 = 0x18;" (assignment_expression "iVar9 = 0x18" (identifier "iVar9") (= "=") (number_literal "0x18")) (; ";")) (} "}"))) (expression_statement "iVar7 = 9;" (assignment_expression "iVar7 = 9" (identifier "iVar7") (= "=") (number_literal "9")) (; ";")) (if_statement "if (0xff >= param_3) {\n        iVar7 = 1;\n      }" (if "if") (parenthesized_expression "(0xff >= param_3)" (( "(") (binary_expression "0xff >= param_3" (number_literal "0xff") (>= ">=") (identifier "param_3")) () ")")) (compound_statement "{\n        iVar7 = 1;\n      }" ({ "{") (expression_statement "iVar7 = 1;" (assignment_expression "iVar7 = 1" (identifier "iVar7") (= "=") (number_literal "1")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }" (else "else") (compound_statement "{\n      iVar9 = 0x10;\n      if (0xffffff < param_3) {\n        iVar9 = 8;\n      }\n      iVar7 = 0x19;\n      if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }\n    }" ({ "{") (expression_statement "iVar9 = 0x10;" (assignment_expression "iVar9 = 0x10" (identifier "iVar9") (= "=") (number_literal "0x10")) (; ";")) (if_statement "if (0xffffff < param_3) {\n        iVar9 = 8;\n      }" (if "if") (parenthesized_expression "(0xffffff < param_3)" (( "(") (binary_expression "0xffffff < param_3" (number_literal "0xffffff") (< "<") (identifier "param_3")) () ")")) (compound_statement "{\n        iVar9 = 8;\n      }" ({ "{") (expression_statement "iVar9 = 8;" (assignment_expression "iVar9 = 8" (identifier "iVar9") (= "=") (number_literal "8")) (; ";")) (} "}"))) (expression_statement "iVar7 = 0x19;" (assignment_expression "iVar7 = 0x19" (identifier "iVar7") (= "=") (number_literal "0x19")) (; ";")) (if_statement "if (0xffffff >= param_3) {\n        iVar7 = 0x11;\n      }" (if "if") (parenthesized_expression "(0xffffff >= param_3)" (( "(") (binary_expression "0xffffff >= param_3" (number_literal "0xffffff") (>= ">=") (identifier "param_3")) () ")")) (compound_statement "{\n        iVar7 = 0x11;\n      }" ({ "{") (expression_statement "iVar7 = 0x11;" (assignment_expression "iVar7 = 0x11" (identifier "iVar7") (= "=") (number_literal "0x11")) (; ";")) (} "}"))) (} "}")))) (expression_statement "uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];" (assignment_expression "uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" (identifier "uVar2") (= "=") (binary_expression "iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" (identifier "iVar9") (- "-") (cast_expression "(uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (cast_expression "(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7]" (identifier "PTR___gmpn_clz_tab_0009718c") ([ "[") (binary_expression "param_3 >> iVar7" (identifier "param_3") (>> ">>") (identifier "iVar7")) (] "]")))))) (; ";")) (expression_statement "param_3 = param_3 << (uVar2 & 0x1f);" (assignment_expression "param_3 = param_3 << (uVar2 & 0x1f)" (identifier "param_3") (= "=") (binary_expression "param_3 << (uVar2 & 0x1f)" (identifier "param_3") (<< "<<") (parenthesized_expression "(uVar2 & 0x1f)" (( "(") (binary_expression "uVar2 & 0x1f" (identifier "uVar2") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar10 = param_3 >> 0x10;" (assignment_expression "uVar10 = param_3 >> 0x10" (identifier "uVar10") (= "=") (binary_expression "param_3 >> 0x10" (identifier "param_3") (>> ">>") (number_literal "0x10"))) (; ";")) (if_statement "if (uVar10 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar13 = ~param_3 / uVar10;" (assignment_expression "uVar13 = ~param_3 / uVar10" (identifier "uVar13") (= "=") (binary_expression "~param_3 / uVar10" (unary_expression "~param_3" (~ "~") (identifier "param_3")) (/ "/") (identifier "uVar10"))) (; ";")) (expression_statement "uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);" (assignment_expression "uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f)" (identifier "uVar3") (= "=") (binary_expression "uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f)" (binary_expression "uVar4 >> (0x20 - uVar2 & 0x1f)" (identifier "uVar4") (>> ">>") (parenthesized_expression "(0x20 - uVar2 & 0x1f)" (( "(") (binary_expression "0x20 - uVar2 & 0x1f" (binary_expression "0x20 - uVar2" (number_literal "0x20") (- "-") (identifier "uVar2")) (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "uVar3 << (uVar2 & 0x1f)" (identifier "uVar3") (<< "<<") (parenthesized_expression "(uVar2 & 0x1f)" (( "(") (binary_expression "uVar2 & 0x1f" (identifier "uVar2") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "uVar11 = (param_3 & 0xffff) * uVar13;" (assignment_expression "uVar11 = (param_3 & 0xffff) * uVar13" (identifier "uVar11") (= "=") (binary_expression "(param_3 & 0xffff) * uVar13" (parenthesized_expression "(param_3 & 0xffff)" (( "(") (binary_expression "param_3 & 0xffff" (identifier "param_3") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar13"))) (; ";")) (expression_statement "uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;" (assignment_expression "uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff" (identifier "uVar6") (= "=") (binary_expression "~param_3 % uVar10 << 0x10 | 0xffff" (binary_expression "~param_3 % uVar10 << 0x10" (binary_expression "~param_3 % uVar10" (unary_expression "~param_3" (~ "~") (identifier "param_3")) (% "%") (identifier "uVar10")) (<< "<<") (number_literal "0x10")) (| "|") (number_literal "0xffff"))) (; ";")) (expression_statement "uVar12 = uVar13;" (assignment_expression "uVar12 = uVar13" (identifier "uVar12") (= "=") (identifier "uVar13")) (; ";")) (if_statement "if (uVar6 < uVar11) {\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }" (if "if") (parenthesized_expression "(uVar6 < uVar11)" (( "(") (binary_expression "uVar6 < uVar11" (identifier "uVar6") (< "<") (identifier "uVar11")) () ")")) (compound_statement "{\n      uVar6 = uVar6 + param_3;\n      uVar12 = uVar13 - 1;\n      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }\n    }" ({ "{") (expression_statement "uVar6 = uVar6 + param_3;" (assignment_expression "uVar6 = uVar6 + param_3" (identifier "uVar6") (= "=") (binary_expression "uVar6 + param_3" (identifier "uVar6") (+ "+") (identifier "param_3"))) (; ";")) (expression_statement "uVar12 = uVar13 - 1;" (assignment_expression "uVar12 = uVar13 - 1" (identifier "uVar12") (= "=") (binary_expression "uVar13 - 1" (identifier "uVar13") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((param_3 <= uVar6) && (uVar6 < uVar11)) {\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }" (if "if") (parenthesized_expression "((param_3 <= uVar6) && (uVar6 < uVar11))" (( "(") (binary_expression "(param_3 <= uVar6) && (uVar6 < uVar11)" (parenthesized_expression "(param_3 <= uVar6)" (( "(") (binary_expression "param_3 <= uVar6" (identifier "param_3") (<= "<=") (identifier "uVar6")) () ")")) (&& "&&") (parenthesized_expression "(uVar6 < uVar11)" (( "(") (binary_expression "uVar6 < uVar11" (identifier "uVar6") (< "<") (identifier "uVar11")) () ")"))) () ")")) (compound_statement "{\n        uVar6 = uVar6 + param_3;\n        uVar12 = uVar13 - 2;\n      }" ({ "{") (expression_statement "uVar6 = uVar6 + param_3;" (assignment_expression "uVar6 = uVar6 + param_3" (identifier "uVar6") (= "=") (binary_expression "uVar6 + param_3" (identifier "uVar6") (+ "+") (identifier "param_3"))) (; ";")) (expression_statement "uVar12 = uVar13 - 2;" (assignment_expression "uVar12 = uVar13 - 2" (identifier "uVar12") (= "=") (binary_expression "uVar13 - 2" (identifier "uVar13") (- "-") (number_literal "2"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar10 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar10 == 0)" (( "(") (binary_expression "uVar10 == 0" (identifier "uVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar14 = (uVar6 - uVar11) / uVar10;" (assignment_expression "uVar14 = (uVar6 - uVar11) / uVar10" (identifier "uVar14") (= "=") (binary_expression "(uVar6 - uVar11) / uVar10" (parenthesized_expression "(uVar6 - uVar11)" (( "(") (binary_expression "uVar6 - uVar11" (identifier "uVar6") (- "-") (identifier "uVar11")) () ")")) (/ "/") (identifier "uVar10"))) (; ";")) (expression_statement "uVar13 = (param_3 & 0xffff) * uVar14;" (assignment_expression "uVar13 = (param_3 & 0xffff) * uVar14" (identifier "uVar13") (= "=") (binary_expression "(param_3 & 0xffff) * uVar14" (parenthesized_expression "(param_3 & 0xffff)" (( "(") (binary_expression "param_3 & 0xffff" (identifier "param_3") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar14"))) (; ";")) (expression_statement "uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;" (assignment_expression "uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff" (identifier "uVar6") (= "=") (binary_expression "(uVar6 - uVar11) % uVar10 << 0x10 | 0xffff" (binary_expression "(uVar6 - uVar11) % uVar10 << 0x10" (binary_expression "(uVar6 - uVar11) % uVar10" (parenthesized_expression "(uVar6 - uVar11)" (( "(") (binary_expression "uVar6 - uVar11" (identifier "uVar6") (- "-") (identifier "uVar11")) () ")")) (% "%") (identifier "uVar10")) (<< "<<") (number_literal "0x10")) (| "|") (number_literal "0xffff"))) (; ";")) (expression_statement "uVar11 = param_3 + uVar6;" (assignment_expression "uVar11 = param_3 + uVar6" (identifier "uVar11") (= "=") (binary_expression "param_3 + uVar6" (identifier "param_3") (+ "+") (identifier "uVar6"))) (; ";")) (expression_statement "uVar10 = uVar14;" (assignment_expression "uVar10 = uVar14" (identifier "uVar10") (= "=") (identifier "uVar14")) (; ";")) (if_statement "if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {\n      uVar10 = uVar14 - 2;\n    }" (if "if") (parenthesized_expression "(((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13))" (( "(") (binary_expression "((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)" (parenthesized_expression "((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11))" (( "(") (binary_expression "(uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)" (parenthesized_expression "(uVar6 < uVar13)" (( "(") (binary_expression "uVar6 < uVar13" (identifier "uVar6") (< "<") (identifier "uVar13")) () ")")) (&& "&&") (parenthesized_expression "(uVar10 = uVar14 - 1, param_3 <= uVar11)" (( "(") (comma_expression "uVar10 = uVar14 - 1, param_3 <= uVar11" (assignment_expression "uVar10 = uVar14 - 1" (identifier "uVar10") (= "=") (binary_expression "uVar14 - 1" (identifier "uVar14") (- "-") (number_literal "1"))) (, ",") (binary_expression "param_3 <= uVar11" (identifier "param_3") (<= "<=") (identifier "uVar11"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(uVar11 < uVar13)" (( "(") (binary_expression "uVar11 < uVar13" (identifier "uVar11") (< "<") (identifier "uVar13")) () ")"))) () ")")) (compound_statement "{\n      uVar10 = uVar14 - 2;\n    }" ({ "{") (expression_statement "uVar10 = uVar14 - 2;" (assignment_expression "uVar10 = uVar14 - 2" (identifier "uVar10") (= "=") (binary_expression "uVar14 - 2" (identifier "uVar14") (- "-") (number_literal "2"))) (; ";")) (} "}"))) (expression_statement "uVar10 = uVar12 << 0x10 | uVar10;" (assignment_expression "uVar10 = uVar12 << 0x10 | uVar10" (identifier "uVar10") (= "=") (binary_expression "uVar12 << 0x10 | uVar10" (binary_expression "uVar12 << 0x10" (identifier "uVar12") (<< "<<") (number_literal "0x10")) (| "|") (identifier "uVar10"))) (; ";")) (if_statement "if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }" (if "if") (parenthesized_expression "(1 < param_2)" (( "(") (binary_expression "1 < param_2" (number_literal "1") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n      uVar12 = uVar4;\n      do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);\n    }" ({ "{") (expression_statement "iVar8 = param_1 + iVar8;" (assignment_expression "iVar8 = param_1 + iVar8" (identifier "iVar8") (= "=") (binary_expression "param_1 + iVar8" (identifier "param_1") (+ "+") (identifier "iVar8"))) (; ";")) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10" (identifier "lVar1") (= "=") (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10" (cast_expression "(ulonglong)uVar3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar3")) (* "*") (cast_expression "(ulonglong)uVar10" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar10")))) (; ";")) (expression_statement "uVar12 = uVar4;" (assignment_expression "uVar12 = uVar4" (identifier "uVar12") (= "=") (identifier "uVar4")) (; ";")) (do_statement "do {\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      } while (param_1 + 4 != iVar8);" (do "do") (compound_statement "{\n        uVar4 = *(uint *)(iVar8 + -8);\n        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);\n        iVar8 = iVar8 + -4;\n        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);\n        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar3 = param_3;\n        if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }\n        uVar3 = uVar12 + uVar3;\n        if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }\n        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;\n        uVar12 = uVar4;\n      }" ({ "{") (expression_statement "uVar4 = *(uint *)(iVar8 + -8);" (assignment_expression "uVar4 = *(uint *)(iVar8 + -8)" (identifier "uVar4") (= "=") (pointer_expression "*(uint *)(iVar8 + -8)" (* "*") (cast_expression "(uint *)(iVar8 + -8)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar8 + -8)" (( "(") (binary_expression "iVar8 + -8" (identifier "iVar8") (+ "+") (number_literal "-8")) () ")"))))) (; ";")) (expression_statement "uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);" (assignment_expression "uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f)" (identifier "uVar12") (= "=") (binary_expression "uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f)" (binary_expression "uVar12 << (uVar2 & 0x1f)" (identifier "uVar12") (<< "<<") (parenthesized_expression "(uVar2 & 0x1f)" (( "(") (binary_expression "uVar2 & 0x1f" (identifier "uVar2") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "uVar4 >> (0x20 - uVar2 & 0x1f)" (identifier "uVar4") (>> ">>") (parenthesized_expression "(0x20 - uVar2 & 0x1f)" (( "(") (binary_expression "0x20 - uVar2 & 0x1f" (binary_expression "0x20 - uVar2" (number_literal "0x20") (- "-") (identifier "uVar2")) (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" (identifier "iVar8") (= "=") (binary_expression "iVar8 + -4" (identifier "iVar8") (+ "+") (number_literal "-4"))) (; ";")) (expression_statement "lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);" (assignment_expression "lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12)" (identifier "lVar1") (= "=") (binary_expression "lVar1 + CONCAT44(uVar3 + 1,uVar12)" (identifier "lVar1") (+ "+") (call_expression "CONCAT44(uVar3 + 1,uVar12)" (identifier "CONCAT44") (argument_list "(uVar3 + 1,uVar12)" (( "(") (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1")) (, ",") (identifier "uVar12") () ")"))))) (; ";")) (expression_statement "uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;" (assignment_expression "uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3" (identifier "uVar12") (= "=") (binary_expression "uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3" (identifier "uVar12") (- "-") (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * param_3" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x20")) () ")"))) (* "*") (identifier "param_3")))) (; ";")) (expression_statement "uVar3 = param_3;" (assignment_expression "uVar3 = param_3" (identifier "uVar3") (= "=") (identifier "param_3")) (; ";")) (if_statement "if (uVar12 <= (uint)lVar1) {\n          uVar3 = 0;\n        }" (if "if") (parenthesized_expression "(uVar12 <= (uint)lVar1)" (( "(") (binary_expression "uVar12 <= (uint)lVar1" (identifier "uVar12") (<= "<=") (cast_expression "(uint)lVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar1"))) () ")")) (compound_statement "{\n          uVar3 = 0;\n        }" ({ "{") (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar3 = uVar12 + uVar3;" (assignment_expression "uVar3 = uVar12 + uVar3" (identifier "uVar3") (= "=") (binary_expression "uVar12 + uVar3" (identifier "uVar12") (+ "+") (identifier "uVar3"))) (; ";")) (if_statement "if (param_3 <= uVar3) {\n          uVar3 = uVar3 - param_3;\n        }" (if "if") (parenthesized_expression "(param_3 <= uVar3)" (( "(") (binary_expression "param_3 <= uVar3" (identifier "param_3") (<= "<=") (identifier "uVar3")) () ")")) (compound_statement "{\n          uVar3 = uVar3 - param_3;\n        }" ({ "{") (expression_statement "uVar3 = uVar3 - param_3;" (assignment_expression "uVar3 = uVar3 - param_3" (identifier "uVar3") (= "=") (binary_expression "uVar3 - param_3" (identifier "uVar3") (- "-") (identifier "param_3"))) (; ";")) (} "}"))) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10" (identifier "lVar1") (= "=") (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10" (cast_expression "(ulonglong)uVar3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar3")) (* "*") (cast_expression "(ulonglong)uVar10" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar10")))) (; ";")) (expression_statement "uVar12 = uVar4;" (assignment_expression "uVar12 = uVar4" (identifier "uVar12") (= "=") (identifier "uVar4")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_1 + 4 != iVar8)" (( "(") (binary_expression "param_1 + 4 != iVar8" (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) (!= "!=") (identifier "iVar8")) () ")")) (; ";")) (} "}"))) (expression_statement "iVar8 = uVar4 << (uVar2 & 0x1f);" (assignment_expression "iVar8 = uVar4 << (uVar2 & 0x1f)" (identifier "iVar8") (= "=") (binary_expression "uVar4 << (uVar2 & 0x1f)" (identifier "uVar4") (<< "<<") (parenthesized_expression "(uVar2 & 0x1f)" (( "(") (binary_expression "uVar2 & 0x1f" (identifier "uVar2") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);" (assignment_expression "lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8)" (identifier "lVar1") (= "=") (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8)" (binary_expression "(ulonglong)uVar3 * (ulonglong)uVar10" (cast_expression "(ulonglong)uVar3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar3")) (* "*") (cast_expression "(ulonglong)uVar10" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar10"))) (+ "+") (call_expression "CONCAT44(uVar3 + 1,iVar8)" (identifier "CONCAT44") (argument_list "(uVar3 + 1,iVar8)" (( "(") (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1")) (, ",") (identifier "iVar8") () ")"))))) (; ";")) (expression_statement "uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;" (assignment_expression "uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3" (identifier "uVar4") (= "=") (binary_expression "iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3" (identifier "iVar8") (- "-") (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * param_3" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x20")) () ")"))) (* "*") (identifier "param_3")))) (; ";")) (expression_statement "uVar3 = param_3;" (assignment_expression "uVar3 = param_3" (identifier "uVar3") (= "=") (identifier "param_3")) (; ";")) (if_statement "if (uVar4 <= (uint)lVar1) {\n      uVar3 = 0;\n    }" (if "if") (parenthesized_expression "(uVar4 <= (uint)lVar1)" (( "(") (binary_expression "uVar4 <= (uint)lVar1" (identifier "uVar4") (<= "<=") (cast_expression "(uint)lVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar1"))) () ")")) (compound_statement "{\n      uVar3 = 0;\n    }" ({ "{") (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar4 = uVar4 + uVar3;" (assignment_expression "uVar4 = uVar4 + uVar3" (identifier "uVar4") (= "=") (binary_expression "uVar4 + uVar3" (identifier "uVar4") (+ "+") (identifier "uVar3"))) (; ";")) (if_statement "if (param_3 <= uVar4) {\n      uVar4 = uVar4 - param_3;\n    }" (if "if") (parenthesized_expression "(param_3 <= uVar4)" (( "(") (binary_expression "param_3 <= uVar4" (identifier "param_3") (<= "<=") (identifier "uVar4")) () ")")) (compound_statement "{\n      uVar4 = uVar4 - param_3;\n    }" ({ "{") (expression_statement "uVar4 = uVar4 - param_3;" (assignment_expression "uVar4 = uVar4 - param_3" (identifier "uVar4") (= "=") (binary_expression "uVar4 - param_3" (identifier "uVar4") (- "-") (identifier "param_3"))) (; ";")) (} "}"))) (return_statement "return uVar4 >> (uVar2 & 0x1f);" (return "return") (binary_expression "uVar4 >> (uVar2 & 0x1f)" (identifier "uVar4") (>> ">>") (parenthesized_expression "(uVar2 & 0x1f)" (( "(") (binary_expression "uVar2 & 0x1f" (identifier "uVar2") (& "&") (number_literal "0x1f")) () ")"))) (; ";")) (} "}"))) (if_statement "if (param_3 <= uVar2) {\n    uVar2 = uVar2 - param_3;\n  }" (if "if") (parenthesized_expression "(param_3 <= uVar2)" (( "(") (binary_expression "param_3 <= uVar2" (identifier "param_3") (<= "<=") (identifier "uVar2")) () ")")) (compound_statement "{\n    uVar2 = uVar2 - param_3;\n  }" ({ "{") (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" (identifier "uVar2") (= "=") (binary_expression "uVar2 - param_3" (identifier "uVar2") (- "-") (identifier "param_3"))) (; ";")) (} "}"))) (expression_statement "uVar3 = param_3 >> 0x10;" (assignment_expression "uVar3 = param_3 >> 0x10" (identifier "uVar3") (= "=") (binary_expression "param_3 >> 0x10" (identifier "param_3") (>> ">>") (number_literal "0x10"))) (; ";")) (if_statement "if (param_2 != 1) {\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 != 1)" (( "(") (binary_expression "param_2 != 1" (identifier "param_2") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar6 = ~param_3 / uVar3;\n    uVar12 = (param_3 & 0xffff) * uVar6;\n    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;\n    uVar4 = uVar6;\n    if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }\n    if (uVar3 == 0) {\n      trap(7);\n    }\n    uVar11 = (uVar10 - uVar12) / uVar3;\n    uVar6 = (param_3 & 0xffff) * uVar11;\n    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;\n    uVar12 = param_3 + uVar10;\n    uVar3 = uVar11;\n    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }\n    uVar3 = uVar4 << 0x10 | uVar3;\n    if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }\n  }" ({ "{") (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = ~param_3 / uVar3;" (assignment_expression "uVar6 = ~param_3 / uVar3" (identifier "uVar6") (= "=") (binary_expression "~param_3 / uVar3" (unary_expression "~param_3" (~ "~") (identifier "param_3")) (/ "/") (identifier "uVar3"))) (; ";")) (expression_statement "uVar12 = (param_3 & 0xffff) * uVar6;" (assignment_expression "uVar12 = (param_3 & 0xffff) * uVar6" (identifier "uVar12") (= "=") (binary_expression "(param_3 & 0xffff) * uVar6" (parenthesized_expression "(param_3 & 0xffff)" (( "(") (binary_expression "param_3 & 0xffff" (identifier "param_3") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar6"))) (; ";")) (expression_statement "uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;" (assignment_expression "uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff" (identifier "uVar10") (= "=") (binary_expression "~param_3 % uVar3 << 0x10 | 0xffff" (binary_expression "~param_3 % uVar3 << 0x10" (binary_expression "~param_3 % uVar3" (unary_expression "~param_3" (~ "~") (identifier "param_3")) (% "%") (identifier "uVar3")) (<< "<<") (number_literal "0x10")) (| "|") (number_literal "0xffff"))) (; ";")) (expression_statement "uVar4 = uVar6;" (assignment_expression "uVar4 = uVar6" (identifier "uVar4") (= "=") (identifier "uVar6")) (; ";")) (if_statement "if (uVar10 < uVar12) {\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }" (if "if") (parenthesized_expression "(uVar10 < uVar12)" (( "(") (binary_expression "uVar10 < uVar12" (identifier "uVar10") (< "<") (identifier "uVar12")) () ")")) (compound_statement "{\n      uVar10 = uVar10 + param_3;\n      uVar4 = uVar6 - 1;\n      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }\n    }" ({ "{") (expression_statement "uVar10 = uVar10 + param_3;" (assignment_expression "uVar10 = uVar10 + param_3" (identifier "uVar10") (= "=") (binary_expression "uVar10 + param_3" (identifier "uVar10") (+ "+") (identifier "param_3"))) (; ";")) (expression_statement "uVar4 = uVar6 - 1;" (assignment_expression "uVar4 = uVar6 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar6 - 1" (identifier "uVar6") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((param_3 <= uVar10) && (uVar10 < uVar12)) {\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }" (if "if") (parenthesized_expression "((param_3 <= uVar10) && (uVar10 < uVar12))" (( "(") (binary_expression "(param_3 <= uVar10) && (uVar10 < uVar12)" (parenthesized_expression "(param_3 <= uVar10)" (( "(") (binary_expression "param_3 <= uVar10" (identifier "param_3") (<= "<=") (identifier "uVar10")) () ")")) (&& "&&") (parenthesized_expression "(uVar10 < uVar12)" (( "(") (binary_expression "uVar10 < uVar12" (identifier "uVar10") (< "<") (identifier "uVar12")) () ")"))) () ")")) (compound_statement "{\n        uVar4 = uVar6 - 2;\n        uVar10 = uVar10 + param_3;\n      }" ({ "{") (expression_statement "uVar4 = uVar6 - 2;" (assignment_expression "uVar4 = uVar6 - 2" (identifier "uVar4") (= "=") (binary_expression "uVar6 - 2" (identifier "uVar6") (- "-") (number_literal "2"))) (; ";")) (expression_statement "uVar10 = uVar10 + param_3;" (assignment_expression "uVar10 = uVar10 + param_3" (identifier "uVar10") (= "=") (binary_expression "uVar10 + param_3" (identifier "uVar10") (+ "+") (identifier "param_3"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar3 == 0) {\n      trap(7);\n    }" (if "if") (parenthesized_expression "(uVar3 == 0)" (( "(") (binary_expression "uVar3 == 0" (identifier "uVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      trap(7);\n    }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar11 = (uVar10 - uVar12) / uVar3;" (assignment_expression "uVar11 = (uVar10 - uVar12) / uVar3" (identifier "uVar11") (= "=") (binary_expression "(uVar10 - uVar12) / uVar3" (parenthesized_expression "(uVar10 - uVar12)" (( "(") (binary_expression "uVar10 - uVar12" (identifier "uVar10") (- "-") (identifier "uVar12")) () ")")) (/ "/") (identifier "uVar3"))) (; ";")) (expression_statement "uVar6 = (param_3 & 0xffff) * uVar11;" (assignment_expression "uVar6 = (param_3 & 0xffff) * uVar11" (identifier "uVar6") (= "=") (binary_expression "(param_3 & 0xffff) * uVar11" (parenthesized_expression "(param_3 & 0xffff)" (( "(") (binary_expression "param_3 & 0xffff" (identifier "param_3") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar11"))) (; ";")) (expression_statement "uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;" (assignment_expression "uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff" (identifier "uVar10") (= "=") (binary_expression "(uVar10 - uVar12) % uVar3 << 0x10 | 0xffff" (binary_expression "(uVar10 - uVar12) % uVar3 << 0x10" (binary_expression "(uVar10 - uVar12) % uVar3" (parenthesized_expression "(uVar10 - uVar12)" (( "(") (binary_expression "uVar10 - uVar12" (identifier "uVar10") (- "-") (identifier "uVar12")) () ")")) (% "%") (identifier "uVar3")) (<< "<<") (number_literal "0x10")) (| "|") (number_literal "0xffff"))) (; ";")) (expression_statement "uVar12 = param_3 + uVar10;" (assignment_expression "uVar12 = param_3 + uVar10" (identifier "uVar12") (= "=") (binary_expression "param_3 + uVar10" (identifier "param_3") (+ "+") (identifier "uVar10"))) (; ";")) (expression_statement "uVar3 = uVar11;" (assignment_expression "uVar3 = uVar11" (identifier "uVar3") (= "=") (identifier "uVar11")) (; ";")) (if_statement "if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {\n      uVar3 = uVar11 - 2;\n    }" (if "if") (parenthesized_expression "(((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6))" (( "(") (binary_expression "((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)" (parenthesized_expression "((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12))" (( "(") (binary_expression "(uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)" (parenthesized_expression "(uVar10 < uVar6)" (( "(") (binary_expression "uVar10 < uVar6" (identifier "uVar10") (< "<") (identifier "uVar6")) () ")")) (&& "&&") (parenthesized_expression "(uVar3 = uVar11 - 1, param_3 <= uVar12)" (( "(") (comma_expression "uVar3 = uVar11 - 1, param_3 <= uVar12" (assignment_expression "uVar3 = uVar11 - 1" (identifier "uVar3") (= "=") (binary_expression "uVar11 - 1" (identifier "uVar11") (- "-") (number_literal "1"))) (, ",") (binary_expression "param_3 <= uVar12" (identifier "param_3") (<= "<=") (identifier "uVar12"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(uVar12 < uVar6)" (( "(") (binary_expression "uVar12 < uVar6" (identifier "uVar12") (< "<") (identifier "uVar6")) () ")"))) () ")")) (compound_statement "{\n      uVar3 = uVar11 - 2;\n    }" ({ "{") (expression_statement "uVar3 = uVar11 - 2;" (assignment_expression "uVar3 = uVar11 - 2" (identifier "uVar3") (= "=") (binary_expression "uVar11 - 2" (identifier "uVar11") (- "-") (number_literal "2"))) (; ";")) (} "}"))) (expression_statement "uVar3 = uVar4 << 0x10 | uVar3;" (assignment_expression "uVar3 = uVar4 << 0x10 | uVar3" (identifier "uVar3") (= "=") (binary_expression "uVar4 << 0x10 | uVar3" (binary_expression "uVar4 << 0x10" (identifier "uVar4") (<< "<<") (number_literal "0x10")) (| "|") (identifier "uVar3"))) (; ";")) (if_statement "if (1 < param_2) {\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }" (if "if") (parenthesized_expression "(1 < param_2)" (( "(") (binary_expression "1 < param_2" (number_literal "1") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n      iVar8 = param_1 + iVar8;\n      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);\n      return uVar2;\n    }" ({ "{") (expression_statement "iVar8 = param_1 + iVar8;" (assignment_expression "iVar8 = param_1 + iVar8" (identifier "iVar8") (= "=") (binary_expression "param_1 + iVar8" (identifier "param_1") (+ "+") (identifier "iVar8"))) (; ";")) (expression_statement "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;" (assignment_expression "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3" (identifier "lVar1") (= "=") (binary_expression "(ulonglong)uVar2 * (ulonglong)uVar3" (cast_expression "(ulonglong)uVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar2")) (* "*") (cast_expression "(ulonglong)uVar3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar3")))) (; ";")) (do_statement "do {\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      } while (param_1 + 4 != iVar8);" (do "do") (compound_statement "{\n        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));\n        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;\n        uVar4 = param_3;\n        if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }\n        uVar2 = uVar2 + uVar4;\n        iVar8 = iVar8 + -4;\n        if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }\n        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;\n      }" ({ "{") (expression_statement "lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));" (assignment_expression "lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8))" (identifier "lVar1") (= "=") (binary_expression "lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8))" (identifier "lVar1") (+ "+") (call_expression "CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8))" (identifier "CONCAT44") (argument_list "(uVar2 + 1,*(int *)(iVar8 + -8))" (( "(") (binary_expression "uVar2 + 1" (identifier "uVar2") (+ "+") (number_literal "1")) (, ",") (pointer_expression "*(int *)(iVar8 + -8)" (* "*") (cast_expression "(int *)(iVar8 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar8 + -8)" (( "(") (binary_expression "iVar8 + -8" (identifier "iVar8") (+ "+") (number_literal "-8")) () ")")))) () ")"))))) (; ";")) (expression_statement "uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;" (assignment_expression "uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3" (identifier "uVar2") (= "=") (binary_expression "*(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3" (pointer_expression "*(int *)(iVar8 + -8)" (* "*") (cast_expression "(int *)(iVar8 + -8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar8 + -8)" (( "(") (binary_expression "iVar8 + -8" (identifier "iVar8") (+ "+") (number_literal "-8")) () ")")))) (- "-") (binary_expression "(int)((ulonglong)lVar1 >> 0x20) * param_3" (cast_expression "(int)((ulonglong)lVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((ulonglong)lVar1 >> 0x20)" (( "(") (binary_expression "(ulonglong)lVar1 >> 0x20" (cast_expression "(ulonglong)lVar1" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "lVar1")) (>> ">>") (number_literal "0x20")) () ")"))) (* "*") (identifier "param_3")))) (; ";")) (expression_statement "uVar4 = param_3;" (assignment_expression "uVar4 = param_3" (identifier "uVar4") (= "=") (identifier "param_3")) (; ";")) (if_statement "if (uVar2 <= (uint)lVar1) {\n          uVar4 = 0;\n        }" (if "if") (parenthesized_expression "(uVar2 <= (uint)lVar1)" (( "(") (binary_expression "uVar2 <= (uint)lVar1" (identifier "uVar2") (<= "<=") (cast_expression "(uint)lVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "lVar1"))) () ")")) (compound_statement "{\n          uVar4 = 0;\n        }" ({ "{") (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar2 = uVar2 + uVar4;" (assignment_expression "uVar2 = uVar2 + uVar4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + uVar4" (identifier "uVar2") (+ "+") (identifier "uVar4"))) (; ";")) (expression_statement "iVar8 = iVar8 + -4;" (assignment_expression "iVar8 = iVar8 + -4" (identifier "iVar8") (= "=") (binary_expression "iVar8 + -4" (identifier "iVar8") (+ "+") (number_literal "-4"))) (; ";")) (if_statement "if (param_3 <= uVar2) {\n          uVar2 = uVar2 - param_3;\n        }" (if "if") (parenthesized_expression "(param_3 <= uVar2)" (( "(") (binary_expression "param_3 <= uVar2" (identifier "param_3") (<= "<=") (identifier "uVar2")) () ")")) (compound_statement "{\n          uVar2 = uVar2 - param_3;\n        }" ({ "{") (expression_statement "uVar2 = uVar2 - param_3;" (assignment_expression "uVar2 = uVar2 - param_3" (identifier "uVar2") (= "=") (binary_expression "uVar2 - param_3" (identifier "uVar2") (- "-") (identifier "param_3"))) (; ";")) (} "}"))) (expression_statement "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;" (assignment_expression "lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3" (identifier "lVar1") (= "=") (binary_expression "(ulonglong)uVar2 * (ulonglong)uVar3" (cast_expression "(ulonglong)uVar2" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar2")) (* "*") (cast_expression "(ulonglong)uVar3" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "uVar3")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_1 + 4 != iVar8)" (( "(") (binary_expression "param_1 + 4 != iVar8" (binary_expression "param_1 + 4" (identifier "param_1") (+ "+") (number_literal "4")) (!= "!=") (identifier "iVar8")) () ")")) (; ";")) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}"))) (} "}"))) (return_statement "return uVar2;" (return "return") (identifier "uVar2") (; ";")) (} "}")))

type_1 function_1(type_2 var_4,type_3 var_1,type_1 var_3)

{
  type_4 var_19;
  type_5 var_2;
  type_5 var_12;
  type_1 var_21;
  type_5 var_11;
  type_5 var_14;
  int var_7;
  int var_6;
  type_2 var_18;
  int var_5;
  type_5 var_8;
  type_5 var_9;
  type_5 var_15;
  type_5 var_17;
  type_5 var_13;
  type_5 var_16;
  
  var_6 = var_1 * 4;
  if (var_1 == 0) {
    return 0;
  }
  var_5 = var_1 + -1;
  var_2 = var_4[var_5];
  if (-1 < (int)var_3) {
    if (var_2 < var_3) {
      var_1 = var_1 + -1;
      if (var_1 == 0) {
        return var_2;
      }
      var_11 = (var_4 + var_5)[-1];
      var_12 = var_2;
      var_6 = var_6 + -4;
    }
    else {
      var_12 = 0;
      var_11 = var_2;
    }
    if (var_3 < 0x10000) {
      var_5 = 0;
      if (0xff < var_3) {
        var_5 = 0x18;
      }
      var_7 = 9;
      if (0xff >= var_3) {
        var_7 = 1;
      }
    }
    else {
      var_5 = 0x10;
      if (0xffffff < var_3) {
        var_5 = 8;
      }
      var_7 = 0x19;
      if (0xffffff >= var_3) {
        var_7 = 0x11;
      }
    }
    var_8 = var_5 - (type_5)(type_6)PTR___gmpn_clz_tab_0009718c[var_3 >> var_7];
    var_2 = var_3 << (var_8 & 0x1f);
    var_9 = var_2 >> 0x10;
    if (var_9 == 0) {
      var_10(7);
    }
    var_13 = ~var_2 / var_9;
    var_12 = var_11 >> (0x20 - var_8 & 0x1f) | var_12 << (var_8 & 0x1f);
    var_15 = (var_2 & 0xffff) * var_13;
    var_14 = ~var_2 % var_9 << 0x10 | 0xffff;
    var_17 = var_13;
    if (var_14 < var_15) {
      var_14 = var_14 + var_2;
      var_17 = var_13 - 1;
      if ((var_2 <= var_14) && (var_14 < var_15)) {
        var_14 = var_14 + var_2;
        var_17 = var_13 - 2;
      }
    }
    if (var_9 == 0) {
      var_10(7);
    }
    var_16 = (var_14 - var_15) / var_9;
    var_13 = (var_2 & 0xffff) * var_16;
    var_14 = (var_14 - var_15) % var_9 << 0x10 | 0xffff;
    var_15 = var_2 + var_14;
    var_9 = var_16;
    if (((var_14 < var_13) && (var_9 = var_16 - 1, var_2 <= var_15)) && (var_15 < var_13)) {
      var_9 = var_16 - 2;
    }
    var_9 = var_17 << 0x10 | var_9;
    if (1 < var_1) {
      var_18 = (type_2)((int)var_4 + var_6);
      var_19 = (type_7)var_12 * (type_7)var_9;
      var_17 = var_11;
      do {
        var_11 = var_18[-2];
        var_17 = var_17 << (var_8 & 0x1f) | var_11 >> (0x20 - var_8 & 0x1f);
        var_18 = var_18 + -1;
        var_19 = var_19 + var_20(var_12 + 1,var_17);
        var_17 = var_17 - (int)((type_7)var_19 >> 0x20) * var_2;
        var_12 = var_2;
        if (var_17 <= (type_5)var_19) {
          var_12 = 0;
        }
        var_12 = var_17 + var_12;
        if (var_2 <= var_12) {
          var_12 = var_12 - var_2;
        }
        var_19 = (type_7)var_12 * (type_7)var_9;
        var_17 = var_11;
      } while (var_4 + 1 != var_18);
    }
    var_6 = var_11 << (var_8 & 0x1f);
    var_19 = (type_7)var_12 * (type_7)var_9 + var_20(var_12 + 1,var_6);
    var_11 = var_6 - (int)((type_7)var_19 >> 0x20) * var_2;
    var_12 = var_2;
    if (var_11 <= (type_5)var_19) {
      var_12 = 0;
    }
    var_11 = var_11 + var_12;
    if (var_2 <= var_11) {
      var_11 = var_11 - var_2;
    }
    return var_11 >> (var_8 & 0x1f);
  }
  if (var_3 <= var_2) {
    var_2 = var_2 - var_3;
  }
  var_12 = var_3 >> 0x10;
  if (var_1 != 1) {
    if (var_12 == 0) {
      var_10(7);
    }
    var_17 = ~var_3 / var_12;
    var_9 = (var_3 & 0xffff) * var_17;
    var_8 = ~var_3 % var_12 << 0x10 | 0xffff;
    var_11 = var_17;
    if (var_8 < var_9) {
      var_8 = var_8 + var_3;
      var_11 = var_17 - 1;
      if ((var_3 <= var_8) && (var_8 < var_9)) {
        var_11 = var_17 - 2;
        var_8 = var_8 + var_3;
      }
    }
    if (var_12 == 0) {
      var_10(7);
    }
    var_14 = (var_8 - var_9) / var_12;
    var_17 = (var_3 & 0xffff) * var_14;
    var_8 = (var_8 - var_9) % var_12 << 0x10 | 0xffff;
    var_9 = var_3 + var_8;
    var_12 = var_14;
    if (((var_8 < var_17) && (var_12 = var_14 - 1, var_3 <= var_9)) && (var_9 < var_17)) {
      var_12 = var_14 - 2;
    }
    var_12 = var_11 << 0x10 | var_12;
    if (1 < var_1) {
      var_18 = var_4 + var_1;
      var_19 = (type_7)var_2 * (type_7)var_12;
      do {
        var_19 = var_19 + var_20(var_2 + 1,var_18[-2]);
        var_2 = var_18[-2] - (int)((type_7)var_19 >> 0x20) * var_3;
        var_21 = var_3;
        if (var_2 <= (type_5)var_19) {
          var_21 = 0;
        }
        var_2 = var_2 + var_21;
        var_18 = var_18 + -1;
        if (var_3 <= var_2) {
          var_2 = var_2 - var_3;
        }
        var_19 = (type_7)var_2 * (type_7)var_12;
      } while (var_4 + 1 != var_18);
      return var_2;
    }
  }
  return var_2;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) 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: (primitive_type) 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: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (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: (number_literal))) consequence: (compound_statement (return_statement (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: (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 (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (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: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (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))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (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: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (unary_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (identifier)) right: (number_literal)))) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (unary_expression argument: (identifier)) right: (identifier)) right: (number_literal)) right: (number_literal)))) (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: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (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: (binary_expression left: (identifier) right: (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: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (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: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (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: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (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: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_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: (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: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_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: (binary_expression left: (identifier) right: (identifier)))))) (return_statement (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (unary_expression argument: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (unary_expression argument: (identifier)) right: (identifier)) right: (number_literal)) right: (number_literal)))) (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: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (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: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)) right: (number_literal)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (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: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_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: (number_literal))))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_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: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (return_statement (identifier)))))) (return_statement (identifier)))))

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

{
  longlong lVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint *puVar5;
  uint uVar6;
  int iVar7;
  int iVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  
  iVar8 = param_2 * 4;
  if (param_2 == 0) {
    return 0;
  }
  puVar5 = (uint *)(param_1 + iVar8 + -4);
  uVar2 = *puVar5;
  if (-1 < (int)param_3) {
    if (uVar2 < param_3) {
      param_2 = param_2 + -1;
      if (param_2 == 0) {
        return uVar2;
      }
      uVar4 = puVar5[-1];
      uVar3 = uVar2;
      iVar8 = iVar8 + -4;
    }
    else {
      uVar3 = 0;
      uVar4 = uVar2;
    }
    if (param_3 < 0x10000) {
      iVar9 = 0;
      if (0xff < param_3) {
        iVar9 = 0x18;
      }
      iVar7 = 9;
      if (0xff >= param_3) {
        iVar7 = 1;
      }
    }
    else {
      iVar9 = 0x10;
      if (0xffffff < param_3) {
        iVar9 = 8;
      }
      iVar7 = 0x19;
      if (0xffffff >= param_3) {
        iVar7 = 0x11;
      }
    }
    uVar2 = iVar9 - (uint)(byte)PTR___gmpn_clz_tab_0009718c[param_3 >> iVar7];
    param_3 = param_3 << (uVar2 & 0x1f);
    uVar10 = param_3 >> 0x10;
    if (uVar10 == 0) {
      trap(7);
    }
    uVar13 = ~param_3 / uVar10;
    uVar3 = uVar4 >> (0x20 - uVar2 & 0x1f) | uVar3 << (uVar2 & 0x1f);
    uVar11 = (param_3 & 0xffff) * uVar13;
    uVar6 = ~param_3 % uVar10 << 0x10 | 0xffff;
    uVar12 = uVar13;
    if (uVar6 < uVar11) {
      uVar6 = uVar6 + param_3;
      uVar12 = uVar13 - 1;
      if ((param_3 <= uVar6) && (uVar6 < uVar11)) {
        uVar6 = uVar6 + param_3;
        uVar12 = uVar13 - 2;
      }
    }
    if (uVar10 == 0) {
      trap(7);
    }
    uVar14 = (uVar6 - uVar11) / uVar10;
    uVar13 = (param_3 & 0xffff) * uVar14;
    uVar6 = (uVar6 - uVar11) % uVar10 << 0x10 | 0xffff;
    uVar11 = param_3 + uVar6;
    uVar10 = uVar14;
    if (((uVar6 < uVar13) && (uVar10 = uVar14 - 1, param_3 <= uVar11)) && (uVar11 < uVar13)) {
      uVar10 = uVar14 - 2;
    }
    uVar10 = uVar12 << 0x10 | uVar10;
    if (1 < param_2) {
      iVar8 = param_1 + iVar8;
      lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;
      uVar12 = uVar4;
      do {
        uVar4 = *(uint *)(iVar8 + -8);
        uVar12 = uVar12 << (uVar2 & 0x1f) | uVar4 >> (0x20 - uVar2 & 0x1f);
        iVar8 = iVar8 + -4;
        lVar1 = lVar1 + CONCAT44(uVar3 + 1,uVar12);
        uVar12 = uVar12 - (int)((ulonglong)lVar1 >> 0x20) * param_3;
        uVar3 = param_3;
        if (uVar12 <= (uint)lVar1) {
          uVar3 = 0;
        }
        uVar3 = uVar12 + uVar3;
        if (param_3 <= uVar3) {
          uVar3 = uVar3 - param_3;
        }
        lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10;
        uVar12 = uVar4;
      } while (param_1 + 4 != iVar8);
    }
    iVar8 = uVar4 << (uVar2 & 0x1f);
    lVar1 = (ulonglong)uVar3 * (ulonglong)uVar10 + CONCAT44(uVar3 + 1,iVar8);
    uVar4 = iVar8 - (int)((ulonglong)lVar1 >> 0x20) * param_3;
    uVar3 = param_3;
    if (uVar4 <= (uint)lVar1) {
      uVar3 = 0;
    }
    uVar4 = uVar4 + uVar3;
    if (param_3 <= uVar4) {
      uVar4 = uVar4 - param_3;
    }
    return uVar4 >> (uVar2 & 0x1f);
  }
  if (param_3 <= uVar2) {
    uVar2 = uVar2 - param_3;
  }
  uVar3 = param_3 >> 0x10;
  if (param_2 != 1) {
    if (uVar3 == 0) {
      trap(7);
    }
    uVar6 = ~param_3 / uVar3;
    uVar12 = (param_3 & 0xffff) * uVar6;
    uVar10 = ~param_3 % uVar3 << 0x10 | 0xffff;
    uVar4 = uVar6;
    if (uVar10 < uVar12) {
      uVar10 = uVar10 + param_3;
      uVar4 = uVar6 - 1;
      if ((param_3 <= uVar10) && (uVar10 < uVar12)) {
        uVar4 = uVar6 - 2;
        uVar10 = uVar10 + param_3;
      }
    }
    if (uVar3 == 0) {
      trap(7);
    }
    uVar11 = (uVar10 - uVar12) / uVar3;
    uVar6 = (param_3 & 0xffff) * uVar11;
    uVar10 = (uVar10 - uVar12) % uVar3 << 0x10 | 0xffff;
    uVar12 = param_3 + uVar10;
    uVar3 = uVar11;
    if (((uVar10 < uVar6) && (uVar3 = uVar11 - 1, param_3 <= uVar12)) && (uVar12 < uVar6)) {
      uVar3 = uVar11 - 2;
    }
    uVar3 = uVar4 << 0x10 | uVar3;
    if (1 < param_2) {
      iVar8 = param_1 + iVar8;
      lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;
      do {
        lVar1 = lVar1 + CONCAT44(uVar2 + 1,*(int *)(iVar8 + -8));
        uVar2 = *(int *)(iVar8 + -8) - (int)((ulonglong)lVar1 >> 0x20) * param_3;
        uVar4 = param_3;
        if (uVar2 <= (uint)lVar1) {
          uVar4 = 0;
        }
        uVar2 = uVar2 + uVar4;
        iVar8 = iVar8 + -4;
        if (param_3 <= uVar2) {
          uVar2 = uVar2 - param_3;
        }
        lVar1 = (ulonglong)uVar2 * (ulonglong)uVar3;
      } while (param_1 + 4 != iVar8);
      return uVar2;
    }
  }
  return uVar2;
}

