
size_t nsubtoks(dfa *dfa,size_t tindex)

{
  int iVar1;
  size_t sVar2;
  size_t sVar3;
  token *ptVar4;
  
  sVar3 = 0;
  ptVar4 = dfa->tokens;
  do {
    iVar1 = ptVar4[tindex + 0x3fffffff];
    while( true ) {
      sVar3 = sVar3 + 1;
      if (iVar1 < 0x101) {
        return sVar3;
      }
      if (iVar1 < 0x104) break;
      if (1 < iVar1 - 0x105U) {
        return sVar3;
      }
      sVar2 = nsubtoks(dfa,tindex - 1);
      tindex = (tindex - 1) - sVar2;
      sVar3 = sVar3 + sVar2;
      iVar1 = ptVar4[tindex + 0x3fffffff];
    }
    tindex = tindex - 1;
  } while( true );
}



int FUN_0001da00(int param_1,int param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  
  iVar2 = 0;
  iVar3 = *(int *)(param_1 + 0x298);
  do {
    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);
    while( true ) {
      iVar2 = iVar2 + 1;
      if (iVar1 < 0x101) {
        return iVar2;
      }
      if (iVar1 < 0x104) break;
      if (1 < iVar1 - 0x105U) {
        return iVar2;
      }
      iVar1 = FUN_0001da00(param_1,param_2 + -1);
      param_2 = (param_2 + -1) - iVar1;
      iVar2 = iVar2 + iVar1;
      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);
    }
    param_2 = param_2 + -1;
  } while( true );
}


