
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void ~Plugin_manager(Plugin_manager * this, int __in_chrg) */

void __thiscall gold::Plugin_manager::~Plugin_manager(Plugin_manager *this,int __in_chrg)

{
  void *pvVar1;
  undefined4 *puVar2;
  Plugin_manager *pPVar3;
  Object *pOVar4;
  pointer ppOVar5;
  Lock *this_00;
  _Hash_node_base *p_Var6;
  __bucket_type *pp_Var7;
  pointer pcVar8;
  pointer ppSVar9;
  pointer pRVar10;
  pointer ppRVar11;
  _Hash_node_base *p_Var12;
  Plugin_manager *pPVar13;
  undefined4 *puVar14;
  pointer ppOVar15;
  int in_stack_ffffffc8;
  
  pPVar13 = (Plugin_manager *)
            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl
            ._M_node.super__List_node_base._M_next;
  if (pPVar13 != this) {
    do {
      pvVar1 = (void *)(pPVar13->plugins_).
                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.
                       _M_node._M_size;
      if (pvVar1 != (void *)0x0) {
        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);
        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);
        if (puVar2 != puVar14) {
          do {
            if ((undefined4 *)*puVar14 != puVar14 + 2) {
              operator_delete((undefined4 *)*puVar14);
            }
            puVar14 = puVar14 + 6;
          } while (puVar2 != puVar14);
          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);
        }
        if (puVar14 != (undefined4 *)0x0) {
          operator_delete(puVar14);
        }
        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {
          operator_delete(*(void **)((int)pvVar1 + 4));
        }
        in_stack_ffffffc8 = 0x3c;
        operator_delete(pvVar1,0x3c);
      }
      pPVar13 = (Plugin_manager *)
                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.
                _M_impl._M_node.super__List_node_base._M_next;
    } while (pPVar13 != this);
    pPVar13 = (Plugin_manager *)
              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.
              _M_impl._M_node.super__List_node_base._M_next;
    while (pPVar13 != this) {
      pPVar3 = (Plugin_manager *)
               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.
               _M_impl._M_node.super__List_node_base._M_next;
      operator_delete(pPVar13);
      pPVar13 = pPVar3;
    }
  }
  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.
  super__List_node_base._M_prev = (_List_node_base *)this;
  ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.
             _M_impl._M_start;
  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.
  super__List_node_base._M_next = (_List_node_base *)this;
  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.
  _M_size = 0;
  if (ppOVar15 !=
      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.
      _M_finish) {
    do {
      pOVar4 = *ppOVar15;
      if (pOVar4 != (Object *)0x0) {
        (*pOVar4->_vptr_Object[1])(pOVar4);
      }
      ppOVar15 = ppOVar15 + 1;
    } while ((this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.
             _M_impl._M_finish != ppOVar15);
    ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.
              _M_impl._M_start;
    if (ppOVar5 != ppOVar15) {
      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.
      _M_finish = ppOVar5;
    }
  }
  this_00 = this->lock_;
  if (this_00 != (Lock *)0x0) {
    Lock::~Lock(this_00,in_stack_ffffffc8);
    operator_delete(this_00,4);
  }
  operator_delete(this->recorder_,0xc);
  p_Var12 = (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt;
  while (p_Var12 != (_Hash_node_base *)0x0) {
    p_Var6 = p_Var12->_M_nxt;
    if (p_Var12[1]._M_nxt != p_Var12 + 3) {
      operator_delete(p_Var12[1]._M_nxt);
    }
    operator_delete(p_Var12);
    p_Var12 = p_Var6;
  }
  memset((this->defsym_defines_set_)._M_h._M_buckets,0,
         (this->defsym_defines_set_)._M_h._M_bucket_count << 2);
  pp_Var7 = (this->defsym_defines_set_)._M_h._M_buckets;
  (this->defsym_defines_set_)._M_h._M_element_count = 0;
  (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt = (_Hash_node_base *)0x0;
  if (pp_Var7 != &(this->defsym_defines_set_)._M_h._M_single_bucket) {
    operator_delete(pp_Var7);
  }
  pcVar8 = (this->extra_search_path_)._M_dataplus._M_p;
  if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9
       *)pcVar8 != &(this->extra_search_path_).field_2) {
    operator_delete(pcVar8);
  }
  ppSVar9 = (this->undefined_symbols_).
            super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl._M_start;
  if (ppSVar9 != (pointer)0x0) {
    operator_delete(ppSVar9);
  }
  pRVar10 = (this->rescannable_).
            super__Vector_base<gold::Plugin_manager::Rescannable,_std::allocator<gold::Plugin_manager::Rescannable>_>
            ._M_impl._M_start;
  if (pRVar10 != (pointer)0x0) {
    operator_delete(pRVar10);
  }
  ppRVar11 = (this->deferred_layout_objects_).
             super__Vector_base<gold::Relobj*,_std::allocator<gold::Relobj*>_>._M_impl._M_start;
  if (ppRVar11 != (pointer)0x0) {
    operator_delete(ppRVar11);
  }
  ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.
             _M_impl._M_start;
  if (ppOVar15 != (pointer)0x0) {
    operator_delete(ppOVar15);
  }
  pPVar13 = (Plugin_manager *)
            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl
            ._M_node.super__List_node_base._M_next;
  while (pPVar13 != this) {
    pPVar3 = (Plugin_manager *)
             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.
             _M_impl._M_node.super__List_node_base._M_next;
    operator_delete(pPVar13);
    pPVar13 = pPVar3;
  }
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void FUN_000ef8c0(int *param_1)

{
  int iVar1;
  int *piVar2;
  undefined4 *puVar3;
  undefined4 *puVar4;
  int *piVar5;
  int *piVar6;
  
  piVar5 = (int *)*param_1;
  if (piVar5 != param_1) {
    do {
      iVar1 = piVar5[2];
      if (iVar1 != 0) {
        piVar2 = *(int **)(iVar1 + 0x20);
        piVar6 = *(int **)(iVar1 + 0x1c);
        if (piVar2 != piVar6) {
          do {
            if ((int *)*piVar6 != piVar6 + 2) {
              FUN_001807a0((int *)*piVar6);
            }
            piVar6 = piVar6 + 6;
          } while (piVar2 != piVar6);
          piVar6 = *(int **)(iVar1 + 0x1c);
        }
        if (piVar6 != (int *)0x0) {
          FUN_001807a0(piVar6);
        }
        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {
          FUN_001807a0(*(int *)(iVar1 + 4));
        }
        FUN_00180780(iVar1,0x3c);
      }
      piVar5 = (int *)*piVar5;
    } while (piVar5 != param_1);
    piVar5 = (int *)*param_1;
    while (piVar5 != param_1) {
      piVar2 = (int *)*piVar5;
      FUN_001807a0(piVar5);
      piVar5 = piVar2;
    }
  }
  param_1[1] = (int)param_1;
  piVar5 = (int *)param_1[4];
  *param_1 = (int)param_1;
  param_1[2] = 0;
  if (piVar5 != (int *)param_1[5]) {
    do {
      piVar2 = (int *)*piVar5;
      if (piVar2 != (int *)0x0) {
        (**(code **)(*piVar2 + 4))(piVar2);
      }
      piVar5 = piVar5 + 1;
    } while ((int *)param_1[5] != piVar5);
    if ((int *)param_1[4] != piVar5) {
      param_1[5] = param_1[4];
    }
  }
  iVar1 = param_1[0x28];
  if (iVar1 != 0) {
    FUN_00061fe0(iVar1);
    FUN_00180780(iVar1,4);
  }
  FUN_00180780(param_1[0x35],0xc);
  puVar4 = (undefined4 *)param_1[0x30];
  while (puVar4 != (undefined4 *)0x0) {
    puVar3 = (undefined4 *)*puVar4;
    if ((undefined4 *)puVar4[1] != puVar4 + 3) {
      FUN_001807a0((undefined4 *)puVar4[1]);
    }
    FUN_001807a0(puVar4);
    puVar4 = puVar3;
  }
  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);
  param_1[0x31] = 0;
  param_1[0x30] = 0;
  if ((int *)param_1[0x2e] != param_1 + 0x34) {
    FUN_001807a0((int *)param_1[0x2e]);
  }
  if ((int *)param_1[0x22] != param_1 + 0x24) {
    FUN_001807a0((int *)param_1[0x22]);
  }
  if (param_1[0x15] != 0) {
    FUN_001807a0(param_1[0x15]);
  }
  if (param_1[0x12] != 0) {
    FUN_001807a0(param_1[0x12]);
  }
  if (param_1[7] != 0) {
    FUN_001807a0(param_1[7]);
  }
  if (param_1[4] != 0) {
    FUN_001807a0(param_1[4]);
  }
  piVar5 = (int *)*param_1;
  while (piVar5 != param_1) {
    piVar2 = (int *)*piVar5;
    FUN_001807a0(piVar5);
    piVar5 = piVar2;
  }
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00032730
ADD EBX,0x212737
SUB ESP,0x1c
MOV EDI,dword ptr [ESP + 0x30]
MOV EBP,dword ptr [EDI]
CMP EBP,EDI
JZ 0x000ef974
MOV EDI,dword ptr [EBP + 0x8]
TEST EDI,EDI
JZ 0x000ef94d
MOV EAX,dword ptr [EDI + 0x20]
MOV ESI,dword ptr [EDI + 0x1c]
MOV dword ptr [ESP + 0xc],EAX
CMP EAX,ESI
JZ 0x000ef919
LEA ESI,[ESI]
MOV EDX,dword ptr [ESI]
LEA ECX,[ESI + 0x8]
CMP EDX,ECX
JZ 0x000ef90d
SUB ESP,0xc
PUSH EDX
CALL 0x001807a0
ADD ESP,0x10
ADD ESI,0x18
CMP dword ptr [ESP + 0xc],ESI
JNZ 0x000ef8f8
MOV ESI,dword ptr [EDI + 0x1c]
TEST ESI,ESI
JZ 0x000ef929
SUB ESP,0xc
PUSH ESI
CALL 0x001807a0
ADD ESP,0x10
MOV EDX,dword ptr [EDI + 0x4]
LEA ECX,[EDI + 0xc]
CMP EDX,ECX
JZ 0x000ef93f
SUB ESP,0xc
PUSH EDX
CALL 0x001807a0
ADD ESP,0x10
SUB ESP,0x8
PUSH 0x3c
PUSH EDI
CALL 0x00180780
ADD ESP,0x10
MOV EBP,dword ptr [EBP]
CMP EBP,dword ptr [ESP + 0x30]
JNZ 0x000ef8e0
MOV EDI,dword ptr [ESP + 0x30]
MOV EAX,dword ptr [EDI]
CMP EAX,EDI
JZ 0x000ef974
SUB ESP,0xc
MOV ESI,dword ptr [EAX]
PUSH EAX
CALL 0x001807a0
MOV EAX,ESI
ADD ESP,0x10
CMP ESI,EDI
JNZ 0x000ef960
MOV dword ptr [EDI + 0x4],EDI
MOV ESI,dword ptr [EDI + 0x10]
MOV dword ptr [EDI],EDI
MOV dword ptr [EDI + 0x8],0x0
CMP ESI,dword ptr [EDI + 0x14]
JZ 0x000ef9b4
LEA ESI,[ESI]
NOP
MOV EAX,dword ptr [ESI]
TEST EAX,EAX
JZ 0x000ef9a2
SUB ESP,0xc
MOV EDX,dword ptr [EAX]
PUSH EAX
CALL dword ptr [EDX + 0x4]
ADD ESP,0x10
ADD ESI,0x4
CMP dword ptr [EDI + 0x14],ESI
JNZ 0x000ef990
MOV EAX,dword ptr [EDI + 0x10]
CMP EAX,ESI
JZ 0x000ef9b4
MOV dword ptr [EDI + 0x14],EAX
MOV ESI,dword ptr [EDI + 0xa0]
TEST ESI,ESI
JZ 0x000ef9d4
SUB ESP,0xc
PUSH ESI
CALL 0x00061fe0
POP EAX
POP EDX
PUSH 0x4
PUSH ESI
CALL 0x00180780
ADD ESP,0x10
SUB ESP,0x8
PUSH 0xc
PUSH dword ptr [EDI + 0xd4]
CALL 0x00180780
MOV EBP,dword ptr [EDI + 0xc0]
ADD ESP,0x10
TEST EBP,EBP
JZ 0x000efa23
LEA ESI,[ESI]
MOV EAX,dword ptr [EBP + 0x4]
LEA EDX,[EBP + 0xc]
MOV ESI,dword ptr [EBP]
CMP EAX,EDX
JZ 0x000efa11
SUB ESP,0xc
PUSH EAX
CALL 0x001807a0
ADD ESP,0x10
SUB ESP,0xc
PUSH EBP
MOV EBP,ESI
CALL 0x001807a0
ADD ESP,0x10
TEST ESI,ESI
JNZ 0x000ef9f8
MOV EAX,dword ptr [EDI + 0xbc]
SUB ESP,0x4
SHL EAX,0x2
PUSH EAX
PUSH 0x0
PUSH dword ptr [EDI + 0xb8]
CALL 0x000262f0
MOV EAX,dword ptr [EDI + 0xb8]
LEA EDX,[EDI + 0xd0]
ADD ESP,0x10
MOV dword ptr [EDI + 0xc4],0x0
MOV dword ptr [EDI + 0xc0],0x0
CMP EAX,EDX
JZ 0x000efa70
SUB ESP,0xc
PUSH EAX
CALL 0x001807a0
ADD ESP,0x10
MOV EAX,dword ptr [EDI + 0x88]
LEA EDX,[EDI + 0x90]
CMP EAX,EDX
JZ 0x000efa8c
SUB ESP,0xc
PUSH EAX
CALL 0x001807a0
ADD ESP,0x10
MOV EAX,dword ptr [EDI + 0x54]
TEST EAX,EAX
JZ 0x000efa9f
SUB ESP,0xc
PUSH EAX
CALL 0x001807a0
ADD ESP,0x10
MOV EAX,dword ptr [EDI + 0x48]
TEST EAX,EAX
JZ 0x000efab2
SUB ESP,0xc
PUSH EAX
CALL 0x001807a0
ADD ESP,0x10
MOV EAX,dword ptr [EDI + 0x1c]
TEST EAX,EAX
JZ 0x000efac5
SUB ESP,0xc
PUSH EAX
CALL 0x001807a0
ADD ESP,0x10
MOV EAX,dword ptr [EDI + 0x10]
TEST EAX,EAX
JZ 0x000efad8
SUB ESP,0xc
PUSH EAX
CALL 0x001807a0
ADD ESP,0x10
MOV EAX,dword ptr [EDI]
CMP EAX,EDI
JZ 0x000efaf4
NOP
SUB ESP,0xc
MOV ESI,dword ptr [EAX]
PUSH EAX
CALL 0x001807a0
MOV EAX,ESI
ADD ESP,0x10
CMP ESI,EDI
JNZ 0x000efae0
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_000ef8c0(int *param_1)\n\n{\n  int iVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  piVar5 = (int *)*param_1;\n  if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }\n  param_1[1] = (int)param_1;\n  piVar5 = (int *)param_1[4];\n  *param_1 = (int)param_1;\n  param_1[2] = 0;\n  if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }\n  iVar1 = param_1[0x28];\n  if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }\n  FUN_00180780(param_1[0x35],0xc);\n  puVar4 = (undefined4 *)param_1[0x30];\n  while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }\n  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);\n  param_1[0x31] = 0;\n  param_1[0x30] = 0;\n  if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }\n  if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }\n  if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }\n  if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }\n  if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }\n  if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }\n  piVar5 = (int *)*param_1;\n  while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }\n  return;\n}\n\n" comment (function_definition "void FUN_000ef8c0(int *param_1)\n\n{\n  int iVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  piVar5 = (int *)*param_1;\n  if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }\n  param_1[1] = (int)param_1;\n  piVar5 = (int *)param_1[4];\n  *param_1 = (int)param_1;\n  param_1[2] = 0;\n  if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }\n  iVar1 = param_1[0x28];\n  if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }\n  FUN_00180780(param_1[0x35],0xc);\n  puVar4 = (undefined4 *)param_1[0x30];\n  while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }\n  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);\n  param_1[0x31] = 0;\n  param_1[0x30] = 0;\n  if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }\n  if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }\n  if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }\n  if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }\n  if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }\n  if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }\n  piVar5 = (int *)*param_1;\n  while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_000ef8c0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  piVar5 = (int *)*param_1;\n  if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }\n  param_1[1] = (int)param_1;\n  piVar5 = (int *)param_1[4];\n  *param_1 = (int)param_1;\n  param_1[2] = 0;\n  if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }\n  iVar1 = param_1[0x28];\n  if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }\n  FUN_00180780(param_1[0x35],0xc);\n  puVar4 = (undefined4 *)param_1[0x30];\n  while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }\n  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);\n  param_1[0x31] = 0;\n  param_1[0x30] = 0;\n  if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }\n  if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }\n  if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }\n  if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }\n  if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }\n  if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }\n  piVar5 = (int *)*param_1;\n  while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (expression_statement "piVar5 = (int *)*param_1;" (assignment_expression "piVar5 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }" if (parenthesized_expression "(piVar5 != param_1)" ( (binary_expression "piVar5 != param_1" identifier != identifier) )) (compound_statement "{\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }" { (do_statement "do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);" do (compound_statement "{\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    }" { (expression_statement "iVar1 = piVar5[2];" (assignment_expression "iVar1 = piVar5[2]" identifier = (subscript_expression "piVar5[2]" identifier [ number_literal ])) ;) (if_statement "if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }" { (expression_statement "piVar2 = *(int **)(iVar1 + 0x20);" (assignment_expression "piVar2 = *(int **)(iVar1 + 0x20)" identifier = (pointer_expression "*(int **)(iVar1 + 0x20)" * (cast_expression "(int **)(iVar1 + 0x20)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x20)" ( (binary_expression "iVar1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "piVar6 = *(int **)(iVar1 + 0x1c);" (assignment_expression "piVar6 = *(int **)(iVar1 + 0x1c)" identifier = (pointer_expression "*(int **)(iVar1 + 0x1c)" * (cast_expression "(int **)(iVar1 + 0x1c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x1c)" ( (binary_expression "iVar1 + 0x1c" identifier + number_literal) ))))) ;) (if_statement "if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }" if (parenthesized_expression "(piVar2 != piVar6)" ( (binary_expression "piVar2 != piVar6" identifier != identifier) )) (compound_statement "{\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }" { (do_statement "do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);" do (compound_statement "{\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          }" { (if_statement "if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }" if (parenthesized_expression "((int *)*piVar6 != piVar6 + 2)" ( (binary_expression "(int *)*piVar6 != piVar6 + 2" (cast_expression "(int *)*piVar6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar6" * identifier)) != (binary_expression "piVar6 + 2" identifier + number_literal)) )) (compound_statement "{\n              FUN_001807a0((int *)*piVar6);\n            }" { (expression_statement "FUN_001807a0((int *)*piVar6);" (call_expression "FUN_001807a0((int *)*piVar6)" identifier (argument_list "((int *)*piVar6)" ( (cast_expression "(int *)*piVar6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar6" * identifier)) ))) ;) })) (expression_statement "piVar6 = piVar6 + 6;" (assignment_expression "piVar6 = piVar6 + 6" identifier = (binary_expression "piVar6 + 6" identifier + number_literal)) ;) }) while (parenthesized_expression "(piVar2 != piVar6)" ( (binary_expression "piVar2 != piVar6" identifier != identifier) )) ;) (expression_statement "piVar6 = *(int **)(iVar1 + 0x1c);" (assignment_expression "piVar6 = *(int **)(iVar1 + 0x1c)" identifier = (pointer_expression "*(int **)(iVar1 + 0x1c)" * (cast_expression "(int **)(iVar1 + 0x1c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x1c)" ( (binary_expression "iVar1 + 0x1c" identifier + number_literal) ))))) ;) })) (if_statement "if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }" if (parenthesized_expression "(piVar6 != (int *)0x0)" ( (binary_expression "piVar6 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          FUN_001807a0(piVar6);\n        }" { (expression_statement "FUN_001807a0(piVar6);" (call_expression "FUN_001807a0(piVar6)" identifier (argument_list "(piVar6)" ( identifier ))) ;) })) (if_statement "if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }" if (parenthesized_expression "(*(int *)(iVar1 + 4) != iVar1 + 0xc)" ( (binary_expression "*(int *)(iVar1 + 4) != iVar1 + 0xc" (pointer_expression "*(int *)(iVar1 + 4)" * (cast_expression "(int *)(iVar1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) )))) != (binary_expression "iVar1 + 0xc" identifier + number_literal)) )) (compound_statement "{\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }" { (expression_statement "FUN_001807a0(*(int *)(iVar1 + 4));" (call_expression "FUN_001807a0(*(int *)(iVar1 + 4))" identifier (argument_list "(*(int *)(iVar1 + 4))" ( (pointer_expression "*(int *)(iVar1 + 4)" * (cast_expression "(int *)(iVar1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) )))) ))) ;) })) (expression_statement "FUN_00180780(iVar1,0x3c);" (call_expression "FUN_00180780(iVar1,0x3c)" identifier (argument_list "(iVar1,0x3c)" ( identifier , number_literal ))) ;) })) (expression_statement "piVar5 = (int *)*piVar5;" (assignment_expression "piVar5 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) }) while (parenthesized_expression "(piVar5 != param_1)" ( (binary_expression "piVar5 != param_1" identifier != identifier) )) ;) (expression_statement "piVar5 = (int *)*param_1;" (assignment_expression "piVar5 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (while_statement "while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }" while (parenthesized_expression "(piVar5 != param_1)" ( (binary_expression "piVar5 != param_1" identifier != identifier) )) (compound_statement "{\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }" { (expression_statement "piVar2 = (int *)*piVar5;" (assignment_expression "piVar2 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) (expression_statement "FUN_001807a0(piVar5);" (call_expression "FUN_001807a0(piVar5)" identifier (argument_list "(piVar5)" ( identifier ))) ;) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" identifier = identifier) ;) })) })) (expression_statement "param_1[1] = (int)param_1;" (assignment_expression "param_1[1] = (int)param_1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar5 = (int *)param_1[4];" (assignment_expression "piVar5 = (int *)param_1[4]" identifier = (cast_expression "(int *)param_1[4]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (expression_statement "*param_1 = (int)param_1;" (assignment_expression "*param_1 = (int)param_1" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }" if (parenthesized_expression "(piVar5 != (int *)param_1[5])" ( (binary_expression "piVar5 != (int *)param_1[5]" identifier != (cast_expression "(int *)param_1[5]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[5]" identifier [ number_literal ]))) )) (compound_statement "{\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }" { (do_statement "do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);" do (compound_statement "{\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    }" { (expression_statement "piVar2 = (int *)*piVar5;" (assignment_expression "piVar2 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) (if_statement "if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }" if (parenthesized_expression "(piVar2 != (int *)0x0)" ( (binary_expression "piVar2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }" { (expression_statement "(**(code **)(*piVar2 + 4))(piVar2);" (call_expression "(**(code **)(*piVar2 + 4))(piVar2)" (parenthesized_expression "(**(code **)(*piVar2 + 4))" ( (pointer_expression "**(code **)(*piVar2 + 4)" * (pointer_expression "*(code **)(*piVar2 + 4)" * (cast_expression "(code **)(*piVar2 + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar2 + 4)" ( (binary_expression "*piVar2 + 4" (pointer_expression "*piVar2" * identifier) + number_literal) ))))) )) (argument_list "(piVar2)" ( identifier ))) ;) })) (expression_statement "piVar5 = piVar5 + 1;" (assignment_expression "piVar5 = piVar5 + 1" identifier = (binary_expression "piVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int *)param_1[5] != piVar5)" ( (binary_expression "(int *)param_1[5] != piVar5" (cast_expression "(int *)param_1[5]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) != identifier) )) ;) (if_statement "if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }" if (parenthesized_expression "((int *)param_1[4] != piVar5)" ( (binary_expression "(int *)param_1[4] != piVar5" (cast_expression "(int *)param_1[4]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ])) != identifier) )) (compound_statement "{\n      param_1[5] = param_1[4];\n    }" { (expression_statement "param_1[5] = param_1[4];" (assignment_expression "param_1[5] = param_1[4]" (subscript_expression "param_1[5]" identifier [ number_literal ]) = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) })) })) (expression_statement "iVar1 = param_1[0x28];" (assignment_expression "iVar1 = param_1[0x28]" identifier = (subscript_expression "param_1[0x28]" identifier [ number_literal ])) ;) (if_statement "if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }" { (expression_statement "FUN_00061fe0(iVar1);" (call_expression "FUN_00061fe0(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "FUN_00180780(iVar1,4);" (call_expression "FUN_00180780(iVar1,4)" identifier (argument_list "(iVar1,4)" ( identifier , number_literal ))) ;) })) (expression_statement "FUN_00180780(param_1[0x35],0xc);" (call_expression "FUN_00180780(param_1[0x35],0xc)" identifier (argument_list "(param_1[0x35],0xc)" ( (subscript_expression "param_1[0x35]" identifier [ number_literal ]) , number_literal ))) ;) (expression_statement "puVar4 = (undefined4 *)param_1[0x30];" (assignment_expression "puVar4 = (undefined4 *)param_1[0x30]" identifier = (cast_expression "(undefined4 *)param_1[0x30]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x30]" identifier [ number_literal ]))) ;) (while_statement "while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }" while (parenthesized_expression "(puVar4 != (undefined4 *)0x0)" ( (binary_expression "puVar4 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }" { (expression_statement "puVar3 = (undefined4 *)*puVar4;" (assignment_expression "puVar3 = (undefined4 *)*puVar4" identifier = (cast_expression "(undefined4 *)*puVar4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier))) ;) (if_statement "if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }" if (parenthesized_expression "((undefined4 *)puVar4[1] != puVar4 + 3)" ( (binary_expression "(undefined4 *)puVar4[1] != puVar4 + 3" (cast_expression "(undefined4 *)puVar4[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ])) != (binary_expression "puVar4 + 3" identifier + number_literal)) )) (compound_statement "{\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }" { (expression_statement "FUN_001807a0((undefined4 *)puVar4[1]);" (call_expression "FUN_001807a0((undefined4 *)puVar4[1])" identifier (argument_list "((undefined4 *)puVar4[1])" ( (cast_expression "(undefined4 *)puVar4[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ])) ))) ;) })) (expression_statement "FUN_001807a0(puVar4);" (call_expression "FUN_001807a0(puVar4)" identifier (argument_list "(puVar4)" ( identifier ))) ;) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" identifier = identifier) ;) })) (expression_statement "memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);" (call_expression "memset((void *)param_1[0x2e],0,param_1[0x2f] << 2)" identifier (argument_list "((void *)param_1[0x2e],0,param_1[0x2f] << 2)" ( (cast_expression "(void *)param_1[0x2e]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) , number_literal , (binary_expression "param_1[0x2f] << 2" (subscript_expression "param_1[0x2f]" identifier [ number_literal ]) << number_literal) ))) ;) (expression_statement "param_1[0x31] = 0;" (assignment_expression "param_1[0x31] = 0" (subscript_expression "param_1[0x31]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x30] = 0;" (assignment_expression "param_1[0x30] = 0" (subscript_expression "param_1[0x30]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }" if (parenthesized_expression "((int *)param_1[0x2e] != param_1 + 0x34)" ( (binary_expression "(int *)param_1[0x2e] != param_1 + 0x34" (cast_expression "(int *)param_1[0x2e]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) != (binary_expression "param_1 + 0x34" identifier + number_literal)) )) (compound_statement "{\n    FUN_001807a0((int *)param_1[0x2e]);\n  }" { (expression_statement "FUN_001807a0((int *)param_1[0x2e]);" (call_expression "FUN_001807a0((int *)param_1[0x2e])" identifier (argument_list "((int *)param_1[0x2e])" ( (cast_expression "(int *)param_1[0x2e]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) ))) ;) })) (if_statement "if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }" if (parenthesized_expression "((int *)param_1[0x22] != param_1 + 0x24)" ( (binary_expression "(int *)param_1[0x22] != param_1 + 0x24" (cast_expression "(int *)param_1[0x22]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x22]" identifier [ number_literal ])) != (binary_expression "param_1 + 0x24" identifier + number_literal)) )) (compound_statement "{\n    FUN_001807a0((int *)param_1[0x22]);\n  }" { (expression_statement "FUN_001807a0((int *)param_1[0x22]);" (call_expression "FUN_001807a0((int *)param_1[0x22])" identifier (argument_list "((int *)param_1[0x22])" ( (cast_expression "(int *)param_1[0x22]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x22]" identifier [ number_literal ])) ))) ;) })) (if_statement "if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }" if (parenthesized_expression "(param_1[0x15] != 0)" ( (binary_expression "param_1[0x15] != 0" (subscript_expression "param_1[0x15]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_001807a0(param_1[0x15]);\n  }" { (expression_statement "FUN_001807a0(param_1[0x15]);" (call_expression "FUN_001807a0(param_1[0x15])" identifier (argument_list "(param_1[0x15])" ( (subscript_expression "param_1[0x15]" identifier [ number_literal ]) ))) ;) })) (if_statement "if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }" if (parenthesized_expression "(param_1[0x12] != 0)" ( (binary_expression "param_1[0x12] != 0" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_001807a0(param_1[0x12]);\n  }" { (expression_statement "FUN_001807a0(param_1[0x12]);" (call_expression "FUN_001807a0(param_1[0x12])" identifier (argument_list "(param_1[0x12])" ( (subscript_expression "param_1[0x12]" identifier [ number_literal ]) ))) ;) })) (if_statement "if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }" if (parenthesized_expression "(param_1[7] != 0)" ( (binary_expression "param_1[7] != 0" (subscript_expression "param_1[7]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_001807a0(param_1[7]);\n  }" { (expression_statement "FUN_001807a0(param_1[7]);" (call_expression "FUN_001807a0(param_1[7])" identifier (argument_list "(param_1[7])" ( (subscript_expression "param_1[7]" identifier [ number_literal ]) ))) ;) })) (if_statement "if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }" if (parenthesized_expression "(param_1[4] != 0)" ( (binary_expression "param_1[4] != 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_001807a0(param_1[4]);\n  }" { (expression_statement "FUN_001807a0(param_1[4]);" (call_expression "FUN_001807a0(param_1[4])" identifier (argument_list "(param_1[4])" ( (subscript_expression "param_1[4]" identifier [ number_literal ]) ))) ;) })) (expression_statement "piVar5 = (int *)*param_1;" (assignment_expression "piVar5 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (while_statement "while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }" while (parenthesized_expression "(piVar5 != param_1)" ( (binary_expression "piVar5 != param_1" identifier != identifier) )) (compound_statement "{\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }" { (expression_statement "piVar2 = (int *)*piVar5;" (assignment_expression "piVar2 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) (expression_statement "FUN_001807a0(piVar5);" (call_expression "FUN_001807a0(piVar5)" identifier (argument_list "(piVar5)" ( identifier ))) ;) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" identifier = identifier) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n/* WARNING: Type propagation algorithm not settling */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: void ~Plugin_manager(Plugin_manager * this, int __in_chrg) */\n\nvoid __thiscall gold::Plugin_manager::~Plugin_manager(Plugin_manager *this,int __in_chrg)\n\n{\n  void *pvVar1;\n  undefined4 *puVar2;\n  Plugin_manager *pPVar3;\n  Object *pOVar4;\n  pointer ppOVar5;\n  Lock *this_00;\n  _Hash_node_base *p_Var6;\n  __bucket_type *pp_Var7;\n  pointer pcVar8;\n  pointer ppSVar9;\n  pointer pRVar10;\n  pointer ppRVar11;\n  _Hash_node_base *p_Var12;\n  Plugin_manager *pPVar13;\n  undefined4 *puVar14;\n  pointer ppOVar15;\n  int in_stack_ffffffc8;\n  \n  pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next;\n  if (pPVar13 != this) {\n    do {\n      pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node._M_size;\n      if (pvVar1 != (void *)0x0) {\n        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);\n        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }\n        if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }\n        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }\n        in_stack_ffffffc8 = 0x3c;\n        operator_delete(pvVar1,0x3c);\n      }\n      pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base._M_next;\n    } while (pPVar13 != this);\n    pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl._M_node.super__List_node_base._M_next;\n    while (pPVar13 != this) {\n      pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base._M_next;\n      operator_delete(pPVar13);\n      pPVar13 = pPVar3;\n    }\n  }\n  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_prev = (_List_node_base *)this;\n  ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start;\n  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_next = (_List_node_base *)this;\n  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  _M_size = 0;\n  if (ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish) {\n    do {\n      pOVar4 = *ppOVar15;\n      if (pOVar4 != (Object *)0x0) {\n        (*pOVar4->_vptr_Object[1])(pOVar4);\n      }\n      ppOVar15 = ppOVar15 + 1;\n    } while ((this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_finish != ppOVar15);\n    ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n              _M_impl._M_start;\n    if (ppOVar5 != ppOVar15) {\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish = ppOVar5;\n    }\n  }\n  this_00 = this->lock_;\n  if (this_00 != (Lock *)0x0) {\n    Lock::~Lock(this_00,in_stack_ffffffc8);\n    operator_delete(this_00,4);\n  }\n  operator_delete(this->recorder_,0xc);\n  p_Var12 = (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt;\n  while (p_Var12 != (_Hash_node_base *)0x0) {\n    p_Var6 = p_Var12->_M_nxt;\n    if (p_Var12[1]._M_nxt != p_Var12 + 3) {\n      operator_delete(p_Var12[1]._M_nxt);\n    }\n    operator_delete(p_Var12);\n    p_Var12 = p_Var6;\n  }\n  memset((this->defsym_defines_set_)._M_h._M_buckets,0,\n         (this->defsym_defines_set_)._M_h._M_bucket_count << 2);\n  pp_Var7 = (this->defsym_defines_set_)._M_h._M_buckets;\n  (this->defsym_defines_set_)._M_h._M_element_count = 0;\n  (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt = (_Hash_node_base *)0x0;\n  if (pp_Var7 != &(this->defsym_defines_set_)._M_h._M_single_bucket) {\n    operator_delete(pp_Var7);\n  }\n  pcVar8 = (this->extra_search_path_)._M_dataplus._M_p;\n  if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)pcVar8 != &(this->extra_search_path_).field_2) {\n    operator_delete(pcVar8);\n  }\n  ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl._M_start;\n  if (ppSVar9 != (pointer)0x0) {\n    operator_delete(ppSVar9);\n  }\n  pRVar10 = (this->rescannable_).\n            super__Vector_base<gold::Plugin_manager::Rescannable,_std::allocator<gold::Plugin_manager::Rescannable>_>\n            ._M_impl._M_start;\n  if (pRVar10 != (pointer)0x0) {\n    operator_delete(pRVar10);\n  }\n  ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold::Relobj*,_std::allocator<gold::Relobj*>_>._M_impl._M_start;\n  if (ppRVar11 != (pointer)0x0) {\n    operator_delete(ppRVar11);\n  }\n  ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start;\n  if (ppOVar15 != (pointer)0x0) {\n    operator_delete(ppOVar15);\n  }\n  pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next;\n  while (pPVar13 != this) {\n    pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl._M_node.super__List_node_base._M_next;\n    operator_delete(pPVar13);\n    pPVar13 = pPVar3;\n  }\n  return;\n}\n\n" comment comment comment comment (function_definition "void __thiscall gold::Plugin_manager::~Plugin_manager(Plugin_manager *this,int __in_chrg)\n\n{\n  void *pvVar1;\n  undefined4 *puVar2;\n  Plugin_manager *pPVar3;\n  Object *pOVar4;\n  pointer ppOVar5;\n  Lock *this_00;\n  _Hash_node_base *p_Var6;\n  __bucket_type *pp_Var7;\n  pointer pcVar8;\n  pointer ppSVar9;\n  pointer pRVar10;\n  pointer ppRVar11;\n  _Hash_node_base *p_Var12;\n  Plugin_manager *pPVar13;\n  undefined4 *puVar14;\n  pointer ppOVar15;\n  int in_stack_ffffffc8;\n  \n  pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next;\n  if (pPVar13 != this) {\n    do {\n      pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node._M_size;\n      if (pvVar1 != (void *)0x0) {\n        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);\n        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }\n        if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }\n        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }\n        in_stack_ffffffc8 = 0x3c;\n        operator_delete(pvVar1,0x3c);\n      }\n      pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base._M_next;\n    } while (pPVar13 != this);\n    pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl._M_node.super__List_node_base._M_next;\n    while (pPVar13 != this) {\n      pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base._M_next;\n      operator_delete(pPVar13);\n      pPVar13 = pPVar3;\n    }\n  }\n  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_prev = (_List_node_base *)this;\n  ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start;\n  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_next = (_List_node_base *)this;\n  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  _M_size = 0;\n  if (ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish) {\n    do {\n      pOVar4 = *ppOVar15;\n      if (pOVar4 != (Object *)0x0) {\n        (*pOVar4->_vptr_Object[1])(pOVar4);\n      }\n      ppOVar15 = ppOVar15 + 1;\n    } while ((this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_finish != ppOVar15);\n    ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n              _M_impl._M_start;\n    if (ppOVar5 != ppOVar15) {\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish = ppOVar5;\n    }\n  }\n  this_00 = this->lock_;\n  if (this_00 != (Lock *)0x0) {\n    Lock::~Lock(this_00,in_stack_ffffffc8);\n    operator_delete(this_00,4);\n  }\n  operator_delete(this->recorder_,0xc);\n  p_Var12 = (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt;\n  while (p_Var12 != (_Hash_node_base *)0x0) {\n    p_Var6 = p_Var12->_M_nxt;\n    if (p_Var12[1]._M_nxt != p_Var12 + 3) {\n      operator_delete(p_Var12[1]._M_nxt);\n    }\n    operator_delete(p_Var12);\n    p_Var12 = p_Var6;\n  }\n  memset((this->defsym_defines_set_)._M_h._M_buckets,0,\n         (this->defsym_defines_set_)._M_h._M_bucket_count << 2);\n  pp_Var7 = (this->defsym_defines_set_)._M_h._M_buckets;\n  (this->defsym_defines_set_)._M_h._M_element_count = 0;\n  (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt = (_Hash_node_base *)0x0;\n  if (pp_Var7 != &(this->defsym_defines_set_)._M_h._M_single_bucket) {\n    operator_delete(pp_Var7);\n  }\n  pcVar8 = (this->extra_search_path_)._M_dataplus._M_p;\n  if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)pcVar8 != &(this->extra_search_path_).field_2) {\n    operator_delete(pcVar8);\n  }\n  ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl._M_start;\n  if (ppSVar9 != (pointer)0x0) {\n    operator_delete(ppSVar9);\n  }\n  pRVar10 = (this->rescannable_).\n            super__Vector_base<gold::Plugin_manager::Rescannable,_std::allocator<gold::Plugin_manager::Rescannable>_>\n            ._M_impl._M_start;\n  if (pRVar10 != (pointer)0x0) {\n    operator_delete(pRVar10);\n  }\n  ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold::Relobj*,_std::allocator<gold::Relobj*>_>._M_impl._M_start;\n  if (ppRVar11 != (pointer)0x0) {\n    operator_delete(ppRVar11);\n  }\n  ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start;\n  if (ppOVar15 != (pointer)0x0) {\n    operator_delete(ppOVar15);\n  }\n  pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next;\n  while (pPVar13 != this) {\n    pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl._M_node.super__List_node_base._M_next;\n    operator_delete(pPVar13);\n    pPVar13 = pPVar3;\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Plugin_manager::~" identifier : : identifier : : ~) (function_declarator "Plugin_manager(Plugin_manager *this,int __in_chrg)" identifier (parameter_list "(Plugin_manager *this,int __in_chrg)" ( (parameter_declaration "Plugin_manager *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "int __in_chrg" primitive_type identifier) ))) (compound_statement "{\n  void *pvVar1;\n  undefined4 *puVar2;\n  Plugin_manager *pPVar3;\n  Object *pOVar4;\n  pointer ppOVar5;\n  Lock *this_00;\n  _Hash_node_base *p_Var6;\n  __bucket_type *pp_Var7;\n  pointer pcVar8;\n  pointer ppSVar9;\n  pointer pRVar10;\n  pointer ppRVar11;\n  _Hash_node_base *p_Var12;\n  Plugin_manager *pPVar13;\n  undefined4 *puVar14;\n  pointer ppOVar15;\n  int in_stack_ffffffc8;\n  \n  pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next;\n  if (pPVar13 != this) {\n    do {\n      pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node._M_size;\n      if (pvVar1 != (void *)0x0) {\n        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);\n        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }\n        if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }\n        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }\n        in_stack_ffffffc8 = 0x3c;\n        operator_delete(pvVar1,0x3c);\n      }\n      pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base._M_next;\n    } while (pPVar13 != this);\n    pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl._M_node.super__List_node_base._M_next;\n    while (pPVar13 != this) {\n      pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base._M_next;\n      operator_delete(pPVar13);\n      pPVar13 = pPVar3;\n    }\n  }\n  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_prev = (_List_node_base *)this;\n  ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start;\n  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_next = (_List_node_base *)this;\n  (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  _M_size = 0;\n  if (ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish) {\n    do {\n      pOVar4 = *ppOVar15;\n      if (pOVar4 != (Object *)0x0) {\n        (*pOVar4->_vptr_Object[1])(pOVar4);\n      }\n      ppOVar15 = ppOVar15 + 1;\n    } while ((this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_finish != ppOVar15);\n    ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n              _M_impl._M_start;\n    if (ppOVar5 != ppOVar15) {\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish = ppOVar5;\n    }\n  }\n  this_00 = this->lock_;\n  if (this_00 != (Lock *)0x0) {\n    Lock::~Lock(this_00,in_stack_ffffffc8);\n    operator_delete(this_00,4);\n  }\n  operator_delete(this->recorder_,0xc);\n  p_Var12 = (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt;\n  while (p_Var12 != (_Hash_node_base *)0x0) {\n    p_Var6 = p_Var12->_M_nxt;\n    if (p_Var12[1]._M_nxt != p_Var12 + 3) {\n      operator_delete(p_Var12[1]._M_nxt);\n    }\n    operator_delete(p_Var12);\n    p_Var12 = p_Var6;\n  }\n  memset((this->defsym_defines_set_)._M_h._M_buckets,0,\n         (this->defsym_defines_set_)._M_h._M_bucket_count << 2);\n  pp_Var7 = (this->defsym_defines_set_)._M_h._M_buckets;\n  (this->defsym_defines_set_)._M_h._M_element_count = 0;\n  (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt = (_Hash_node_base *)0x0;\n  if (pp_Var7 != &(this->defsym_defines_set_)._M_h._M_single_bucket) {\n    operator_delete(pp_Var7);\n  }\n  pcVar8 = (this->extra_search_path_)._M_dataplus._M_p;\n  if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)pcVar8 != &(this->extra_search_path_).field_2) {\n    operator_delete(pcVar8);\n  }\n  ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl._M_start;\n  if (ppSVar9 != (pointer)0x0) {\n    operator_delete(ppSVar9);\n  }\n  pRVar10 = (this->rescannable_).\n            super__Vector_base<gold::Plugin_manager::Rescannable,_std::allocator<gold::Plugin_manager::Rescannable>_>\n            ._M_impl._M_start;\n  if (pRVar10 != (pointer)0x0) {\n    operator_delete(pRVar10);\n  }\n  ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold::Relobj*,_std::allocator<gold::Relobj*>_>._M_impl._M_start;\n  if (ppRVar11 != (pointer)0x0) {\n    operator_delete(ppRVar11);\n  }\n  ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start;\n  if (ppOVar15 != (pointer)0x0) {\n    operator_delete(ppOVar15);\n  }\n  pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next;\n  while (pPVar13 != this) {\n    pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl._M_node.super__List_node_base._M_next;\n    operator_delete(pPVar13);\n    pPVar13 = pPVar3;\n  }\n  return;\n}" { (declaration "void *pvVar1;" primitive_type (pointer_declarator "*pvVar1" * identifier) ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "Plugin_manager *pPVar3;" type_identifier (pointer_declarator "*pPVar3" * identifier) ;) (declaration "Object *pOVar4;" type_identifier (pointer_declarator "*pOVar4" * identifier) ;) (declaration "pointer ppOVar5;" type_identifier identifier ;) (declaration "Lock *this_00;" type_identifier (pointer_declarator "*this_00" * identifier) ;) (declaration "_Hash_node_base *p_Var6;" type_identifier (pointer_declarator "*p_Var6" * identifier) ;) (declaration "__bucket_type *pp_Var7;" type_identifier (pointer_declarator "*pp_Var7" * identifier) ;) (declaration "pointer pcVar8;" type_identifier identifier ;) (declaration "pointer ppSVar9;" type_identifier identifier ;) (declaration "pointer pRVar10;" type_identifier identifier ;) (declaration "pointer ppRVar11;" type_identifier identifier ;) (declaration "_Hash_node_base *p_Var12;" type_identifier (pointer_declarator "*p_Var12" * identifier) ;) (declaration "Plugin_manager *pPVar13;" type_identifier (pointer_declarator "*pPVar13" * identifier) ;) (declaration "undefined4 *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "pointer ppOVar15;" type_identifier identifier ;) (declaration "int in_stack_ffffffc8;" primitive_type identifier ;) (expression_statement "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next;" (field_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next" (field_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base" (field_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node" (field_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl" (binary_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std" (assignment_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold" identifier = (binary_expression "(Plugin_manager *)\n            (this->plugins_).super__List_base<gold" (cast_expression "(Plugin_manager *)\n            (this->plugins_).super__List_base" ( (type_descriptor "Plugin_manager *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(this->plugins_).super__List_base" (parenthesized_expression "(this->plugins_)" ( (field_expression "this->plugins_" identifier -> field_identifier) )) . field_identifier)) < identifier)) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) ;) (if_statement "if (pPVar13 != this) {\n    do {\n      pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node._M_size;\n      if (pvVar1 != (void *)0x0) {\n        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);\n        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }\n        if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }\n        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }\n        in_stack_ffffffc8 = 0x3c;\n        operator_delete(pvVar1,0x3c);\n      }\n      pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base._M_next;\n    } while (pPVar13 != this);\n    pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl._M_node.super__List_node_base._M_next;\n    while (pPVar13 != this) {\n      pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base._M_next;\n      operator_delete(pPVar13);\n      pPVar13 = pPVar3;\n    }\n  }" if (parenthesized_expression "(pPVar13 != this)" ( (binary_expression "pPVar13 != this" identifier != identifier) )) (compound_statement "{\n    do {\n      pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node._M_size;\n      if (pvVar1 != (void *)0x0) {\n        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);\n        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }\n        if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }\n        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }\n        in_stack_ffffffc8 = 0x3c;\n        operator_delete(pvVar1,0x3c);\n      }\n      pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base._M_next;\n    } while (pPVar13 != this);\n    pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl._M_node.super__List_node_base._M_next;\n    while (pPVar13 != this) {\n      pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base._M_next;\n      operator_delete(pPVar13);\n      pPVar13 = pPVar3;\n    }\n  }" { (do_statement "do {\n      pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node._M_size;\n      if (pvVar1 != (void *)0x0) {\n        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);\n        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }\n        if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }\n        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }\n        in_stack_ffffffc8 = 0x3c;\n        operator_delete(pvVar1,0x3c);\n      }\n      pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base._M_next;\n    } while (pPVar13 != this);" do (compound_statement "{\n      pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node._M_size;\n      if (pvVar1 != (void *)0x0) {\n        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);\n        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }\n        if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }\n        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }\n        in_stack_ffffffc8 = 0x3c;\n        operator_delete(pvVar1,0x3c);\n      }\n      pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base._M_next;\n    }" { (expression_statement "pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node._M_size;" (field_expression "pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node._M_size" (field_expression "pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl.\n                       _M_node" (field_expression "pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl" (binary_expression "pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold::Plugin*,_std" (assignment_expression "pvVar1 = (void *)(pPVar13->plugins_).\n                       super__List_base<gold" identifier = (binary_expression "(void *)(pPVar13->plugins_).\n                       super__List_base<gold" (cast_expression "(void *)(pPVar13->plugins_).\n                       super__List_base" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (field_expression "(pPVar13->plugins_).\n                       super__List_base" (parenthesized_expression "(pPVar13->plugins_)" ( (field_expression "pPVar13->plugins_" identifier -> field_identifier) )) . field_identifier)) < identifier)) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) ;) (if_statement "if (pvVar1 != (void *)0x0) {\n        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);\n        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }\n        if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }\n        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }\n        in_stack_ffffffc8 = 0x3c;\n        operator_delete(pvVar1,0x3c);\n      }" if (parenthesized_expression "(pvVar1 != (void *)0x0)" ( (binary_expression "pvVar1 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);\n        puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }\n        if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }\n        if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }\n        in_stack_ffffffc8 = 0x3c;\n        operator_delete(pvVar1,0x3c);\n      }" { (expression_statement "puVar2 = *(undefined4 **)((int)pvVar1 + 0x20);" (assignment_expression "puVar2 = *(undefined4 **)((int)pvVar1 + 0x20)" identifier = (pointer_expression "*(undefined4 **)((int)pvVar1 + 0x20)" * (cast_expression "(undefined4 **)((int)pvVar1 + 0x20)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar1 + 0x20)" ( (binary_expression "(int)pvVar1 + 0x20" (cast_expression "(int)pvVar1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (expression_statement "puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);" (assignment_expression "puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c)" identifier = (pointer_expression "*(undefined4 **)((int)pvVar1 + 0x1c)" * (cast_expression "(undefined4 **)((int)pvVar1 + 0x1c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar1 + 0x1c)" ( (binary_expression "(int)pvVar1 + 0x1c" (cast_expression "(int)pvVar1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) (if_statement "if (puVar2 != puVar14) {\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }" if (parenthesized_expression "(puVar2 != puVar14)" ( (binary_expression "puVar2 != puVar14" identifier != identifier) )) (compound_statement "{\n          do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);\n          puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);\n        }" { (do_statement "do {\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          } while (puVar2 != puVar14);" do (compound_statement "{\n            if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }\n            puVar14 = puVar14 + 6;\n          }" { (if_statement "if ((undefined4 *)*puVar14 != puVar14 + 2) {\n              operator_delete((undefined4 *)*puVar14);\n            }" if (parenthesized_expression "((undefined4 *)*puVar14 != puVar14 + 2)" ( (binary_expression "(undefined4 *)*puVar14 != puVar14 + 2" (cast_expression "(undefined4 *)*puVar14" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar14" * identifier)) != (binary_expression "puVar14 + 2" identifier + number_literal)) )) (compound_statement "{\n              operator_delete((undefined4 *)*puVar14);\n            }" { (expression_statement "operator_delete((undefined4 *)*puVar14);" (call_expression "operator_delete((undefined4 *)*puVar14)" identifier (argument_list "((undefined4 *)*puVar14)" ( (cast_expression "(undefined4 *)*puVar14" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar14" * identifier)) ))) ;) })) (expression_statement "puVar14 = puVar14 + 6;" (assignment_expression "puVar14 = puVar14 + 6" identifier = (binary_expression "puVar14 + 6" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar2 != puVar14)" ( (binary_expression "puVar2 != puVar14" identifier != identifier) )) ;) (expression_statement "puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c);" (assignment_expression "puVar14 = *(undefined4 **)((int)pvVar1 + 0x1c)" identifier = (pointer_expression "*(undefined4 **)((int)pvVar1 + 0x1c)" * (cast_expression "(undefined4 **)((int)pvVar1 + 0x1c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar1 + 0x1c)" ( (binary_expression "(int)pvVar1 + 0x1c" (cast_expression "(int)pvVar1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) ))))) ;) })) (if_statement "if (puVar14 != (undefined4 *)0x0) {\n          operator_delete(puVar14);\n        }" if (parenthesized_expression "(puVar14 != (undefined4 *)0x0)" ( (binary_expression "puVar14 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          operator_delete(puVar14);\n        }" { (expression_statement "operator_delete(puVar14);" (call_expression "operator_delete(puVar14)" identifier (argument_list "(puVar14)" ( identifier ))) ;) })) (if_statement "if (*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)) {\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }" if (parenthesized_expression "(*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc))" ( (binary_expression "*(void **)((int)pvVar1 + 4) != (void *)((int)pvVar1 + 0xc)" (pointer_expression "*(void **)((int)pvVar1 + 4)" * (cast_expression "(void **)((int)pvVar1 + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar1 + 4)" ( (binary_expression "(int)pvVar1 + 4" (cast_expression "(int)pvVar1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != (cast_expression "(void *)((int)pvVar1 + 0xc)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar1 + 0xc)" ( (binary_expression "(int)pvVar1 + 0xc" (cast_expression "(int)pvVar1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) )) (compound_statement "{\n          operator_delete(*(void **)((int)pvVar1 + 4));\n        }" { (expression_statement "operator_delete(*(void **)((int)pvVar1 + 4));" (call_expression "operator_delete(*(void **)((int)pvVar1 + 4))" identifier (argument_list "(*(void **)((int)pvVar1 + 4))" ( (pointer_expression "*(void **)((int)pvVar1 + 4)" * (cast_expression "(void **)((int)pvVar1 + 4)" ( (type_descriptor "void **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar1 + 4)" ( (binary_expression "(int)pvVar1 + 4" (cast_expression "(int)pvVar1" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) ))) ;) })) (expression_statement "in_stack_ffffffc8 = 0x3c;" (assignment_expression "in_stack_ffffffc8 = 0x3c" identifier = number_literal) ;) (expression_statement "operator_delete(pvVar1,0x3c);" (call_expression "operator_delete(pvVar1,0x3c)" identifier (argument_list "(pvVar1,0x3c)" ( identifier , number_literal ))) ;) })) (expression_statement "pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base._M_next;" (field_expression "pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base._M_next" (field_expression "pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node.super__List_node_base" (field_expression "pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl._M_node" (field_expression "pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n                _M_impl" (binary_expression "pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold::Plugin*,_std" (assignment_expression "pPVar13 = (Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold" identifier = (binary_expression "(Plugin_manager *)\n                (pPVar13->plugins_).super__List_base<gold" (cast_expression "(Plugin_manager *)\n                (pPVar13->plugins_).super__List_base" ( (type_descriptor "Plugin_manager *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(pPVar13->plugins_).super__List_base" (parenthesized_expression "(pPVar13->plugins_)" ( (field_expression "pPVar13->plugins_" identifier -> field_identifier) )) . field_identifier)) < identifier)) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) ;) }) while (parenthesized_expression "(pPVar13 != this)" ( (binary_expression "pPVar13 != this" identifier != identifier) )) ;) (expression_statement "pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl._M_node.super__List_node_base._M_next;" (field_expression "pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl._M_node.super__List_node_base._M_next" (field_expression "pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl._M_node.super__List_node_base" (field_expression "pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl._M_node" (field_expression "pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n              _M_impl" (binary_expression "pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold::Plugin*,_std" (assignment_expression "pPVar13 = (Plugin_manager *)\n              (this->plugins_).super__List_base<gold" identifier = (binary_expression "(Plugin_manager *)\n              (this->plugins_).super__List_base<gold" (cast_expression "(Plugin_manager *)\n              (this->plugins_).super__List_base" ( (type_descriptor "Plugin_manager *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(this->plugins_).super__List_base" (parenthesized_expression "(this->plugins_)" ( (field_expression "this->plugins_" identifier -> field_identifier) )) . field_identifier)) < identifier)) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) ;) (while_statement "while (pPVar13 != this) {\n      pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base._M_next;\n      operator_delete(pPVar13);\n      pPVar13 = pPVar3;\n    }" while (parenthesized_expression "(pPVar13 != this)" ( (binary_expression "pPVar13 != this" identifier != identifier) )) (compound_statement "{\n      pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base._M_next;\n      operator_delete(pPVar13);\n      pPVar13 = pPVar3;\n    }" { (expression_statement "pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base._M_next;" (field_expression "pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base._M_next" (field_expression "pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node.super__List_node_base" (field_expression "pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl._M_node" (field_expression "pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n               _M_impl" (binary_expression "pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold::Plugin*,_std" (assignment_expression "pPVar3 = (Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold" identifier = (binary_expression "(Plugin_manager *)\n               (pPVar13->plugins_).super__List_base<gold" (cast_expression "(Plugin_manager *)\n               (pPVar13->plugins_).super__List_base" ( (type_descriptor "Plugin_manager *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(pPVar13->plugins_).super__List_base" (parenthesized_expression "(pPVar13->plugins_)" ( (field_expression "pPVar13->plugins_" identifier -> field_identifier) )) . field_identifier)) < identifier)) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) ;) (expression_statement "operator_delete(pPVar13);" (call_expression "operator_delete(pPVar13)" identifier (argument_list "(pPVar13)" ( identifier ))) ;) (expression_statement "pPVar13 = pPVar3;" (assignment_expression "pPVar13 = pPVar3" identifier = identifier) ;) })) })) (expression_statement "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_prev = (_List_node_base *)this;" (assignment_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_prev = (_List_node_base *)this" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_prev" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl" (binary_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "(this->plugins_).super__List_base<gold::Plugin*,_std" (binary_expression "(this->plugins_).super__List_base<gold" (field_expression "(this->plugins_).super__List_base" (parenthesized_expression "(this->plugins_)" ( (field_expression "this->plugins_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) = (cast_expression "(_List_node_base *)this" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start;" (field_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start" (field_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl" (binary_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std" (assignment_expression "ppOVar15 = (this->objects_).super__Vector_base<gold" identifier = (binary_expression "(this->objects_).super__Vector_base<gold" (field_expression "(this->objects_).super__Vector_base" (parenthesized_expression "(this->objects_)" ( (field_expression "this->objects_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (expression_statement "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_next = (_List_node_base *)this;" (assignment_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_next = (_List_node_base *)this" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base._M_next" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  super__List_node_base" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl" (binary_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "(this->plugins_).super__List_base<gold::Plugin*,_std" (binary_expression "(this->plugins_).super__List_base<gold" (field_expression "(this->plugins_).super__List_base" (parenthesized_expression "(this->plugins_)" ( (field_expression "this->plugins_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) = (cast_expression "(_List_node_base *)this" ( (type_descriptor "_List_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  _M_size = 0;" (assignment_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  _M_size = 0" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node.\n  _M_size" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl._M_node" (field_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl" (binary_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "(this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "(this->plugins_).super__List_base<gold::Plugin*,_std" (binary_expression "(this->plugins_).super__List_base<gold" (field_expression "(this->plugins_).super__List_base" (parenthesized_expression "(this->plugins_)" ( (field_expression "this->plugins_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) = number_literal) ;) (if_statement "if (ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish) {\n    do {\n      pOVar4 = *ppOVar15;\n      if (pOVar4 != (Object *)0x0) {\n        (*pOVar4->_vptr_Object[1])(pOVar4);\n      }\n      ppOVar15 = ppOVar15 + 1;\n    } while ((this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_finish != ppOVar15);\n    ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n              _M_impl._M_start;\n    if (ppOVar5 != ppOVar15) {\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish = ppOVar5;\n    }\n  }" if (parenthesized_expression "(ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish)" ( (field_expression "ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish" (field_expression "ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl" (binary_expression "ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "ppOVar15 !=\n      (this->objects_).super__Vector_base<gold::Object*,_std" (binary_expression "ppOVar15 !=\n      (this->objects_).super__Vector_base<gold" identifier != (binary_expression "(this->objects_).super__Vector_base<gold" (field_expression "(this->objects_).super__Vector_base" (parenthesized_expression "(this->objects_)" ( (field_expression "this->objects_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) )) (compound_statement "{\n    do {\n      pOVar4 = *ppOVar15;\n      if (pOVar4 != (Object *)0x0) {\n        (*pOVar4->_vptr_Object[1])(pOVar4);\n      }\n      ppOVar15 = ppOVar15 + 1;\n    } while ((this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_finish != ppOVar15);\n    ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n              _M_impl._M_start;\n    if (ppOVar5 != ppOVar15) {\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish = ppOVar5;\n    }\n  }" { (do_statement "do {\n      pOVar4 = *ppOVar15;\n      if (pOVar4 != (Object *)0x0) {\n        (*pOVar4->_vptr_Object[1])(pOVar4);\n      }\n      ppOVar15 = ppOVar15 + 1;\n    } while ((this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_finish != ppOVar15);" do (compound_statement "{\n      pOVar4 = *ppOVar15;\n      if (pOVar4 != (Object *)0x0) {\n        (*pOVar4->_vptr_Object[1])(pOVar4);\n      }\n      ppOVar15 = ppOVar15 + 1;\n    }" { (expression_statement "pOVar4 = *ppOVar15;" (assignment_expression "pOVar4 = *ppOVar15" identifier = (pointer_expression "*ppOVar15" * identifier)) ;) (if_statement "if (pOVar4 != (Object *)0x0) {\n        (*pOVar4->_vptr_Object[1])(pOVar4);\n      }" if (parenthesized_expression "(pOVar4 != (Object *)0x0)" ( (binary_expression "pOVar4 != (Object *)0x0" identifier != (cast_expression "(Object *)0x0" ( (type_descriptor "Object *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (*pOVar4->_vptr_Object[1])(pOVar4);\n      }" { (expression_statement "(*pOVar4->_vptr_Object[1])(pOVar4);" (call_expression "(*pOVar4->_vptr_Object[1])(pOVar4)" (parenthesized_expression "(*pOVar4->_vptr_Object[1])" ( (pointer_expression "*pOVar4->_vptr_Object[1]" * (subscript_expression "pOVar4->_vptr_Object[1]" (field_expression "pOVar4->_vptr_Object" identifier -> field_identifier) [ number_literal ])) )) (argument_list "(pOVar4)" ( identifier ))) ;) })) (expression_statement "ppOVar15 = ppOVar15 + 1;" (assignment_expression "ppOVar15 = ppOVar15 + 1" identifier = (binary_expression "ppOVar15 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_finish != ppOVar15)" ( (binary_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_finish != ppOVar15" (field_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_finish" (field_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl" (binary_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "(this->objects_).super__Vector_base<gold::Object*,_std" (binary_expression "(this->objects_).super__Vector_base<gold" (field_expression "(this->objects_).super__Vector_base" (parenthesized_expression "(this->objects_)" ( (field_expression "this->objects_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) != identifier) )) ;) (expression_statement "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n              _M_impl._M_start;" (field_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n              _M_impl._M_start" (field_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n              _M_impl" (binary_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "ppOVar5 = (this->objects_).super__Vector_base<gold::Object*,_std" (assignment_expression "ppOVar5 = (this->objects_).super__Vector_base<gold" identifier = (binary_expression "(this->objects_).super__Vector_base<gold" (field_expression "(this->objects_).super__Vector_base" (parenthesized_expression "(this->objects_)" ( (field_expression "this->objects_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if (ppOVar5 != ppOVar15) {\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish = ppOVar5;\n    }" if (parenthesized_expression "(ppOVar5 != ppOVar15)" ( (binary_expression "ppOVar5 != ppOVar15" identifier != identifier) )) (compound_statement "{\n      (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish = ppOVar5;\n    }" { (expression_statement "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish = ppOVar5;" (assignment_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish = ppOVar5" (field_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl.\n      _M_finish" (field_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>._M_impl" (binary_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "(this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "(this->objects_).super__Vector_base<gold::Object*,_std" (binary_expression "(this->objects_).super__Vector_base<gold" (field_expression "(this->objects_).super__Vector_base" (parenthesized_expression "(this->objects_)" ( (field_expression "this->objects_" identifier -> field_identifier) )) . field_identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) = identifier) ;) })) })) (expression_statement "this_00 = this->lock_;" (assignment_expression "this_00 = this->lock_" identifier = (field_expression "this->lock_" identifier -> field_identifier)) ;) (if_statement "if (this_00 != (Lock *)0x0) {\n    Lock::~Lock(this_00,in_stack_ffffffc8);\n    operator_delete(this_00,4);\n  }" if (parenthesized_expression "(this_00 != (Lock *)0x0)" ( (binary_expression "this_00 != (Lock *)0x0" identifier != (cast_expression "(Lock *)0x0" ( (type_descriptor "Lock *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    Lock::~Lock(this_00,in_stack_ffffffc8);\n    operator_delete(this_00,4);\n  }" { (labeled_statement "Lock::~Lock(this_00,in_stack_ffffffc8);" statement_identifier : (ERROR ":" :) (expression_statement "~Lock(this_00,in_stack_ffffffc8);" (unary_expression "~Lock(this_00,in_stack_ffffffc8)" ~ (call_expression "Lock(this_00,in_stack_ffffffc8)" identifier (argument_list "(this_00,in_stack_ffffffc8)" ( identifier , identifier )))) ;)) (expression_statement "operator_delete(this_00,4);" (call_expression "operator_delete(this_00,4)" identifier (argument_list "(this_00,4)" ( identifier , number_literal ))) ;) })) (expression_statement "operator_delete(this->recorder_,0xc);" (call_expression "operator_delete(this->recorder_,0xc)" identifier (argument_list "(this->recorder_,0xc)" ( (field_expression "this->recorder_" identifier -> field_identifier) , number_literal ))) ;) (expression_statement "p_Var12 = (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt;" (assignment_expression "p_Var12 = (this->defsym_defines_set_)._M_h._M_before_begin._M_nxt" identifier = (field_expression "(this->defsym_defines_set_)._M_h._M_before_begin._M_nxt" (field_expression "(this->defsym_defines_set_)._M_h._M_before_begin" (field_expression "(this->defsym_defines_set_)._M_h" (parenthesized_expression "(this->defsym_defines_set_)" ( (field_expression "this->defsym_defines_set_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier)) ;) (while_statement "while (p_Var12 != (_Hash_node_base *)0x0) {\n    p_Var6 = p_Var12->_M_nxt;\n    if (p_Var12[1]._M_nxt != p_Var12 + 3) {\n      operator_delete(p_Var12[1]._M_nxt);\n    }\n    operator_delete(p_Var12);\n    p_Var12 = p_Var6;\n  }" while (parenthesized_expression "(p_Var12 != (_Hash_node_base *)0x0)" ( (binary_expression "p_Var12 != (_Hash_node_base *)0x0" identifier != (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    p_Var6 = p_Var12->_M_nxt;\n    if (p_Var12[1]._M_nxt != p_Var12 + 3) {\n      operator_delete(p_Var12[1]._M_nxt);\n    }\n    operator_delete(p_Var12);\n    p_Var12 = p_Var6;\n  }" { (expression_statement "p_Var6 = p_Var12->_M_nxt;" (assignment_expression "p_Var6 = p_Var12->_M_nxt" identifier = (field_expression "p_Var12->_M_nxt" identifier -> field_identifier)) ;) (if_statement "if (p_Var12[1]._M_nxt != p_Var12 + 3) {\n      operator_delete(p_Var12[1]._M_nxt);\n    }" if (parenthesized_expression "(p_Var12[1]._M_nxt != p_Var12 + 3)" ( (binary_expression "p_Var12[1]._M_nxt != p_Var12 + 3" (field_expression "p_Var12[1]._M_nxt" (subscript_expression "p_Var12[1]" identifier [ number_literal ]) . field_identifier) != (binary_expression "p_Var12 + 3" identifier + number_literal)) )) (compound_statement "{\n      operator_delete(p_Var12[1]._M_nxt);\n    }" { (expression_statement "operator_delete(p_Var12[1]._M_nxt);" (call_expression "operator_delete(p_Var12[1]._M_nxt)" identifier (argument_list "(p_Var12[1]._M_nxt)" ( (field_expression "p_Var12[1]._M_nxt" (subscript_expression "p_Var12[1]" identifier [ number_literal ]) . field_identifier) ))) ;) })) (expression_statement "operator_delete(p_Var12);" (call_expression "operator_delete(p_Var12)" identifier (argument_list "(p_Var12)" ( identifier ))) ;) (expression_statement "p_Var12 = p_Var6;" (assignment_expression "p_Var12 = p_Var6" identifier = identifier) ;) })) (expression_statement "memset((this->defsym_defines_set_)._M_h._M_buckets,0,\n         (this->defsym_defines_set_)._M_h._M_bucket_count << 2);" (call_expression "memset((this->defsym_defines_set_)._M_h._M_buckets,0,\n         (this->defsym_defines_set_)._M_h._M_bucket_count << 2)" identifier (argument_list "((this->defsym_defines_set_)._M_h._M_buckets,0,\n         (this->defsym_defines_set_)._M_h._M_bucket_count << 2)" ( (field_expression "(this->defsym_defines_set_)._M_h._M_buckets" (field_expression "(this->defsym_defines_set_)._M_h" (parenthesized_expression "(this->defsym_defines_set_)" ( (field_expression "this->defsym_defines_set_" identifier -> field_identifier) )) . field_identifier) . field_identifier) , number_literal , (binary_expression "(this->defsym_defines_set_)._M_h._M_bucket_count << 2" (field_expression "(this->defsym_defines_set_)._M_h._M_bucket_count" (field_expression "(this->defsym_defines_set_)._M_h" (parenthesized_expression "(this->defsym_defines_set_)" ( (field_expression "this->defsym_defines_set_" identifier -> field_identifier) )) . field_identifier) . field_identifier) << number_literal) ))) ;) (expression_statement "pp_Var7 = (this->defsym_defines_set_)._M_h._M_buckets;" (assignment_expression "pp_Var7 = (this->defsym_defines_set_)._M_h._M_buckets" identifier = (field_expression "(this->defsym_defines_set_)._M_h._M_buckets" (field_expression "(this->defsym_defines_set_)._M_h" (parenthesized_expression "(this->defsym_defines_set_)" ( (field_expression "this->defsym_defines_set_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "(this->defsym_defines_set_)._M_h._M_element_count = 0;" (assignment_expression "(this->defsym_defines_set_)._M_h._M_element_count = 0" (field_expression "(this->defsym_defines_set_)._M_h._M_element_count" (field_expression "(this->defsym_defines_set_)._M_h" (parenthesized_expression "(this->defsym_defines_set_)" ( (field_expression "this->defsym_defines_set_" identifier -> field_identifier) )) . field_identifier) . field_identifier) = number_literal) ;) (expression_statement "(this->defsym_defines_set_)._M_h._M_before_begin._M_nxt = (_Hash_node_base *)0x0;" (assignment_expression "(this->defsym_defines_set_)._M_h._M_before_begin._M_nxt = (_Hash_node_base *)0x0" (field_expression "(this->defsym_defines_set_)._M_h._M_before_begin._M_nxt" (field_expression "(this->defsym_defines_set_)._M_h._M_before_begin" (field_expression "(this->defsym_defines_set_)._M_h" (parenthesized_expression "(this->defsym_defines_set_)" ( (field_expression "this->defsym_defines_set_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) = (cast_expression "(_Hash_node_base *)0x0" ( (type_descriptor "_Hash_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (pp_Var7 != &(this->defsym_defines_set_)._M_h._M_single_bucket) {\n    operator_delete(pp_Var7);\n  }" if (parenthesized_expression "(pp_Var7 != &(this->defsym_defines_set_)._M_h._M_single_bucket)" ( (binary_expression "pp_Var7 != &(this->defsym_defines_set_)._M_h._M_single_bucket" identifier != (pointer_expression "&(this->defsym_defines_set_)._M_h._M_single_bucket" & (field_expression "(this->defsym_defines_set_)._M_h._M_single_bucket" (field_expression "(this->defsym_defines_set_)._M_h" (parenthesized_expression "(this->defsym_defines_set_)" ( (field_expression "this->defsym_defines_set_" identifier -> field_identifier) )) . field_identifier) . field_identifier))) )) (compound_statement "{\n    operator_delete(pp_Var7);\n  }" { (expression_statement "operator_delete(pp_Var7);" (call_expression "operator_delete(pp_Var7)" identifier (argument_list "(pp_Var7)" ( identifier ))) ;) })) (expression_statement "pcVar8 = (this->extra_search_path_)._M_dataplus._M_p;" (assignment_expression "pcVar8 = (this->extra_search_path_)._M_dataplus._M_p" identifier = (field_expression "(this->extra_search_path_)._M_dataplus._M_p" (field_expression "(this->extra_search_path_)._M_dataplus" (parenthesized_expression "(this->extra_search_path_)" ( (field_expression "this->extra_search_path_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (if_statement "if ((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)pcVar8 != &(this->extra_search_path_).field_2) {\n    operator_delete(pcVar8);\n  }" if (parenthesized_expression "((anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)pcVar8 != &(this->extra_search_path_).field_2)" ( (parenthesized_expression "(anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::allocator<char>_>_9\n       *)pcVar8 != &(this->extra_search_path_).field_2)" ( (ERROR "anon_union_16_2_edb7204a_for_basic_string<char,_std::char_traits<char>,_std::" (comma_expression "anon_union_16_2_edb7204a_for_basic_string<char,_std" (binary_expression "anon_union_16_2_edb7204a_for_basic_string<char" identifier < identifier) , identifier) : : (binary_expression "char_traits<char>,_std" (binary_expression "char_traits<char" identifier < identifier) > (ERROR "," ,) identifier) : :) (binary_expression "allocator<char>_>_9\n       *)pcVar8 != &(this->extra_search_path_).field_2" (binary_expression "allocator<char>_>_9\n       *)pcVar8" (binary_expression "allocator<char>_" (binary_expression "allocator<char" identifier < identifier) > identifier) > (binary_expression "_9\n       *)pcVar8" identifier * (ERROR ")" )) identifier)) != (pointer_expression "&(this->extra_search_path_).field_2" & (field_expression "(this->extra_search_path_).field_2" (parenthesized_expression "(this->extra_search_path_)" ( (field_expression "this->extra_search_path_" identifier -> field_identifier) )) . field_identifier))) )) )) (compound_statement "{\n    operator_delete(pcVar8);\n  }" { (expression_statement "operator_delete(pcVar8);" (call_expression "operator_delete(pcVar8)" identifier (argument_list "(pcVar8)" ( identifier ))) ;) })) (expression_statement "ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl._M_start;" (field_expression "ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl._M_start" (field_expression "ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_>._M_impl" (binary_expression "ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold::Symbol*,_std::allocator<gold::Symbol*>_" (binary_expression "ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold::Symbol*,_std::allocator<gold" (binary_expression "ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold::Symbol*,_std" (assignment_expression "ppSVar9 = (this->undefined_symbols_).\n            super__Vector_base<gold" identifier = (binary_expression "(this->undefined_symbols_).\n            super__Vector_base<gold" (field_expression "(this->undefined_symbols_).\n            super__Vector_base" (parenthesized_expression "(this->undefined_symbols_)" ( (field_expression "this->undefined_symbols_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Symbol" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Symbol" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if (ppSVar9 != (pointer)0x0) {\n    operator_delete(ppSVar9);\n  }" if (parenthesized_expression "(ppSVar9 != (pointer)0x0)" ( (binary_expression "ppSVar9 != (pointer)0x0" identifier != (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) )) (compound_statement "{\n    operator_delete(ppSVar9);\n  }" { (expression_statement "operator_delete(ppSVar9);" (call_expression "operator_delete(ppSVar9)" identifier (argument_list "(ppSVar9)" ( identifier ))) ;) })) (ERROR "pRVar10 = (this->rescannable_).\n            super__Vector_base<gold::" (assignment_expression "pRVar10 = (this->rescannable_).\n            super__Vector_base<gold" identifier = (binary_expression "(this->rescannable_).\n            super__Vector_base<gold" (field_expression "(this->rescannable_).\n            super__Vector_base" (parenthesized_expression "(this->rescannable_)" ( (field_expression "this->rescannable_" identifier -> field_identifier) )) . field_identifier) < identifier)) : :) (labeled_statement "Plugin_manager::Rescannable,_std::allocator<gold::Plugin_manager::Rescannable>_>\n            ._M_impl._M_start;" statement_identifier (ERROR "::Rescannable,_std::allocator<gold:" : : (comma_expression "Rescannable,_std" identifier , identifier) : : (binary_expression "allocator<gold" identifier < identifier) :) : (labeled_statement "Plugin_manager::Rescannable>_>\n            ._M_impl._M_start;" statement_identifier : (ERROR ":" :) (expression_statement "Rescannable>_>\n            ._M_impl._M_start;" (field_expression "Rescannable>_>\n            ._M_impl._M_start" (field_expression "Rescannable>_>\n            ._M_impl" (binary_expression "Rescannable>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;))) (if_statement "if (pRVar10 != (pointer)0x0) {\n    operator_delete(pRVar10);\n  }" if (parenthesized_expression "(pRVar10 != (pointer)0x0)" ( (binary_expression "pRVar10 != (pointer)0x0" identifier != (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) )) (compound_statement "{\n    operator_delete(pRVar10);\n  }" { (expression_statement "operator_delete(pRVar10);" (call_expression "operator_delete(pRVar10)" identifier (argument_list "(pRVar10)" ( identifier ))) ;) })) (expression_statement "ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold::Relobj*,_std::allocator<gold::Relobj*>_>._M_impl._M_start;" (field_expression "ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold::Relobj*,_std::allocator<gold::Relobj*>_>._M_impl._M_start" (field_expression "ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold::Relobj*,_std::allocator<gold::Relobj*>_>._M_impl" (binary_expression "ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold::Relobj*,_std::allocator<gold::Relobj*>_" (binary_expression "ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold::Relobj*,_std::allocator<gold" (binary_expression "ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold::Relobj*,_std" (assignment_expression "ppRVar11 = (this->deferred_layout_objects_).\n             super__Vector_base<gold" identifier = (binary_expression "(this->deferred_layout_objects_).\n             super__Vector_base<gold" (field_expression "(this->deferred_layout_objects_).\n             super__Vector_base" (parenthesized_expression "(this->deferred_layout_objects_)" ( (field_expression "this->deferred_layout_objects_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Relobj" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Relobj" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if (ppRVar11 != (pointer)0x0) {\n    operator_delete(ppRVar11);\n  }" if (parenthesized_expression "(ppRVar11 != (pointer)0x0)" ( (binary_expression "ppRVar11 != (pointer)0x0" identifier != (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) )) (compound_statement "{\n    operator_delete(ppRVar11);\n  }" { (expression_statement "operator_delete(ppRVar11);" (call_expression "operator_delete(ppRVar11)" identifier (argument_list "(ppRVar11)" ( identifier ))) ;) })) (expression_statement "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start;" (field_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl._M_start" (field_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_>.\n             _M_impl" (binary_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold::Object*>_" (binary_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std::allocator<gold" (binary_expression "ppOVar15 = (this->objects_).super__Vector_base<gold::Object*,_std" (assignment_expression "ppOVar15 = (this->objects_).super__Vector_base<gold" identifier = (binary_expression "(this->objects_).super__Vector_base<gold" (field_expression "(this->objects_).super__Vector_base" (parenthesized_expression "(this->objects_)" ( (field_expression "this->objects_" identifier -> field_identifier) )) . field_identifier) < identifier)) (ERROR "::Object" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Object" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) ;) (if_statement "if (ppOVar15 != (pointer)0x0) {\n    operator_delete(ppOVar15);\n  }" if (parenthesized_expression "(ppOVar15 != (pointer)0x0)" ( (binary_expression "ppOVar15 != (pointer)0x0" identifier != (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) )) (compound_statement "{\n    operator_delete(ppOVar15);\n  }" { (expression_statement "operator_delete(ppOVar15);" (call_expression "operator_delete(ppOVar15)" identifier (argument_list "(ppOVar15)" ( identifier ))) ;) })) (expression_statement "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next;" (field_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base._M_next" (field_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node.super__List_node_base" (field_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl\n            ._M_node" (field_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>._M_impl" (binary_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold::Plugin*,_std" (assignment_expression "pPVar13 = (Plugin_manager *)\n            (this->plugins_).super__List_base<gold" identifier = (binary_expression "(Plugin_manager *)\n            (this->plugins_).super__List_base<gold" (cast_expression "(Plugin_manager *)\n            (this->plugins_).super__List_base" ( (type_descriptor "Plugin_manager *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(this->plugins_).super__List_base" (parenthesized_expression "(this->plugins_)" ( (field_expression "this->plugins_" identifier -> field_identifier) )) . field_identifier)) < identifier)) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) ;) (while_statement "while (pPVar13 != this) {\n    pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl._M_node.super__List_node_base._M_next;\n    operator_delete(pPVar13);\n    pPVar13 = pPVar3;\n  }" while (parenthesized_expression "(pPVar13 != this)" ( (binary_expression "pPVar13 != this" identifier != identifier) )) (compound_statement "{\n    pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl._M_node.super__List_node_base._M_next;\n    operator_delete(pPVar13);\n    pPVar13 = pPVar3;\n  }" { (expression_statement "pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl._M_node.super__List_node_base._M_next;" (field_expression "pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl._M_node.super__List_node_base._M_next" (field_expression "pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl._M_node.super__List_node_base" (field_expression "pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl._M_node" (field_expression "pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_>.\n             _M_impl" (binary_expression "pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold::Plugin*>_" (binary_expression "pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std::allocator<gold" (binary_expression "pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold::Plugin*,_std" (assignment_expression "pPVar3 = (Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold" identifier = (binary_expression "(Plugin_manager *)\n             (pPVar13->plugins_).super__List_base<gold" (cast_expression "(Plugin_manager *)\n             (pPVar13->plugins_).super__List_base" ( (type_descriptor "Plugin_manager *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(pPVar13->plugins_).super__List_base" (parenthesized_expression "(pPVar13->plugins_)" ( (field_expression "pPVar13->plugins_" identifier -> field_identifier) )) . field_identifier)) < identifier)) (ERROR "::Plugin" : : identifier) * (ERROR "," ,) identifier) (ERROR "::allocator" : : identifier) < identifier) (ERROR "::Plugin" : : identifier) * (ERROR ">" >) identifier) (ERROR ">" >) . field_identifier) . field_identifier) . field_identifier) . field_identifier) ;) (expression_statement "operator_delete(pPVar13);" (call_expression "operator_delete(pPVar13)" identifier (argument_list "(pPVar13)" ( identifier ))) ;) (expression_statement "pPVar13 = pPVar3;" (assignment_expression "pPVar13 = pPVar3" identifier = identifier) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_000ef8c0(int *param_1)\n\n{\n  int iVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  piVar5 = (int *)*param_1;\n  if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }\n  param_1[1] = (int)param_1;\n  piVar5 = (int *)param_1[4];\n  *param_1 = (int)param_1;\n  param_1[2] = 0;\n  if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }\n  iVar1 = param_1[0x28];\n  if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }\n  FUN_00180780(param_1[0x35],0xc);\n  puVar4 = (undefined4 *)param_1[0x30];\n  while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }\n  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);\n  param_1[0x31] = 0;\n  param_1[0x30] = 0;\n  if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }\n  if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }\n  if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }\n  if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }\n  if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }\n  if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }\n  piVar5 = (int *)*param_1;\n  while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }\n  return;\n}\n\n" (function_definition "void FUN_000ef8c0(int *param_1)\n\n{\n  int iVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  piVar5 = (int *)*param_1;\n  if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }\n  param_1[1] = (int)param_1;\n  piVar5 = (int *)param_1[4];\n  *param_1 = (int)param_1;\n  param_1[2] = 0;\n  if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }\n  iVar1 = param_1[0x28];\n  if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }\n  FUN_00180780(param_1[0x35],0xc);\n  puVar4 = (undefined4 *)param_1[0x30];\n  while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }\n  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);\n  param_1[0x31] = 0;\n  param_1[0x30] = 0;\n  if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }\n  if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }\n  if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }\n  if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }\n  if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }\n  if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }\n  piVar5 = (int *)*param_1;\n  while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }\n  return;\n}" primitive_type (function_declarator "FUN_000ef8c0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  piVar5 = (int *)*param_1;\n  if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }\n  param_1[1] = (int)param_1;\n  piVar5 = (int *)param_1[4];\n  *param_1 = (int)param_1;\n  param_1[2] = 0;\n  if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }\n  iVar1 = param_1[0x28];\n  if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }\n  FUN_00180780(param_1[0x35],0xc);\n  puVar4 = (undefined4 *)param_1[0x30];\n  while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }\n  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);\n  param_1[0x31] = 0;\n  param_1[0x30] = 0;\n  if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }\n  if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }\n  if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }\n  if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }\n  if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }\n  if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }\n  piVar5 = (int *)*param_1;\n  while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "undefined4 *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (expression_statement "piVar5 = (int *)*param_1;" (assignment_expression "piVar5 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (if_statement "if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }" if (parenthesized_expression "(piVar5 != param_1)" ( (binary_expression "piVar5 != param_1" identifier != identifier) )) (compound_statement "{\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }" { (do_statement "do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);" do (compound_statement "{\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    }" { (expression_statement "iVar1 = piVar5[2];" (assignment_expression "iVar1 = piVar5[2]" identifier = (subscript_expression "piVar5[2]" identifier [ number_literal ])) ;) (if_statement "if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }" { (expression_statement "piVar2 = *(int **)(iVar1 + 0x20);" (assignment_expression "piVar2 = *(int **)(iVar1 + 0x20)" identifier = (pointer_expression "*(int **)(iVar1 + 0x20)" * (cast_expression "(int **)(iVar1 + 0x20)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x20)" ( (binary_expression "iVar1 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "piVar6 = *(int **)(iVar1 + 0x1c);" (assignment_expression "piVar6 = *(int **)(iVar1 + 0x1c)" identifier = (pointer_expression "*(int **)(iVar1 + 0x1c)" * (cast_expression "(int **)(iVar1 + 0x1c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x1c)" ( (binary_expression "iVar1 + 0x1c" identifier + number_literal) ))))) ;) (if_statement "if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }" if (parenthesized_expression "(piVar2 != piVar6)" ( (binary_expression "piVar2 != piVar6" identifier != identifier) )) (compound_statement "{\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }" { (do_statement "do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);" do (compound_statement "{\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          }" { (if_statement "if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }" if (parenthesized_expression "((int *)*piVar6 != piVar6 + 2)" ( (binary_expression "(int *)*piVar6 != piVar6 + 2" (cast_expression "(int *)*piVar6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar6" * identifier)) != (binary_expression "piVar6 + 2" identifier + number_literal)) )) (compound_statement "{\n              FUN_001807a0((int *)*piVar6);\n            }" { (expression_statement "FUN_001807a0((int *)*piVar6);" (call_expression "FUN_001807a0((int *)*piVar6)" identifier (argument_list "((int *)*piVar6)" ( (cast_expression "(int *)*piVar6" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar6" * identifier)) ))) ;) })) (expression_statement "piVar6 = piVar6 + 6;" (assignment_expression "piVar6 = piVar6 + 6" identifier = (binary_expression "piVar6 + 6" identifier + number_literal)) ;) }) while (parenthesized_expression "(piVar2 != piVar6)" ( (binary_expression "piVar2 != piVar6" identifier != identifier) )) ;) (expression_statement "piVar6 = *(int **)(iVar1 + 0x1c);" (assignment_expression "piVar6 = *(int **)(iVar1 + 0x1c)" identifier = (pointer_expression "*(int **)(iVar1 + 0x1c)" * (cast_expression "(int **)(iVar1 + 0x1c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar1 + 0x1c)" ( (binary_expression "iVar1 + 0x1c" identifier + number_literal) ))))) ;) })) (if_statement "if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }" if (parenthesized_expression "(piVar6 != (int *)0x0)" ( (binary_expression "piVar6 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          FUN_001807a0(piVar6);\n        }" { (expression_statement "FUN_001807a0(piVar6);" (call_expression "FUN_001807a0(piVar6)" identifier (argument_list "(piVar6)" ( identifier ))) ;) })) (if_statement "if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }" if (parenthesized_expression "(*(int *)(iVar1 + 4) != iVar1 + 0xc)" ( (binary_expression "*(int *)(iVar1 + 4) != iVar1 + 0xc" (pointer_expression "*(int *)(iVar1 + 4)" * (cast_expression "(int *)(iVar1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) )))) != (binary_expression "iVar1 + 0xc" identifier + number_literal)) )) (compound_statement "{\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }" { (expression_statement "FUN_001807a0(*(int *)(iVar1 + 4));" (call_expression "FUN_001807a0(*(int *)(iVar1 + 4))" identifier (argument_list "(*(int *)(iVar1 + 4))" ( (pointer_expression "*(int *)(iVar1 + 4)" * (cast_expression "(int *)(iVar1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) )))) ))) ;) })) (expression_statement "FUN_00180780(iVar1,0x3c);" (call_expression "FUN_00180780(iVar1,0x3c)" identifier (argument_list "(iVar1,0x3c)" ( identifier , number_literal ))) ;) })) (expression_statement "piVar5 = (int *)*piVar5;" (assignment_expression "piVar5 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) }) while (parenthesized_expression "(piVar5 != param_1)" ( (binary_expression "piVar5 != param_1" identifier != identifier) )) ;) (expression_statement "piVar5 = (int *)*param_1;" (assignment_expression "piVar5 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (while_statement "while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }" while (parenthesized_expression "(piVar5 != param_1)" ( (binary_expression "piVar5 != param_1" identifier != identifier) )) (compound_statement "{\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }" { (expression_statement "piVar2 = (int *)*piVar5;" (assignment_expression "piVar2 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) (expression_statement "FUN_001807a0(piVar5);" (call_expression "FUN_001807a0(piVar5)" identifier (argument_list "(piVar5)" ( identifier ))) ;) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" identifier = identifier) ;) })) })) (expression_statement "param_1[1] = (int)param_1;" (assignment_expression "param_1[1] = (int)param_1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar5 = (int *)param_1[4];" (assignment_expression "piVar5 = (int *)param_1[4]" identifier = (cast_expression "(int *)param_1[4]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ]))) ;) (expression_statement "*param_1 = (int)param_1;" (assignment_expression "*param_1 = (int)param_1" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }" if (parenthesized_expression "(piVar5 != (int *)param_1[5])" ( (binary_expression "piVar5 != (int *)param_1[5]" identifier != (cast_expression "(int *)param_1[5]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[5]" identifier [ number_literal ]))) )) (compound_statement "{\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }" { (do_statement "do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);" do (compound_statement "{\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    }" { (expression_statement "piVar2 = (int *)*piVar5;" (assignment_expression "piVar2 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) (if_statement "if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }" if (parenthesized_expression "(piVar2 != (int *)0x0)" ( (binary_expression "piVar2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }" { (expression_statement "(**(code **)(*piVar2 + 4))(piVar2);" (call_expression "(**(code **)(*piVar2 + 4))(piVar2)" (parenthesized_expression "(**(code **)(*piVar2 + 4))" ( (pointer_expression "**(code **)(*piVar2 + 4)" * (pointer_expression "*(code **)(*piVar2 + 4)" * (cast_expression "(code **)(*piVar2 + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar2 + 4)" ( (binary_expression "*piVar2 + 4" (pointer_expression "*piVar2" * identifier) + number_literal) ))))) )) (argument_list "(piVar2)" ( identifier ))) ;) })) (expression_statement "piVar5 = piVar5 + 1;" (assignment_expression "piVar5 = piVar5 + 1" identifier = (binary_expression "piVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "((int *)param_1[5] != piVar5)" ( (binary_expression "(int *)param_1[5] != piVar5" (cast_expression "(int *)param_1[5]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) != identifier) )) ;) (if_statement "if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }" if (parenthesized_expression "((int *)param_1[4] != piVar5)" ( (binary_expression "(int *)param_1[4] != piVar5" (cast_expression "(int *)param_1[4]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[4]" identifier [ number_literal ])) != identifier) )) (compound_statement "{\n      param_1[5] = param_1[4];\n    }" { (expression_statement "param_1[5] = param_1[4];" (assignment_expression "param_1[5] = param_1[4]" (subscript_expression "param_1[5]" identifier [ number_literal ]) = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) })) })) (expression_statement "iVar1 = param_1[0x28];" (assignment_expression "iVar1 = param_1[0x28]" identifier = (subscript_expression "param_1[0x28]" identifier [ number_literal ])) ;) (if_statement "if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }" if (parenthesized_expression "(iVar1 != 0)" ( (binary_expression "iVar1 != 0" identifier != number_literal) )) (compound_statement "{\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }" { (expression_statement "FUN_00061fe0(iVar1);" (call_expression "FUN_00061fe0(iVar1)" identifier (argument_list "(iVar1)" ( identifier ))) ;) (expression_statement "FUN_00180780(iVar1,4);" (call_expression "FUN_00180780(iVar1,4)" identifier (argument_list "(iVar1,4)" ( identifier , number_literal ))) ;) })) (expression_statement "FUN_00180780(param_1[0x35],0xc);" (call_expression "FUN_00180780(param_1[0x35],0xc)" identifier (argument_list "(param_1[0x35],0xc)" ( (subscript_expression "param_1[0x35]" identifier [ number_literal ]) , number_literal ))) ;) (expression_statement "puVar4 = (undefined4 *)param_1[0x30];" (assignment_expression "puVar4 = (undefined4 *)param_1[0x30]" identifier = (cast_expression "(undefined4 *)param_1[0x30]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x30]" identifier [ number_literal ]))) ;) (while_statement "while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }" while (parenthesized_expression "(puVar4 != (undefined4 *)0x0)" ( (binary_expression "puVar4 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }" { (expression_statement "puVar3 = (undefined4 *)*puVar4;" (assignment_expression "puVar3 = (undefined4 *)*puVar4" identifier = (cast_expression "(undefined4 *)*puVar4" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar4" * identifier))) ;) (if_statement "if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }" if (parenthesized_expression "((undefined4 *)puVar4[1] != puVar4 + 3)" ( (binary_expression "(undefined4 *)puVar4[1] != puVar4 + 3" (cast_expression "(undefined4 *)puVar4[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ])) != (binary_expression "puVar4 + 3" identifier + number_literal)) )) (compound_statement "{\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }" { (expression_statement "FUN_001807a0((undefined4 *)puVar4[1]);" (call_expression "FUN_001807a0((undefined4 *)puVar4[1])" identifier (argument_list "((undefined4 *)puVar4[1])" ( (cast_expression "(undefined4 *)puVar4[1]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar4[1]" identifier [ number_literal ])) ))) ;) })) (expression_statement "FUN_001807a0(puVar4);" (call_expression "FUN_001807a0(puVar4)" identifier (argument_list "(puVar4)" ( identifier ))) ;) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" identifier = identifier) ;) })) (expression_statement "memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);" (call_expression "memset((void *)param_1[0x2e],0,param_1[0x2f] << 2)" identifier (argument_list "((void *)param_1[0x2e],0,param_1[0x2f] << 2)" ( (cast_expression "(void *)param_1[0x2e]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) , number_literal , (binary_expression "param_1[0x2f] << 2" (subscript_expression "param_1[0x2f]" identifier [ number_literal ]) << number_literal) ))) ;) (expression_statement "param_1[0x31] = 0;" (assignment_expression "param_1[0x31] = 0" (subscript_expression "param_1[0x31]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x30] = 0;" (assignment_expression "param_1[0x30] = 0" (subscript_expression "param_1[0x30]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }" if (parenthesized_expression "((int *)param_1[0x2e] != param_1 + 0x34)" ( (binary_expression "(int *)param_1[0x2e] != param_1 + 0x34" (cast_expression "(int *)param_1[0x2e]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) != (binary_expression "param_1 + 0x34" identifier + number_literal)) )) (compound_statement "{\n    FUN_001807a0((int *)param_1[0x2e]);\n  }" { (expression_statement "FUN_001807a0((int *)param_1[0x2e]);" (call_expression "FUN_001807a0((int *)param_1[0x2e])" identifier (argument_list "((int *)param_1[0x2e])" ( (cast_expression "(int *)param_1[0x2e]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x2e]" identifier [ number_literal ])) ))) ;) })) (if_statement "if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }" if (parenthesized_expression "((int *)param_1[0x22] != param_1 + 0x24)" ( (binary_expression "(int *)param_1[0x22] != param_1 + 0x24" (cast_expression "(int *)param_1[0x22]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x22]" identifier [ number_literal ])) != (binary_expression "param_1 + 0x24" identifier + number_literal)) )) (compound_statement "{\n    FUN_001807a0((int *)param_1[0x22]);\n  }" { (expression_statement "FUN_001807a0((int *)param_1[0x22]);" (call_expression "FUN_001807a0((int *)param_1[0x22])" identifier (argument_list "((int *)param_1[0x22])" ( (cast_expression "(int *)param_1[0x22]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x22]" identifier [ number_literal ])) ))) ;) })) (if_statement "if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }" if (parenthesized_expression "(param_1[0x15] != 0)" ( (binary_expression "param_1[0x15] != 0" (subscript_expression "param_1[0x15]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_001807a0(param_1[0x15]);\n  }" { (expression_statement "FUN_001807a0(param_1[0x15]);" (call_expression "FUN_001807a0(param_1[0x15])" identifier (argument_list "(param_1[0x15])" ( (subscript_expression "param_1[0x15]" identifier [ number_literal ]) ))) ;) })) (if_statement "if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }" if (parenthesized_expression "(param_1[0x12] != 0)" ( (binary_expression "param_1[0x12] != 0" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_001807a0(param_1[0x12]);\n  }" { (expression_statement "FUN_001807a0(param_1[0x12]);" (call_expression "FUN_001807a0(param_1[0x12])" identifier (argument_list "(param_1[0x12])" ( (subscript_expression "param_1[0x12]" identifier [ number_literal ]) ))) ;) })) (if_statement "if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }" if (parenthesized_expression "(param_1[7] != 0)" ( (binary_expression "param_1[7] != 0" (subscript_expression "param_1[7]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_001807a0(param_1[7]);\n  }" { (expression_statement "FUN_001807a0(param_1[7]);" (call_expression "FUN_001807a0(param_1[7])" identifier (argument_list "(param_1[7])" ( (subscript_expression "param_1[7]" identifier [ number_literal ]) ))) ;) })) (if_statement "if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }" if (parenthesized_expression "(param_1[4] != 0)" ( (binary_expression "param_1[4] != 0" (subscript_expression "param_1[4]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n    FUN_001807a0(param_1[4]);\n  }" { (expression_statement "FUN_001807a0(param_1[4]);" (call_expression "FUN_001807a0(param_1[4])" identifier (argument_list "(param_1[4])" ( (subscript_expression "param_1[4]" identifier [ number_literal ]) ))) ;) })) (expression_statement "piVar5 = (int *)*param_1;" (assignment_expression "piVar5 = (int *)*param_1" identifier = (cast_expression "(int *)*param_1" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (while_statement "while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }" while (parenthesized_expression "(piVar5 != param_1)" ( (binary_expression "piVar5 != param_1" identifier != identifier) )) (compound_statement "{\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }" { (expression_statement "piVar2 = (int *)*piVar5;" (assignment_expression "piVar2 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) (expression_statement "FUN_001807a0(piVar5);" (call_expression "FUN_001807a0(piVar5)" identifier (argument_list "(piVar5)" ( identifier ))) ;) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" identifier = identifier) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (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 = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) != (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != 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) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) })) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , LIT , (binary_expression (subscript_expression IDENT [ LIT ]) << LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) != (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (return_statement return ;) })))
(function_definition "void FUN_000ef8c0(int *param_1)\n\n{\n  int iVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  piVar5 = (int *)*param_1;\n  if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }\n  param_1[1] = (int)param_1;\n  piVar5 = (int *)param_1[4];\n  *param_1 = (int)param_1;\n  param_1[2] = 0;\n  if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }\n  iVar1 = param_1[0x28];\n  if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }\n  FUN_00180780(param_1[0x35],0xc);\n  puVar4 = (undefined4 *)param_1[0x30];\n  while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }\n  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);\n  param_1[0x31] = 0;\n  param_1[0x30] = 0;\n  if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }\n  if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }\n  if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }\n  if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }\n  if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }\n  if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }\n  piVar5 = (int *)*param_1;\n  while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_000ef8c0(int *param_1)" (identifier "FUN_000ef8c0") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  undefined4 *puVar3;\n  undefined4 *puVar4;\n  int *piVar5;\n  int *piVar6;\n  \n  piVar5 = (int *)*param_1;\n  if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }\n  param_1[1] = (int)param_1;\n  piVar5 = (int *)param_1[4];\n  *param_1 = (int)param_1;\n  param_1[2] = 0;\n  if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }\n  iVar1 = param_1[0x28];\n  if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }\n  FUN_00180780(param_1[0x35],0xc);\n  puVar4 = (undefined4 *)param_1[0x30];\n  while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }\n  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);\n  param_1[0x31] = 0;\n  param_1[0x30] = 0;\n  if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }\n  if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }\n  if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }\n  if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }\n  if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }\n  if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }\n  piVar5 = (int *)*param_1;\n  while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "undefined4 *puVar4;" (type_identifier "undefined4") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "int *piVar5;" (primitive_type "int") (pointer_declarator "*piVar5" (* "*") (identifier "piVar5")) (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (expression_statement "piVar5 = (int *)*param_1;" (assignment_expression "piVar5 = (int *)*param_1" (identifier "piVar5") (= "=") (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (if_statement "if (piVar5 != param_1) {\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }" (if "if") (parenthesized_expression "(piVar5 != param_1)" (( "(") (binary_expression "piVar5 != param_1" (identifier "piVar5") (!= "!=") (identifier "param_1")) () ")")) (compound_statement "{\n    do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);\n    piVar5 = (int *)*param_1;\n    while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }\n  }" ({ "{") (do_statement "do {\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != param_1);" (do "do") (compound_statement "{\n      iVar1 = piVar5[2];\n      if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }\n      piVar5 = (int *)*piVar5;\n    }" ({ "{") (expression_statement "iVar1 = piVar5[2];" (assignment_expression "iVar1 = piVar5[2]" (identifier "iVar1") (= "=") (subscript_expression "piVar5[2]" (identifier "piVar5") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (iVar1 != 0) {\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        piVar2 = *(int **)(iVar1 + 0x20);\n        piVar6 = *(int **)(iVar1 + 0x1c);\n        if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }\n        if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }\n        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }\n        FUN_00180780(iVar1,0x3c);\n      }" ({ "{") (expression_statement "piVar2 = *(int **)(iVar1 + 0x20);" (assignment_expression "piVar2 = *(int **)(iVar1 + 0x20)" (identifier "piVar2") (= "=") (pointer_expression "*(int **)(iVar1 + 0x20)" (* "*") (cast_expression "(int **)(iVar1 + 0x20)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 0x20)" (( "(") (binary_expression "iVar1 + 0x20" (identifier "iVar1") (+ "+") (number_literal "0x20")) () ")"))))) (; ";")) (expression_statement "piVar6 = *(int **)(iVar1 + 0x1c);" (assignment_expression "piVar6 = *(int **)(iVar1 + 0x1c)" (identifier "piVar6") (= "=") (pointer_expression "*(int **)(iVar1 + 0x1c)" (* "*") (cast_expression "(int **)(iVar1 + 0x1c)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 0x1c)" (( "(") (binary_expression "iVar1 + 0x1c" (identifier "iVar1") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (if_statement "if (piVar2 != piVar6) {\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }" (if "if") (parenthesized_expression "(piVar2 != piVar6)" (( "(") (binary_expression "piVar2 != piVar6" (identifier "piVar2") (!= "!=") (identifier "piVar6")) () ")")) (compound_statement "{\n          do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);\n          piVar6 = *(int **)(iVar1 + 0x1c);\n        }" ({ "{") (do_statement "do {\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          } while (piVar2 != piVar6);" (do "do") (compound_statement "{\n            if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }\n            piVar6 = piVar6 + 6;\n          }" ({ "{") (if_statement "if ((int *)*piVar6 != piVar6 + 2) {\n              FUN_001807a0((int *)*piVar6);\n            }" (if "if") (parenthesized_expression "((int *)*piVar6 != piVar6 + 2)" (( "(") (binary_expression "(int *)*piVar6 != piVar6 + 2" (cast_expression "(int *)*piVar6" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar6" (* "*") (identifier "piVar6"))) (!= "!=") (binary_expression "piVar6 + 2" (identifier "piVar6") (+ "+") (number_literal "2"))) () ")")) (compound_statement "{\n              FUN_001807a0((int *)*piVar6);\n            }" ({ "{") (expression_statement "FUN_001807a0((int *)*piVar6);" (call_expression "FUN_001807a0((int *)*piVar6)" (identifier "FUN_001807a0") (argument_list "((int *)*piVar6)" (( "(") (cast_expression "(int *)*piVar6" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar6" (* "*") (identifier "piVar6"))) () ")"))) (; ";")) (} "}"))) (expression_statement "piVar6 = piVar6 + 6;" (assignment_expression "piVar6 = piVar6 + 6" (identifier "piVar6") (= "=") (binary_expression "piVar6 + 6" (identifier "piVar6") (+ "+") (number_literal "6"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(piVar2 != piVar6)" (( "(") (binary_expression "piVar2 != piVar6" (identifier "piVar2") (!= "!=") (identifier "piVar6")) () ")")) (; ";")) (expression_statement "piVar6 = *(int **)(iVar1 + 0x1c);" (assignment_expression "piVar6 = *(int **)(iVar1 + 0x1c)" (identifier "piVar6") (= "=") (pointer_expression "*(int **)(iVar1 + 0x1c)" (* "*") (cast_expression "(int **)(iVar1 + 0x1c)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar1 + 0x1c)" (( "(") (binary_expression "iVar1 + 0x1c" (identifier "iVar1") (+ "+") (number_literal "0x1c")) () ")"))))) (; ";")) (} "}"))) (if_statement "if (piVar6 != (int *)0x0) {\n          FUN_001807a0(piVar6);\n        }" (if "if") (parenthesized_expression "(piVar6 != (int *)0x0)" (( "(") (binary_expression "piVar6 != (int *)0x0" (identifier "piVar6") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          FUN_001807a0(piVar6);\n        }" ({ "{") (expression_statement "FUN_001807a0(piVar6);" (call_expression "FUN_001807a0(piVar6)" (identifier "FUN_001807a0") (argument_list "(piVar6)" (( "(") (identifier "piVar6") () ")"))) (; ";")) (} "}"))) (if_statement "if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }" (if "if") (parenthesized_expression "(*(int *)(iVar1 + 4) != iVar1 + 0xc)" (( "(") (binary_expression "*(int *)(iVar1 + 4) != iVar1 + 0xc" (pointer_expression "*(int *)(iVar1 + 4)" (* "*") (cast_expression "(int *)(iVar1 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 4)" (( "(") (binary_expression "iVar1 + 4" (identifier "iVar1") (+ "+") (number_literal "4")) () ")")))) (!= "!=") (binary_expression "iVar1 + 0xc" (identifier "iVar1") (+ "+") (number_literal "0xc"))) () ")")) (compound_statement "{\n          FUN_001807a0(*(int *)(iVar1 + 4));\n        }" ({ "{") (expression_statement "FUN_001807a0(*(int *)(iVar1 + 4));" (call_expression "FUN_001807a0(*(int *)(iVar1 + 4))" (identifier "FUN_001807a0") (argument_list "(*(int *)(iVar1 + 4))" (( "(") (pointer_expression "*(int *)(iVar1 + 4)" (* "*") (cast_expression "(int *)(iVar1 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 4)" (( "(") (binary_expression "iVar1 + 4" (identifier "iVar1") (+ "+") (number_literal "4")) () ")")))) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00180780(iVar1,0x3c);" (call_expression "FUN_00180780(iVar1,0x3c)" (identifier "FUN_00180780") (argument_list "(iVar1,0x3c)" (( "(") (identifier "iVar1") (, ",") (number_literal "0x3c") () ")"))) (; ";")) (} "}"))) (expression_statement "piVar5 = (int *)*piVar5;" (assignment_expression "piVar5 = (int *)*piVar5" (identifier "piVar5") (= "=") (cast_expression "(int *)*piVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar5" (* "*") (identifier "piVar5")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(piVar5 != param_1)" (( "(") (binary_expression "piVar5 != param_1" (identifier "piVar5") (!= "!=") (identifier "param_1")) () ")")) (; ";")) (expression_statement "piVar5 = (int *)*param_1;" (assignment_expression "piVar5 = (int *)*param_1" (identifier "piVar5") (= "=") (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (while_statement "while (piVar5 != param_1) {\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }" (while "while") (parenthesized_expression "(piVar5 != param_1)" (( "(") (binary_expression "piVar5 != param_1" (identifier "piVar5") (!= "!=") (identifier "param_1")) () ")")) (compound_statement "{\n      piVar2 = (int *)*piVar5;\n      FUN_001807a0(piVar5);\n      piVar5 = piVar2;\n    }" ({ "{") (expression_statement "piVar2 = (int *)*piVar5;" (assignment_expression "piVar2 = (int *)*piVar5" (identifier "piVar2") (= "=") (cast_expression "(int *)*piVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar5" (* "*") (identifier "piVar5")))) (; ";")) (expression_statement "FUN_001807a0(piVar5);" (call_expression "FUN_001807a0(piVar5)" (identifier "FUN_001807a0") (argument_list "(piVar5)" (( "(") (identifier "piVar5") () ")"))) (; ";")) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" (identifier "piVar5") (= "=") (identifier "piVar2")) (; ";")) (} "}"))) (} "}"))) (expression_statement "param_1[1] = (int)param_1;" (assignment_expression "param_1[1] = (int)param_1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) (; ";")) (expression_statement "piVar5 = (int *)param_1[4];" (assignment_expression "piVar5 = (int *)param_1[4]" (identifier "piVar5") (= "=") (cast_expression "(int *)param_1[4]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")))) (; ";")) (expression_statement "*param_1 = (int)param_1;" (assignment_expression "*param_1 = (int)param_1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) (; ";")) (expression_statement "param_1[2] = 0;" (assignment_expression "param_1[2] = 0" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (if_statement "if (piVar5 != (int *)param_1[5]) {\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }" (if "if") (parenthesized_expression "(piVar5 != (int *)param_1[5])" (( "(") (binary_expression "piVar5 != (int *)param_1[5]" (identifier "piVar5") (!= "!=") (cast_expression "(int *)param_1[5]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")))) () ")")) (compound_statement "{\n    do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);\n    if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }\n  }" ({ "{") (do_statement "do {\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    } while ((int *)param_1[5] != piVar5);" (do "do") (compound_statement "{\n      piVar2 = (int *)*piVar5;\n      if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }\n      piVar5 = piVar5 + 1;\n    }" ({ "{") (expression_statement "piVar2 = (int *)*piVar5;" (assignment_expression "piVar2 = (int *)*piVar5" (identifier "piVar2") (= "=") (cast_expression "(int *)*piVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar5" (* "*") (identifier "piVar5")))) (; ";")) (if_statement "if (piVar2 != (int *)0x0) {\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }" (if "if") (parenthesized_expression "(piVar2 != (int *)0x0)" (( "(") (binary_expression "piVar2 != (int *)0x0" (identifier "piVar2") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        (**(code **)(*piVar2 + 4))(piVar2);\n      }" ({ "{") (expression_statement "(**(code **)(*piVar2 + 4))(piVar2);" (call_expression "(**(code **)(*piVar2 + 4))(piVar2)" (parenthesized_expression "(**(code **)(*piVar2 + 4))" (( "(") (pointer_expression "**(code **)(*piVar2 + 4)" (* "*") (pointer_expression "*(code **)(*piVar2 + 4)" (* "*") (cast_expression "(code **)(*piVar2 + 4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar2 + 4)" (( "(") (binary_expression "*piVar2 + 4" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (+ "+") (number_literal "4")) () ")"))))) () ")")) (argument_list "(piVar2)" (( "(") (identifier "piVar2") () ")"))) (; ";")) (} "}"))) (expression_statement "piVar5 = piVar5 + 1;" (assignment_expression "piVar5 = piVar5 + 1" (identifier "piVar5") (= "=") (binary_expression "piVar5 + 1" (identifier "piVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((int *)param_1[5] != piVar5)" (( "(") (binary_expression "(int *)param_1[5] != piVar5" (cast_expression "(int *)param_1[5]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (!= "!=") (identifier "piVar5")) () ")")) (; ";")) (if_statement "if ((int *)param_1[4] != piVar5) {\n      param_1[5] = param_1[4];\n    }" (if "if") (parenthesized_expression "((int *)param_1[4] != piVar5)" (( "(") (binary_expression "(int *)param_1[4] != piVar5" (cast_expression "(int *)param_1[4]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (!= "!=") (identifier "piVar5")) () ")")) (compound_statement "{\n      param_1[5] = param_1[4];\n    }" ({ "{") (expression_statement "param_1[5] = param_1[4];" (assignment_expression "param_1[5] = param_1[4]" (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]")) (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "iVar1 = param_1[0x28];" (assignment_expression "iVar1 = param_1[0x28]" (identifier "iVar1") (= "=") (subscript_expression "param_1[0x28]" (identifier "param_1") ([ "[") (number_literal "0x28") (] "]"))) (; ";")) (if_statement "if (iVar1 != 0) {\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }" (if "if") (parenthesized_expression "(iVar1 != 0)" (( "(") (binary_expression "iVar1 != 0" (identifier "iVar1") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00061fe0(iVar1);\n    FUN_00180780(iVar1,4);\n  }" ({ "{") (expression_statement "FUN_00061fe0(iVar1);" (call_expression "FUN_00061fe0(iVar1)" (identifier "FUN_00061fe0") (argument_list "(iVar1)" (( "(") (identifier "iVar1") () ")"))) (; ";")) (expression_statement "FUN_00180780(iVar1,4);" (call_expression "FUN_00180780(iVar1,4)" (identifier "FUN_00180780") (argument_list "(iVar1,4)" (( "(") (identifier "iVar1") (, ",") (number_literal "4") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00180780(param_1[0x35],0xc);" (call_expression "FUN_00180780(param_1[0x35],0xc)" (identifier "FUN_00180780") (argument_list "(param_1[0x35],0xc)" (( "(") (subscript_expression "param_1[0x35]" (identifier "param_1") ([ "[") (number_literal "0x35") (] "]")) (, ",") (number_literal "0xc") () ")"))) (; ";")) (expression_statement "puVar4 = (undefined4 *)param_1[0x30];" (assignment_expression "puVar4 = (undefined4 *)param_1[0x30]" (identifier "puVar4") (= "=") (cast_expression "(undefined4 *)param_1[0x30]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x30]" (identifier "param_1") ([ "[") (number_literal "0x30") (] "]")))) (; ";")) (while_statement "while (puVar4 != (undefined4 *)0x0) {\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }" (while "while") (parenthesized_expression "(puVar4 != (undefined4 *)0x0)" (( "(") (binary_expression "puVar4 != (undefined4 *)0x0" (identifier "puVar4") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    puVar3 = (undefined4 *)*puVar4;\n    if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }\n    FUN_001807a0(puVar4);\n    puVar4 = puVar3;\n  }" ({ "{") (expression_statement "puVar3 = (undefined4 *)*puVar4;" (assignment_expression "puVar3 = (undefined4 *)*puVar4" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)*puVar4" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar4" (* "*") (identifier "puVar4")))) (; ";")) (if_statement "if ((undefined4 *)puVar4[1] != puVar4 + 3) {\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }" (if "if") (parenthesized_expression "((undefined4 *)puVar4[1] != puVar4 + 3)" (( "(") (binary_expression "(undefined4 *)puVar4[1] != puVar4 + 3" (cast_expression "(undefined4 *)puVar4[1]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]"))) (!= "!=") (binary_expression "puVar4 + 3" (identifier "puVar4") (+ "+") (number_literal "3"))) () ")")) (compound_statement "{\n      FUN_001807a0((undefined4 *)puVar4[1]);\n    }" ({ "{") (expression_statement "FUN_001807a0((undefined4 *)puVar4[1]);" (call_expression "FUN_001807a0((undefined4 *)puVar4[1])" (identifier "FUN_001807a0") (argument_list "((undefined4 *)puVar4[1])" (( "(") (cast_expression "(undefined4 *)puVar4[1]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]"))) () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_001807a0(puVar4);" (call_expression "FUN_001807a0(puVar4)" (identifier "FUN_001807a0") (argument_list "(puVar4)" (( "(") (identifier "puVar4") () ")"))) (; ";")) (expression_statement "puVar4 = puVar3;" (assignment_expression "puVar4 = puVar3" (identifier "puVar4") (= "=") (identifier "puVar3")) (; ";")) (} "}"))) (expression_statement "memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);" (call_expression "memset((void *)param_1[0x2e],0,param_1[0x2f] << 2)" (identifier "memset") (argument_list "((void *)param_1[0x2e],0,param_1[0x2f] << 2)" (( "(") (cast_expression "(void *)param_1[0x2e]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x2e]" (identifier "param_1") ([ "[") (number_literal "0x2e") (] "]"))) (, ",") (number_literal "0") (, ",") (binary_expression "param_1[0x2f] << 2" (subscript_expression "param_1[0x2f]" (identifier "param_1") ([ "[") (number_literal "0x2f") (] "]")) (<< "<<") (number_literal "2")) () ")"))) (; ";")) (expression_statement "param_1[0x31] = 0;" (assignment_expression "param_1[0x31] = 0" (subscript_expression "param_1[0x31]" (identifier "param_1") ([ "[") (number_literal "0x31") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0x30] = 0;" (assignment_expression "param_1[0x30] = 0" (subscript_expression "param_1[0x30]" (identifier "param_1") ([ "[") (number_literal "0x30") (] "]")) (= "=") (number_literal "0")) (; ";")) (if_statement "if ((int *)param_1[0x2e] != param_1 + 0x34) {\n    FUN_001807a0((int *)param_1[0x2e]);\n  }" (if "if") (parenthesized_expression "((int *)param_1[0x2e] != param_1 + 0x34)" (( "(") (binary_expression "(int *)param_1[0x2e] != param_1 + 0x34" (cast_expression "(int *)param_1[0x2e]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x2e]" (identifier "param_1") ([ "[") (number_literal "0x2e") (] "]"))) (!= "!=") (binary_expression "param_1 + 0x34" (identifier "param_1") (+ "+") (number_literal "0x34"))) () ")")) (compound_statement "{\n    FUN_001807a0((int *)param_1[0x2e]);\n  }" ({ "{") (expression_statement "FUN_001807a0((int *)param_1[0x2e]);" (call_expression "FUN_001807a0((int *)param_1[0x2e])" (identifier "FUN_001807a0") (argument_list "((int *)param_1[0x2e])" (( "(") (cast_expression "(int *)param_1[0x2e]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x2e]" (identifier "param_1") ([ "[") (number_literal "0x2e") (] "]"))) () ")"))) (; ";")) (} "}"))) (if_statement "if ((int *)param_1[0x22] != param_1 + 0x24) {\n    FUN_001807a0((int *)param_1[0x22]);\n  }" (if "if") (parenthesized_expression "((int *)param_1[0x22] != param_1 + 0x24)" (( "(") (binary_expression "(int *)param_1[0x22] != param_1 + 0x24" (cast_expression "(int *)param_1[0x22]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x22]" (identifier "param_1") ([ "[") (number_literal "0x22") (] "]"))) (!= "!=") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24"))) () ")")) (compound_statement "{\n    FUN_001807a0((int *)param_1[0x22]);\n  }" ({ "{") (expression_statement "FUN_001807a0((int *)param_1[0x22]);" (call_expression "FUN_001807a0((int *)param_1[0x22])" (identifier "FUN_001807a0") (argument_list "((int *)param_1[0x22])" (( "(") (cast_expression "(int *)param_1[0x22]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x22]" (identifier "param_1") ([ "[") (number_literal "0x22") (] "]"))) () ")"))) (; ";")) (} "}"))) (if_statement "if (param_1[0x15] != 0) {\n    FUN_001807a0(param_1[0x15]);\n  }" (if "if") (parenthesized_expression "(param_1[0x15] != 0)" (( "(") (binary_expression "param_1[0x15] != 0" (subscript_expression "param_1[0x15]" (identifier "param_1") ([ "[") (number_literal "0x15") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001807a0(param_1[0x15]);\n  }" ({ "{") (expression_statement "FUN_001807a0(param_1[0x15]);" (call_expression "FUN_001807a0(param_1[0x15])" (identifier "FUN_001807a0") (argument_list "(param_1[0x15])" (( "(") (subscript_expression "param_1[0x15]" (identifier "param_1") ([ "[") (number_literal "0x15") (] "]")) () ")"))) (; ";")) (} "}"))) (if_statement "if (param_1[0x12] != 0) {\n    FUN_001807a0(param_1[0x12]);\n  }" (if "if") (parenthesized_expression "(param_1[0x12] != 0)" (( "(") (binary_expression "param_1[0x12] != 0" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001807a0(param_1[0x12]);\n  }" ({ "{") (expression_statement "FUN_001807a0(param_1[0x12]);" (call_expression "FUN_001807a0(param_1[0x12])" (identifier "FUN_001807a0") (argument_list "(param_1[0x12])" (( "(") (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) () ")"))) (; ";")) (} "}"))) (if_statement "if (param_1[7] != 0) {\n    FUN_001807a0(param_1[7]);\n  }" (if "if") (parenthesized_expression "(param_1[7] != 0)" (( "(") (binary_expression "param_1[7] != 0" (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001807a0(param_1[7]);\n  }" ({ "{") (expression_statement "FUN_001807a0(param_1[7]);" (call_expression "FUN_001807a0(param_1[7])" (identifier "FUN_001807a0") (argument_list "(param_1[7])" (( "(") (subscript_expression "param_1[7]" (identifier "param_1") ([ "[") (number_literal "7") (] "]")) () ")"))) (; ";")) (} "}"))) (if_statement "if (param_1[4] != 0) {\n    FUN_001807a0(param_1[4]);\n  }" (if "if") (parenthesized_expression "(param_1[4] != 0)" (( "(") (binary_expression "param_1[4] != 0" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_001807a0(param_1[4]);\n  }" ({ "{") (expression_statement "FUN_001807a0(param_1[4]);" (call_expression "FUN_001807a0(param_1[4])" (identifier "FUN_001807a0") (argument_list "(param_1[4])" (( "(") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) () ")"))) (; ";")) (} "}"))) (expression_statement "piVar5 = (int *)*param_1;" (assignment_expression "piVar5 = (int *)*param_1" (identifier "piVar5") (= "=") (cast_expression "(int *)*param_1" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (while_statement "while (piVar5 != param_1) {\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }" (while "while") (parenthesized_expression "(piVar5 != param_1)" (( "(") (binary_expression "piVar5 != param_1" (identifier "piVar5") (!= "!=") (identifier "param_1")) () ")")) (compound_statement "{\n    piVar2 = (int *)*piVar5;\n    FUN_001807a0(piVar5);\n    piVar5 = piVar2;\n  }" ({ "{") (expression_statement "piVar2 = (int *)*piVar5;" (assignment_expression "piVar2 = (int *)*piVar5" (identifier "piVar2") (= "=") (cast_expression "(int *)*piVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar5" (* "*") (identifier "piVar5")))) (; ";")) (expression_statement "FUN_001807a0(piVar5);" (call_expression "FUN_001807a0(piVar5)" (identifier "FUN_001807a0") (argument_list "(piVar5)" (( "(") (identifier "piVar5") () ")"))) (; ";")) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" (identifier "piVar5") (= "=") (identifier "piVar2")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: void ~Plugin_manager(Plugin_manager * this, int __in_chrg) */

void __thiscall var_1::function_1::~function_1(function_1 *var_5,int __in_chrg)

{
  void *var_6;
  type_1 *var_7;
  function_1 *pPVar3;
  type_2 *var_11;
  type_3 var_12;
  type_4 *var_13;
  type_5 *p_Var6;
  type_6 *var_16;
  type_3 var_20;
  type_3 var_21;
  type_3 var_23;
  type_3 var_24;
  type_5 *var_14;
  function_1 *var_4;
  type_1 *var_8;
  type_3 var_10;
  int in_stack_ffffffc8;
  
  var_4 = (function_1 *)
            (var_5->plugins_).super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>._M_impl
            ._M_node.super__List_node_base._M_next;
  if (var_4 != var_5) {
    do {
      var_6 = (void *)(var_4->plugins_).
                       super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>._M_impl.
                       _M_node._M_size;
      if (var_6 != (void *)0x0) {
        var_7 = *(type_1 **)((int)var_6 + 0x20);
        var_8 = *(type_1 **)((int)var_6 + 0x1c);
        if (var_7 != var_8) {
          do {
            if ((type_1 *)*var_8 != var_8 + 2) {
              var_9((type_1 *)*var_8);
            }
            var_8 = var_8 + 6;
          } while (var_7 != var_8);
          var_8 = *(type_1 **)((int)var_6 + 0x1c);
        }
        if (var_8 != (type_1 *)0x0) {
          var_9(var_8);
        }
        if (*(void **)((int)var_6 + 4) != (void *)((int)var_6 + 0xc)) {
          var_9(*(void **)((int)var_6 + 4));
        }
        in_stack_ffffffc8 = 0x3c;
        var_9(var_6,0x3c);
      }
      var_4 = (function_1 *)
                (var_4->plugins_).super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>.
                _M_impl._M_node.super__List_node_base._M_next;
    } while (var_4 != var_5);
    var_4 = (function_1 *)
              (var_5->plugins_).super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>.
              _M_impl._M_node.super__List_node_base._M_next;
    while (var_4 != var_5) {
      pPVar3 = (function_1 *)
               (var_4->plugins_).super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>.
               _M_impl._M_node.super__List_node_base._M_next;
      var_9(var_4);
      var_4 = pPVar3;
    }
  }
  (var_5->plugins_).super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>._M_impl._M_node.
  super__List_node_base._M_prev = (type_7 *)var_5;
  var_10 = (var_5->objects_).super__Vector_base<var_1::type_2*,var_2::var_17<var_1::type_2*>var_3>.
             _M_impl._M_start;
  (var_5->plugins_).super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>._M_impl._M_node.
  super__List_node_base._M_next = (type_7 *)var_5;
  (var_5->plugins_).super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>._M_impl._M_node.
  _M_size = 0;
  if (var_10 !=
      (var_5->objects_).super__Vector_base<var_1::type_2*,var_2::var_17<var_1::type_2*>var_3>._M_impl.
      _M_finish) {
    do {
      var_11 = *var_10;
      if (var_11 != (type_2 *)0x0) {
        (*var_11->_vptr_Object[1])(var_11);
      }
      var_10 = var_10 + 1;
    } while ((var_5->objects_).super__Vector_base<var_1::type_2*,var_2::var_17<var_1::type_2*>var_3>.
             _M_impl._M_finish != var_10);
    var_12 = (var_5->objects_).super__Vector_base<var_1::type_2*,var_2::var_17<var_1::type_2*>var_3>.
              _M_impl._M_start;
    if (var_12 != var_10) {
      (var_5->objects_).super__Vector_base<var_1::type_2*,var_2::var_17<var_1::type_2*>var_3>._M_impl.
      _M_finish = var_12;
    }
  }
  var_13 = var_5->lock_;
  if (var_13 != (type_4 *)0x0) {
    Lock::~type_4(var_13,in_stack_ffffffc8);
    var_9(var_13,4);
  }
  var_9(var_5->recorder_,0xc);
  var_14 = (var_5->defsym_defines_set_)._M_h._M_before_begin._M_nxt;
  while (var_14 != (type_5 *)0x0) {
    p_Var6 = var_14->_M_nxt;
    if (var_14[1]._M_nxt != var_14 + 3) {
      var_9(var_14[1]._M_nxt);
    }
    var_9(var_14);
    var_14 = p_Var6;
  }
  var_15((var_5->defsym_defines_set_)._M_h._M_buckets,0,
         (var_5->defsym_defines_set_)._M_h._M_bucket_count << 2);
  var_16 = (var_5->defsym_defines_set_)._M_h._M_buckets;
  (var_5->defsym_defines_set_)._M_h._M_element_count = 0;
  (var_5->defsym_defines_set_)._M_h._M_before_begin._M_nxt = (type_5 *)0x0;
  if (var_16 != &(var_5->defsym_defines_set_)._M_h._M_single_bucket) {
    var_9(var_16);
  }
  var_20 = (var_5->extra_search_path_)._M_dataplus._M_p;
  if ((anon_union_16_2_edb7204a_for_basic_string<var_18,var_2::char_traits<var_18>,var_2::var_17<var_18>var_3>var_19
       *)var_20 != &(var_5->extra_search_path_).field_2) {
    var_9(var_20);
  }
  var_21 = (var_5->undefined_symbols_).
            super__Vector_base<var_1::Symbol*,var_2::var_17<var_1::Symbol*>var_3>._M_impl._M_start;
  if (var_21 != (type_3)0x0) {
    var_9(var_21);
  }
  var_23 = (var_5->rescannable_).
            super__Vector_base<var_1::Plugin_manager::var_22,var_2::var_17<var_1::Plugin_manager::var_22>var_3>
            ._M_impl._M_start;
  if (var_23 != (type_3)0x0) {
    var_9(var_23);
  }
  var_24 = (var_5->deferred_layout_objects_).
             super__Vector_base<var_1::Relobj*,var_2::var_17<var_1::Relobj*>var_3>._M_impl._M_start;
  if (var_24 != (type_3)0x0) {
    var_9(var_24);
  }
  var_10 = (var_5->objects_).super__Vector_base<var_1::type_2*,var_2::var_17<var_1::type_2*>var_3>.
             _M_impl._M_start;
  if (var_10 != (type_3)0x0) {
    var_9(var_10);
  }
  var_4 = (function_1 *)
            (var_5->plugins_).super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>._M_impl
            ._M_node.super__List_node_base._M_next;
  while (var_4 != var_5) {
    pPVar3 = (function_1 *)
             (var_4->plugins_).super__List_base<var_1::Plugin*,var_2::var_17<var_1::Plugin*>var_3>.
             _M_impl._M_node.super__List_node_base._M_next;
    var_9(var_4);
    var_4 = pPVar3;
  }
  return;
}


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

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void MASKED(int *param_1)

{
  int iVar1;
  int *piVar2;
  undefined4 *puVar3;
  undefined4 *puVar4;
  int *piVar5;
  int *piVar6;
  
  piVar5 = (int *)*param_1;
  if (piVar5 != param_1) {
    do {
      iVar1 = piVar5[2];
      if (iVar1 != 0) {
        piVar2 = *(int **)(iVar1 + 0x20);
        piVar6 = *(int **)(iVar1 + 0x1c);
        if (piVar2 != piVar6) {
          do {
            if ((int *)*piVar6 != piVar6 + 2) {
              FUN_001807a0((int *)*piVar6);
            }
            piVar6 = piVar6 + 6;
          } while (piVar2 != piVar6);
          piVar6 = *(int **)(iVar1 + 0x1c);
        }
        if (piVar6 != (int *)0x0) {
          FUN_001807a0(piVar6);
        }
        if (*(int *)(iVar1 + 4) != iVar1 + 0xc) {
          FUN_001807a0(*(int *)(iVar1 + 4));
        }
        FUN_00180780(iVar1,0x3c);
      }
      piVar5 = (int *)*piVar5;
    } while (piVar5 != param_1);
    piVar5 = (int *)*param_1;
    while (piVar5 != param_1) {
      piVar2 = (int *)*piVar5;
      FUN_001807a0(piVar5);
      piVar5 = piVar2;
    }
  }
  param_1[1] = (int)param_1;
  piVar5 = (int *)param_1[4];
  *param_1 = (int)param_1;
  param_1[2] = 0;
  if (piVar5 != (int *)param_1[5]) {
    do {
      piVar2 = (int *)*piVar5;
      if (piVar2 != (int *)0x0) {
        (**(code **)(*piVar2 + 4))(piVar2);
      }
      piVar5 = piVar5 + 1;
    } while ((int *)param_1[5] != piVar5);
    if ((int *)param_1[4] != piVar5) {
      param_1[5] = param_1[4];
    }
  }
  iVar1 = param_1[0x28];
  if (iVar1 != 0) {
    FUN_00061fe0(iVar1);
    FUN_00180780(iVar1,4);
  }
  FUN_00180780(param_1[0x35],0xc);
  puVar4 = (undefined4 *)param_1[0x30];
  while (puVar4 != (undefined4 *)0x0) {
    puVar3 = (undefined4 *)*puVar4;
    if ((undefined4 *)puVar4[1] != puVar4 + 3) {
      FUN_001807a0((undefined4 *)puVar4[1]);
    }
    FUN_001807a0(puVar4);
    puVar4 = puVar3;
  }
  memset((void *)param_1[0x2e],0,param_1[0x2f] << 2);
  param_1[0x31] = 0;
  param_1[0x30] = 0;
  if ((int *)param_1[0x2e] != param_1 + 0x34) {
    FUN_001807a0((int *)param_1[0x2e]);
  }
  if ((int *)param_1[0x22] != param_1 + 0x24) {
    FUN_001807a0((int *)param_1[0x22]);
  }
  if (param_1[0x15] != 0) {
    FUN_001807a0(param_1[0x15]);
  }
  if (param_1[0x12] != 0) {
    FUN_001807a0(param_1[0x12]);
  }
  if (param_1[7] != 0) {
    FUN_001807a0(param_1[7]);
  }
  if (param_1[4] != 0) {
    FUN_001807a0(param_1[4]);
  }
  piVar5 = (int *)*param_1;
  while (piVar5 != param_1) {
    piVar2 = (int *)*piVar5;
    FUN_001807a0(piVar5);
    piVar5 = piVar2;
  }
  return;
}

