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

void __regparm3 flatten(HASH_TABLE *var_hash_table,sh_var_map_func_t *func,VARLIST *vlist,int flags)

{
  char cVar1;
  BUCKET_CONTENTS *pBVar2;
  SHELL_VAR *pSVar3;
  char *__s1;
  int iVar4;
  int iVar5;
  SHELL_VAR **pointer;
  int iVar6;
  bool bVar7;
  int local_24;
  
  local_24 = 0;
  if (0 < var_hash_table->nbuckets) {
    do {
      for (pBVar2 = var_hash_table->bucket_array[local_24]; pBVar2 != (BUCKET_CONTENTS *)0x0;
          pBVar2 = pBVar2->next) {
        pSVar3 = (SHELL_VAR *)pBVar2->data;
        bVar7 = true;
        if (func != (sh_var_map_func_t *)0x0) {
          iVar4 = (*func)(pSVar3);
          bVar7 = iVar4 != 0;
        }
        if ((vlist != (VARLIST *)0x0) && (bVar7)) {
          iVar4 = vlist->list_len;
          pointer = vlist->list;
          if (iVar4 < 1) {
            iVar5 = 0;
          }
          else {
            iVar6 = 0;
            __s1 = pSVar3->name;
            cVar1 = *__s1;
            do {
              if ((cVar1 == *pointer[iVar6]->name) &&
                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;
              iVar6 = iVar6 + 1;
              iVar5 = iVar4;
            } while (iVar6 != iVar4);
          }
          iVar6 = vlist->list_size;
          if (iVar6 <= iVar5) {
            vlist->list_size = iVar6 + 0x10;
            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);
            iVar4 = vlist->list_len;
            vlist->list = pointer;
          }
          vlist->list_len = iVar4 + 1;
          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;
          pointer[iVar4] = pSVar3;
        }
LAB_00050e50:
      }
      local_24 = local_24 + 1;
    } while (local_24 < var_hash_table->nbuckets);
  }
  return;
}



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

void __regparm3 FUN_00050d60(int *param_1,code *param_2,int *param_3)

