
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

int ecp_normalise(ec_point *a)

{
  anon_enum_32 aVar1;
  ec_curve *peVar2;
  Bignum_conflict pBVar3;
  
  peVar2 = a->curve;
  aVar1 = peVar2->type;
  if (aVar1 == ADDRTYPE_UNSPEC) {
    if ((a->x != (Bignum)0x0) && (a->y != (Bignum)0x0)) {
      pBVar3 = (Bignum_conflict)a->z;
      if (pBVar3 == (Bignum_conflict)0x0) {
        return 1;
      }
                    /* WARNING: Subroutine does not return */
      modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p);
    }
  }
  else {
    if (aVar1 != ADDRTYPE_IPV4) {
      return (uint)(aVar1 == ADDRTYPE_IPV6);
    }
    if (a->x != (Bignum)0x0) {
      if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {
        return 1;
      }
      pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);
      if (pBVar3 != (Bignum_conflict)0x0) {
                    /* WARNING: Subroutine does not return */
        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);
      }
    }
  }
  return 0;
}



bool FUN_00062558(int *param_1)

{
  int iVar1;
  undefined4 uVar2;
  int iVar3;
  undefined4 uVar4;
  int iVar5;
  int *piVar6;
  
  piVar6 = (int *)*param_1;
  iVar1 = *piVar6;
  if (iVar1 == 0) {
    if (param_1[1] == 0) {
      return false;
    }
    if (param_1[2] == 0) {
      return false;
    }
    iVar1 = param_1[3];
    if (iVar1 == 0) {
      return true;
    }
    uVar2 = modmul(iVar1,iVar1,piVar6[4]);
    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));
    if (iVar1 != 0) {
      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));
      freebn(iVar1);
      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));
      freebn(uVar2);
      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));
      freebn(uVar4);
      if (iVar1 == 0) {
        freebn(iVar3);
        return false;
      }
      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));
      freebn(iVar1);
      freebn(param_1[1]);
      param_1[1] = iVar3;
      freebn(param_1[2]);
      param_1[2] = iVar5;
      freebn(param_1[3]);
      param_1[3] = 0;
      return true;
    }
    freebn(uVar2);
  }
  else {
    if (iVar1 != 1) {
      return iVar1 == 2;
    }
    if (param_1[1] == 0) {
      return false;
    }
    if (param_1[3] == 0) {
      return true;
    }
    iVar1 = modinv(param_1[3],piVar6[4]);
    if (iVar1 != 0) {
      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));
      freebn(iVar1);
      freebn(param_1[3]);
      param_1[3] = 0;
      freebn(param_1[1]);
      param_1[1] = iVar3;
      return true;
    }
  }
  return false;
}


