
char * rust_demangle(char *mangled,int options)

{
  int iVar1;
  char *sym;
  
  sym = cplus_demangle_v3(mangled,options);
  if (sym != (char *)0x0) {
    iVar1 = rust_is_mangled(sym);
    if (iVar1 == 0) {
      free(sym);
      return (char *)0x0;
    }
    rust_demangle_sym(sym);
  }
  return sym;
}



void * FUN_0028b240(void)

{
  int iVar1;
  void *__ptr;
  
  __ptr = (void *)FUN_0029aba0();
  if (__ptr != (void *)0x0) {
    iVar1 = FUN_002a0420(__ptr);
    if (iVar1 == 0) {
      free(__ptr);
      return (void *)0x0;
    }
    FUN_002a08d0();
  }
  return __ptr;
}


PUSH RBX
CALL 0x0029aba0
MOV RBX,RAX
TEST RAX,RAX
JZ 0x0028b262
MOV RDI,RAX
CALL 0x002a0420
MOV RDI,RBX
TEST EAX,EAX
JZ 0x0028b270
CALL 0x002a08d0
MOV RAX,RBX
POP RBX
RET
CALL 0x00144470
XOR EBX,EBX
MOV RAX,RBX
POP RBX
RET
(translation_unit "void * FUN_0028b240(void)\n\n{\n  int iVar1;\n  void *__ptr;\n  \n  __ptr = (void *)FUN_0029aba0();\n  if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }\n  return __ptr;\n}\n\n" (function_definition "void * FUN_0028b240(void)\n\n{\n  int iVar1;\n  void *__ptr;\n  \n  __ptr = (void *)FUN_0029aba0();\n  if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }\n  return __ptr;\n}" primitive_type (pointer_declarator "* FUN_0028b240(void)" * (function_declarator "FUN_0028b240(void)" identifier (parameter_list "(void)" ( (parameter_declaration "void" primitive_type) )))) (compound_statement "{\n  int iVar1;\n  void *__ptr;\n  \n  __ptr = (void *)FUN_0029aba0();\n  if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }\n  return __ptr;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (expression_statement "__ptr = (void *)FUN_0029aba0();" (assignment_expression "__ptr = (void *)FUN_0029aba0()" identifier = (cast_expression "(void *)FUN_0029aba0()" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0029aba0()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }" if (parenthesized_expression "(__ptr != (void *)0x0)" ( (binary_expression "__ptr != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }" { (expression_statement "iVar1 = FUN_002a0420(__ptr);" (assignment_expression "iVar1 = FUN_002a0420(__ptr)" identifier = (call_expression "FUN_002a0420(__ptr)" identifier (argument_list "(__ptr)" ( identifier )))) ;) (if_statement "if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      free(__ptr);\n      return (void *)0x0;\n    }" { (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return (void *)0x0;" return (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "FUN_002a08d0();" (call_expression "FUN_002a08d0()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return __ptr;" return identifier ;) })))
(translation_unit "char * rust_demangle(char *mangled,int options)\n\n{\n  int iVar1;\n  char *sym;\n  \n  sym = cplus_demangle_v3(mangled,options);\n  if (sym != (char *)0x0) {\n    iVar1 = rust_is_mangled(sym);\n    if (iVar1 == 0) {\n      free(sym);\n      return (char *)0x0;\n    }\n    rust_demangle_sym(sym);\n  }\n  return sym;\n}\n\n" (function_definition "char * rust_demangle(char *mangled,int options)\n\n{\n  int iVar1;\n  char *sym;\n  \n  sym = cplus_demangle_v3(mangled,options);\n  if (sym != (char *)0x0) {\n    iVar1 = rust_is_mangled(sym);\n    if (iVar1 == 0) {\n      free(sym);\n      return (char *)0x0;\n    }\n    rust_demangle_sym(sym);\n  }\n  return sym;\n}" primitive_type (pointer_declarator "* rust_demangle(char *mangled,int options)" * (function_declarator "rust_demangle(char *mangled,int options)" identifier (parameter_list "(char *mangled,int options)" ( (parameter_declaration "char *mangled" primitive_type (pointer_declarator "*mangled" * identifier)) , (parameter_declaration "int options" primitive_type identifier) )))) (compound_statement "{\n  int iVar1;\n  char *sym;\n  \n  sym = cplus_demangle_v3(mangled,options);\n  if (sym != (char *)0x0) {\n    iVar1 = rust_is_mangled(sym);\n    if (iVar1 == 0) {\n      free(sym);\n      return (char *)0x0;\n    }\n    rust_demangle_sym(sym);\n  }\n  return sym;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char *sym;" primitive_type (pointer_declarator "*sym" * identifier) ;) (expression_statement "sym = cplus_demangle_v3(mangled,options);" (assignment_expression "sym = cplus_demangle_v3(mangled,options)" identifier = (call_expression "cplus_demangle_v3(mangled,options)" identifier (argument_list "(mangled,options)" ( identifier , identifier )))) ;) (if_statement "if (sym != (char *)0x0) {\n    iVar1 = rust_is_mangled(sym);\n    if (iVar1 == 0) {\n      free(sym);\n      return (char *)0x0;\n    }\n    rust_demangle_sym(sym);\n  }" if (parenthesized_expression "(sym != (char *)0x0)" ( (binary_expression "sym != (char *)0x0" identifier != (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar1 = rust_is_mangled(sym);\n    if (iVar1 == 0) {\n      free(sym);\n      return (char *)0x0;\n    }\n    rust_demangle_sym(sym);\n  }" { (expression_statement "iVar1 = rust_is_mangled(sym);" (assignment_expression "iVar1 = rust_is_mangled(sym)" identifier = (call_expression "rust_is_mangled(sym)" identifier (argument_list "(sym)" ( identifier )))) ;) (if_statement "if (iVar1 == 0) {\n      free(sym);\n      return (char *)0x0;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      free(sym);\n      return (char *)0x0;\n    }" { (expression_statement "free(sym);" (call_expression "free(sym)" identifier (argument_list "(sym)" ( identifier ))) ;) (return_statement "return (char *)0x0;" return (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "rust_demangle_sym(sym);" (call_expression "rust_demangle_sym(sym)" identifier (argument_list "(sym)" ( identifier ))) ;) })) (return_statement "return sym;" return identifier ;) })))
(translation_unit "void * FUN_0028b240(void)\n\n{\n  int iVar1;\n  void *__ptr;\n  \n  __ptr = (void *)FUN_0029aba0();\n  if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }\n  return __ptr;\n}\n\n" (function_definition "void * FUN_0028b240(void)\n\n{\n  int iVar1;\n  void *__ptr;\n  \n  __ptr = (void *)FUN_0029aba0();\n  if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }\n  return __ptr;\n}" primitive_type (pointer_declarator "* FUN_0028b240(void)" * (function_declarator "FUN_0028b240(void)" identifier (parameter_list "(void)" ( (parameter_declaration "void" primitive_type) )))) (compound_statement "{\n  int iVar1;\n  void *__ptr;\n  \n  __ptr = (void *)FUN_0029aba0();\n  if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }\n  return __ptr;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "void *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (expression_statement "__ptr = (void *)FUN_0029aba0();" (assignment_expression "__ptr = (void *)FUN_0029aba0()" identifier = (cast_expression "(void *)FUN_0029aba0()" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0029aba0()" identifier (argument_list "()" ( ))))) ;) (if_statement "if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }" if (parenthesized_expression "(__ptr != (void *)0x0)" ( (binary_expression "__ptr != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }" { (expression_statement "iVar1 = FUN_002a0420(__ptr);" (assignment_expression "iVar1 = FUN_002a0420(__ptr)" identifier = (call_expression "FUN_002a0420(__ptr)" identifier (argument_list "(__ptr)" ( identifier )))) ;) (if_statement "if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n      free(__ptr);\n      return (void *)0x0;\n    }" { (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) (return_statement "return (void *)0x0;" return (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "FUN_002a08d0();" (call_expression "FUN_002a08d0()" identifier (argument_list "()" ( ))) ;) })) (return_statement "return __ptr;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (return_statement return IDENT ;) })))
(function_definition "void * FUN_0028b240(void)\n\n{\n  int iVar1;\n  void *__ptr;\n  \n  __ptr = (void *)FUN_0029aba0();\n  if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }\n  return __ptr;\n}" (primitive_type "void") (pointer_declarator "* FUN_0028b240(void)" (* "*") (function_declarator "FUN_0028b240(void)" (identifier "FUN_0028b240") (parameter_list "(void)" (( "(") (parameter_declaration "void" (primitive_type "void")) () ")")))) (compound_statement "{\n  int iVar1;\n  void *__ptr;\n  \n  __ptr = (void *)FUN_0029aba0();\n  if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }\n  return __ptr;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "void *__ptr;" (primitive_type "void") (pointer_declarator "*__ptr" (* "*") (identifier "__ptr")) (; ";")) (expression_statement "__ptr = (void *)FUN_0029aba0();" (assignment_expression "__ptr = (void *)FUN_0029aba0()" (identifier "__ptr") (= "=") (cast_expression "(void *)FUN_0029aba0()" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0029aba0()" (identifier "FUN_0029aba0") (argument_list "()" (( "(") () ")"))))) (; ";")) (if_statement "if (__ptr != (void *)0x0) {\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }" (if "if") (parenthesized_expression "(__ptr != (void *)0x0)" (( "(") (binary_expression "__ptr != (void *)0x0" (identifier "__ptr") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    iVar1 = FUN_002a0420(__ptr);\n    if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }\n    FUN_002a08d0();\n  }" ({ "{") (expression_statement "iVar1 = FUN_002a0420(__ptr);" (assignment_expression "iVar1 = FUN_002a0420(__ptr)" (identifier "iVar1") (= "=") (call_expression "FUN_002a0420(__ptr)" (identifier "FUN_002a0420") (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n      free(__ptr);\n      return (void *)0x0;\n    }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      free(__ptr);\n      return (void *)0x0;\n    }" ({ "{") (expression_statement "free(__ptr);" (call_expression "free(__ptr)" (identifier "free") (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")"))) (; ";")) (return_statement "return (void *)0x0;" (return "return") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "FUN_002a08d0();" (call_expression "FUN_002a08d0()" (identifier "FUN_002a08d0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (return_statement "return __ptr;" (return "return") (identifier "__ptr") (; ";")) (} "}")))

char * function_1(char *mangled,int options)

{
  int var_4;
  char *var_2;
  
  var_2 = var_1(mangled,options);
  if (var_2 != (char *)0x0) {
    var_4 = var_3(var_2);
    if (var_4 == 0) {
      var_5(var_2);
      return (char *)0x0;
    }
    var_6(var_2);
  }
  return var_2;
}


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

void * MASKED(void)

{
  int iVar1;
  void *__ptr;
  
  __ptr = (void *)FUN_0029aba0();
  if (__ptr != (void *)0x0) {
    iVar1 = FUN_002a0420(__ptr);
    if (iVar1 == 0) {
      free(__ptr);
      return (void *)0x0;
    }
    FUN_002a08d0();
  }
  return __ptr;
}

