
char * dlang_type_modifiers(string *decl,char *mangled)

{
  char cVar1;
  
  if (mangled != (char *)0x0) {
    cVar1 = *mangled;
    while (cVar1 != '\0') {
      if (cVar1 == 'O') {
        mangled = mangled + 1;
        string_append(decl," shared");
        if (mangled == (char *)0x0) {
          return (char *)0x0;
        }
      }
      else {
        if ('O' < cVar1) {
          if (cVar1 == 'x') {
            string_append(decl," const");
            return mangled + 1;
          }
          if (cVar1 == 'y') {
            string_append(decl," immutable");
            return mangled + 1;
          }
          return mangled;
        }
        if (cVar1 != 'N') {
          return mangled;
        }
        if (mangled[1] != 'g') {
          return (char *)0x0;
        }
        mangled = mangled + 2;
        string_append(decl," inout");
      }
      cVar1 = *mangled;
    }
  }
  return (char *)0x0;
}



char * FUN_00272200(undefined8 param_1,char *param_2)

{
  char cVar1;
  
  if (param_2 != (char *)0x0) {
    cVar1 = *param_2;
    while (cVar1 != '\0') {
      if (cVar1 == 'O') {
        param_2 = param_2 + 1;
        FUN_002720f0(param_1," shared");
        if (param_2 == (char *)0x0) {
          return (char *)0x0;
        }
      }
      else {
        if ('O' < cVar1) {
          if (cVar1 == 'x') {
            FUN_002720f0(param_1," const");
            return param_2 + 1;
          }
          if (cVar1 == 'y') {
            FUN_002720f0(param_1," immutable");
            return param_2 + 1;
          }
          return param_2;
        }
        if (cVar1 != 'N') {
          return param_2;
        }
        if (param_2[1] != 'g') {
          return (char *)0x0;
        }
        param_2 = param_2 + 2;
        FUN_002720f0(param_1," inout");
      }
      cVar1 = *param_2;
    }
  }
  return (char *)0x0;
}


