
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void __gmpz_divexact_gcd(mpz_ptr q,mpz_srcptr a,mpz_srcptr d)

{
  mp_limb_t mVar1;
  mp_bitcnt_t cnt;
  int iVar2;
  mp_limb_t *pmVar3;
  int new_alloc;
  uint uVar4;
  uint uVar5;
  undefined4 uVar6;
  
  uVar5 = a->_mp_size;
  if (uVar5 == 0) {
    q->_mp_size = 0;
    return;
  }
  if (d->_mp_size != 1) {
    __gmpz_divexact(q,a,d);
    return;
  }
  uVar4 = *d->_mp_d;
  if ((uVar4 & 1) == 0) {
    cnt = 0;
    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {
      cnt = cnt + 1;
    }
    uVar4 = uVar4 >> ((byte)cnt & 0x1f);
    __gmpz_tdiv_q_2exp(q,a,cnt);
    if (uVar4 == 1) {
      return;
    }
    uVar5 = q->_mp_size;
    a = q;
  }
  else if (uVar4 == 1) {
    if (a == q) {
      return;
    }
    __gmpz_set(q,a);
    return;
  }
  new_alloc = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);
  iVar2 = q->_mp_alloc;
  if (uVar4 == 3) {
    if (iVar2 < new_alloc) {
      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);
    }
    else {
      pmVar3 = q->_mp_d;
    }
    uVar6 = 0x55555555;
  }
  else {
    if (uVar4 != 5) {
      if (iVar2 < new_alloc) {
        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);
      }
      else {
        pmVar3 = q->_mp_d;
      }
      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);
      mVar1 = pmVar3[new_alloc + -1];
      goto LAB_000276c9;
    }
    if (iVar2 < new_alloc) {
      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);
    }
    else {
      pmVar3 = q->_mp_d;
    }
    uVar6 = 0x33333333;
  }
  (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14))(pmVar3,a->_mp_d,new_alloc,uVar6,0);
  mVar1 = pmVar3[new_alloc + -1];
LAB_000276c9:
  iVar2 = (uint)(mVar1 == 0) - new_alloc;
  if (0 < (int)uVar5) {
    iVar2 = new_alloc - (uint)(mVar1 == 0);
  }
  q->_mp_size = iVar2;
  return;
}



void __regparm2 __gmpz_divexact_gcd(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)

{
  int iVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int unaff_EBX;
  uint uVar5;
  int *unaff_retaddr;
  undefined4 uVar6;
  
  entry(param_2,0x27639);
  uVar5 = param_3[1];
  if (uVar5 == 0) {
    unaff_retaddr[1] = 0;
    return;
  }
  if (*(int *)(param_4 + 4) != 1) {
    __gmpz_divexact(unaff_retaddr,param_3,param_4);
    return;
  }
  uVar4 = **(uint **)(param_4 + 8);
  if ((uVar4 & 1) == 0) {
    iVar2 = 0;
    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {
      iVar2 = iVar2 + 1;
    }
    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);
    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);
    if (uVar4 == 1) {
      return;
    }
    uVar5 = unaff_retaddr[1];
    param_3 = unaff_retaddr;
  }
  else if (uVar4 == 1) {
    if (param_3 == unaff_retaddr) {
      return;
    }
    __gmpz_set(unaff_retaddr,param_3);
    return;
  }
  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);
  iVar2 = *unaff_retaddr;
  if (uVar4 == 3) {
    if (iVar2 < iVar3) {
      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);
    }
    else {
      iVar2 = unaff_retaddr[2];
    }
    uVar6 = 0x55555555;
  }
  else {
    if (uVar4 != 5) {
      if (iVar2 < iVar3) {
        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);
      }
      else {
        iVar2 = unaff_retaddr[2];
      }
      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);
      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);
      goto LAB_000276c9;
    }
    if (iVar2 < iVar3) {
      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);
    }
    else {
      iVar2 = unaff_retaddr[2];
    }
    uVar6 = 0x33333333;
  }
  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);
  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);