{
  char cVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  char *__s1;
  char *__s2;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  bool bVar8;
  int local_24;
  
  local_24 = 0;
  if (0 < param_1[1]) {
    do {
      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;
          puVar2 = (undefined4 *)*puVar2) {
        puVar3 = (undefined4 *)puVar2[2];
        bVar8 = true;
        if (param_2 != (code *)0x0) {
          iVar4 = (*param_2)(puVar3);
          bVar8 = iVar4 != 0;
        }
        if ((param_3 != (int *)0x0) && (bVar8)) {
          iVar4 = param_3[2];
          iVar6 = *param_3;
          if (iVar4 < 1) {
            iVar5 = 0;
          }
          else {
            iVar7 = 0;
            __s1 = (char *)*puVar3;
            cVar1 = *__s1;
            do {
              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);
              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;
              iVar7 = iVar7 + 1;
              iVar5 = iVar4;
            } while (iVar7 != iVar4);
          }
          iVar7 = param_3[1];
          if (iVar7 <= iVar5) {
            param_3[1] = iVar7 + 0x10;
            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);
            iVar4 = param_3[2];
            *param_3 = iVar6;
          }
          param_3[2] = iVar4 + 1;
          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;
          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;
        }
LAB_00050e50:
      }
      local_24 = local_24 + 1;
    } while (local_24 < param_1[1]);
  }
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00031ed0
ADD EBX,0xf9297
SUB ESP,0x2c
MOV dword ptr [ESP + 0xc],EDX
MOV EDX,dword ptr [EAX + 0x4]
MOV dword ptr [ESP + 0x1c],EAX
MOV dword ptr [ESP + 0x10],ECX
MOV dword ptr [ESP + 0x18],0x0
TEST EDX,EDX
JLE 0x00050e71
LEA ESI,[ESI]
MOV EAX,dword ptr [ESP + 0x1c]
MOV EDI,dword ptr [ESP + 0x18]
MOV EAX,dword ptr [EAX]
MOV EBP,dword ptr [EAX + EDI*0x4]
MOV EAX,dword ptr [ESP + 0x10]
TEST EAX,EAX
SETNZ byte ptr [ESP + 0xb]
TEST EBP,EBP
JZ 0x00050e5b
LEA ESI,[ESI]
NOP
MOV EAX,dword ptr [EBP + 0x8]
MOV ESI,dword ptr [ESP + 0xc]
MOV EDX,EAX
MOV dword ptr [ESP],EAX
MOV EAX,0x1
TEST ESI,ESI
JZ 0x00050de3
SUB ESP,0xc
PUSH EDX
CALL ESI
ADD ESP,0x10
TEST EAX,EAX
SETNZ AL
CMP byte ptr [ESP + 0xb],0x0
JZ 0x00050e50
TEST AL,AL
JZ 0x00050e50
MOV EAX,dword ptr [ESP + 0x10]
MOV EDX,dword ptr [EAX + 0x8]
MOV EDI,dword ptr [EAX]
TEST EDX,EDX
JLE 0x00050ee0
MOV EAX,dword ptr [ESP]
XOR ESI,ESI
MOV dword ptr [ESP + 0x14],EBP
MOV EBP,ESI
MOV ESI,EDI
MOV EDI,EDX
MOV EAX,dword ptr [EAX]
MOV dword ptr [ESP + 0x4],EAX
MOVZX EAX,byte ptr [EAX]
MOV byte ptr [ESP + 0xa],AL
JMP 0x00050e27
ADD EBP,0x1
CMP EBP,EDI
JZ 0x00050e80
MOV EAX,dword ptr [ESI + EBP*0x4]
MOVZX ECX,byte ptr [ESP + 0xa]
MOV EAX,dword ptr [EAX]
CMP CL,byte ptr [EAX]
JNZ 0x00050e20
SUB ESP,0x8
PUSH EAX
PUSH dword ptr [ESP + 0x10]
CALL 0x0002f100
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00050e20
MOV EBP,dword ptr [ESP + 0x14]
LEA ESI,[ESI]
MOV EBP,dword ptr [EBP]
TEST EBP,EBP
JNZ 0x00050dc0
MOV EDI,dword ptr [ESP + 0x1c]
ADD dword ptr [ESP + 0x18],0x1
MOV EAX,dword ptr [ESP + 0x18]
CMP EAX,dword ptr [EDI + 0x4]
JL 0x00050d98
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EDX,EDI
MOV EBP,dword ptr [ESP + 0x14]
MOV EDI,ESI
MOV ESI,EDX
MOV EAX,dword ptr [ESP + 0x10]
MOV EAX,dword ptr [EAX + 0x4]
CMP EAX,ESI
JLE 0x00050eb0
MOV ECX,dword ptr [ESP + 0x10]
LEA EAX,[EDX + 0x1]
MOV dword ptr [ECX + 0x8],EAX
MOV EAX,dword ptr [ESP]
MOV dword ptr [EDI + EDX*0x4 + 0x4],0x0
MOV dword ptr [EDI + EDX*0x4],EAX
JMP 0x00050e50
MOV ESI,dword ptr [ESP + 0x10]
LEA EDX,[EAX + 0x10]
SUB ESP,0x8
LEA EAX,[EAX*0x4 + 0x44]
MOV dword ptr [ESI + 0x4],EDX
PUSH EAX
PUSH EDI
CALL 0x00099260
MOV EDX,dword ptr [ESI + 0x8]
ADD ESP,0x10
MOV EDI,EAX
MOV dword ptr [ESI],EAX
JMP 0x00050e95
XOR ESI,ESI
JMP 0x00050e8a
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 FUN_00050d60(int *param_1,code *param_2,int *param_3)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  char *__s2;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  bool bVar8;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }\n  return;\n}\n\n" comment (function_definition "void __regparm3 FUN_00050d60(int *param_1,code *param_2,int *param_3)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  char *__s2;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  bool bVar8;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00050d60(int *param_1,code *param_2,int *param_3)" identifier (parameter_list "(int *param_1,code *param_2,int *param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "code *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  char *__s2;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  bool bVar8;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "char *__s1;" primitive_type (pointer_declarator "*__s1" * identifier) ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "bool bVar8;" primitive_type identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "local_24 = 0;" (assignment_expression "local_24 = 0" identifier = number_literal) ;) (if_statement "if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }" if (parenthesized_expression "(0 < param_1[1])" ( (binary_expression "0 < param_1[1]" number_literal < (subscript_expression "param_1[1]" identifier [ number_literal ])) )) (compound_statement "{\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }" { (do_statement "do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);" do (compound_statement "{\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    }" { (for_statement "for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }" for ( (assignment_expression "puVar2 = *(undefined4 **)(*param_1 + local_24 * 4)" identifier = (pointer_expression "*(undefined4 **)(*param_1 + local_24 * 4)" * (cast_expression "(undefined4 **)(*param_1 + local_24 * 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + local_24 * 4)" ( (binary_expression "*param_1 + local_24 * 4" (pointer_expression "*param_1" * identifier) + (binary_expression "local_24 * 4" identifier * number_literal)) ))))) ; (binary_expression "puVar2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined4 *)*puVar2" identifier = (cast_expression "(undefined4 *)*puVar2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }" { (expression_statement "puVar3 = (undefined4 *)puVar2[2];" (assignment_expression "puVar3 = (undefined4 *)puVar2[2]" identifier = (cast_expression "(undefined4 *)puVar2[2]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[2]" identifier [ number_literal ]))) ;) (expression_statement "bVar8 = true;" (assignment_expression "bVar8 = true" identifier = true) ;) (if_statement "if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }" if (parenthesized_expression "(param_2 != (code *)0x0)" ( (binary_expression "param_2 != (code *)0x0" identifier != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }" { (expression_statement "iVar4 = (*param_2)(puVar3);" (assignment_expression "iVar4 = (*param_2)(puVar3)" identifier = (call_expression "(*param_2)(puVar3)" (parenthesized_expression "(*param_2)" ( (pointer_expression "*param_2" * identifier) )) (argument_list "(puVar3)" ( identifier )))) ;) (expression_statement "bVar8 = iVar4 != 0;" (assignment_expression "bVar8 = iVar4 != 0" identifier = (binary_expression "iVar4 != 0" identifier != number_literal)) ;) })) (if_statement "if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }" if (parenthesized_expression "((param_3 != (int *)0x0) && (bVar8))" ( (binary_expression "(param_3 != (int *)0x0) && (bVar8)" (parenthesized_expression "(param_3 != (int *)0x0)" ( (binary_expression "param_3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(bVar8)" ( identifier ))) )) (compound_statement "{\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }" { (expression_statement "iVar4 = param_3[2];" (assignment_expression "iVar4 = param_3[2]" identifier = (subscript_expression "param_3[2]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = *param_3;" (assignment_expression "iVar6 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }" if (parenthesized_expression "(iVar4 < 1)" ( (binary_expression "iVar4 < 1" identifier < number_literal) )) (compound_statement "{\n            iVar5 = 0;\n          }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) }) (else_clause "else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }" else (compound_statement "{\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "__s1 = (char *)*puVar3;" (assignment_expression "__s1 = (char *)*puVar3" identifier = (cast_expression "(char *)*puVar3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "cVar1 = *__s1;" (assignment_expression "cVar1 = *__s1" identifier = (pointer_expression "*__s1" * identifier)) ;) (do_statement "do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);" do (compound_statement "{\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            }" { (expression_statement "__s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);" (assignment_expression "__s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4)" identifier = (cast_expression "(char *)**(undefined4 **)(iVar6 + iVar7 * 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(undefined4 **)(iVar6 + iVar7 * 4)" * (pointer_expression "*(undefined4 **)(iVar6 + iVar7 * 4)" * (cast_expression "(undefined4 **)(iVar6 + iVar7 * 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar6 + iVar7 * 4)" ( (binary_expression "iVar6 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))))) ;) (if_statement "if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;" if (parenthesized_expression "((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0))" ( (binary_expression "(cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)" (parenthesized_expression "(cVar1 == *__s2)" ( (binary_expression "cVar1 == *__s2" identifier == (pointer_expression "*__s2" * identifier)) )) && (parenthesized_expression "(iVar5 = strcmp(__s1,__s2), iVar5 == 0)" ( (comma_expression "iVar5 = strcmp(__s1,__s2), iVar5 == 0" (assignment_expression "iVar5 = strcmp(__s1,__s2)" identifier = (call_expression "strcmp(__s1,__s2)" identifier (argument_list "(__s1,__s2)" ( identifier , identifier )))) , (binary_expression "iVar5 == 0" identifier == number_literal)) ))) )) (goto_statement "goto LAB_00050e50;" goto statement_identifier ;)) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "iVar5 = iVar4;" (assignment_expression "iVar5 = iVar4" identifier = identifier) ;) }) while (parenthesized_expression "(iVar7 != iVar4)" ( (binary_expression "iVar7 != iVar4" identifier != identifier) )) ;) }))) (expression_statement "iVar7 = param_3[1];" (assignment_expression "iVar7 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (if_statement "if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }" if (parenthesized_expression "(iVar7 <= iVar5)" ( (binary_expression "iVar7 <= iVar5" identifier <= identifier) )) (compound_statement "{\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }" { (expression_statement "param_3[1] = iVar7 + 0x10;" (assignment_expression "param_3[1] = iVar7 + 0x10" (subscript_expression "param_3[1]" identifier [ number_literal ]) = (binary_expression "iVar7 + 0x10" identifier + number_literal)) ;) (expression_statement "iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);" (assignment_expression "iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44)" identifier = (call_expression "xrealloc(iVar6,iVar7 * 4 + 0x44)" identifier (argument_list "(iVar6,iVar7 * 4 + 0x44)" ( identifier , (binary_expression "iVar7 * 4 + 0x44" (binary_expression "iVar7 * 4" identifier * number_literal) + number_literal) )))) ;) (expression_statement "iVar4 = param_3[2];" (assignment_expression "iVar4 = param_3[2]" identifier = (subscript_expression "param_3[2]" identifier [ number_literal ])) ;) (expression_statement "*param_3 = iVar6;" (assignment_expression "*param_3 = iVar6" (pointer_expression "*param_3" * identifier) = identifier) ;) })) (expression_statement "param_3[2] = iVar4 + 1;" (assignment_expression "param_3[2] = iVar4 + 1" (subscript_expression "param_3[2]" identifier [ number_literal ]) = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;" (assignment_expression "*(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0" (pointer_expression "*(undefined4 *)(iVar6 + 4 + iVar4 * 4)" * (cast_expression "(undefined4 *)(iVar6 + 4 + iVar4 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4 + iVar4 * 4)" ( (binary_expression "iVar6 + 4 + iVar4 * 4" (binary_expression "iVar6 + 4" identifier + number_literal) + (binary_expression "iVar4 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "*(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;" (assignment_expression "*(undefined4 **)(iVar6 + iVar4 * 4) = puVar3" (pointer_expression "*(undefined4 **)(iVar6 + iVar4 * 4)" * (cast_expression "(undefined4 **)(iVar6 + iVar4 * 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar6 + iVar4 * 4)" ( (binary_expression "iVar6 + iVar4 * 4" identifier + (binary_expression "iVar4 * 4" identifier * number_literal)) )))) = identifier) ;) })) (labeled_statement "LAB_00050e50:" statement_identifier : (expression_statement "" ;)) })) (expression_statement "local_24 = local_24 + 1;" (assignment_expression "local_24 = local_24 + 1" identifier = (binary_expression "local_24 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_24 < param_1[1])" ( (binary_expression "local_24 < param_1[1]" identifier < (subscript_expression "param_1[1]" identifier [ number_literal ])) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid __regparm3 flatten(HASH_TABLE *var_hash_table,sh_var_map_func_t *func,VARLIST *vlist,int flags)\n\n{\n  char cVar1;\n  BUCKET_CONTENTS *pBVar2;\n  SHELL_VAR *pSVar3;\n  char *__s1;\n  int iVar4;\n  int iVar5;\n  SHELL_VAR **pointer;\n  int iVar6;\n  bool bVar7;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < var_hash_table->nbuckets) {\n    do {\n      for (pBVar2 = var_hash_table->bucket_array[local_24]; pBVar2 != (BUCKET_CONTENTS *)0x0;\n          pBVar2 = pBVar2->next) {\n        pSVar3 = (SHELL_VAR *)pBVar2->data;\n        bVar7 = true;\n        if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }\n        if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < var_hash_table->nbuckets);\n  }\n  return;\n}\n\n" comment (function_definition "void __regparm3 flatten(HASH_TABLE *var_hash_table,sh_var_map_func_t *func,VARLIST *vlist,int flags)\n\n{\n  char cVar1;\n  BUCKET_CONTENTS *pBVar2;\n  SHELL_VAR *pSVar3;\n  char *__s1;\n  int iVar4;\n  int iVar5;\n  SHELL_VAR **pointer;\n  int iVar6;\n  bool bVar7;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < var_hash_table->nbuckets) {\n    do {\n      for (pBVar2 = var_hash_table->bucket_array[local_24]; pBVar2 != (BUCKET_CONTENTS *)0x0;\n          pBVar2 = pBVar2->next) {\n        pSVar3 = (SHELL_VAR *)pBVar2->data;\n        bVar7 = true;\n        if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }\n        if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < var_hash_table->nbuckets);\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "flatten(HASH_TABLE *var_hash_table,sh_var_map_func_t *func,VARLIST *vlist,int flags)" identifier (parameter_list "(HASH_TABLE *var_hash_table,sh_var_map_func_t *func,VARLIST *vlist,int flags)" ( (parameter_declaration "HASH_TABLE *var_hash_table" type_identifier (pointer_declarator "*var_hash_table" * identifier)) , (parameter_declaration "sh_var_map_func_t *func" type_identifier (pointer_declarator "*func" * identifier)) , (parameter_declaration "VARLIST *vlist" type_identifier (pointer_declarator "*vlist" * identifier)) , (parameter_declaration "int flags" primitive_type identifier) ))) (compound_statement "{\n  char cVar1;\n  BUCKET_CONTENTS *pBVar2;\n  SHELL_VAR *pSVar3;\n  char *__s1;\n  int iVar4;\n  int iVar5;\n  SHELL_VAR **pointer;\n  int iVar6;\n  bool bVar7;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < var_hash_table->nbuckets) {\n    do {\n      for (pBVar2 = var_hash_table->bucket_array[local_24]; pBVar2 != (BUCKET_CONTENTS *)0x0;\n          pBVar2 = pBVar2->next) {\n        pSVar3 = (SHELL_VAR *)pBVar2->data;\n        bVar7 = true;\n        if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }\n        if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < var_hash_table->nbuckets);\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "BUCKET_CONTENTS *pBVar2;" type_identifier (pointer_declarator "*pBVar2" * identifier) ;) (declaration "SHELL_VAR *pSVar3;" type_identifier (pointer_declarator "*pSVar3" * identifier) ;) (declaration "char *__s1;" primitive_type (pointer_declarator "*__s1" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "SHELL_VAR **pointer;" type_identifier (pointer_declarator "**pointer" * (pointer_declarator "*pointer" * identifier)) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "bool bVar7;" primitive_type identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "local_24 = 0;" (assignment_expression "local_24 = 0" identifier = number_literal) ;) (if_statement "if (0 < var_hash_table->nbuckets) {\n    do {\n      for (pBVar2 = var_hash_table->bucket_array[local_24]; pBVar2 != (BUCKET_CONTENTS *)0x0;\n          pBVar2 = pBVar2->next) {\n        pSVar3 = (SHELL_VAR *)pBVar2->data;\n        bVar7 = true;\n        if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }\n        if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < var_hash_table->nbuckets);\n  }" if (parenthesized_expression "(0 < var_hash_table->nbuckets)" ( (binary_expression "0 < var_hash_table->nbuckets" number_literal < (field_expression "var_hash_table->nbuckets" identifier -> field_identifier)) )) (compound_statement "{\n    do {\n      for (pBVar2 = var_hash_table->bucket_array[local_24]; pBVar2 != (BUCKET_CONTENTS *)0x0;\n          pBVar2 = pBVar2->next) {\n        pSVar3 = (SHELL_VAR *)pBVar2->data;\n        bVar7 = true;\n        if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }\n        if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < var_hash_table->nbuckets);\n  }" { (do_statement "do {\n      for (pBVar2 = var_hash_table->bucket_array[local_24]; pBVar2 != (BUCKET_CONTENTS *)0x0;\n          pBVar2 = pBVar2->next) {\n        pSVar3 = (SHELL_VAR *)pBVar2->data;\n        bVar7 = true;\n        if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }\n        if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < var_hash_table->nbuckets);" do (compound_statement "{\n      for (pBVar2 = var_hash_table->bucket_array[local_24]; pBVar2 != (BUCKET_CONTENTS *)0x0;\n          pBVar2 = pBVar2->next) {\n        pSVar3 = (SHELL_VAR *)pBVar2->data;\n        bVar7 = true;\n        if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }\n        if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    }" { (for_statement "for (pBVar2 = var_hash_table->bucket_array[local_24]; pBVar2 != (BUCKET_CONTENTS *)0x0;\n          pBVar2 = pBVar2->next) {\n        pSVar3 = (SHELL_VAR *)pBVar2->data;\n        bVar7 = true;\n        if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }\n        if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }\nLAB_00050e50:\n      }" for ( (assignment_expression "pBVar2 = var_hash_table->bucket_array[local_24]" identifier = (subscript_expression "var_hash_table->bucket_array[local_24]" (field_expression "var_hash_table->bucket_array" identifier -> field_identifier) [ identifier ])) ; (binary_expression "pBVar2 != (BUCKET_CONTENTS *)0x0" identifier != (cast_expression "(BUCKET_CONTENTS *)0x0" ( (type_descriptor "BUCKET_CONTENTS *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "pBVar2 = pBVar2->next" identifier = (field_expression "pBVar2->next" identifier -> field_identifier)) ) (compound_statement "{\n        pSVar3 = (SHELL_VAR *)pBVar2->data;\n        bVar7 = true;\n        if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }\n        if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }\nLAB_00050e50:\n      }" { (expression_statement "pSVar3 = (SHELL_VAR *)pBVar2->data;" (assignment_expression "pSVar3 = (SHELL_VAR *)pBVar2->data" identifier = (cast_expression "(SHELL_VAR *)pBVar2->data" ( (type_descriptor "SHELL_VAR *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pBVar2->data" identifier -> field_identifier))) ;) (expression_statement "bVar7 = true;" (assignment_expression "bVar7 = true" identifier = true) ;) (if_statement "if (func != (sh_var_map_func_t *)0x0) {\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }" if (parenthesized_expression "(func != (sh_var_map_func_t *)0x0)" ( (binary_expression "func != (sh_var_map_func_t *)0x0" identifier != (cast_expression "(sh_var_map_func_t *)0x0" ( (type_descriptor "sh_var_map_func_t *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar4 = (*func)(pSVar3);\n          bVar7 = iVar4 != 0;\n        }" { (expression_statement "iVar4 = (*func)(pSVar3);" (assignment_expression "iVar4 = (*func)(pSVar3)" identifier = (call_expression "(*func)(pSVar3)" (parenthesized_expression "(*func)" ( (pointer_expression "*func" * identifier) )) (argument_list "(pSVar3)" ( identifier )))) ;) (expression_statement "bVar7 = iVar4 != 0;" (assignment_expression "bVar7 = iVar4 != 0" identifier = (binary_expression "iVar4 != 0" identifier != number_literal)) ;) })) (if_statement "if ((vlist != (VARLIST *)0x0) && (bVar7)) {\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }" if (parenthesized_expression "((vlist != (VARLIST *)0x0) && (bVar7))" ( (binary_expression "(vlist != (VARLIST *)0x0) && (bVar7)" (parenthesized_expression "(vlist != (VARLIST *)0x0)" ( (binary_expression "vlist != (VARLIST *)0x0" identifier != (cast_expression "(VARLIST *)0x0" ( (type_descriptor "VARLIST *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(bVar7)" ( identifier ))) )) (compound_statement "{\n          iVar4 = vlist->list_len;\n          pointer = vlist->list;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }\n          iVar6 = vlist->list_size;\n          if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }\n          vlist->list_len = iVar4 + 1;\n          pointer[iVar4 + 1] = (SHELL_VAR *)0x0;\n          pointer[iVar4] = pSVar3;\n        }" { (expression_statement "iVar4 = vlist->list_len;" (assignment_expression "iVar4 = vlist->list_len" identifier = (field_expression "vlist->list_len" identifier -> field_identifier)) ;) (expression_statement "pointer = vlist->list;" (assignment_expression "pointer = vlist->list" identifier = (field_expression "vlist->list" identifier -> field_identifier)) ;) (if_statement "if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }" if (parenthesized_expression "(iVar4 < 1)" ( (binary_expression "iVar4 < 1" identifier < number_literal) )) (compound_statement "{\n            iVar5 = 0;\n          }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) }) (else_clause "else {\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }" else (compound_statement "{\n            iVar6 = 0;\n            __s1 = pSVar3->name;\n            cVar1 = *__s1;\n            do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);\n          }" { (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (expression_statement "__s1 = pSVar3->name;" (assignment_expression "__s1 = pSVar3->name" identifier = (field_expression "pSVar3->name" identifier -> field_identifier)) ;) (expression_statement "cVar1 = *__s1;" (assignment_expression "cVar1 = *__s1" identifier = (pointer_expression "*__s1" * identifier)) ;) (do_statement "do {\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            } while (iVar6 != iVar4);" do (compound_statement "{\n              if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;\n              iVar6 = iVar6 + 1;\n              iVar5 = iVar4;\n            }" { (if_statement "if ((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)) goto LAB_00050e50;" if (parenthesized_expression "((cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0))" ( (binary_expression "(cVar1 == *pointer[iVar6]->name) &&\n                 (iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)" (parenthesized_expression "(cVar1 == *pointer[iVar6]->name)" ( (binary_expression "cVar1 == *pointer[iVar6]->name" identifier == (pointer_expression "*pointer[iVar6]->name" * (field_expression "pointer[iVar6]->name" (subscript_expression "pointer[iVar6]" identifier [ identifier ]) -> field_identifier))) )) && (parenthesized_expression "(iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0)" ( (comma_expression "iVar5 = strcmp(__s1,pointer[iVar6]->name), iVar5 == 0" (assignment_expression "iVar5 = strcmp(__s1,pointer[iVar6]->name)" identifier = (call_expression "strcmp(__s1,pointer[iVar6]->name)" identifier (argument_list "(__s1,pointer[iVar6]->name)" ( identifier , (field_expression "pointer[iVar6]->name" (subscript_expression "pointer[iVar6]" identifier [ identifier ]) -> field_identifier) )))) , (binary_expression "iVar5 == 0" identifier == number_literal)) ))) )) (goto_statement "goto LAB_00050e50;" goto statement_identifier ;)) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (expression_statement "iVar5 = iVar4;" (assignment_expression "iVar5 = iVar4" identifier = identifier) ;) }) while (parenthesized_expression "(iVar6 != iVar4)" ( (binary_expression "iVar6 != iVar4" identifier != identifier) )) ;) }))) (expression_statement "iVar6 = vlist->list_size;" (assignment_expression "iVar6 = vlist->list_size" identifier = (field_expression "vlist->list_size" identifier -> field_identifier)) ;) (if_statement "if (iVar6 <= iVar5) {\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }" if (parenthesized_expression "(iVar6 <= iVar5)" ( (binary_expression "iVar6 <= iVar5" identifier <= identifier) )) (compound_statement "{\n            vlist->list_size = iVar6 + 0x10;\n            pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);\n            iVar4 = vlist->list_len;\n            vlist->list = pointer;\n          }" { (expression_statement "vlist->list_size = iVar6 + 0x10;" (assignment_expression "vlist->list_size = iVar6 + 0x10" (field_expression "vlist->list_size" identifier -> field_identifier) = (binary_expression "iVar6 + 0x10" identifier + number_literal)) ;) (expression_statement "pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44);" (assignment_expression "pointer = (SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44)" identifier = (cast_expression "(SHELL_VAR **)xrealloc(pointer,iVar6 * 4 + 0x44)" ( (type_descriptor "SHELL_VAR **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (call_expression "xrealloc(pointer,iVar6 * 4 + 0x44)" identifier (argument_list "(pointer,iVar6 * 4 + 0x44)" ( identifier , (binary_expression "iVar6 * 4 + 0x44" (binary_expression "iVar6 * 4" identifier * number_literal) + number_literal) ))))) ;) (expression_statement "iVar4 = vlist->list_len;" (assignment_expression "iVar4 = vlist->list_len" identifier = (field_expression "vlist->list_len" identifier -> field_identifier)) ;) (expression_statement "vlist->list = pointer;" (assignment_expression "vlist->list = pointer" (field_expression "vlist->list" identifier -> field_identifier) = identifier) ;) })) (expression_statement "vlist->list_len = iVar4 + 1;" (assignment_expression "vlist->list_len = iVar4 + 1" (field_expression "vlist->list_len" identifier -> field_identifier) = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "pointer[iVar4 + 1] = (SHELL_VAR *)0x0;" (assignment_expression "pointer[iVar4 + 1] = (SHELL_VAR *)0x0" (subscript_expression "pointer[iVar4 + 1]" identifier [ (binary_expression "iVar4 + 1" identifier + number_literal) ]) = (cast_expression "(SHELL_VAR *)0x0" ( (type_descriptor "SHELL_VAR *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "pointer[iVar4] = pSVar3;" (assignment_expression "pointer[iVar4] = pSVar3" (subscript_expression "pointer[iVar4]" identifier [ identifier ]) = identifier) ;) })) (labeled_statement "LAB_00050e50:" statement_identifier : (expression_statement "" ;)) })) (expression_statement "local_24 = local_24 + 1;" (assignment_expression "local_24 = local_24 + 1" identifier = (binary_expression "local_24 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_24 < var_hash_table->nbuckets)" ( (binary_expression "local_24 < var_hash_table->nbuckets" identifier < (field_expression "var_hash_table->nbuckets" identifier -> field_identifier)) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void __regparm3 FUN_00050d60(int *param_1,code *param_2,int *param_3)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  char *__s2;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  bool bVar8;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }\n  return;\n}\n\n" (function_definition "void __regparm3 FUN_00050d60(int *param_1,code *param_2,int *param_3)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  char *__s2;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  bool bVar8;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }\n  return;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00050d60(int *param_1,code *param_2,int *param_3)" identifier (parameter_list "(int *param_1,code *param_2,int *param_3)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "code *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "int *param_3" primitive_type (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  char *__s2;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  bool bVar8;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }\n  return;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined4 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "char *__s1;" primitive_type (pointer_declarator "*__s1" * identifier) ;) (declaration "char *__s2;" primitive_type (pointer_declarator "*__s2" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "bool bVar8;" primitive_type identifier ;) (declaration "int local_24;" primitive_type identifier ;) (expression_statement "local_24 = 0;" (assignment_expression "local_24 = 0" identifier = number_literal) ;) (if_statement "if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }" if (parenthesized_expression "(0 < param_1[1])" ( (binary_expression "0 < param_1[1]" number_literal < (subscript_expression "param_1[1]" identifier [ number_literal ])) )) (compound_statement "{\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }" { (do_statement "do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);" do (compound_statement "{\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    }" { (for_statement "for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }" for ( (assignment_expression "puVar2 = *(undefined4 **)(*param_1 + local_24 * 4)" identifier = (pointer_expression "*(undefined4 **)(*param_1 + local_24 * 4)" * (cast_expression "(undefined4 **)(*param_1 + local_24 * 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + local_24 * 4)" ( (binary_expression "*param_1 + local_24 * 4" (pointer_expression "*param_1" * identifier) + (binary_expression "local_24 * 4" identifier * number_literal)) ))))) ; (binary_expression "puVar2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ; (assignment_expression "puVar2 = (undefined4 *)*puVar2" identifier = (cast_expression "(undefined4 *)*puVar2" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar2" * identifier))) ) (compound_statement "{\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }" { (expression_statement "puVar3 = (undefined4 *)puVar2[2];" (assignment_expression "puVar3 = (undefined4 *)puVar2[2]" identifier = (cast_expression "(undefined4 *)puVar2[2]" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar2[2]" identifier [ number_literal ]))) ;) (expression_statement "bVar8 = true;" (assignment_expression "bVar8 = true" identifier = true) ;) (if_statement "if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }" if (parenthesized_expression "(param_2 != (code *)0x0)" ( (binary_expression "param_2 != (code *)0x0" identifier != (cast_expression "(code *)0x0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }" { (expression_statement "iVar4 = (*param_2)(puVar3);" (assignment_expression "iVar4 = (*param_2)(puVar3)" identifier = (call_expression "(*param_2)(puVar3)" (parenthesized_expression "(*param_2)" ( (pointer_expression "*param_2" * identifier) )) (argument_list "(puVar3)" ( identifier )))) ;) (expression_statement "bVar8 = iVar4 != 0;" (assignment_expression "bVar8 = iVar4 != 0" identifier = (binary_expression "iVar4 != 0" identifier != number_literal)) ;) })) (if_statement "if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }" if (parenthesized_expression "((param_3 != (int *)0x0) && (bVar8))" ( (binary_expression "(param_3 != (int *)0x0) && (bVar8)" (parenthesized_expression "(param_3 != (int *)0x0)" ( (binary_expression "param_3 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(bVar8)" ( identifier ))) )) (compound_statement "{\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }" { (expression_statement "iVar4 = param_3[2];" (assignment_expression "iVar4 = param_3[2]" identifier = (subscript_expression "param_3[2]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = *param_3;" (assignment_expression "iVar6 = *param_3" identifier = (pointer_expression "*param_3" * identifier)) ;) (if_statement "if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }" if (parenthesized_expression "(iVar4 < 1)" ( (binary_expression "iVar4 < 1" identifier < number_literal) )) (compound_statement "{\n            iVar5 = 0;\n          }" { (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) }) (else_clause "else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }" else (compound_statement "{\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }" { (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (expression_statement "__s1 = (char *)*puVar3;" (assignment_expression "__s1 = (char *)*puVar3" identifier = (cast_expression "(char *)*puVar3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*puVar3" * identifier))) ;) (expression_statement "cVar1 = *__s1;" (assignment_expression "cVar1 = *__s1" identifier = (pointer_expression "*__s1" * identifier)) ;) (do_statement "do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);" do (compound_statement "{\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            }" { (expression_statement "__s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);" (assignment_expression "__s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4)" identifier = (cast_expression "(char *)**(undefined4 **)(iVar6 + iVar7 * 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "**(undefined4 **)(iVar6 + iVar7 * 4)" * (pointer_expression "*(undefined4 **)(iVar6 + iVar7 * 4)" * (cast_expression "(undefined4 **)(iVar6 + iVar7 * 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar6 + iVar7 * 4)" ( (binary_expression "iVar6 + iVar7 * 4" identifier + (binary_expression "iVar7 * 4" identifier * number_literal)) ))))))) ;) (if_statement "if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;" if (parenthesized_expression "((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0))" ( (binary_expression "(cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)" (parenthesized_expression "(cVar1 == *__s2)" ( (binary_expression "cVar1 == *__s2" identifier == (pointer_expression "*__s2" * identifier)) )) && (parenthesized_expression "(iVar5 = strcmp(__s1,__s2), iVar5 == 0)" ( (comma_expression "iVar5 = strcmp(__s1,__s2), iVar5 == 0" (assignment_expression "iVar5 = strcmp(__s1,__s2)" identifier = (call_expression "strcmp(__s1,__s2)" identifier (argument_list "(__s1,__s2)" ( identifier , identifier )))) , (binary_expression "iVar5 == 0" identifier == number_literal)) ))) )) (goto_statement "goto LAB_00050e50;" goto statement_identifier ;)) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" identifier = (binary_expression "iVar7 + 1" identifier + number_literal)) ;) (expression_statement "iVar5 = iVar4;" (assignment_expression "iVar5 = iVar4" identifier = identifier) ;) }) while (parenthesized_expression "(iVar7 != iVar4)" ( (binary_expression "iVar7 != iVar4" identifier != identifier) )) ;) }))) (expression_statement "iVar7 = param_3[1];" (assignment_expression "iVar7 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (if_statement "if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }" if (parenthesized_expression "(iVar7 <= iVar5)" ( (binary_expression "iVar7 <= iVar5" identifier <= identifier) )) (compound_statement "{\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }" { (expression_statement "param_3[1] = iVar7 + 0x10;" (assignment_expression "param_3[1] = iVar7 + 0x10" (subscript_expression "param_3[1]" identifier [ number_literal ]) = (binary_expression "iVar7 + 0x10" identifier + number_literal)) ;) (expression_statement "iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);" (assignment_expression "iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44)" identifier = (call_expression "xrealloc(iVar6,iVar7 * 4 + 0x44)" identifier (argument_list "(iVar6,iVar7 * 4 + 0x44)" ( identifier , (binary_expression "iVar7 * 4 + 0x44" (binary_expression "iVar7 * 4" identifier * number_literal) + number_literal) )))) ;) (expression_statement "iVar4 = param_3[2];" (assignment_expression "iVar4 = param_3[2]" identifier = (subscript_expression "param_3[2]" identifier [ number_literal ])) ;) (expression_statement "*param_3 = iVar6;" (assignment_expression "*param_3 = iVar6" (pointer_expression "*param_3" * identifier) = identifier) ;) })) (expression_statement "param_3[2] = iVar4 + 1;" (assignment_expression "param_3[2] = iVar4 + 1" (subscript_expression "param_3[2]" identifier [ number_literal ]) = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "*(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;" (assignment_expression "*(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0" (pointer_expression "*(undefined4 *)(iVar6 + 4 + iVar4 * 4)" * (cast_expression "(undefined4 *)(iVar6 + 4 + iVar4 * 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + 4 + iVar4 * 4)" ( (binary_expression "iVar6 + 4 + iVar4 * 4" (binary_expression "iVar6 + 4" identifier + number_literal) + (binary_expression "iVar4 * 4" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "*(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;" (assignment_expression "*(undefined4 **)(iVar6 + iVar4 * 4) = puVar3" (pointer_expression "*(undefined4 **)(iVar6 + iVar4 * 4)" * (cast_expression "(undefined4 **)(iVar6 + iVar4 * 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(iVar6 + iVar4 * 4)" ( (binary_expression "iVar6 + iVar4 * 4" identifier + (binary_expression "iVar4 * 4" identifier * number_literal)) )))) = identifier) ;) })) (labeled_statement "LAB_00050e50:" statement_identifier : (expression_statement "" ;)) })) (expression_statement "local_24 = local_24 + 1;" (assignment_expression "local_24 = local_24 + 1" identifier = (binary_expression "local_24 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(local_24 < param_1[1])" ( (binary_expression "local_24 < param_1[1]" identifier < (subscript_expression "param_1[1]" identifier [ number_literal ])) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (subscript_expression IDENT [ LIT ])) )) (compound_statement { (do_statement do (compound_statement { (for_statement for ( (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + (binary_expression IDENT * LIT)) ))))) ; (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ; (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT != LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( IDENT ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) ))))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * IDENT)) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) , (binary_expression IDENT == LIT)) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) }))) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (binary_expression (binary_expression IDENT * LIT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )))) = IDENT) ;) })) (labeled_statement statement_identifier : (expression_statement ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (subscript_expression IDENT [ LIT ])) )) ;) })) (return_statement return ;) })))
(function_definition "void __regparm3 FUN_00050d60(int *param_1,code *param_2,int *param_3)\n\n{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  char *__s2;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  bool bVar8;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }\n  return;\n}" (primitive_type "void") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00050d60(int *param_1,code *param_2,int *param_3)" (identifier "FUN_00050d60") (parameter_list "(int *param_1,code *param_2,int *param_3)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "code *param_2" (type_identifier "code") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "int *param_3" (primitive_type "int") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  char cVar1;\n  undefined4 *puVar2;\n  undefined4 *puVar3;\n  char *__s1;\n  char *__s2;\n  int iVar4;\n  int iVar5;\n  int iVar6;\n  int iVar7;\n  bool bVar8;\n  int local_24;\n  \n  local_24 = 0;\n  if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }\n  return;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "undefined4 *puVar2;" (type_identifier "undefined4") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined4 *puVar3;" (type_identifier "undefined4") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "char *__s1;" (primitive_type "char") (pointer_declarator "*__s1" (* "*") (identifier "__s1")) (; ";")) (declaration "char *__s2;" (primitive_type "char") (pointer_declarator "*__s2" (* "*") (identifier "__s2")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "bool bVar8;" (primitive_type "bool") (identifier "bVar8") (; ";")) (declaration "int local_24;" (primitive_type "int") (identifier "local_24") (; ";")) (expression_statement "local_24 = 0;" (assignment_expression "local_24 = 0" (identifier "local_24") (= "=") (number_literal "0")) (; ";")) (if_statement "if (0 < param_1[1]) {\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }" (if "if") (parenthesized_expression "(0 < param_1[1])" (( "(") (binary_expression "0 < param_1[1]" (number_literal "0") (< "<") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")) (compound_statement "{\n    do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);\n  }" ({ "{") (do_statement "do {\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    } while (local_24 < param_1[1]);" (do "do") (compound_statement "{\n      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }\n      local_24 = local_24 + 1;\n    }" ({ "{") (for_statement "for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;\n          puVar2 = (undefined4 *)*puVar2) {\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }" (for "for") (( "(") (assignment_expression "puVar2 = *(undefined4 **)(*param_1 + local_24 * 4)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined4 **)(*param_1 + local_24 * 4)" (* "*") (cast_expression "(undefined4 **)(*param_1 + local_24 * 4)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + local_24 * 4)" (( "(") (binary_expression "*param_1 + local_24 * 4" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (binary_expression "local_24 * 4" (identifier "local_24") (* "*") (number_literal "4"))) () ")"))))) (; ";") (binary_expression "puVar2 != (undefined4 *)0x0" (identifier "puVar2") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";") (assignment_expression "puVar2 = (undefined4 *)*puVar2" (identifier "puVar2") (= "=") (cast_expression "(undefined4 *)*puVar2" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")))) () ")") (compound_statement "{\n        puVar3 = (undefined4 *)puVar2[2];\n        bVar8 = true;\n        if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }\n        if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }\nLAB_00050e50:\n      }" ({ "{") (expression_statement "puVar3 = (undefined4 *)puVar2[2];" (assignment_expression "puVar3 = (undefined4 *)puVar2[2]" (identifier "puVar3") (= "=") (cast_expression "(undefined4 *)puVar2[2]" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar2[2]" (identifier "puVar2") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "bVar8 = true;" (assignment_expression "bVar8 = true" (identifier "bVar8") (= "=") (true "true")) (; ";")) (if_statement "if (param_2 != (code *)0x0) {\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }" (if "if") (parenthesized_expression "(param_2 != (code *)0x0)" (( "(") (binary_expression "param_2 != (code *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(code *)0x0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          iVar4 = (*param_2)(puVar3);\n          bVar8 = iVar4 != 0;\n        }" ({ "{") (expression_statement "iVar4 = (*param_2)(puVar3);" (assignment_expression "iVar4 = (*param_2)(puVar3)" (identifier "iVar4") (= "=") (call_expression "(*param_2)(puVar3)" (parenthesized_expression "(*param_2)" (( "(") (pointer_expression "*param_2" (* "*") (identifier "param_2")) () ")")) (argument_list "(puVar3)" (( "(") (identifier "puVar3") () ")")))) (; ";")) (expression_statement "bVar8 = iVar4 != 0;" (assignment_expression "bVar8 = iVar4 != 0" (identifier "bVar8") (= "=") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0"))) (; ";")) (} "}"))) (if_statement "if ((param_3 != (int *)0x0) && (bVar8)) {\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }" (if "if") (parenthesized_expression "((param_3 != (int *)0x0) && (bVar8))" (( "(") (binary_expression "(param_3 != (int *)0x0) && (bVar8)" (parenthesized_expression "(param_3 != (int *)0x0)" (( "(") (binary_expression "param_3 != (int *)0x0" (identifier "param_3") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(bVar8)" (( "(") (identifier "bVar8") () ")"))) () ")")) (compound_statement "{\n          iVar4 = param_3[2];\n          iVar6 = *param_3;\n          if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }\n          iVar7 = param_3[1];\n          if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }\n          param_3[2] = iVar4 + 1;\n          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;\n          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;\n        }" ({ "{") (expression_statement "iVar4 = param_3[2];" (assignment_expression "iVar4 = param_3[2]" (identifier "iVar4") (= "=") (subscript_expression "param_3[2]" (identifier "param_3") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "iVar6 = *param_3;" (assignment_expression "iVar6 = *param_3" (identifier "iVar6") (= "=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (; ";")) (if_statement "if (iVar4 < 1) {\n            iVar5 = 0;\n          }\n          else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }" (if "if") (parenthesized_expression "(iVar4 < 1)" (( "(") (binary_expression "iVar4 < 1" (identifier "iVar4") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n            iVar5 = 0;\n          }" ({ "{") (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }" (else "else") (compound_statement "{\n            iVar7 = 0;\n            __s1 = (char *)*puVar3;\n            cVar1 = *__s1;\n            do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);\n          }" ({ "{") (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (expression_statement "__s1 = (char *)*puVar3;" (assignment_expression "__s1 = (char *)*puVar3" (identifier "__s1") (= "=") (cast_expression "(char *)*puVar3" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*puVar3" (* "*") (identifier "puVar3")))) (; ";")) (expression_statement "cVar1 = *__s1;" (assignment_expression "cVar1 = *__s1" (identifier "cVar1") (= "=") (pointer_expression "*__s1" (* "*") (identifier "__s1"))) (; ";")) (do_statement "do {\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            } while (iVar7 != iVar4);" (do "do") (compound_statement "{\n              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);\n              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;\n              iVar7 = iVar7 + 1;\n              iVar5 = iVar4;\n            }" ({ "{") (expression_statement "__s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);" (assignment_expression "__s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4)" (identifier "__s2") (= "=") (cast_expression "(char *)**(undefined4 **)(iVar6 + iVar7 * 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "**(undefined4 **)(iVar6 + iVar7 * 4)" (* "*") (pointer_expression "*(undefined4 **)(iVar6 + iVar7 * 4)" (* "*") (cast_expression "(undefined4 **)(iVar6 + iVar7 * 4)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar6 + iVar7 * 4)" (( "(") (binary_expression "iVar6 + iVar7 * 4" (identifier "iVar6") (+ "+") (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4"))) () ")"))))))) (; ";")) (if_statement "if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;" (if "if") (parenthesized_expression "((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0))" (( "(") (binary_expression "(cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)" (parenthesized_expression "(cVar1 == *__s2)" (( "(") (binary_expression "cVar1 == *__s2" (identifier "cVar1") (== "==") (pointer_expression "*__s2" (* "*") (identifier "__s2"))) () ")")) (&& "&&") (parenthesized_expression "(iVar5 = strcmp(__s1,__s2), iVar5 == 0)" (( "(") (comma_expression "iVar5 = strcmp(__s1,__s2), iVar5 == 0" (assignment_expression "iVar5 = strcmp(__s1,__s2)" (identifier "iVar5") (= "=") (call_expression "strcmp(__s1,__s2)" (identifier "strcmp") (argument_list "(__s1,__s2)" (( "(") (identifier "__s1") (, ",") (identifier "__s2") () ")")))) (, ",") (binary_expression "iVar5 == 0" (identifier "iVar5") (== "==") (number_literal "0"))) () ")"))) () ")")) (goto_statement "goto LAB_00050e50;" (goto "goto") (statement_identifier "LAB_00050e50") (; ";"))) (expression_statement "iVar7 = iVar7 + 1;" (assignment_expression "iVar7 = iVar7 + 1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + 1" (identifier "iVar7") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar5 = iVar4;" (assignment_expression "iVar5 = iVar4" (identifier "iVar5") (= "=") (identifier "iVar4")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != iVar4)" (( "(") (binary_expression "iVar7 != iVar4" (identifier "iVar7") (!= "!=") (identifier "iVar4")) () ")")) (; ";")) (} "}")))) (expression_statement "iVar7 = param_3[1];" (assignment_expression "iVar7 = param_3[1]" (identifier "iVar7") (= "=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (iVar7 <= iVar5) {\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }" (if "if") (parenthesized_expression "(iVar7 <= iVar5)" (( "(") (binary_expression "iVar7 <= iVar5" (identifier "iVar7") (<= "<=") (identifier "iVar5")) () ")")) (compound_statement "{\n            param_3[1] = iVar7 + 0x10;\n            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);\n            iVar4 = param_3[2];\n            *param_3 = iVar6;\n          }" ({ "{") (expression_statement "param_3[1] = iVar7 + 0x10;" (assignment_expression "param_3[1] = iVar7 + 0x10" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "iVar7 + 0x10" (identifier "iVar7") (+ "+") (number_literal "0x10"))) (; ";")) (expression_statement "iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);" (assignment_expression "iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44)" (identifier "iVar6") (= "=") (call_expression "xrealloc(iVar6,iVar7 * 4 + 0x44)" (identifier "xrealloc") (argument_list "(iVar6,iVar7 * 4 + 0x44)" (( "(") (identifier "iVar6") (, ",") (binary_expression "iVar7 * 4 + 0x44" (binary_expression "iVar7 * 4" (identifier "iVar7") (* "*") (number_literal "4")) (+ "+") (number_literal "0x44")) () ")")))) (; ";")) (expression_statement "iVar4 = param_3[2];" (assignment_expression "iVar4 = param_3[2]" (identifier "iVar4") (= "=") (subscript_expression "param_3[2]" (identifier "param_3") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "*param_3 = iVar6;" (assignment_expression "*param_3 = iVar6" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (= "=") (identifier "iVar6")) (; ";")) (} "}"))) (expression_statement "param_3[2] = iVar4 + 1;" (assignment_expression "param_3[2] = iVar4 + 1" (subscript_expression "param_3[2]" (identifier "param_3") ([ "[") (number_literal "2") (] "]")) (= "=") (binary_expression "iVar4 + 1" (identifier "iVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;" (assignment_expression "*(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0" (pointer_expression "*(undefined4 *)(iVar6 + 4 + iVar4 * 4)" (* "*") (cast_expression "(undefined4 *)(iVar6 + 4 + iVar4 * 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + 4 + iVar4 * 4)" (( "(") (binary_expression "iVar6 + 4 + iVar4 * 4" (binary_expression "iVar6 + 4" (identifier "iVar6") (+ "+") (number_literal "4")) (+ "+") (binary_expression "iVar4 * 4" (identifier "iVar4") (* "*") (number_literal "4"))) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;" (assignment_expression "*(undefined4 **)(iVar6 + iVar4 * 4) = puVar3" (pointer_expression "*(undefined4 **)(iVar6 + iVar4 * 4)" (* "*") (cast_expression "(undefined4 **)(iVar6 + iVar4 * 4)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(iVar6 + iVar4 * 4)" (( "(") (binary_expression "iVar6 + iVar4 * 4" (identifier "iVar6") (+ "+") (binary_expression "iVar4 * 4" (identifier "iVar4") (* "*") (number_literal "4"))) () ")")))) (= "=") (identifier "puVar3")) (; ";")) (} "}"))) (labeled_statement "LAB_00050e50:" (statement_identifier "LAB_00050e50") (: ":") (expression_statement "" (; ""))) (} "}"))) (expression_statement "local_24 = local_24 + 1;" (assignment_expression "local_24 = local_24 + 1" (identifier "local_24") (= "=") (binary_expression "local_24 + 1" (identifier "local_24") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(local_24 < param_1[1])" (( "(") (binary_expression "local_24 < param_1[1]" (identifier "local_24") (< "<") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

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

void __regparm3 function_1(type_1 *var_hash_table,type_2 *var_2,type_3 *var_4,int flags)

{
  char var_5;
  type_4 *var_1;
  type_5 *pSVar3;
  char *__s1;
  int var_3;
  int var_7;
  type_5 **pointer;
  int var_8;
  bool bVar7;
  int var_10;
  
  var_10 = 0;
  if (0 < var_hash_table->nbuckets) {
    do {
      for (var_1 = var_hash_table->bucket_array[var_10]; var_1 != (type_4 *)0x0;
          var_1 = var_1->next) {
        pSVar3 = (type_5 *)var_1->data;
        bVar7 = true;
        if (var_2 != (type_2 *)0x0) {
          var_3 = (*var_2)(pSVar3);
          bVar7 = var_3 != 0;
        }
        if ((var_4 != (type_3 *)0x0) && (bVar7)) {
          var_3 = var_4->list_len;
          pointer = var_4->list;
          if (var_3 < 1) {
            var_7 = 0;
          }
          else {
            var_8 = 0;
            __s1 = pSVar3->name;
            var_5 = *__s1;
            do {
              if ((var_5 == *pointer[var_8]->name) &&
                 (var_7 = var_6(__s1,pointer[var_8]->name), var_7 == 0)) goto LAB_00050e50;
              var_8 = var_8 + 1;
              var_7 = var_3;
            } while (var_8 != var_3);
          }
          var_8 = var_4->list_size;
          if (var_8 <= var_7) {
            var_4->list_size = var_8 + 0x10;
            pointer = (type_5 **)var_9(pointer,var_8 * 4 + 0x44);
            var_3 = var_4->list_len;
            var_4->list = pointer;
          }
          var_4->list_len = var_3 + 1;
          pointer[var_3 + 1] = (type_5 *)0x0;
          pointer[var_3] = pSVar3;
        }
LAB_00050e50:
      }
      var_10 = var_10 + 1;
    } while (var_10 < var_hash_table->nbuckets);
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (subscript_expression argument: (identifier) index: (number_literal)))) consequence: (compound_statement (do_statement body: (compound_statement (for_statement initializer: (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: (pointer_expression argument: (identifier)) right: (binary_expression left: (identifier) right: (number_literal))))))) condition: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))) update: (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (true))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (identifier))) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (identifier)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (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: (binary_expression left: (identifier) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (identifier)))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))) (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: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (number_literal))) (expression_statement (assignment_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: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (MISSING ";"))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal))))))) (return_statement))))

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

void __regparm3 MASKED(int *param_1,code *param_2,int *param_3)

{
  char cVar1;
  undefined4 *puVar2;
  undefined4 *puVar3;
  char *__s1;
  char *__s2;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  bool bVar8;
  int local_24;
  
  local_24 = 0;
  if (0 < param_1[1]) {
    do {
      for (puVar2 = *(undefined4 **)(*param_1 + local_24 * 4); puVar2 != (undefined4 *)0x0;
          puVar2 = (undefined4 *)*puVar2) {
        puVar3 = (undefined4 *)puVar2[2];
        bVar8 = true;
        if (param_2 != (code *)0x0) {
          iVar4 = (*param_2)(puVar3);
          bVar8 = iVar4 != 0;
        }
        if ((param_3 != (int *)0x0) && (bVar8)) {
          iVar4 = param_3[2];
          iVar6 = *param_3;
          if (iVar4 < 1) {
            iVar5 = 0;
          }
          else {
            iVar7 = 0;
            __s1 = (char *)*puVar3;
            cVar1 = *__s1;
            do {
              __s2 = (char *)**(undefined4 **)(iVar6 + iVar7 * 4);
              if ((cVar1 == *__s2) && (iVar5 = strcmp(__s1,__s2), iVar5 == 0)) goto LAB_00050e50;
              iVar7 = iVar7 + 1;
              iVar5 = iVar4;
            } while (iVar7 != iVar4);
          }
          iVar7 = param_3[1];
          if (iVar7 <= iVar5) {
            param_3[1] = iVar7 + 0x10;
            iVar6 = xrealloc(iVar6,iVar7 * 4 + 0x44);
            iVar4 = param_3[2];
            *param_3 = iVar6;
          }
          param_3[2] = iVar4 + 1;
          *(undefined4 *)(iVar6 + 4 + iVar4 * 4) = 0;
          *(undefined4 **)(iVar6 + iVar4 * 4) = puVar3;
        }
LAB_00050e50:
      }
      local_24 = local_24 + 1;
    } while (local_24 < param_1[1]);
  }
  return;
}

