
int __regparm3 d_parmlist(int param_1)

{
  int iVar1;
  char cVar2;
  char *pcVar3;
  int *piVar4;
  int local_20 [4];
  
  pcVar3 = *(char **)(param_1 + 0xc);
  local_20[0] = 0;
  cVar2 = *pcVar3;
  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {
    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {
      iVar1 = d_type();
      if (iVar1 == 0) {
        return 0;
      }
      iVar1 = d_make_comp(0);
      *piVar4 = iVar1;
      if (iVar1 == 0) {
        return 0;
      }
      pcVar3 = *(char **)(param_1 + 0xc);
      piVar4 = (int *)(iVar1 + 0xc);
      cVar2 = *pcVar3;
      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;
    }
    if (local_20[0] != 0) {
      if (*(int *)(local_20[0] + 0xc) != 0) {
        return local_20[0];
      }
      if (**(int **)(local_20[0] + 8) == 0x27) {
        iVar1 = (*(int **)(local_20[0] + 8))[2];
        if (*(int *)(iVar1 + 0x10) == 9) {
          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);
          *(undefined4 *)(local_20[0] + 8) = 0;
          return local_20[0];
        }
        return local_20[0];
      }
      return local_20[0];
    }
  }
  return 0;
}



int __regparm3 FUN_00288340(int param_1)

{
  int iVar1;
  char cVar2;
  char *pcVar3;
  int *piVar4;
  int local_20 [4];
  
  pcVar3 = *(char **)(param_1 + 0xc);
  local_20[0] = 0;
  cVar2 = *pcVar3;
  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {
    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {
      iVar1 = FUN_00287830();
      if (iVar1 == 0) {
        return 0;
      }
      iVar1 = FUN_00285e80(0);
      *piVar4 = iVar1;
      if (iVar1 == 0) {
        return 0;
      }
      pcVar3 = *(char **)(param_1 + 0xc);
      piVar4 = (int *)(iVar1 + 0xc);
      cVar2 = *pcVar3;
      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;
    }
    if (local_20[0] != 0) {
      if (*(int *)(local_20[0] + 0xc) != 0) {
        return local_20[0];
      }
      if (**(int **)(local_20[0] + 8) == 0x27) {
        iVar1 = (*(int **)(local_20[0] + 8))[2];
        if (*(int *)(iVar1 + 0x10) == 9) {
          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);
          *(undefined4 *)(local_20[0] + 8) = 0;
          return local_20[0];
        }
        return local_20[0];
      }
      return local_20[0];
    }
  }
  return 0;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