PUSH R12
PUSH RBP
PUSH RBX
TEST RSI,RSI
JZ 0x00272275
MOVZX EDX,byte ptr [RSI]
MOV RBX,RSI
TEST DL,DL
JZ 0x00272275
MOV RBP,RDI
LEA R12,[0x327fd9]
CMP DL,0x4f
JZ 0x00272280
JLE 0x00272250
CMP DL,0x78
JZ 0x002722a0
CMP DL,0x79
JNZ 0x00272241
LEA RSI,[0x327fce]
MOV RDI,RBP
ADD RBX,0x1
CALL 0x002720f0
MOV RAX,RBX
POP RBX
POP RBP
POP R12
RET
CMP DL,0x4e
JNZ 0x00272241
CMP byte ptr [RBX + 0x1],0x67
JNZ 0x00272275
LEA RSI,[0x327fe1]
MOV RDI,RBP
ADD RBX,0x2
CALL 0x002720f0
MOVZX EDX,byte ptr [RBX]
TEST DL,DL
JNZ 0x0027221d
XOR EBX,EBX
JMP 0x00272241
ADD RBX,0x1
MOV RSI,R12
MOV RDI,RBP
CALL 0x002720f0
TEST RBX,RBX
JNZ 0x0027226e
XOR EBX,EBX
JMP 0x00272241
ADD RBX,0x1
MOV RDI,RBP
LEA RSI,[0x32773c]
CALL 0x002720f0
MOV RAX,RBX
POP RBX
POP RBP
POP R12
RET
(translation_unit "char * FUN_00272200(undefined8 param_1,char *param_2)\n\n{\n  char cVar1;\n  \n  if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }\n  return (char *)0x0;\n}\n\n" (function_definition "char * FUN_00272200(undefined8 param_1,char *param_2)\n\n{\n  char cVar1;\n  \n  if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }\n  return (char *)0x0;\n}" primitive_type (pointer_declarator "* FUN_00272200(undefined8 param_1,char *param_2)" * (function_declarator "FUN_00272200(undefined8 param_1,char *param_2)" identifier (parameter_list "(undefined8 param_1,char *param_2)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  char cVar1;\n  \n  if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }\n  return (char *)0x0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (if_statement "if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }" if (parenthesized_expression "(param_2 != (char *)0x0)" ( (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }" { (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (while_statement "while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }" while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }" { (if_statement "if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }" if (parenthesized_expression "(cVar1 == 'O')" ( (binary_expression "cVar1 == 'O'" identifier == (char_literal "'O'" ' character ')) )) (compound_statement "{\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }" { (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "FUN_002720f0(param_1," shared");" (call_expression "FUN_002720f0(param_1," shared")" identifier (argument_list "(param_1," shared")" ( identifier , (string_literal "" shared"" " string_content ") ))) ;) (if_statement "if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }" if (parenthesized_expression "(param_2 == (char *)0x0)" ( (binary_expression "param_2 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          return (char *)0x0;\n        }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) (else_clause "else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }" else (compound_statement "{\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }" { (if_statement "if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }" if (parenthesized_expression "('O' < cVar1)" ( (binary_expression "'O' < cVar1" (char_literal "'O'" ' character ') < identifier) )) (compound_statement "{\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }" { (if_statement "if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }" if (parenthesized_expression "(cVar1 == 'x')" ( (binary_expression "cVar1 == 'x'" identifier == (char_literal "'x'" ' character ')) )) (compound_statement "{\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }" { (expression_statement "FUN_002720f0(param_1," const");" (call_expression "FUN_002720f0(param_1," const")" identifier (argument_list "(param_1," const")" ( identifier , (string_literal "" const"" " string_content ") ))) ;) (return_statement "return param_2 + 1;" return (binary_expression "param_2 + 1" identifier + number_literal) ;) })) (if_statement "if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }" if (parenthesized_expression "(cVar1 == 'y')" ( (binary_expression "cVar1 == 'y'" identifier == (char_literal "'y'" ' character ')) )) (compound_statement "{\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }" { (expression_statement "FUN_002720f0(param_1," immutable");" (call_expression "FUN_002720f0(param_1," immutable")" identifier (argument_list "(param_1," immutable")" ( identifier , (string_literal "" immutable"" " string_content ") ))) ;) (return_statement "return param_2 + 1;" return (binary_expression "param_2 + 1" identifier + number_literal) ;) })) (return_statement "return param_2;" return identifier ;) })) (if_statement "if (cVar1 != 'N') {\n          return param_2;\n        }" if (parenthesized_expression "(cVar1 != 'N')" ( (binary_expression "cVar1 != 'N'" identifier != (char_literal "'N'" ' character ')) )) (compound_statement "{\n          return param_2;\n        }" { (return_statement "return param_2;" return identifier ;) })) (if_statement "if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }" if (parenthesized_expression "(param_2[1] != 'g')" ( (binary_expression "param_2[1] != 'g'" (subscript_expression "param_2[1]" identifier [ number_literal ]) != (char_literal "'g'" ' character ')) )) (compound_statement "{\n          return (char *)0x0;\n        }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "param_2 = param_2 + 2;" (assignment_expression "param_2 = param_2 + 2" identifier = (binary_expression "param_2 + 2" identifier + number_literal)) ;) (expression_statement "FUN_002720f0(param_1," inout");" (call_expression "FUN_002720f0(param_1," inout")" identifier (argument_list "(param_1," inout")" ( identifier , (string_literal "" inout"" " string_content ") ))) ;) }))) (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) })) })) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "char * dlang_type_modifiers(string *decl,char *mangled)\n\n{\n  char cVar1;\n  \n  if (mangled != (char *)0x0) {\n    cVar1 = *mangled;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        mangled = mangled + 1;\n        string_append(decl," shared");\n        if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }\n      cVar1 = *mangled;\n    }\n  }\n  return (char *)0x0;\n}\n\n" (function_definition "char * dlang_type_modifiers(string *decl,char *mangled)\n\n{\n  char cVar1;\n  \n  if (mangled != (char *)0x0) {\n    cVar1 = *mangled;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        mangled = mangled + 1;\n        string_append(decl," shared");\n        if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }\n      cVar1 = *mangled;\n    }\n  }\n  return (char *)0x0;\n}" primitive_type (pointer_declarator "* dlang_type_modifiers(string *decl,char *mangled)" * (function_declarator "dlang_type_modifiers(string *decl,char *mangled)" identifier (parameter_list "(string *decl,char *mangled)" ( (parameter_declaration "string *decl" type_identifier (pointer_declarator "*decl" * identifier)) , (parameter_declaration "char *mangled" primitive_type (pointer_declarator "*mangled" * identifier)) )))) (compound_statement "{\n  char cVar1;\n  \n  if (mangled != (char *)0x0) {\n    cVar1 = *mangled;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        mangled = mangled + 1;\n        string_append(decl," shared");\n        if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }\n      cVar1 = *mangled;\n    }\n  }\n  return (char *)0x0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (if_statement "if (mangled != (char *)0x0) {\n    cVar1 = *mangled;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        mangled = mangled + 1;\n        string_append(decl," shared");\n        if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }\n      cVar1 = *mangled;\n    }\n  }" if (parenthesized_expression "(mangled != (char *)0x0)" ( (binary_expression "mangled != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    cVar1 = *mangled;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        mangled = mangled + 1;\n        string_append(decl," shared");\n        if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }\n      cVar1 = *mangled;\n    }\n  }" { (expression_statement "cVar1 = *mangled;" (assignment_expression "cVar1 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) (while_statement "while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        mangled = mangled + 1;\n        string_append(decl," shared");\n        if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }\n      cVar1 = *mangled;\n    }" while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      if (cVar1 == 'O') {\n        mangled = mangled + 1;\n        string_append(decl," shared");\n        if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }\n      cVar1 = *mangled;\n    }" { (if_statement "if (cVar1 == 'O') {\n        mangled = mangled + 1;\n        string_append(decl," shared");\n        if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }" if (parenthesized_expression "(cVar1 == 'O')" ( (binary_expression "cVar1 == 'O'" identifier == (char_literal "'O'" ' character ')) )) (compound_statement "{\n        mangled = mangled + 1;\n        string_append(decl," shared");\n        if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }" { (expression_statement "mangled = mangled + 1;" (assignment_expression "mangled = mangled + 1" identifier = (binary_expression "mangled + 1" identifier + number_literal)) ;) (expression_statement "string_append(decl," shared");" (call_expression "string_append(decl," shared")" identifier (argument_list "(decl," shared")" ( identifier , (string_literal "" shared"" " string_content ") ))) ;) (if_statement "if (mangled == (char *)0x0) {\n          return (char *)0x0;\n        }" if (parenthesized_expression "(mangled == (char *)0x0)" ( (binary_expression "mangled == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          return (char *)0x0;\n        }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) (else_clause "else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }" else (compound_statement "{\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }\n        if (cVar1 != 'N') {\n          return mangled;\n        }\n        if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }\n        mangled = mangled + 2;\n        string_append(decl," inout");\n      }" { (if_statement "if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }" if (parenthesized_expression "('O' < cVar1)" ( (binary_expression "'O' < cVar1" (char_literal "'O'" ' character ') < identifier) )) (compound_statement "{\n          if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }\n          if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }\n          return mangled;\n        }" { (if_statement "if (cVar1 == 'x') {\n            string_append(decl," const");\n            return mangled + 1;\n          }" if (parenthesized_expression "(cVar1 == 'x')" ( (binary_expression "cVar1 == 'x'" identifier == (char_literal "'x'" ' character ')) )) (compound_statement "{\n            string_append(decl," const");\n            return mangled + 1;\n          }" { (expression_statement "string_append(decl," const");" (call_expression "string_append(decl," const")" identifier (argument_list "(decl," const")" ( identifier , (string_literal "" const"" " string_content ") ))) ;) (return_statement "return mangled + 1;" return (binary_expression "mangled + 1" identifier + number_literal) ;) })) (if_statement "if (cVar1 == 'y') {\n            string_append(decl," immutable");\n            return mangled + 1;\n          }" if (parenthesized_expression "(cVar1 == 'y')" ( (binary_expression "cVar1 == 'y'" identifier == (char_literal "'y'" ' character ')) )) (compound_statement "{\n            string_append(decl," immutable");\n            return mangled + 1;\n          }" { (expression_statement "string_append(decl," immutable");" (call_expression "string_append(decl," immutable")" identifier (argument_list "(decl," immutable")" ( identifier , (string_literal "" immutable"" " string_content ") ))) ;) (return_statement "return mangled + 1;" return (binary_expression "mangled + 1" identifier + number_literal) ;) })) (return_statement "return mangled;" return identifier ;) })) (if_statement "if (cVar1 != 'N') {\n          return mangled;\n        }" if (parenthesized_expression "(cVar1 != 'N')" ( (binary_expression "cVar1 != 'N'" identifier != (char_literal "'N'" ' character ')) )) (compound_statement "{\n          return mangled;\n        }" { (return_statement "return mangled;" return identifier ;) })) (if_statement "if (mangled[1] != 'g') {\n          return (char *)0x0;\n        }" if (parenthesized_expression "(mangled[1] != 'g')" ( (binary_expression "mangled[1] != 'g'" (subscript_expression "mangled[1]" identifier [ number_literal ]) != (char_literal "'g'" ' character ')) )) (compound_statement "{\n          return (char *)0x0;\n        }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "mangled = mangled + 2;" (assignment_expression "mangled = mangled + 2" identifier = (binary_expression "mangled + 2" identifier + number_literal)) ;) (expression_statement "string_append(decl," inout");" (call_expression "string_append(decl," inout")" identifier (argument_list "(decl," inout")" ( identifier , (string_literal "" inout"" " string_content ") ))) ;) }))) (expression_statement "cVar1 = *mangled;" (assignment_expression "cVar1 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) })) })) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit "char * FUN_00272200(undefined8 param_1,char *param_2)\n\n{\n  char cVar1;\n  \n  if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }\n  return (char *)0x0;\n}\n\n" (function_definition "char * FUN_00272200(undefined8 param_1,char *param_2)\n\n{\n  char cVar1;\n  \n  if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }\n  return (char *)0x0;\n}" primitive_type (pointer_declarator "* FUN_00272200(undefined8 param_1,char *param_2)" * (function_declarator "FUN_00272200(undefined8 param_1,char *param_2)" identifier (parameter_list "(undefined8 param_1,char *param_2)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  char cVar1;\n  \n  if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }\n  return (char *)0x0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (if_statement "if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }" if (parenthesized_expression "(param_2 != (char *)0x0)" ( (binary_expression "param_2 != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }" { (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (while_statement "while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }" while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }" { (if_statement "if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }" if (parenthesized_expression "(cVar1 == 'O')" ( (binary_expression "cVar1 == 'O'" identifier == (char_literal "'O'" ' character ')) )) (compound_statement "{\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }" { (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (expression_statement "FUN_002720f0(param_1," shared");" (call_expression "FUN_002720f0(param_1," shared")" identifier (argument_list "(param_1," shared")" ( identifier , (string_literal "" shared"" " string_content ") ))) ;) (if_statement "if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }" if (parenthesized_expression "(param_2 == (char *)0x0)" ( (binary_expression "param_2 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          return (char *)0x0;\n        }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) (else_clause "else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }" else (compound_statement "{\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }" { (if_statement "if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }" if (parenthesized_expression "('O' < cVar1)" ( (binary_expression "'O' < cVar1" (char_literal "'O'" ' character ') < identifier) )) (compound_statement "{\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }" { (if_statement "if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }" if (parenthesized_expression "(cVar1 == 'x')" ( (binary_expression "cVar1 == 'x'" identifier == (char_literal "'x'" ' character ')) )) (compound_statement "{\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }" { (expression_statement "FUN_002720f0(param_1," const");" (call_expression "FUN_002720f0(param_1," const")" identifier (argument_list "(param_1," const")" ( identifier , (string_literal "" const"" " string_content ") ))) ;) (return_statement "return param_2 + 1;" return (binary_expression "param_2 + 1" identifier + number_literal) ;) })) (if_statement "if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }" if (parenthesized_expression "(cVar1 == 'y')" ( (binary_expression "cVar1 == 'y'" identifier == (char_literal "'y'" ' character ')) )) (compound_statement "{\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }" { (expression_statement "FUN_002720f0(param_1," immutable");" (call_expression "FUN_002720f0(param_1," immutable")" identifier (argument_list "(param_1," immutable")" ( identifier , (string_literal "" immutable"" " string_content ") ))) ;) (return_statement "return param_2 + 1;" return (binary_expression "param_2 + 1" identifier + number_literal) ;) })) (return_statement "return param_2;" return identifier ;) })) (if_statement "if (cVar1 != 'N') {\n          return param_2;\n        }" if (parenthesized_expression "(cVar1 != 'N')" ( (binary_expression "cVar1 != 'N'" identifier != (char_literal "'N'" ' character ')) )) (compound_statement "{\n          return param_2;\n        }" { (return_statement "return param_2;" return identifier ;) })) (if_statement "if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }" if (parenthesized_expression "(param_2[1] != 'g')" ( (binary_expression "param_2[1] != 'g'" (subscript_expression "param_2[1]" identifier [ number_literal ]) != (char_literal "'g'" ' character ')) )) (compound_statement "{\n          return (char *)0x0;\n        }" { (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "param_2 = param_2 + 2;" (assignment_expression "param_2 = param_2 + 2" identifier = (binary_expression "param_2 + 2" identifier + number_literal)) ;) (expression_statement "FUN_002720f0(param_1," inout");" (call_expression "FUN_002720f0(param_1," inout")" identifier (argument_list "(param_1," inout")" ( identifier , (string_literal "" inout"" " string_content ") ))) ;) }))) (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) })) })) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (while_statement while (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (char_literal ' character ') < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") ))) ;) (return_statement return (binary_expression IDENT + LIT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") ))) ;) (return_statement return (binary_expression IDENT + LIT) ;) })) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' character ')) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != (char_literal ' character ')) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") ))) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) })) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })))
(function_definition "char * FUN_00272200(undefined8 param_1,char *param_2)\n\n{\n  char cVar1;\n  \n  if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }\n  return (char *)0x0;\n}" (primitive_type "char") (pointer_declarator "* FUN_00272200(undefined8 param_1,char *param_2)" (* "*") (function_declarator "FUN_00272200(undefined8 param_1,char *param_2)" (identifier "FUN_00272200") (parameter_list "(undefined8 param_1,char *param_2)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")")))) (compound_statement "{\n  char cVar1;\n  \n  if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }\n  return (char *)0x0;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (if_statement "if (param_2 != (char *)0x0) {\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }" (if "if") (parenthesized_expression "(param_2 != (char *)0x0)" (( "(") (binary_expression "param_2 != (char *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    cVar1 = *param_2;\n    while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }\n  }" ({ "{") (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" (identifier "cVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (while_statement "while (cVar1 != '\0') {\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }" (while "while") (parenthesized_expression "(cVar1 != '\0')" (( "(") (binary_expression "cVar1 != '\0'" (identifier "cVar1") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }\n      cVar1 = *param_2;\n    }" ({ "{") (if_statement "if (cVar1 == 'O') {\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }\n      else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }" (if "if") (parenthesized_expression "(cVar1 == 'O')" (( "(") (binary_expression "cVar1 == 'O'" (identifier "cVar1") (== "==") (char_literal "'O'" (' "'") (character "O") (' "'"))) () ")")) (compound_statement "{\n        param_2 = param_2 + 1;\n        FUN_002720f0(param_1," shared");\n        if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }\n      }" ({ "{") (expression_statement "param_2 = param_2 + 1;" (assignment_expression "param_2 = param_2 + 1" (identifier "param_2") (= "=") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "FUN_002720f0(param_1," shared");" (call_expression "FUN_002720f0(param_1," shared")" (identifier "FUN_002720f0") (argument_list "(param_1," shared")" (( "(") (identifier "param_1") (, ",") (string_literal "" shared"" (" """) (string_content " shared") (" """)) () ")"))) (; ";")) (if_statement "if (param_2 == (char *)0x0) {\n          return (char *)0x0;\n        }" (if "if") (parenthesized_expression "(param_2 == (char *)0x0)" (( "(") (binary_expression "param_2 == (char *)0x0" (identifier "param_2") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          return (char *)0x0;\n        }" ({ "{") (return_statement "return (char *)0x0;" (return "return") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }" (else "else") (compound_statement "{\n        if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }\n        if (cVar1 != 'N') {\n          return param_2;\n        }\n        if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }\n        param_2 = param_2 + 2;\n        FUN_002720f0(param_1," inout");\n      }" ({ "{") (if_statement "if ('O' < cVar1) {\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }" (if "if") (parenthesized_expression "('O' < cVar1)" (( "(") (binary_expression "'O' < cVar1" (char_literal "'O'" (' "'") (character "O") (' "'")) (< "<") (identifier "cVar1")) () ")")) (compound_statement "{\n          if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }\n          if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }\n          return param_2;\n        }" ({ "{") (if_statement "if (cVar1 == 'x') {\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }" (if "if") (parenthesized_expression "(cVar1 == 'x')" (( "(") (binary_expression "cVar1 == 'x'" (identifier "cVar1") (== "==") (char_literal "'x'" (' "'") (character "x") (' "'"))) () ")")) (compound_statement "{\n            FUN_002720f0(param_1," const");\n            return param_2 + 1;\n          }" ({ "{") (expression_statement "FUN_002720f0(param_1," const");" (call_expression "FUN_002720f0(param_1," const")" (identifier "FUN_002720f0") (argument_list "(param_1," const")" (( "(") (identifier "param_1") (, ",") (string_literal "" const"" (" """) (string_content " const") (" """)) () ")"))) (; ";")) (return_statement "return param_2 + 1;" (return "return") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1")) (; ";")) (} "}"))) (if_statement "if (cVar1 == 'y') {\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }" (if "if") (parenthesized_expression "(cVar1 == 'y')" (( "(") (binary_expression "cVar1 == 'y'" (identifier "cVar1") (== "==") (char_literal "'y'" (' "'") (character "y") (' "'"))) () ")")) (compound_statement "{\n            FUN_002720f0(param_1," immutable");\n            return param_2 + 1;\n          }" ({ "{") (expression_statement "FUN_002720f0(param_1," immutable");" (call_expression "FUN_002720f0(param_1," immutable")" (identifier "FUN_002720f0") (argument_list "(param_1," immutable")" (( "(") (identifier "param_1") (, ",") (string_literal "" immutable"" (" """) (string_content " immutable") (" """)) () ")"))) (; ";")) (return_statement "return param_2 + 1;" (return "return") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1")) (; ";")) (} "}"))) (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}"))) (if_statement "if (cVar1 != 'N') {\n          return param_2;\n        }" (if "if") (parenthesized_expression "(cVar1 != 'N')" (( "(") (binary_expression "cVar1 != 'N'" (identifier "cVar1") (!= "!=") (char_literal "'N'" (' "'") (character "N") (' "'"))) () ")")) (compound_statement "{\n          return param_2;\n        }" ({ "{") (return_statement "return param_2;" (return "return") (identifier "param_2") (; ";")) (} "}"))) (if_statement "if (param_2[1] != 'g') {\n          return (char *)0x0;\n        }" (if "if") (parenthesized_expression "(param_2[1] != 'g')" (( "(") (binary_expression "param_2[1] != 'g'" (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")) (!= "!=") (char_literal "'g'" (' "'") (character "g") (' "'"))) () ")")) (compound_statement "{\n          return (char *)0x0;\n        }" ({ "{") (return_statement "return (char *)0x0;" (return "return") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "param_2 = param_2 + 2;" (assignment_expression "param_2 = param_2 + 2" (identifier "param_2") (= "=") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "FUN_002720f0(param_1," inout");" (call_expression "FUN_002720f0(param_1," inout")" (identifier "FUN_002720f0") (argument_list "(param_1," inout")" (( "(") (identifier "param_1") (, ",") (string_literal "" inout"" (" """) (string_content " inout") (" """)) () ")"))) (; ";")) (} "}")))) (expression_statement "cVar1 = *param_2;" (assignment_expression "cVar1 = *param_2" (identifier "cVar1") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (} "}"))) (} "}"))) (return_statement "return (char *)0x0;" (return "return") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}")))

char * function_1(type_1 *decl,char *var_1)

{
  char var_2;
  
  if (var_1 != (char *)0x0) {
    var_2 = *var_1;
    while (var_2 != '\0') {
      if (var_2 == 'O') {
        var_1 = var_1 + 1;
        var_3(decl," shared");
        if (var_1 == (char *)0x0) {
          return (char *)0x0;
        }
      }
      else {
        if ('O' < var_2) {
          if (var_2 == 'x') {
            var_3(decl," const");
            return var_1 + 1;
          }
          if (var_2 == 'y') {
            var_3(decl," immutable");
            return var_1 + 1;
          }
          return var_1;
        }
        if (var_2 != 'N') {
          return var_1;
        }
        if (var_1[1] != 'g') {
          return (char *)0x0;
        }
        var_1 = var_1 + 2;
        var_3(decl," inout");
      }
      var_2 = *var_1;
    }
  }
  return (char *)0x0;
}


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

char * MASKED(undefined8 param_1,char *param_2)

{
  char cVar1;
  
  if (param_2 != (char *)0x0) {
    cVar1 = *param_2;
    while (cVar1 != '\0') {
      if (cVar1 == 'O') {
        param_2 = param_2 + 1;
        FUN_002720f0(param_1," shared");
        if (param_2 == (char *)0x0) {
          return (char *)0x0;
        }
      }
      else {
        if ('O' < cVar1) {
          if (cVar1 == 'x') {
            FUN_002720f0(param_1," const");
            return param_2 + 1;
          }
          if (cVar1 == 'y') {
            FUN_002720f0(param_1," immutable");
            return param_2 + 1;
          }
          return param_2;
        }
        if (cVar1 != 'N') {
          return param_2;
        }
        if (param_2[1] != 'g') {
          return (char *)0x0;
        }
        param_2 = param_2 + 2;
        FUN_002720f0(param_1," inout");
      }
      cVar1 = *param_2;
    }
  }
  return (char *)0x0;
}

