
demangle_component * __regparm3 d_template_args_1(d_info *di)

{
  int iVar1;
  char cVar2;
  demangle_component *pdVar3;
  demangle_component *pdVar4;
  char *pcVar5;
  demangle_component **ppdVar6;
  demangle_component *al;
  
  pcVar5 = di->n;
  pdVar4 = di->last_name;
  cVar2 = *pcVar5;
  if (cVar2 == 'E') {
    di->n = pcVar5 + 1;
    pdVar4 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(demangle_component *)0x0,
                         (demangle_component *)0x0);
    return pdVar4;
  }
  al = (demangle_component *)0x0;
  ppdVar6 = &al;
  do {
    if (cVar2 == 'L') {
      pdVar3 = d_expr_primary(di);
    }
    else if (cVar2 < 'M') {
      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;
      pdVar3 = d_template_args(di);
    }
    else if (cVar2 == 'X') {
      iVar1 = di->is_expression;
      di->is_expression = 1;
      di->n = pcVar5 + 1;
      pdVar3 = d_expression_1(di);
      di->is_expression = iVar1;
      if (*di->n != 'E') {
        return (demangle_component *)0x0;
      }
      di->n = di->n + 1;
    }
    else {
LAB_00177430:
      pdVar3 = cplus_demangle_type(di);
    }
    if (pdVar3 == (demangle_component *)0x0) {
      return (demangle_component *)0x0;
    }
    pdVar3 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,pdVar3,(demangle_component *)0x0);
    *ppdVar6 = pdVar3;
    if (pdVar3 == (demangle_component *)0x0) {
      return (demangle_component *)0x0;
    }
    pcVar5 = di->n;
    ppdVar6 = &(pdVar3->u).s_extended_operator.name;
    cVar2 = *pcVar5;
    if (cVar2 == 'E') {
      di->last_name = pdVar4;
      di->n = pcVar5 + 1;
      return al;
    }
  } while( true );
}



int __regparm3 FUN_00177370(int param_1)