SUB ESP,0x1c
MOV EBP,dword ptr [EAX + 0xc]
MOV dword ptr [ESP + 0xc],0x0
MOVZX EDX,byte ptr [EBP]
CMP DL,0x45
SETZ CL
TEST DL,DL
SETZ BL
OR CL,BL
JNZ 0x002883d9
CMP DL,0x2e
MOV EBX,EAX
LEA ESI,[ESP + 0xc]
SETZ AL
TEST AL,AL
JZ 0x002883be
JMP 0x002883d9
SUB ESP,0xc
MOV ECX,EAX
MOV EDX,0x2e
MOV EAX,EBX
PUSH 0x0
CALL 0x00285e80
ADD ESP,0x10
MOV dword ptr [ESI],EAX
TEST EAX,EAX
JZ 0x002883d9
MOV EBP,dword ptr [EBX + 0xc]
LEA ESI,[EAX + 0xc]
MOVZX EDX,byte ptr [EBP]
TEST DL,DL
SETZ AL
CMP DL,0x45
MOV EDI,EAX
SETZ AL
MOV ECX,EDI
OR CL,AL
JNZ 0x002883e8
CMP DL,0x2e
JZ 0x002883e8
CMP DL,0x52
JZ 0x002883c8
CMP DL,0x4f
JNZ 0x002883ce
CMP byte ptr [EBP + 0x1],0x45
JZ 0x002883e8
MOV EAX,EBX
CALL 0x00287830
TEST EAX,EAX
JNZ 0x00288380
XOR EAX,EAX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [ESP + 0xc]
TEST EAX,EAX
JZ 0x002883d9
MOV EDX,dword ptr [EAX + 0xc]
TEST EDX,EDX
JNZ 0x002883db
MOV EDX,dword ptr [EAX + 0x8]
CMP dword ptr [EDX],0x27
JNZ 0x002883db
MOV EDX,dword ptr [EDX + 0x8]
CMP dword ptr [EDX + 0x10],0x9
JNZ 0x002883db
MOV EDX,dword ptr [EDX + 0x4]
SUB dword ptr [EBX + 0x2c],EDX
MOV dword ptr [EAX + 0x8],0x0
JMP 0x002883db
(translation_unit "int __regparm3 FUN_00288340(int param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int __regparm3 FUN_00288340(int param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00288340(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int local_20 [4];" primitive_type (array_declarator "local_20 [4]" identifier [ number_literal ]) ;) (expression_statement "pcVar3 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar3 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "local_20[0] = 0;" (assignment_expression "local_20[0] = 0" (subscript_expression "local_20[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" identifier = (pointer_expression "*pcVar3" * identifier)) ;) (if_statement "if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }" if (parenthesized_expression "((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.'))" ( (binary_expression "(cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')" (parenthesized_expression "(cVar2 != 'E' && cVar2 != '\0')" ( (binary_expression "cVar2 != 'E' && cVar2 != '\0'" (binary_expression "cVar2 != 'E'" identifier != (char_literal "'E'" ' character ')) && (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence '))) )) && (parenthesized_expression "(piVar4 = local_20, cVar2 != '.')" ( (comma_expression "piVar4 = local_20, cVar2 != '.'" (assignment_expression "piVar4 = local_20" identifier = identifier) , (binary_expression "cVar2 != '.'" identifier != (char_literal "'.'" ' character '))) ))) )) (compound_statement "{\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }" { (while_statement "while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }" while (parenthesized_expression "(((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E')))" ( (parenthesized_expression "((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))" ( (binary_expression "(cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E')" (parenthesized_expression "(cVar2 != 'R' && (cVar2 != 'O'))" ( (binary_expression "cVar2 != 'R' && (cVar2 != 'O')" (binary_expression "cVar2 != 'R'" identifier != (char_literal "'R'" ' character ')) && (parenthesized_expression "(cVar2 != 'O')" ( (binary_expression "cVar2 != 'O'" identifier != (char_literal "'O'" ' character ')) ))) )) || (parenthesized_expression "(pcVar3[1] != 'E')" ( (binary_expression "pcVar3[1] != 'E'" (subscript_expression "pcVar3[1]" identifier [ number_literal ]) != (char_literal "'E'" ' character ')) ))) )) )) (compound_statement "{\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }" { (expression_statement "iVar1 = FUN_00287830();" (assignment_expression "iVar1 = FUN_00287830()" identifier = (call_expression "FUN_00287830()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = FUN_00285e80(0);" (assignment_expression "iVar1 = FUN_00285e80(0)" identifier = (call_expression "FUN_00285e80(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (expression_statement "*piVar4 = iVar1;" (assignment_expression "*piVar4 = iVar1" (pointer_expression "*piVar4" * identifier) = identifier) ;) (if_statement "if (iVar1 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar3 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar3 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "piVar4 = (int *)(iVar1 + 0xc);" (assignment_expression "piVar4 = (int *)(iVar1 + 0xc)" identifier = (cast_expression "(int *)(iVar1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) )))) ;) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" identifier = (pointer_expression "*pcVar3" * identifier)) ;) (if_statement "if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;" if (parenthesized_expression "((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.'))" ( (binary_expression "(cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')" (parenthesized_expression "(cVar2 == '\0' || cVar2 == 'E')" ( (binary_expression "cVar2 == '\0' || cVar2 == 'E'" (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) || (binary_expression "cVar2 == 'E'" identifier == (char_literal "'E'" ' character '))) )) || (parenthesized_expression "(cVar2 == '.')" ( (binary_expression "cVar2 == '.'" identifier == (char_literal "'.'" ' character ')) ))) )) (break_statement "break;" break ;)) })) (if_statement "if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }" if (parenthesized_expression "(local_20[0] != 0)" ( (binary_expression "local_20[0] != 0" (subscript_expression "local_20[0]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }" { (if_statement "if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }" if (parenthesized_expression "(*(int *)(local_20[0] + 0xc) != 0)" ( (binary_expression "*(int *)(local_20[0] + 0xc) != 0" (pointer_expression "*(int *)(local_20[0] + 0xc)" * (cast_expression "(int *)(local_20[0] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + 0xc)" ( (binary_expression "local_20[0] + 0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) != number_literal) )) (compound_statement "{\n        return local_20[0];\n      }" { (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) (if_statement "if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }" if (parenthesized_expression "(**(int **)(local_20[0] + 8) == 0x27)" ( (binary_expression "**(int **)(local_20[0] + 8) == 0x27" (pointer_expression "**(int **)(local_20[0] + 8)" * (pointer_expression "*(int **)(local_20[0] + 8)" * (cast_expression "(int **)(local_20[0] + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_20[0] + 8)" ( (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) == number_literal) )) (compound_statement "{\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }" { (expression_statement "iVar1 = (*(int **)(local_20[0] + 8))[2];" (assignment_expression "iVar1 = (*(int **)(local_20[0] + 8))[2]" identifier = (subscript_expression "(*(int **)(local_20[0] + 8))[2]" (parenthesized_expression "(*(int **)(local_20[0] + 8))" ( (pointer_expression "*(int **)(local_20[0] + 8)" * (cast_expression "(int **)(local_20[0] + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_20[0] + 8)" ( (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) )) [ number_literal ])) ;) (if_statement "if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }" if (parenthesized_expression "(*(int *)(iVar1 + 0x10) == 9)" ( (binary_expression "*(int *)(iVar1 + 0x10) == 9" (pointer_expression "*(int *)(iVar1 + 0x10)" * (cast_expression "(int *)(iVar1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x10)" ( (binary_expression "iVar1 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }" { (expression_statement "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);" (assignment_expression "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) - (pointer_expression "*(int *)(iVar1 + 4)" * (cast_expression "(int *)(iVar1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) )))))) ;) (expression_statement "*(undefined4 *)(local_20[0] + 8) = 0;" (assignment_expression "*(undefined4 *)(local_20[0] + 8) = 0" (pointer_expression "*(undefined4 *)(local_20[0] + 8)" * (cast_expression "(undefined4 *)(local_20[0] + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + 8)" ( (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) = number_literal) ;) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int __regparm3 d_parmlist(int param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = d_type();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = d_make_comp(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int __regparm3 d_parmlist(int param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = d_type();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = d_make_comp(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "d_parmlist(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = d_type();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = d_make_comp(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int local_20 [4];" primitive_type (array_declarator "local_20 [4]" identifier [ number_literal ]) ;) (expression_statement "pcVar3 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar3 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "local_20[0] = 0;" (assignment_expression "local_20[0] = 0" (subscript_expression "local_20[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" identifier = (pointer_expression "*pcVar3" * identifier)) ;) (if_statement "if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = d_type();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = d_make_comp(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }" if (parenthesized_expression "((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.'))" ( (binary_expression "(cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')" (parenthesized_expression "(cVar2 != 'E' && cVar2 != '\0')" ( (binary_expression "cVar2 != 'E' && cVar2 != '\0'" (binary_expression "cVar2 != 'E'" identifier != (char_literal "'E'" ' character ')) && (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence '))) )) && (parenthesized_expression "(piVar4 = local_20, cVar2 != '.')" ( (comma_expression "piVar4 = local_20, cVar2 != '.'" (assignment_expression "piVar4 = local_20" identifier = identifier) , (binary_expression "cVar2 != '.'" identifier != (char_literal "'.'" ' character '))) ))) )) (compound_statement "{\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = d_type();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = d_make_comp(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }" { (while_statement "while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = d_type();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = d_make_comp(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }" while (parenthesized_expression "(((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E')))" ( (parenthesized_expression "((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))" ( (binary_expression "(cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E')" (parenthesized_expression "(cVar2 != 'R' && (cVar2 != 'O'))" ( (binary_expression "cVar2 != 'R' && (cVar2 != 'O')" (binary_expression "cVar2 != 'R'" identifier != (char_literal "'R'" ' character ')) && (parenthesized_expression "(cVar2 != 'O')" ( (binary_expression "cVar2 != 'O'" identifier != (char_literal "'O'" ' character ')) ))) )) || (parenthesized_expression "(pcVar3[1] != 'E')" ( (binary_expression "pcVar3[1] != 'E'" (subscript_expression "pcVar3[1]" identifier [ number_literal ]) != (char_literal "'E'" ' character ')) ))) )) )) (compound_statement "{\n      iVar1 = d_type();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = d_make_comp(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }" { (expression_statement "iVar1 = d_type();" (assignment_expression "iVar1 = d_type()" identifier = (call_expression "d_type()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = d_make_comp(0);" (assignment_expression "iVar1 = d_make_comp(0)" identifier = (call_expression "d_make_comp(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (expression_statement "*piVar4 = iVar1;" (assignment_expression "*piVar4 = iVar1" (pointer_expression "*piVar4" * identifier) = identifier) ;) (if_statement "if (iVar1 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar3 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar3 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "piVar4 = (int *)(iVar1 + 0xc);" (assignment_expression "piVar4 = (int *)(iVar1 + 0xc)" identifier = (cast_expression "(int *)(iVar1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) )))) ;) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" identifier = (pointer_expression "*pcVar3" * identifier)) ;) (if_statement "if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;" if (parenthesized_expression "((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.'))" ( (binary_expression "(cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')" (parenthesized_expression "(cVar2 == '\0' || cVar2 == 'E')" ( (binary_expression "cVar2 == '\0' || cVar2 == 'E'" (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) || (binary_expression "cVar2 == 'E'" identifier == (char_literal "'E'" ' character '))) )) || (parenthesized_expression "(cVar2 == '.')" ( (binary_expression "cVar2 == '.'" identifier == (char_literal "'.'" ' character ')) ))) )) (break_statement "break;" break ;)) })) (if_statement "if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }" if (parenthesized_expression "(local_20[0] != 0)" ( (binary_expression "local_20[0] != 0" (subscript_expression "local_20[0]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }" { (if_statement "if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }" if (parenthesized_expression "(*(int *)(local_20[0] + 0xc) != 0)" ( (binary_expression "*(int *)(local_20[0] + 0xc) != 0" (pointer_expression "*(int *)(local_20[0] + 0xc)" * (cast_expression "(int *)(local_20[0] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + 0xc)" ( (binary_expression "local_20[0] + 0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) != number_literal) )) (compound_statement "{\n        return local_20[0];\n      }" { (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) (if_statement "if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }" if (parenthesized_expression "(**(int **)(local_20[0] + 8) == 0x27)" ( (binary_expression "**(int **)(local_20[0] + 8) == 0x27" (pointer_expression "**(int **)(local_20[0] + 8)" * (pointer_expression "*(int **)(local_20[0] + 8)" * (cast_expression "(int **)(local_20[0] + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_20[0] + 8)" ( (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) == number_literal) )) (compound_statement "{\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }" { (expression_statement "iVar1 = (*(int **)(local_20[0] + 8))[2];" (assignment_expression "iVar1 = (*(int **)(local_20[0] + 8))[2]" identifier = (subscript_expression "(*(int **)(local_20[0] + 8))[2]" (parenthesized_expression "(*(int **)(local_20[0] + 8))" ( (pointer_expression "*(int **)(local_20[0] + 8)" * (cast_expression "(int **)(local_20[0] + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_20[0] + 8)" ( (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) )) [ number_literal ])) ;) (if_statement "if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }" if (parenthesized_expression "(*(int *)(iVar1 + 0x10) == 9)" ( (binary_expression "*(int *)(iVar1 + 0x10) == 9" (pointer_expression "*(int *)(iVar1 + 0x10)" * (cast_expression "(int *)(iVar1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x10)" ( (binary_expression "iVar1 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }" { (expression_statement "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);" (assignment_expression "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) - (pointer_expression "*(int *)(iVar1 + 4)" * (cast_expression "(int *)(iVar1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) )))))) ;) (expression_statement "*(undefined4 *)(local_20[0] + 8) = 0;" (assignment_expression "*(undefined4 *)(local_20[0] + 8) = 0" (pointer_expression "*(undefined4 *)(local_20[0] + 8)" * (cast_expression "(undefined4 *)(local_20[0] + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + 8)" ( (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) = number_literal) ;) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int __regparm3 FUN_00288340(int param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}\n\n" (function_definition "int __regparm3 FUN_00288340(int param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00288340(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int local_20 [4];" primitive_type (array_declarator "local_20 [4]" identifier [ number_literal ]) ;) (expression_statement "pcVar3 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar3 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "local_20[0] = 0;" (assignment_expression "local_20[0] = 0" (subscript_expression "local_20[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" identifier = (pointer_expression "*pcVar3" * identifier)) ;) (if_statement "if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }" if (parenthesized_expression "((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.'))" ( (binary_expression "(cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')" (parenthesized_expression "(cVar2 != 'E' && cVar2 != '\0')" ( (binary_expression "cVar2 != 'E' && cVar2 != '\0'" (binary_expression "cVar2 != 'E'" identifier != (char_literal "'E'" ' character ')) && (binary_expression "cVar2 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence '))) )) && (parenthesized_expression "(piVar4 = local_20, cVar2 != '.')" ( (comma_expression "piVar4 = local_20, cVar2 != '.'" (assignment_expression "piVar4 = local_20" identifier = identifier) , (binary_expression "cVar2 != '.'" identifier != (char_literal "'.'" ' character '))) ))) )) (compound_statement "{\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }" { (while_statement "while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }" while (parenthesized_expression "(((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E')))" ( (parenthesized_expression "((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))" ( (binary_expression "(cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E')" (parenthesized_expression "(cVar2 != 'R' && (cVar2 != 'O'))" ( (binary_expression "cVar2 != 'R' && (cVar2 != 'O')" (binary_expression "cVar2 != 'R'" identifier != (char_literal "'R'" ' character ')) && (parenthesized_expression "(cVar2 != 'O')" ( (binary_expression "cVar2 != 'O'" identifier != (char_literal "'O'" ' character ')) ))) )) || (parenthesized_expression "(pcVar3[1] != 'E')" ( (binary_expression "pcVar3[1] != 'E'" (subscript_expression "pcVar3[1]" identifier [ number_literal ]) != (char_literal "'E'" ' character ')) ))) )) )) (compound_statement "{\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }" { (expression_statement "iVar1 = FUN_00287830();" (assignment_expression "iVar1 = FUN_00287830()" identifier = (call_expression "FUN_00287830()" identifier (argument_list "()" ( )))) ;) (if_statement "if (iVar1 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar1 = FUN_00285e80(0);" (assignment_expression "iVar1 = FUN_00285e80(0)" identifier = (call_expression "FUN_00285e80(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (expression_statement "*piVar4 = iVar1;" (assignment_expression "*piVar4 = iVar1" (pointer_expression "*piVar4" * identifier) = identifier) ;) (if_statement "if (iVar1 == 0) {\n        return 0;\n      }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar3 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar3 = *(char **)(param_1 + 0xc)" identifier = (pointer_expression "*(char **)(param_1 + 0xc)" * (cast_expression "(char **)(param_1 + 0xc)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "piVar4 = (int *)(iVar1 + 0xc);" (assignment_expression "piVar4 = (int *)(iVar1 + 0xc)" identifier = (cast_expression "(int *)(iVar1 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0xc)" ( (binary_expression "iVar1 + 0xc" identifier + number_literal) )))) ;) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" identifier = (pointer_expression "*pcVar3" * identifier)) ;) (if_statement "if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;" if (parenthesized_expression "((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.'))" ( (binary_expression "(cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')" (parenthesized_expression "(cVar2 == '\0' || cVar2 == 'E')" ( (binary_expression "cVar2 == '\0' || cVar2 == 'E'" (binary_expression "cVar2 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) || (binary_expression "cVar2 == 'E'" identifier == (char_literal "'E'" ' character '))) )) || (parenthesized_expression "(cVar2 == '.')" ( (binary_expression "cVar2 == '.'" identifier == (char_literal "'.'" ' character ')) ))) )) (break_statement "break;" break ;)) })) (if_statement "if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }" if (parenthesized_expression "(local_20[0] != 0)" ( (binary_expression "local_20[0] != 0" (subscript_expression "local_20[0]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }" { (if_statement "if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }" if (parenthesized_expression "(*(int *)(local_20[0] + 0xc) != 0)" ( (binary_expression "*(int *)(local_20[0] + 0xc) != 0" (pointer_expression "*(int *)(local_20[0] + 0xc)" * (cast_expression "(int *)(local_20[0] + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + 0xc)" ( (binary_expression "local_20[0] + 0xc" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) != number_literal) )) (compound_statement "{\n        return local_20[0];\n      }" { (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) (if_statement "if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }" if (parenthesized_expression "(**(int **)(local_20[0] + 8) == 0x27)" ( (binary_expression "**(int **)(local_20[0] + 8) == 0x27" (pointer_expression "**(int **)(local_20[0] + 8)" * (pointer_expression "*(int **)(local_20[0] + 8)" * (cast_expression "(int **)(local_20[0] + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_20[0] + 8)" ( (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) ))))) == number_literal) )) (compound_statement "{\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }" { (expression_statement "iVar1 = (*(int **)(local_20[0] + 8))[2];" (assignment_expression "iVar1 = (*(int **)(local_20[0] + 8))[2]" identifier = (subscript_expression "(*(int **)(local_20[0] + 8))[2]" (parenthesized_expression "(*(int **)(local_20[0] + 8))" ( (pointer_expression "*(int **)(local_20[0] + 8)" * (cast_expression "(int **)(local_20[0] + 8)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(local_20[0] + 8)" ( (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) )) [ number_literal ])) ;) (if_statement "if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }" if (parenthesized_expression "(*(int *)(iVar1 + 0x10) == 9)" ( (binary_expression "*(int *)(iVar1 + 0x10) == 9" (pointer_expression "*(int *)(iVar1 + 0x10)" * (cast_expression "(int *)(iVar1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 0x10)" ( (binary_expression "iVar1 + 0x10" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }" { (expression_statement "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);" (assignment_expression "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) = (binary_expression "*(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" * (cast_expression "(int *)(param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x2c)" ( (binary_expression "param_1 + 0x2c" identifier + number_literal) )))) - (pointer_expression "*(int *)(iVar1 + 4)" * (cast_expression "(int *)(iVar1 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar1 + 4)" ( (binary_expression "iVar1 + 4" identifier + number_literal) )))))) ;) (expression_statement "*(undefined4 *)(local_20[0] + 8) = 0;" (assignment_expression "*(undefined4 *)(local_20[0] + 8) = 0" (pointer_expression "*(undefined4 *)(local_20[0] + 8)" * (cast_expression "(undefined4 *)(local_20[0] + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_20[0] + 8)" ( (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" identifier [ number_literal ]) + number_literal) )))) = number_literal) ;) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT != (char_literal ' character ')) && (binary_expression IDENT != (char_literal ' escape_sequence '))) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT != (char_literal ' character '))) ))) )) (compound_statement { (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT != (char_literal ' character ')) && (parenthesized_expression ( (binary_expression IDENT != (char_literal ' character ')) ))) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != (char_literal ' character ')) ))) )) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT == (char_literal ' escape_sequence ')) || (binary_expression IDENT == (char_literal ' character '))) )) || (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) ))) )) (break_statement break ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) != LIT) )) (compound_statement { (return_statement return (subscript_expression IDENT [ LIT ]) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) )) [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) = LIT) ;) (return_statement return (subscript_expression IDENT [ LIT ]) ;) })) (return_statement return (subscript_expression IDENT [ LIT ]) ;) })) (return_statement return (subscript_expression IDENT [ LIT ]) ;) })) })) (return_statement return LIT ;) })))
(function_definition "int __regparm3 FUN_00288340(int param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}" (primitive_type "int") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00288340(int param_1)" (identifier "FUN_00288340") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  int *piVar4;\n  int local_20 [4];\n  \n  pcVar3 = *(char **)(param_1 + 0xc);\n  local_20[0] = 0;\n  cVar2 = *pcVar3;\n  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }\n  return 0;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "int local_20 [4];" (primitive_type "int") (array_declarator "local_20 [4]" (identifier "local_20") ([ "[") (number_literal "4") (] "]")) (; ";")) (expression_statement "pcVar3 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar3 = *(char **)(param_1 + 0xc)" (identifier "pcVar3") (= "=") (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "local_20[0] = 0;" (assignment_expression "local_20[0] = 0" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" (identifier "cVar2") (= "=") (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3"))) (; ";")) (if_statement "if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }" (if "if") (parenthesized_expression "((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.'))" (( "(") (binary_expression "(cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')" (parenthesized_expression "(cVar2 != 'E' && cVar2 != '\0')" (( "(") (binary_expression "cVar2 != 'E' && cVar2 != '\0'" (binary_expression "cVar2 != 'E'" (identifier "cVar2") (!= "!=") (char_literal "'E'" (' "'") (character "E") (' "'"))) (&& "&&") (binary_expression "cVar2 != '\0'" (identifier "cVar2") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'")))) () ")")) (&& "&&") (parenthesized_expression "(piVar4 = local_20, cVar2 != '.')" (( "(") (comma_expression "piVar4 = local_20, cVar2 != '.'" (assignment_expression "piVar4 = local_20" (identifier "piVar4") (= "=") (identifier "local_20")) (, ",") (binary_expression "cVar2 != '.'" (identifier "cVar2") (!= "!=") (char_literal "'.'" (' "'") (character ".") (' "'")))) () ")"))) () ")")) (compound_statement "{\n    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }\n    if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }\n  }" ({ "{") (while_statement "while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }" (while "while") (parenthesized_expression "(((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E')))" (( "(") (parenthesized_expression "((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))" (( "(") (binary_expression "(cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E')" (parenthesized_expression "(cVar2 != 'R' && (cVar2 != 'O'))" (( "(") (binary_expression "cVar2 != 'R' && (cVar2 != 'O')" (binary_expression "cVar2 != 'R'" (identifier "cVar2") (!= "!=") (char_literal "'R'" (' "'") (character "R") (' "'"))) (&& "&&") (parenthesized_expression "(cVar2 != 'O')" (( "(") (binary_expression "cVar2 != 'O'" (identifier "cVar2") (!= "!=") (char_literal "'O'" (' "'") (character "O") (' "'"))) () ")"))) () ")")) (|| "||") (parenthesized_expression "(pcVar3[1] != 'E')" (( "(") (binary_expression "pcVar3[1] != 'E'" (subscript_expression "pcVar3[1]" (identifier "pcVar3") ([ "[") (number_literal "1") (] "]")) (!= "!=") (char_literal "'E'" (' "'") (character "E") (' "'"))) () ")"))) () ")")) () ")")) (compound_statement "{\n      iVar1 = FUN_00287830();\n      if (iVar1 == 0) {\n        return 0;\n      }\n      iVar1 = FUN_00285e80(0);\n      *piVar4 = iVar1;\n      if (iVar1 == 0) {\n        return 0;\n      }\n      pcVar3 = *(char **)(param_1 + 0xc);\n      piVar4 = (int *)(iVar1 + 0xc);\n      cVar2 = *pcVar3;\n      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;\n    }" ({ "{") (expression_statement "iVar1 = FUN_00287830();" (assignment_expression "iVar1 = FUN_00287830()" (identifier "iVar1") (= "=") (call_expression "FUN_00287830()" (identifier "FUN_00287830") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar1 = FUN_00285e80(0);" (assignment_expression "iVar1 = FUN_00285e80(0)" (identifier "iVar1") (= "=") (call_expression "FUN_00285e80(0)" (identifier "FUN_00285e80") (argument_list "(0)" (( "(") (number_literal "0") () ")")))) (; ";")) (expression_statement "*piVar4 = iVar1;" (assignment_expression "*piVar4 = iVar1" (pointer_expression "*piVar4" (* "*") (identifier "piVar4")) (= "=") (identifier "iVar1")) (; ";")) (if_statement "if (iVar1 == 0) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "pcVar3 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar3 = *(char **)(param_1 + 0xc)" (identifier "pcVar3") (= "=") (pointer_expression "*(char **)(param_1 + 0xc)" (* "*") (cast_expression "(char **)(param_1 + 0xc)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "piVar4 = (int *)(iVar1 + 0xc);" (assignment_expression "piVar4 = (int *)(iVar1 + 0xc)" (identifier "piVar4") (= "=") (cast_expression "(int *)(iVar1 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0xc)" (( "(") (binary_expression "iVar1 + 0xc" (identifier "iVar1") (+ "+") (number_literal "0xc")) () ")")))) (; ";")) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" (identifier "cVar2") (= "=") (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3"))) (; ";")) (if_statement "if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;" (if "if") (parenthesized_expression "((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.'))" (( "(") (binary_expression "(cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')" (parenthesized_expression "(cVar2 == '\0' || cVar2 == 'E')" (( "(") (binary_expression "cVar2 == '\0' || cVar2 == 'E'" (binary_expression "cVar2 == '\0'" (identifier "cVar2") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (|| "||") (binary_expression "cVar2 == 'E'" (identifier "cVar2") (== "==") (char_literal "'E'" (' "'") (character "E") (' "'")))) () ")")) (|| "||") (parenthesized_expression "(cVar2 == '.')" (( "(") (binary_expression "cVar2 == '.'" (identifier "cVar2") (== "==") (char_literal "'.'" (' "'") (character ".") (' "'"))) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}"))) (if_statement "if (local_20[0] != 0) {\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }" (if "if") (parenthesized_expression "(local_20[0] != 0)" (( "(") (binary_expression "local_20[0] != 0" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }\n      if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }\n      return local_20[0];\n    }" ({ "{") (if_statement "if (*(int *)(local_20[0] + 0xc) != 0) {\n        return local_20[0];\n      }" (if "if") (parenthesized_expression "(*(int *)(local_20[0] + 0xc) != 0)" (( "(") (binary_expression "*(int *)(local_20[0] + 0xc) != 0" (pointer_expression "*(int *)(local_20[0] + 0xc)" (* "*") (cast_expression "(int *)(local_20[0] + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_20[0] + 0xc)" (( "(") (binary_expression "local_20[0] + 0xc" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "0xc")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        return local_20[0];\n      }" ({ "{") (return_statement "return local_20[0];" (return "return") (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (; ";")) (} "}"))) (if_statement "if (**(int **)(local_20[0] + 8) == 0x27) {\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }" (if "if") (parenthesized_expression "(**(int **)(local_20[0] + 8) == 0x27)" (( "(") (binary_expression "**(int **)(local_20[0] + 8) == 0x27" (pointer_expression "**(int **)(local_20[0] + 8)" (* "*") (pointer_expression "*(int **)(local_20[0] + 8)" (* "*") (cast_expression "(int **)(local_20[0] + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(local_20[0] + 8)" (( "(") (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "8")) () ")"))))) (== "==") (number_literal "0x27")) () ")")) (compound_statement "{\n        iVar1 = (*(int **)(local_20[0] + 8))[2];\n        if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }\n        return local_20[0];\n      }" ({ "{") (expression_statement "iVar1 = (*(int **)(local_20[0] + 8))[2];" (assignment_expression "iVar1 = (*(int **)(local_20[0] + 8))[2]" (identifier "iVar1") (= "=") (subscript_expression "(*(int **)(local_20[0] + 8))[2]" (parenthesized_expression "(*(int **)(local_20[0] + 8))" (( "(") (pointer_expression "*(int **)(local_20[0] + 8)" (* "*") (cast_expression "(int **)(local_20[0] + 8)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(local_20[0] + 8)" (( "(") (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "8")) () ")")))) () ")")) ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if (*(int *)(iVar1 + 0x10) == 9) {\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }" (if "if") (parenthesized_expression "(*(int *)(iVar1 + 0x10) == 9)" (( "(") (binary_expression "*(int *)(iVar1 + 0x10) == 9" (pointer_expression "*(int *)(iVar1 + 0x10)" (* "*") (cast_expression "(int *)(iVar1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 0x10)" (( "(") (binary_expression "iVar1 + 0x10" (identifier "iVar1") (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "9")) () ")")) (compound_statement "{\n          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);\n          *(undefined4 *)(local_20[0] + 8) = 0;\n          return local_20[0];\n        }" ({ "{") (expression_statement "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);" (assignment_expression "*(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" (* "*") (cast_expression "(int *)(param_1 + 0x2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2c)" (( "(") (binary_expression "param_1 + 0x2c" (identifier "param_1") (+ "+") (number_literal "0x2c")) () ")")))) (= "=") (binary_expression "*(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4)" (pointer_expression "*(int *)(param_1 + 0x2c)" (* "*") (cast_expression "(int *)(param_1 + 0x2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x2c)" (( "(") (binary_expression "param_1 + 0x2c" (identifier "param_1") (+ "+") (number_literal "0x2c")) () ")")))) (- "-") (pointer_expression "*(int *)(iVar1 + 4)" (* "*") (cast_expression "(int *)(iVar1 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar1 + 4)" (( "(") (binary_expression "iVar1 + 4" (identifier "iVar1") (+ "+") (number_literal "4")) () ")")))))) (; ";")) (expression_statement "*(undefined4 *)(local_20[0] + 8) = 0;" (assignment_expression "*(undefined4 *)(local_20[0] + 8) = 0" (pointer_expression "*(undefined4 *)(local_20[0] + 8)" (* "*") (cast_expression "(undefined4 *)(local_20[0] + 8)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_20[0] + 8)" (( "(") (binary_expression "local_20[0] + 8" (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "8")) () ")")))) (= "=") (number_literal "0")) (; ";")) (return_statement "return local_20[0];" (return "return") (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (; ";")) (} "}"))) (return_statement "return local_20[0];" (return "return") (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (; ";")) (} "}"))) (return_statement "return local_20[0];" (return "return") (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (; ";")) (} "}"))) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

int __regparm3 function_1(int var_1)

{
  int var_4;
  char var_2;
  char *pcVar3;
  int *piVar4;
  int local_20 [4];
  
  pcVar3 = *(char **)(var_1 + 0xc);
  local_20[0] = 0;
  var_2 = *pcVar3;
  if ((var_2 != 'E' && var_2 != '\0') && (piVar4 = local_20, var_2 != '.')) {
    while (((var_2 != 'R' && (var_2 != 'O')) || (pcVar3[1] != 'E'))) {
      var_4 = var_3();
      if (var_4 == 0) {
        return 0;
      }
      var_4 = var_5(0);
      *piVar4 = var_4;
      if (var_4 == 0) {
        return 0;
      }
      pcVar3 = *(char **)(var_1 + 0xc);
      piVar4 = (int *)(var_4 + 0xc);
      var_2 = *pcVar3;
      if ((var_2 == '\0' || var_2 == 'E') || (var_2 == '.')) break;
    }
    if (local_20[0] != 0) {
      if (*(int *)(local_20[0] + 0xc) != 0) {
        return local_20[0];
      }
      if (**(int **)(local_20[0] + 8) == 0x27) {
        var_4 = (*(int **)(local_20[0] + 8))[2];
        if (*(int *)(var_4 + 0x10) == 9) {
          *(int *)(var_1 + 0x2c) = *(int *)(var_1 + 0x2c) - *(int *)(var_4 + 4);
          *(type_1 *)(local_20[0] + 8) = 0;
          return local_20[0];
        }
        return local_20[0];
      }
      return local_20[0];
    }
  }
  return 0;
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (char_literal (character))) right: (binary_expression left: (identifier) right: (char_literal (escape_sequence))))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (char_literal (character))))))) consequence: (compound_statement (while_statement condition: (parenthesized_expression (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (char_literal (character))) right: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (character))))))) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (char_literal (escape_sequence))) right: (binary_expression left: (identifier) right: (char_literal (character))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))))) consequence: (break_statement)))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (return_statement (subscript_expression argument: (identifier) index: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))))) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) right: (number_literal))) (return_statement (subscript_expression argument: (identifier) index: (number_literal))))) (return_statement (subscript_expression argument: (identifier) index: (number_literal))))) (return_statement (subscript_expression argument: (identifier) index: (number_literal))))))) (return_statement (number_literal)))))

