
reg_errcode_t register_state(re_dfa_t *dfa,re_dfastate_t *newstate,re_hashval_t hash)

{
  undefined *puVar1;
  undefined3 extraout_var;
  Idx *pIVar2;
  _Bool _Var3;
  re_dfastate_t **pprVar4;
  Idx IVar5;
  int iVar6;
  re_state_table_entry *prVar7;
  int iVar8;
  
  puVar1 = PTR_malloc_00078034;
  newstate->hash = hash;
  (newstate->non_eps_nodes).nelem = 0;
  iVar8 = (newstate->nodes).nelem;
  (newstate->non_eps_nodes).alloc = iVar8;
  pIVar2 = (Idx *)(*(code *)puVar1)(iVar8 << 2);
  (newstate->non_eps_nodes).elems = pIVar2;
  if (pIVar2 == (Idx *)0x0) {
    return _REG_ESPACE;
  }
  iVar6 = 0;
  if (0 < iVar8) {
    do {
      IVar5 = (newstate->nodes).elems[iVar6];
      iVar6 = iVar6 + 1;
      if (((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&
         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),
         CONCAT31(extraout_var,_Var3) == 0)) {
        return _REG_ESPACE;
      }
    } while (iVar6 < (newstate->nodes).nelem);
  }
  prVar7 = dfa->state_table + (hash & dfa->state_hash_mask);
  iVar8 = prVar7->num;
  pprVar4 = prVar7->array;
  IVar5 = iVar8 + 1;
  if (prVar7->alloc <= iVar8) {
    pprVar4 = (re_dfastate_t **)(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8);
    if (pprVar4 == (re_dfastate_t **)0x0) {
      return _REG_ESPACE;
    }
    iVar8 = prVar7->num;
    prVar7->array = pprVar4;
    prVar7->alloc = IVar5 * 2;
    IVar5 = iVar8 + 1;
  }
  prVar7->num = IVar5;
  pprVar4[iVar8] = newstate;
  return _REG_NOERROR;
}



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

{
  undefined *puVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int *piVar6;
  uint uVar7;
  
  puVar1 = PTR_malloc_00078034;
  *param_2 = param_3;
  param_2[5] = 0;
  uVar7 = param_2[2];
  param_2[4] = uVar7;
  uVar2 = (*(code *)puVar1)(uVar7 << 2);
  param_2[6] = uVar2;
  if (uVar2 == 0) {
    return 0xc;
  }
  iVar5 = 0;
  if (0 < (int)uVar7) {
    do {
      iVar3 = iVar5 * 4;
      iVar5 = iVar5 + 1;
      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&
         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {
        return 0xc;
      }
    } while (iVar5 < (int)param_2[2]);
  }
  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);
  iVar3 = *piVar6;
  iVar5 = piVar6[2];
  iVar4 = iVar3 + 1;
  if (piVar6[1] <= iVar3) {
    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);
    if (iVar5 == 0) {
      return 0xc;
    }
    iVar3 = *piVar6;
    piVar6[2] = iVar5;
    piVar6[1] = iVar4 * 2;
    iVar4 = iVar3 + 1;
  }
  *piVar6 = iVar4;
  *(uint **)(iVar5 + iVar3 * 4) = param_2;
  return 0;
}


