
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

void share_connstate_free(ssh_sharing_connstate *cs)

{
  undefined *puVar1;
  void *pvVar2;
  share_globreq *psVar3;
  Socket ppsVar4;
  
  while (pvVar2 = delpos234(cs->halfchannels,0), pvVar2 != (void *)0x0) {
    (*(code *)PTR_safefree_000b23d0)(pvVar2);
  }
  freetree234(cs->halfchannels);
  freetree234(cs->channels_by_server);
  while (pvVar2 = delpos234(cs->channels_by_us,0), pvVar2 != (void *)0x0) {
    (*(code *)PTR_safefree_000b23d0)(pvVar2);
  }
  freetree234(cs->channels_by_us);
  pvVar2 = delpos234(cs->xchannels_by_us,0);
  while (pvVar2 != (void *)0x0) {
    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0
          ) {
      *(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10);
      (*(code *)puVar1)();
    }
    (*(code *)PTR_safefree_000b23d0)(pvVar2);
    pvVar2 = delpos234(cs->xchannels_by_us,0);
  }
  freetree234(cs->xchannels_by_us);
  freetree234(cs->xchannels_by_server);
  while (pvVar2 = delpos234(cs->forwardings,0), pvVar2 != (void *)0x0) {
    (*(code *)PTR_safefree_000b23d0)(pvVar2);
  }
  freetree234(cs->forwardings);
  psVar3 = cs->globreq_head;
  while (puVar1 = PTR_safefree_000b23d0, psVar3 != (share_globreq *)0x0) {
    cs->globreq_head = psVar3->next;
    (*(code *)puVar1)();
    psVar3 = cs->globreq_head;
  }
  ppsVar4 = cs->sock;
  if (ppsVar4 != (Socket)0x0) {
    (*(*ppsVar4)->close)(ppsVar4);
  }
  (*(code *)PTR_safefree_000b23d0)(cs);
  return;
}



void FUN_00077c90(int param_1)

{
  undefined *puVar1;
  int iVar2;
  undefined4 *puVar3;
  
  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {
    (*(code *)PTR_safefree_000b23d0)(iVar2);
  }
  freetree234(*(undefined4 *)(param_1 + 0x4034));
  freetree234(*(undefined4 *)(param_1 + 0x403c));
  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {
    (*(code *)PTR_safefree_000b23d0)(iVar2);
  }
  freetree234(*(undefined4 *)(param_1 + 0x4038));
  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);
  while (iVar2 != 0) {
    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {
      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);
      (*(code *)puVar1)();
    }
    (*(code *)PTR_safefree_000b23d0)(iVar2);
    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);
  }
  freetree234(*(undefined4 *)(param_1 + 0x4040));
  freetree234(*(undefined4 *)(param_1 + 0x4044));
  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {
    (*(code *)PTR_safefree_000b23d0)(iVar2);
  }
  freetree234(*(undefined4 *)(param_1 + 0x4048));
  puVar3 = *(undefined4 **)(param_1 + 0x404c);
  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {
    *(undefined4 *)(param_1 + 0x404c) = *puVar3;
    (*(code *)puVar1)();
    puVar3 = *(undefined4 **)(param_1 + 0x404c);
  }
  if (*(int **)(param_1 + 8) != (int *)0x0) {
    (**(code **)(**(int **)(param_1 + 8) + 4))();
  }
  (*(code *)PTR_safefree_000b23d0)(param_1);
  return;
}


