
/* WARNING: Unknown calling convention */

Bignum_conflict bignum_bitmask(Bignum_conflict n)

{
  Bignum_conflict pBVar1;
  uint uVar2;
  BignumInt BVar3;
  uint uVar4;
  
  pBVar1 = copybn(n);
  BVar3 = *pBVar1;
  uVar2 = n[BVar3];
  if (uVar2 == 0) {
    if (0 < (int)BVar3) {
      do {
        BVar3 = BVar3 - 1;
        uVar2 = n[BVar3];
        if (uVar2 != 0) goto LAB_000424dd;
      } while (BVar3 != 0);
    }
  }
  else {
LAB_000424dd:
    if (0 < (int)BVar3) {
      uVar4 = 1;
      if (1 < uVar2) {
        do {
          uVar4 = uVar4 * 2 + 1;
        } while (uVar4 < uVar2);
      }
      pBVar1[BVar3] = uVar4;
      while (BVar3 = BVar3 - 1, BVar3 != 0) {
        pBVar1[BVar3] = 0xffffffff;
      }
    }
  }
  return pBVar1;
}



void FUN_000424a0(int param_1)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  
  piVar1 = (int *)FUN_000411a0(param_1);
  iVar3 = *piVar1;
  uVar2 = *(uint *)(param_1 + iVar3 * 4);
  if (uVar2 == 0) {
    if (0 < iVar3) {
      do {
        iVar3 = iVar3 + -1;
        uVar2 = *(uint *)(param_1 + iVar3 * 4);
        if (uVar2 != 0) goto LAB_000424dd;
      } while (iVar3 != 0);
    }
  }
  else {
LAB_000424dd:
    if (0 < iVar3) {
      uVar4 = 1;
      if (1 < uVar2) {
        do {
          uVar4 = uVar4 * 2 + 1;
        } while (uVar4 < uVar2);
      }
      piVar1[iVar3] = uVar4;
      while (iVar3 = iVar3 + -1, iVar3 != 0) {
        piVar1[iVar3] = -1;
      }
    }
  }
  return;
}