lui gp,0x3
addiu gp,gp,0x2ac8
addu gp,gp,t9
addiu sp,sp,-0x38
lw t9,-0x74ec(gp)
sw s1,0x20(sp)
sw gp,0x10(sp)
sw s5,0x30(sp)
or s5,a0,zero
sw s4,0x2c(sp)
or s4,a1,zero
sw s3,0x28(sp)
or s3,a2,zero
sw s2,0x24(sp)
addiu s2,a1,0x10
sw ra,0x34(sp)
sw s0,0x1c(sp)
sw a2,0x0(a1)
sw zero,0x14(a1)
lw s1,0x8(a1)
sll a0,s1,0x2
jalr t9
_sw s1,0x10(a1)
lw gp,0x10(sp)
beq v0,zero,0x0004cb24
_sw v0,0x18(s4)
blez s1,0x0004cb4c
_or s0,zero,zero
lw s1,-0x76dc(gp)
b 0x0004cae4
_addiu s1,s1,-0x3a40
lw v0,0x8(s4)
slt v0,s0,v0
beq v0,zero,0x0004cb4c
_nop
lw a0,0xc(s4)
sll v1,s0,0x2
lw v0,0x0(s5)
addu v1,a0,v1
lw a1,0x0(v1)
sll v1,a1,0x3
addu v0,v0,v1
lbu v0,0x4(v0)
andi v0,v0,0x8
bne v0,zero,0x0004cad4
_addiu s0,s0,0x1
or t9,s1,zero
bal 0x0004c5c0
_or a0,s2,zero
bne v0,zero,0x0004cad4
_lw gp,0x10(sp)
lw ra,0x34(sp)
li v0,0xc
lw s5,0x30(sp)
lw s4,0x2c(sp)
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
lw s0,0x1c(sp)
jr ra
_addiu sp,sp,0x38
lw v0,0x44(s5)
lw s0,0x20(s5)
and s3,s3,v0
sll v0,s3,0x1
addu v0,v0,s3
sll v0,v0,0x2
addu s0,s0,v0
lw v1,0x0(s0)
lw v0,0x4(s0)
lw a0,0x8(s0)
slt v0,v1,v0
beq v0,zero,0x0004cbb8
_addiu a2,v1,0x1
sll v1,v1,0x2
lw ra,0x34(sp)
lw s5,0x30(sp)
or v0,zero,zero
addu v1,a0,v1
lw s3,0x28(sp)
lw s2,0x24(sp)
lw s1,0x20(sp)
sw a2,0x0(s0)
sw s4,0x0(v1)
lw s0,0x1c(sp)
lw s4,0x2c(sp)
jr ra
_addiu sp,sp,0x38
lw t9,-0x74e8(gp)
sll a1,a2,0x3
jalr t9
_sll s1,a2,0x1
beq v0,zero,0x0004cb24
_or a0,v0,zero
lw v1,0x0(s0)
sw v0,0x8(s0)
sw s1,0x4(s0)
b 0x0004cb80
_addiu a2,v1,0x1
(translation_unit "undefined4 FUN_0004ca58(int *param_1,uint *param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  uint uVar7;\n  \n  puVar1 = PTR_malloc_00078034;\n  *param_2 = param_3;\n  param_2[5] = 0;\n  uVar7 = param_2[2];\n  param_2[4] = uVar7;\n  uVar2 = (*(code *)puVar1)(uVar7 << 2);\n  param_2[6] = uVar2;\n  if (uVar2 == 0) {\n    return 0xc;\n  }\n  iVar5 = 0;\n  if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }\n  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);\n  iVar3 = *piVar6;\n  iVar5 = piVar6[2];\n  iVar4 = iVar3 + 1;\n  if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }\n  *piVar6 = iVar4;\n  *(uint **)(iVar5 + iVar3 * 4) = param_2;\n  return 0;\n}\n\n" (function_definition "undefined4 FUN_0004ca58(int *param_1,uint *param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  uint uVar7;\n  \n  puVar1 = PTR_malloc_00078034;\n  *param_2 = param_3;\n  param_2[5] = 0;\n  uVar7 = param_2[2];\n  param_2[4] = uVar7;\n  uVar2 = (*(code *)puVar1)(uVar7 << 2);\n  param_2[6] = uVar2;\n  if (uVar2 == 0) {\n    return 0xc;\n  }\n  iVar5 = 0;\n  if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }\n  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);\n  iVar3 = *piVar6;\n  iVar5 = piVar6[2];\n  iVar4 = iVar3 + 1;\n  if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }\n  *piVar6 = iVar4;\n  *(uint **)(iVar5 + iVar3 * 4) = param_2;\n  return 0;\n}" type_identifier (function_declarator "FUN_0004ca58(int *param_1,uint *param_2,uint param_3)" identifier (parameter_list "(int *param_1,uint *param_2,uint param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  uint uVar7;\n  \n  puVar1 = PTR_malloc_00078034;\n  *param_2 = param_3;\n  param_2[5] = 0;\n  uVar7 = param_2[2];\n  param_2[4] = uVar7;\n  uVar2 = (*(code *)puVar1)(uVar7 << 2);\n  param_2[6] = uVar2;\n  if (uVar2 == 0) {\n    return 0xc;\n  }\n  iVar5 = 0;\n  if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }\n  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);\n  iVar3 = *piVar6;\n  iVar5 = piVar6[2];\n  iVar4 = iVar3 + 1;\n  if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }\n  *piVar6 = iVar4;\n  *(uint **)(iVar5 + iVar3 * 4) = param_2;\n  return 0;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (expression_statement "puVar1 = PTR_malloc_00078034;" (assignment_expression "puVar1 = PTR_malloc_00078034" identifier = identifier) ;) (expression_statement "*param_2 = param_3;" (assignment_expression "*param_2 = param_3" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "param_2[5] = 0;" (assignment_expression "param_2[5] = 0" (subscript_expression "param_2[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "uVar7 = param_2[2];" (assignment_expression "uVar7 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (expression_statement "param_2[4] = uVar7;" (assignment_expression "param_2[4] = uVar7" (subscript_expression "param_2[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = (*(code *)puVar1)(uVar7 << 2);" (assignment_expression "uVar2 = (*(code *)puVar1)(uVar7 << 2)" identifier = (call_expression "(*(code *)puVar1)(uVar7 << 2)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar7 << 2)" ( (binary_expression "uVar7 << 2" identifier << number_literal) )))) ;) (expression_statement "param_2[6] = uVar2;" (assignment_expression "param_2[6] = uVar2" (subscript_expression "param_2[6]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar2 == 0) {\n    return 0xc;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0xc;\n  }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (if_statement "if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }" { (do_statement "do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);" do (compound_statement "{\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    }" { (expression_statement "iVar3 = iVar5 * 4;" (assignment_expression "iVar3 = iVar5 * 4" identifier = (binary_expression "iVar5 * 4" identifier * number_literal)) ;) (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (if_statement "if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }" if (parenthesized_expression "(((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0))" ( (binary_expression "((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)" (parenthesized_expression "((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0)" ( (binary_expression "(*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0" (parenthesized_expression "(*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8)" ( (binary_expression "*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8" (pointer_expression "*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4)" * (cast_expression "(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4)" ( (binary_expression "*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4" (binary_expression "*param_1 + *(int *)(param_2[3] + iVar3) * 8" (pointer_expression "*param_1" * identifier) + (binary_expression "*(int *)(param_2[3] + iVar3) * 8" (pointer_expression "*(int *)(param_2[3] + iVar3)" * (cast_expression "(int *)(param_2[3] + iVar3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2[3] + iVar3)" ( (binary_expression "param_2[3] + iVar3" (subscript_expression "param_2[3]" identifier [ number_literal ]) + identifier) )))) * number_literal)) + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "(iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)" ( (comma_expression "iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0" (assignment_expression "iVar3 = FUN_0004c5c0(param_2 + 4)" identifier = (call_expression "FUN_0004c5c0(param_2 + 4)" identifier (argument_list "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) }) while (parenthesized_expression "(iVar5 < (int)param_2[2])" ( (binary_expression "iVar5 < (int)param_2[2]" identifier < (cast_expression "(int)param_2[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[2]" identifier [ number_literal ]))) )) ;) })) (expression_statement "piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);" (assignment_expression "piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc)" identifier = (cast_expression "(int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[8] + (param_3 & param_1[0x11]) * 0xc)" ( (binary_expression "param_1[8] + (param_3 & param_1[0x11]) * 0xc" (subscript_expression "param_1[8]" identifier [ number_literal ]) + (binary_expression "(param_3 & param_1[0x11]) * 0xc" (parenthesized_expression "(param_3 & param_1[0x11])" ( (binary_expression "param_3 & param_1[0x11]" identifier & (subscript_expression "param_1[0x11]" identifier [ number_literal ])) )) * number_literal)) )))) ;) (expression_statement "iVar3 = *piVar6;" (assignment_expression "iVar3 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (expression_statement "iVar5 = piVar6[2];" (assignment_expression "iVar5 = piVar6[2]" identifier = (subscript_expression "piVar6[2]" identifier [ number_literal ])) ;) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }" if (parenthesized_expression "(piVar6[1] <= iVar3)" ( (binary_expression "piVar6[1] <= iVar3" (subscript_expression "piVar6[1]" identifier [ number_literal ]) <= identifier) )) (compound_statement "{\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }" { (expression_statement "iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);" (assignment_expression "iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8)" identifier = (call_expression "(*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8)" (parenthesized_expression "(*(code *)PTR_realloc_00078038)" ( (pointer_expression "*(code *)PTR_realloc_00078038" * (cast_expression "(code *)PTR_realloc_00078038" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar5,iVar4 * 8)" ( identifier , (binary_expression "iVar4 * 8" identifier * number_literal) )))) ;) (if_statement "if (iVar5 == 0) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar3 = *piVar6;" (assignment_expression "iVar3 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (expression_statement "piVar6[2] = iVar5;" (assignment_expression "piVar6[2] = iVar5" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar6[1] = iVar4 * 2;" (assignment_expression "piVar6[1] = iVar4 * 2" (subscript_expression "piVar6[1]" identifier [ number_literal ]) = (binary_expression "iVar4 * 2" identifier * number_literal)) ;) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) })) (expression_statement "*piVar6 = iVar4;" (assignment_expression "*piVar6 = iVar4" (pointer_expression "*piVar6" * identifier) = identifier) ;) (expression_statement "*(uint **)(iVar5 + iVar3 * 4) = param_2;" (assignment_expression "*(uint **)(iVar5 + iVar3 * 4) = param_2" (pointer_expression "*(uint **)(iVar5 + iVar3 * 4)" * (cast_expression "(uint **)(iVar5 + iVar3 * 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar5 + iVar3 * 4)" ( (binary_expression "iVar5 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) )))) = identifier) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "reg_errcode_t register_state(re_dfa_t *dfa,re_dfastate_t *newstate,re_hashval_t hash)\n\n{\n  undefined *puVar1;\n  undefined3 extraout_var;\n  Idx *pIVar2;\n  _Bool _Var3;\n  re_dfastate_t **pprVar4;\n  Idx IVar5;\n  int iVar6;\n  re_state_table_entry *prVar7;\n  int iVar8;\n  \n  puVar1 = PTR_malloc_00078034;\n  newstate->hash = hash;\n  (newstate->non_eps_nodes).nelem = 0;\n  iVar8 = (newstate->nodes).nelem;\n  (newstate->non_eps_nodes).alloc = iVar8;\n  pIVar2 = (Idx *)(*(code *)puVar1)(iVar8 << 2);\n  (newstate->non_eps_nodes).elems = pIVar2;\n  if (pIVar2 == (Idx *)0x0) {\n    return _REG_ESPACE;\n  }\n  iVar6 = 0;\n  if (0 < iVar8) {\n    do {\n      IVar5 = (newstate->nodes).elems[iVar6];\n      iVar6 = iVar6 + 1;\n      if (((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)) {\n        return _REG_ESPACE;\n      }\n    } while (iVar6 < (newstate->nodes).nelem);\n  }\n  prVar7 = dfa->state_table + (hash & dfa->state_hash_mask);\n  iVar8 = prVar7->num;\n  pprVar4 = prVar7->array;\n  IVar5 = iVar8 + 1;\n  if (prVar7->alloc <= iVar8) {\n    pprVar4 = (re_dfastate_t **)(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8);\n    if (pprVar4 == (re_dfastate_t **)0x0) {\n      return _REG_ESPACE;\n    }\n    iVar8 = prVar7->num;\n    prVar7->array = pprVar4;\n    prVar7->alloc = IVar5 * 2;\n    IVar5 = iVar8 + 1;\n  }\n  prVar7->num = IVar5;\n  pprVar4[iVar8] = newstate;\n  return _REG_NOERROR;\n}\n\n" (function_definition "reg_errcode_t register_state(re_dfa_t *dfa,re_dfastate_t *newstate,re_hashval_t hash)\n\n{\n  undefined *puVar1;\n  undefined3 extraout_var;\n  Idx *pIVar2;\n  _Bool _Var3;\n  re_dfastate_t **pprVar4;\n  Idx IVar5;\n  int iVar6;\n  re_state_table_entry *prVar7;\n  int iVar8;\n  \n  puVar1 = PTR_malloc_00078034;\n  newstate->hash = hash;\n  (newstate->non_eps_nodes).nelem = 0;\n  iVar8 = (newstate->nodes).nelem;\n  (newstate->non_eps_nodes).alloc = iVar8;\n  pIVar2 = (Idx *)(*(code *)puVar1)(iVar8 << 2);\n  (newstate->non_eps_nodes).elems = pIVar2;\n  if (pIVar2 == (Idx *)0x0) {\n    return _REG_ESPACE;\n  }\n  iVar6 = 0;\n  if (0 < iVar8) {\n    do {\n      IVar5 = (newstate->nodes).elems[iVar6];\n      iVar6 = iVar6 + 1;\n      if (((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)) {\n        return _REG_ESPACE;\n      }\n    } while (iVar6 < (newstate->nodes).nelem);\n  }\n  prVar7 = dfa->state_table + (hash & dfa->state_hash_mask);\n  iVar8 = prVar7->num;\n  pprVar4 = prVar7->array;\n  IVar5 = iVar8 + 1;\n  if (prVar7->alloc <= iVar8) {\n    pprVar4 = (re_dfastate_t **)(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8);\n    if (pprVar4 == (re_dfastate_t **)0x0) {\n      return _REG_ESPACE;\n    }\n    iVar8 = prVar7->num;\n    prVar7->array = pprVar4;\n    prVar7->alloc = IVar5 * 2;\n    IVar5 = iVar8 + 1;\n  }\n  prVar7->num = IVar5;\n  pprVar4[iVar8] = newstate;\n  return _REG_NOERROR;\n}" type_identifier (function_declarator "register_state(re_dfa_t *dfa,re_dfastate_t *newstate,re_hashval_t hash)" identifier (parameter_list "(re_dfa_t *dfa,re_dfastate_t *newstate,re_hashval_t hash)" ( (parameter_declaration "re_dfa_t *dfa" type_identifier (pointer_declarator "*dfa" * identifier)) , (parameter_declaration "re_dfastate_t *newstate" type_identifier (pointer_declarator "*newstate" * identifier)) , (parameter_declaration "re_hashval_t hash" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  undefined3 extraout_var;\n  Idx *pIVar2;\n  _Bool _Var3;\n  re_dfastate_t **pprVar4;\n  Idx IVar5;\n  int iVar6;\n  re_state_table_entry *prVar7;\n  int iVar8;\n  \n  puVar1 = PTR_malloc_00078034;\n  newstate->hash = hash;\n  (newstate->non_eps_nodes).nelem = 0;\n  iVar8 = (newstate->nodes).nelem;\n  (newstate->non_eps_nodes).alloc = iVar8;\n  pIVar2 = (Idx *)(*(code *)puVar1)(iVar8 << 2);\n  (newstate->non_eps_nodes).elems = pIVar2;\n  if (pIVar2 == (Idx *)0x0) {\n    return _REG_ESPACE;\n  }\n  iVar6 = 0;\n  if (0 < iVar8) {\n    do {\n      IVar5 = (newstate->nodes).elems[iVar6];\n      iVar6 = iVar6 + 1;\n      if (((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)) {\n        return _REG_ESPACE;\n      }\n    } while (iVar6 < (newstate->nodes).nelem);\n  }\n  prVar7 = dfa->state_table + (hash & dfa->state_hash_mask);\n  iVar8 = prVar7->num;\n  pprVar4 = prVar7->array;\n  IVar5 = iVar8 + 1;\n  if (prVar7->alloc <= iVar8) {\n    pprVar4 = (re_dfastate_t **)(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8);\n    if (pprVar4 == (re_dfastate_t **)0x0) {\n      return _REG_ESPACE;\n    }\n    iVar8 = prVar7->num;\n    prVar7->array = pprVar4;\n    prVar7->alloc = IVar5 * 2;\n    IVar5 = iVar8 + 1;\n  }\n  prVar7->num = IVar5;\n  pprVar4[iVar8] = newstate;\n  return _REG_NOERROR;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "undefined3 extraout_var;" type_identifier identifier ;) (declaration "Idx *pIVar2;" type_identifier (pointer_declarator "*pIVar2" * identifier) ;) (declaration "_Bool _Var3;" type_identifier identifier ;) (declaration "re_dfastate_t **pprVar4;" type_identifier (pointer_declarator "**pprVar4" * (pointer_declarator "*pprVar4" * identifier)) ;) (declaration "Idx IVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "re_state_table_entry *prVar7;" type_identifier (pointer_declarator "*prVar7" * identifier) ;) (declaration "int iVar8;" primitive_type identifier ;) (expression_statement "puVar1 = PTR_malloc_00078034;" (assignment_expression "puVar1 = PTR_malloc_00078034" identifier = identifier) ;) (expression_statement "newstate->hash = hash;" (assignment_expression "newstate->hash = hash" (field_expression "newstate->hash" identifier -> field_identifier) = identifier) ;) (expression_statement "(newstate->non_eps_nodes).nelem = 0;" (assignment_expression "(newstate->non_eps_nodes).nelem = 0" (field_expression "(newstate->non_eps_nodes).nelem" (parenthesized_expression "(newstate->non_eps_nodes)" ( (field_expression "newstate->non_eps_nodes" identifier -> field_identifier) )) . field_identifier) = number_literal) ;) (expression_statement "iVar8 = (newstate->nodes).nelem;" (assignment_expression "iVar8 = (newstate->nodes).nelem" identifier = (field_expression "(newstate->nodes).nelem" (parenthesized_expression "(newstate->nodes)" ( (field_expression "newstate->nodes" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "(newstate->non_eps_nodes).alloc = iVar8;" (assignment_expression "(newstate->non_eps_nodes).alloc = iVar8" (field_expression "(newstate->non_eps_nodes).alloc" (parenthesized_expression "(newstate->non_eps_nodes)" ( (field_expression "newstate->non_eps_nodes" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "pIVar2 = (Idx *)(*(code *)puVar1)(iVar8 << 2);" (assignment_expression "pIVar2 = (Idx *)(*(code *)puVar1)(iVar8 << 2)" identifier = (cast_expression "(Idx *)(*(code *)puVar1)(iVar8 << 2)" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*(code *)puVar1)(iVar8 << 2)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar8 << 2)" ( (binary_expression "iVar8 << 2" identifier << number_literal) ))))) ;) (expression_statement "(newstate->non_eps_nodes).elems = pIVar2;" (assignment_expression "(newstate->non_eps_nodes).elems = pIVar2" (field_expression "(newstate->non_eps_nodes).elems" (parenthesized_expression "(newstate->non_eps_nodes)" ( (field_expression "newstate->non_eps_nodes" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (if_statement "if (pIVar2 == (Idx *)0x0) {\n    return _REG_ESPACE;\n  }" if (parenthesized_expression "(pIVar2 == (Idx *)0x0)" ( (binary_expression "pIVar2 == (Idx *)0x0" identifier == (cast_expression "(Idx *)0x0" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return _REG_ESPACE;\n  }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (if_statement "if (0 < iVar8) {\n    do {\n      IVar5 = (newstate->nodes).elems[iVar6];\n      iVar6 = iVar6 + 1;\n      if (((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)) {\n        return _REG_ESPACE;\n      }\n    } while (iVar6 < (newstate->nodes).nelem);\n  }" if (parenthesized_expression "(0 < iVar8)" ( (binary_expression "0 < iVar8" number_literal < identifier) )) (compound_statement "{\n    do {\n      IVar5 = (newstate->nodes).elems[iVar6];\n      iVar6 = iVar6 + 1;\n      if (((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)) {\n        return _REG_ESPACE;\n      }\n    } while (iVar6 < (newstate->nodes).nelem);\n  }" { (do_statement "do {\n      IVar5 = (newstate->nodes).elems[iVar6];\n      iVar6 = iVar6 + 1;\n      if (((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)) {\n        return _REG_ESPACE;\n      }\n    } while (iVar6 < (newstate->nodes).nelem);" do (compound_statement "{\n      IVar5 = (newstate->nodes).elems[iVar6];\n      iVar6 = iVar6 + 1;\n      if (((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)) {\n        return _REG_ESPACE;\n      }\n    }" { (expression_statement "IVar5 = (newstate->nodes).elems[iVar6];" (assignment_expression "IVar5 = (newstate->nodes).elems[iVar6]" identifier = (subscript_expression "(newstate->nodes).elems[iVar6]" (field_expression "(newstate->nodes).elems" (parenthesized_expression "(newstate->nodes)" ( (field_expression "newstate->nodes" identifier -> field_identifier) )) . field_identifier) [ identifier ])) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if (((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)) {\n        return _REG_ESPACE;\n      }" if (parenthesized_expression "(((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0))" ( (binary_expression "((dfa->nodes[IVar5].field_0x4 & 8) == 0) &&\n         (_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)" (parenthesized_expression "((dfa->nodes[IVar5].field_0x4 & 8) == 0)" ( (binary_expression "(dfa->nodes[IVar5].field_0x4 & 8) == 0" (parenthesized_expression "(dfa->nodes[IVar5].field_0x4 & 8)" ( (binary_expression "dfa->nodes[IVar5].field_0x4 & 8" (field_expression "dfa->nodes[IVar5].field_0x4" (subscript_expression "dfa->nodes[IVar5]" (field_expression "dfa->nodes" identifier -> field_identifier) [ identifier ]) . field_identifier) & number_literal) )) == number_literal) )) && (parenthesized_expression "(_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0)" ( (comma_expression "_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5),\n         CONCAT31(extraout_var,_Var3) == 0" (assignment_expression "_Var3 = re_node_set_insert_last(&newstate->non_eps_nodes,IVar5)" identifier = (call_expression "re_node_set_insert_last(&newstate->non_eps_nodes,IVar5)" identifier (argument_list "(&newstate->non_eps_nodes,IVar5)" ( (pointer_expression "&newstate->non_eps_nodes" & (field_expression "newstate->non_eps_nodes" identifier -> field_identifier)) , identifier )))) , (binary_expression "CONCAT31(extraout_var,_Var3) == 0" (call_expression "CONCAT31(extraout_var,_Var3)" identifier (argument_list "(extraout_var,_Var3)" ( identifier , identifier ))) == number_literal)) ))) )) (compound_statement "{\n        return _REG_ESPACE;\n      }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) }) while (parenthesized_expression "(iVar6 < (newstate->nodes).nelem)" ( (binary_expression "iVar6 < (newstate->nodes).nelem" identifier < (field_expression "(newstate->nodes).nelem" (parenthesized_expression "(newstate->nodes)" ( (field_expression "newstate->nodes" identifier -> field_identifier) )) . field_identifier)) )) ;) })) (expression_statement "prVar7 = dfa->state_table + (hash & dfa->state_hash_mask);" (assignment_expression "prVar7 = dfa->state_table + (hash & dfa->state_hash_mask)" identifier = (binary_expression "dfa->state_table + (hash & dfa->state_hash_mask)" (field_expression "dfa->state_table" identifier -> field_identifier) + (parenthesized_expression "(hash & dfa->state_hash_mask)" ( (binary_expression "hash & dfa->state_hash_mask" identifier & (field_expression "dfa->state_hash_mask" identifier -> field_identifier)) )))) ;) (expression_statement "iVar8 = prVar7->num;" (assignment_expression "iVar8 = prVar7->num" identifier = (field_expression "prVar7->num" identifier -> field_identifier)) ;) (expression_statement "pprVar4 = prVar7->array;" (assignment_expression "pprVar4 = prVar7->array" identifier = (field_expression "prVar7->array" identifier -> field_identifier)) ;) (expression_statement "IVar5 = iVar8 + 1;" (assignment_expression "IVar5 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) (if_statement "if (prVar7->alloc <= iVar8) {\n    pprVar4 = (re_dfastate_t **)(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8);\n    if (pprVar4 == (re_dfastate_t **)0x0) {\n      return _REG_ESPACE;\n    }\n    iVar8 = prVar7->num;\n    prVar7->array = pprVar4;\n    prVar7->alloc = IVar5 * 2;\n    IVar5 = iVar8 + 1;\n  }" if (parenthesized_expression "(prVar7->alloc <= iVar8)" ( (binary_expression "prVar7->alloc <= iVar8" (field_expression "prVar7->alloc" identifier -> field_identifier) <= identifier) )) (compound_statement "{\n    pprVar4 = (re_dfastate_t **)(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8);\n    if (pprVar4 == (re_dfastate_t **)0x0) {\n      return _REG_ESPACE;\n    }\n    iVar8 = prVar7->num;\n    prVar7->array = pprVar4;\n    prVar7->alloc = IVar5 * 2;\n    IVar5 = iVar8 + 1;\n  }" { (expression_statement "pprVar4 = (re_dfastate_t **)(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8);" (assignment_expression "pprVar4 = (re_dfastate_t **)(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8)" identifier = (cast_expression "(re_dfastate_t **)(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8)" ( (type_descriptor "re_dfastate_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "(*(code *)PTR_realloc_00078038)(pprVar4,IVar5 * 8)" (parenthesized_expression "(*(code *)PTR_realloc_00078038)" ( (pointer_expression "*(code *)PTR_realloc_00078038" * (cast_expression "(code *)PTR_realloc_00078038" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pprVar4,IVar5 * 8)" ( identifier , (binary_expression "IVar5 * 8" identifier * number_literal) ))))) ;) (if_statement "if (pprVar4 == (re_dfastate_t **)0x0) {\n      return _REG_ESPACE;\n    }" if (parenthesized_expression "(pprVar4 == (re_dfastate_t **)0x0)" ( (binary_expression "pprVar4 == (re_dfastate_t **)0x0" identifier == (cast_expression "(re_dfastate_t **)0x0" ( (type_descriptor "re_dfastate_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n      return _REG_ESPACE;\n    }" { (return_statement "return _REG_ESPACE;" return identifier ;) })) (expression_statement "iVar8 = prVar7->num;" (assignment_expression "iVar8 = prVar7->num" identifier = (field_expression "prVar7->num" identifier -> field_identifier)) ;) (expression_statement "prVar7->array = pprVar4;" (assignment_expression "prVar7->array = pprVar4" (field_expression "prVar7->array" identifier -> field_identifier) = identifier) ;) (expression_statement "prVar7->alloc = IVar5 * 2;" (assignment_expression "prVar7->alloc = IVar5 * 2" (field_expression "prVar7->alloc" identifier -> field_identifier) = (binary_expression "IVar5 * 2" identifier * number_literal)) ;) (expression_statement "IVar5 = iVar8 + 1;" (assignment_expression "IVar5 = iVar8 + 1" identifier = (binary_expression "iVar8 + 1" identifier + number_literal)) ;) })) (expression_statement "prVar7->num = IVar5;" (assignment_expression "prVar7->num = IVar5" (field_expression "prVar7->num" identifier -> field_identifier) = identifier) ;) (expression_statement "pprVar4[iVar8] = newstate;" (assignment_expression "pprVar4[iVar8] = newstate" (subscript_expression "pprVar4[iVar8]" identifier [ identifier ]) = identifier) ;) (return_statement "return _REG_NOERROR;" return identifier ;) })))
(translation_unit "undefined4 FUN_0004ca58(int *param_1,uint *param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  uint uVar7;\n  \n  puVar1 = PTR_malloc_00078034;\n  *param_2 = param_3;\n  param_2[5] = 0;\n  uVar7 = param_2[2];\n  param_2[4] = uVar7;\n  uVar2 = (*(code *)puVar1)(uVar7 << 2);\n  param_2[6] = uVar2;\n  if (uVar2 == 0) {\n    return 0xc;\n  }\n  iVar5 = 0;\n  if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }\n  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);\n  iVar3 = *piVar6;\n  iVar5 = piVar6[2];\n  iVar4 = iVar3 + 1;\n  if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }\n  *piVar6 = iVar4;\n  *(uint **)(iVar5 + iVar3 * 4) = param_2;\n  return 0;\n}\n\n" (function_definition "undefined4 FUN_0004ca58(int *param_1,uint *param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  uint uVar7;\n  \n  puVar1 = PTR_malloc_00078034;\n  *param_2 = param_3;\n  param_2[5] = 0;\n  uVar7 = param_2[2];\n  param_2[4] = uVar7;\n  uVar2 = (*(code *)puVar1)(uVar7 << 2);\n  param_2[6] = uVar2;\n  if (uVar2 == 0) {\n    return 0xc;\n  }\n  iVar5 = 0;\n  if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }\n  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);\n  iVar3 = *piVar6;\n  iVar5 = piVar6[2];\n  iVar4 = iVar3 + 1;\n  if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }\n  *piVar6 = iVar4;\n  *(uint **)(iVar5 + iVar3 * 4) = param_2;\n  return 0;\n}" type_identifier (function_declarator "FUN_0004ca58(int *param_1,uint *param_2,uint param_3)" identifier (parameter_list "(int *param_1,uint *param_2,uint param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "uint *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  uint uVar7;\n  \n  puVar1 = PTR_malloc_00078034;\n  *param_2 = param_3;\n  param_2[5] = 0;\n  uVar7 = param_2[2];\n  param_2[4] = uVar7;\n  uVar2 = (*(code *)puVar1)(uVar7 << 2);\n  param_2[6] = uVar2;\n  if (uVar2 == 0) {\n    return 0xc;\n  }\n  iVar5 = 0;\n  if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }\n  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);\n  iVar3 = *piVar6;\n  iVar5 = piVar6[2];\n  iVar4 = iVar3 + 1;\n  if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }\n  *piVar6 = iVar4;\n  *(uint **)(iVar5 + iVar3 * 4) = param_2;\n  return 0;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (expression_statement "puVar1 = PTR_malloc_00078034;" (assignment_expression "puVar1 = PTR_malloc_00078034" identifier = identifier) ;) (expression_statement "*param_2 = param_3;" (assignment_expression "*param_2 = param_3" (pointer_expression "*param_2" * identifier) = identifier) ;) (expression_statement "param_2[5] = 0;" (assignment_expression "param_2[5] = 0" (subscript_expression "param_2[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "uVar7 = param_2[2];" (assignment_expression "uVar7 = param_2[2]" identifier = (subscript_expression "param_2[2]" identifier [ number_literal ])) ;) (expression_statement "param_2[4] = uVar7;" (assignment_expression "param_2[4] = uVar7" (subscript_expression "param_2[4]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar2 = (*(code *)puVar1)(uVar7 << 2);" (assignment_expression "uVar2 = (*(code *)puVar1)(uVar7 << 2)" identifier = (call_expression "(*(code *)puVar1)(uVar7 << 2)" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(uVar7 << 2)" ( (binary_expression "uVar7 << 2" identifier << number_literal) )))) ;) (expression_statement "param_2[6] = uVar2;" (assignment_expression "param_2[6] = uVar2" (subscript_expression "param_2[6]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar2 == 0) {\n    return 0xc;\n  }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0xc;\n  }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (if_statement "if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }" if (parenthesized_expression "(0 < (int)uVar7)" ( (binary_expression "0 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) )) (compound_statement "{\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }" { (do_statement "do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);" do (compound_statement "{\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    }" { (expression_statement "iVar3 = iVar5 * 4;" (assignment_expression "iVar3 = iVar5 * 4" identifier = (binary_expression "iVar5 * 4" identifier * number_literal)) ;) (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (if_statement "if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }" if (parenthesized_expression "(((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0))" ( (binary_expression "((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)" (parenthesized_expression "((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0)" ( (binary_expression "(*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0" (parenthesized_expression "(*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8)" ( (binary_expression "*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8" (pointer_expression "*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4)" * (cast_expression "(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4)" ( (binary_expression "*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4" (binary_expression "*param_1 + *(int *)(param_2[3] + iVar3) * 8" (pointer_expression "*param_1" * identifier) + (binary_expression "*(int *)(param_2[3] + iVar3) * 8" (pointer_expression "*(int *)(param_2[3] + iVar3)" * (cast_expression "(int *)(param_2[3] + iVar3)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2[3] + iVar3)" ( (binary_expression "param_2[3] + iVar3" (subscript_expression "param_2[3]" identifier [ number_literal ]) + identifier) )))) * number_literal)) + number_literal) )))) & number_literal) )) == number_literal) )) && (parenthesized_expression "(iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)" ( (comma_expression "iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0" (assignment_expression "iVar3 = FUN_0004c5c0(param_2 + 4)" identifier = (call_expression "FUN_0004c5c0(param_2 + 4)" identifier (argument_list "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) , (binary_expression "iVar3 == 0" identifier == number_literal)) ))) )) (compound_statement "{\n        return 0xc;\n      }" { (return_statement "return 0xc;" return number_literal ;) })) }) while (parenthesized_expression "(iVar5 < (int)param_2[2])" ( (binary_expression "iVar5 < (int)param_2[2]" identifier < (cast_expression "(int)param_2[2]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[2]" identifier [ number_literal ]))) )) ;) })) (expression_statement "piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);" (assignment_expression "piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc)" identifier = (cast_expression "(int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[8] + (param_3 & param_1[0x11]) * 0xc)" ( (binary_expression "param_1[8] + (param_3 & param_1[0x11]) * 0xc" (subscript_expression "param_1[8]" identifier [ number_literal ]) + (binary_expression "(param_3 & param_1[0x11]) * 0xc" (parenthesized_expression "(param_3 & param_1[0x11])" ( (binary_expression "param_3 & param_1[0x11]" identifier & (subscript_expression "param_1[0x11]" identifier [ number_literal ])) )) * number_literal)) )))) ;) (expression_statement "iVar3 = *piVar6;" (assignment_expression "iVar3 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (expression_statement "iVar5 = piVar6[2];" (assignment_expression "iVar5 = piVar6[2]" identifier = (subscript_expression "piVar6[2]" identifier [ number_literal ])) ;) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }" if (parenthesized_expression "(piVar6[1] <= iVar3)" ( (binary_expression "piVar6[1] <= iVar3" (subscript_expression "piVar6[1]" identifier [ number_literal ]) <= identifier) )) (compound_statement "{\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }" { (expression_statement "iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);" (assignment_expression "iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8)" identifier = (call_expression "(*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8)" (parenthesized_expression "(*(code *)PTR_realloc_00078038)" ( (pointer_expression "*(code *)PTR_realloc_00078038" * (cast_expression "(code *)PTR_realloc_00078038" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar5,iVar4 * 8)" ( identifier , (binary_expression "iVar4 * 8" identifier * number_literal) )))) ;) (if_statement "if (iVar5 == 0) {\n      return 0xc;\n    }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0xc;\n    }" { (return_statement "return 0xc;" return number_literal ;) })) (expression_statement "iVar3 = *piVar6;" (assignment_expression "iVar3 = *piVar6" identifier = (pointer_expression "*piVar6" * identifier)) ;) (expression_statement "piVar6[2] = iVar5;" (assignment_expression "piVar6[2] = iVar5" (subscript_expression "piVar6[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar6[1] = iVar4 * 2;" (assignment_expression "piVar6[1] = iVar4 * 2" (subscript_expression "piVar6[1]" identifier [ number_literal ]) = (binary_expression "iVar4 * 2" identifier * number_literal)) ;) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) })) (expression_statement "*piVar6 = iVar4;" (assignment_expression "*piVar6 = iVar4" (pointer_expression "*piVar6" * identifier) = identifier) ;) (expression_statement "*(uint **)(iVar5 + iVar3 * 4) = param_2;" (assignment_expression "*(uint **)(iVar5 + iVar3 * 4) = param_2" (pointer_expression "*(uint **)(iVar5 + iVar3 * 4)" * (cast_expression "(uint **)(iVar5 + iVar3 * 4)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar5 + iVar3 * 4)" ( (binary_expression "iVar5 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) )))) = identifier) ;) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( (binary_expression IDENT << LIT) )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) * LIT)) + LIT) )))) & LIT) )) == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) , (binary_expression IDENT == LIT)) ))) )) (compound_statement { (return_statement return LIT ;) })) }) while (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (parenthesized_expression ( (binary_expression IDENT & (subscript_expression IDENT [ LIT ])) )) * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT , (binary_expression IDENT * LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = IDENT) ;) (return_statement return LIT ;) })))
(function_definition "undefined4 FUN_0004ca58(int *param_1,uint *param_2,uint param_3)\n\n{\n  undefined *puVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  uint uVar7;\n  \n  puVar1 = PTR_malloc_00078034;\n  *param_2 = param_3;\n  param_2[5] = 0;\n  uVar7 = param_2[2];\n  param_2[4] = uVar7;\n  uVar2 = (*(code *)puVar1)(uVar7 << 2);\n  param_2[6] = uVar2;\n  if (uVar2 == 0) {\n    return 0xc;\n  }\n  iVar5 = 0;\n  if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }\n  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);\n  iVar3 = *piVar6;\n  iVar5 = piVar6[2];\n  iVar4 = iVar3 + 1;\n  if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }\n  *piVar6 = iVar4;\n  *(uint **)(iVar5 + iVar3 * 4) = param_2;\n  return 0;\n}" (type_identifier "undefined4") (function_declarator "FUN_0004ca58(int *param_1,uint *param_2,uint param_3)" (identifier "FUN_0004ca58") (parameter_list "(int *param_1,uint *param_2,uint param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "uint *param_2" (type_identifier "uint") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined *puVar1;\n  uint uVar2;\n  int iVar3;\n  int iVar4;\n  int iVar5;\n  int *piVar6;\n  uint uVar7;\n  \n  puVar1 = PTR_malloc_00078034;\n  *param_2 = param_3;\n  param_2[5] = 0;\n  uVar7 = param_2[2];\n  param_2[4] = uVar7;\n  uVar2 = (*(code *)puVar1)(uVar7 << 2);\n  param_2[6] = uVar2;\n  if (uVar2 == 0) {\n    return 0xc;\n  }\n  iVar5 = 0;\n  if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }\n  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);\n  iVar3 = *piVar6;\n  iVar5 = piVar6[2];\n  iVar4 = iVar3 + 1;\n  if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }\n  *piVar6 = iVar4;\n  *(uint **)(iVar5 + iVar3 * 4) = param_2;\n  return 0;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (expression_statement "puVar1 = PTR_malloc_00078034;" (assignment_expression "puVar1 = PTR_malloc_00078034" (identifier "puVar1") (= "=") (identifier "PTR_malloc_00078034")) (; ";")) (expression_statement "*param_2 = param_3;" (assignment_expression "*param_2 = param_3" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "param_2[5] = 0;" (assignment_expression "param_2[5] = 0" (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar7 = param_2[2];" (assignment_expression "uVar7 = param_2[2]" (identifier "uVar7") (= "=") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "param_2[4] = uVar7;" (assignment_expression "param_2[4] = uVar7" (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "uVar2 = (*(code *)puVar1)(uVar7 << 2);" (assignment_expression "uVar2 = (*(code *)puVar1)(uVar7 << 2)" (identifier "uVar2") (= "=") (call_expression "(*(code *)puVar1)(uVar7 << 2)" (parenthesized_expression "(*(code *)puVar1)" (( "(") (pointer_expression "*(code *)puVar1" (* "*") (cast_expression "(code *)puVar1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1"))) () ")")) (argument_list "(uVar7 << 2)" (( "(") (binary_expression "uVar7 << 2" (identifier "uVar7") (<< "<<") (number_literal "2")) () ")")))) (; ";")) (expression_statement "param_2[6] = uVar2;" (assignment_expression "param_2[6] = uVar2" (subscript_expression "param_2[6]" (identifier "param_2") ([ "[") (number_literal "6") (] "]")) (= "=") (identifier "uVar2")) (; ";")) (if_statement "if (uVar2 == 0) {\n    return 0xc;\n  }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0xc;\n  }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (if_statement "if (0 < (int)uVar7) {\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }" (if "if") (parenthesized_expression "(0 < (int)uVar7)" (( "(") (binary_expression "0 < (int)uVar7" (number_literal "0") (< "<") (cast_expression "(int)uVar7" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar7"))) () ")")) (compound_statement "{\n    do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);\n  }" ({ "{") (do_statement "do {\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    } while (iVar5 < (int)param_2[2]);" (do "do") (compound_statement "{\n      iVar3 = iVar5 * 4;\n      iVar5 = iVar5 + 1;\n      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }\n    }" ({ "{") (expression_statement "iVar3 = iVar5 * 4;" (assignment_expression "iVar3 = iVar5 * 4" (identifier "iVar3") (= "=") (binary_expression "iVar5 * 4" (identifier "iVar5") (* "*") (number_literal "4"))) (; ";")) (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" (identifier "iVar5") (= "=") (binary_expression "iVar5 + 1" (identifier "iVar5") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {\n        return 0xc;\n      }" (if "if") (parenthesized_expression "(((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0))" (( "(") (binary_expression "((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&\n         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)" (parenthesized_expression "((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0)" (( "(") (binary_expression "(*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0" (parenthesized_expression "(*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8)" (( "(") (binary_expression "*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8" (pointer_expression "*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4)" (* "*") (cast_expression "(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4)" (( "(") (binary_expression "*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4" (binary_expression "*param_1 + *(int *)(param_2[3] + iVar3) * 8" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (binary_expression "*(int *)(param_2[3] + iVar3) * 8" (pointer_expression "*(int *)(param_2[3] + iVar3)" (* "*") (cast_expression "(int *)(param_2[3] + iVar3)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2[3] + iVar3)" (( "(") (binary_expression "param_2[3] + iVar3" (subscript_expression "param_2[3]" (identifier "param_2") ([ "[") (number_literal "3") (] "]")) (+ "+") (identifier "iVar3")) () ")")))) (* "*") (number_literal "8"))) (+ "+") (number_literal "4")) () ")")))) (& "&") (number_literal "8")) () ")")) (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)" (( "(") (comma_expression "iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0" (assignment_expression "iVar3 = FUN_0004c5c0(param_2 + 4)" (identifier "iVar3") (= "=") (call_expression "FUN_0004c5c0(param_2 + 4)" (identifier "FUN_0004c5c0") (argument_list "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (, ",") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n        return 0xc;\n      }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(iVar5 < (int)param_2[2])" (( "(") (binary_expression "iVar5 < (int)param_2[2]" (identifier "iVar5") (< "<") (cast_expression "(int)param_2[2]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_2[2]" (identifier "param_2") ([ "[") (number_literal "2") (] "]")))) () ")")) (; ";")) (} "}"))) (expression_statement "piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);" (assignment_expression "piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc)" (identifier "piVar6") (= "=") (cast_expression "(int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[8] + (param_3 & param_1[0x11]) * 0xc)" (( "(") (binary_expression "param_1[8] + (param_3 & param_1[0x11]) * 0xc" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (+ "+") (binary_expression "(param_3 & param_1[0x11]) * 0xc" (parenthesized_expression "(param_3 & param_1[0x11])" (( "(") (binary_expression "param_3 & param_1[0x11]" (identifier "param_3") (& "&") (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]"))) () ")")) (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "iVar3 = *piVar6;" (assignment_expression "iVar3 = *piVar6" (identifier "iVar3") (= "=") (pointer_expression "*piVar6" (* "*") (identifier "piVar6"))) (; ";")) (expression_statement "iVar5 = piVar6[2];" (assignment_expression "iVar5 = piVar6[2]" (identifier "iVar5") (= "=") (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" (identifier "iVar4") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (piVar6[1] <= iVar3) {\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }" (if "if") (parenthesized_expression "(piVar6[1] <= iVar3)" (( "(") (binary_expression "piVar6[1] <= iVar3" (subscript_expression "piVar6[1]" (identifier "piVar6") ([ "[") (number_literal "1") (] "]")) (<= "<=") (identifier "iVar3")) () ")")) (compound_statement "{\n    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);\n    if (iVar5 == 0) {\n      return 0xc;\n    }\n    iVar3 = *piVar6;\n    piVar6[2] = iVar5;\n    piVar6[1] = iVar4 * 2;\n    iVar4 = iVar3 + 1;\n  }" ({ "{") (expression_statement "iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);" (assignment_expression "iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8)" (identifier "iVar5") (= "=") (call_expression "(*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8)" (parenthesized_expression "(*(code *)PTR_realloc_00078038)" (( "(") (pointer_expression "*(code *)PTR_realloc_00078038" (* "*") (cast_expression "(code *)PTR_realloc_00078038" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_realloc_00078038"))) () ")")) (argument_list "(iVar5,iVar4 * 8)" (( "(") (identifier "iVar5") (, ",") (binary_expression "iVar4 * 8" (identifier "iVar4") (* "*") (number_literal "8")) () ")")))) (; ";")) (if_statement "if (iVar5 == 0) {\n      return 0xc;\n    }" (if "if") (parenthesized_expression "(iVar5 == 0)" (( "(") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0xc;\n    }" ({ "{") (return_statement "return 0xc;" (return "return") (number_literal "0xc") (; ";")) (} "}"))) (expression_statement "iVar3 = *piVar6;" (assignment_expression "iVar3 = *piVar6" (identifier "iVar3") (= "=") (pointer_expression "*piVar6" (* "*") (identifier "piVar6"))) (; ";")) (expression_statement "piVar6[2] = iVar5;" (assignment_expression "piVar6[2] = iVar5" (subscript_expression "piVar6[2]" (identifier "piVar6") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "iVar5")) (; ";")) (expression_statement "piVar6[1] = iVar4 * 2;" (assignment_expression "piVar6[1] = iVar4 * 2" (subscript_expression "piVar6[1]" (identifier "piVar6") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "iVar4 * 2" (identifier "iVar4") (* "*") (number_literal "2"))) (; ";")) (expression_statement "iVar4 = iVar3 + 1;" (assignment_expression "iVar4 = iVar3 + 1" (identifier "iVar4") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "*piVar6 = iVar4;" (assignment_expression "*piVar6 = iVar4" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (= "=") (identifier "iVar4")) (; ";")) (expression_statement "*(uint **)(iVar5 + iVar3 * 4) = param_2;" (assignment_expression "*(uint **)(iVar5 + iVar3 * 4) = param_2" (pointer_expression "*(uint **)(iVar5 + iVar3 * 4)" (* "*") (cast_expression "(uint **)(iVar5 + iVar3 * 4)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar5 + iVar3 * 4)" (( "(") (binary_expression "iVar5 + iVar3 * 4" (identifier "iVar5") (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "param_2")) (; ";")) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

type_1 function_1(type_2 *dfa,type_3 *newstate,type_4 var_6)

{
  type_5 *puVar1;
  type_6 extraout_var;
  type_7 *var_2;
  type_8 _Var3;
  type_3 **var_8;
  type_7 var_7;
  int var_3;
  type_9 *prVar7;
  int var_1;
  
  puVar1 = PTR_malloc_00078034;
  newstate->var_6 = var_6;
  (newstate->non_eps_nodes).nelem = 0;
  var_1 = (newstate->nodes).nelem;
  (newstate->non_eps_nodes).alloc = var_1;
  var_2 = (type_7 *)(*(type_10 *)puVar1)(var_1 << 2);
  (newstate->non_eps_nodes).elems = var_2;
  if (var_2 == (type_7 *)0x0) {
    return _REG_ESPACE;
  }
  var_3 = 0;
  if (0 < var_1) {
    do {
      var_7 = (newstate->nodes).elems[var_3];
      var_3 = var_3 + 1;
      if (((dfa->nodes[var_7].field_0x4 & 8) == 0) &&
         (_Var3 = var_4(&newstate->non_eps_nodes,var_7),
         var_5(extraout_var,_Var3) == 0)) {
        return _REG_ESPACE;
      }
    } while (var_3 < (newstate->nodes).nelem);
  }
  prVar7 = dfa->state_table + (var_6 & dfa->state_hash_mask);
  var_1 = prVar7->num;
  var_8 = prVar7->array;
  var_7 = var_1 + 1;
  if (prVar7->alloc <= var_1) {
    var_8 = (type_3 **)(*(type_10 *)PTR_realloc_00078038)(var_8,var_7 * 8);
    if (var_8 == (type_3 **)0x0) {
      return _REG_ESPACE;
    }
    var_1 = prVar7->num;
    prVar7->array = var_8;
    prVar7->alloc = var_7 * 2;
    var_7 = var_1 + 1;
  }
  prVar7->num = var_7;
  var_8[var_1] = newstate;
  return _REG_NOERROR;
}


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

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

{
  undefined *puVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int *piVar6;
  uint uVar7;
  
  puVar1 = PTR_malloc_00078034;
  *param_2 = param_3;
  param_2[5] = 0;
  uVar7 = param_2[2];
  param_2[4] = uVar7;
  uVar2 = (*(code *)puVar1)(uVar7 << 2);
  param_2[6] = uVar2;
  if (uVar2 == 0) {
    return 0xc;
  }
  iVar5 = 0;
  if (0 < (int)uVar7) {
    do {
      iVar3 = iVar5 * 4;
      iVar5 = iVar5 + 1;
      if (((*(byte *)(*param_1 + *(int *)(param_2[3] + iVar3) * 8 + 4) & 8) == 0) &&
         (iVar3 = FUN_0004c5c0(param_2 + 4), iVar3 == 0)) {
        return 0xc;
      }
    } while (iVar5 < (int)param_2[2]);
  }
  piVar6 = (int *)(param_1[8] + (param_3 & param_1[0x11]) * 0xc);
  iVar3 = *piVar6;
  iVar5 = piVar6[2];
  iVar4 = iVar3 + 1;
  if (piVar6[1] <= iVar3) {
    iVar5 = (*(code *)PTR_realloc_00078038)(iVar5,iVar4 * 8);
    if (iVar5 == 0) {
      return 0xc;
    }
    iVar3 = *piVar6;
    piVar6[2] = iVar5;
    piVar6[1] = iVar4 * 2;
    iVar4 = iVar3 + 1;
  }
  *piVar6 = iVar4;
  *(uint **)(iVar5 + iVar3 * 4) = param_2;
  return 0;
}