{
  undefined4 uVar1;
  char cVar2;
  int iVar3;
  undefined4 uVar4;
  char *pcVar5;
  int *piVar6;
  int local_20 [4];
  
  pcVar5 = *(char **)(param_1 + 0xc);
  uVar4 = *(undefined4 *)(param_1 + 0x28);
  cVar2 = *pcVar5;
  if (cVar2 == 'E') {
    *(char **)(param_1 + 0xc) = pcVar5 + 1;
    uVar4 = FUN_0016dee0(0);
    return uVar4;
  }
  local_20[0] = 0;
  piVar6 = local_20;
  do {
    if (cVar2 == 'L') {
      iVar3 = FUN_00177210();
    }
    else if (cVar2 < 'M') {
      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;
      iVar3 = FUN_00177490();
    }
    else if (cVar2 == 'X') {
      uVar1 = *(undefined4 *)(param_1 + 0x30);
      *(undefined4 *)(param_1 + 0x30) = 1;
      *(char **)(param_1 + 0xc) = pcVar5 + 1;
      iVar3 = FUN_001774c0();
      *(undefined4 *)(param_1 + 0x30) = uVar1;
      if (**(char **)(param_1 + 0xc) != 'E') {
        return 0;
      }
      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
    }
    else {
LAB_00177430:
      iVar3 = FUN_00175280(param_1);
    }
    if (iVar3 == 0) {
      return 0;
    }
    iVar3 = FUN_0016dee0(0);
    *piVar6 = iVar3;
    if (iVar3 == 0) {
      return 0;
    }
    pcVar5 = *(char **)(param_1 + 0xc);
    piVar6 = (int *)(iVar3 + 0xc);
    cVar2 = *pcVar5;
    if (cVar2 == 'E') {
      *(undefined4 *)(param_1 + 0x28) = uVar4;
      *(char **)(param_1 + 0xc) = pcVar5 + 1;
      return local_20[0];
    }
  } while( true );
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
MOV EBX,EAX
SUB ESP,0x1c
MOV EDX,dword ptr [EAX + 0xc]
MOV EDI,dword ptr [EAX + 0x28]
MOVZX EAX,byte ptr [EDX]
CMP AL,0x45
JZ 0x00177470
MOV dword ptr [ESP + 0xc],0x0
LEA ESI,[ESP + 0xc]
JMP 0x001773e3
SUB EAX,0x49
CMP AL,0x1
JA 0x00177430
MOV EAX,EBX
CALL 0x00177490
TEST EAX,EAX
JZ 0x00177448
SUB ESP,0xc
MOV ECX,EAX
MOV EDX,0x2f
MOV EAX,EBX
PUSH 0x0
CALL 0x0016dee0
ADD ESP,0x10
MOV dword ptr [ESI],EAX
TEST EAX,EAX
JZ 0x00177448
MOV EDX,dword ptr [EBX + 0xc]
LEA ESI,[EAX + 0xc]
MOVZX EAX,byte ptr [EDX]
CMP AL,0x45
JZ 0x00177458
CMP AL,0x4c
JZ 0x00177420
JLE 0x001773a0
CMP AL,0x58
JNZ 0x00177430
ADD EDX,0x1
MOV EBP,dword ptr [EBX + 0x30]
MOV dword ptr [EBX + 0x30],0x1
MOV EAX,EBX
MOV dword ptr [EBX + 0xc],EDX
CALL 0x001774c0
MOV EDX,dword ptr [EBX + 0xc]
MOV dword ptr [EBX + 0x30],EBP
CMP byte ptr [EDX],0x45
JNZ 0x00177448
ADD EDX,0x1
MOV dword ptr [EBX + 0xc],EDX
JMP 0x001773b2
MOV EAX,EBX
CALL 0x00177210
JMP 0x001773b2
SUB ESP,0xc
PUSH EBX
CALL 0x00175280
ADD ESP,0x10
JMP 0x001773b2
ADD ESP,0x1c
XOR EAX,EAX
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD EDX,0x1
MOV dword ptr [EBX + 0x28],EDI
MOV EAX,dword ptr [ESP + 0xc]
MOV dword ptr [EBX + 0xc],EDX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD EDX,0x1
PUSH 0x0
MOV EAX,EBX
XOR ECX,ECX
MOV dword ptr [EBX + 0xc],EDX
MOV EDX,0x2f
CALL 0x0016dee0
POP EDX
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "int __regparm3 FUN_00177370(int param_1)\n\n{\n  undefined4 uVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 uVar4;\n  char *pcVar5;\n  int *piVar6;\n  int local_20 [4];\n  \n  pcVar5 = *(char **)(param_1 + 0xc);\n  uVar4 = *(undefined4 *)(param_1 + 0x28);\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }\n  local_20[0] = 0;\n  piVar6 = local_20;\n  do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );\n}\n\n" (function_definition "int __regparm3 FUN_00177370(int param_1)\n\n{\n  undefined4 uVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 uVar4;\n  char *pcVar5;\n  int *piVar6;\n  int local_20 [4];\n  \n  pcVar5 = *(char **)(param_1 + 0xc);\n  uVar4 = *(undefined4 *)(param_1 + 0x28);\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }\n  local_20[0] = 0;\n  piVar6 = local_20;\n  do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00177370(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 uVar4;\n  char *pcVar5;\n  int *piVar6;\n  int local_20 [4];\n  \n  pcVar5 = *(char **)(param_1 + 0xc);\n  uVar4 = *(undefined4 *)(param_1 + 0x28);\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }\n  local_20[0] = 0;\n  piVar6 = local_20;\n  do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "int local_20 [4];" primitive_type (array_declarator "local_20 [4]" identifier [ number_literal ]) ;) (expression_statement "pcVar5 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar5 = *(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 "uVar4 = *(undefined4 *)(param_1 + 0x28);" (assignment_expression "uVar4 = *(undefined4 *)(param_1 + 0x28)" identifier = (pointer_expression "*(undefined4 *)(param_1 + 0x28)" * (cast_expression "(undefined4 *)(param_1 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "cVar2 = *pcVar5;" (assignment_expression "cVar2 = *pcVar5" identifier = (pointer_expression "*pcVar5" * identifier)) ;) (if_statement "if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }" if (parenthesized_expression "(cVar2 == 'E')" ( (binary_expression "cVar2 == 'E'" identifier == (char_literal "'E'" ' character ')) )) (compound_statement "{\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }" { (expression_statement "*(char **)(param_1 + 0xc) = pcVar5 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar5 + 1" (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) )))) = (binary_expression "pcVar5 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = FUN_0016dee0(0);" (assignment_expression "uVar4 = FUN_0016dee0(0)" identifier = (call_expression "FUN_0016dee0(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (expression_statement "local_20[0] = 0;" (assignment_expression "local_20[0] = 0" (subscript_expression "local_20[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar6 = local_20;" (assignment_expression "piVar6 = local_20" identifier = identifier) ;) (do_statement "do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );" do (compound_statement "{\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  }" { (if_statement "if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" if (parenthesized_expression "(cVar2 == 'L')" ( (binary_expression "cVar2 == 'L'" identifier == (char_literal "'L'" ' character ')) )) (compound_statement "{\n      iVar3 = FUN_00177210();\n    }" { (expression_statement "iVar3 = FUN_00177210();" (assignment_expression "iVar3 = FUN_00177210()" identifier = (call_expression "FUN_00177210()" identifier (argument_list "()" ( )))) ;) }) (else_clause "else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" else (if_statement "if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" if (parenthesized_expression "(cVar2 < 'M')" ( (binary_expression "cVar2 < 'M'" identifier < (char_literal "'M'" ' character ')) )) (compound_statement "{\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }" { (if_statement "if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;" if (parenthesized_expression "(1 < (byte)(cVar2 + 0xb7U))" ( (binary_expression "1 < (byte)(cVar2 + 0xb7U)" number_literal < (call_expression "(byte)(cVar2 + 0xb7U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(cVar2 + 0xb7U)" ( (binary_expression "cVar2 + 0xb7U" identifier + number_literal) )))) )) (goto_statement "goto LAB_00177430;" goto statement_identifier ;)) (expression_statement "iVar3 = FUN_00177490();" (assignment_expression "iVar3 = FUN_00177490()" identifier = (call_expression "FUN_00177490()" identifier (argument_list "()" ( )))) ;) }) (else_clause "else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" else (if_statement "if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" if (parenthesized_expression "(cVar2 == 'X')" ( (binary_expression "cVar2 == 'X'" identifier == (char_literal "'X'" ' character ')) )) (compound_statement "{\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }" { (expression_statement "uVar1 = *(undefined4 *)(param_1 + 0x30);" (assignment_expression "uVar1 = *(undefined4 *)(param_1 + 0x30)" identifier = (pointer_expression "*(undefined4 *)(param_1 + 0x30)" * (cast_expression "(undefined4 *)(param_1 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x30) = 1;" (assignment_expression "*(undefined4 *)(param_1 + 0x30) = 1" (pointer_expression "*(undefined4 *)(param_1 + 0x30)" * (cast_expression "(undefined4 *)(param_1 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(char **)(param_1 + 0xc) = pcVar5 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar5 + 1" (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) )))) = (binary_expression "pcVar5 + 1" identifier + number_literal)) ;) (expression_statement "iVar3 = FUN_001774c0();" (assignment_expression "iVar3 = FUN_001774c0()" identifier = (call_expression "FUN_001774c0()" identifier (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x30) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x30) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x30)" * (cast_expression "(undefined4 *)(param_1 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = identifier) ;) (if_statement "if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }" if (parenthesized_expression "(**(char **)(param_1 + 0xc) != 'E')" ( (binary_expression "**(char **)(param_1 + 0xc) != 'E'" (pointer_expression "**(char **)(param_1 + 0xc)" * (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) ))))) != (char_literal "'E'" ' character ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1" (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) )))) = (binary_expression "*(char **)(param_1 + 0xc) + 1" (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) )))) + number_literal)) ;) }) (else_clause "else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" else (compound_statement "{\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" { (labeled_statement "LAB_00177430:\n      iVar3 = FUN_00175280(param_1);" statement_identifier : (expression_statement "iVar3 = FUN_00175280(param_1);" (assignment_expression "iVar3 = FUN_00175280(param_1)" identifier = (call_expression "FUN_00175280(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;)) }))))))) (if_statement "if (iVar3 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar3 = FUN_0016dee0(0);" (assignment_expression "iVar3 = FUN_0016dee0(0)" identifier = (call_expression "FUN_0016dee0(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (expression_statement "*piVar6 = iVar3;" (assignment_expression "*piVar6 = iVar3" (pointer_expression "*piVar6" * identifier) = identifier) ;) (if_statement "if (iVar3 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar5 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar5 = *(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 "piVar6 = (int *)(iVar3 + 0xc);" (assignment_expression "piVar6 = (int *)(iVar3 + 0xc)" identifier = (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) )))) ;) (expression_statement "cVar2 = *pcVar5;" (assignment_expression "cVar2 = *pcVar5" identifier = (pointer_expression "*pcVar5" * identifier)) ;) (if_statement "if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }" if (parenthesized_expression "(cVar2 == 'E')" ( (binary_expression "cVar2 == 'E'" identifier == (char_literal "'E'" ' character ')) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0x28) = uVar4;" (assignment_expression "*(undefined4 *)(param_1 + 0x28) = uVar4" (pointer_expression "*(undefined4 *)(param_1 + 0x28)" * (cast_expression "(undefined4 *)(param_1 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(char **)(param_1 + 0xc) = pcVar5 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar5 + 1" (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) )))) = (binary_expression "pcVar5 + 1" identifier + number_literal)) ;) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "demangle_component * __regparm3 d_template_args_1(d_info *di)\n\n{\n  int iVar1;\n  char cVar2;\n  demangle_component *pdVar3;\n  demangle_component *pdVar4;\n  char *pcVar5;\n  demangle_component **ppdVar6;\n  demangle_component *al;\n  \n  pcVar5 = di->n;\n  pdVar4 = di->last_name;\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    di->n = pcVar5 + 1;\n    pdVar4 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(demangle_component *)0x0,\n                         (demangle_component *)0x0);\n    return pdVar4;\n  }\n  al = (demangle_component *)0x0;\n  ppdVar6 = &al;\n  do {\n    if (cVar2 == 'L') {\n      pdVar3 = d_expr_primary(di);\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      pdVar3 = d_template_args(di);\n    }\n    else if (cVar2 == 'X') {\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }\n    else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    pdVar3 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,pdVar3,(demangle_component *)0x0);\n    *ppdVar6 = pdVar3;\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    pcVar5 = di->n;\n    ppdVar6 = &(pdVar3->u).s_extended_operator.name;\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      di->last_name = pdVar4;\n      di->n = pcVar5 + 1;\n      return al;\n    }\n  } while( true );\n}\n\n" (ERROR "demangle_component * __regparm3 d_template_args_1(d_info *di)" (binary_expression "demangle_component * __regparm3 d_template_args_1(d_info *di)" identifier * (ERROR "__regparm3" identifier) (call_expression "d_template_args_1(d_info *di)" identifier (argument_list "(d_info *di)" ( (binary_expression "d_info *di" identifier * identifier) ))))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  demangle_component *pdVar3;\n  demangle_component *pdVar4;\n  char *pcVar5;\n  demangle_component **ppdVar6;\n  demangle_component *al;\n  \n  pcVar5 = di->n;\n  pdVar4 = di->last_name;\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    di->n = pcVar5 + 1;\n    pdVar4 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(demangle_component *)0x0,\n                         (demangle_component *)0x0);\n    return pdVar4;\n  }\n  al = (demangle_component *)0x0;\n  ppdVar6 = &al;\n  do {\n    if (cVar2 == 'L') {\n      pdVar3 = d_expr_primary(di);\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      pdVar3 = d_template_args(di);\n    }\n    else if (cVar2 == 'X') {\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }\n    else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    pdVar3 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,pdVar3,(demangle_component *)0x0);\n    *ppdVar6 = pdVar3;\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    pcVar5 = di->n;\n    ppdVar6 = &(pdVar3->u).s_extended_operator.name;\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      di->last_name = pdVar4;\n      di->n = pcVar5 + 1;\n      return al;\n    }\n  } while( true );\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "demangle_component *pdVar3;" type_identifier (pointer_declarator "*pdVar3" * identifier) ;) (declaration "demangle_component *pdVar4;" type_identifier (pointer_declarator "*pdVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "demangle_component **ppdVar6;" type_identifier (pointer_declarator "**ppdVar6" * (pointer_declarator "*ppdVar6" * identifier)) ;) (declaration "demangle_component *al;" type_identifier (pointer_declarator "*al" * identifier) ;) (expression_statement "pcVar5 = di->n;" (assignment_expression "pcVar5 = di->n" identifier = (field_expression "di->n" identifier -> field_identifier)) ;) (expression_statement "pdVar4 = di->last_name;" (assignment_expression "pdVar4 = di->last_name" identifier = (field_expression "di->last_name" identifier -> field_identifier)) ;) (expression_statement "cVar2 = *pcVar5;" (assignment_expression "cVar2 = *pcVar5" identifier = (pointer_expression "*pcVar5" * identifier)) ;) (if_statement "if (cVar2 == 'E') {\n    di->n = pcVar5 + 1;\n    pdVar4 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(demangle_component *)0x0,\n                         (demangle_component *)0x0);\n    return pdVar4;\n  }" if (parenthesized_expression "(cVar2 == 'E')" ( (binary_expression "cVar2 == 'E'" identifier == (char_literal "'E'" ' character ')) )) (compound_statement "{\n    di->n = pcVar5 + 1;\n    pdVar4 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(demangle_component *)0x0,\n                         (demangle_component *)0x0);\n    return pdVar4;\n  }" { (expression_statement "di->n = pcVar5 + 1;" (assignment_expression "di->n = pcVar5 + 1" (field_expression "di->n" identifier -> field_identifier) = (binary_expression "pcVar5 + 1" identifier + number_literal)) ;) (expression_statement "pdVar4 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(demangle_component *)0x0,\n                         (demangle_component *)0x0);" (assignment_expression "pdVar4 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(demangle_component *)0x0,\n                         (demangle_component *)0x0)" identifier = (call_expression "d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(demangle_component *)0x0,\n                         (demangle_component *)0x0)" identifier (argument_list "(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(demangle_component *)0x0,\n                         (demangle_component *)0x0)" ( identifier , identifier , (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) , (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) )))) ;) (return_statement "return pdVar4;" return identifier ;) })) (expression_statement "al = (demangle_component *)0x0;" (assignment_expression "al = (demangle_component *)0x0" identifier = (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "ppdVar6 = &al;" (assignment_expression "ppdVar6 = &al" identifier = (pointer_expression "&al" & identifier)) ;) (do_statement "do {\n    if (cVar2 == 'L') {\n      pdVar3 = d_expr_primary(di);\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      pdVar3 = d_template_args(di);\n    }\n    else if (cVar2 == 'X') {\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }\n    else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    pdVar3 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,pdVar3,(demangle_component *)0x0);\n    *ppdVar6 = pdVar3;\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    pcVar5 = di->n;\n    ppdVar6 = &(pdVar3->u).s_extended_operator.name;\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      di->last_name = pdVar4;\n      di->n = pcVar5 + 1;\n      return al;\n    }\n  } while( true );" do (compound_statement "{\n    if (cVar2 == 'L') {\n      pdVar3 = d_expr_primary(di);\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      pdVar3 = d_template_args(di);\n    }\n    else if (cVar2 == 'X') {\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }\n    else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    pdVar3 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,pdVar3,(demangle_component *)0x0);\n    *ppdVar6 = pdVar3;\n    if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }\n    pcVar5 = di->n;\n    ppdVar6 = &(pdVar3->u).s_extended_operator.name;\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      di->last_name = pdVar4;\n      di->n = pcVar5 + 1;\n      return al;\n    }\n  }" { (if_statement "if (cVar2 == 'L') {\n      pdVar3 = d_expr_primary(di);\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      pdVar3 = d_template_args(di);\n    }\n    else if (cVar2 == 'X') {\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }\n    else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }" if (parenthesized_expression "(cVar2 == 'L')" ( (binary_expression "cVar2 == 'L'" identifier == (char_literal "'L'" ' character ')) )) (compound_statement "{\n      pdVar3 = d_expr_primary(di);\n    }" { (expression_statement "pdVar3 = d_expr_primary(di);" (assignment_expression "pdVar3 = d_expr_primary(di)" identifier = (call_expression "d_expr_primary(di)" identifier (argument_list "(di)" ( identifier )))) ;) }) (else_clause "else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      pdVar3 = d_template_args(di);\n    }\n    else if (cVar2 == 'X') {\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }\n    else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }" else (if_statement "if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      pdVar3 = d_template_args(di);\n    }\n    else if (cVar2 == 'X') {\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }\n    else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }" if (parenthesized_expression "(cVar2 < 'M')" ( (binary_expression "cVar2 < 'M'" identifier < (char_literal "'M'" ' character ')) )) (compound_statement "{\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      pdVar3 = d_template_args(di);\n    }" { (if_statement "if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;" if (parenthesized_expression "(1 < (byte)(cVar2 + 0xb7U))" ( (binary_expression "1 < (byte)(cVar2 + 0xb7U)" number_literal < (call_expression "(byte)(cVar2 + 0xb7U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(cVar2 + 0xb7U)" ( (binary_expression "cVar2 + 0xb7U" identifier + number_literal) )))) )) (goto_statement "goto LAB_00177430;" goto statement_identifier ;)) (expression_statement "pdVar3 = d_template_args(di);" (assignment_expression "pdVar3 = d_template_args(di)" identifier = (call_expression "d_template_args(di)" identifier (argument_list "(di)" ( identifier )))) ;) }) (else_clause "else if (cVar2 == 'X') {\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }\n    else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }" else (if_statement "if (cVar2 == 'X') {\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }\n    else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }" if (parenthesized_expression "(cVar2 == 'X')" ( (binary_expression "cVar2 == 'X'" identifier == (char_literal "'X'" ' character ')) )) (compound_statement "{\n      iVar1 = di->is_expression;\n      di->is_expression = 1;\n      di->n = pcVar5 + 1;\n      pdVar3 = d_expression_1(di);\n      di->is_expression = iVar1;\n      if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }\n      di->n = di->n + 1;\n    }" { (expression_statement "iVar1 = di->is_expression;" (assignment_expression "iVar1 = di->is_expression" identifier = (field_expression "di->is_expression" identifier -> field_identifier)) ;) (expression_statement "di->is_expression = 1;" (assignment_expression "di->is_expression = 1" (field_expression "di->is_expression" identifier -> field_identifier) = number_literal) ;) (expression_statement "di->n = pcVar5 + 1;" (assignment_expression "di->n = pcVar5 + 1" (field_expression "di->n" identifier -> field_identifier) = (binary_expression "pcVar5 + 1" identifier + number_literal)) ;) (expression_statement "pdVar3 = d_expression_1(di);" (assignment_expression "pdVar3 = d_expression_1(di)" identifier = (call_expression "d_expression_1(di)" identifier (argument_list "(di)" ( identifier )))) ;) (expression_statement "di->is_expression = iVar1;" (assignment_expression "di->is_expression = iVar1" (field_expression "di->is_expression" identifier -> field_identifier) = identifier) ;) (if_statement "if (*di->n != 'E') {\n        return (demangle_component *)0x0;\n      }" if (parenthesized_expression "(*di->n != 'E')" ( (binary_expression "*di->n != 'E'" (pointer_expression "*di->n" * (field_expression "di->n" identifier -> field_identifier)) != (char_literal "'E'" ' character ')) )) (compound_statement "{\n        return (demangle_component *)0x0;\n      }" { (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "di->n = di->n + 1;" (assignment_expression "di->n = di->n + 1" (field_expression "di->n" identifier -> field_identifier) = (binary_expression "di->n + 1" (field_expression "di->n" identifier -> field_identifier) + number_literal)) ;) }) (else_clause "else {\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }" else (compound_statement "{\nLAB_00177430:\n      pdVar3 = cplus_demangle_type(di);\n    }" { (labeled_statement "LAB_00177430:\n      pdVar3 = cplus_demangle_type(di);" statement_identifier : (expression_statement "pdVar3 = cplus_demangle_type(di);" (assignment_expression "pdVar3 = cplus_demangle_type(di)" identifier = (call_expression "cplus_demangle_type(di)" identifier (argument_list "(di)" ( identifier )))) ;)) }))))))) (if_statement "if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }" if (parenthesized_expression "(pdVar3 == (demangle_component *)0x0)" ( (binary_expression "pdVar3 == (demangle_component *)0x0" identifier == (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (demangle_component *)0x0;\n    }" { (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "pdVar3 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,pdVar3,(demangle_component *)0x0);" (assignment_expression "pdVar3 = d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,pdVar3,(demangle_component *)0x0)" identifier = (call_expression "d_make_comp(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,pdVar3,(demangle_component *)0x0)" identifier (argument_list "(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,pdVar3,(demangle_component *)0x0)" ( identifier , identifier , identifier , (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) )))) ;) (expression_statement "*ppdVar6 = pdVar3;" (assignment_expression "*ppdVar6 = pdVar3" (pointer_expression "*ppdVar6" * identifier) = identifier) ;) (if_statement "if (pdVar3 == (demangle_component *)0x0) {\n      return (demangle_component *)0x0;\n    }" if (parenthesized_expression "(pdVar3 == (demangle_component *)0x0)" ( (binary_expression "pdVar3 == (demangle_component *)0x0" identifier == (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (demangle_component *)0x0;\n    }" { (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "pcVar5 = di->n;" (assignment_expression "pcVar5 = di->n" identifier = (field_expression "di->n" identifier -> field_identifier)) ;) (expression_statement "ppdVar6 = &(pdVar3->u).s_extended_operator.name;" (assignment_expression "ppdVar6 = &(pdVar3->u).s_extended_operator.name" identifier = (pointer_expression "&(pdVar3->u).s_extended_operator.name" & (field_expression "(pdVar3->u).s_extended_operator.name" (field_expression "(pdVar3->u).s_extended_operator" (parenthesized_expression "(pdVar3->u)" ( (field_expression "pdVar3->u" identifier -> field_identifier) )) . field_identifier) . field_identifier))) ;) (expression_statement "cVar2 = *pcVar5;" (assignment_expression "cVar2 = *pcVar5" identifier = (pointer_expression "*pcVar5" * identifier)) ;) (if_statement "if (cVar2 == 'E') {\n      di->last_name = pdVar4;\n      di->n = pcVar5 + 1;\n      return al;\n    }" if (parenthesized_expression "(cVar2 == 'E')" ( (binary_expression "cVar2 == 'E'" identifier == (char_literal "'E'" ' character ')) )) (compound_statement "{\n      di->last_name = pdVar4;\n      di->n = pcVar5 + 1;\n      return al;\n    }" { (expression_statement "di->last_name = pdVar4;" (assignment_expression "di->last_name = pdVar4" (field_expression "di->last_name" identifier -> field_identifier) = identifier) ;) (expression_statement "di->n = pcVar5 + 1;" (assignment_expression "di->n = pcVar5 + 1" (field_expression "di->n" identifier -> field_identifier) = (binary_expression "pcVar5 + 1" identifier + number_literal)) ;) (return_statement "return al;" return identifier ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) }))
(translation_unit "int __regparm3 FUN_00177370(int param_1)\n\n{\n  undefined4 uVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 uVar4;\n  char *pcVar5;\n  int *piVar6;\n  int local_20 [4];\n  \n  pcVar5 = *(char **)(param_1 + 0xc);\n  uVar4 = *(undefined4 *)(param_1 + 0x28);\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }\n  local_20[0] = 0;\n  piVar6 = local_20;\n  do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );\n}\n\n" (function_definition "int __regparm3 FUN_00177370(int param_1)\n\n{\n  undefined4 uVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 uVar4;\n  char *pcVar5;\n  int *piVar6;\n  int local_20 [4];\n  \n  pcVar5 = *(char **)(param_1 + 0xc);\n  uVar4 = *(undefined4 *)(param_1 + 0x28);\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }\n  local_20[0] = 0;\n  piVar6 = local_20;\n  do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00177370(int param_1)" identifier (parameter_list "(int param_1)" ( (parameter_declaration "int param_1" primitive_type identifier) ))) (compound_statement "{\n  undefined4 uVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 uVar4;\n  char *pcVar5;\n  int *piVar6;\n  int local_20 [4];\n  \n  pcVar5 = *(char **)(param_1 + 0xc);\n  uVar4 = *(undefined4 *)(param_1 + 0x28);\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }\n  local_20[0] = 0;\n  piVar6 = local_20;\n  do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );\n}" { (declaration "undefined4 uVar1;" type_identifier identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "int local_20 [4];" primitive_type (array_declarator "local_20 [4]" identifier [ number_literal ]) ;) (expression_statement "pcVar5 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar5 = *(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 "uVar4 = *(undefined4 *)(param_1 + 0x28);" (assignment_expression "uVar4 = *(undefined4 *)(param_1 + 0x28)" identifier = (pointer_expression "*(undefined4 *)(param_1 + 0x28)" * (cast_expression "(undefined4 *)(param_1 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "cVar2 = *pcVar5;" (assignment_expression "cVar2 = *pcVar5" identifier = (pointer_expression "*pcVar5" * identifier)) ;) (if_statement "if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }" if (parenthesized_expression "(cVar2 == 'E')" ( (binary_expression "cVar2 == 'E'" identifier == (char_literal "'E'" ' character ')) )) (compound_statement "{\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }" { (expression_statement "*(char **)(param_1 + 0xc) = pcVar5 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar5 + 1" (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) )))) = (binary_expression "pcVar5 + 1" identifier + number_literal)) ;) (expression_statement "uVar4 = FUN_0016dee0(0);" (assignment_expression "uVar4 = FUN_0016dee0(0)" identifier = (call_expression "FUN_0016dee0(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (return_statement "return uVar4;" return identifier ;) })) (expression_statement "local_20[0] = 0;" (assignment_expression "local_20[0] = 0" (subscript_expression "local_20[0]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar6 = local_20;" (assignment_expression "piVar6 = local_20" identifier = identifier) ;) (do_statement "do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );" do (compound_statement "{\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  }" { (if_statement "if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" if (parenthesized_expression "(cVar2 == 'L')" ( (binary_expression "cVar2 == 'L'" identifier == (char_literal "'L'" ' character ')) )) (compound_statement "{\n      iVar3 = FUN_00177210();\n    }" { (expression_statement "iVar3 = FUN_00177210();" (assignment_expression "iVar3 = FUN_00177210()" identifier = (call_expression "FUN_00177210()" identifier (argument_list "()" ( )))) ;) }) (else_clause "else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" else (if_statement "if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" if (parenthesized_expression "(cVar2 < 'M')" ( (binary_expression "cVar2 < 'M'" identifier < (char_literal "'M'" ' character ')) )) (compound_statement "{\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }" { (if_statement "if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;" if (parenthesized_expression "(1 < (byte)(cVar2 + 0xb7U))" ( (binary_expression "1 < (byte)(cVar2 + 0xb7U)" number_literal < (call_expression "(byte)(cVar2 + 0xb7U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(cVar2 + 0xb7U)" ( (binary_expression "cVar2 + 0xb7U" identifier + number_literal) )))) )) (goto_statement "goto LAB_00177430;" goto statement_identifier ;)) (expression_statement "iVar3 = FUN_00177490();" (assignment_expression "iVar3 = FUN_00177490()" identifier = (call_expression "FUN_00177490()" identifier (argument_list "()" ( )))) ;) }) (else_clause "else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" else (if_statement "if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" if (parenthesized_expression "(cVar2 == 'X')" ( (binary_expression "cVar2 == 'X'" identifier == (char_literal "'X'" ' character ')) )) (compound_statement "{\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }" { (expression_statement "uVar1 = *(undefined4 *)(param_1 + 0x30);" (assignment_expression "uVar1 = *(undefined4 *)(param_1 + 0x30)" identifier = (pointer_expression "*(undefined4 *)(param_1 + 0x30)" * (cast_expression "(undefined4 *)(param_1 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x30) = 1;" (assignment_expression "*(undefined4 *)(param_1 + 0x30) = 1" (pointer_expression "*(undefined4 *)(param_1 + 0x30)" * (cast_expression "(undefined4 *)(param_1 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(char **)(param_1 + 0xc) = pcVar5 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar5 + 1" (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) )))) = (binary_expression "pcVar5 + 1" identifier + number_literal)) ;) (expression_statement "iVar3 = FUN_001774c0();" (assignment_expression "iVar3 = FUN_001774c0()" identifier = (call_expression "FUN_001774c0()" identifier (argument_list "()" ( )))) ;) (expression_statement "*(undefined4 *)(param_1 + 0x30) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x30) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x30)" * (cast_expression "(undefined4 *)(param_1 + 0x30)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = identifier) ;) (if_statement "if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }" if (parenthesized_expression "(**(char **)(param_1 + 0xc) != 'E')" ( (binary_expression "**(char **)(param_1 + 0xc) != 'E'" (pointer_expression "**(char **)(param_1 + 0xc)" * (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) ))))) != (char_literal "'E'" ' character ')) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1" (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) )))) = (binary_expression "*(char **)(param_1 + 0xc) + 1" (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) )))) + number_literal)) ;) }) (else_clause "else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" else (compound_statement "{\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" { (labeled_statement "LAB_00177430:\n      iVar3 = FUN_00175280(param_1);" statement_identifier : (expression_statement "iVar3 = FUN_00175280(param_1);" (assignment_expression "iVar3 = FUN_00175280(param_1)" identifier = (call_expression "FUN_00175280(param_1)" identifier (argument_list "(param_1)" ( identifier )))) ;)) }))))))) (if_statement "if (iVar3 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "iVar3 = FUN_0016dee0(0);" (assignment_expression "iVar3 = FUN_0016dee0(0)" identifier = (call_expression "FUN_0016dee0(0)" identifier (argument_list "(0)" ( number_literal )))) ;) (expression_statement "*piVar6 = iVar3;" (assignment_expression "*piVar6 = iVar3" (pointer_expression "*piVar6" * identifier) = identifier) ;) (if_statement "if (iVar3 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "pcVar5 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar5 = *(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 "piVar6 = (int *)(iVar3 + 0xc);" (assignment_expression "piVar6 = (int *)(iVar3 + 0xc)" identifier = (cast_expression "(int *)(iVar3 + 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar3 + 0xc)" ( (binary_expression "iVar3 + 0xc" identifier + number_literal) )))) ;) (expression_statement "cVar2 = *pcVar5;" (assignment_expression "cVar2 = *pcVar5" identifier = (pointer_expression "*pcVar5" * identifier)) ;) (if_statement "if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }" if (parenthesized_expression "(cVar2 == 'E')" ( (binary_expression "cVar2 == 'E'" identifier == (char_literal "'E'" ' character ')) )) (compound_statement "{\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }" { (expression_statement "*(undefined4 *)(param_1 + 0x28) = uVar4;" (assignment_expression "*(undefined4 *)(param_1 + 0x28) = uVar4" (pointer_expression "*(undefined4 *)(param_1 + 0x28)" * (cast_expression "(undefined4 *)(param_1 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(char **)(param_1 + 0xc) = pcVar5 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar5 + 1" (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) )))) = (binary_expression "pcVar5 + 1" identifier + number_literal)) ;) (return_statement "return local_20[0];" return (subscript_expression "local_20[0]" identifier [ number_literal ]) ;) })) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(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 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 IDENT = (pointer_expression * (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 IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT )))) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT < (char_literal ' character ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + LIT) )))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (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 IDENT + LIT) ))))) != (char_literal ' character ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;)) }))))))) (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 IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (return_statement return (subscript_expression IDENT [ LIT ]) ;) })) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "int __regparm3 FUN_00177370(int param_1)\n\n{\n  undefined4 uVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 uVar4;\n  char *pcVar5;\n  int *piVar6;\n  int local_20 [4];\n  \n  pcVar5 = *(char **)(param_1 + 0xc);\n  uVar4 = *(undefined4 *)(param_1 + 0x28);\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }\n  local_20[0] = 0;\n  piVar6 = local_20;\n  do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );\n}" (primitive_type "int") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00177370(int param_1)" (identifier "FUN_00177370") (parameter_list "(int param_1)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) () ")"))) (compound_statement "{\n  undefined4 uVar1;\n  char cVar2;\n  int iVar3;\n  undefined4 uVar4;\n  char *pcVar5;\n  int *piVar6;\n  int local_20 [4];\n  \n  pcVar5 = *(char **)(param_1 + 0xc);\n  uVar4 = *(undefined4 *)(param_1 + 0x28);\n  cVar2 = *pcVar5;\n  if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }\n  local_20[0] = 0;\n  piVar6 = local_20;\n  do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );\n}" ({ "{") (declaration "undefined4 uVar1;" (type_identifier "undefined4") (identifier "uVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "char *pcVar5;" (primitive_type "char") (pointer_declarator "*pcVar5" (* "*") (identifier "pcVar5")) (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "int local_20 [4];" (primitive_type "int") (array_declarator "local_20 [4]" (identifier "local_20") ([ "[") (number_literal "4") (] "]")) (; ";")) (expression_statement "pcVar5 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar5 = *(char **)(param_1 + 0xc)" (identifier "pcVar5") (= "=") (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 "uVar4 = *(undefined4 *)(param_1 + 0x28);" (assignment_expression "uVar4 = *(undefined4 *)(param_1 + 0x28)" (identifier "uVar4") (= "=") (pointer_expression "*(undefined4 *)(param_1 + 0x28)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x28)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "cVar2 = *pcVar5;" (assignment_expression "cVar2 = *pcVar5" (identifier "cVar2") (= "=") (pointer_expression "*pcVar5" (* "*") (identifier "pcVar5"))) (; ";")) (if_statement "if (cVar2 == 'E') {\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }" (if "if") (parenthesized_expression "(cVar2 == 'E')" (( "(") (binary_expression "cVar2 == 'E'" (identifier "cVar2") (== "==") (char_literal "'E'" (' "'") (character "E") (' "'"))) () ")")) (compound_statement "{\n    *(char **)(param_1 + 0xc) = pcVar5 + 1;\n    uVar4 = FUN_0016dee0(0);\n    return uVar4;\n  }" ({ "{") (expression_statement "*(char **)(param_1 + 0xc) = pcVar5 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar5 + 1" (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")) () ")")))) (= "=") (binary_expression "pcVar5 + 1" (identifier "pcVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar4 = FUN_0016dee0(0);" (assignment_expression "uVar4 = FUN_0016dee0(0)" (identifier "uVar4") (= "=") (call_expression "FUN_0016dee0(0)" (identifier "FUN_0016dee0") (argument_list "(0)" (( "(") (number_literal "0") () ")")))) (; ";")) (return_statement "return uVar4;" (return "return") (identifier "uVar4") (; ";")) (} "}"))) (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 "piVar6 = local_20;" (assignment_expression "piVar6 = local_20" (identifier "piVar6") (= "=") (identifier "local_20")) (; ";")) (do_statement "do {\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  } while( true );" (do "do") (compound_statement "{\n    if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }\n    if (iVar3 == 0) {\n      return 0;\n    }\n    iVar3 = FUN_0016dee0(0);\n    *piVar6 = iVar3;\n    if (iVar3 == 0) {\n      return 0;\n    }\n    pcVar5 = *(char **)(param_1 + 0xc);\n    piVar6 = (int *)(iVar3 + 0xc);\n    cVar2 = *pcVar5;\n    if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }\n  }" ({ "{") (if_statement "if (cVar2 == 'L') {\n      iVar3 = FUN_00177210();\n    }\n    else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" (if "if") (parenthesized_expression "(cVar2 == 'L')" (( "(") (binary_expression "cVar2 == 'L'" (identifier "cVar2") (== "==") (char_literal "'L'" (' "'") (character "L") (' "'"))) () ")")) (compound_statement "{\n      iVar3 = FUN_00177210();\n    }" ({ "{") (expression_statement "iVar3 = FUN_00177210();" (assignment_expression "iVar3 = FUN_00177210()" (identifier "iVar3") (= "=") (call_expression "FUN_00177210()" (identifier "FUN_00177210") (argument_list "()" (( "(") () ")")))) (; ";")) (} "}")) (else_clause "else if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" (else "else") (if_statement "if (cVar2 < 'M') {\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }\n    else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" (if "if") (parenthesized_expression "(cVar2 < 'M')" (( "(") (binary_expression "cVar2 < 'M'" (identifier "cVar2") (< "<") (char_literal "'M'" (' "'") (character "M") (' "'"))) () ")")) (compound_statement "{\n      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;\n      iVar3 = FUN_00177490();\n    }" ({ "{") (if_statement "if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;" (if "if") (parenthesized_expression "(1 < (byte)(cVar2 + 0xb7U))" (( "(") (binary_expression "1 < (byte)(cVar2 + 0xb7U)" (number_literal "1") (< "<") (call_expression "(byte)(cVar2 + 0xb7U)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(cVar2 + 0xb7U)" (( "(") (binary_expression "cVar2 + 0xb7U" (identifier "cVar2") (+ "+") (number_literal "0xb7U")) () ")")))) () ")")) (goto_statement "goto LAB_00177430;" (goto "goto") (statement_identifier "LAB_00177430") (; ";"))) (expression_statement "iVar3 = FUN_00177490();" (assignment_expression "iVar3 = FUN_00177490()" (identifier "iVar3") (= "=") (call_expression "FUN_00177490()" (identifier "FUN_00177490") (argument_list "()" (( "(") () ")")))) (; ";")) (} "}")) (else_clause "else if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" (else "else") (if_statement "if (cVar2 == 'X') {\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }\n    else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" (if "if") (parenthesized_expression "(cVar2 == 'X')" (( "(") (binary_expression "cVar2 == 'X'" (identifier "cVar2") (== "==") (char_literal "'X'" (' "'") (character "X") (' "'"))) () ")")) (compound_statement "{\n      uVar1 = *(undefined4 *)(param_1 + 0x30);\n      *(undefined4 *)(param_1 + 0x30) = 1;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      iVar3 = FUN_001774c0();\n      *(undefined4 *)(param_1 + 0x30) = uVar1;\n      if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }\n      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;\n    }" ({ "{") (expression_statement "uVar1 = *(undefined4 *)(param_1 + 0x30);" (assignment_expression "uVar1 = *(undefined4 *)(param_1 + 0x30)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined4 *)(param_1 + 0x30)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x30)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x30) = 1;" (assignment_expression "*(undefined4 *)(param_1 + 0x30) = 1" (pointer_expression "*(undefined4 *)(param_1 + 0x30)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x30)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "*(char **)(param_1 + 0xc) = pcVar5 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar5 + 1" (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")) () ")")))) (= "=") (binary_expression "pcVar5 + 1" (identifier "pcVar5") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar3 = FUN_001774c0();" (assignment_expression "iVar3 = FUN_001774c0()" (identifier "iVar3") (= "=") (call_expression "FUN_001774c0()" (identifier "FUN_001774c0") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0x30) = uVar1;" (assignment_expression "*(undefined4 *)(param_1 + 0x30) = uVar1" (pointer_expression "*(undefined4 *)(param_1 + 0x30)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x30)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (if_statement "if (**(char **)(param_1 + 0xc) != 'E') {\n        return 0;\n      }" (if "if") (parenthesized_expression "(**(char **)(param_1 + 0xc) != 'E')" (( "(") (binary_expression "**(char **)(param_1 + 0xc) != 'E'" (pointer_expression "**(char **)(param_1 + 0xc)" (* "*") (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")) () ")"))))) (!= "!=") (char_literal "'E'" (' "'") (character "E") (' "'"))) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1" (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")) () ")")))) (= "=") (binary_expression "*(char **)(param_1 + 0xc) + 1" (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")) () ")")))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" (else "else") (compound_statement "{\nLAB_00177430:\n      iVar3 = FUN_00175280(param_1);\n    }" ({ "{") (labeled_statement "LAB_00177430:\n      iVar3 = FUN_00175280(param_1);" (statement_identifier "LAB_00177430") (: ":") (expression_statement "iVar3 = FUN_00175280(param_1);" (assignment_expression "iVar3 = FUN_00175280(param_1)" (identifier "iVar3") (= "=") (call_expression "FUN_00175280(param_1)" (identifier "FUN_00175280") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")")))) (; ";"))) (} "}")))))))) (if_statement "if (iVar3 == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "iVar3 = FUN_0016dee0(0);" (assignment_expression "iVar3 = FUN_0016dee0(0)" (identifier "iVar3") (= "=") (call_expression "FUN_0016dee0(0)" (identifier "FUN_0016dee0") (argument_list "(0)" (( "(") (number_literal "0") () ")")))) (; ";")) (expression_statement "*piVar6 = iVar3;" (assignment_expression "*piVar6 = iVar3" (pointer_expression "*piVar6" (* "*") (identifier "piVar6")) (= "=") (identifier "iVar3")) (; ";")) (if_statement "if (iVar3 == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "pcVar5 = *(char **)(param_1 + 0xc);" (assignment_expression "pcVar5 = *(char **)(param_1 + 0xc)" (identifier "pcVar5") (= "=") (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 "piVar6 = (int *)(iVar3 + 0xc);" (assignment_expression "piVar6 = (int *)(iVar3 + 0xc)" (identifier "piVar6") (= "=") (cast_expression "(int *)(iVar3 + 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar3 + 0xc)" (( "(") (binary_expression "iVar3 + 0xc" (identifier "iVar3") (+ "+") (number_literal "0xc")) () ")")))) (; ";")) (expression_statement "cVar2 = *pcVar5;" (assignment_expression "cVar2 = *pcVar5" (identifier "cVar2") (= "=") (pointer_expression "*pcVar5" (* "*") (identifier "pcVar5"))) (; ";")) (if_statement "if (cVar2 == 'E') {\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }" (if "if") (parenthesized_expression "(cVar2 == 'E')" (( "(") (binary_expression "cVar2 == 'E'" (identifier "cVar2") (== "==") (char_literal "'E'" (' "'") (character "E") (' "'"))) () ")")) (compound_statement "{\n      *(undefined4 *)(param_1 + 0x28) = uVar4;\n      *(char **)(param_1 + 0xc) = pcVar5 + 1;\n      return local_20[0];\n    }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 0x28) = uVar4;" (assignment_expression "*(undefined4 *)(param_1 + 0x28) = uVar4" (pointer_expression "*(undefined4 *)(param_1 + 0x28)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x28)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "uVar4")) (; ";")) (expression_statement "*(char **)(param_1 + 0xc) = pcVar5 + 1;" (assignment_expression "*(char **)(param_1 + 0xc) = pcVar5 + 1" (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")) () ")")))) (= "=") (binary_expression "pcVar5 + 1" (identifier "pcVar5") (+ "+") (number_literal "1"))) (; ";")) (return_statement "return local_20[0];" (return "return") (subscript_expression "local_20[0]" (identifier "local_20") ([ "[") (number_literal "0") (] "]")) (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

type_1 * __regparm3 d_template_args_1(d_info *di)

{
  int iVar1;
  char var_1;
  type_1 *var_8;
  type_1 *pdVar4;
  char *var_2;
  type_1 **ppdVar6;
  type_1 *al;
  
  var_2 = di->n;
  pdVar4 = di->last_name;
  var_1 = *var_2;
  if (var_1 == 'E') {
    di->n = var_2 + 1;
    pdVar4 = var_3(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,(type_1 *)0x0,
                         (type_1 *)0x0);
    return pdVar4;
  }
  al = (type_1 *)0x0;
  ppdVar6 = &al;
  do {
    if (var_1 == 'L') {
      var_8 = var_4(di);
    }
    else if (var_1 < 'M') {
      if (1 < (byte)(var_1 + 0xb7U)) goto LAB_00177430;
      var_8 = var_5(di);
    }
    else if (var_1 == 'X') {
      iVar1 = di->is_expression;
      di->is_expression = 1;
      di->n = var_2 + 1;
      var_8 = var_6(di);
      di->is_expression = iVar1;
      if (*di->n != 'E') {
        return (type_1 *)0x0;
      }
      di->n = di->n + 1;
    }
    else {
LAB_00177430:
      var_8 = var_7(di);
    }
    if (var_8 == (type_1 *)0x0) {
      return (type_1 *)0x0;
    }
    var_8 = var_3(di,DEMANGLE_COMPONENT_TEMPLATE_ARGLIST,var_8,(type_1 *)0x0);
    *ppdVar6 = var_8;
    if (var_8 == (type_1 *)0x0) {
      return (type_1 *)0x0;
    }
    var_2 = di->n;
    ppdVar6 = &(var_8->u).s_extended_operator.name;
    var_1 = *var_2;
    if (var_1 == 'E') {
      di->last_name = pdVar4;
      di->n = var_2 + 1;
      return al;
    }
  } while( true );
}


(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: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) 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: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (number_literal))))) (return_statement (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (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: (identifier) right: (number_literal)))))) right: (char_literal (character)))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))) alternative: (else_clause (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (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: (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: (identifier) right: (char_literal (character)))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (return_statement (subscript_expression argument: (identifier) index: (number_literal)))))) condition: (parenthesized_expression (true))))))

