
/* DWARF original prototype: void build_lookup_tables(Version_script_info * this) */

void __thiscall gold::Version_script_info::build_lookup_tables(Version_script_info *this)

{
  Version_tree *v;
  pointer ppVVar1;
  int iVar2;
  int iVar3;
  
  ppVVar1 = (this->version_trees_).
            super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl.
            _M_start;
  iVar2 = (int)(this->version_trees_).
               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl
               ._M_finish - (int)ppVVar1 >> 2;
  if (iVar2 != 0) {
    iVar3 = 0;
    while( true ) {
      v = ppVVar1[iVar3];
      iVar3 = iVar3 + 1;
      build_expression_list_lookup(this,v->local,v,false);
      build_expression_list_lookup(this,v->global,v,true);
      if (iVar3 == iVar2) break;
      ppVVar1 = (this->version_trees_).
                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.
                _M_impl._M_start;
    }
  }
  return;
}



void FUN_0016ed30(int param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  
  iVar1 = *(int *)(param_1 + 0x18);
  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;
  if (iVar2 != 0) {
    iVar3 = 0;
    while( true ) {
      iVar1 = *(int *)(iVar1 + iVar3 * 4);
      iVar3 = iVar3 + 1;
      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);
      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);
      if (iVar3 == iVar2) break;
      iVar1 = *(int *)(param_1 + 0x18);
    }
  }
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0xc
MOV EDI,dword ptr [ESP + 0x20]
MOV EAX,dword ptr [EDI + 0x18]
MOV EBP,dword ptr [EDI + 0x1c]
SUB EBP,EAX
SAR EBP,0x2
JZ 0x0016ed7b
XOR ESI,ESI
JMP 0x0016ed53
MOV EAX,dword ptr [EDI + 0x18]
MOV EBX,dword ptr [EAX + ESI*0x4]
PUSH 0x0
ADD ESI,0x1
PUSH EBX
PUSH dword ptr [EBX + 0x1c]
PUSH EDI
CALL 0x0016eaa0
ADD ESP,0x10
PUSH 0x1
PUSH EBX
PUSH dword ptr [EBX + 0x18]
PUSH EDI
CALL 0x0016eaa0
ADD ESP,0x10
CMP ESI,EBP
JNZ 0x0016ed50
ADD ESP,0xc
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "void FUN_0016ed30(int param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar1 = *(int *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0016ed30(int param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar1 = *(int *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0016ed30(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar1 = *(int *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x18);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;" (assignment_expression "iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2" identifier = (binary_expression "*(int *)(param_1 + 0x1c) - iVar1 >> 2" (binary_expression "*(int *)(param_1 + 0x1c) - iVar1" (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) - identifier) >> number_literal)) ;) (if_statement "if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (while_statement "while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }" { (expression_statement "iVar1 = *(int *)(iVar1 + iVar3 * 4);" (assignment_expression "iVar1 = *(int *)(iVar1 + iVar3 * 4)" identifier = (pointer_expression "*(int *)(iVar1 + iVar3 * 4)" * (cast_expression "(int *)(iVar1 + iVar3 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + iVar3 * 4)" ( (binary_expression "iVar1 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);" (call_expression "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0)" identifier (argument_list "(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0)" ( identifier , (pointer_expression "*(undefined4 *)(iVar1 + 0x1c)" * (cast_expression "(undefined4 *)(iVar1 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x1c)" ( (binary_expression "iVar1 + 0x1c" identifier + number_literal) )))) , identifier , number_literal ))) ;) (expression_statement "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);" (call_expression "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1)" identifier (argument_list "(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1)" ( identifier , (pointer_expression "*(undefined4 *)(iVar1 + 0x18)" * (cast_expression "(undefined4 *)(iVar1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x18)" ( (binary_expression "iVar1 + 0x18" identifier + number_literal) )))) , identifier , number_literal ))) ;) (if_statement "if (iVar3 == iVar2) break;" if (parenthesized_expression "(iVar3 == iVar2)" ( (binary_expression "iVar3 == iVar2" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "iVar1 = *(int *)(param_1 + 0x18);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void build_lookup_tables(Version_script_info * this) */\n\nvoid __thiscall gold::Version_script_info::build_lookup_tables(Version_script_info *this)\n\n{\n  Version_tree *v;\n  pointer ppVVar1;\n  int iVar2;\n  int iVar3;\n  \n  ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl.\n            _M_start;\n  iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl\n               ._M_finish - (int)ppVVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      v = ppVVar1[iVar3];\n      iVar3 = iVar3 + 1;\n      build_expression_list_lookup(this,v->local,v,false);\n      build_expression_list_lookup(this,v->global,v,true);\n      if (iVar3 == iVar2) break;\n      ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl._M_start;\n    }\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall gold::Version_script_info::build_lookup_tables(Version_script_info *this)\n\n{\n  Version_tree *v;\n  pointer ppVVar1;\n  int iVar2;\n  int iVar3;\n  \n  ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl.\n            _M_start;\n  iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl\n               ._M_finish - (int)ppVVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      v = ppVVar1[iVar3];\n      iVar3 = iVar3 + 1;\n      build_expression_list_lookup(this,v->local,v,false);\n      build_expression_list_lookup(this,v->global,v,true);\n      if (iVar3 == iVar2) break;\n      ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl._M_start;\n    }\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Version_script_info::" identifier : : identifier : :) (function_declarator "build_lookup_tables(Version_script_info *this)" identifier (parameter_list "(Version_script_info *this)" ( (parameter_declaration "Version_script_info *this" type_identifier (pointer_declarator "*this" * identifier)) ))) (compound_statement "{\n  Version_tree *v;\n  pointer ppVVar1;\n  int iVar2;\n  int iVar3;\n  \n  ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl.\n            _M_start;\n  iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl\n               ._M_finish - (int)ppVVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      v = ppVVar1[iVar3];\n      iVar3 = iVar3 + 1;\n      build_expression_list_lookup(this,v->local,v,false);\n      build_expression_list_lookup(this,v->global,v,true);\n      if (iVar3 == iVar2) break;\n      ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl._M_start;\n    }\n  }\n  return;\n}" { (declaration "Version_tree *v;" type_identifier (pointer_declarator "*v" * identifier) ;) (declaration "pointer ppVVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl.\n            _M_start;" (field_expression "ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl.\n            _M_start" (field_expression "ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl" (binary_expression "ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_" (binary_expression "ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold::Version_tree*,_std::allocator<gold" (binary_expression "ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold::Version_tree*,_std" (assignment_expression "ppVVar1 = (this->version_trees_).\n            super__Vector_base<gold" identifier = (binary_expression "(this->version_trees_).\n            super__Vector_base<gold" (field_expression "(this->version_trees_).\n            super__Vector_base" (parenthesized_expression "(this->version_trees_)" ( (field_expression "this->version_trees_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Version_tree" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Version_tree" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (expression_statement "iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl\n               ._M_finish - (int)ppVVar1 >> 2;" (binary_expression "iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl\n               ._M_finish - (int)ppVVar1 >> 2" (binary_expression "iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl\n               ._M_finish - (int)ppVVar1" (field_expression "iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl\n               ._M_finish" (field_expression "iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>._M_impl" (binary_expression "iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_" (binary_expression "iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std::allocator<gold" (binary_expression "iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold::Version_tree*,_std" (assignment_expression "iVar2 = (int)(this->version_trees_).\n               super__Vector_base<gold" identifier = (binary_expression "(int)(this->version_trees_).\n               super__Vector_base<gold" (cast_expression "(int)(this->version_trees_).\n               super__Vector_base" ( (type_descriptor "int" primitive_type) ) (field_expression "(this->version_trees_).\n               super__Vector_base" (parenthesized_expression "(this->version_trees_)" ( (field_expression "this->version_trees_" identifier -> field_identifier) )) . field_identifier)) < identifier)) (ERROR "::Version_tree" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Version_tree" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) - (cast_expression "(int)ppVVar1" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) ;) (if_statement "if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      v = ppVVar1[iVar3];\n      iVar3 = iVar3 + 1;\n      build_expression_list_lookup(this,v->local,v,false);\n      build_expression_list_lookup(this,v->global,v,true);\n      if (iVar3 == iVar2) break;\n      ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl._M_start;\n    }\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar3 = 0;\n    while( true ) {\n      v = ppVVar1[iVar3];\n      iVar3 = iVar3 + 1;\n      build_expression_list_lookup(this,v->local,v,false);\n      build_expression_list_lookup(this,v->global,v,true);\n      if (iVar3 == iVar2) break;\n      ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl._M_start;\n    }\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (while_statement "while( true ) {\n      v = ppVVar1[iVar3];\n      iVar3 = iVar3 + 1;\n      build_expression_list_lookup(this,v->local,v,false);\n      build_expression_list_lookup(this,v->global,v,true);\n      if (iVar3 == iVar2) break;\n      ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl._M_start;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      v = ppVVar1[iVar3];\n      iVar3 = iVar3 + 1;\n      build_expression_list_lookup(this,v->local,v,false);\n      build_expression_list_lookup(this,v->global,v,true);\n      if (iVar3 == iVar2) break;\n      ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl._M_start;\n    }" { (expression_statement "v = ppVVar1[iVar3];" (assignment_expression "v = ppVVar1[iVar3]" identifier = (subscript_expression "ppVVar1[iVar3]" identifier [ identifier ])) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "build_expression_list_lookup(this,v->local,v,false);" (call_expression "build_expression_list_lookup(this,v->local,v,false)" identifier (argument_list "(this,v->local,v,false)" ( identifier , (field_expression "v->local" identifier -> field_identifier) , identifier , false ))) ;) (expression_statement "build_expression_list_lookup(this,v->global,v,true);" (call_expression "build_expression_list_lookup(this,v->global,v,true)" identifier (argument_list "(this,v->global,v,true)" ( identifier , (field_expression "v->global" identifier -> field_identifier) , identifier , true ))) ;) (if_statement "if (iVar3 == iVar2) break;" if (parenthesized_expression "(iVar3 == iVar2)" ( (binary_expression "iVar3 == iVar2" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl._M_start;" (field_expression "ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl._M_start" (field_expression "ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_>.\n                _M_impl" (binary_expression "ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold::Version_tree*>_" (binary_expression "ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std::allocator<gold" (binary_expression "ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold::Version_tree*,_std" (assignment_expression "ppVVar1 = (this->version_trees_).\n                super__Vector_base<gold" identifier = (binary_expression "(this->version_trees_).\n                super__Vector_base<gold" (field_expression "(this->version_trees_).\n                super__Vector_base" (parenthesized_expression "(this->version_trees_)" ( (field_expression "this->version_trees_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Version_tree" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Version_tree" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) })) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_0016ed30(int param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar1 = *(int *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_0016ed30(int param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar1 = *(int *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_0016ed30(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar1 = *(int *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (expression_statement "iVar1 = *(int *)(param_1 + 0x18);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;" (assignment_expression "iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2" identifier = (binary_expression "*(int *)(param_1 + 0x1c) - iVar1 >> 2" (binary_expression "*(int *)(param_1 + 0x1c) - iVar1" (pointer_expression "*(int *)(param_1 + 0x1c)" * (cast_expression "(int *)(param_1 + 0x1c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x1c)" ( (binary_expression "param_1 + 0x1c" identifier + number_literal) )))) - identifier) >> number_literal)) ;) (if_statement "if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }" if (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (while_statement "while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }" { (expression_statement "iVar1 = *(int *)(iVar1 + iVar3 * 4);" (assignment_expression "iVar1 = *(int *)(iVar1 + iVar3 * 4)" identifier = (pointer_expression "*(int *)(iVar1 + iVar3 * 4)" * (cast_expression "(int *)(iVar1 + iVar3 * 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + iVar3 * 4)" ( (binary_expression "iVar1 + iVar3 * 4" identifier + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);" (call_expression "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0)" identifier (argument_list "(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0)" ( identifier , (pointer_expression "*(undefined4 *)(iVar1 + 0x1c)" * (cast_expression "(undefined4 *)(iVar1 + 0x1c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x1c)" ( (binary_expression "iVar1 + 0x1c" identifier + number_literal) )))) , identifier , number_literal ))) ;) (expression_statement "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);" (call_expression "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1)" identifier (argument_list "(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1)" ( identifier , (pointer_expression "*(undefined4 *)(iVar1 + 0x18)" * (cast_expression "(undefined4 *)(iVar1 + 0x18)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x18)" ( (binary_expression "iVar1 + 0x18" identifier + number_literal) )))) , identifier , number_literal ))) ;) (if_statement "if (iVar3 == iVar2) break;" if (parenthesized_expression "(iVar3 == iVar2)" ( (binary_expression "iVar3 == iVar2" identifier == identifier) )) (break_statement "break;" break ;)) (expression_statement "iVar1 = *(int *)(param_1 + 0x18);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x18)" identifier = (pointer_expression "*(int *)(param_1 + 0x18)" * (cast_expression "(int *)(param_1 + 0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) ))))) ;) })) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_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 (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT) >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) })) (return_statement return ;) })))
(function_definition "void FUN_0016ed30(int param_1)\n\n{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar1 = *(int *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_0016ed30(int param_1)" (identifier "FUN_0016ed30") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  int iVar1;\n  int iVar2;\n  int iVar3;\n  \n  iVar1 = *(int *)(param_1 + 0x18);\n  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;\n  if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }\n  return;\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 "iVar1 = *(int *)(param_1 + 0x18);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x18)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;" (assignment_expression "iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2" (identifier "iVar2") (= "=") (binary_expression "*(int *)(param_1 + 0x1c) - iVar1 >> 2" (binary_expression "*(int *)(param_1 + 0x1c) - iVar1" (pointer_expression "*(int *)(param_1 + 0x1c)" (* "*") (cast_expression "(int *)(param_1 + 0x1c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x1c)" (( "(") (binary_expression "param_1 + 0x1c" (identifier "param_1") (+ "+") (number_literal "0x1c")) () ")")))) (- "-") (identifier "iVar1")) (>> ">>") (number_literal "2"))) (; ";")) (if_statement "if (iVar2 != 0) {\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }" (if "if") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    iVar3 = 0;\n    while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }\n  }" ({ "{") (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (while_statement "while( true ) {\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      iVar1 = *(int *)(iVar1 + iVar3 * 4);\n      iVar3 = iVar3 + 1;\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);\n      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);\n      if (iVar3 == iVar2) break;\n      iVar1 = *(int *)(param_1 + 0x18);\n    }" ({ "{") (expression_statement "iVar1 = *(int *)(iVar1 + iVar3 * 4);" (assignment_expression "iVar1 = *(int *)(iVar1 + iVar3 * 4)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(iVar1 + iVar3 * 4)" (* "*") (cast_expression "(int *)(iVar1 + iVar3 * 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + iVar3 * 4)" (( "(") (binary_expression "iVar1 + iVar3 * 4" (identifier "iVar1") (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")"))))) (; ";")) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);" (call_expression "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0)" (identifier "FUN_0016eaa0") (argument_list "(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0)" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(iVar1 + 0x1c)" (* "*") (cast_expression "(undefined4 *)(iVar1 + 0x1c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x1c)" (( "(") (binary_expression "iVar1 + 0x1c" (identifier "iVar1") (+ "+") (number_literal "0x1c")) () ")")))) (, ",") (identifier "iVar1") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);" (call_expression "FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1)" (identifier "FUN_0016eaa0") (argument_list "(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1)" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined4 *)(iVar1 + 0x18)" (* "*") (cast_expression "(undefined4 *)(iVar1 + 0x18)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x18)" (( "(") (binary_expression "iVar1 + 0x18" (identifier "iVar1") (+ "+") (number_literal "0x18")) () ")")))) (, ",") (identifier "iVar1") (, ",") (number_literal "1") () ")"))) (; ";")) (if_statement "if (iVar3 == iVar2) break;" (if "if") (parenthesized_expression "(iVar3 == iVar2)" (( "(") (binary_expression "iVar3 == iVar2" (identifier "iVar3") (== "==") (identifier "iVar2")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar1 = *(int *)(param_1 + 0x18);" (assignment_expression "iVar1 = *(int *)(param_1 + 0x18)" (identifier "iVar1") (= "=") (pointer_expression "*(int *)(param_1 + 0x18)" (* "*") (cast_expression "(int *)(param_1 + 0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (} "}"))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void build_lookup_tables(Version_script_info * this) */

void __thiscall var_1::type_1::function_1(type_1 *this)

{
  type_2 *v;
  type_3 ppVVar1;
  int var_4;
  int var_5;
  
  ppVVar1 = (this->version_trees_).
            super__Vector_base<var_1::type_2*,var_2::allocator<var_1::type_2*>var_3>._M_impl.
            _M_start;
  var_4 = (int)(this->version_trees_).
               super__Vector_base<var_1::type_2*,var_2::allocator<var_1::type_2*>var_3>._M_impl
               ._M_finish - (int)ppVVar1 >> 2;
  if (var_4 != 0) {
    var_5 = 0;
    while( true ) {
      v = ppVVar1[var_5];
      var_5 = var_5 + 1;
      var_6(this,v->local,v,false);
      var_6(this,v->global,v,true);
      if (var_5 == var_4) break;
      ppVVar1 = (this->version_trees_).
                super__Vector_base<var_1::type_2*,var_2::allocator<var_1::type_2*>var_3>.
                _M_impl._M_start;
    }
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (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: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (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)) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (while_statement condition: (parenthesized_expression (true)) 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: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (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: (identifier) right: (number_literal))))) (identifier) (number_literal)))) (expression_statement (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: (identifier) right: (number_literal))))) (identifier) (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_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: (number_literal))))))))))) (return_statement))))

void MASKED(int param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  
  iVar1 = *(int *)(param_1 + 0x18);
  iVar2 = *(int *)(param_1 + 0x1c) - iVar1 >> 2;
  if (iVar2 != 0) {
    iVar3 = 0;
    while( true ) {
      iVar1 = *(int *)(iVar1 + iVar3 * 4);
      iVar3 = iVar3 + 1;
      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x1c),iVar1,0);
      FUN_0016eaa0(param_1,*(undefined4 *)(iVar1 + 0x18),iVar1,1);
      if (iVar3 == iVar2) break;
      iVar1 = *(int *)(param_1 + 0x18);
    }
  }
  return;
}