int __regparm3 MASKED(int param_1)

{
  int iVar1;
  char cVar2;
  char *pcVar3;
  int *piVar4;
  int local_20 [4];
  
  pcVar3 = *(char **)(param_1 + 0xc);
  local_20[0] = 0;
  cVar2 = *pcVar3;
  if ((cVar2 != 'E' && cVar2 != '\0') && (piVar4 = local_20, cVar2 != '.')) {
    while (((cVar2 != 'R' && (cVar2 != 'O')) || (pcVar3[1] != 'E'))) {
      iVar1 = FUN_00287830();
      if (iVar1 == 0) {
        return 0;
      }
      iVar1 = FUN_00285e80(0);
      *piVar4 = iVar1;
      if (iVar1 == 0) {
        return 0;
      }
      pcVar3 = *(char **)(param_1 + 0xc);
      piVar4 = (int *)(iVar1 + 0xc);
      cVar2 = *pcVar3;
      if ((cVar2 == '\0' || cVar2 == 'E') || (cVar2 == '.')) break;
    }
    if (local_20[0] != 0) {
      if (*(int *)(local_20[0] + 0xc) != 0) {
        return local_20[0];
      }
      if (**(int **)(local_20[0] + 8) == 0x27) {
        iVar1 = (*(int **)(local_20[0] + 8))[2];
        if (*(int *)(iVar1 + 0x10) == 9) {
          *(int *)(param_1 + 0x2c) = *(int *)(param_1 + 0x2c) - *(int *)(iVar1 + 4);
          *(undefined4 *)(local_20[0] + 8) = 0;
          return local_20[0];
        }
        return local_20[0];
      }
      return local_20[0];
    }
  }
  return 0;
}