int __regparm3 MASKED(int param_1)

{
  undefined4 uVar1;
  char cVar2;
  int iVar3;
  undefined4 uVar4;
  char *pcVar5;
  int *piVar6;
  int local_20 [4];
  
  pcVar5 = *(char **)(param_1 + 0xc);
  uVar4 = *(undefined4 *)(param_1 + 0x28);
  cVar2 = *pcVar5;
  if (cVar2 == 'E') {
    *(char **)(param_1 + 0xc) = pcVar5 + 1;
    uVar4 = FUN_0016dee0(0);
    return uVar4;
  }
  local_20[0] = 0;
  piVar6 = local_20;
  do {
    if (cVar2 == 'L') {
      iVar3 = FUN_00177210();
    }
    else if (cVar2 < 'M') {
      if (1 < (byte)(cVar2 + 0xb7U)) goto LAB_00177430;
      iVar3 = FUN_00177490();
    }
    else if (cVar2 == 'X') {
      uVar1 = *(undefined4 *)(param_1 + 0x30);
      *(undefined4 *)(param_1 + 0x30) = 1;
      *(char **)(param_1 + 0xc) = pcVar5 + 1;
      iVar3 = FUN_001774c0();
      *(undefined4 *)(param_1 + 0x30) = uVar1;
      if (**(char **)(param_1 + 0xc) != 'E') {
        return 0;
      }
      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
    }
    else {
LAB_00177430:
      iVar3 = FUN_00175280(param_1);
    }
    if (iVar3 == 0) {
      return 0;
    }
    iVar3 = FUN_0016dee0(0);
    *piVar6 = iVar3;
    if (iVar3 == 0) {
      return 0;
    }
    pcVar5 = *(char **)(param_1 + 0xc);
    piVar6 = (int *)(iVar3 + 0xc);
    cVar2 = *pcVar5;
    if (cVar2 == 'E') {
      *(undefined4 *)(param_1 + 0x28) = uVar4;
      *(char **)(param_1 + 0xc) = pcVar5 + 1;
      return local_20[0];
    }
  } while( true );
}

