
_Bool check_dst_limits(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,
                      Idx src_node,Idx src_idx)

{
  Idx bkref_idx;
  Idx bkref_idx_00;
  int iVar1;
  bool bVar2;
  Idx limit;
  int iVar3;
  Idx subexp_idx;
  int iVar4;
  re_dfa_t *prVar5;
  
  prVar5 = mctx->dfa;
  bkref_idx = search_cur_bkref_entry(mctx,dst_idx);
  bkref_idx_00 = search_cur_bkref_entry(mctx,src_idx);
  iVar4 = 0;
  if (limits->nelem < 1) {
    bVar2 = false;
  }
  else {
    iVar3 = 0;
    do {
      limit = *(Idx *)((int)limits->elems + iVar3);
      subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;
      iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);
      iVar3 = check_dst_limits_calc_pos
                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,
                         bkref_idx_00);
      if (iVar1 != iVar3) {
        return true;
      }
      iVar4 = iVar4 + 1;
      bVar2 = iVar4 < limits->nelem;
      iVar3 = iVar4 * 4;
    } while (bVar2);
  }
  return bVar2;
}



bool FUN_000512e4(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,
                 undefined4 param_6)

{
  undefined4 uVar1;
  undefined4 uVar2;
  bool bVar3;
  int iVar4;
  int iVar5;
  undefined4 uVar6;
  int iVar7;
  int *piVar8;
  
  piVar8 = *(int **)(param_1 + 0x54);
  uVar1 = FUN_00051214(param_1,param_4);
  uVar2 = FUN_00051214(param_1,param_6);
  iVar7 = 0;
  if (*(int *)(param_2 + 4) < 1) {
    bVar3 = false;
  }
  else {
    iVar5 = 0;
    do {
      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);
      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);
      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);
      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,
                           param_6,uVar2);
      if (iVar4 != iVar5) {
        return true;
      }
      iVar7 = iVar7 + 1;
      bVar3 = iVar7 < *(int *)(param_2 + 4);
      iVar5 = iVar7 * 4;
    } while (bVar3);
  }
  return bVar3;
}