LAB_000276c9:
  iVar1 = (uint)(iVar2 == 0) - iVar3;
  if (0 < (int)uVar5) {
    iVar1 = iVar3 - (uint)(iVar2 == 0);
  }
  unaff_retaddr[1] = iVar1;
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x0001c340
ADD EBX,0x769c7
SUB ESP,0x1c
MOV EDI,dword ptr [ESP + 0x34]
MOV EBP,dword ptr [ESP + 0x30]
MOV EAX,dword ptr [ESP + 0x38]
MOV ESI,dword ptr [EDI + 0x4]
TEST ESI,ESI
JZ 0x00027700
CMP dword ptr [EAX + 0x4],0x1
JNZ 0x000276e8
MOV EAX,dword ptr [EAX + 0x8]
MOV EDX,dword ptr [EAX]
TEST DL,0x1
JZ 0x00027758
CMP EDX,0x1
JZ 0x00027790
MOV EAX,ESI
SAR EAX,0x1f
MOV ECX,EAX
XOR ECX,ESI
SUB ECX,EAX
MOV EAX,dword ptr [EBP]
CMP EDX,0x3
JZ 0x000277b0
CMP EDX,0x5
JZ 0x00027710
CMP ECX,EAX
JG 0x000277d0
MOV EAX,dword ptr [EBP + 0x8]
PUSH EDX
MOV EDX,dword ptr [EBX + 0xfffffd94]
PUSH ECX
MOV dword ptr [ESP + 0x14],ECX
PUSH dword ptr [EDI + 0x8]
PUSH EAX
MOV dword ptr [ESP + 0x18],EAX
CALL dword ptr [EDX + 0x2c]
ADD ESP,0x10
MOV EAX,dword ptr [ESP + 0x8]
MOV ECX,dword ptr [ESP + 0xc]
MOV EAX,dword ptr [EAX + ECX*0x4 + -0x4]
TEST EAX,EAX
SETZ AL
MOV EDX,ECX
MOVZX EAX,AL
SUB EDX,EAX
SUB EAX,ECX
TEST ESI,ESI
CMOVG EAX,EDX
MOV dword ptr [EBP + 0x4],EAX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
PUSH EAX
PUSH EDI
PUSH EBP
CALL 0x0001b4d0
ADD ESP,0x10
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV dword ptr [EBP + 0x4],0x0
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
CMP ECX,EAX
JG 0x000277f2
MOV EDX,dword ptr [EBP + 0x8]
SUB ESP,0xc
PUSH 0x0
PUSH 0x33333333
PUSH ECX
MOV EAX,dword ptr [EBX + 0xfffffd94]
MOV dword ptr [ESP + 0x24],ECX
PUSH dword ptr [EDI + 0x8]
PUSH EDX
MOV dword ptr [ESP + 0x28],EDX
CALL dword ptr [EAX + 0x14]
ADD ESP,0x20
MOV EDX,dword ptr [ESP + 0x8]
MOV ECX,dword ptr [ESP + 0xc]
MOV EDX,dword ptr [EDX + ECX*0x4 + -0x4]
TEST EDX,EDX
JMP 0x000276c9
XOR ECX,ECX
SUB ESP,0x4
TZCNT ECX,EDX
SHR EDX,CL
MOV dword ptr [ESP + 0xc],EDX
MOV dword ptr [ESP + 0x10],EDX
PUSH ECX
PUSH EDI
PUSH EBP
CALL 0x0001bba0
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0x8]
CMP EDX,0x1
JZ 0x000276f6
MOV ESI,dword ptr [EBP + 0x4]
MOV EDI,EBP
JMP 0x0002767a
CMP EDI,EBP
JZ 0x000276f6
SUB ESP,0x8
PUSH EDI
PUSH EBP
CALL 0x0001b4e0
ADD ESP,0x10
JMP 0x000276f6
CMP ECX,EAX
JG 0x0002780e
MOV EDX,dword ptr [EBP + 0x8]
SUB ESP,0xc
PUSH 0x0
PUSH 0x55555555
JMP 0x00027725
MOV dword ptr [ESP + 0xc],EDX
SUB ESP,0x8
PUSH ECX
MOV dword ptr [ESP + 0x14],ECX
PUSH EBP
CALL 0x0001b190
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x8]
MOV EDX,dword ptr [ESP + 0xc]
JMP 0x000276a1
SUB ESP,0x8
PUSH ECX
MOV dword ptr [ESP + 0x14],ECX
PUSH EBP
CALL 0x0001b190
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x8]
MOV EDX,EAX
JMP 0x0002771b
SUB ESP,0x8
PUSH ECX
MOV dword ptr [ESP + 0x14],ECX
PUSH EBP
CALL 0x0001b190
ADD ESP,0x10
MOV ECX,dword ptr [ESP + 0x8]
MOV EDX,EAX
JMP 0x000277b7
(translation_unit "void __regparm2 __gmpz_divexact_gcd(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EBX;\n  uint uVar5;\n  int *unaff_retaddr;\n  undefined4 uVar6;\n  \n  entry(param_2,0x27639);\n  uVar5 = param_3[1];\n  if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }\n  if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }\n  uVar4 = **(uint **)(param_4 + 8);\n  if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }\n  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = *unaff_retaddr;\n  if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);\n  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\nLAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;\n  if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }\n  unaff_retaddr[1] = iVar1;\n  return;\n}\n\n" (function_definition "void __regparm2 __gmpz_divexact_gcd(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EBX;\n  uint uVar5;\n  int *unaff_retaddr;\n  undefined4 uVar6;\n  \n  entry(param_2,0x27639);\n  uVar5 = param_3[1];\n  if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }\n  if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }\n  uVar4 = **(uint **)(param_4 + 8);\n  if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }\n  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = *unaff_retaddr;\n  if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);\n  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\nLAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;\n  if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }\n  unaff_retaddr[1] = iVar1;\n  return;\n}" primitive_type (ERROR "__regparm2" identifier) (function_declarator "__gmpz_divexact_gcd(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EBX;\n  uint uVar5;\n  int *unaff_retaddr;\n  undefined4 uVar6;\n  \n  entry(param_2,0x27639);\n  uVar5 = param_3[1];\n  if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }\n  if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }\n  uVar4 = **(uint **)(param_4 + 8);\n  if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }\n  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = *unaff_retaddr;\n  if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);\n  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\nLAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;\n  if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }\n  unaff_retaddr[1] = iVar1;\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int unaff_EBX;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int *unaff_retaddr;" primitive_type (pointer_declarator "*unaff_retaddr" * identifier) ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (expression_statement "entry(param_2,0x27639);" (call_expression "entry(param_2,0x27639)" identifier (argument_list "(param_2,0x27639)" ( identifier , number_literal ))) ;) (expression_statement "uVar5 = param_3[1];" (assignment_expression "uVar5 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (if_statement "if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    unaff_retaddr[1] = 0;\n    return;\n  }" { (expression_statement "unaff_retaddr[1] = 0;" (assignment_expression "unaff_retaddr[1] = 0" (subscript_expression "unaff_retaddr[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return;" return ;) })) (if_statement "if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }" if (parenthesized_expression "(*(int *)(param_4 + 4) != 1)" ( (binary_expression "*(int *)(param_4 + 4) != 1" (pointer_expression "*(int *)(param_4 + 4)" * (cast_expression "(int *)(param_4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 4)" ( (binary_expression "param_4 + 4" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }" { (expression_statement "__gmpz_divexact(unaff_retaddr,param_3,param_4);" (call_expression "__gmpz_divexact(unaff_retaddr,param_3,param_4)" identifier (argument_list "(unaff_retaddr,param_3,param_4)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "uVar4 = **(uint **)(param_4 + 8);" (assignment_expression "uVar4 = **(uint **)(param_4 + 8)" identifier = (pointer_expression "**(uint **)(param_4 + 8)" * (pointer_expression "*(uint **)(param_4 + 8)" * (cast_expression "(uint **)(param_4 + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 8)" ( (binary_expression "param_4 + 8" identifier + number_literal) )))))) ;) (if_statement "if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" if (parenthesized_expression "((uVar4 & 1) == 0)" ( (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (for_statement "for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }" for ( (assignment_expression "uVar5 = uVar4" identifier = identifier) ; (binary_expression "(uVar5 & 1) == 0" (parenthesized_expression "(uVar5 & 1)" ( (binary_expression "uVar5 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar5 = uVar5 >> 1 | 0x80000000" identifier = (binary_expression "uVar5 >> 1 | 0x80000000" (binary_expression "uVar5 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n      iVar2 = iVar2 + 1;\n    }" { (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) })) (expression_statement "uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);" (assignment_expression "uVar4 = uVar4 >> ((byte)iVar2 & 0x1f)" identifier = (binary_expression "uVar4 >> ((byte)iVar2 & 0x1f)" identifier >> (parenthesized_expression "((byte)iVar2 & 0x1f)" ( (binary_expression "(byte)iVar2 & 0x1f" (cast_expression "(byte)iVar2" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "__gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);" (call_expression "__gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2)" identifier (argument_list "(unaff_retaddr,param_3,iVar2)" ( identifier , identifier , identifier ))) ;) (if_statement "if (uVar4 == 1) {\n      return;\n    }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "uVar5 = unaff_retaddr[1];" (assignment_expression "uVar5 = unaff_retaddr[1]" identifier = (subscript_expression "unaff_retaddr[1]" identifier [ number_literal ])) ;) (expression_statement "param_3 = unaff_retaddr;" (assignment_expression "param_3 = unaff_retaddr" identifier = identifier) ;) }) (else_clause "else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" else (if_statement "if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" { (if_statement "if (param_3 == unaff_retaddr) {\n      return;\n    }" if (parenthesized_expression "(param_3 == unaff_retaddr)" ( (binary_expression "param_3 == unaff_retaddr" identifier == identifier) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "__gmpz_set(unaff_retaddr,param_3);" (call_expression "__gmpz_set(unaff_retaddr,param_3)" identifier (argument_list "(unaff_retaddr,param_3)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })))) (expression_statement "iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);" (assignment_expression "iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f)" identifier = (binary_expression "((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f)" (parenthesized_expression "((int)uVar5 >> 0x1f ^ uVar5)" ( (binary_expression "(int)uVar5 >> 0x1f ^ uVar5" (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ^ identifier) )) - (parenthesized_expression "((int)uVar5 >> 0x1f)" ( (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar2 = *unaff_retaddr;" (assignment_expression "iVar2 = *unaff_retaddr" identifier = (pointer_expression "*unaff_retaddr" * identifier)) ;) (if_statement "if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }" if (parenthesized_expression "(uVar4 == 3)" ( (binary_expression "uVar4 == 3" identifier == number_literal) )) (compound_statement "{\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }" { (if_statement "if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }" if (parenthesized_expression "(iVar2 < iVar3)" ( (binary_expression "iVar2 < iVar3" identifier < identifier) )) (compound_statement "{\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }" { (expression_statement "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);" (assignment_expression "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3)" identifier = (call_expression "__gmpz_realloc(unaff_retaddr,iVar3)" identifier (argument_list "(unaff_retaddr,iVar3)" ( identifier , identifier )))) ;) }) (else_clause "else {\n      iVar2 = unaff_retaddr[2];\n    }" else (compound_statement "{\n      iVar2 = unaff_retaddr[2];\n    }" { (expression_statement "iVar2 = unaff_retaddr[2];" (assignment_expression "iVar2 = unaff_retaddr[2]" identifier = (subscript_expression "unaff_retaddr[2]" identifier [ number_literal ])) ;) }))) (expression_statement "uVar6 = 0x55555555;" (assignment_expression "uVar6 = 0x55555555" identifier = number_literal) ;) }) (else_clause "else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }" else (compound_statement "{\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }" { (if_statement "if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }" if (parenthesized_expression "(uVar4 != 5)" ( (binary_expression "uVar4 != 5" identifier != number_literal) )) (compound_statement "{\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }" { (if_statement "if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }" if (parenthesized_expression "(iVar2 < iVar3)" ( (binary_expression "iVar2 < iVar3" identifier < identifier) )) (compound_statement "{\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }" { (expression_statement "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);" (assignment_expression "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3)" identifier = (call_expression "__gmpz_realloc(unaff_retaddr,iVar3)" identifier (argument_list "(unaff_retaddr,iVar3)" ( identifier , identifier )))) ;) }) (else_clause "else {\n        iVar2 = unaff_retaddr[2];\n      }" else (compound_statement "{\n        iVar2 = unaff_retaddr[2];\n      }" { (expression_statement "iVar2 = unaff_retaddr[2];" (assignment_expression "iVar2 = unaff_retaddr[2]" identifier = (subscript_expression "unaff_retaddr[2]" identifier [ number_literal ])) ;) }))) (expression_statement "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);" (call_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4)" (parenthesized_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))" ( (pointer_expression "**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" * (pointer_expression "*(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" * (cast_expression "(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" ( (binary_expression "*(int *)(unaff_EBX + 0x7675b) + 0x2c" (pointer_expression "*(int *)(unaff_EBX + 0x7675b)" * (cast_expression "(int *)(unaff_EBX + 0x7675b)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBX + 0x7675b)" ( (binary_expression "unaff_EBX + 0x7675b" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(iVar2,param_3[2],iVar3,uVar4)" ( identifier , (subscript_expression "param_3[2]" identifier [ number_literal ]) , identifier , identifier ))) ;) (expression_statement "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);" (assignment_expression "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4)" identifier = (pointer_expression "*(int *)(iVar2 + -4 + iVar3 * 4)" * (cast_expression "(int *)(iVar2 + -4 + iVar3 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + -4 + iVar3 * 4)" ( (binary_expression "iVar2 + -4 + iVar3 * 4" (binary_expression "iVar2 + -4" identifier + number_literal) + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (goto_statement "goto LAB_000276c9;" goto statement_identifier ;) })) (if_statement "if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }" if (parenthesized_expression "(iVar2 < iVar3)" ( (binary_expression "iVar2 < iVar3" identifier < identifier) )) (compound_statement "{\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }" { (expression_statement "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);" (assignment_expression "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3)" identifier = (call_expression "__gmpz_realloc(unaff_retaddr,iVar3)" identifier (argument_list "(unaff_retaddr,iVar3)" ( identifier , identifier )))) ;) }) (else_clause "else {\n      iVar2 = unaff_retaddr[2];\n    }" else (compound_statement "{\n      iVar2 = unaff_retaddr[2];\n    }" { (expression_statement "iVar2 = unaff_retaddr[2];" (assignment_expression "iVar2 = unaff_retaddr[2]" identifier = (subscript_expression "unaff_retaddr[2]" identifier [ number_literal ])) ;) }))) (expression_statement "uVar6 = 0x33333333;" (assignment_expression "uVar6 = 0x33333333" identifier = number_literal) ;) }))) (expression_statement "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);" (call_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0)" (parenthesized_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))" ( (pointer_expression "**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14)" * (pointer_expression "*(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14)" * (cast_expression "(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(unaff_EBX + 0x7675b) + 0x14)" ( (binary_expression "*(int *)(unaff_EBX + 0x7675b) + 0x14" (pointer_expression "*(int *)(unaff_EBX + 0x7675b)" * (cast_expression "(int *)(unaff_EBX + 0x7675b)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBX + 0x7675b)" ( (binary_expression "unaff_EBX + 0x7675b" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(iVar2,param_3[2],iVar3,uVar6,0)" ( identifier , (subscript_expression "param_3[2]" identifier [ number_literal ]) , identifier , identifier , number_literal ))) ;) (expression_statement "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);" (assignment_expression "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4)" identifier = (pointer_expression "*(int *)(iVar2 + -4 + iVar3 * 4)" * (cast_expression "(int *)(iVar2 + -4 + iVar3 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + -4 + iVar3 * 4)" ( (binary_expression "iVar2 + -4 + iVar3 * 4" (binary_expression "iVar2 + -4" identifier + number_literal) + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (labeled_statement "LAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;" statement_identifier : (expression_statement "iVar1 = (uint)(iVar2 == 0) - iVar3;" (assignment_expression "iVar1 = (uint)(iVar2 == 0) - iVar3" identifier = (binary_expression "(uint)(iVar2 == 0) - iVar3" (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) ))) - identifier)) ;)) (if_statement "if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }" if (parenthesized_expression "(0 < (int)uVar5)" ( (binary_expression "0 < (int)uVar5" number_literal < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }" { (expression_statement "iVar1 = iVar3 - (uint)(iVar2 == 0);" (assignment_expression "iVar1 = iVar3 - (uint)(iVar2 == 0)" identifier = (binary_expression "iVar3 - (uint)(iVar2 == 0)" identifier - (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) ))))) ;) })) (expression_statement "unaff_retaddr[1] = iVar1;" (assignment_expression "unaff_retaddr[1] = iVar1" (subscript_expression "unaff_retaddr[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __gmpz_divexact_gcd(mpz_ptr q,mpz_srcptr a,mpz_srcptr d)\n\n{\n  mp_limb_t mVar1;\n  mp_bitcnt_t cnt;\n  int iVar2;\n  mp_limb_t *pmVar3;\n  int new_alloc;\n  uint uVar4;\n  uint uVar5;\n  undefined4 uVar6;\n  \n  uVar5 = a->_mp_size;\n  if (uVar5 == 0) {\n    q->_mp_size = 0;\n    return;\n  }\n  if (d->_mp_size != 1) {\n    __gmpz_divexact(q,a,d);\n    return;\n  }\n  uVar4 = *d->_mp_d;\n  if ((uVar4 & 1) == 0) {\n    cnt = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      cnt = cnt + 1;\n    }\n    uVar4 = uVar4 >> ((byte)cnt & 0x1f);\n    __gmpz_tdiv_q_2exp(q,a,cnt);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = q->_mp_size;\n    a = q;\n  }\n  else if (uVar4 == 1) {\n    if (a == q) {\n      return;\n    }\n    __gmpz_set(q,a);\n    return;\n  }\n  new_alloc = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = q->_mp_alloc;\n  if (uVar4 == 3) {\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < new_alloc) {\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }\n      else {\n        pmVar3 = q->_mp_d;\n      }\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);\n      mVar1 = pmVar3[new_alloc + -1];\n      goto LAB_000276c9;\n    }\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14))(pmVar3,a->_mp_d,new_alloc,uVar6,0);\n  mVar1 = pmVar3[new_alloc + -1];\nLAB_000276c9:\n  iVar2 = (uint)(mVar1 == 0) - new_alloc;\n  if (0 < (int)uVar5) {\n    iVar2 = new_alloc - (uint)(mVar1 == 0);\n  }\n  q->_mp_size = iVar2;\n  return;\n}\n\n" comment (function_definition "void __gmpz_divexact_gcd(mpz_ptr q,mpz_srcptr a,mpz_srcptr d)\n\n{\n  mp_limb_t mVar1;\n  mp_bitcnt_t cnt;\n  int iVar2;\n  mp_limb_t *pmVar3;\n  int new_alloc;\n  uint uVar4;\n  uint uVar5;\n  undefined4 uVar6;\n  \n  uVar5 = a->_mp_size;\n  if (uVar5 == 0) {\n    q->_mp_size = 0;\n    return;\n  }\n  if (d->_mp_size != 1) {\n    __gmpz_divexact(q,a,d);\n    return;\n  }\n  uVar4 = *d->_mp_d;\n  if ((uVar4 & 1) == 0) {\n    cnt = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      cnt = cnt + 1;\n    }\n    uVar4 = uVar4 >> ((byte)cnt & 0x1f);\n    __gmpz_tdiv_q_2exp(q,a,cnt);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = q->_mp_size;\n    a = q;\n  }\n  else if (uVar4 == 1) {\n    if (a == q) {\n      return;\n    }\n    __gmpz_set(q,a);\n    return;\n  }\n  new_alloc = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = q->_mp_alloc;\n  if (uVar4 == 3) {\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < new_alloc) {\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }\n      else {\n        pmVar3 = q->_mp_d;\n      }\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);\n      mVar1 = pmVar3[new_alloc + -1];\n      goto LAB_000276c9;\n    }\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14))(pmVar3,a->_mp_d,new_alloc,uVar6,0);\n  mVar1 = pmVar3[new_alloc + -1];\nLAB_000276c9:\n  iVar2 = (uint)(mVar1 == 0) - new_alloc;\n  if (0 < (int)uVar5) {\n    iVar2 = new_alloc - (uint)(mVar1 == 0);\n  }\n  q->_mp_size = iVar2;\n  return;\n}" primitive_type (function_declarator "__gmpz_divexact_gcd(mpz_ptr q,mpz_srcptr a,mpz_srcptr d)" identifier (parameter_list "(mpz_ptr q,mpz_srcptr a,mpz_srcptr d)" ( (parameter_declaration "mpz_ptr q" type_identifier identifier) , (parameter_declaration "mpz_srcptr a" type_identifier identifier) , (parameter_declaration "mpz_srcptr d" type_identifier identifier) ))) (compound_statement "{\n  mp_limb_t mVar1;\n  mp_bitcnt_t cnt;\n  int iVar2;\n  mp_limb_t *pmVar3;\n  int new_alloc;\n  uint uVar4;\n  uint uVar5;\n  undefined4 uVar6;\n  \n  uVar5 = a->_mp_size;\n  if (uVar5 == 0) {\n    q->_mp_size = 0;\n    return;\n  }\n  if (d->_mp_size != 1) {\n    __gmpz_divexact(q,a,d);\n    return;\n  }\n  uVar4 = *d->_mp_d;\n  if ((uVar4 & 1) == 0) {\n    cnt = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      cnt = cnt + 1;\n    }\n    uVar4 = uVar4 >> ((byte)cnt & 0x1f);\n    __gmpz_tdiv_q_2exp(q,a,cnt);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = q->_mp_size;\n    a = q;\n  }\n  else if (uVar4 == 1) {\n    if (a == q) {\n      return;\n    }\n    __gmpz_set(q,a);\n    return;\n  }\n  new_alloc = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = q->_mp_alloc;\n  if (uVar4 == 3) {\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < new_alloc) {\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }\n      else {\n        pmVar3 = q->_mp_d;\n      }\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);\n      mVar1 = pmVar3[new_alloc + -1];\n      goto LAB_000276c9;\n    }\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14))(pmVar3,a->_mp_d,new_alloc,uVar6,0);\n  mVar1 = pmVar3[new_alloc + -1];\nLAB_000276c9:\n  iVar2 = (uint)(mVar1 == 0) - new_alloc;\n  if (0 < (int)uVar5) {\n    iVar2 = new_alloc - (uint)(mVar1 == 0);\n  }\n  q->_mp_size = iVar2;\n  return;\n}" { (declaration "mp_limb_t mVar1;" type_identifier identifier ;) (declaration "mp_bitcnt_t cnt;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "mp_limb_t *pmVar3;" type_identifier (pointer_declarator "*pmVar3" * identifier) ;) (declaration "int new_alloc;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (expression_statement "uVar5 = a->_mp_size;" (assignment_expression "uVar5 = a->_mp_size" identifier = (field_expression "a->_mp_size" identifier -> field_identifier)) ;) (if_statement "if (uVar5 == 0) {\n    q->_mp_size = 0;\n    return;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    q->_mp_size = 0;\n    return;\n  }" { (expression_statement "q->_mp_size = 0;" (assignment_expression "q->_mp_size = 0" (field_expression "q->_mp_size" identifier -> field_identifier) = number_literal) ;) (return_statement "return;" return ;) })) (if_statement "if (d->_mp_size != 1) {\n    __gmpz_divexact(q,a,d);\n    return;\n  }" if (parenthesized_expression "(d->_mp_size != 1)" ( (binary_expression "d->_mp_size != 1" (field_expression "d->_mp_size" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n    __gmpz_divexact(q,a,d);\n    return;\n  }" { (expression_statement "__gmpz_divexact(q,a,d);" (call_expression "__gmpz_divexact(q,a,d)" identifier (argument_list "(q,a,d)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "uVar4 = *d->_mp_d;" (assignment_expression "uVar4 = *d->_mp_d" identifier = (pointer_expression "*d->_mp_d" * (field_expression "d->_mp_d" identifier -> field_identifier))) ;) (if_statement "if ((uVar4 & 1) == 0) {\n    cnt = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      cnt = cnt + 1;\n    }\n    uVar4 = uVar4 >> ((byte)cnt & 0x1f);\n    __gmpz_tdiv_q_2exp(q,a,cnt);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = q->_mp_size;\n    a = q;\n  }\n  else if (uVar4 == 1) {\n    if (a == q) {\n      return;\n    }\n    __gmpz_set(q,a);\n    return;\n  }" if (parenthesized_expression "((uVar4 & 1) == 0)" ( (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    cnt = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      cnt = cnt + 1;\n    }\n    uVar4 = uVar4 >> ((byte)cnt & 0x1f);\n    __gmpz_tdiv_q_2exp(q,a,cnt);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = q->_mp_size;\n    a = q;\n  }" { (expression_statement "cnt = 0;" (assignment_expression "cnt = 0" identifier = number_literal) ;) (for_statement "for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      cnt = cnt + 1;\n    }" for ( (assignment_expression "uVar5 = uVar4" identifier = identifier) ; (binary_expression "(uVar5 & 1) == 0" (parenthesized_expression "(uVar5 & 1)" ( (binary_expression "uVar5 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar5 = uVar5 >> 1 | 0x80000000" identifier = (binary_expression "uVar5 >> 1 | 0x80000000" (binary_expression "uVar5 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n      cnt = cnt + 1;\n    }" { (expression_statement "cnt = cnt + 1;" (assignment_expression "cnt = cnt + 1" identifier = (binary_expression "cnt + 1" identifier + number_literal)) ;) })) (expression_statement "uVar4 = uVar4 >> ((byte)cnt & 0x1f);" (assignment_expression "uVar4 = uVar4 >> ((byte)cnt & 0x1f)" identifier = (binary_expression "uVar4 >> ((byte)cnt & 0x1f)" identifier >> (parenthesized_expression "((byte)cnt & 0x1f)" ( (binary_expression "(byte)cnt & 0x1f" (cast_expression "(byte)cnt" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "__gmpz_tdiv_q_2exp(q,a,cnt);" (call_expression "__gmpz_tdiv_q_2exp(q,a,cnt)" identifier (argument_list "(q,a,cnt)" ( identifier , identifier , identifier ))) ;) (if_statement "if (uVar4 == 1) {\n      return;\n    }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "uVar5 = q->_mp_size;" (assignment_expression "uVar5 = q->_mp_size" identifier = (field_expression "q->_mp_size" identifier -> field_identifier)) ;) (expression_statement "a = q;" (assignment_expression "a = q" identifier = identifier) ;) }) (else_clause "else if (uVar4 == 1) {\n    if (a == q) {\n      return;\n    }\n    __gmpz_set(q,a);\n    return;\n  }" else (if_statement "if (uVar4 == 1) {\n    if (a == q) {\n      return;\n    }\n    __gmpz_set(q,a);\n    return;\n  }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n    if (a == q) {\n      return;\n    }\n    __gmpz_set(q,a);\n    return;\n  }" { (if_statement "if (a == q) {\n      return;\n    }" if (parenthesized_expression "(a == q)" ( (binary_expression "a == q" identifier == identifier) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "__gmpz_set(q,a);" (call_expression "__gmpz_set(q,a)" identifier (argument_list "(q,a)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })))) (expression_statement "new_alloc = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);" (assignment_expression "new_alloc = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f)" identifier = (binary_expression "((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f)" (parenthesized_expression "((int)uVar5 >> 0x1f ^ uVar5)" ( (binary_expression "(int)uVar5 >> 0x1f ^ uVar5" (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ^ identifier) )) - (parenthesized_expression "((int)uVar5 >> 0x1f)" ( (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar2 = q->_mp_alloc;" (assignment_expression "iVar2 = q->_mp_alloc" identifier = (field_expression "q->_mp_alloc" identifier -> field_identifier)) ;) (if_statement "if (uVar4 == 3) {\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < new_alloc) {\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }\n      else {\n        pmVar3 = q->_mp_d;\n      }\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);\n      mVar1 = pmVar3[new_alloc + -1];\n      goto LAB_000276c9;\n    }\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x33333333;\n  }" if (parenthesized_expression "(uVar4 == 3)" ( (binary_expression "uVar4 == 3" identifier == number_literal) )) (compound_statement "{\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x55555555;\n  }" { (if_statement "if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }" if (parenthesized_expression "(iVar2 < new_alloc)" ( (binary_expression "iVar2 < new_alloc" identifier < identifier) )) (compound_statement "{\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }" { (expression_statement "pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);" (assignment_expression "pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc)" identifier = (cast_expression "(mp_limb_t *)__gmpz_realloc(q,new_alloc)" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmpz_realloc(q,new_alloc)" identifier (argument_list "(q,new_alloc)" ( identifier , identifier ))))) ;) }) (else_clause "else {\n      pmVar3 = q->_mp_d;\n    }" else (compound_statement "{\n      pmVar3 = q->_mp_d;\n    }" { (expression_statement "pmVar3 = q->_mp_d;" (assignment_expression "pmVar3 = q->_mp_d" identifier = (field_expression "q->_mp_d" identifier -> field_identifier)) ;) }))) (expression_statement "uVar6 = 0x55555555;" (assignment_expression "uVar6 = 0x55555555" identifier = number_literal) ;) }) (else_clause "else {\n    if (uVar4 != 5) {\n      if (iVar2 < new_alloc) {\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }\n      else {\n        pmVar3 = q->_mp_d;\n      }\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);\n      mVar1 = pmVar3[new_alloc + -1];\n      goto LAB_000276c9;\n    }\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x33333333;\n  }" else (compound_statement "{\n    if (uVar4 != 5) {\n      if (iVar2 < new_alloc) {\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }\n      else {\n        pmVar3 = q->_mp_d;\n      }\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);\n      mVar1 = pmVar3[new_alloc + -1];\n      goto LAB_000276c9;\n    }\n    if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }\n    uVar6 = 0x33333333;\n  }" { (if_statement "if (uVar4 != 5) {\n      if (iVar2 < new_alloc) {\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }\n      else {\n        pmVar3 = q->_mp_d;\n      }\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);\n      mVar1 = pmVar3[new_alloc + -1];\n      goto LAB_000276c9;\n    }" if (parenthesized_expression "(uVar4 != 5)" ( (binary_expression "uVar4 != 5" identifier != number_literal) )) (compound_statement "{\n      if (iVar2 < new_alloc) {\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }\n      else {\n        pmVar3 = q->_mp_d;\n      }\n      (**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);\n      mVar1 = pmVar3[new_alloc + -1];\n      goto LAB_000276c9;\n    }" { (if_statement "if (iVar2 < new_alloc) {\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }\n      else {\n        pmVar3 = q->_mp_d;\n      }" if (parenthesized_expression "(iVar2 < new_alloc)" ( (binary_expression "iVar2 < new_alloc" identifier < identifier) )) (compound_statement "{\n        pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n      }" { (expression_statement "pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);" (assignment_expression "pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc)" identifier = (cast_expression "(mp_limb_t *)__gmpz_realloc(q,new_alloc)" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmpz_realloc(q,new_alloc)" identifier (argument_list "(q,new_alloc)" ( identifier , identifier ))))) ;) }) (else_clause "else {\n        pmVar3 = q->_mp_d;\n      }" else (compound_statement "{\n        pmVar3 = q->_mp_d;\n      }" { (expression_statement "pmVar3 = q->_mp_d;" (assignment_expression "pmVar3 = q->_mp_d" identifier = (field_expression "q->_mp_d" identifier -> field_identifier)) ;) }))) (expression_statement "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4);" (call_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))(pmVar3,a->_mp_d,new_alloc,uVar4)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x2c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_0009dd94 + 0x2c)" ( (binary_expression "PTR___gmpn_cpuvec_0009dd94 + 0x2c" identifier + number_literal) ))))) )) (argument_list "(pmVar3,a->_mp_d,new_alloc,uVar4)" ( identifier , (field_expression "a->_mp_d" identifier -> field_identifier) , identifier , identifier ))) ;) (expression_statement "mVar1 = pmVar3[new_alloc + -1];" (assignment_expression "mVar1 = pmVar3[new_alloc + -1]" identifier = (subscript_expression "pmVar3[new_alloc + -1]" identifier [ (binary_expression "new_alloc + -1" identifier + number_literal) ])) ;) (goto_statement "goto LAB_000276c9;" goto statement_identifier ;) })) (if_statement "if (iVar2 < new_alloc) {\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }\n    else {\n      pmVar3 = q->_mp_d;\n    }" if (parenthesized_expression "(iVar2 < new_alloc)" ( (binary_expression "iVar2 < new_alloc" identifier < identifier) )) (compound_statement "{\n      pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);\n    }" { (expression_statement "pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc);" (assignment_expression "pmVar3 = (mp_limb_t *)__gmpz_realloc(q,new_alloc)" identifier = (cast_expression "(mp_limb_t *)__gmpz_realloc(q,new_alloc)" ( (type_descriptor "mp_limb_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "__gmpz_realloc(q,new_alloc)" identifier (argument_list "(q,new_alloc)" ( identifier , identifier ))))) ;) }) (else_clause "else {\n      pmVar3 = q->_mp_d;\n    }" else (compound_statement "{\n      pmVar3 = q->_mp_d;\n    }" { (expression_statement "pmVar3 = q->_mp_d;" (assignment_expression "pmVar3 = q->_mp_d" identifier = (field_expression "q->_mp_d" identifier -> field_identifier)) ;) }))) (expression_statement "uVar6 = 0x33333333;" (assignment_expression "uVar6 = 0x33333333" identifier = number_literal) ;) }))) (expression_statement "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14))(pmVar3,a->_mp_d,new_alloc,uVar6,0);" (call_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14))(pmVar3,a->_mp_d,new_alloc,uVar6,0)" (parenthesized_expression "(**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14))" ( (pointer_expression "**(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14)" * (pointer_expression "*(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14)" * (cast_expression "(code **)(PTR___gmpn_cpuvec_0009dd94 + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(PTR___gmpn_cpuvec_0009dd94 + 0x14)" ( (binary_expression "PTR___gmpn_cpuvec_0009dd94 + 0x14" identifier + number_literal) ))))) )) (argument_list "(pmVar3,a->_mp_d,new_alloc,uVar6,0)" ( identifier , (field_expression "a->_mp_d" identifier -> field_identifier) , identifier , identifier , number_literal ))) ;) (expression_statement "mVar1 = pmVar3[new_alloc + -1];" (assignment_expression "mVar1 = pmVar3[new_alloc + -1]" identifier = (subscript_expression "pmVar3[new_alloc + -1]" identifier [ (binary_expression "new_alloc + -1" identifier + number_literal) ])) ;) (labeled_statement "LAB_000276c9:\n  iVar2 = (uint)(mVar1 == 0) - new_alloc;" statement_identifier : (expression_statement "iVar2 = (uint)(mVar1 == 0) - new_alloc;" (assignment_expression "iVar2 = (uint)(mVar1 == 0) - new_alloc" identifier = (binary_expression "(uint)(mVar1 == 0) - new_alloc" (call_expression "(uint)(mVar1 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(mVar1 == 0)" ( (binary_expression "mVar1 == 0" identifier == number_literal) ))) - identifier)) ;)) (if_statement "if (0 < (int)uVar5) {\n    iVar2 = new_alloc - (uint)(mVar1 == 0);\n  }" if (parenthesized_expression "(0 < (int)uVar5)" ( (binary_expression "0 < (int)uVar5" number_literal < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    iVar2 = new_alloc - (uint)(mVar1 == 0);\n  }" { (expression_statement "iVar2 = new_alloc - (uint)(mVar1 == 0);" (assignment_expression "iVar2 = new_alloc - (uint)(mVar1 == 0)" identifier = (binary_expression "new_alloc - (uint)(mVar1 == 0)" identifier - (call_expression "(uint)(mVar1 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(mVar1 == 0)" ( (binary_expression "mVar1 == 0" identifier == number_literal) ))))) ;) })) (expression_statement "q->_mp_size = iVar2;" (assignment_expression "q->_mp_size = iVar2" (field_expression "q->_mp_size" identifier -> field_identifier) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit "void __regparm2 __gmpz_divexact_gcd(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EBX;\n  uint uVar5;\n  int *unaff_retaddr;\n  undefined4 uVar6;\n  \n  entry(param_2,0x27639);\n  uVar5 = param_3[1];\n  if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }\n  if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }\n  uVar4 = **(uint **)(param_4 + 8);\n  if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }\n  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = *unaff_retaddr;\n  if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);\n  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\nLAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;\n  if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }\n  unaff_retaddr[1] = iVar1;\n  return;\n}\n\n" (function_definition "void __regparm2 __gmpz_divexact_gcd(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EBX;\n  uint uVar5;\n  int *unaff_retaddr;\n  undefined4 uVar6;\n  \n  entry(param_2,0x27639);\n  uVar5 = param_3[1];\n  if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }\n  if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }\n  uVar4 = **(uint **)(param_4 + 8);\n  if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }\n  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = *unaff_retaddr;\n  if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);\n  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\nLAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;\n  if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }\n  unaff_retaddr[1] = iVar1;\n  return;\n}" primitive_type (ERROR "__regparm2" identifier) (function_declarator "__gmpz_divexact_gcd(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)" identifier (parameter_list "(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)" ( (parameter_declaration "undefined4 param_1" type_identifier identifier) , (parameter_declaration "undefined4 param_2" type_identifier identifier) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EBX;\n  uint uVar5;\n  int *unaff_retaddr;\n  undefined4 uVar6;\n  \n  entry(param_2,0x27639);\n  uVar5 = param_3[1];\n  if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }\n  if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }\n  uVar4 = **(uint **)(param_4 + 8);\n  if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }\n  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = *unaff_retaddr;\n  if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);\n  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\nLAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;\n  if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }\n  unaff_retaddr[1] = iVar1;\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "int unaff_EBX;" primitive_type identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "int *unaff_retaddr;" primitive_type (pointer_declarator "*unaff_retaddr" * identifier) ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (expression_statement "entry(param_2,0x27639);" (call_expression "entry(param_2,0x27639)" identifier (argument_list "(param_2,0x27639)" ( identifier , number_literal ))) ;) (expression_statement "uVar5 = param_3[1];" (assignment_expression "uVar5 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (if_statement "if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    unaff_retaddr[1] = 0;\n    return;\n  }" { (expression_statement "unaff_retaddr[1] = 0;" (assignment_expression "unaff_retaddr[1] = 0" (subscript_expression "unaff_retaddr[1]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return;" return ;) })) (if_statement "if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }" if (parenthesized_expression "(*(int *)(param_4 + 4) != 1)" ( (binary_expression "*(int *)(param_4 + 4) != 1" (pointer_expression "*(int *)(param_4 + 4)" * (cast_expression "(int *)(param_4 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 4)" ( (binary_expression "param_4 + 4" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }" { (expression_statement "__gmpz_divexact(unaff_retaddr,param_3,param_4);" (call_expression "__gmpz_divexact(unaff_retaddr,param_3,param_4)" identifier (argument_list "(unaff_retaddr,param_3,param_4)" ( identifier , identifier , identifier ))) ;) (return_statement "return;" return ;) })) (expression_statement "uVar4 = **(uint **)(param_4 + 8);" (assignment_expression "uVar4 = **(uint **)(param_4 + 8)" identifier = (pointer_expression "**(uint **)(param_4 + 8)" * (pointer_expression "*(uint **)(param_4 + 8)" * (cast_expression "(uint **)(param_4 + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 8)" ( (binary_expression "param_4 + 8" identifier + number_literal) )))))) ;) (if_statement "if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" if (parenthesized_expression "((uVar4 & 1) == 0)" ( (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" ( (binary_expression "uVar4 & 1" identifier & number_literal) )) == number_literal) )) (compound_statement "{\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }" { (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (for_statement "for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }" for ( (assignment_expression "uVar5 = uVar4" identifier = identifier) ; (binary_expression "(uVar5 & 1) == 0" (parenthesized_expression "(uVar5 & 1)" ( (binary_expression "uVar5 & 1" identifier & number_literal) )) == number_literal) ; (assignment_expression "uVar5 = uVar5 >> 1 | 0x80000000" identifier = (binary_expression "uVar5 >> 1 | 0x80000000" (binary_expression "uVar5 >> 1" identifier >> number_literal) | number_literal)) ) (compound_statement "{\n      iVar2 = iVar2 + 1;\n    }" { (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) })) (expression_statement "uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);" (assignment_expression "uVar4 = uVar4 >> ((byte)iVar2 & 0x1f)" identifier = (binary_expression "uVar4 >> ((byte)iVar2 & 0x1f)" identifier >> (parenthesized_expression "((byte)iVar2 & 0x1f)" ( (binary_expression "(byte)iVar2 & 0x1f" (cast_expression "(byte)iVar2" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )))) ;) (expression_statement "__gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);" (call_expression "__gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2)" identifier (argument_list "(unaff_retaddr,param_3,iVar2)" ( identifier , identifier , identifier ))) ;) (if_statement "if (uVar4 == 1) {\n      return;\n    }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "uVar5 = unaff_retaddr[1];" (assignment_expression "uVar5 = unaff_retaddr[1]" identifier = (subscript_expression "unaff_retaddr[1]" identifier [ number_literal ])) ;) (expression_statement "param_3 = unaff_retaddr;" (assignment_expression "param_3 = unaff_retaddr" identifier = identifier) ;) }) (else_clause "else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" else (if_statement "if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" if (parenthesized_expression "(uVar4 == 1)" ( (binary_expression "uVar4 == 1" identifier == number_literal) )) (compound_statement "{\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" { (if_statement "if (param_3 == unaff_retaddr) {\n      return;\n    }" if (parenthesized_expression "(param_3 == unaff_retaddr)" ( (binary_expression "param_3 == unaff_retaddr" identifier == identifier) )) (compound_statement "{\n      return;\n    }" { (return_statement "return;" return ;) })) (expression_statement "__gmpz_set(unaff_retaddr,param_3);" (call_expression "__gmpz_set(unaff_retaddr,param_3)" identifier (argument_list "(unaff_retaddr,param_3)" ( identifier , identifier ))) ;) (return_statement "return;" return ;) })))) (expression_statement "iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);" (assignment_expression "iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f)" identifier = (binary_expression "((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f)" (parenthesized_expression "((int)uVar5 >> 0x1f ^ uVar5)" ( (binary_expression "(int)uVar5 >> 0x1f ^ uVar5" (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) ^ identifier) )) - (parenthesized_expression "((int)uVar5 >> 0x1f)" ( (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) >> number_literal) )))) ;) (expression_statement "iVar2 = *unaff_retaddr;" (assignment_expression "iVar2 = *unaff_retaddr" identifier = (pointer_expression "*unaff_retaddr" * identifier)) ;) (if_statement "if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }" if (parenthesized_expression "(uVar4 == 3)" ( (binary_expression "uVar4 == 3" identifier == number_literal) )) (compound_statement "{\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }" { (if_statement "if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }" if (parenthesized_expression "(iVar2 < iVar3)" ( (binary_expression "iVar2 < iVar3" identifier < identifier) )) (compound_statement "{\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }" { (expression_statement "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);" (assignment_expression "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3)" identifier = (call_expression "__gmpz_realloc(unaff_retaddr,iVar3)" identifier (argument_list "(unaff_retaddr,iVar3)" ( identifier , identifier )))) ;) }) (else_clause "else {\n      iVar2 = unaff_retaddr[2];\n    }" else (compound_statement "{\n      iVar2 = unaff_retaddr[2];\n    }" { (expression_statement "iVar2 = unaff_retaddr[2];" (assignment_expression "iVar2 = unaff_retaddr[2]" identifier = (subscript_expression "unaff_retaddr[2]" identifier [ number_literal ])) ;) }))) (expression_statement "uVar6 = 0x55555555;" (assignment_expression "uVar6 = 0x55555555" identifier = number_literal) ;) }) (else_clause "else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }" else (compound_statement "{\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }" { (if_statement "if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }" if (parenthesized_expression "(uVar4 != 5)" ( (binary_expression "uVar4 != 5" identifier != number_literal) )) (compound_statement "{\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }" { (if_statement "if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }" if (parenthesized_expression "(iVar2 < iVar3)" ( (binary_expression "iVar2 < iVar3" identifier < identifier) )) (compound_statement "{\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }" { (expression_statement "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);" (assignment_expression "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3)" identifier = (call_expression "__gmpz_realloc(unaff_retaddr,iVar3)" identifier (argument_list "(unaff_retaddr,iVar3)" ( identifier , identifier )))) ;) }) (else_clause "else {\n        iVar2 = unaff_retaddr[2];\n      }" else (compound_statement "{\n        iVar2 = unaff_retaddr[2];\n      }" { (expression_statement "iVar2 = unaff_retaddr[2];" (assignment_expression "iVar2 = unaff_retaddr[2]" identifier = (subscript_expression "unaff_retaddr[2]" identifier [ number_literal ])) ;) }))) (expression_statement "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);" (call_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4)" (parenthesized_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))" ( (pointer_expression "**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" * (pointer_expression "*(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" * (cast_expression "(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" ( (binary_expression "*(int *)(unaff_EBX + 0x7675b) + 0x2c" (pointer_expression "*(int *)(unaff_EBX + 0x7675b)" * (cast_expression "(int *)(unaff_EBX + 0x7675b)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBX + 0x7675b)" ( (binary_expression "unaff_EBX + 0x7675b" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(iVar2,param_3[2],iVar3,uVar4)" ( identifier , (subscript_expression "param_3[2]" identifier [ number_literal ]) , identifier , identifier ))) ;) (expression_statement "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);" (assignment_expression "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4)" identifier = (pointer_expression "*(int *)(iVar2 + -4 + iVar3 * 4)" * (cast_expression "(int *)(iVar2 + -4 + iVar3 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + -4 + iVar3 * 4)" ( (binary_expression "iVar2 + -4 + iVar3 * 4" (binary_expression "iVar2 + -4" identifier + number_literal) + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (goto_statement "goto LAB_000276c9;" goto statement_identifier ;) })) (if_statement "if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }" if (parenthesized_expression "(iVar2 < iVar3)" ( (binary_expression "iVar2 < iVar3" identifier < identifier) )) (compound_statement "{\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }" { (expression_statement "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);" (assignment_expression "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3)" identifier = (call_expression "__gmpz_realloc(unaff_retaddr,iVar3)" identifier (argument_list "(unaff_retaddr,iVar3)" ( identifier , identifier )))) ;) }) (else_clause "else {\n      iVar2 = unaff_retaddr[2];\n    }" else (compound_statement "{\n      iVar2 = unaff_retaddr[2];\n    }" { (expression_statement "iVar2 = unaff_retaddr[2];" (assignment_expression "iVar2 = unaff_retaddr[2]" identifier = (subscript_expression "unaff_retaddr[2]" identifier [ number_literal ])) ;) }))) (expression_statement "uVar6 = 0x33333333;" (assignment_expression "uVar6 = 0x33333333" identifier = number_literal) ;) }))) (expression_statement "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);" (call_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0)" (parenthesized_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))" ( (pointer_expression "**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14)" * (pointer_expression "*(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14)" * (cast_expression "(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(int *)(unaff_EBX + 0x7675b) + 0x14)" ( (binary_expression "*(int *)(unaff_EBX + 0x7675b) + 0x14" (pointer_expression "*(int *)(unaff_EBX + 0x7675b)" * (cast_expression "(int *)(unaff_EBX + 0x7675b)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(unaff_EBX + 0x7675b)" ( (binary_expression "unaff_EBX + 0x7675b" identifier + number_literal) )))) + number_literal) ))))) )) (argument_list "(iVar2,param_3[2],iVar3,uVar6,0)" ( identifier , (subscript_expression "param_3[2]" identifier [ number_literal ]) , identifier , identifier , number_literal ))) ;) (expression_statement "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);" (assignment_expression "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4)" identifier = (pointer_expression "*(int *)(iVar2 + -4 + iVar3 * 4)" * (cast_expression "(int *)(iVar2 + -4 + iVar3 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + -4 + iVar3 * 4)" ( (binary_expression "iVar2 + -4 + iVar3 * 4" (binary_expression "iVar2 + -4" identifier + number_literal) + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (labeled_statement "LAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;" statement_identifier : (expression_statement "iVar1 = (uint)(iVar2 == 0) - iVar3;" (assignment_expression "iVar1 = (uint)(iVar2 == 0) - iVar3" identifier = (binary_expression "(uint)(iVar2 == 0) - iVar3" (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) ))) - identifier)) ;)) (if_statement "if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }" if (parenthesized_expression "(0 < (int)uVar5)" ( (binary_expression "0 < (int)uVar5" number_literal < (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }" { (expression_statement "iVar1 = iVar3 - (uint)(iVar2 == 0);" (assignment_expression "iVar1 = iVar3 - (uint)(iVar2 == 0)" identifier = (binary_expression "iVar3 - (uint)(iVar2 == 0)" identifier - (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(iVar2 == 0)" ( (binary_expression "iVar2 == 0" identifier == number_literal) ))))) ;) })) (expression_statement "unaff_retaddr[1] = iVar1;" (assignment_expression "unaff_retaddr[1] = iVar1" (subscript_expression "unaff_retaddr[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (for_statement for ( (assignment_expression IDENT = IDENT) ; (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ; (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> LIT) | LIT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return ;) })))) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ^ IDENT) )) - (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) )) (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) ))))) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) ))))) )) (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) ))))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) ))) - IDENT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT == LIT) ))))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return ;) })))
(function_definition "void __regparm2 __gmpz_divexact_gcd(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EBX;\n  uint uVar5;\n  int *unaff_retaddr;\n  undefined4 uVar6;\n  \n  entry(param_2,0x27639);\n  uVar5 = param_3[1];\n  if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }\n  if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }\n  uVar4 = **(uint **)(param_4 + 8);\n  if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }\n  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = *unaff_retaddr;\n  if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);\n  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\nLAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;\n  if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }\n  unaff_retaddr[1] = iVar1;\n  return;\n}" (primitive_type "void") (ERROR "__regparm2" (identifier "__regparm2")) (function_declarator "__gmpz_divexact_gcd(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)" (identifier "__gmpz_divexact_gcd") (parameter_list "(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)" (( "(") (parameter_declaration "undefined4 param_1" (type_identifier "undefined4") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 param_2" (type_identifier "undefined4") (identifier "param_2")) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  uint uVar4;\n  int unaff_EBX;\n  uint uVar5;\n  int *unaff_retaddr;\n  undefined4 uVar6;\n  \n  entry(param_2,0x27639);\n  uVar5 = param_3[1];\n  if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }\n  if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }\n  uVar4 = **(uint **)(param_4 + 8);\n  if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }\n  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);\n  iVar2 = *unaff_retaddr;\n  if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }\n  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);\n  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\nLAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;\n  if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }\n  unaff_retaddr[1] = iVar1;\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "int unaff_EBX;" (primitive_type "int") (identifier "unaff_EBX") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "int *unaff_retaddr;" (primitive_type "int") (pointer_declarator "*unaff_retaddr" (* "*") (identifier "unaff_retaddr")) (; ";")) (declaration "undefined4 uVar6;" (type_identifier "undefined4") (identifier "uVar6") (; ";")) (expression_statement "entry(param_2,0x27639);" (call_expression "entry(param_2,0x27639)" (identifier "entry") (argument_list "(param_2,0x27639)" (( "(") (identifier "param_2") (, ",") (number_literal "0x27639") () ")"))) (; ";")) (expression_statement "uVar5 = param_3[1];" (assignment_expression "uVar5 = param_3[1]" (identifier "uVar5") (= "=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (uVar5 == 0) {\n    unaff_retaddr[1] = 0;\n    return;\n  }" (if "if") (parenthesized_expression "(uVar5 == 0)" (( "(") (binary_expression "uVar5 == 0" (identifier "uVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    unaff_retaddr[1] = 0;\n    return;\n  }" ({ "{") (expression_statement "unaff_retaddr[1] = 0;" (assignment_expression "unaff_retaddr[1] = 0" (subscript_expression "unaff_retaddr[1]" (identifier "unaff_retaddr") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if (*(int *)(param_4 + 4) != 1) {\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }" (if "if") (parenthesized_expression "(*(int *)(param_4 + 4) != 1)" (( "(") (binary_expression "*(int *)(param_4 + 4) != 1" (pointer_expression "*(int *)(param_4 + 4)" (* "*") (cast_expression "(int *)(param_4 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 4)" (( "(") (binary_expression "param_4 + 4" (identifier "param_4") (+ "+") (number_literal "4")) () ")")))) (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n    __gmpz_divexact(unaff_retaddr,param_3,param_4);\n    return;\n  }" ({ "{") (expression_statement "__gmpz_divexact(unaff_retaddr,param_3,param_4);" (call_expression "__gmpz_divexact(unaff_retaddr,param_3,param_4)" (identifier "__gmpz_divexact") (argument_list "(unaff_retaddr,param_3,param_4)" (( "(") (identifier "unaff_retaddr") (, ",") (identifier "param_3") (, ",") (identifier "param_4") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar4 = **(uint **)(param_4 + 8);" (assignment_expression "uVar4 = **(uint **)(param_4 + 8)" (identifier "uVar4") (= "=") (pointer_expression "**(uint **)(param_4 + 8)" (* "*") (pointer_expression "*(uint **)(param_4 + 8)" (* "*") (cast_expression "(uint **)(param_4 + 8)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_4 + 8)" (( "(") (binary_expression "param_4 + 8" (identifier "param_4") (+ "+") (number_literal "8")) () ")")))))) (; ";")) (if_statement "if ((uVar4 & 1) == 0) {\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }\n  else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" (if "if") (parenthesized_expression "((uVar4 & 1) == 0)" (( "(") (binary_expression "(uVar4 & 1) == 0" (parenthesized_expression "(uVar4 & 1)" (( "(") (binary_expression "uVar4 & 1" (identifier "uVar4") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar2 = 0;\n    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }\n    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);\n    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);\n    if (uVar4 == 1) {\n      return;\n    }\n    uVar5 = unaff_retaddr[1];\n    param_3 = unaff_retaddr;\n  }" ({ "{") (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" (identifier "iVar2") (= "=") (number_literal "0")) (; ";")) (for_statement "for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {\n      iVar2 = iVar2 + 1;\n    }" (for "for") (( "(") (assignment_expression "uVar5 = uVar4" (identifier "uVar5") (= "=") (identifier "uVar4")) (; ";") (binary_expression "(uVar5 & 1) == 0" (parenthesized_expression "(uVar5 & 1)" (( "(") (binary_expression "uVar5 & 1" (identifier "uVar5") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) (; ";") (assignment_expression "uVar5 = uVar5 >> 1 | 0x80000000" (identifier "uVar5") (= "=") (binary_expression "uVar5 >> 1 | 0x80000000" (binary_expression "uVar5 >> 1" (identifier "uVar5") (>> ">>") (number_literal "1")) (| "|") (number_literal "0x80000000"))) () ")") (compound_statement "{\n      iVar2 = iVar2 + 1;\n    }" ({ "{") (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);" (assignment_expression "uVar4 = uVar4 >> ((byte)iVar2 & 0x1f)" (identifier "uVar4") (= "=") (binary_expression "uVar4 >> ((byte)iVar2 & 0x1f)" (identifier "uVar4") (>> ">>") (parenthesized_expression "((byte)iVar2 & 0x1f)" (( "(") (binary_expression "(byte)iVar2 & 0x1f" (cast_expression "(byte)iVar2" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "iVar2")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "__gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);" (call_expression "__gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2)" (identifier "__gmpz_tdiv_q_2exp") (argument_list "(unaff_retaddr,param_3,iVar2)" (( "(") (identifier "unaff_retaddr") (, ",") (identifier "param_3") (, ",") (identifier "iVar2") () ")"))) (; ";")) (if_statement "if (uVar4 == 1) {\n      return;\n    }" (if "if") (parenthesized_expression "(uVar4 == 1)" (( "(") (binary_expression "uVar4 == 1" (identifier "uVar4") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar5 = unaff_retaddr[1];" (assignment_expression "uVar5 = unaff_retaddr[1]" (identifier "uVar5") (= "=") (subscript_expression "unaff_retaddr[1]" (identifier "unaff_retaddr") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "param_3 = unaff_retaddr;" (assignment_expression "param_3 = unaff_retaddr" (identifier "param_3") (= "=") (identifier "unaff_retaddr")) (; ";")) (} "}")) (else_clause "else if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" (else "else") (if_statement "if (uVar4 == 1) {\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" (if "if") (parenthesized_expression "(uVar4 == 1)" (( "(") (binary_expression "uVar4 == 1" (identifier "uVar4") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    if (param_3 == unaff_retaddr) {\n      return;\n    }\n    __gmpz_set(unaff_retaddr,param_3);\n    return;\n  }" ({ "{") (if_statement "if (param_3 == unaff_retaddr) {\n      return;\n    }" (if "if") (parenthesized_expression "(param_3 == unaff_retaddr)" (( "(") (binary_expression "param_3 == unaff_retaddr" (identifier "param_3") (== "==") (identifier "unaff_retaddr")) () ")")) (compound_statement "{\n      return;\n    }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "__gmpz_set(unaff_retaddr,param_3);" (call_expression "__gmpz_set(unaff_retaddr,param_3)" (identifier "__gmpz_set") (argument_list "(unaff_retaddr,param_3)" (( "(") (identifier "unaff_retaddr") (, ",") (identifier "param_3") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))))) (expression_statement "iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);" (assignment_expression "iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f)" (identifier "iVar3") (= "=") (binary_expression "((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f)" (parenthesized_expression "((int)uVar5 >> 0x1f ^ uVar5)" (( "(") (binary_expression "(int)uVar5 >> 0x1f ^ uVar5" (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (>> ">>") (number_literal "0x1f")) (^ "^") (identifier "uVar5")) () ")")) (- "-") (parenthesized_expression "((int)uVar5 >> 0x1f)" (( "(") (binary_expression "(int)uVar5 >> 0x1f" (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5")) (>> ">>") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "iVar2 = *unaff_retaddr;" (assignment_expression "iVar2 = *unaff_retaddr" (identifier "iVar2") (= "=") (pointer_expression "*unaff_retaddr" (* "*") (identifier "unaff_retaddr"))) (; ";")) (if_statement "if (uVar4 == 3) {\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }\n  else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }" (if "if") (parenthesized_expression "(uVar4 == 3)" (( "(") (binary_expression "uVar4 == 3" (identifier "uVar4") (== "==") (number_literal "3")) () ")")) (compound_statement "{\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x55555555;\n  }" ({ "{") (if_statement "if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }" (if "if") (parenthesized_expression "(iVar2 < iVar3)" (( "(") (binary_expression "iVar2 < iVar3" (identifier "iVar2") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }" ({ "{") (expression_statement "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);" (assignment_expression "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3)" (identifier "iVar2") (= "=") (call_expression "__gmpz_realloc(unaff_retaddr,iVar3)" (identifier "__gmpz_realloc") (argument_list "(unaff_retaddr,iVar3)" (( "(") (identifier "unaff_retaddr") (, ",") (identifier "iVar3") () ")")))) (; ";")) (} "}")) (else_clause "else {\n      iVar2 = unaff_retaddr[2];\n    }" (else "else") (compound_statement "{\n      iVar2 = unaff_retaddr[2];\n    }" ({ "{") (expression_statement "iVar2 = unaff_retaddr[2];" (assignment_expression "iVar2 = unaff_retaddr[2]" (identifier "iVar2") (= "=") (subscript_expression "unaff_retaddr[2]" (identifier "unaff_retaddr") ([ "[") (number_literal "2") (] "]"))) (; ";")) (} "}")))) (expression_statement "uVar6 = 0x55555555;" (assignment_expression "uVar6 = 0x55555555" (identifier "uVar6") (= "=") (number_literal "0x55555555")) (; ";")) (} "}")) (else_clause "else {\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }" (else "else") (compound_statement "{\n    if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }\n    if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }\n    uVar6 = 0x33333333;\n  }" ({ "{") (if_statement "if (uVar4 != 5) {\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }" (if "if") (parenthesized_expression "(uVar4 != 5)" (( "(") (binary_expression "uVar4 != 5" (identifier "uVar4") (!= "!=") (number_literal "5")) () ")")) (compound_statement "{\n      if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }\n      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);\n      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);\n      goto LAB_000276c9;\n    }" ({ "{") (if_statement "if (iVar2 < iVar3) {\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }\n      else {\n        iVar2 = unaff_retaddr[2];\n      }" (if "if") (parenthesized_expression "(iVar2 < iVar3)" (( "(") (binary_expression "iVar2 < iVar3" (identifier "iVar2") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n      }" ({ "{") (expression_statement "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);" (assignment_expression "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3)" (identifier "iVar2") (= "=") (call_expression "__gmpz_realloc(unaff_retaddr,iVar3)" (identifier "__gmpz_realloc") (argument_list "(unaff_retaddr,iVar3)" (( "(") (identifier "unaff_retaddr") (, ",") (identifier "iVar3") () ")")))) (; ";")) (} "}")) (else_clause "else {\n        iVar2 = unaff_retaddr[2];\n      }" (else "else") (compound_statement "{\n        iVar2 = unaff_retaddr[2];\n      }" ({ "{") (expression_statement "iVar2 = unaff_retaddr[2];" (assignment_expression "iVar2 = unaff_retaddr[2]" (identifier "iVar2") (= "=") (subscript_expression "unaff_retaddr[2]" (identifier "unaff_retaddr") ([ "[") (number_literal "2") (] "]"))) (; ";")) (} "}")))) (expression_statement "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);" (call_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4)" (parenthesized_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))" (( "(") (pointer_expression "**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" (* "*") (pointer_expression "*(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" (* "*") (cast_expression "(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(unaff_EBX + 0x7675b) + 0x2c)" (( "(") (binary_expression "*(int *)(unaff_EBX + 0x7675b) + 0x2c" (pointer_expression "*(int *)(unaff_EBX + 0x7675b)" (* "*") (cast_expression "(int *)(unaff_EBX + 0x7675b)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EBX + 0x7675b)" (( "(") (binary_expression "unaff_EBX + 0x7675b" (identifier "unaff_EBX") (+ "+") (number_literal "0x7675b")) () ")")))) (+ "+") (number_literal "0x2c")) () ")"))))) () ")")) (argument_list "(iVar2,param_3[2],iVar3,uVar4)" (( "(") (identifier "iVar2") (, ",") (subscript_expression "param_3[2]" (identifier "param_3") ([ "[") (number_literal "2") (] "]")) (, ",") (identifier "iVar3") (, ",") (identifier "uVar4") () ")"))) (; ";")) (expression_statement "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);" (assignment_expression "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(iVar2 + -4 + iVar3 * 4)" (* "*") (cast_expression "(int *)(iVar2 + -4 + iVar3 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + -4 + iVar3 * 4)" (( "(") (binary_expression "iVar2 + -4 + iVar3 * 4" (binary_expression "iVar2 + -4" (identifier "iVar2") (+ "+") (number_literal "-4")) (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (goto_statement "goto LAB_000276c9;" (goto "goto") (statement_identifier "LAB_000276c9") (; ";")) (} "}"))) (if_statement "if (iVar2 < iVar3) {\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }\n    else {\n      iVar2 = unaff_retaddr[2];\n    }" (if "if") (parenthesized_expression "(iVar2 < iVar3)" (( "(") (binary_expression "iVar2 < iVar3" (identifier "iVar2") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);\n    }" ({ "{") (expression_statement "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);" (assignment_expression "iVar2 = __gmpz_realloc(unaff_retaddr,iVar3)" (identifier "iVar2") (= "=") (call_expression "__gmpz_realloc(unaff_retaddr,iVar3)" (identifier "__gmpz_realloc") (argument_list "(unaff_retaddr,iVar3)" (( "(") (identifier "unaff_retaddr") (, ",") (identifier "iVar3") () ")")))) (; ";")) (} "}")) (else_clause "else {\n      iVar2 = unaff_retaddr[2];\n    }" (else "else") (compound_statement "{\n      iVar2 = unaff_retaddr[2];\n    }" ({ "{") (expression_statement "iVar2 = unaff_retaddr[2];" (assignment_expression "iVar2 = unaff_retaddr[2]" (identifier "iVar2") (= "=") (subscript_expression "unaff_retaddr[2]" (identifier "unaff_retaddr") ([ "[") (number_literal "2") (] "]"))) (; ";")) (} "}")))) (expression_statement "uVar6 = 0x33333333;" (assignment_expression "uVar6 = 0x33333333" (identifier "uVar6") (= "=") (number_literal "0x33333333")) (; ";")) (} "}")))) (expression_statement "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);" (call_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0)" (parenthesized_expression "(**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))" (( "(") (pointer_expression "**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14)" (* "*") (pointer_expression "*(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14)" (* "*") (cast_expression "(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(int *)(unaff_EBX + 0x7675b) + 0x14)" (( "(") (binary_expression "*(int *)(unaff_EBX + 0x7675b) + 0x14" (pointer_expression "*(int *)(unaff_EBX + 0x7675b)" (* "*") (cast_expression "(int *)(unaff_EBX + 0x7675b)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(unaff_EBX + 0x7675b)" (( "(") (binary_expression "unaff_EBX + 0x7675b" (identifier "unaff_EBX") (+ "+") (number_literal "0x7675b")) () ")")))) (+ "+") (number_literal "0x14")) () ")"))))) () ")")) (argument_list "(iVar2,param_3[2],iVar3,uVar6,0)" (( "(") (identifier "iVar2") (, ",") (subscript_expression "param_3[2]" (identifier "param_3") ([ "[") (number_literal "2") (] "]")) (, ",") (identifier "iVar3") (, ",") (identifier "uVar6") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);" (assignment_expression "iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4)" (identifier "iVar2") (= "=") (pointer_expression "*(int *)(iVar2 + -4 + iVar3 * 4)" (* "*") (cast_expression "(int *)(iVar2 + -4 + iVar3 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + -4 + iVar3 * 4)" (( "(") (binary_expression "iVar2 + -4 + iVar3 * 4" (binary_expression "iVar2 + -4" (identifier "iVar2") (+ "+") (number_literal "-4")) (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (labeled_statement "LAB_000276c9:\n  iVar1 = (uint)(iVar2 == 0) - iVar3;" (statement_identifier "LAB_000276c9") (: ":") (expression_statement "iVar1 = (uint)(iVar2 == 0) - iVar3;" (assignment_expression "iVar1 = (uint)(iVar2 == 0) - iVar3" (identifier "iVar1") (= "=") (binary_expression "(uint)(iVar2 == 0) - iVar3" (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")"))) (- "-") (identifier "iVar3"))) (; ";"))) (if_statement "if (0 < (int)uVar5) {\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }" (if "if") (parenthesized_expression "(0 < (int)uVar5)" (( "(") (binary_expression "0 < (int)uVar5" (number_literal "0") (< "<") (cast_expression "(int)uVar5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar5"))) () ")")) (compound_statement "{\n    iVar1 = iVar3 - (uint)(iVar2 == 0);\n  }" ({ "{") (expression_statement "iVar1 = iVar3 - (uint)(iVar2 == 0);" (assignment_expression "iVar1 = iVar3 - (uint)(iVar2 == 0)" (identifier "iVar1") (= "=") (binary_expression "iVar3 - (uint)(iVar2 == 0)" (identifier "iVar3") (- "-") (call_expression "(uint)(iVar2 == 0)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(iVar2 == 0)" (( "(") (binary_expression "iVar2 == 0" (identifier "iVar2") (== "==") (number_literal "0")) () ")"))))) (; ";")) (} "}"))) (expression_statement "unaff_retaddr[1] = iVar1;" (assignment_expression "unaff_retaddr[1] = iVar1" (subscript_expression "unaff_retaddr[1]" (identifier "unaff_retaddr") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar1")) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void function_1(type_1 var_7,type_2 var_6,type_2 d)

{
  type_3 var_13;
  type_4 var_4;
  int var_9;
  type_3 *pmVar3;
  int var_10;
  type_5 var_3;
  type_5 var_1;
  type_6 uVar6;
  
  var_1 = var_6->_mp_size;
  if (var_1 == 0) {
    var_7->_mp_size = 0;
    return;
  }
  if (d->_mp_size != 1) {
    var_2(var_7,var_6,d);
    return;
  }
  var_3 = *d->_mp_d;
  if ((var_3 & 1) == 0) {
    var_4 = 0;
    for (var_1 = var_3; (var_1 & 1) == 0; var_1 = var_1 >> 1 | 0x80000000) {
      var_4 = var_4 + 1;
    }
    var_3 = var_3 >> ((type_7)var_4 & 0x1f);
    var_5(var_7,var_6,var_4);
    if (var_3 == 1) {
      return;
    }
    var_1 = var_7->_mp_size;
    var_6 = var_7;
  }
  else if (var_3 == 1) {
    if (var_6 == var_7) {
      return;
    }
    var_8(var_7,var_6);
    return;
  }
  var_10 = ((int)var_1 >> 0x1f ^ var_1) - ((int)var_1 >> 0x1f);
  var_9 = var_7->_mp_alloc;
  if (var_3 == 3) {
    if (var_9 < var_10) {
      pmVar3 = (type_3 *)var_11(var_7,var_10);
    }
    else {
      pmVar3 = var_7->_mp_d;
    }
    uVar6 = 0x55555555;
  }
  else {
    if (var_3 != 5) {
      if (var_9 < var_10) {
        pmVar3 = (type_3 *)var_11(var_7,var_10);
      }
      else {
        pmVar3 = var_7->_mp_d;
      }
      (**(type_8 **)(var_12 + 0x2c))(pmVar3,var_6->_mp_d,var_10,var_3);
      var_13 = pmVar3[var_10 + -1];
      goto LAB_000276c9;
    }
    if (var_9 < var_10) {
      pmVar3 = (type_3 *)var_11(var_7,var_10);
    }
    else {
      pmVar3 = var_7->_mp_d;
    }
    uVar6 = 0x33333333;
  }
  (**(type_8 **)(var_12 + 0x14))(pmVar3,var_6->_mp_d,var_10,uVar6,0);
  var_13 = pmVar3[var_10 + -1];
LAB_000276c9:
  var_9 = (type_5)(var_13 == 0) - var_10;
  if (0 < (int)var_1) {
    var_9 = var_10 - (type_5)(var_13 == 0);
  }
  var_7->_mp_size = var_9;
  return;
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (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: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (return_statement))) (if_statement condition: (parenthesized_expression (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: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (for_statement initializer: (assignment_expression left: (identifier) right: (identifier)) condition: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)) update: (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (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: (identifier))) consequence: (compound_statement (return_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (return_statement))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)) right: (identifier))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (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: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (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: (number_literal))))))) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal)) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (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: (number_literal))))))) arguments: (argument_list (identifier) (subscript_expression argument: (identifier) index: (number_literal)) (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) (return_statement))))

void __regparm2 MASKED(undefined4 param_1,undefined4 param_2,int *param_3,int param_4)

{
  int iVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int unaff_EBX;
  uint uVar5;
  int *unaff_retaddr;
  undefined4 uVar6;
  
  entry(param_2,0x27639);
  uVar5 = param_3[1];
  if (uVar5 == 0) {
    unaff_retaddr[1] = 0;
    return;
  }
  if (*(int *)(param_4 + 4) != 1) {
    __gmpz_divexact(unaff_retaddr,param_3,param_4);
    return;
  }
  uVar4 = **(uint **)(param_4 + 8);
  if ((uVar4 & 1) == 0) {
    iVar2 = 0;
    for (uVar5 = uVar4; (uVar5 & 1) == 0; uVar5 = uVar5 >> 1 | 0x80000000) {
      iVar2 = iVar2 + 1;
    }
    uVar4 = uVar4 >> ((byte)iVar2 & 0x1f);
    __gmpz_tdiv_q_2exp(unaff_retaddr,param_3,iVar2);
    if (uVar4 == 1) {
      return;
    }
    uVar5 = unaff_retaddr[1];
    param_3 = unaff_retaddr;
  }
  else if (uVar4 == 1) {
    if (param_3 == unaff_retaddr) {
      return;
    }
    __gmpz_set(unaff_retaddr,param_3);
    return;
  }
  iVar3 = ((int)uVar5 >> 0x1f ^ uVar5) - ((int)uVar5 >> 0x1f);
  iVar2 = *unaff_retaddr;
  if (uVar4 == 3) {
    if (iVar2 < iVar3) {
      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);
    }
    else {
      iVar2 = unaff_retaddr[2];
    }
    uVar6 = 0x55555555;
  }
  else {
    if (uVar4 != 5) {
      if (iVar2 < iVar3) {
        iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);
      }
      else {
        iVar2 = unaff_retaddr[2];
      }
      (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x2c))(iVar2,param_3[2],iVar3,uVar4);
      iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);
      goto LAB_000276c9;
    }
    if (iVar2 < iVar3) {
      iVar2 = __gmpz_realloc(unaff_retaddr,iVar3);
    }
    else {
      iVar2 = unaff_retaddr[2];
    }
    uVar6 = 0x33333333;
  }
  (**(code **)(*(int *)(unaff_EBX + 0x7675b) + 0x14))(iVar2,param_3[2],iVar3,uVar6,0);
  iVar2 = *(int *)(iVar2 + -4 + iVar3 * 4);
LAB_000276c9:
  iVar1 = (uint)(iVar2 == 0) - iVar3;
  if (0 < (int)uVar5) {
    iVar1 = iVar3 - (uint)(iVar2 == 0);
  }
  unaff_retaddr[1] = iVar1;
  return;
}