lui gp,0x3
addiu gp,gp,-0x68c0
addu gp,gp,t9
addiu sp,sp,-0x38
sw s1,0x20(sp)
sw s5,0x30(sp)
sw s3,0x28(sp)
lui s3,0x3fff
sw s0,0x1c(sp)
or s0,zero,zero
sw s4,0x2c(sp)
ori s3,s3,0xffff
sw gp,0x10(sp)
or s4,a0,zero
sw ra,0x34(sp)
sw s2,0x24(sp)
lw s1,-0x7fc0(gp)
lw s5,0x298(a0)
addiu s1,s1,-0x2600
addu v0,a1,s3
addiu s0,s0,0x1
sll v0,v0,0x2
addu v0,s5,v0
lw v0,0x0(v0)
slti a0,v0,0x101
addiu v1,v0,-0x105
bne a0,zero,0x0001dac0
_slti v0,v0,0x104
bne v0,zero,0x0001dae8
_addiu s2,a1,-0x1
sltiu v1,v1,0x2
or a0,s4,zero
beq v1,zero,0x0001dac0
_or a1,s2,zero
or t9,s1,zero
bal 0x0001da00
_nop
subu a1,s2,v0
addu s0,s0,v0
addu v0,a1,s3
addiu s0,s0,0x1
sll v0,v0,0x2
addu v0,s5,v0
lw v0,0x0(v0)
slti a0,v0,0x101
addiu v1,v0,-0x105
beq a0,zero,0x0001da70
_slti v0,v0,0x104
lw ra,0x34(sp)
or v0,s0,zero
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
b 0x0001da4c
_addiu a1,a1,-0x1
(translation_unit "int FUN_0001da00(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = 0;\n  iVar3 = *(int *)(param_1 + 0x298);\n  do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );\n}\n\n" (function_definition "int FUN_0001da00(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = 0;\n  iVar3 = *(int *)(param_1 + 0x298);\n  do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );\n}" primitive_type (function_declarator "FUN_0001da00(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = 0;\n  iVar3 = *(int *)(param_1 + 0x298);\n  do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x298);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x298)" identifier = (pointer_expression "*(int *)(param_1 + 0x298)" * (cast_expression "(int *)(param_1 + 0x298)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x298)" ( (binary_expression "param_1 + 0x298" identifier + number_literal) ))))) ;) (do_statement "do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );" do (compound_statement "{\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  }" { (expression_statement "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" identifier = (pointer_expression "*(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" * (cast_expression "(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + (param_2 + 0x3fffffff) * 4)" ( (binary_expression "iVar3 + (param_2 + 0x3fffffff) * 4" identifier + (binary_expression "(param_2 + 0x3fffffff) * 4" (parenthesized_expression "(param_2 + 0x3fffffff)" ( (binary_expression "param_2 + 0x3fffffff" identifier + number_literal) )) * number_literal)) ))))) ;) (while_statement "while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }" { (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (if_statement "if (iVar1 < 0x101) {\n        return iVar2;\n      }" if (parenthesized_expression "(iVar1 < 0x101)" ( (binary_expression "iVar1 < 0x101" identifier < number_literal) )) (compound_statement "{\n        return iVar2;\n      }" { (return_statement "return iVar2;" return identifier ;) })) (if_statement "if (iVar1 < 0x104) break;" if (parenthesized_expression "(iVar1 < 0x104)" ( (binary_expression "iVar1 < 0x104" identifier < number_literal) )) (break_statement "break;" break ;)) (if_statement "if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }" if (parenthesized_expression "(1 < iVar1 - 0x105U)" ( (binary_expression "1 < iVar1 - 0x105U" number_literal < (binary_expression "iVar1 - 0x105U" identifier - number_literal)) )) (compound_statement "{\n        return iVar2;\n      }" { (return_statement "return iVar2;" return identifier ;) })) (expression_statement "iVar1 = FUN_0001da00(param_1,param_2 + -1);" (assignment_expression "iVar1 = FUN_0001da00(param_1,param_2 + -1)" identifier = (call_expression "FUN_0001da00(param_1,param_2 + -1)" identifier (argument_list "(param_1,param_2 + -1)" ( identifier , (binary_expression "param_2 + -1" identifier + number_literal) )))) ;) (expression_statement "param_2 = (param_2 + -1) - iVar1;" (assignment_expression "param_2 = (param_2 + -1) - iVar1" identifier = (binary_expression "(param_2 + -1) - iVar1" (parenthesized_expression "(param_2 + -1)" ( (binary_expression "param_2 + -1" identifier + number_literal) )) - identifier)) ;) (expression_statement "iVar2 = iVar2 + iVar1;" (assignment_expression "iVar2 = iVar2 + iVar1" identifier = (binary_expression "iVar2 + iVar1" identifier + identifier)) ;) (expression_statement "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" identifier = (pointer_expression "*(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" * (cast_expression "(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + (param_2 + 0x3fffffff) * 4)" ( (binary_expression "iVar3 + (param_2 + 0x3fffffff) * 4" identifier + (binary_expression "(param_2 + 0x3fffffff) * 4" (parenthesized_expression "(param_2 + 0x3fffffff)" ( (binary_expression "param_2 + 0x3fffffff" identifier + number_literal) )) * number_literal)) ))))) ;) })) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "size_t nsubtoks(dfa *dfa,size_t tindex)\n\n{\n  int iVar1;\n  size_t sVar2;\n  size_t sVar3;\n  token *ptVar4;\n  \n  sVar3 = 0;\n  ptVar4 = dfa->tokens;\n  do {\n    iVar1 = ptVar4[tindex + 0x3fffffff];\n    while( true ) {\n      sVar3 = sVar3 + 1;\n      if (iVar1 < 0x101) {\n        return sVar3;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return sVar3;\n      }\n      sVar2 = nsubtoks(dfa,tindex - 1);\n      tindex = (tindex - 1) - sVar2;\n      sVar3 = sVar3 + sVar2;\n      iVar1 = ptVar4[tindex + 0x3fffffff];\n    }\n    tindex = tindex - 1;\n  } while( true );\n}\n\n" (function_definition "size_t nsubtoks(dfa *dfa,size_t tindex)\n\n{\n  int iVar1;\n  size_t sVar2;\n  size_t sVar3;\n  token *ptVar4;\n  \n  sVar3 = 0;\n  ptVar4 = dfa->tokens;\n  do {\n    iVar1 = ptVar4[tindex + 0x3fffffff];\n    while( true ) {\n      sVar3 = sVar3 + 1;\n      if (iVar1 < 0x101) {\n        return sVar3;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return sVar3;\n      }\n      sVar2 = nsubtoks(dfa,tindex - 1);\n      tindex = (tindex - 1) - sVar2;\n      sVar3 = sVar3 + sVar2;\n      iVar1 = ptVar4[tindex + 0x3fffffff];\n    }\n    tindex = tindex - 1;\n  } while( true );\n}" primitive_type (function_declarator "nsubtoks(dfa *dfa,size_t tindex)" identifier (parameter_list "(dfa *dfa,size_t tindex)" ( (parameter_declaration "dfa *dfa" type_identifier (pointer_declarator "*dfa" * identifier)) , (parameter_declaration "size_t tindex" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  size_t sVar2;\n  size_t sVar3;\n  token *ptVar4;\n  \n  sVar3 = 0;\n  ptVar4 = dfa->tokens;\n  do {\n    iVar1 = ptVar4[tindex + 0x3fffffff];\n    while( true ) {\n      sVar3 = sVar3 + 1;\n      if (iVar1 < 0x101) {\n        return sVar3;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return sVar3;\n      }\n      sVar2 = nsubtoks(dfa,tindex - 1);\n      tindex = (tindex - 1) - sVar2;\n      sVar3 = sVar3 + sVar2;\n      iVar1 = ptVar4[tindex + 0x3fffffff];\n    }\n    tindex = tindex - 1;\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "size_t sVar2;" primitive_type identifier ;) (declaration "size_t sVar3;" primitive_type identifier ;) (declaration "token *ptVar4;" type_identifier (pointer_declarator "*ptVar4" * identifier) ;) (expression_statement "sVar3 = 0;" (assignment_expression "sVar3 = 0" identifier = number_literal) ;) (expression_statement "ptVar4 = dfa->tokens;" (assignment_expression "ptVar4 = dfa->tokens" identifier = (field_expression "dfa->tokens" identifier -> field_identifier)) ;) (do_statement "do {\n    iVar1 = ptVar4[tindex + 0x3fffffff];\n    while( true ) {\n      sVar3 = sVar3 + 1;\n      if (iVar1 < 0x101) {\n        return sVar3;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return sVar3;\n      }\n      sVar2 = nsubtoks(dfa,tindex - 1);\n      tindex = (tindex - 1) - sVar2;\n      sVar3 = sVar3 + sVar2;\n      iVar1 = ptVar4[tindex + 0x3fffffff];\n    }\n    tindex = tindex - 1;\n  } while( true );" do (compound_statement "{\n    iVar1 = ptVar4[tindex + 0x3fffffff];\n    while( true ) {\n      sVar3 = sVar3 + 1;\n      if (iVar1 < 0x101) {\n        return sVar3;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return sVar3;\n      }\n      sVar2 = nsubtoks(dfa,tindex - 1);\n      tindex = (tindex - 1) - sVar2;\n      sVar3 = sVar3 + sVar2;\n      iVar1 = ptVar4[tindex + 0x3fffffff];\n    }\n    tindex = tindex - 1;\n  }" { (expression_statement "iVar1 = ptVar4[tindex + 0x3fffffff];" (assignment_expression "iVar1 = ptVar4[tindex + 0x3fffffff]" identifier = (subscript_expression "ptVar4[tindex + 0x3fffffff]" identifier [ (binary_expression "tindex + 0x3fffffff" identifier + number_literal) ])) ;) (while_statement "while( true ) {\n      sVar3 = sVar3 + 1;\n      if (iVar1 < 0x101) {\n        return sVar3;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return sVar3;\n      }\n      sVar2 = nsubtoks(dfa,tindex - 1);\n      tindex = (tindex - 1) - sVar2;\n      sVar3 = sVar3 + sVar2;\n      iVar1 = ptVar4[tindex + 0x3fffffff];\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      sVar3 = sVar3 + 1;\n      if (iVar1 < 0x101) {\n        return sVar3;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return sVar3;\n      }\n      sVar2 = nsubtoks(dfa,tindex - 1);\n      tindex = (tindex - 1) - sVar2;\n      sVar3 = sVar3 + sVar2;\n      iVar1 = ptVar4[tindex + 0x3fffffff];\n    }" { (expression_statement "sVar3 = sVar3 + 1;" (assignment_expression "sVar3 = sVar3 + 1" identifier = (binary_expression "sVar3 + 1" identifier + number_literal)) ;) (if_statement "if (iVar1 < 0x101) {\n        return sVar3;\n      }" if (parenthesized_expression "(iVar1 < 0x101)" ( (binary_expression "iVar1 < 0x101" identifier < number_literal) )) (compound_statement "{\n        return sVar3;\n      }" { (return_statement "return sVar3;" return identifier ;) })) (if_statement "if (iVar1 < 0x104) break;" if (parenthesized_expression "(iVar1 < 0x104)" ( (binary_expression "iVar1 < 0x104" identifier < number_literal) )) (break_statement "break;" break ;)) (if_statement "if (1 < iVar1 - 0x105U) {\n        return sVar3;\n      }" if (parenthesized_expression "(1 < iVar1 - 0x105U)" ( (binary_expression "1 < iVar1 - 0x105U" number_literal < (binary_expression "iVar1 - 0x105U" identifier - number_literal)) )) (compound_statement "{\n        return sVar3;\n      }" { (return_statement "return sVar3;" return identifier ;) })) (expression_statement "sVar2 = nsubtoks(dfa,tindex - 1);" (assignment_expression "sVar2 = nsubtoks(dfa,tindex - 1)" identifier = (call_expression "nsubtoks(dfa,tindex - 1)" identifier (argument_list "(dfa,tindex - 1)" ( identifier , (binary_expression "tindex - 1" identifier - number_literal) )))) ;) (expression_statement "tindex = (tindex - 1) - sVar2;" (assignment_expression "tindex = (tindex - 1) - sVar2" identifier = (binary_expression "(tindex - 1) - sVar2" (parenthesized_expression "(tindex - 1)" ( (binary_expression "tindex - 1" identifier - number_literal) )) - identifier)) ;) (expression_statement "sVar3 = sVar3 + sVar2;" (assignment_expression "sVar3 = sVar3 + sVar2" identifier = (binary_expression "sVar3 + sVar2" identifier + identifier)) ;) (expression_statement "iVar1 = ptVar4[tindex + 0x3fffffff];" (assignment_expression "iVar1 = ptVar4[tindex + 0x3fffffff]" identifier = (subscript_expression "ptVar4[tindex + 0x3fffffff]" identifier [ (binary_expression "tindex + 0x3fffffff" identifier + number_literal) ])) ;) })) (expression_statement "tindex = tindex - 1;" (assignment_expression "tindex = tindex - 1" identifier = (binary_expression "tindex - 1" identifier - number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "int FUN_0001da00(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = 0;\n  iVar3 = *(int *)(param_1 + 0x298);\n  do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );\n}\n\n" (function_definition "int FUN_0001da00(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = 0;\n  iVar3 = *(int *)(param_1 + 0x298);\n  do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );\n}" primitive_type (function_declarator "FUN_0001da00(int param_1,int param_2)" identifier (parameter_list "(int param_1,int param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = 0;\n  iVar3 = *(int *)(param_1 + 0x298);\n  do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" identifier = number_literal) ;) (expression_statement "iVar3 = *(int *)(param_1 + 0x298);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x298)" identifier = (pointer_expression "*(int *)(param_1 + 0x298)" * (cast_expression "(int *)(param_1 + 0x298)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x298)" ( (binary_expression "param_1 + 0x298" identifier + number_literal) ))))) ;) (do_statement "do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );" do (compound_statement "{\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  }" { (expression_statement "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" identifier = (pointer_expression "*(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" * (cast_expression "(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + (param_2 + 0x3fffffff) * 4)" ( (binary_expression "iVar3 + (param_2 + 0x3fffffff) * 4" identifier + (binary_expression "(param_2 + 0x3fffffff) * 4" (parenthesized_expression "(param_2 + 0x3fffffff)" ( (binary_expression "param_2 + 0x3fffffff" identifier + number_literal) )) * number_literal)) ))))) ;) (while_statement "while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }" { (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" identifier = (binary_expression "iVar2 + 1" identifier + number_literal)) ;) (if_statement "if (iVar1 < 0x101) {\n        return iVar2;\n      }" if (parenthesized_expression "(iVar1 < 0x101)" ( (binary_expression "iVar1 < 0x101" identifier < number_literal) )) (compound_statement "{\n        return iVar2;\n      }" { (return_statement "return iVar2;" return identifier ;) })) (if_statement "if (iVar1 < 0x104) break;" if (parenthesized_expression "(iVar1 < 0x104)" ( (binary_expression "iVar1 < 0x104" identifier < number_literal) )) (break_statement "break;" break ;)) (if_statement "if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }" if (parenthesized_expression "(1 < iVar1 - 0x105U)" ( (binary_expression "1 < iVar1 - 0x105U" number_literal < (binary_expression "iVar1 - 0x105U" identifier - number_literal)) )) (compound_statement "{\n        return iVar2;\n      }" { (return_statement "return iVar2;" return identifier ;) })) (expression_statement "iVar1 = FUN_0001da00(param_1,param_2 + -1);" (assignment_expression "iVar1 = FUN_0001da00(param_1,param_2 + -1)" identifier = (call_expression "FUN_0001da00(param_1,param_2 + -1)" identifier (argument_list "(param_1,param_2 + -1)" ( identifier , (binary_expression "param_2 + -1" identifier + number_literal) )))) ;) (expression_statement "param_2 = (param_2 + -1) - iVar1;" (assignment_expression "param_2 = (param_2 + -1) - iVar1" identifier = (binary_expression "(param_2 + -1) - iVar1" (parenthesized_expression "(param_2 + -1)" ( (binary_expression "param_2 + -1" identifier + number_literal) )) - identifier)) ;) (expression_statement "iVar2 = iVar2 + iVar1;" (assignment_expression "iVar2 = iVar2 + iVar1" identifier = (binary_expression "iVar2 + iVar1" identifier + identifier)) ;) (expression_statement "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" identifier = (pointer_expression "*(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" * (cast_expression "(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + (param_2 + 0x3fffffff) * 4)" ( (binary_expression "iVar3 + (param_2 + 0x3fffffff) * 4" identifier + (binary_expression "(param_2 + 0x3fffffff) * 4" (parenthesized_expression "(param_2 + 0x3fffffff)" ( (binary_expression "param_2 + 0x3fffffff" identifier + number_literal) )) * number_literal)) ))))) ;) })) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" identifier = (binary_expression "param_2 + -1" identifier + number_literal)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_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 IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ))))) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) * LIT)) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "int FUN_0001da00(int param_1,int param_2)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = 0;\n  iVar3 = *(int *)(param_1 + 0x298);\n  do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );\n}" (primitive_type "int") (function_declarator "FUN_0001da00(int param_1,int param_2)" (identifier "FUN_0001da00") (parameter_list "(int param_1,int param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar2 = 0;\n  iVar3 = *(int *)(param_1 + 0x298);\n  do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (expression_statement "iVar2 = 0;" (assignment_expression "iVar2 = 0" (identifier "iVar2") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar3 = *(int *)(param_1 + 0x298);" (assignment_expression "iVar3 = *(int *)(param_1 + 0x298)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(param_1 + 0x298)" (* "*") (cast_expression "(int *)(param_1 + 0x298)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x298)" (( "(") (binary_expression "param_1 + 0x298" (identifier "param_1") (+ "+") (number_literal "0x298")) () ")"))))) (; ";")) (do_statement "do {\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  } while( true );" (do "do") (compound_statement "{\n    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }\n    param_2 = param_2 + -1;\n  }" ({ "{") (expression_statement "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" (* "*") (cast_expression "(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + (param_2 + 0x3fffffff) * 4)" (( "(") (binary_expression "iVar3 + (param_2 + 0x3fffffff) * 4" (identifier "iVar3") (+ "+") (binary_expression "(param_2 + 0x3fffffff) * 4" (parenthesized_expression "(param_2 + 0x3fffffff)" (( "(") (binary_expression "param_2 + 0x3fffffff" (identifier "param_2") (+ "+") (number_literal "0x3fffffff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (while_statement "while( true ) {\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      iVar2 = iVar2 + 1;\n      if (iVar1 < 0x101) {\n        return iVar2;\n      }\n      if (iVar1 < 0x104) break;\n      if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }\n      iVar1 = FUN_0001da00(param_1,param_2 + -1);\n      param_2 = (param_2 + -1) - iVar1;\n      iVar2 = iVar2 + iVar1;\n      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);\n    }" ({ "{") (expression_statement "iVar2 = iVar2 + 1;" (assignment_expression "iVar2 = iVar2 + 1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + 1" (identifier "iVar2") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (iVar1 < 0x101) {\n        return iVar2;\n      }" (if "if") (parenthesized_expression "(iVar1 < 0x101)" (( "(") (binary_expression "iVar1 < 0x101" (identifier "iVar1") (< "<") (number_literal "0x101")) () ")")) (compound_statement "{\n        return iVar2;\n      }" ({ "{") (return_statement "return iVar2;" (return "return") (identifier "iVar2") (; ";")) (} "}"))) (if_statement "if (iVar1 < 0x104) break;" (if "if") (parenthesized_expression "(iVar1 < 0x104)" (( "(") (binary_expression "iVar1 < 0x104" (identifier "iVar1") (< "<") (number_literal "0x104")) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (1 < iVar1 - 0x105U) {\n        return iVar2;\n      }" (if "if") (parenthesized_expression "(1 < iVar1 - 0x105U)" (( "(") (binary_expression "1 < iVar1 - 0x105U" (number_literal "1") (< "<") (binary_expression "iVar1 - 0x105U" (identifier "iVar1") (- "-") (number_literal "0x105U"))) () ")")) (compound_statement "{\n        return iVar2;\n      }" ({ "{") (return_statement "return iVar2;" (return "return") (identifier "iVar2") (; ";")) (} "}"))) (expression_statement "iVar1 = FUN_0001da00(param_1,param_2 + -1);" (assignment_expression "iVar1 = FUN_0001da00(param_1,param_2 + -1)" (identifier "iVar1") (= "=") (call_expression "FUN_0001da00(param_1,param_2 + -1)" (identifier "FUN_0001da00") (argument_list "(param_1,param_2 + -1)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_2 + -1" (identifier "param_2") (+ "+") (number_literal "-1")) () ")")))) (; ";")) (expression_statement "param_2 = (param_2 + -1) - iVar1;" (assignment_expression "param_2 = (param_2 + -1) - iVar1" (identifier "param_2") (= "=") (binary_expression "(param_2 + -1) - iVar1" (parenthesized_expression "(param_2 + -1)" (( "(") (binary_expression "param_2 + -1" (identifier "param_2") (+ "+") (number_literal "-1")) () ")")) (- "-") (identifier "iVar1"))) (; ";")) (expression_statement "iVar2 = iVar2 + iVar1;" (assignment_expression "iVar2 = iVar2 + iVar1" (identifier "iVar2") (= "=") (binary_expression "iVar2 + iVar1" (identifier "iVar2") (+ "+") (identifier "iVar1"))) (; ";")) (expression_statement "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);" (assignment_expression "iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" (* "*") (cast_expression "(int *)(iVar3 + (param_2 + 0x3fffffff) * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + (param_2 + 0x3fffffff) * 4)" (( "(") (binary_expression "iVar3 + (param_2 + 0x3fffffff) * 4" (identifier "iVar3") (+ "+") (binary_expression "(param_2 + 0x3fffffff) * 4" (parenthesized_expression "(param_2 + 0x3fffffff)" (( "(") (binary_expression "param_2 + 0x3fffffff" (identifier "param_2") (+ "+") (number_literal "0x3fffffff")) () ")")) (* "*") (number_literal "4"))) () ")"))))) (; ";")) (} "}"))) (expression_statement "param_2 = param_2 + -1;" (assignment_expression "param_2 = param_2 + -1" (identifier "param_2") (= "=") (binary_expression "param_2 + -1" (identifier "param_2") (+ "+") (number_literal "-1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))
(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)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (true))))))

int MASKED(int param_1,int param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  
  iVar2 = 0;
  iVar3 = *(int *)(param_1 + 0x298);
  do {
    iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);
    while( true ) {
      iVar2 = iVar2 + 1;
      if (iVar1 < 0x101) {
        return iVar2;
      }
      if (iVar1 < 0x104) break;
      if (1 < iVar1 - 0x105U) {
        return iVar2;
      }
      iVar1 = MASKED(param_1,param_2 + -1);
      param_2 = (param_2 + -1) - iVar1;
      iVar2 = iVar2 + iVar1;
      iVar1 = *(int *)(iVar3 + (param_2 + 0x3fffffff) * 4);
    }
    param_2 = param_2 + -1;
  } while( true );
}