PUSH ESI
PUSH EBX
SUB ESP,0x10
MOV EBX,dword ptr [ESP + 0x1c]
PUSH EBX
CALL 0x000411a0
ADD ESP,0x10
MOV EDX,dword ptr [EAX]
MOV ECX,dword ptr [EBX + EDX*0x4]
TEST ECX,ECX
JNZ 0x00042512
TEST EDX,EDX
JG 0x000424cc
JMP 0x0004250c
TEST EDX,EDX
JZ 0x0004250c
SUB EDX,0x1
MOV ECX,dword ptr [EBX + EDX*0x4]
LEA ESI,[EDX*0x4 + 0x0]
TEST ECX,ECX
JZ 0x000424c8
TEST EDX,EDX
JLE 0x0004250c
MOV EBX,0x1
CMP ECX,0x1
JBE 0x000424f8
LEA ESI,[ESI]
NOP
LEA EBX,[EBX + EBX*0x1 + 0x1]
CMP EBX,ECX
JC 0x000424f0
MOV dword ptr [EAX + ESI*0x1],EBX
SUB EDX,0x1
JZ 0x0004250c
MOV dword ptr [EAX + EDX*0x4],0xffffffff
SUB EDX,0x1
JNZ 0x00042500
ADD ESP,0x4
POP EBX
POP ESI
RET
LEA ESI,[EDX*0x4 + 0x0]
JMP 0x000424dd
(translation_unit "void FUN_000424a0(int param_1)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  \n  piVar1 = (int *)FUN_000411a0(param_1);\n  iVar3 = *piVar1;\n  uVar2 = *(uint *)(param_1 + iVar3 * 4);\n  if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_000424a0(int param_1)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  \n  piVar1 = (int *)FUN_000411a0(param_1);\n  iVar3 = *piVar1;\n  uVar2 = *(uint *)(param_1 + iVar3 * 4);\n  if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_000424a0(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  \n  piVar1 = (int *)FUN_000411a0(param_1);\n  iVar3 = *piVar1;\n  uVar2 = *(uint *)(param_1 + iVar3 * 4);\n  if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "piVar1 = (int *)FUN_000411a0(param_1);" (assignment_expression "piVar1 = (int *)FUN_000411a0(param_1)" identifier = (cast_expression "(int *)FUN_000411a0(param_1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000411a0(param_1)" identifier (argument_list "(param_1)" ( identifier ))))) ;) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "uVar2 = *(uint *)(param_1 + iVar3 * 4);" (assignment_expression "uVar2 = *(uint *)(param_1 + iVar3 * 4)" identifier = (pointer_expression "*(uint *)(param_1 + iVar3 * 4)" * (cast_expression "(uint *)(param_1 + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar3 * 4)" ( (binary_expression "param_1 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }" { (if_statement "if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }" { (do_statement "do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);" do (compound_statement "{\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      }" { (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (expression_statement "uVar2 = *(uint *)(param_1 + iVar3 * 4);" (assignment_expression "uVar2 = *(uint *)(param_1 + iVar3 * 4)" identifier = (pointer_expression "*(uint *)(param_1 + iVar3 * 4)" * (cast_expression "(uint *)(param_1 + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar3 * 4)" ( (binary_expression "param_1 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (uVar2 != 0) goto LAB_000424dd;" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000424dd;" goto statement_identifier ;)) }) while (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) ;) })) }) (else_clause "else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }" else (compound_statement "{\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }" { (labeled_statement "LAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }" statement_identifier : (if_statement "if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }" { (expression_statement "uVar4 = 1;" (assignment_expression "uVar4 = 1" identifier = number_literal) ;) (if_statement "if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }" if (parenthesized_expression "(1 < uVar2)" ( (binary_expression "1 < uVar2" number_literal < identifier) )) (compound_statement "{\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }" { (do_statement "do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);" do (compound_statement "{\n          uVar4 = uVar4 * 2 + 1;\n        }" { (expression_statement "uVar4 = uVar4 * 2 + 1;" (assignment_expression "uVar4 = uVar4 * 2 + 1" identifier = (binary_expression "uVar4 * 2 + 1" (binary_expression "uVar4 * 2" identifier * number_literal) + number_literal)) ;) }) while (parenthesized_expression "(uVar4 < uVar2)" ( (binary_expression "uVar4 < uVar2" identifier < identifier) )) ;) })) (expression_statement "piVar1[iVar3] = uVar4;" (assignment_expression "piVar1[iVar3] = uVar4" (subscript_expression "piVar1[iVar3]" identifier [ identifier ]) = identifier) ;) (while_statement "while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }" while (parenthesized_expression "(iVar3 = iVar3 + -1, iVar3 != 0)" ( (comma_expression "iVar3 = iVar3 + -1, iVar3 != 0" (assignment_expression "iVar3 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) , (binary_expression "iVar3 != 0" identifier != number_literal)) )) (compound_statement "{\n        piVar1[iVar3] = -1;\n      }" { (expression_statement "piVar1[iVar3] = -1;" (assignment_expression "piVar1[iVar3] = -1" (subscript_expression "piVar1[iVar3]" identifier [ identifier ]) = number_literal) ;) })) }))) }))) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Unknown calling convention */\n\nBignum_conflict bignum_bitmask(Bignum_conflict n)\n\n{\n  Bignum_conflict pBVar1;\n  uint uVar2;\n  BignumInt BVar3;\n  uint uVar4;\n  \n  pBVar1 = copybn(n);\n  BVar3 = *pBVar1;\n  uVar2 = n[BVar3];\n  if (uVar2 == 0) {\n    if (0 < (int)BVar3) {\n      do {\n        BVar3 = BVar3 - 1;\n        uVar2 = n[BVar3];\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (BVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < (int)BVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      pBVar1[BVar3] = uVar4;\n      while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }\n    }\n  }\n  return pBVar1;\n}\n\n" comment (function_definition "Bignum_conflict bignum_bitmask(Bignum_conflict n)\n\n{\n  Bignum_conflict pBVar1;\n  uint uVar2;\n  BignumInt BVar3;\n  uint uVar4;\n  \n  pBVar1 = copybn(n);\n  BVar3 = *pBVar1;\n  uVar2 = n[BVar3];\n  if (uVar2 == 0) {\n    if (0 < (int)BVar3) {\n      do {\n        BVar3 = BVar3 - 1;\n        uVar2 = n[BVar3];\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (BVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < (int)BVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      pBVar1[BVar3] = uVar4;\n      while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }\n    }\n  }\n  return pBVar1;\n}" type_identifier (function_declarator "bignum_bitmask(Bignum_conflict n)" identifier (parameter_list "(Bignum_conflict n)" ( (parameter_declaration "Bignum_conflict n" type_identifier identifier) ))) (compound_statement "{\n  Bignum_conflict pBVar1;\n  uint uVar2;\n  BignumInt BVar3;\n  uint uVar4;\n  \n  pBVar1 = copybn(n);\n  BVar3 = *pBVar1;\n  uVar2 = n[BVar3];\n  if (uVar2 == 0) {\n    if (0 < (int)BVar3) {\n      do {\n        BVar3 = BVar3 - 1;\n        uVar2 = n[BVar3];\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (BVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < (int)BVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      pBVar1[BVar3] = uVar4;\n      while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }\n    }\n  }\n  return pBVar1;\n}" { (declaration "Bignum_conflict pBVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "BignumInt BVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "pBVar1 = copybn(n);" (assignment_expression "pBVar1 = copybn(n)" identifier = (call_expression "copybn(n)" identifier (argument_list "(n)" ( identifier )))) ;) (expression_statement "BVar3 = *pBVar1;" (assignment_expression "BVar3 = *pBVar1" identifier = (pointer_expression "*pBVar1" * identifier)) ;) (expression_statement "uVar2 = n[BVar3];" (assignment_expression "uVar2 = n[BVar3]" identifier = (subscript_expression "n[BVar3]" identifier [ identifier ])) ;) (if_statement "if (uVar2 == 0) {\n    if (0 < (int)BVar3) {\n      do {\n        BVar3 = BVar3 - 1;\n        uVar2 = n[BVar3];\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (BVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < (int)BVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      pBVar1[BVar3] = uVar4;\n      while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }\n    }\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    if (0 < (int)BVar3) {\n      do {\n        BVar3 = BVar3 - 1;\n        uVar2 = n[BVar3];\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (BVar3 != 0);\n    }\n  }" { (if_statement "if (0 < (int)BVar3) {\n      do {\n        BVar3 = BVar3 - 1;\n        uVar2 = n[BVar3];\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (BVar3 != 0);\n    }" if (parenthesized_expression "(0 < (int)BVar3)" ( (binary_expression "0 < (int)BVar3" number_literal < (cast_expression "(int)BVar3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      do {\n        BVar3 = BVar3 - 1;\n        uVar2 = n[BVar3];\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (BVar3 != 0);\n    }" { (do_statement "do {\n        BVar3 = BVar3 - 1;\n        uVar2 = n[BVar3];\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (BVar3 != 0);" do (compound_statement "{\n        BVar3 = BVar3 - 1;\n        uVar2 = n[BVar3];\n        if (uVar2 != 0) goto LAB_000424dd;\n      }" { (expression_statement "BVar3 = BVar3 - 1;" (assignment_expression "BVar3 = BVar3 - 1" identifier = (binary_expression "BVar3 - 1" identifier - number_literal)) ;) (expression_statement "uVar2 = n[BVar3];" (assignment_expression "uVar2 = n[BVar3]" identifier = (subscript_expression "n[BVar3]" identifier [ identifier ])) ;) (if_statement "if (uVar2 != 0) goto LAB_000424dd;" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000424dd;" goto statement_identifier ;)) }) while (parenthesized_expression "(BVar3 != 0)" ( (binary_expression "BVar3 != 0" identifier != number_literal) )) ;) })) }) (else_clause "else {\nLAB_000424dd:\n    if (0 < (int)BVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      pBVar1[BVar3] = uVar4;\n      while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }\n    }\n  }" else (compound_statement "{\nLAB_000424dd:\n    if (0 < (int)BVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      pBVar1[BVar3] = uVar4;\n      while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }\n    }\n  }" { (labeled_statement "LAB_000424dd:\n    if (0 < (int)BVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      pBVar1[BVar3] = uVar4;\n      while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }\n    }" statement_identifier : (if_statement "if (0 < (int)BVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      pBVar1[BVar3] = uVar4;\n      while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }\n    }" if (parenthesized_expression "(0 < (int)BVar3)" ( (binary_expression "0 < (int)BVar3" number_literal < (cast_expression "(int)BVar3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      pBVar1[BVar3] = uVar4;\n      while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }\n    }" { (expression_statement "uVar4 = 1;" (assignment_expression "uVar4 = 1" identifier = number_literal) ;) (if_statement "if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }" if (parenthesized_expression "(1 < uVar2)" ( (binary_expression "1 < uVar2" number_literal < identifier) )) (compound_statement "{\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }" { (do_statement "do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);" do (compound_statement "{\n          uVar4 = uVar4 * 2 + 1;\n        }" { (expression_statement "uVar4 = uVar4 * 2 + 1;" (assignment_expression "uVar4 = uVar4 * 2 + 1" identifier = (binary_expression "uVar4 * 2 + 1" (binary_expression "uVar4 * 2" identifier * number_literal) + number_literal)) ;) }) while (parenthesized_expression "(uVar4 < uVar2)" ( (binary_expression "uVar4 < uVar2" identifier < identifier) )) ;) })) (expression_statement "pBVar1[BVar3] = uVar4;" (assignment_expression "pBVar1[BVar3] = uVar4" (subscript_expression "pBVar1[BVar3]" identifier [ identifier ]) = identifier) ;) (while_statement "while (BVar3 = BVar3 - 1, BVar3 != 0) {\n        pBVar1[BVar3] = 0xffffffff;\n      }" while (parenthesized_expression "(BVar3 = BVar3 - 1, BVar3 != 0)" ( (comma_expression "BVar3 = BVar3 - 1, BVar3 != 0" (assignment_expression "BVar3 = BVar3 - 1" identifier = (binary_expression "BVar3 - 1" identifier - number_literal)) , (binary_expression "BVar3 != 0" identifier != number_literal)) )) (compound_statement "{\n        pBVar1[BVar3] = 0xffffffff;\n      }" { (expression_statement "pBVar1[BVar3] = 0xffffffff;" (assignment_expression "pBVar1[BVar3] = 0xffffffff" (subscript_expression "pBVar1[BVar3]" identifier [ identifier ]) = number_literal) ;) })) }))) }))) (return_statement "return pBVar1;" return identifier ;) })))
(translation_unit "void FUN_000424a0(int param_1)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  \n  piVar1 = (int *)FUN_000411a0(param_1);\n  iVar3 = *piVar1;\n  uVar2 = *(uint *)(param_1 + iVar3 * 4);\n  if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_000424a0(int param_1)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  \n  piVar1 = (int *)FUN_000411a0(param_1);\n  iVar3 = *piVar1;\n  uVar2 = *(uint *)(param_1 + iVar3 * 4);\n  if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_000424a0(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  \n  piVar1 = (int *)FUN_000411a0(param_1);\n  iVar3 = *piVar1;\n  uVar2 = *(uint *)(param_1 + iVar3 * 4);\n  if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }\n  return;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (expression_statement "piVar1 = (int *)FUN_000411a0(param_1);" (assignment_expression "piVar1 = (int *)FUN_000411a0(param_1)" identifier = (cast_expression "(int *)FUN_000411a0(param_1)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000411a0(param_1)" identifier (argument_list "(param_1)" ( identifier ))))) ;) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" identifier = (pointer_expression "*piVar1" * identifier)) ;) (expression_statement "uVar2 = *(uint *)(param_1 + iVar3 * 4);" (assignment_expression "uVar2 = *(uint *)(param_1 + iVar3 * 4)" identifier = (pointer_expression "*(uint *)(param_1 + iVar3 * 4)" * (cast_expression "(uint *)(param_1 + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar3 * 4)" ( (binary_expression "param_1 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }" { (if_statement "if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }" { (do_statement "do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);" do (compound_statement "{\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      }" { (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) ;) (expression_statement "uVar2 = *(uint *)(param_1 + iVar3 * 4);" (assignment_expression "uVar2 = *(uint *)(param_1 + iVar3 * 4)" identifier = (pointer_expression "*(uint *)(param_1 + iVar3 * 4)" * (cast_expression "(uint *)(param_1 + iVar3 * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + iVar3 * 4)" ( (binary_expression "param_1 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (if_statement "if (uVar2 != 0) goto LAB_000424dd;" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_000424dd;" goto statement_identifier ;)) }) while (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) ;) })) }) (else_clause "else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }" else (compound_statement "{\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }" { (labeled_statement "LAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }" statement_identifier : (if_statement "if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }" { (expression_statement "uVar4 = 1;" (assignment_expression "uVar4 = 1" identifier = number_literal) ;) (if_statement "if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }" if (parenthesized_expression "(1 < uVar2)" ( (binary_expression "1 < uVar2" number_literal < identifier) )) (compound_statement "{\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }" { (do_statement "do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);" do (compound_statement "{\n          uVar4 = uVar4 * 2 + 1;\n        }" { (expression_statement "uVar4 = uVar4 * 2 + 1;" (assignment_expression "uVar4 = uVar4 * 2 + 1" identifier = (binary_expression "uVar4 * 2 + 1" (binary_expression "uVar4 * 2" identifier * number_literal) + number_literal)) ;) }) while (parenthesized_expression "(uVar4 < uVar2)" ( (binary_expression "uVar4 < uVar2" identifier < identifier) )) ;) })) (expression_statement "piVar1[iVar3] = uVar4;" (assignment_expression "piVar1[iVar3] = uVar4" (subscript_expression "piVar1[iVar3]" identifier [ identifier ]) = identifier) ;) (while_statement "while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }" while (parenthesized_expression "(iVar3 = iVar3 + -1, iVar3 != 0)" ( (comma_expression "iVar3 = iVar3 + -1, iVar3 != 0" (assignment_expression "iVar3 = iVar3 + -1" identifier = (binary_expression "iVar3 + -1" identifier + number_literal)) , (binary_expression "iVar3 != 0" identifier != number_literal)) )) (compound_statement "{\n        piVar1[iVar3] = -1;\n      }" { (expression_statement "piVar1[iVar3] = -1;" (assignment_expression "piVar1[iVar3] = -1" (subscript_expression "piVar1[iVar3]" identifier [ identifier ]) = number_literal) ;) })) }))) }))) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) })) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT * LIT) + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = IDENT) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = LIT) ;) })) }))) }))) (return_statement return ;) })))
(function_definition "void FUN_000424a0(int param_1)\n\n{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  \n  piVar1 = (int *)FUN_000411a0(param_1);\n  iVar3 = *piVar1;\n  uVar2 = *(uint *)(param_1 + iVar3 * 4);\n  if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_000424a0(int param_1)" (identifier "FUN_000424a0") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  int *piVar1;\n  uint uVar2;\n  int iVar3;\n  uint uVar4;\n  \n  piVar1 = (int *)FUN_000411a0(param_1);\n  iVar3 = *piVar1;\n  uVar2 = *(uint *)(param_1 + iVar3 * 4);\n  if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }\n  return;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (expression_statement "piVar1 = (int *)FUN_000411a0(param_1);" (assignment_expression "piVar1 = (int *)FUN_000411a0(param_1)" (identifier "piVar1") (= "=") (cast_expression "(int *)FUN_000411a0(param_1)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000411a0(param_1)" (identifier "FUN_000411a0") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))))) (; ";")) (expression_statement "iVar3 = *piVar1;" (assignment_expression "iVar3 = *piVar1" (identifier "iVar3") (= "=") (pointer_expression "*piVar1" (* "*") (identifier "piVar1"))) (; ";")) (expression_statement "uVar2 = *(uint *)(param_1 + iVar3 * 4);" (assignment_expression "uVar2 = *(uint *)(param_1 + iVar3 * 4)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(param_1 + iVar3 * 4)" (* "*") (cast_expression "(uint *)(param_1 + iVar3 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + iVar3 * 4)" (( "(") (binary_expression "param_1 + iVar3 * 4" (identifier "param_1") (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (uVar2 == 0) {\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }\n  else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }\n  }" ({ "{") (if_statement "if (0 < iVar3) {\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }" (if "if") (parenthesized_expression "(0 < iVar3)" (( "(") (binary_expression "0 < iVar3" (number_literal "0") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n      do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);\n    }" ({ "{") (do_statement "do {\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      } while (iVar3 != 0);" (do "do") (compound_statement "{\n        iVar3 = iVar3 + -1;\n        uVar2 = *(uint *)(param_1 + iVar3 * 4);\n        if (uVar2 != 0) goto LAB_000424dd;\n      }" ({ "{") (expression_statement "iVar3 = iVar3 + -1;" (assignment_expression "iVar3 = iVar3 + -1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar2 = *(uint *)(param_1 + iVar3 * 4);" (assignment_expression "uVar2 = *(uint *)(param_1 + iVar3 * 4)" (identifier "uVar2") (= "=") (pointer_expression "*(uint *)(param_1 + iVar3 * 4)" (* "*") (cast_expression "(uint *)(param_1 + iVar3 * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + iVar3 * 4)" (( "(") (binary_expression "param_1 + iVar3 * 4" (identifier "param_1") (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (if_statement "if (uVar2 != 0) goto LAB_000424dd;" (if "if") (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_000424dd;" (goto "goto") (statement_identifier "LAB_000424dd") (; ";"))) (} "}")) (while "while") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }" (else "else") (compound_statement "{\nLAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }\n  }" ({ "{") (labeled_statement "LAB_000424dd:\n    if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }" (statement_identifier "LAB_000424dd") (: ":") (if_statement "if (0 < iVar3) {\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }" (if "if") (parenthesized_expression "(0 < iVar3)" (( "(") (binary_expression "0 < iVar3" (number_literal "0") (< "<") (identifier "iVar3")) () ")")) (compound_statement "{\n      uVar4 = 1;\n      if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }\n      piVar1[iVar3] = uVar4;\n      while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }\n    }" ({ "{") (expression_statement "uVar4 = 1;" (assignment_expression "uVar4 = 1" (identifier "uVar4") (= "=") (number_literal "1")) (; ";")) (if_statement "if (1 < uVar2) {\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }" (if "if") (parenthesized_expression "(1 < uVar2)" (( "(") (binary_expression "1 < uVar2" (number_literal "1") (< "<") (identifier "uVar2")) () ")")) (compound_statement "{\n        do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);\n      }" ({ "{") (do_statement "do {\n          uVar4 = uVar4 * 2 + 1;\n        } while (uVar4 < uVar2);" (do "do") (compound_statement "{\n          uVar4 = uVar4 * 2 + 1;\n        }" ({ "{") (expression_statement "uVar4 = uVar4 * 2 + 1;" (assignment_expression "uVar4 = uVar4 * 2 + 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 * 2 + 1" (binary_expression "uVar4 * 2" (identifier "uVar4") (* "*") (number_literal "2")) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar4 < uVar2)" (( "(") (binary_expression "uVar4 < uVar2" (identifier "uVar4") (< "<") (identifier "uVar2")) () ")")) (; ";")) (} "}"))) (expression_statement "piVar1[iVar3] = uVar4;" (assignment_expression "piVar1[iVar3] = uVar4" (subscript_expression "piVar1[iVar3]" (identifier "piVar1") ([ "[") (identifier "iVar3") (] "]")) (= "=") (identifier "uVar4")) (; ";")) (while_statement "while (iVar3 = iVar3 + -1, iVar3 != 0) {\n        piVar1[iVar3] = -1;\n      }" (while "while") (parenthesized_expression "(iVar3 = iVar3 + -1, iVar3 != 0)" (( "(") (comma_expression "iVar3 = iVar3 + -1, iVar3 != 0" (assignment_expression "iVar3 = iVar3 + -1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + -1" (identifier "iVar3") (+ "+") (number_literal "-1"))) (, ",") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n        piVar1[iVar3] = -1;\n      }" ({ "{") (expression_statement "piVar1[iVar3] = -1;" (assignment_expression "piVar1[iVar3] = -1" (subscript_expression "piVar1[iVar3]" (identifier "piVar1") ([ "[") (identifier "iVar3") (] "]")) (= "=") (number_literal "-1")) (; ";")) (} "}"))) (} "}")))) (} "}")))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Unknown calling convention */

type_1 function_1(type_1 n)

{
  type_1 pBVar1;
  type_2 var_2;
  type_3 var_3;
  type_2 var_4;
  
  pBVar1 = var_1(n);
  var_3 = *pBVar1;
  var_2 = n[var_3];
  if (var_2 == 0) {
    if (0 < (int)var_3) {
      do {
        var_3 = var_3 - 1;
        var_2 = n[var_3];
        if (var_2 != 0) goto LAB_000424dd;
      } while (var_3 != 0);
    }
  }
  else {
LAB_000424dd:
    if (0 < (int)var_3) {
      var_4 = 1;
      if (1 < var_2) {
        do {
          var_4 = var_4 * 2 + 1;
        } while (var_4 < var_2);
      }
      pBVar1[var_3] = var_4;
      while (var_3 = var_3 - 1, var_3 != 0) {
        pBVar1[var_3] = 0xffffffff;
      }
    }
  }
  return pBVar1;
}


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

void MASKED(int param_1)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  
  piVar1 = (int *)FUN_000411a0(param_1);
  iVar3 = *piVar1;
  uVar2 = *(uint *)(param_1 + iVar3 * 4);
  if (uVar2 == 0) {
    if (0 < iVar3) {
      do {
        iVar3 = iVar3 + -1;
        uVar2 = *(uint *)(param_1 + iVar3 * 4);
        if (uVar2 != 0) goto LAB_000424dd;
      } while (iVar3 != 0);
    }
  }
  else {
LAB_000424dd:
    if (0 < iVar3) {
      uVar4 = 1;
      if (1 < uVar2) {
        do {
          uVar4 = uVar4 * 2 + 1;
        } while (uVar4 < uVar2);
      }
      piVar1[iVar3] = uVar4;
      while (iVar3 = iVar3 + -1, iVar3 != 0) {
        piVar1[iVar3] = -1;
      }
    }
  }
  return;
}