lui gp,0x3
addiu gp,gp,0x323c
addu gp,gp,t9
addiu sp,sp,-0x50
sw ra,0x4c(sp)
sw s8,0x48(sp)
sw s7,0x44(sp)
sw s6,0x40(sp)
sw s5,0x3c(sp)
sw s4,0x38(sp)
sw s3,0x34(sp)
sw s2,0x30(sp)
sw s1,0x2c(sp)
sw s0,0x28(sp)
sw gp,0x18(sp)
or s0,a0,zero
or s2,a1,zero
sw a2,0x58(sp)
or s5,a3,zero
lw s7,0x54(a0)
or a1,a3,zero
lw s1,-0x76ac(gp)
addiu s1,s1,0x1214
or t9,s1,zero
bal 0x00051214
_nop
lw gp,0x18(sp)
sw v0,0x20(sp)
lw a1,0x64(sp)
or a0,s0,zero
or t9,s1,zero
bal 0x00051214
_nop
lw gp,0x18(sp)
sw v0,0x24(sp)
lw v0,0x4(s2)
blez v0,0x00051474
_or s4,zero,zero
lw v0,-0x76ac(gp)
addiu s8,v0,0x116c
sll s1,s4,0x2
lw v0,0x8(s2)
addu v0,v0,s1
lw a1,0x0(v0)
lw v1,0x74(s0)
sll v0,a1,0x2
addu v0,v0,a1
sll v0,v0,0x2
addu v0,v1,v0
lw v1,0x0(v0)
lw v0,0x0(s7)
sll v1,v1,0x3
addu v0,v0,v1
lw s3,0x0(v0)
lw v0,0x20(sp)
sw v0,0x14(sp)
sw s5,0x10(sp)
lw a3,0x58(sp)
or a2,s3,zero
or a0,s0,zero
or t9,s8,zero
bal 0x0005116c
_nop
lw gp,0x18(sp)
or s6,v0,zero
lw v0,0x8(s2)
addu s1,v0,s1
lw a1,0x0(s1)
lw v0,0x24(sp)
sw v0,0x14(sp)
lw v0,0x64(sp)
sw v0,0x10(sp)
lw a3,0x60(sp)
or a2,s3,zero
or a0,s0,zero
or t9,s8,zero
bal 0x0005116c
_nop
lw gp,0x18(sp)
beq s6,v0,0x00051458
_li v0,0x1
lw ra,0x4c(sp)
lw s8,0x48(sp)
lw s7,0x44(sp)
lw s6,0x40(sp)
lw s5,0x3c(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s1,0x2c(sp)
lw s0,0x28(sp)
jr ra
_addiu sp,sp,0x50
addiu s4,s4,0x1
lw v0,0x4(s2)
slt v0,s4,v0
bne v0,zero,0x00051388
_sll s1,s4,0x2
b 0x0005142c
_lw ra,0x4c(sp)
b 0x00051428
_or v0,zero,zero
(translation_unit "bool FUN_000512e4(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  bool bVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int iVar7;\n  int *piVar8;\n  \n  piVar8 = *(int **)(param_1 + 0x54);\n  uVar1 = FUN_00051214(param_1,param_4);\n  uVar2 = FUN_00051214(param_1,param_6);\n  iVar7 = 0;\n  if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }\n  return bVar3;\n}\n\n" (function_definition "bool FUN_000512e4(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  bool bVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int iVar7;\n  int *piVar8;\n  \n  piVar8 = *(int **)(param_1 + 0x54);\n  uVar1 = FUN_00051214(param_1,param_4);\n  uVar2 = FUN_00051214(param_1,param_6);\n  iVar7 = 0;\n  if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }\n  return bVar3;\n}" primitive_type (function_declarator "FUN_000512e4(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)" identifier (parameter_list "(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  bool bVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int iVar7;\n  int *piVar8;\n  \n  piVar8 = *(int **)(param_1 + 0x54);\n  uVar1 = FUN_00051214(param_1,param_4);\n  uVar2 = FUN_00051214(param_1,param_6);\n  iVar7 = 0;\n  if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }\n  return bVar3;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (expression_statement "piVar8 = *(int **)(param_1 + 0x54);" (assignment_expression "piVar8 = *(int **)(param_1 + 0x54)" identifier = (pointer_expression "*(int **)(param_1 + 0x54)" * (cast_expression "(int **)(param_1 + 0x54)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "uVar1 = FUN_00051214(param_1,param_4);" (assignment_expression "uVar1 = FUN_00051214(param_1,param_4)" identifier = (call_expression "FUN_00051214(param_1,param_4)" identifier (argument_list "(param_1,param_4)" ( identifier , identifier )))) ;) (expression_statement "uVar2 = FUN_00051214(param_1,param_6);" (assignment_expression "uVar2 = FUN_00051214(param_1,param_6)" identifier = (call_expression "FUN_00051214(param_1,param_6)" identifier (argument_list "(param_1,param_6)" ( identifier , identifier )))) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }" if (parenthesized_expression "(*(int *)(param_2 + 4) < 1)" ( (binary_expression "*(int *)(param_2 + 4) < 1" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n    bVar3 = false;\n  }" { (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" identifier = false) ;) }) (else_clause "else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }" else (compound_statement "{\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);" do (compound_statement "{\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    }" { (expression_statement "iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);" (assignment_expression "iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5)" identifier = (pointer_expression "*(int *)(*(int *)(param_2 + 8) + iVar5)" * (cast_expression "(int *)(*(int *)(param_2 + 8) + iVar5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 8) + iVar5)" ( (binary_expression "*(int *)(param_2 + 8) + iVar5" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + identifier) ))))) ;) (expression_statement "uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);" (assignment_expression "uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" identifier = (pointer_expression "*(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" * (cast_expression "(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" ( (binary_expression "*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8" (pointer_expression "*piVar8" * identifier) + (binary_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar4 * 0x14)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar4 * 0x14" identifier * number_literal)) )))) * number_literal)) ))))) ;) (expression_statement "iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);" (assignment_expression "iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1)" identifier = (call_expression "FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1)" identifier (argument_list "(param_1,iVar4,uVar6,param_3,param_4,uVar1)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);" (assignment_expression "iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2)" identifier = (call_expression "FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2)" identifier (argument_list "(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2)" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(param_2 + 8) + iVar5)" * (cast_expression "(undefined4 *)(*(int *)(param_2 + 8) + iVar5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 8) + iVar5)" ( (binary_expression "*(int *)(param_2 + 8) + iVar5" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + identifier) )))) , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar4 != iVar5) {\n        return true;\n      }" if (parenthesized_expression "(iVar4 != iVar5)" ( (binary_expression "iVar4 != iVar5" identifier != identifier) )) (compound_statement "{\n        return true;\n      }" { (return_statement "return true;" return true ;) })) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "bVar3 = iVar7 < *(int *)(param_2 + 4);" (assignment_expression "bVar3 = iVar7 < *(int *)(param_2 + 4)" identifier = (binary_expression "iVar7 < *(int *)(param_2 + 4)" identifier < (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))))) ;) (expression_statement "iVar5 = iVar7 * 4;" (assignment_expression "iVar5 = iVar7 * 4" identifier = (binary_expression "iVar7 * 4" identifier * number_literal)) ;) }) while (parenthesized_expression "(bVar3)" ( identifier )) ;) }))) (return_statement "return bVar3;" return identifier ;) })))
(translation_unit "_Bool check_dst_limits(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,\n                      Idx src_node,Idx src_idx)\n\n{\n  Idx bkref_idx;\n  Idx bkref_idx_00;\n  int iVar1;\n  bool bVar2;\n  Idx limit;\n  int iVar3;\n  Idx subexp_idx;\n  int iVar4;\n  re_dfa_t *prVar5;\n  \n  prVar5 = mctx->dfa;\n  bkref_idx = search_cur_bkref_entry(mctx,dst_idx);\n  bkref_idx_00 = search_cur_bkref_entry(mctx,src_idx);\n  iVar4 = 0;\n  if (limits->nelem < 1) {\n    bVar2 = false;\n  }\n  else {\n    iVar3 = 0;\n    do {\n      limit = *(Idx *)((int)limits->elems + iVar3);\n      subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);\n      iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00);\n      if (iVar1 != iVar3) {\n        return true;\n      }\n      iVar4 = iVar4 + 1;\n      bVar2 = iVar4 < limits->nelem;\n      iVar3 = iVar4 * 4;\n    } while (bVar2);\n  }\n  return bVar2;\n}\n\n" (function_definition "_Bool check_dst_limits(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,\n                      Idx src_node,Idx src_idx)\n\n{\n  Idx bkref_idx;\n  Idx bkref_idx_00;\n  int iVar1;\n  bool bVar2;\n  Idx limit;\n  int iVar3;\n  Idx subexp_idx;\n  int iVar4;\n  re_dfa_t *prVar5;\n  \n  prVar5 = mctx->dfa;\n  bkref_idx = search_cur_bkref_entry(mctx,dst_idx);\n  bkref_idx_00 = search_cur_bkref_entry(mctx,src_idx);\n  iVar4 = 0;\n  if (limits->nelem < 1) {\n    bVar2 = false;\n  }\n  else {\n    iVar3 = 0;\n    do {\n      limit = *(Idx *)((int)limits->elems + iVar3);\n      subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);\n      iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00);\n      if (iVar1 != iVar3) {\n        return true;\n      }\n      iVar4 = iVar4 + 1;\n      bVar2 = iVar4 < limits->nelem;\n      iVar3 = iVar4 * 4;\n    } while (bVar2);\n  }\n  return bVar2;\n}" type_identifier (function_declarator "check_dst_limits(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,\n                      Idx src_node,Idx src_idx)" identifier (parameter_list "(re_match_context_t *mctx,re_node_set *limits,Idx dst_node,Idx dst_idx,\n                      Idx src_node,Idx src_idx)" ( (parameter_declaration "re_match_context_t *mctx" type_identifier (pointer_declarator "*mctx" * identifier)) , (parameter_declaration "re_node_set *limits" type_identifier (pointer_declarator "*limits" * identifier)) , (parameter_declaration "Idx dst_node" type_identifier identifier) , (parameter_declaration "Idx dst_idx" type_identifier identifier) , (parameter_declaration "Idx src_node" type_identifier identifier) , (parameter_declaration "Idx src_idx" type_identifier identifier) ))) (compound_statement "{\n  Idx bkref_idx;\n  Idx bkref_idx_00;\n  int iVar1;\n  bool bVar2;\n  Idx limit;\n  int iVar3;\n  Idx subexp_idx;\n  int iVar4;\n  re_dfa_t *prVar5;\n  \n  prVar5 = mctx->dfa;\n  bkref_idx = search_cur_bkref_entry(mctx,dst_idx);\n  bkref_idx_00 = search_cur_bkref_entry(mctx,src_idx);\n  iVar4 = 0;\n  if (limits->nelem < 1) {\n    bVar2 = false;\n  }\n  else {\n    iVar3 = 0;\n    do {\n      limit = *(Idx *)((int)limits->elems + iVar3);\n      subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);\n      iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00);\n      if (iVar1 != iVar3) {\n        return true;\n      }\n      iVar4 = iVar4 + 1;\n      bVar2 = iVar4 < limits->nelem;\n      iVar3 = iVar4 * 4;\n    } while (bVar2);\n  }\n  return bVar2;\n}" { (declaration "Idx bkref_idx;" type_identifier identifier ;) (declaration "Idx bkref_idx_00;" type_identifier identifier ;) (declaration "int iVar1;" primitive_type identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "Idx limit;" type_identifier identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "Idx subexp_idx;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "re_dfa_t *prVar5;" type_identifier (pointer_declarator "*prVar5" * identifier) ;) (expression_statement "prVar5 = mctx->dfa;" (assignment_expression "prVar5 = mctx->dfa" identifier = (field_expression "mctx->dfa" identifier -> field_identifier)) ;) (expression_statement "bkref_idx = search_cur_bkref_entry(mctx,dst_idx);" (assignment_expression "bkref_idx = search_cur_bkref_entry(mctx,dst_idx)" identifier = (call_expression "search_cur_bkref_entry(mctx,dst_idx)" identifier (argument_list "(mctx,dst_idx)" ( identifier , identifier )))) ;) (expression_statement "bkref_idx_00 = search_cur_bkref_entry(mctx,src_idx);" (assignment_expression "bkref_idx_00 = search_cur_bkref_entry(mctx,src_idx)" identifier = (call_expression "search_cur_bkref_entry(mctx,src_idx)" identifier (argument_list "(mctx,src_idx)" ( identifier , identifier )))) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (if_statement "if (limits->nelem < 1) {\n    bVar2 = false;\n  }\n  else {\n    iVar3 = 0;\n    do {\n      limit = *(Idx *)((int)limits->elems + iVar3);\n      subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);\n      iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00);\n      if (iVar1 != iVar3) {\n        return true;\n      }\n      iVar4 = iVar4 + 1;\n      bVar2 = iVar4 < limits->nelem;\n      iVar3 = iVar4 * 4;\n    } while (bVar2);\n  }" if (parenthesized_expression "(limits->nelem < 1)" ( (binary_expression "limits->nelem < 1" (field_expression "limits->nelem" identifier -> field_identifier) < number_literal) )) (compound_statement "{\n    bVar2 = false;\n  }" { (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) }) (else_clause "else {\n    iVar3 = 0;\n    do {\n      limit = *(Idx *)((int)limits->elems + iVar3);\n      subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);\n      iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00);\n      if (iVar1 != iVar3) {\n        return true;\n      }\n      iVar4 = iVar4 + 1;\n      bVar2 = iVar4 < limits->nelem;\n      iVar3 = iVar4 * 4;\n    } while (bVar2);\n  }" else (compound_statement "{\n    iVar3 = 0;\n    do {\n      limit = *(Idx *)((int)limits->elems + iVar3);\n      subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);\n      iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00);\n      if (iVar1 != iVar3) {\n        return true;\n      }\n      iVar4 = iVar4 + 1;\n      bVar2 = iVar4 < limits->nelem;\n      iVar3 = iVar4 * 4;\n    } while (bVar2);\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      limit = *(Idx *)((int)limits->elems + iVar3);\n      subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);\n      iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00);\n      if (iVar1 != iVar3) {\n        return true;\n      }\n      iVar4 = iVar4 + 1;\n      bVar2 = iVar4 < limits->nelem;\n      iVar3 = iVar4 * 4;\n    } while (bVar2);" do (compound_statement "{\n      limit = *(Idx *)((int)limits->elems + iVar3);\n      subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;\n      iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);\n      iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00);\n      if (iVar1 != iVar3) {\n        return true;\n      }\n      iVar4 = iVar4 + 1;\n      bVar2 = iVar4 < limits->nelem;\n      iVar3 = iVar4 * 4;\n    }" { (expression_statement "limit = *(Idx *)((int)limits->elems + iVar3);" (assignment_expression "limit = *(Idx *)((int)limits->elems + iVar3)" identifier = (pointer_expression "*(Idx *)((int)limits->elems + iVar3)" * (cast_expression "(Idx *)((int)limits->elems + iVar3)" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)limits->elems + iVar3)" ( (binary_expression "(int)limits->elems + iVar3" (cast_expression "(int)limits->elems" ( (type_descriptor "int" primitive_type) ) (field_expression "limits->elems" identifier -> field_identifier)) + identifier) ))))) ;) (expression_statement "subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx;" (assignment_expression "subexp_idx = prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx" identifier = (field_expression "prVar5->nodes[mctx->bkref_ents[limit].node].opr.idx" (field_expression "prVar5->nodes[mctx->bkref_ents[limit].node].opr" (subscript_expression "prVar5->nodes[mctx->bkref_ents[limit].node]" (field_expression "prVar5->nodes" identifier -> field_identifier) [ (field_expression "mctx->bkref_ents[limit].node" (subscript_expression "mctx->bkref_ents[limit]" (field_expression "mctx->bkref_ents" identifier -> field_identifier) [ identifier ]) . field_identifier) ]) . field_identifier) . field_identifier)) ;) (expression_statement "iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx);" (assignment_expression "iVar1 = check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx)" identifier = (call_expression "check_dst_limits_calc_pos(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx)" identifier (argument_list "(mctx,limit,subexp_idx,dst_node,dst_idx,bkref_idx)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00);" (assignment_expression "iVar3 = check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00)" identifier = (call_expression "check_dst_limits_calc_pos\n                        (mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00)" identifier (argument_list "(mctx,*(Idx *)((int)limits->elems + iVar3),subexp_idx,src_node,src_idx,\n                         bkref_idx_00)" ( identifier , (pointer_expression "*(Idx *)((int)limits->elems + iVar3)" * (cast_expression "(Idx *)((int)limits->elems + iVar3)" ( (type_descriptor "Idx *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)limits->elems + iVar3)" ( (binary_expression "(int)limits->elems + iVar3" (cast_expression "(int)limits->elems" ( (type_descriptor "int" primitive_type) ) (field_expression "limits->elems" identifier -> field_identifier)) + identifier) )))) , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar1 != iVar3) {\n        return true;\n      }" if (parenthesized_expression "(iVar1 != iVar3)" ( (binary_expression "iVar1 != iVar3" identifier != identifier) )) (compound_statement "{\n        return true;\n      }" { (return_statement "return true;" return true ;) })) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "bVar2 = iVar4 < limits->nelem;" (assignment_expression "bVar2 = iVar4 < limits->nelem" identifier = (binary_expression "iVar4 < limits->nelem" identifier < (field_expression "limits->nelem" identifier -> field_identifier))) ;) (expression_statement "iVar3 = iVar4 * 4;" (assignment_expression "iVar3 = iVar4 * 4" identifier = (binary_expression "iVar4 * 4" identifier * number_literal)) ;) }) while (parenthesized_expression "(bVar2)" ( identifier )) ;) }))) (return_statement "return bVar2;" return identifier ;) })))
(translation_unit "bool FUN_000512e4(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  bool bVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int iVar7;\n  int *piVar8;\n  \n  piVar8 = *(int **)(param_1 + 0x54);\n  uVar1 = FUN_00051214(param_1,param_4);\n  uVar2 = FUN_00051214(param_1,param_6);\n  iVar7 = 0;\n  if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }\n  return bVar3;\n}\n\n" (function_definition "bool FUN_000512e4(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  bool bVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int iVar7;\n  int *piVar8;\n  \n  piVar8 = *(int **)(param_1 + 0x54);\n  uVar1 = FUN_00051214(param_1,param_4);\n  uVar2 = FUN_00051214(param_1,param_6);\n  iVar7 = 0;\n  if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }\n  return bVar3;\n}" primitive_type (function_declarator "FUN_000512e4(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)" identifier (parameter_list "(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "undefined4 param_3" type_identifier identifier) , (parameter_declaration "undefined4 param_4" type_identifier identifier) , (parameter_declaration "undefined4 param_5" type_identifier identifier) , (parameter_declaration "undefined4 param_6" type_identifier identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  bool bVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int iVar7;\n  int *piVar8;\n  \n  piVar8 = *(int **)(param_1 + 0x54);\n  uVar1 = FUN_00051214(param_1,param_4);\n  uVar2 = FUN_00051214(param_1,param_6);\n  iVar7 = 0;\n  if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }\n  return bVar3;\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "undefined4 uVar2;" type_identifier identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "undefined4 uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "int *piVar8;" primitive_type (pointer_declarator "*piVar8" * identifier) ;) (expression_statement "piVar8 = *(int **)(param_1 + 0x54);" (assignment_expression "piVar8 = *(int **)(param_1 + 0x54)" identifier = (pointer_expression "*(int **)(param_1 + 0x54)" * (cast_expression "(int **)(param_1 + 0x54)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x54)" ( (binary_expression "param_1 + 0x54" identifier + number_literal) ))))) ;) (expression_statement "uVar1 = FUN_00051214(param_1,param_4);" (assignment_expression "uVar1 = FUN_00051214(param_1,param_4)" identifier = (call_expression "FUN_00051214(param_1,param_4)" identifier (argument_list "(param_1,param_4)" ( identifier , identifier )))) ;) (expression_statement "uVar2 = FUN_00051214(param_1,param_6);" (assignment_expression "uVar2 = FUN_00051214(param_1,param_6)" identifier = (call_expression "FUN_00051214(param_1,param_6)" identifier (argument_list "(param_1,param_6)" ( identifier , identifier )))) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (if_statement "if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }" if (parenthesized_expression "(*(int *)(param_2 + 4) < 1)" ( (binary_expression "*(int *)(param_2 + 4) < 1" (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))) < number_literal) )) (compound_statement "{\n    bVar3 = false;\n  }" { (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" identifier = false) ;) }) (else_clause "else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }" else (compound_statement "{\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);" do (compound_statement "{\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    }" { (expression_statement "iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);" (assignment_expression "iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5)" identifier = (pointer_expression "*(int *)(*(int *)(param_2 + 8) + iVar5)" * (cast_expression "(int *)(*(int *)(param_2 + 8) + iVar5)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 8) + iVar5)" ( (binary_expression "*(int *)(param_2 + 8) + iVar5" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + identifier) ))))) ;) (expression_statement "uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);" (assignment_expression "uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" identifier = (pointer_expression "*(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" * (cast_expression "(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" ( (binary_expression "*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8" (pointer_expression "*piVar8" * identifier) + (binary_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14)" * (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar4 * 0x14)" ( (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" * (cast_expression "(int *)(param_1 + 0x74)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x74)" ( (binary_expression "param_1 + 0x74" identifier + number_literal) )))) + (binary_expression "iVar4 * 0x14" identifier * number_literal)) )))) * number_literal)) ))))) ;) (expression_statement "iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);" (assignment_expression "iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1)" identifier = (call_expression "FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1)" identifier (argument_list "(param_1,iVar4,uVar6,param_3,param_4,uVar1)" ( identifier , identifier , identifier , identifier , identifier , identifier )))) ;) (expression_statement "iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);" (assignment_expression "iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2)" identifier = (call_expression "FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2)" identifier (argument_list "(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2)" ( identifier , (pointer_expression "*(undefined4 *)(*(int *)(param_2 + 8) + iVar5)" * (cast_expression "(undefined4 *)(*(int *)(param_2 + 8) + iVar5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(param_2 + 8) + iVar5)" ( (binary_expression "*(int *)(param_2 + 8) + iVar5" (pointer_expression "*(int *)(param_2 + 8)" * (cast_expression "(int *)(param_2 + 8)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 8)" ( (binary_expression "param_2 + 8" identifier + number_literal) )))) + identifier) )))) , identifier , identifier , identifier , identifier )))) ;) (if_statement "if (iVar4 != iVar5) {\n        return true;\n      }" if (parenthesized_expression "(iVar4 != iVar5)" ( (binary_expression "iVar4 != iVar5" identifier != identifier) )) (compound_statement "{\n        return true;\n      }" { (return_statement "return true;" return true ;) })) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "bVar3 = iVar7 < *(int *)(param_2 + 4);" (assignment_expression "bVar3 = iVar7 < *(int *)(param_2 + 4)" identifier = (binary_expression "iVar7 < *(int *)(param_2 + 4)" identifier < (pointer_expression "*(int *)(param_2 + 4)" * (cast_expression "(int *)(param_2 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) )))))) ;) (expression_statement "iVar5 = iVar7 * 4;" (assignment_expression "iVar5 = iVar7 * 4" identifier = (binary_expression "iVar7 * 4" identifier * number_literal)) ;) }) while (parenthesized_expression "(bVar3)" ( identifier )) ;) }))) (return_statement "return bVar3;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) , IDENT , IDENT , IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT < (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) }) while (parenthesized_expression ( IDENT )) ;) }))) (return_statement return IDENT ;) })))
(function_definition "bool FUN_000512e4(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)\n\n{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  bool bVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int iVar7;\n  int *piVar8;\n  \n  piVar8 = *(int **)(param_1 + 0x54);\n  uVar1 = FUN_00051214(param_1,param_4);\n  uVar2 = FUN_00051214(param_1,param_6);\n  iVar7 = 0;\n  if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }\n  return bVar3;\n}" (primitive_type "bool") (function_declarator "FUN_000512e4(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)" (identifier "FUN_000512e4") (parameter_list "(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,\n                 undefined4 param_6)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "undefined4 param_3" (type_identifier "undefined4") (identifier "param_3")) (, ",") (parameter_declaration "undefined4 param_4" (type_identifier "undefined4") (identifier "param_4")) (, ",") (parameter_declaration "undefined4 param_5" (type_identifier "undefined4") (identifier "param_5")) (, ",") (parameter_declaration "undefined4 param_6" (type_identifier "undefined4") (identifier "param_6")) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  undefined4 uVar2;\n  bool bVar3;\n  int iVar4;\n  int iVar5;\n  undefined4 uVar6;\n  int iVar7;\n  int *piVar8;\n  \n  piVar8 = *(int **)(param_1 + 0x54);\n  uVar1 = FUN_00051214(param_1,param_4);\n  uVar2 = FUN_00051214(param_1,param_6);\n  iVar7 = 0;\n  if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }\n  return bVar3;\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "undefined4 uVar2;" (type_identifier "undefined4") (identifier "uVar2") (; ";")) (declaration "bool bVar3;" (primitive_type "bool") (identifier "bVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "undefined4 uVar6;" (type_identifier "undefined4") (identifier "uVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "int *piVar8;" (primitive_type "int") (pointer_declarator "*piVar8" (* "*") (identifier "piVar8")) (; ";")) (expression_statement "piVar8 = *(int **)(param_1 + 0x54);" (assignment_expression "piVar8 = *(int **)(param_1 + 0x54)" (identifier "piVar8") (= "=") (pointer_expression "*(int **)(param_1 + 0x54)" (* "*") (cast_expression "(int **)(param_1 + 0x54)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x54)" (( "(") (binary_expression "param_1 + 0x54" (identifier "param_1") (+ "+") (number_literal "0x54")) () ")"))))) (; ";")) (expression_statement "uVar1 = FUN_00051214(param_1,param_4);" (assignment_expression "uVar1 = FUN_00051214(param_1,param_4)" (identifier "uVar1") (= "=") (call_expression "FUN_00051214(param_1,param_4)" (identifier "FUN_00051214") (argument_list "(param_1,param_4)" (( "(") (identifier "param_1") (, ",") (identifier "param_4") () ")")))) (; ";")) (expression_statement "uVar2 = FUN_00051214(param_1,param_6);" (assignment_expression "uVar2 = FUN_00051214(param_1,param_6)" (identifier "uVar2") (= "=") (call_expression "FUN_00051214(param_1,param_6)" (identifier "FUN_00051214") (argument_list "(param_1,param_6)" (( "(") (identifier "param_1") (, ",") (identifier "param_6") () ")")))) (; ";")) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (if_statement "if (*(int *)(param_2 + 4) < 1) {\n    bVar3 = false;\n  }\n  else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }" (if "if") (parenthesized_expression "(*(int *)(param_2 + 4) < 1)" (( "(") (binary_expression "*(int *)(param_2 + 4) < 1" (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))) (< "<") (number_literal "1")) () ")")) (compound_statement "{\n    bVar3 = false;\n  }" ({ "{") (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" (identifier "bVar3") (= "=") (false "false")) (; ";")) (} "}")) (else_clause "else {\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }" (else "else") (compound_statement "{\n    iVar5 = 0;\n    do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);\n  }" ({ "{") (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    } while (bVar3);" (do "do") (compound_statement "{\n      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);\n      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);\n      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);\n      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);\n      if (iVar4 != iVar5) {\n        return true;\n      }\n      iVar7 = iVar7 + 1;\n      bVar3 = iVar7 < *(int *)(param_2 + 4);\n      iVar5 = iVar7 * 4;\n    }" ({ "{") (expression_statement "iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);" (assignment_expression "iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)(*(int *)(param_2 + 8) + iVar5)" (* "*") (cast_expression "(int *)(*(int *)(param_2 + 8) + iVar5)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 8) + iVar5)" (( "(") (binary_expression "*(int *)(param_2 + 8) + iVar5" (pointer_expression "*(int *)(param_2 + 8)" (* "*") (cast_expression "(int *)(param_2 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar5")) () ")"))))) (; ";")) (expression_statement "uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);" (assignment_expression "uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" (identifier "uVar6") (= "=") (pointer_expression "*(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" (* "*") (cast_expression "(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8)" (( "(") (binary_expression "*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8" (pointer_expression "*piVar8" (* "*") (identifier "piVar8")) (+ "+") (binary_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8" (pointer_expression "*(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14)" (* "*") (cast_expression "(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_1 + 0x74) + iVar4 * 0x14)" (( "(") (binary_expression "*(int *)(param_1 + 0x74) + iVar4 * 0x14" (pointer_expression "*(int *)(param_1 + 0x74)" (* "*") (cast_expression "(int *)(param_1 + 0x74)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x74)" (( "(") (binary_expression "param_1 + 0x74" (identifier "param_1") (+ "+") (number_literal "0x74")) () ")")))) (+ "+") (binary_expression "iVar4 * 0x14" (identifier "iVar4") (* "*") (number_literal "0x14"))) () ")")))) (* "*") (number_literal "8"))) () ")"))))) (; ";")) (expression_statement "iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);" (assignment_expression "iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1)" (identifier "iVar4") (= "=") (call_expression "FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1)" (identifier "FUN_0005116c") (argument_list "(param_1,iVar4,uVar6,param_3,param_4,uVar1)" (( "(") (identifier "param_1") (, ",") (identifier "iVar4") (, ",") (identifier "uVar6") (, ",") (identifier "param_3") (, ",") (identifier "param_4") (, ",") (identifier "uVar1") () ")")))) (; ";")) (expression_statement "iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2);" (assignment_expression "iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2)" (identifier "iVar5") (= "=") (call_expression "FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2)" (identifier "FUN_0005116c") (argument_list "(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,\n                           param_6,uVar2)" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(*(int *)(param_2 + 8) + iVar5)" (* "*") (cast_expression "(undefined4 *)(*(int *)(param_2 + 8) + iVar5)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(param_2 + 8) + iVar5)" (( "(") (binary_expression "*(int *)(param_2 + 8) + iVar5" (pointer_expression "*(int *)(param_2 + 8)" (* "*") (cast_expression "(int *)(param_2 + 8)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 8)" (( "(") (binary_expression "param_2 + 8" (identifier "param_2") (+ "+") (number_literal "8")) () ")")))) (+ "+") (identifier "iVar5")) () ")")))) (, ",") (identifier "uVar6") (, ",") (identifier "param_5") (, ",") (identifier "param_6") (, ",") (identifier "uVar2") () ")")))) (; ";")) (if_statement "if (iVar4 != iVar5) {\n        return true;\n      }" (if "if") (parenthesized_expression "(iVar4 != iVar5)" (( "(") (binary_expression "iVar4 != iVar5" (identifier "iVar4") (!= "!=") (identifier "iVar5")) () ")")) (compound_statement "{\n        return true;\n      }" ({ "{") (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "bVar3 = iVar7 < *(int *)(param_2 + 4);" (assignment_expression "bVar3 = iVar7 < *(int *)(param_2 + 4)" (identifier "bVar3") (= "=") (binary_expression "iVar7 < *(int *)(param_2 + 4)" (identifier "iVar7") (< "<") (pointer_expression "*(int *)(param_2 + 4)" (* "*") (cast_expression "(int *)(param_2 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")")))))) (; ";")) (expression_statement "iVar5 = iVar7 * 4;" (assignment_expression "iVar5 = iVar7 * 4" (identifier "iVar5") (= "=") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar3)" (( "(") (identifier "bVar3") () ")")) (; ";")) (} "}")))) (return_statement "return bVar3;" (return "return") (identifier "bVar3") (; ";")) (} "}")))
(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (false)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (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: (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (identifier) (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))))) (identifier) (identifier) (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (true)))) (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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (identifier)))))) (return_statement (identifier)))))