lui gp,0x5
addiu gp,gp,0x5bf8
addu gp,gp,t9
lw v1,0x0(a0)
addiu sp,sp,-0x28
sw gp,0x10(sp)
sw s0,0x18(sp)
sw ra,0x24(sp)
sw s2,0x20(sp)
sw s1,0x1c(sp)
lw v0,0x0(v1)
bne v0,zero,0x00062720
_or s0,a0,zero
lw v0,0x4(a0)
beq v0,zero,0x00062708
_or v0,zero,zero
lw v0,0x8(a0)
beq v0,zero,0x00062708
_or v0,zero,zero
lw a1,0xc(a0)
beq a1,zero,0x000627d0
_lw t9,-0x78f8(gp)
or a0,a1,zero
bal 0x00056b44
_lw a2,0x10(v1)
lw gp,0x10(sp)
or a0,v0,zero
lw v1,0x0(s0)
or s1,v0,zero
lw t9,-0x78fc(gp)
bal 0x0005929c
_lw a1,0x10(v1)
lw gp,0x10(sp)
beq v0,zero,0x000626f8
_or s2,v0,zero
lw v0,0x0(s0)
or a1,s2,zero
lw t9,-0x78f8(gp)
lw a0,0x4(s0)
bal 0x00056b44
_lw a2,0x10(v0)
or a0,s2,zero
lw gp,0x10(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_or s2,v0,zero
or a0,s1,zero
lw gp,0x10(sp)
lw v0,0x0(s0)
lw a1,0xc(s0)
lw t9,-0x78f8(gp)
bal 0x00056b44
_lw a2,0x10(v0)
or a0,s1,zero
lw gp,0x10(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_or s1,v0,zero
or a0,s1,zero
lw gp,0x10(sp)
lw v0,0x0(s0)
lw t9,-0x78fc(gp)
bal 0x0005929c
_lw a1,0x10(v0)
or a0,s1,zero
lw gp,0x10(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_or s1,v0,zero
beq s1,zero,0x000627ec
_lw gp,0x10(sp)
lw v0,0x0(s0)
or a1,s1,zero
lw t9,-0x78f8(gp)
lw a0,0x8(s0)
bal 0x00056b44
_lw a2,0x10(v0)
or a0,s1,zero
lw gp,0x10(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_or s1,v0,zero
lw gp,0x10(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_lw a0,0x4(s0)
lw gp,0x10(sp)
lw a0,0x8(s0)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_sw s2,0x4(s0)
lw gp,0x10(sp)
lw a0,0xc(s0)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_sw s1,0x8(s0)
li v0,0x1
lw ra,0x24(sp)
lw s2,0x20(sp)
lw s1,0x1c(sp)
sw zero,0xc(s0)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
lw t9,-0x7a0c(gp)
bal 0x00056af4
_or a0,s1,zero
or v0,zero,zero
lw ra,0x24(sp)
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
li a0,0x1
beq v0,a0,0x00062748
_lw ra,0x24(sp)
xori v0,v0,0x2
lw s2,0x20(sp)
sltiu v0,v0,0x1
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
lw v0,0x4(s0)
beq v0,zero,0x00062708
_or v0,zero,zero
lw a0,0xc(s0)
beq a0,zero,0x000627d0
_lw t9,-0x78fc(gp)
bal 0x0005929c
_lw a1,0x10(v1)
lw gp,0x10(sp)
beq v0,zero,0x00062704
_or s1,v0,zero
lw v0,0x0(s0)
or a1,s1,zero
lw t9,-0x78f8(gp)
lw a0,0x4(s0)
bal 0x00056b44
_lw a2,0x10(v0)
or a0,s1,zero
lw gp,0x10(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_or s1,v0,zero
lw gp,0x10(sp)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_lw a0,0xc(s0)
lw gp,0x10(sp)
lw a0,0x4(s0)
lw t9,-0x7a0c(gp)
bal 0x00056af4
_sw zero,0xc(s0)
li v0,0x1
b 0x00062708
_sw s1,0x4(s0)
lw ra,0x24(sp)
li v0,0x1
lw s2,0x20(sp)
lw s1,0x1c(sp)
lw s0,0x18(sp)
jr ra
_addiu sp,sp,0x28
lw t9,-0x7a0c(gp)
bal 0x00056af4
_or a0,s2,zero
b 0x00062708
_or v0,zero,zero
(translation_unit "bool FUN_00062558(int *param_1)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  piVar6 = (int *)*param_1;\n  iVar1 = *piVar6;\n  if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }\n  return false;\n}\n\n" (function_definition "bool FUN_00062558(int *param_1)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  piVar6 = (int *)*param_1;\n  iVar1 = *piVar6;\n  if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }\n  return false;\n}" primitive_type (function_declarator "FUN_00062558(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  piVar6 = (int *)*param_1;\n  iVar1 = *piVar6;\n  if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }\n  return false;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (expression_statement "piVar6 = (int *)*param_1;" (assignment_expression "piVar6 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "iVar1 = *piVar6;" (assignment_expression "iVar1 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (if_statement "if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }" { (if_statement "if (param_1[1] == 0) {\n      return false;\n    }" if (parenthesized_expression "(param_1[1] == 0)" ( (binary_expression "param_1[1] == 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if (param_1[2] == 0) {\n      return false;\n    }" if (parenthesized_expression "(param_1[2] == 0)" ( (binary_expression "param_1[2] == 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (expression_statement "iVar1 = param_1[3];" (assignment_expression "iVar1 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (if_statement "if (iVar1 == 0) {\n      return true;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "uVar2 = modmul(iVar1,iVar1,piVar6[4]);" (assignment_expression "uVar2 = modmul(iVar1,iVar1,piVar6[4])" identifier = (call_expression "modmul(iVar1,iVar1,piVar6[4])" identifier (argument_list "(iVar1,iVar1,piVar6[4])" ( identifier , identifier , (subscript_expression "piVar6[4]" identifier [ number_literal ]) )))) ;) (expression_statement "iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modinv(uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar2,*(undefined4 *)(*param_1 + 0x10))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (if_statement "if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }" { (expression_statement "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(iVar1);" (call_expression "freebn(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10))" ( identifier , (subscript_expression "param_1[3]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(uVar2);" (call_expression "freebn(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (expression_statement "iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modinv(uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar4,*(undefined4 *)(*param_1 + 0x10))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(uVar4);" (call_expression "freebn(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (if_statement "if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        freebn(iVar3);\n        return false;\n      }" { (expression_statement "freebn(iVar3);" (call_expression "freebn(iVar3)" identifier (argument_list "(iVar3)" ( identifier ))) ;) (return_statement "return false;" return false ;) })) (expression_statement "iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(iVar1);" (call_expression "freebn(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "freebn(param_1[1]);" (call_expression "freebn(param_1[1])" identifier (argument_list "(param_1[1])" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[1] = iVar3;" (assignment_expression "param_1[1] = iVar3" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "freebn(param_1[2]);" (call_expression "freebn(param_1[2])" identifier (argument_list "(param_1[2])" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[2] = iVar5;" (assignment_expression "param_1[2] = iVar5" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "freebn(param_1[3]);" (call_expression "freebn(param_1[3])" identifier (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return true;" return true ;) })) (expression_statement "freebn(uVar2);" (call_expression "freebn(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) }) (else_clause "else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }" else (compound_statement "{\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }" { (if_statement "if (iVar1 != 1) {\n      return iVar1 == 2;\n    }" if (parenthesized_expression "(iVar1 != 1)" ( (binary_expression "iVar1 != 1" identifier != number_literal) )) (compound_statement "{\n      return iVar1 == 2;\n    }" { (return_statement "return iVar1 == 2;" return (binary_expression "iVar1 == 2" identifier == number_literal) ;) })) (if_statement "if (param_1[1] == 0) {\n      return false;\n    }" if (parenthesized_expression "(param_1[1] == 0)" ( (binary_expression "param_1[1] == 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if (param_1[3] == 0) {\n      return true;\n    }" if (parenthesized_expression "(param_1[3] == 0)" ( (binary_expression "param_1[3] == 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "iVar1 = modinv(param_1[3],piVar6[4]);" (assignment_expression "iVar1 = modinv(param_1[3],piVar6[4])" identifier = (call_expression "modinv(param_1[3],piVar6[4])" identifier (argument_list "(param_1[3],piVar6[4])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) , (subscript_expression "piVar6[4]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }" { (expression_statement "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(iVar1);" (call_expression "freebn(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "freebn(param_1[3]);" (call_expression "freebn(param_1[3])" identifier (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "freebn(param_1[1]);" (call_expression "freebn(param_1[1])" identifier (argument_list "(param_1[1])" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[1] = iVar3;" (assignment_expression "param_1[1] = iVar3" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return true;" return true ;) })) }))) (return_statement "return false;" return false ;) })))
(translation_unit "/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nint ecp_normalise(ec_point *a)\n\n{\n  anon_enum_32 aVar1;\n  ec_curve *peVar2;\n  Bignum_conflict pBVar3;\n  \n  peVar2 = a->curve;\n  aVar1 = peVar2->type;\n  if (aVar1 == ADDRTYPE_UNSPEC) {\n    if ((a->x != (Bignum)0x0) && (a->y != (Bignum)0x0)) {\n      pBVar3 = (Bignum_conflict)a->z;\n      if (pBVar3 == (Bignum_conflict)0x0) {\n        return 1;\n      }\n                    /* WARNING: Subroutine does not return */\n      modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p);\n    }\n  }\n  else {\n    if (aVar1 != ADDRTYPE_IPV4) {\n      return (uint)(aVar1 == ADDRTYPE_IPV6);\n    }\n    if (a->x != (Bignum)0x0) {\n      if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {\n        return 1;\n      }\n      pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);\n      if (pBVar3 != (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }\n    }\n  }\n  return 0;\n}\n\n" comment (function_definition "int ecp_normalise(ec_point *a)\n\n{\n  anon_enum_32 aVar1;\n  ec_curve *peVar2;\n  Bignum_conflict pBVar3;\n  \n  peVar2 = a->curve;\n  aVar1 = peVar2->type;\n  if (aVar1 == ADDRTYPE_UNSPEC) {\n    if ((a->x != (Bignum)0x0) && (a->y != (Bignum)0x0)) {\n      pBVar3 = (Bignum_conflict)a->z;\n      if (pBVar3 == (Bignum_conflict)0x0) {\n        return 1;\n      }\n                    /* WARNING: Subroutine does not return */\n      modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p);\n    }\n  }\n  else {\n    if (aVar1 != ADDRTYPE_IPV4) {\n      return (uint)(aVar1 == ADDRTYPE_IPV6);\n    }\n    if (a->x != (Bignum)0x0) {\n      if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {\n        return 1;\n      }\n      pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);\n      if (pBVar3 != (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }\n    }\n  }\n  return 0;\n}" primitive_type (function_declarator "ecp_normalise(ec_point *a)" identifier (parameter_list "(ec_point *a)" ( (parameter_declaration "ec_point *a" type_identifier (pointer_declarator "*a" * identifier)) ))) (compound_statement "{\n  anon_enum_32 aVar1;\n  ec_curve *peVar2;\n  Bignum_conflict pBVar3;\n  \n  peVar2 = a->curve;\n  aVar1 = peVar2->type;\n  if (aVar1 == ADDRTYPE_UNSPEC) {\n    if ((a->x != (Bignum)0x0) && (a->y != (Bignum)0x0)) {\n      pBVar3 = (Bignum_conflict)a->z;\n      if (pBVar3 == (Bignum_conflict)0x0) {\n        return 1;\n      }\n                    /* WARNING: Subroutine does not return */\n      modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p);\n    }\n  }\n  else {\n    if (aVar1 != ADDRTYPE_IPV4) {\n      return (uint)(aVar1 == ADDRTYPE_IPV6);\n    }\n    if (a->x != (Bignum)0x0) {\n      if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {\n        return 1;\n      }\n      pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);\n      if (pBVar3 != (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }\n    }\n  }\n  return 0;\n}" { (declaration "anon_enum_32 aVar1;" type_identifier identifier ;) (declaration "ec_curve *peVar2;" type_identifier (pointer_declarator "*peVar2" * identifier) ;) (declaration "Bignum_conflict pBVar3;" type_identifier identifier ;) (expression_statement "peVar2 = a->curve;" (assignment_expression "peVar2 = a->curve" identifier = (field_expression "a->curve" identifier -> field_identifier)) ;) (expression_statement "aVar1 = peVar2->type;" (assignment_expression "aVar1 = peVar2->type" identifier = (field_expression "peVar2->type" identifier -> field_identifier)) ;) (if_statement "if (aVar1 == ADDRTYPE_UNSPEC) {\n    if ((a->x != (Bignum)0x0) && (a->y != (Bignum)0x0)) {\n      pBVar3 = (Bignum_conflict)a->z;\n      if (pBVar3 == (Bignum_conflict)0x0) {\n        return 1;\n      }\n                    /* WARNING: Subroutine does not return */\n      modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p);\n    }\n  }\n  else {\n    if (aVar1 != ADDRTYPE_IPV4) {\n      return (uint)(aVar1 == ADDRTYPE_IPV6);\n    }\n    if (a->x != (Bignum)0x0) {\n      if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {\n        return 1;\n      }\n      pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);\n      if (pBVar3 != (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }\n    }\n  }" if (parenthesized_expression "(aVar1 == ADDRTYPE_UNSPEC)" ( (binary_expression "aVar1 == ADDRTYPE_UNSPEC" identifier == identifier) )) (compound_statement "{\n    if ((a->x != (Bignum)0x0) && (a->y != (Bignum)0x0)) {\n      pBVar3 = (Bignum_conflict)a->z;\n      if (pBVar3 == (Bignum_conflict)0x0) {\n        return 1;\n      }\n                    /* WARNING: Subroutine does not return */\n      modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p);\n    }\n  }" { (if_statement "if ((a->x != (Bignum)0x0) && (a->y != (Bignum)0x0)) {\n      pBVar3 = (Bignum_conflict)a->z;\n      if (pBVar3 == (Bignum_conflict)0x0) {\n        return 1;\n      }\n                    /* WARNING: Subroutine does not return */\n      modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p);\n    }" if (parenthesized_expression "((a->x != (Bignum)0x0) && (a->y != (Bignum)0x0))" ( (binary_expression "(a->x != (Bignum)0x0) && (a->y != (Bignum)0x0)" (parenthesized_expression "(a->x != (Bignum)0x0)" ( (binary_expression "a->x != (Bignum)0x0" (field_expression "a->x" identifier -> field_identifier) != (cast_expression "(Bignum)0x0" ( (type_descriptor "Bignum" type_identifier) ) number_literal)) )) && (parenthesized_expression "(a->y != (Bignum)0x0)" ( (binary_expression "a->y != (Bignum)0x0" (field_expression "a->y" identifier -> field_identifier) != (cast_expression "(Bignum)0x0" ( (type_descriptor "Bignum" type_identifier) ) number_literal)) ))) )) (compound_statement "{\n      pBVar3 = (Bignum_conflict)a->z;\n      if (pBVar3 == (Bignum_conflict)0x0) {\n        return 1;\n      }\n                    /* WARNING: Subroutine does not return */\n      modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p);\n    }" { (expression_statement "pBVar3 = (Bignum_conflict)a->z;" (assignment_expression "pBVar3 = (Bignum_conflict)a->z" identifier = (cast_expression "(Bignum_conflict)a->z" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->z" identifier -> field_identifier))) ;) (if_statement "if (pBVar3 == (Bignum_conflict)0x0) {\n        return 1;\n      }" if (parenthesized_expression "(pBVar3 == (Bignum_conflict)0x0)" ( (binary_expression "pBVar3 == (Bignum_conflict)0x0" identifier == (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal)) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) comment (expression_statement "modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p);" (call_expression "modmul(pBVar3,pBVar3,(Bignum_conflict)peVar2->p)" identifier (argument_list "(pBVar3,pBVar3,(Bignum_conflict)peVar2->p)" ( identifier , identifier , (cast_expression "(Bignum_conflict)peVar2->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "peVar2->p" identifier -> field_identifier)) ))) ;) })) }) (else_clause "else {\n    if (aVar1 != ADDRTYPE_IPV4) {\n      return (uint)(aVar1 == ADDRTYPE_IPV6);\n    }\n    if (a->x != (Bignum)0x0) {\n      if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {\n        return 1;\n      }\n      pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);\n      if (pBVar3 != (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }\n    }\n  }" else (compound_statement "{\n    if (aVar1 != ADDRTYPE_IPV4) {\n      return (uint)(aVar1 == ADDRTYPE_IPV6);\n    }\n    if (a->x != (Bignum)0x0) {\n      if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {\n        return 1;\n      }\n      pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);\n      if (pBVar3 != (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }\n    }\n  }" { (if_statement "if (aVar1 != ADDRTYPE_IPV4) {\n      return (uint)(aVar1 == ADDRTYPE_IPV6);\n    }" if (parenthesized_expression "(aVar1 != ADDRTYPE_IPV4)" ( (binary_expression "aVar1 != ADDRTYPE_IPV4" identifier != identifier) )) (compound_statement "{\n      return (uint)(aVar1 == ADDRTYPE_IPV6);\n    }" { (return_statement "return (uint)(aVar1 == ADDRTYPE_IPV6);" return (call_expression "(uint)(aVar1 == ADDRTYPE_IPV6)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(aVar1 == ADDRTYPE_IPV6)" ( (binary_expression "aVar1 == ADDRTYPE_IPV6" identifier == identifier) ))) ;) })) (if_statement "if (a->x != (Bignum)0x0) {\n      if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {\n        return 1;\n      }\n      pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);\n      if (pBVar3 != (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }\n    }" if (parenthesized_expression "(a->x != (Bignum)0x0)" ( (binary_expression "a->x != (Bignum)0x0" (field_expression "a->x" identifier -> field_identifier) != (cast_expression "(Bignum)0x0" ( (type_descriptor "Bignum" type_identifier) ) number_literal)) )) (compound_statement "{\n      if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {\n        return 1;\n      }\n      pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);\n      if (pBVar3 != (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }\n    }" { (if_statement "if ((Bignum_conflict)a->z == (Bignum_conflict)0x0) {\n        return 1;\n      }" if (parenthesized_expression "((Bignum_conflict)a->z == (Bignum_conflict)0x0)" ( (binary_expression "(Bignum_conflict)a->z == (Bignum_conflict)0x0" (cast_expression "(Bignum_conflict)a->z" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->z" identifier -> field_identifier)) == (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal)) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p);" (assignment_expression "pBVar3 = modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p)" identifier = (call_expression "modinv((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p)" identifier (argument_list "((Bignum_conflict)a->z,(Bignum_conflict)peVar2->p)" ( (cast_expression "(Bignum_conflict)a->z" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->z" identifier -> field_identifier)) , (cast_expression "(Bignum_conflict)peVar2->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "peVar2->p" identifier -> field_identifier)) )))) ;) (if_statement "if (pBVar3 != (Bignum_conflict)0x0) {\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }" if (parenthesized_expression "(pBVar3 != (Bignum_conflict)0x0)" ( (binary_expression "pBVar3 != (Bignum_conflict)0x0" identifier != (cast_expression "(Bignum_conflict)0x0" ( (type_descriptor "Bignum_conflict" type_identifier) ) number_literal)) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);\n      }" { comment (expression_statement "modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p);" (call_expression "modmul((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p)" identifier (argument_list "((Bignum_conflict)a->x,pBVar3,(Bignum_conflict)a->curve->p)" ( (cast_expression "(Bignum_conflict)a->x" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->x" identifier -> field_identifier)) , identifier , (cast_expression "(Bignum_conflict)a->curve->p" ( (type_descriptor "Bignum_conflict" type_identifier) ) (field_expression "a->curve->p" (field_expression "a->curve" identifier -> field_identifier) -> field_identifier)) ))) ;) })) })) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "bool FUN_00062558(int *param_1)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  piVar6 = (int *)*param_1;\n  iVar1 = *piVar6;\n  if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }\n  return false;\n}\n\n" (function_definition "bool FUN_00062558(int *param_1)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  piVar6 = (int *)*param_1;\n  iVar1 = *piVar6;\n  if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }\n  return false;\n}" primitive_type (function_declarator "FUN_00062558(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  piVar6 = (int *)*param_1;\n  iVar1 = *piVar6;\n  if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }\n  return false;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (expression_statement "piVar6 = (int *)*param_1;" (assignment_expression "piVar6 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "iVar1 = *piVar6;" (assignment_expression "iVar1 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (if_statement "if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }" { (if_statement "if (param_1[1] == 0) {\n      return false;\n    }" if (parenthesized_expression "(param_1[1] == 0)" ( (binary_expression "param_1[1] == 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if (param_1[2] == 0) {\n      return false;\n    }" if (parenthesized_expression "(param_1[2] == 0)" ( (binary_expression "param_1[2] == 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (expression_statement "iVar1 = param_1[3];" (assignment_expression "iVar1 = param_1[3]" identifier = (subscript_expression "param_1[3]" identifier [ number_literal ])) ;) (if_statement "if (iVar1 == 0) {\n      return true;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "uVar2 = modmul(iVar1,iVar1,piVar6[4]);" (assignment_expression "uVar2 = modmul(iVar1,iVar1,piVar6[4])" identifier = (call_expression "modmul(iVar1,iVar1,piVar6[4])" identifier (argument_list "(iVar1,iVar1,piVar6[4])" ( identifier , identifier , (subscript_expression "piVar6[4]" identifier [ number_literal ]) )))) ;) (expression_statement "iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modinv(uVar2,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar2,*(undefined4 *)(*param_1 + 0x10))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (if_statement "if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }" { (expression_statement "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(iVar1);" (call_expression "freebn(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10))" ( identifier , (subscript_expression "param_1[3]" identifier [ number_literal ]) , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(uVar2);" (call_expression "freebn(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) (expression_statement "iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modinv(uVar4,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(uVar4,*(undefined4 *)(*param_1 + 0x10))" ( identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(uVar4);" (call_expression "freebn(uVar4)" identifier (argument_list "(uVar4)" ( identifier ))) ;) (if_statement "if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        freebn(iVar3);\n        return false;\n      }" { (expression_statement "freebn(iVar3);" (call_expression "freebn(iVar3)" identifier (argument_list "(iVar3)" ( identifier ))) ;) (return_statement "return false;" return false ;) })) (expression_statement "iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(iVar1);" (call_expression "freebn(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "freebn(param_1[1]);" (call_expression "freebn(param_1[1])" identifier (argument_list "(param_1[1])" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[1] = iVar3;" (assignment_expression "param_1[1] = iVar3" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "freebn(param_1[2]);" (call_expression "freebn(param_1[2])" identifier (argument_list "(param_1[2])" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[2] = iVar5;" (assignment_expression "param_1[2] = iVar5" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "freebn(param_1[3]);" (call_expression "freebn(param_1[3])" identifier (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return true;" return true ;) })) (expression_statement "freebn(uVar2);" (call_expression "freebn(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))) ;) }) (else_clause "else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }" else (compound_statement "{\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }" { (if_statement "if (iVar1 != 1) {\n      return iVar1 == 2;\n    }" if (parenthesized_expression "(iVar1 != 1)" ( (binary_expression "iVar1 != 1" identifier != number_literal) )) (compound_statement "{\n      return iVar1 == 2;\n    }" { (return_statement "return iVar1 == 2;" return (binary_expression "iVar1 == 2" identifier == number_literal) ;) })) (if_statement "if (param_1[1] == 0) {\n      return false;\n    }" if (parenthesized_expression "(param_1[1] == 0)" ( (binary_expression "param_1[1] == 0" (subscript_expression "param_1[1]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if (param_1[3] == 0) {\n      return true;\n    }" if (parenthesized_expression "(param_1[3] == 0)" ( (binary_expression "param_1[3] == 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) == number_literal) )) (compound_statement "{\n      return true;\n    }" { (return_statement "return true;" return true ;) })) (expression_statement "iVar1 = modinv(param_1[3],piVar6[4]);" (assignment_expression "iVar1 = modinv(param_1[3],piVar6[4])" identifier = (call_expression "modinv(param_1[3],piVar6[4])" identifier (argument_list "(param_1[3],piVar6[4])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) , (subscript_expression "piVar6[4]" identifier [ number_literal ]) )))) ;) (if_statement "if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }" { (expression_statement "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier = (call_expression "modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" identifier (argument_list "(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) , identifier , (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" * (cast_expression "(undefined4 *)(*param_1 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) )))) ;) (expression_statement "freebn(iVar1);" (call_expression "freebn(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "freebn(param_1[3]);" (call_expression "freebn(param_1[3])" identifier (argument_list "(param_1[3])" ( (subscript_expression "param_1[3]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "freebn(param_1[1]);" (call_expression "freebn(param_1[1])" identifier (argument_list "(param_1[1])" ( (subscript_expression "param_1[1]" identifier [ number_literal ]) ))) ;) (expression_statement "param_1[1] = iVar3;" (assignment_expression "param_1[1] = iVar3" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return true;" return true ;) })) }))) (return_statement "return false;" return false ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (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 (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (subscript_expression IDENT [ LIT ]) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (subscript_expression IDENT [ LIT ]) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return BOOL ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return (binary_expression IDENT == LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return BOOL ;) })) }))) (return_statement return BOOL ;) })))
(function_definition "bool FUN_00062558(int *param_1)\n\n{\n  int iVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  piVar6 = (int *)*param_1;\n  iVar1 = *piVar6;\n  if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }\n  return false;\n}" (primitive_type "bool") (function_declarator "FUN_00062558(int *param_1)" (identifier "FUN_00062558") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  int iVar1;\n  undefined4 uVar2;\n  int iVar3;\n  undefined4 uVar4;\n  int iVar5;\n  int *piVar6;\n  \n  piVar6 = (int *)*param_1;\n  iVar1 = *piVar6;\n  if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }\n  return false;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (expression_statement "piVar6 = (int *)*param_1;" (assignment_expression "piVar6 = (int *)*param_1" (identifier "piVar6") (= "=") (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "iVar1 = *piVar6;" (assignment_expression "iVar1 = *piVar6" (identifier "iVar1") (= "=") (pointer_expression "*piVar6" (* "*") (identifier "piVar6"))) (; ";")) (if_statement "if (iVar1 == 0) {\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }\n  else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[2] == 0) {\n      return false;\n    }\n    iVar1 = param_1[3];\n    if (iVar1 == 0) {\n      return true;\n    }\n    uVar2 = modmul(iVar1,iVar1,piVar6[4]);\n    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }\n    freebn(uVar2);\n  }" ({ "{") (if_statement "if (param_1[1] == 0) {\n      return false;\n    }" (if "if") (parenthesized_expression "(param_1[1] == 0)" (( "(") (binary_expression "param_1[1] == 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return false;\n    }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (if_statement "if (param_1[2] == 0) {\n      return false;\n    }" (if "if") (parenthesized_expression "(param_1[2] == 0)" (( "(") (binary_expression "param_1[2] == 0" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return false;\n    }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (expression_statement "iVar1 = param_1[3];" (assignment_expression "iVar1 = param_1[3]" (identifier "iVar1") (= "=") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (; ";")) (if_statement "if (iVar1 == 0) {\n      return true;\n    }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return true;\n    }" ({ "{") (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (expression_statement "uVar2 = modmul(iVar1,iVar1,piVar6[4]);" (assignment_expression "uVar2 = modmul(iVar1,iVar1,piVar6[4])" (identifier "uVar2") (= "=") (call_expression "modmul(iVar1,iVar1,piVar6[4])" (identifier "modmul") (argument_list "(iVar1,iVar1,piVar6[4])" (( "(") (identifier "iVar1") (, ",") (identifier "iVar1") (, ",") (subscript_expression "piVar6[4]" (identifier "piVar6") ([ "[") (number_literal "4") (] "]")) () ")")))) (; ";")) (expression_statement "iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10))" (identifier "iVar1") (= "=") (call_expression "modinv(uVar2,*(undefined4 *)(*param_1 + 0x10))" (identifier "modinv") (argument_list "(uVar2,*(undefined4 *)(*param_1 + 0x10))" (( "(") (identifier "uVar2") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (if_statement "if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar2);\n      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));\n      freebn(uVar4);\n      if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }\n      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      freebn(param_1[2]);\n      param_1[2] = iVar5;\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      return true;\n    }" ({ "{") (expression_statement "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "iVar3") (= "=") (call_expression "modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "modmul") (argument_list "(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" (( "(") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (, ",") (identifier "iVar1") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "freebn(iVar1);" (call_expression "freebn(iVar1)" (identifier "freebn") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10))" (identifier "uVar4") (= "=") (call_expression "modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10))" (identifier "modmul") (argument_list "(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10))" (( "(") (identifier "uVar2") (, ",") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "freebn(uVar2);" (call_expression "freebn(uVar2)" (identifier "freebn") (argument_list "(uVar2)" (( "(") (identifier "uVar2") () ")"))) (; ";")) (expression_statement "iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10))" (identifier "iVar1") (= "=") (call_expression "modinv(uVar4,*(undefined4 *)(*param_1 + 0x10))" (identifier "modinv") (argument_list "(uVar4,*(undefined4 *)(*param_1 + 0x10))" (( "(") (identifier "uVar4") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "freebn(uVar4);" (call_expression "freebn(uVar4)" (identifier "freebn") (argument_list "(uVar4)" (( "(") (identifier "uVar4") () ")"))) (; ";")) (if_statement "if (iVar1 == 0) {\n        freebn(iVar3);\n        return false;\n      }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        freebn(iVar3);\n        return false;\n      }" ({ "{") (expression_statement "freebn(iVar3);" (call_expression "freebn(iVar3)" (identifier "freebn") (argument_list "(iVar3)" (( "(") (identifier "iVar3") () ")"))) (; ";")) (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (expression_statement "iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "iVar5") (= "=") (call_expression "modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "modmul") (argument_list "(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10))" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (identifier "iVar1") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "freebn(iVar1);" (call_expression "freebn(iVar1)" (identifier "freebn") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "freebn(param_1[1]);" (call_expression "freebn(param_1[1])" (identifier "freebn") (argument_list "(param_1[1])" (( "(") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) () ")"))) (; ";")) (expression_statement "param_1[1] = iVar3;" (assignment_expression "param_1[1] = iVar3" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar3")) (; ";")) (expression_statement "freebn(param_1[2]);" (call_expression "freebn(param_1[2])" (identifier "freebn") (argument_list "(param_1[2])" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) () ")"))) (; ";")) (expression_statement "param_1[2] = iVar5;" (assignment_expression "param_1[2] = iVar5" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "iVar5")) (; ";")) (expression_statement "freebn(param_1[3]);" (call_expression "freebn(param_1[3])" (identifier "freebn") (argument_list "(param_1[3])" (( "(") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) () ")"))) (; ";")) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (expression_statement "freebn(uVar2);" (call_expression "freebn(uVar2)" (identifier "freebn") (argument_list "(uVar2)" (( "(") (identifier "uVar2") () ")"))) (; ";")) (} "}")) (else_clause "else {\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }" (else "else") (compound_statement "{\n    if (iVar1 != 1) {\n      return iVar1 == 2;\n    }\n    if (param_1[1] == 0) {\n      return false;\n    }\n    if (param_1[3] == 0) {\n      return true;\n    }\n    iVar1 = modinv(param_1[3],piVar6[4]);\n    if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }\n  }" ({ "{") (if_statement "if (iVar1 != 1) {\n      return iVar1 == 2;\n    }" (if "if") (parenthesized_expression "(iVar1 != 1)" (( "(") (binary_expression "iVar1 != 1" (identifier "iVar1") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n      return iVar1 == 2;\n    }" ({ "{") (return_statement "return iVar1 == 2;" (return "return") (binary_expression "iVar1 == 2" (identifier "iVar1") (== "==") (number_literal "2")) (; ";")) (} "}"))) (if_statement "if (param_1[1] == 0) {\n      return false;\n    }" (if "if") (parenthesized_expression "(param_1[1] == 0)" (( "(") (binary_expression "param_1[1] == 0" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return false;\n    }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (if_statement "if (param_1[3] == 0) {\n      return true;\n    }" (if "if") (parenthesized_expression "(param_1[3] == 0)" (( "(") (binary_expression "param_1[3] == 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return true;\n    }" ({ "{") (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (expression_statement "iVar1 = modinv(param_1[3],piVar6[4]);" (assignment_expression "iVar1 = modinv(param_1[3],piVar6[4])" (identifier "iVar1") (= "=") (call_expression "modinv(param_1[3],piVar6[4])" (identifier "modinv") (argument_list "(param_1[3],piVar6[4])" (( "(") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (, ",") (subscript_expression "piVar6[4]" (identifier "piVar6") ([ "[") (number_literal "4") (] "]")) () ")")))) (; ";")) (if_statement "if (iVar1 != 0) {\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));\n      freebn(iVar1);\n      freebn(param_1[3]);\n      param_1[3] = 0;\n      freebn(param_1[1]);\n      param_1[1] = iVar3;\n      return true;\n    }" ({ "{") (expression_statement "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));" (assignment_expression "iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "iVar3") (= "=") (call_expression "modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" (identifier "modmul") (argument_list "(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10))" (( "(") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (, ",") (identifier "iVar1") (, ",") (pointer_expression "*(undefined4 *)(*param_1 + 0x10)" (* "*") (cast_expression "(undefined4 *)(*param_1 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) () ")")))) (; ";")) (expression_statement "freebn(iVar1);" (call_expression "freebn(iVar1)" (identifier "freebn") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "freebn(param_1[3]);" (call_expression "freebn(param_1[3])" (identifier "freebn") (argument_list "(param_1[3])" (( "(") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) () ")"))) (; ";")) (expression_statement "param_1[3] = 0;" (assignment_expression "param_1[3] = 0" (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "freebn(param_1[1]);" (call_expression "freebn(param_1[1])" (identifier "freebn") (argument_list "(param_1[1])" (( "(") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) () ")"))) (; ";")) (expression_statement "param_1[1] = iVar3;" (assignment_expression "param_1[1] = iVar3" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar3")) (; ";")) (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (} "}")))) (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}")))

/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

int function_1(type_1 *a)

{
  type_2 var_1;
  type_3 *peVar2;
  type_4 var_3;
  
  peVar2 = a->curve;
  var_1 = peVar2->type;
  if (var_1 == var_2) {
    if ((a->x != (type_5)0x0) && (a->y != (type_5)0x0)) {
      var_3 = (type_4)a->z;
      if (var_3 == (type_4)0x0) {
        return 1;
      }
                    /* WARNING: Subroutine does not return */
      var_4(var_3,var_3,(type_4)peVar2->p);
    }
  }
  else {
    if (var_1 != var_5) {
      return (uint)(var_1 == var_6);
    }
    if (a->x != (type_5)0x0) {
      if ((type_4)a->z == (type_4)0x0) {
        return 1;
      }
      var_3 = var_7((type_4)a->z,(type_4)peVar2->p);
      if (var_3 != (type_4)0x0) {
                    /* WARNING: Subroutine does not return */
        var_4((type_4)a->x,var_3,(type_4)a->curve->p);
      }
    }
  }
  return 0;
}


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

bool MASKED(int *param_1)

{
  int iVar1;
  undefined4 uVar2;
  int iVar3;
  undefined4 uVar4;
  int iVar5;
  int *piVar6;
  
  piVar6 = (int *)*param_1;
  iVar1 = *piVar6;
  if (iVar1 == 0) {
    if (param_1[1] == 0) {
      return false;
    }
    if (param_1[2] == 0) {
      return false;
    }
    iVar1 = param_1[3];
    if (iVar1 == 0) {
      return true;
    }
    uVar2 = modmul(iVar1,iVar1,piVar6[4]);
    iVar1 = modinv(uVar2,*(undefined4 *)(*param_1 + 0x10));
    if (iVar1 != 0) {
      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));
      freebn(iVar1);
      uVar4 = modmul(uVar2,param_1[3],*(undefined4 *)(*param_1 + 0x10));
      freebn(uVar2);
      iVar1 = modinv(uVar4,*(undefined4 *)(*param_1 + 0x10));
      freebn(uVar4);
      if (iVar1 == 0) {
        freebn(iVar3);
        return false;
      }
      iVar5 = modmul(param_1[2],iVar1,*(undefined4 *)(*param_1 + 0x10));
      freebn(iVar1);
      freebn(param_1[1]);
      param_1[1] = iVar3;
      freebn(param_1[2]);
      param_1[2] = iVar5;
      freebn(param_1[3]);
      param_1[3] = 0;
      return true;
    }
    freebn(uVar2);
  }
  else {
    if (iVar1 != 1) {
      return iVar1 == 2;
    }
    if (param_1[1] == 0) {
      return false;
    }
    if (param_1[3] == 0) {
      return true;
    }
    iVar1 = modinv(param_1[3],piVar6[4]);
    if (iVar1 != 0) {
      iVar3 = modmul(param_1[1],iVar1,*(undefined4 *)(*param_1 + 0x10));
      freebn(iVar1);
      freebn(param_1[3]);
      param_1[3] = 0;
      freebn(param_1[1]);
      param_1[1] = iVar3;
      return true;
    }
  }
  return false;
}