lui gp,0x4
addiu gp,gp,0x26e0
addu gp,gp,t9
addiu sp,sp,-0x28
sw gp,0x10(sp)
sw s0,0x1c(sp)
or s0,a0,zero
sw ra,0x24(sp)
b 0x00077cc4
_sw s1,0x20(sp)
jalr t9
_or a0,v0,zero
lw gp,0x10(sp)
lw t9,-0x7ec0(gp)
or a1,zero,zero
bal 0x0007ee90
_lw a0,0x4034(s0)
lw gp,0x10(sp)
bne v0,zero,0x00077cb8
_lw t9,-0x7fa0(gp)
lw t9,-0x7eb0(gp)
bal 0x0007e9a0
_lw a0,0x4034(s0)
lw gp,0x10(sp)
lw t9,-0x7eb0(gp)
bal 0x0007e9a0
_lw a0,0x403c(s0)
b 0x00077d10
_lw gp,0x10(sp)
jalr t9
_or a0,v0,zero
lw gp,0x10(sp)
lw t9,-0x7ec0(gp)
or a1,zero,zero
bal 0x0007ee90
_lw a0,0x4038(s0)
lw gp,0x10(sp)
bne v0,zero,0x00077d04
_lw t9,-0x7fa0(gp)
lw t9,-0x7eb0(gp)
bal 0x0007e9a0
_lw a0,0x4038(s0)
or a1,zero,zero
lw gp,0x10(sp)
lw t9,-0x7ec0(gp)
bal 0x0007ee90
_lw a0,0x4040(s0)
lw gp,0x10(sp)
bne v0,zero,0x00077d70
_or s1,v0,zero
b 0x00077da8
_lw t9,-0x7eb0(gp)
lw v0,0x0(a0)
jalr t9
_sw v0,0x10(s1)
lw gp,0x10(sp)
lw a0,0x10(s1)
bne a0,zero,0x00077d60
_lw t9,-0x7fa0(gp)
jalr t9
_or a0,s1,zero
or a1,zero,zero
lw gp,0x10(sp)
lw t9,-0x7ec0(gp)
bal 0x0007ee90
_lw a0,0x4040(s0)
lw gp,0x10(sp)
bne v0,zero,0x00077d70
_or s1,v0,zero
lw t9,-0x7eb0(gp)
bal 0x0007e9a0
_lw a0,0x4040(s0)
lw gp,0x10(sp)
lw t9,-0x7eb0(gp)
bal 0x0007e9a0
_lw a0,0x4044(s0)
b 0x00077dd4
_lw gp,0x10(sp)
jalr t9
_or a0,v0,zero
lw gp,0x10(sp)
lw t9,-0x7ec0(gp)
or a1,zero,zero
bal 0x0007ee90
_lw a0,0x4048(s0)
lw gp,0x10(sp)
bne v0,zero,0x00077dc8
_lw t9,-0x7fa0(gp)
lw t9,-0x7eb0(gp)
bal 0x0007e9a0
_lw a0,0x4048(s0)
lw a0,0x404c(s0)
beq a0,zero,0x00077e24
_lw gp,0x10(sp)
lw v0,0x0(a0)
lw t9,-0x7fa0(gp)
jalr t9
_sw v0,0x404c(s0)
lw a0,0x404c(s0)
bne a0,zero,0x00077e08
_lw gp,0x10(sp)
lw a0,0x8(s0)
beq a0,zero,0x00077e48
_lw ra,0x24(sp)
lw v0,0x0(a0)
lw t9,0x4(v0)
jalr t9
_nop
lw gp,0x10(sp)
lw ra,0x24(sp)
or a0,s0,zero
lw s1,0x20(sp)
lw s0,0x1c(sp)
lw t9,-0x7fa0(gp)
jr t9
_addiu sp,sp,0x28
(translation_unit "void FUN_00077c90(int param_1)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  \n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4034));\n  freetree234(*(undefined4 *)(param_1 + 0x403c));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4038));\n  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4040));\n  freetree234(*(undefined4 *)(param_1 + 0x4044));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4048));\n  puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }\n  if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }\n  (*(code *)PTR_safefree_000b23d0)(param_1);\n  return;\n}\n\n" (function_definition "void FUN_00077c90(int param_1)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  \n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4034));\n  freetree234(*(undefined4 *)(param_1 + 0x403c));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4038));\n  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4040));\n  freetree234(*(undefined4 *)(param_1 + 0x4044));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4048));\n  puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }\n  if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }\n  (*(code *)PTR_safefree_000b23d0)(param_1);\n  return;\n}" primitive_type (function_declarator "FUN_00077c90(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  \n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4034));\n  freetree234(*(undefined4 *)(param_1 + 0x403c));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4038));\n  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4040));\n  freetree234(*(undefined4 *)(param_1 + 0x4044));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4048));\n  puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }\n  if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }\n  (*(code *)PTR_safefree_000b23d0)(param_1);\n  return;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (while_statement "while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" while (parenthesized_expression "(iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0)" ( (comma_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4034),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4034),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4034)" * (cast_expression "(undefined4 *)(param_1 + 0x4034)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4034)" ( (binary_expression "param_1 + 0x4034" identifier + number_literal) )))) , number_literal )))) , (binary_expression "iVar2 != 0" identifier != number_literal)) )) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" { (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2)" ( identifier ))) ;) })) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4034));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4034))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4034))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4034)" * (cast_expression "(undefined4 *)(param_1 + 0x4034)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4034)" ( (binary_expression "param_1 + 0x4034" identifier + number_literal) )))) ))) ;) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x403c));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x403c))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x403c))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x403c)" * (cast_expression "(undefined4 *)(param_1 + 0x403c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x403c)" ( (binary_expression "param_1 + 0x403c" identifier + number_literal) )))) ))) ;) (while_statement "while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" while (parenthesized_expression "(iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0)" ( (comma_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4038),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4038),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4038)" * (cast_expression "(undefined4 *)(param_1 + 0x4038)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4038)" ( (binary_expression "param_1 + 0x4038" identifier + number_literal) )))) , number_literal )))) , (binary_expression "iVar2 != 0" identifier != number_literal)) )) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" { (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2)" ( identifier ))) ;) })) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4038));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4038))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4038))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4038)" * (cast_expression "(undefined4 *)(param_1 + 0x4038)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4038)" ( (binary_expression "param_1 + 0x4038" identifier + number_literal) )))) ))) ;) (expression_statement "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4040),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4040),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4040)" * (cast_expression "(undefined4 *)(param_1 + 0x4040)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4040)" ( (binary_expression "param_1 + 0x4040" identifier + number_literal) )))) , number_literal )))) ;) (while_statement "while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }" while (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }" { (while_statement "while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }" while (parenthesized_expression "(puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0)" ( (comma_expression "puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0" (assignment_expression "puVar1 = PTR_safefree_000b23d0" identifier = identifier) , (binary_expression "*(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0" (pointer_expression "*(undefined4 **)(iVar2 + 0x10)" * (cast_expression "(undefined4 **)(iVar2 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }" { (expression_statement "*(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);" (assignment_expression "*(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10)" (pointer_expression "*(undefined4 *)(iVar2 + 0x10)" * (cast_expression "(undefined4 *)(iVar2 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) = (pointer_expression "**(undefined4 **)(iVar2 + 0x10)" * (pointer_expression "*(undefined4 **)(iVar2 + 0x10)" * (cast_expression "(undefined4 **)(iVar2 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))))) ;) (expression_statement "(*(code *)puVar1)();" (call_expression "(*(code *)puVar1)()" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) })) (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2)" ( identifier ))) ;) (expression_statement "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4040),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4040),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4040)" * (cast_expression "(undefined4 *)(param_1 + 0x4040)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4040)" ( (binary_expression "param_1 + 0x4040" identifier + number_literal) )))) , number_literal )))) ;) })) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4040));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4040))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4040))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4040)" * (cast_expression "(undefined4 *)(param_1 + 0x4040)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4040)" ( (binary_expression "param_1 + 0x4040" identifier + number_literal) )))) ))) ;) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4044));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4044))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4044))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4044)" * (cast_expression "(undefined4 *)(param_1 + 0x4044)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4044)" ( (binary_expression "param_1 + 0x4044" identifier + number_literal) )))) ))) ;) (while_statement "while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" while (parenthesized_expression "(iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0)" ( (comma_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4048),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4048),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4048)" * (cast_expression "(undefined4 *)(param_1 + 0x4048)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4048)" ( (binary_expression "param_1 + 0x4048" identifier + number_literal) )))) , number_literal )))) , (binary_expression "iVar2 != 0" identifier != number_literal)) )) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" { (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2)" ( identifier ))) ;) })) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4048));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4048))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4048))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4048)" * (cast_expression "(undefined4 *)(param_1 + 0x4048)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4048)" ( (binary_expression "param_1 + 0x4048" identifier + number_literal) )))) ))) ;) (expression_statement "puVar3 = *(undefined4 **)(param_1 + 0x404c);" (assignment_expression "puVar3 = *(undefined4 **)(param_1 + 0x404c)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x404c)" * (cast_expression "(undefined4 **)(param_1 + 0x404c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x404c)" ( (binary_expression "param_1 + 0x404c" identifier + number_literal) ))))) ;) (while_statement "while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }" while (parenthesized_expression "(puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0)" ( (comma_expression "puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0" (assignment_expression "puVar1 = PTR_safefree_000b23d0" identifier = identifier) , (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }" { (expression_statement "*(undefined4 *)(param_1 + 0x404c) = *puVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x404c) = *puVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x404c)" * (cast_expression "(undefined4 *)(param_1 + 0x404c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x404c)" ( (binary_expression "param_1 + 0x404c" identifier + number_literal) )))) = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "(*(code *)puVar1)();" (call_expression "(*(code *)puVar1)()" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "puVar3 = *(undefined4 **)(param_1 + 0x404c);" (assignment_expression "puVar3 = *(undefined4 **)(param_1 + 0x404c)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x404c)" * (cast_expression "(undefined4 **)(param_1 + 0x404c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x404c)" ( (binary_expression "param_1 + 0x404c" identifier + number_literal) ))))) ;) })) (if_statement "if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }" if (parenthesized_expression "(*(int **)(param_1 + 8) != (int *)0x0)" ( (binary_expression "*(int **)(param_1 + 8) != (int *)0x0" (pointer_expression "*(int **)(param_1 + 8)" * (cast_expression "(int **)(param_1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }" { (expression_statement "(**(code **)(**(int **)(param_1 + 8) + 4))();" (call_expression "(**(code **)(**(int **)(param_1 + 8) + 4))()" (parenthesized_expression "(**(code **)(**(int **)(param_1 + 8) + 4))" ( (pointer_expression "**(code **)(**(int **)(param_1 + 8) + 4)" * (pointer_expression "*(code **)(**(int **)(param_1 + 8) + 4)" * (cast_expression "(code **)(**(int **)(param_1 + 8) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(param_1 + 8) + 4)" ( (binary_expression "**(int **)(param_1 + 8) + 4" (pointer_expression "**(int **)(param_1 + 8)" * (pointer_expression "*(int **)(param_1 + 8)" * (cast_expression "(int **)(param_1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (expression_statement "(*(code *)PTR_safefree_000b23d0)(param_1);" (call_expression "(*(code *)PTR_safefree_000b23d0)(param_1)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\nvoid share_connstate_free(ssh_sharing_connstate *cs)\n\n{\n  undefined *puVar1;\n  void *pvVar2;\n  share_globreq *psVar3;\n  Socket ppsVar4;\n  \n  while (pvVar2 = delpos234(cs->halfchannels,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }\n  freetree234(cs->halfchannels);\n  freetree234(cs->channels_by_server);\n  while (pvVar2 = delpos234(cs->channels_by_us,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }\n  freetree234(cs->channels_by_us);\n  pvVar2 = delpos234(cs->xchannels_by_us,0);\n  while (pvVar2 != (void *)0x0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0\n          ) {\n      *(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n    pvVar2 = delpos234(cs->xchannels_by_us,0);\n  }\n  freetree234(cs->xchannels_by_us);\n  freetree234(cs->xchannels_by_server);\n  while (pvVar2 = delpos234(cs->forwardings,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }\n  freetree234(cs->forwardings);\n  psVar3 = cs->globreq_head;\n  while (puVar1 = PTR_safefree_000b23d0, psVar3 != (share_globreq *)0x0) {\n    cs->globreq_head = psVar3->next;\n    (*(code *)puVar1)();\n    psVar3 = cs->globreq_head;\n  }\n  ppsVar4 = cs->sock;\n  if (ppsVar4 != (Socket)0x0) {\n    (*(*ppsVar4)->close)(ppsVar4);\n  }\n  (*(code *)PTR_safefree_000b23d0)(cs);\n  return;\n}\n\n" comment (function_definition "void share_connstate_free(ssh_sharing_connstate *cs)\n\n{\n  undefined *puVar1;\n  void *pvVar2;\n  share_globreq *psVar3;\n  Socket ppsVar4;\n  \n  while (pvVar2 = delpos234(cs->halfchannels,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }\n  freetree234(cs->halfchannels);\n  freetree234(cs->channels_by_server);\n  while (pvVar2 = delpos234(cs->channels_by_us,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }\n  freetree234(cs->channels_by_us);\n  pvVar2 = delpos234(cs->xchannels_by_us,0);\n  while (pvVar2 != (void *)0x0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0\n          ) {\n      *(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n    pvVar2 = delpos234(cs->xchannels_by_us,0);\n  }\n  freetree234(cs->xchannels_by_us);\n  freetree234(cs->xchannels_by_server);\n  while (pvVar2 = delpos234(cs->forwardings,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }\n  freetree234(cs->forwardings);\n  psVar3 = cs->globreq_head;\n  while (puVar1 = PTR_safefree_000b23d0, psVar3 != (share_globreq *)0x0) {\n    cs->globreq_head = psVar3->next;\n    (*(code *)puVar1)();\n    psVar3 = cs->globreq_head;\n  }\n  ppsVar4 = cs->sock;\n  if (ppsVar4 != (Socket)0x0) {\n    (*(*ppsVar4)->close)(ppsVar4);\n  }\n  (*(code *)PTR_safefree_000b23d0)(cs);\n  return;\n}" primitive_type (function_declarator "share_connstate_free(ssh_sharing_connstate *cs)" identifier (parameter_list "(ssh_sharing_connstate *cs)" ( (parameter_declaration "ssh_sharing_connstate *cs" type_identifier (pointer_declarator "*cs" * identifier)) ))) (compound_statement "{\n  undefined *puVar1;\n  void *pvVar2;\n  share_globreq *psVar3;\n  Socket ppsVar4;\n  \n  while (pvVar2 = delpos234(cs->halfchannels,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }\n  freetree234(cs->halfchannels);\n  freetree234(cs->channels_by_server);\n  while (pvVar2 = delpos234(cs->channels_by_us,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }\n  freetree234(cs->channels_by_us);\n  pvVar2 = delpos234(cs->xchannels_by_us,0);\n  while (pvVar2 != (void *)0x0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0\n          ) {\n      *(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n    pvVar2 = delpos234(cs->xchannels_by_us,0);\n  }\n  freetree234(cs->xchannels_by_us);\n  freetree234(cs->xchannels_by_server);\n  while (pvVar2 = delpos234(cs->forwardings,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }\n  freetree234(cs->forwardings);\n  psVar3 = cs->globreq_head;\n  while (puVar1 = PTR_safefree_000b23d0, psVar3 != (share_globreq *)0x0) {\n    cs->globreq_head = psVar3->next;\n    (*(code *)puVar1)();\n    psVar3 = cs->globreq_head;\n  }\n  ppsVar4 = cs->sock;\n  if (ppsVar4 != (Socket)0x0) {\n    (*(*ppsVar4)->close)(ppsVar4);\n  }\n  (*(code *)PTR_safefree_000b23d0)(cs);\n  return;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "void *pvVar2;" primitive_type (pointer_declarator "*pvVar2" * identifier) ;) (declaration "share_globreq *psVar3;" type_identifier (pointer_declarator "*psVar3" * identifier) ;) (declaration "Socket ppsVar4;" type_identifier identifier ;) (while_statement "while (pvVar2 = delpos234(cs->halfchannels,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }" while (parenthesized_expression "(pvVar2 = delpos234(cs->halfchannels,0), pvVar2 != (void *)0x0)" ( (comma_expression "pvVar2 = delpos234(cs->halfchannels,0), pvVar2 != (void *)0x0" (assignment_expression "pvVar2 = delpos234(cs->halfchannels,0)" identifier = (call_expression "delpos234(cs->halfchannels,0)" identifier (argument_list "(cs->halfchannels,0)" ( (field_expression "cs->halfchannels" identifier -> field_identifier) , number_literal )))) , (binary_expression "pvVar2 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }" { (expression_statement "(*(code *)PTR_safefree_000b23d0)(pvVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(pvVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pvVar2)" ( identifier ))) ;) })) (expression_statement "freetree234(cs->halfchannels);" (call_expression "freetree234(cs->halfchannels)" identifier (argument_list "(cs->halfchannels)" ( (field_expression "cs->halfchannels" identifier -> field_identifier) ))) ;) (expression_statement "freetree234(cs->channels_by_server);" (call_expression "freetree234(cs->channels_by_server)" identifier (argument_list "(cs->channels_by_server)" ( (field_expression "cs->channels_by_server" identifier -> field_identifier) ))) ;) (while_statement "while (pvVar2 = delpos234(cs->channels_by_us,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }" while (parenthesized_expression "(pvVar2 = delpos234(cs->channels_by_us,0), pvVar2 != (void *)0x0)" ( (comma_expression "pvVar2 = delpos234(cs->channels_by_us,0), pvVar2 != (void *)0x0" (assignment_expression "pvVar2 = delpos234(cs->channels_by_us,0)" identifier = (call_expression "delpos234(cs->channels_by_us,0)" identifier (argument_list "(cs->channels_by_us,0)" ( (field_expression "cs->channels_by_us" identifier -> field_identifier) , number_literal )))) , (binary_expression "pvVar2 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }" { (expression_statement "(*(code *)PTR_safefree_000b23d0)(pvVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(pvVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pvVar2)" ( identifier ))) ;) })) (expression_statement "freetree234(cs->channels_by_us);" (call_expression "freetree234(cs->channels_by_us)" identifier (argument_list "(cs->channels_by_us)" ( (field_expression "cs->channels_by_us" identifier -> field_identifier) ))) ;) (expression_statement "pvVar2 = delpos234(cs->xchannels_by_us,0);" (assignment_expression "pvVar2 = delpos234(cs->xchannels_by_us,0)" identifier = (call_expression "delpos234(cs->xchannels_by_us,0)" identifier (argument_list "(cs->xchannels_by_us,0)" ( (field_expression "cs->xchannels_by_us" identifier -> field_identifier) , number_literal )))) ;) (while_statement "while (pvVar2 != (void *)0x0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0\n          ) {\n      *(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n    pvVar2 = delpos234(cs->xchannels_by_us,0);\n  }" while (parenthesized_expression "(pvVar2 != (void *)0x0)" ( (binary_expression "pvVar2 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0\n          ) {\n      *(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n    pvVar2 = delpos234(cs->xchannels_by_us,0);\n  }" { (while_statement "while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0\n          ) {\n      *(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10);\n      (*(code *)puVar1)();\n    }" while (parenthesized_expression "(puVar1 = PTR_safefree_000b23d0, *(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0\n          )" ( (comma_expression "puVar1 = PTR_safefree_000b23d0, *(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0" (assignment_expression "puVar1 = PTR_safefree_000b23d0" identifier = identifier) , (binary_expression "*(undefined4 **)((int)pvVar2 + 0x10) != (undefined4 *)0x0" (pointer_expression "*(undefined4 **)((int)pvVar2 + 0x10)" * (cast_expression "(undefined4 **)((int)pvVar2 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar2 + 0x10)" ( (binary_expression "(int)pvVar2 + 0x10" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n      *(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10);\n      (*(code *)puVar1)();\n    }" { (expression_statement "*(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10);" (assignment_expression "*(undefined4 *)((int)pvVar2 + 0x10) = **(undefined4 **)((int)pvVar2 + 0x10)" (pointer_expression "*(undefined4 *)((int)pvVar2 + 0x10)" * (cast_expression "(undefined4 *)((int)pvVar2 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)pvVar2 + 0x10)" ( (binary_expression "(int)pvVar2 + 0x10" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))) = (pointer_expression "**(undefined4 **)((int)pvVar2 + 0x10)" * (pointer_expression "*(undefined4 **)((int)pvVar2 + 0x10)" * (cast_expression "(undefined4 **)((int)pvVar2 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((int)pvVar2 + 0x10)" ( (binary_expression "(int)pvVar2 + 0x10" (cast_expression "(int)pvVar2" ( (type_descriptor "int" primitive_type) ) identifier) + number_literal) )))))) ;) (expression_statement "(*(code *)puVar1)();" (call_expression "(*(code *)puVar1)()" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) })) (expression_statement "(*(code *)PTR_safefree_000b23d0)(pvVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(pvVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pvVar2)" ( identifier ))) ;) (expression_statement "pvVar2 = delpos234(cs->xchannels_by_us,0);" (assignment_expression "pvVar2 = delpos234(cs->xchannels_by_us,0)" identifier = (call_expression "delpos234(cs->xchannels_by_us,0)" identifier (argument_list "(cs->xchannels_by_us,0)" ( (field_expression "cs->xchannels_by_us" identifier -> field_identifier) , number_literal )))) ;) })) (expression_statement "freetree234(cs->xchannels_by_us);" (call_expression "freetree234(cs->xchannels_by_us)" identifier (argument_list "(cs->xchannels_by_us)" ( (field_expression "cs->xchannels_by_us" identifier -> field_identifier) ))) ;) (expression_statement "freetree234(cs->xchannels_by_server);" (call_expression "freetree234(cs->xchannels_by_server)" identifier (argument_list "(cs->xchannels_by_server)" ( (field_expression "cs->xchannels_by_server" identifier -> field_identifier) ))) ;) (while_statement "while (pvVar2 = delpos234(cs->forwardings,0), pvVar2 != (void *)0x0) {\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }" while (parenthesized_expression "(pvVar2 = delpos234(cs->forwardings,0), pvVar2 != (void *)0x0)" ( (comma_expression "pvVar2 = delpos234(cs->forwardings,0), pvVar2 != (void *)0x0" (assignment_expression "pvVar2 = delpos234(cs->forwardings,0)" identifier = (call_expression "delpos234(cs->forwardings,0)" identifier (argument_list "(cs->forwardings,0)" ( (field_expression "cs->forwardings" identifier -> field_identifier) , number_literal )))) , (binary_expression "pvVar2 != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(pvVar2);\n  }" { (expression_statement "(*(code *)PTR_safefree_000b23d0)(pvVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(pvVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(pvVar2)" ( identifier ))) ;) })) (expression_statement "freetree234(cs->forwardings);" (call_expression "freetree234(cs->forwardings)" identifier (argument_list "(cs->forwardings)" ( (field_expression "cs->forwardings" identifier -> field_identifier) ))) ;) (expression_statement "psVar3 = cs->globreq_head;" (assignment_expression "psVar3 = cs->globreq_head" identifier = (field_expression "cs->globreq_head" identifier -> field_identifier)) ;) (while_statement "while (puVar1 = PTR_safefree_000b23d0, psVar3 != (share_globreq *)0x0) {\n    cs->globreq_head = psVar3->next;\n    (*(code *)puVar1)();\n    psVar3 = cs->globreq_head;\n  }" while (parenthesized_expression "(puVar1 = PTR_safefree_000b23d0, psVar3 != (share_globreq *)0x0)" ( (comma_expression "puVar1 = PTR_safefree_000b23d0, psVar3 != (share_globreq *)0x0" (assignment_expression "puVar1 = PTR_safefree_000b23d0" identifier = identifier) , (binary_expression "psVar3 != (share_globreq *)0x0" identifier != (cast_expression "(share_globreq *)0x0" ( (type_descriptor "share_globreq *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n    cs->globreq_head = psVar3->next;\n    (*(code *)puVar1)();\n    psVar3 = cs->globreq_head;\n  }" { (expression_statement "cs->globreq_head = psVar3->next;" (assignment_expression "cs->globreq_head = psVar3->next" (field_expression "cs->globreq_head" identifier -> field_identifier) = (field_expression "psVar3->next" identifier -> field_identifier)) ;) (expression_statement "(*(code *)puVar1)();" (call_expression "(*(code *)puVar1)()" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "psVar3 = cs->globreq_head;" (assignment_expression "psVar3 = cs->globreq_head" identifier = (field_expression "cs->globreq_head" identifier -> field_identifier)) ;) })) (expression_statement "ppsVar4 = cs->sock;" (assignment_expression "ppsVar4 = cs->sock" identifier = (field_expression "cs->sock" identifier -> field_identifier)) ;) (if_statement "if (ppsVar4 != (Socket)0x0) {\n    (*(*ppsVar4)->close)(ppsVar4);\n  }" if (parenthesized_expression "(ppsVar4 != (Socket)0x0)" ( (binary_expression "ppsVar4 != (Socket)0x0" identifier != (cast_expression "(Socket)0x0" ( (type_descriptor "Socket" type_identifier) ) number_literal)) )) (compound_statement "{\n    (*(*ppsVar4)->close)(ppsVar4);\n  }" { (expression_statement "(*(*ppsVar4)->close)(ppsVar4);" (call_expression "(*(*ppsVar4)->close)(ppsVar4)" (parenthesized_expression "(*(*ppsVar4)->close)" ( (pointer_expression "*(*ppsVar4)->close" * (field_expression "(*ppsVar4)->close" (parenthesized_expression "(*ppsVar4)" ( (pointer_expression "*ppsVar4" * identifier) )) -> field_identifier)) )) (argument_list "(ppsVar4)" ( identifier ))) ;) })) (expression_statement "(*(code *)PTR_safefree_000b23d0)(cs);" (call_expression "(*(code *)PTR_safefree_000b23d0)(cs)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(cs)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00077c90(int param_1)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  \n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4034));\n  freetree234(*(undefined4 *)(param_1 + 0x403c));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4038));\n  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4040));\n  freetree234(*(undefined4 *)(param_1 + 0x4044));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4048));\n  puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }\n  if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }\n  (*(code *)PTR_safefree_000b23d0)(param_1);\n  return;\n}\n\n" (function_definition "void FUN_00077c90(int param_1)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  \n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4034));\n  freetree234(*(undefined4 *)(param_1 + 0x403c));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4038));\n  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4040));\n  freetree234(*(undefined4 *)(param_1 + 0x4044));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4048));\n  puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }\n  if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }\n  (*(code *)PTR_safefree_000b23d0)(param_1);\n  return;\n}" primitive_type (function_declarator "FUN_00077c90(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  \n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4034));\n  freetree234(*(undefined4 *)(param_1 + 0x403c));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4038));\n  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4040));\n  freetree234(*(undefined4 *)(param_1 + 0x4044));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4048));\n  puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }\n  if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }\n  (*(code *)PTR_safefree_000b23d0)(param_1);\n  return;\n}" { (declaration "undefined *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (while_statement "while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" while (parenthesized_expression "(iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0)" ( (comma_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4034),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4034),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4034)" * (cast_expression "(undefined4 *)(param_1 + 0x4034)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4034)" ( (binary_expression "param_1 + 0x4034" identifier + number_literal) )))) , number_literal )))) , (binary_expression "iVar2 != 0" identifier != number_literal)) )) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" { (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2)" ( identifier ))) ;) })) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4034));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4034))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4034))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4034)" * (cast_expression "(undefined4 *)(param_1 + 0x4034)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4034)" ( (binary_expression "param_1 + 0x4034" identifier + number_literal) )))) ))) ;) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x403c));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x403c))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x403c))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x403c)" * (cast_expression "(undefined4 *)(param_1 + 0x403c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x403c)" ( (binary_expression "param_1 + 0x403c" identifier + number_literal) )))) ))) ;) (while_statement "while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" while (parenthesized_expression "(iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0)" ( (comma_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4038),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4038),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4038)" * (cast_expression "(undefined4 *)(param_1 + 0x4038)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4038)" ( (binary_expression "param_1 + 0x4038" identifier + number_literal) )))) , number_literal )))) , (binary_expression "iVar2 != 0" identifier != number_literal)) )) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" { (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2)" ( identifier ))) ;) })) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4038));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4038))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4038))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4038)" * (cast_expression "(undefined4 *)(param_1 + 0x4038)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4038)" ( (binary_expression "param_1 + 0x4038" identifier + number_literal) )))) ))) ;) (expression_statement "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4040),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4040),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4040)" * (cast_expression "(undefined4 *)(param_1 + 0x4040)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4040)" ( (binary_expression "param_1 + 0x4040" identifier + number_literal) )))) , number_literal )))) ;) (while_statement "while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }" while (parenthesized_expression "(iVar2 != 0)" ( (binary_expression "iVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }" { (while_statement "while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }" while (parenthesized_expression "(puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0)" ( (comma_expression "puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0" (assignment_expression "puVar1 = PTR_safefree_000b23d0" identifier = identifier) , (binary_expression "*(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0" (pointer_expression "*(undefined4 **)(iVar2 + 0x10)" * (cast_expression "(undefined4 **)(iVar2 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }" { (expression_statement "*(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);" (assignment_expression "*(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10)" (pointer_expression "*(undefined4 *)(iVar2 + 0x10)" * (cast_expression "(undefined4 *)(iVar2 + 0x10)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))) = (pointer_expression "**(undefined4 **)(iVar2 + 0x10)" * (pointer_expression "*(undefined4 **)(iVar2 + 0x10)" * (cast_expression "(undefined4 **)(iVar2 + 0x10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar2 + 0x10)" ( (binary_expression "iVar2 + 0x10" identifier + number_literal) )))))) ;) (expression_statement "(*(code *)puVar1)();" (call_expression "(*(code *)puVar1)()" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) })) (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2)" ( identifier ))) ;) (expression_statement "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4040),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4040),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4040)" * (cast_expression "(undefined4 *)(param_1 + 0x4040)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4040)" ( (binary_expression "param_1 + 0x4040" identifier + number_literal) )))) , number_literal )))) ;) })) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4040));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4040))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4040))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4040)" * (cast_expression "(undefined4 *)(param_1 + 0x4040)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4040)" ( (binary_expression "param_1 + 0x4040" identifier + number_literal) )))) ))) ;) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4044));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4044))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4044))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4044)" * (cast_expression "(undefined4 *)(param_1 + 0x4044)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4044)" ( (binary_expression "param_1 + 0x4044" identifier + number_literal) )))) ))) ;) (while_statement "while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" while (parenthesized_expression "(iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0)" ( (comma_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0)" identifier = (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4048),0)" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4048),0)" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4048)" * (cast_expression "(undefined4 *)(param_1 + 0x4048)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4048)" ( (binary_expression "param_1 + 0x4048" identifier + number_literal) )))) , number_literal )))) , (binary_expression "iVar2 != 0" identifier != number_literal)) )) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" { (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(iVar2)" ( identifier ))) ;) })) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4048));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4048))" identifier (argument_list "(*(undefined4 *)(param_1 + 0x4048))" ( (pointer_expression "*(undefined4 *)(param_1 + 0x4048)" * (cast_expression "(undefined4 *)(param_1 + 0x4048)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x4048)" ( (binary_expression "param_1 + 0x4048" identifier + number_literal) )))) ))) ;) (expression_statement "puVar3 = *(undefined4 **)(param_1 + 0x404c);" (assignment_expression "puVar3 = *(undefined4 **)(param_1 + 0x404c)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x404c)" * (cast_expression "(undefined4 **)(param_1 + 0x404c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x404c)" ( (binary_expression "param_1 + 0x404c" identifier + number_literal) ))))) ;) (while_statement "while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }" while (parenthesized_expression "(puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0)" ( (comma_expression "puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0" (assignment_expression "puVar1 = PTR_safefree_000b23d0" identifier = identifier) , (binary_expression "puVar3 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }" { (expression_statement "*(undefined4 *)(param_1 + 0x404c) = *puVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x404c) = *puVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x404c)" * (cast_expression "(undefined4 *)(param_1 + 0x404c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x404c)" ( (binary_expression "param_1 + 0x404c" identifier + number_literal) )))) = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "(*(code *)puVar1)();" (call_expression "(*(code *)puVar1)()" (parenthesized_expression "(*(code *)puVar1)" ( (pointer_expression "*(code *)puVar1" * (cast_expression "(code *)puVar1" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "()" ( ))) ;) (expression_statement "puVar3 = *(undefined4 **)(param_1 + 0x404c);" (assignment_expression "puVar3 = *(undefined4 **)(param_1 + 0x404c)" identifier = (pointer_expression "*(undefined4 **)(param_1 + 0x404c)" * (cast_expression "(undefined4 **)(param_1 + 0x404c)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x404c)" ( (binary_expression "param_1 + 0x404c" identifier + number_literal) ))))) ;) })) (if_statement "if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }" if (parenthesized_expression "(*(int **)(param_1 + 8) != (int *)0x0)" ( (binary_expression "*(int **)(param_1 + 8) != (int *)0x0" (pointer_expression "*(int **)(param_1 + 8)" * (cast_expression "(int **)(param_1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) )))) != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }" { (expression_statement "(**(code **)(**(int **)(param_1 + 8) + 4))();" (call_expression "(**(code **)(**(int **)(param_1 + 8) + 4))()" (parenthesized_expression "(**(code **)(**(int **)(param_1 + 8) + 4))" ( (pointer_expression "**(code **)(**(int **)(param_1 + 8) + 4)" * (pointer_expression "*(code **)(**(int **)(param_1 + 8) + 4)" * (cast_expression "(code **)(**(int **)(param_1 + 8) + 4)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(**(int **)(param_1 + 8) + 4)" ( (binary_expression "**(int **)(param_1 + 8) + 4" (pointer_expression "**(int **)(param_1 + 8)" * (pointer_expression "*(int **)(param_1 + 8)" * (cast_expression "(int **)(param_1 + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 8)" ( (binary_expression "param_1 + 8" identifier + number_literal) ))))) + number_literal) ))))) )) (argument_list "()" ( ))) ;) })) (expression_statement "(*(code *)PTR_safefree_000b23d0)(param_1);" (call_expression "(*(code *)PTR_safefree_000b23d0)(param_1)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" ( (pointer_expression "*(code *)PTR_safefree_000b23d0" * (cast_expression "(code *)PTR_safefree_000b23d0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (argument_list "(param_1)" ( identifier ))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT )))) , (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) })) (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 ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT )))) , (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) })) (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 (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT )))) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT )))) ;) })) (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 ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT )))) , (binary_expression IDENT != LIT)) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) })) (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 (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * IDENT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( ))) ;) (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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != (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 * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) + LIT) ))))) )) (argument_list ( ))) ;) })) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (argument_list ( IDENT ))) ;) (return_statement return ;) })))
(function_definition "void FUN_00077c90(int param_1)\n\n{\n  undefined *puVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  \n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4034));\n  freetree234(*(undefined4 *)(param_1 + 0x403c));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4038));\n  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4040));\n  freetree234(*(undefined4 *)(param_1 + 0x4044));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4048));\n  puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }\n  if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }\n  (*(code *)PTR_safefree_000b23d0)(param_1);\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00077c90(int param_1)" (identifier "FUN_00077c90") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  undefined *puVar1;\n  int iVar2;\n  undefined4 *puVar3;\n  \n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4034));\n  freetree234(*(undefined4 *)(param_1 + 0x403c));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4038));\n  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4040));\n  freetree234(*(undefined4 *)(param_1 + 0x4044));\n  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }\n  freetree234(*(undefined4 *)(param_1 + 0x4048));\n  puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }\n  if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }\n  (*(code *)PTR_safefree_000b23d0)(param_1);\n  return;\n}" ({ "{") (declaration "undefined *puVar1;" (type_identifier "undefined") (pointer_declarator "*puVar1" (* "*") (identifier "puVar1")) (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (while_statement "while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" (while "while") (parenthesized_expression "(iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0)" (( "(") (comma_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0)" (identifier "iVar2") (= "=") (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4034),0)" (identifier "delpos234") (argument_list "(*(undefined4 *)(param_1 + 0x4034),0)" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4034)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4034)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4034)" (( "(") (binary_expression "param_1 + 0x4034" (identifier "param_1") (+ "+") (number_literal "0x4034")) () ")")))) (, ",") (number_literal "0") () ")")))) (, ",") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" ({ "{") (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b23d0" (* "*") (cast_expression "(code *)PTR_safefree_000b23d0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b23d0"))) () ")")) (argument_list "(iVar2)" (( "(") (identifier "iVar2") () ")"))) (; ";")) (} "}"))) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4034));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4034))" (identifier "freetree234") (argument_list "(*(undefined4 *)(param_1 + 0x4034))" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4034)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4034)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4034)" (( "(") (binary_expression "param_1 + 0x4034" (identifier "param_1") (+ "+") (number_literal "0x4034")) () ")")))) () ")"))) (; ";")) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x403c));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x403c))" (identifier "freetree234") (argument_list "(*(undefined4 *)(param_1 + 0x403c))" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x403c)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x403c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x403c)" (( "(") (binary_expression "param_1 + 0x403c" (identifier "param_1") (+ "+") (number_literal "0x403c")) () ")")))) () ")"))) (; ";")) (while_statement "while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" (while "while") (parenthesized_expression "(iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0)" (( "(") (comma_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0)" (identifier "iVar2") (= "=") (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4038),0)" (identifier "delpos234") (argument_list "(*(undefined4 *)(param_1 + 0x4038),0)" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4038)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4038)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4038)" (( "(") (binary_expression "param_1 + 0x4038" (identifier "param_1") (+ "+") (number_literal "0x4038")) () ")")))) (, ",") (number_literal "0") () ")")))) (, ",") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" ({ "{") (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b23d0" (* "*") (cast_expression "(code *)PTR_safefree_000b23d0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b23d0"))) () ")")) (argument_list "(iVar2)" (( "(") (identifier "iVar2") () ")"))) (; ";")) (} "}"))) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4038));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4038))" (identifier "freetree234") (argument_list "(*(undefined4 *)(param_1 + 0x4038))" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4038)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4038)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4038)" (( "(") (binary_expression "param_1 + 0x4038" (identifier "param_1") (+ "+") (number_literal "0x4038")) () ")")))) () ")"))) (; ";")) (expression_statement "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0)" (identifier "iVar2") (= "=") (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4040),0)" (identifier "delpos234") (argument_list "(*(undefined4 *)(param_1 + 0x4040),0)" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4040)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4040)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4040)" (( "(") (binary_expression "param_1 + 0x4040" (identifier "param_1") (+ "+") (number_literal "0x4040")) () ")")))) (, ",") (number_literal "0") () ")")))) (; ";")) (while_statement "while (iVar2 != 0) {\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }" (while "while") (parenthesized_expression "(iVar2 != 0)" (( "(") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);\n  }" ({ "{") (while_statement "while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }" (while "while") (parenthesized_expression "(puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0)" (( "(") (comma_expression "puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0" (assignment_expression "puVar1 = PTR_safefree_000b23d0" (identifier "puVar1") (= "=") (identifier "PTR_safefree_000b23d0")) (, ",") (binary_expression "*(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0" (pointer_expression "*(undefined4 **)(iVar2 + 0x10)" (* "*") (cast_expression "(undefined4 **)(iVar2 + 0x10)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 0x10)" (( "(") (binary_expression "iVar2 + 0x10" (identifier "iVar2") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")")) (compound_statement "{\n      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);\n      (*(code *)puVar1)();\n    }" ({ "{") (expression_statement "*(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);" (assignment_expression "*(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10)" (pointer_expression "*(undefined4 *)(iVar2 + 0x10)" (* "*") (cast_expression "(undefined4 *)(iVar2 + 0x10)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar2 + 0x10)" (( "(") (binary_expression "iVar2 + 0x10" (identifier "iVar2") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (pointer_expression "**(undefined4 **)(iVar2 + 0x10)" (* "*") (pointer_expression "*(undefined4 **)(iVar2 + 0x10)" (* "*") (cast_expression "(undefined4 **)(iVar2 + 0x10)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar2 + 0x10)" (( "(") (binary_expression "iVar2 + 0x10" (identifier "iVar2") (+ "+") (number_literal "0x10")) () ")")))))) (; ";")) (expression_statement "(*(code *)puVar1)();" (call_expression "(*(code *)puVar1)()" (parenthesized_expression "(*(code *)puVar1)" (( "(") (pointer_expression "*(code *)puVar1" (* "*") (cast_expression "(code *)puVar1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b23d0" (* "*") (cast_expression "(code *)PTR_safefree_000b23d0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b23d0"))) () ")")) (argument_list "(iVar2)" (( "(") (identifier "iVar2") () ")"))) (; ";")) (expression_statement "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0)" (identifier "iVar2") (= "=") (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4040),0)" (identifier "delpos234") (argument_list "(*(undefined4 *)(param_1 + 0x4040),0)" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4040)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4040)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4040)" (( "(") (binary_expression "param_1 + 0x4040" (identifier "param_1") (+ "+") (number_literal "0x4040")) () ")")))) (, ",") (number_literal "0") () ")")))) (; ";")) (} "}"))) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4040));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4040))" (identifier "freetree234") (argument_list "(*(undefined4 *)(param_1 + 0x4040))" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4040)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4040)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4040)" (( "(") (binary_expression "param_1 + 0x4040" (identifier "param_1") (+ "+") (number_literal "0x4040")) () ")")))) () ")"))) (; ";")) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4044));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4044))" (identifier "freetree234") (argument_list "(*(undefined4 *)(param_1 + 0x4044))" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4044)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4044)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4044)" (( "(") (binary_expression "param_1 + 0x4044" (identifier "param_1") (+ "+") (number_literal "0x4044")) () ")")))) () ")"))) (; ";")) (while_statement "while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" (while "while") (parenthesized_expression "(iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0)" (( "(") (comma_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0" (assignment_expression "iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0)" (identifier "iVar2") (= "=") (call_expression "delpos234(*(undefined4 *)(param_1 + 0x4048),0)" (identifier "delpos234") (argument_list "(*(undefined4 *)(param_1 + 0x4048),0)" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4048)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4048)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4048)" (( "(") (binary_expression "param_1 + 0x4048" (identifier "param_1") (+ "+") (number_literal "0x4048")) () ")")))) (, ",") (number_literal "0") () ")")))) (, ",") (binary_expression "iVar2 != 0" (identifier "iVar2") (!= "!=") (number_literal "0"))) () ")")) (compound_statement "{\n    (*(code *)PTR_safefree_000b23d0)(iVar2);\n  }" ({ "{") (expression_statement "(*(code *)PTR_safefree_000b23d0)(iVar2);" (call_expression "(*(code *)PTR_safefree_000b23d0)(iVar2)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b23d0" (* "*") (cast_expression "(code *)PTR_safefree_000b23d0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b23d0"))) () ")")) (argument_list "(iVar2)" (( "(") (identifier "iVar2") () ")"))) (; ";")) (} "}"))) (expression_statement "freetree234(*(undefined4 *)(param_1 + 0x4048));" (call_expression "freetree234(*(undefined4 *)(param_1 + 0x4048))" (identifier "freetree234") (argument_list "(*(undefined4 *)(param_1 + 0x4048))" (( "(") (pointer_expression "*(undefined4 *)(param_1 + 0x4048)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x4048)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x4048)" (( "(") (binary_expression "param_1 + 0x4048" (identifier "param_1") (+ "+") (number_literal "0x4048")) () ")")))) () ")"))) (; ";")) (expression_statement "puVar3 = *(undefined4 **)(param_1 + 0x404c);" (assignment_expression "puVar3 = *(undefined4 **)(param_1 + 0x404c)" (identifier "puVar3") (= "=") (pointer_expression "*(undefined4 **)(param_1 + 0x404c)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x404c)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x404c)" (( "(") (binary_expression "param_1 + 0x404c" (identifier "param_1") (+ "+") (number_literal "0x404c")) () ")"))))) (; ";")) (while_statement "while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }" (while "while") (parenthesized_expression "(puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0)" (( "(") (comma_expression "puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0" (assignment_expression "puVar1 = PTR_safefree_000b23d0" (identifier "puVar1") (= "=") (identifier "PTR_safefree_000b23d0")) (, ",") (binary_expression "puVar3 != (undefined4 *)0x0" (identifier "puVar3") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")")) (compound_statement "{\n    *(undefined4 *)(param_1 + 0x404c) = *puVar3;\n    (*(code *)puVar1)();\n    puVar3 = *(undefined4 **)(param_1 + 0x404c);\n  }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 0x404c) = *puVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x404c) = *puVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x404c)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x404c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x404c)" (( "(") (binary_expression "param_1 + 0x404c" (identifier "param_1") (+ "+") (number_literal "0x404c")) () ")")))) (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (expression_statement "(*(code *)puVar1)();" (call_expression "(*(code *)puVar1)()" (parenthesized_expression "(*(code *)puVar1)" (( "(") (pointer_expression "*(code *)puVar1" (* "*") (cast_expression "(code *)puVar1" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "puVar1"))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (expression_statement "puVar3 = *(undefined4 **)(param_1 + 0x404c);" (assignment_expression "puVar3 = *(undefined4 **)(param_1 + 0x404c)" (identifier "puVar3") (= "=") (pointer_expression "*(undefined4 **)(param_1 + 0x404c)" (* "*") (cast_expression "(undefined4 **)(param_1 + 0x404c)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x404c)" (( "(") (binary_expression "param_1 + 0x404c" (identifier "param_1") (+ "+") (number_literal "0x404c")) () ")"))))) (; ";")) (} "}"))) (if_statement "if (*(int **)(param_1 + 8) != (int *)0x0) {\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }" (if "if") (parenthesized_expression "(*(int **)(param_1 + 8) != (int *)0x0)" (( "(") (binary_expression "*(int **)(param_1 + 8) != (int *)0x0" (pointer_expression "*(int **)(param_1 + 8)" (* "*") (cast_expression "(int **)(param_1 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")")))) (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    (**(code **)(**(int **)(param_1 + 8) + 4))();\n  }" ({ "{") (expression_statement "(**(code **)(**(int **)(param_1 + 8) + 4))();" (call_expression "(**(code **)(**(int **)(param_1 + 8) + 4))()" (parenthesized_expression "(**(code **)(**(int **)(param_1 + 8) + 4))" (( "(") (pointer_expression "**(code **)(**(int **)(param_1 + 8) + 4)" (* "*") (pointer_expression "*(code **)(**(int **)(param_1 + 8) + 4)" (* "*") (cast_expression "(code **)(**(int **)(param_1 + 8) + 4)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(**(int **)(param_1 + 8) + 4)" (( "(") (binary_expression "**(int **)(param_1 + 8) + 4" (pointer_expression "**(int **)(param_1 + 8)" (* "*") (pointer_expression "*(int **)(param_1 + 8)" (* "*") (cast_expression "(int **)(param_1 + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 8)" (( "(") (binary_expression "param_1 + 8" (identifier "param_1") (+ "+") (number_literal "8")) () ")"))))) (+ "+") (number_literal "4")) () ")"))))) () ")")) (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "(*(code *)PTR_safefree_000b23d0)(param_1);" (call_expression "(*(code *)PTR_safefree_000b23d0)(param_1)" (parenthesized_expression "(*(code *)PTR_safefree_000b23d0)" (( "(") (pointer_expression "*(code *)PTR_safefree_000b23d0" (* "*") (cast_expression "(code *)PTR_safefree_000b23d0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_safefree_000b23d0"))) () ")")) (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

void function_1(type_1 *cs)

{
  type_2 *puVar1;
  void *var_2;
  type_3 *var_4;
  type_4 var_5;
  
  while (var_2 = var_1(cs->halfchannels,0), var_2 != (void *)0x0) {
    (*(type_5 *)PTR_safefree_000b23d0)(var_2);
  }
  var_3(cs->halfchannels);
  var_3(cs->channels_by_server);
  while (var_2 = var_1(cs->channels_by_us,0), var_2 != (void *)0x0) {
    (*(type_5 *)PTR_safefree_000b23d0)(var_2);
  }
  var_3(cs->channels_by_us);
  var_2 = var_1(cs->xchannels_by_us,0);
  while (var_2 != (void *)0x0) {
    while (puVar1 = PTR_safefree_000b23d0, *(type_6 **)((int)var_2 + 0x10) != (type_6 *)0x0
          ) {
      *(type_6 *)((int)var_2 + 0x10) = **(type_6 **)((int)var_2 + 0x10);
      (*(type_5 *)puVar1)();
    }
    (*(type_5 *)PTR_safefree_000b23d0)(var_2);
    var_2 = var_1(cs->xchannels_by_us,0);
  }
  var_3(cs->xchannels_by_us);
  var_3(cs->xchannels_by_server);
  while (var_2 = var_1(cs->forwardings,0), var_2 != (void *)0x0) {
    (*(type_5 *)PTR_safefree_000b23d0)(var_2);
  }
  var_3(cs->forwardings);
  var_4 = cs->globreq_head;
  while (puVar1 = PTR_safefree_000b23d0, var_4 != (type_3 *)0x0) {
    cs->globreq_head = var_4->next;
    (*(type_5 *)puVar1)();
    var_4 = cs->globreq_head;
  }
  var_5 = cs->sock;
  if (var_5 != (type_4)0x0) {
    (*(*var_5)->close)(var_5);
  }
  (*(type_5 *)PTR_safefree_000b23d0)(cs);
  return;
}


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

void MASKED(int param_1)

{
  undefined *puVar1;
  int iVar2;
  undefined4 *puVar3;
  
  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4034),0), iVar2 != 0) {
    (*(code *)PTR_safefree_000b23d0)(iVar2);
  }
  freetree234(*(undefined4 *)(param_1 + 0x4034));
  freetree234(*(undefined4 *)(param_1 + 0x403c));
  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4038),0), iVar2 != 0) {
    (*(code *)PTR_safefree_000b23d0)(iVar2);
  }
  freetree234(*(undefined4 *)(param_1 + 0x4038));
  iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);
  while (iVar2 != 0) {
    while (puVar1 = PTR_safefree_000b23d0, *(undefined4 **)(iVar2 + 0x10) != (undefined4 *)0x0) {
      *(undefined4 *)(iVar2 + 0x10) = **(undefined4 **)(iVar2 + 0x10);
      (*(code *)puVar1)();
    }
    (*(code *)PTR_safefree_000b23d0)(iVar2);
    iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4040),0);
  }
  freetree234(*(undefined4 *)(param_1 + 0x4040));
  freetree234(*(undefined4 *)(param_1 + 0x4044));
  while (iVar2 = delpos234(*(undefined4 *)(param_1 + 0x4048),0), iVar2 != 0) {
    (*(code *)PTR_safefree_000b23d0)(iVar2);
  }
  freetree234(*(undefined4 *)(param_1 + 0x4048));
  puVar3 = *(undefined4 **)(param_1 + 0x404c);
  while (puVar1 = PTR_safefree_000b23d0, puVar3 != (undefined4 *)0x0) {
    *(undefined4 *)(param_1 + 0x404c) = *puVar3;
    (*(code *)puVar1)();
    puVar3 = *(undefined4 **)(param_1 + 0x404c);
  }
  if (*(int **)(param_1 + 8) != (int *)0x0) {
    (**(code **)(**(int **)(param_1 + 8) + 4))();
  }
  (*(code *)PTR_safefree_000b23d0)(param_1);
  return;
}