bool MASKED(int param_1,int param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,
                 undefined4 param_6)

{
  undefined4 uVar1;
  undefined4 uVar2;
  bool bVar3;
  int iVar4;
  int iVar5;
  undefined4 uVar6;
  int iVar7;
  int *piVar8;
  
  piVar8 = *(int **)(param_1 + 0x54);
  uVar1 = FUN_00051214(param_1,param_4);
  uVar2 = FUN_00051214(param_1,param_6);
  iVar7 = 0;
  if (*(int *)(param_2 + 4) < 1) {
    bVar3 = false;
  }
  else {
    iVar5 = 0;
    do {
      iVar4 = *(int *)(*(int *)(param_2 + 8) + iVar5);
      uVar6 = *(undefined4 *)(*piVar8 + *(int *)(*(int *)(param_1 + 0x74) + iVar4 * 0x14) * 8);
      iVar4 = FUN_0005116c(param_1,iVar4,uVar6,param_3,param_4,uVar1);
      iVar5 = FUN_0005116c(param_1,*(undefined4 *)(*(int *)(param_2 + 8) + iVar5),uVar6,param_5,
                           param_6,uVar2);
      if (iVar4 != iVar5) {
        return true;
      }
      iVar7 = iVar7 + 1;
      bVar3 = iVar7 < *(int *)(param_2 + 4);
      iVar5 = iVar7 * 4;
    } while (bVar3);
  }
  return bVar3;
}

