
/* std::ios::imbue(std::locale const&) */

locale * std::ios::imbue(locale *param_1)

{
  long *plVar1;
  locale *in_RDX;
  ios *in_RSI;
  locale local_30 [8];
  
  locale::locale(param_1,(locale *)(in_RSI + 0xd0));
  ios_base::imbue(local_30);
  locale::~locale(local_30);
                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */
  _M_cache_locale(in_RSI,in_RDX);
  plVar1 = *(long **)(in_RSI + 0xe8);
  if (plVar1 != (long *)0x0) {
    locale::locale(local_30,(locale *)(plVar1 + 7));
                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */
    (**(code **)(*plVar1 + 0x10))(plVar1);
    locale::operator=((locale *)(plVar1 + 7),in_RDX);
    locale::~locale(local_30);
  }
  return param_1;
}



undefined8 FUN_00300f10(undefined8 param_1,long param_2,undefined8 param_3)

{
  long *plVar1;
  undefined1 local_30 [8];
  
  FUN_002dca60(param_1,param_2 + 0xd0);
  FUN_003246a0(local_30,param_2,param_3);
  FUN_002dd1a0(local_30);
                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */
  FUN_00300bb0(param_2,param_3);
  plVar1 = *(long **)(param_2 + 0xe8);
  if (plVar1 != (long *)0x0) {
    FUN_002dca60(local_30,plVar1 + 7);
                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */
    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);
    FUN_002dd110(plVar1 + 7,param_3);
    FUN_002dd1a0(local_30);
  }
  return param_1;
}


PUSH R14
PUSH R13
MOV R13,RDI
PUSH R12
MOV R12,RDX
PUSH RBP
PUSH RBX
MOV RBX,RSI
LEA RSI,[RSI + 0xd0]
SUB RSP,0x10
CALL 0x002dca60
LEA RBP,[RSP + 0x8]
MOV RSI,RBX
MOV RDX,R12
MOV RDI,RBP
CALL 0x003246a0
MOV RDI,RBP
CALL 0x002dd1a0
MOV RSI,R12
MOV RDI,RBX
CALL 0x00300bb0
MOV RBX,qword ptr [RBX + 0xe8]
TEST RBX,RBX
JZ 0x00300f91
LEA R14,[RBX + 0x38]
MOV RDI,RBP
MOV RSI,R14
CALL 0x002dca60
MOV RAX,qword ptr [RBX]
MOV RSI,R12
MOV RDI,RBX
CALL qword ptr [RAX + 0x10]
MOV RDI,R14
MOV RSI,R12
CALL 0x002dd110
MOV RDI,RBP
CALL 0x002dd1a0
ADD RSP,0x10
MOV RAX,R13
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
(translation_unit "undefined8 FUN_00300f10(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  long *plVar1;\n  undefined1 local_30 [8];\n  \n  FUN_002dca60(param_1,param_2 + 0xd0);\n  FUN_003246a0(local_30,param_2,param_3);\n  FUN_002dd1a0(local_30);\n                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */\n  FUN_00300bb0(param_2,param_3);\n  plVar1 = *(long **)(param_2 + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }\n  return param_1;\n}\n\n" (function_definition "undefined8 FUN_00300f10(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  long *plVar1;\n  undefined1 local_30 [8];\n  \n  FUN_002dca60(param_1,param_2 + 0xd0);\n  FUN_003246a0(local_30,param_2,param_3);\n  FUN_002dd1a0(local_30);\n                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */\n  FUN_00300bb0(param_2,param_3);\n  plVar1 = *(long **)(param_2 + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }\n  return param_1;\n}" type_identifier (function_declarator "FUN_00300f10(undefined8 param_1,long param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 param_1,long param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  long *plVar1;\n  undefined1 local_30 [8];\n  \n  FUN_002dca60(param_1,param_2 + 0xd0);\n  FUN_003246a0(local_30,param_2,param_3);\n  FUN_002dd1a0(local_30);\n                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */\n  FUN_00300bb0(param_2,param_3);\n  plVar1 = *(long **)(param_2 + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }\n  return param_1;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "undefined1 local_30 [8];" type_identifier (array_declarator "local_30 [8]" identifier [ number_literal ]) ;) (expression_statement "FUN_002dca60(param_1,param_2 + 0xd0);" (call_expression "FUN_002dca60(param_1,param_2 + 0xd0)" identifier (argument_list "(param_1,param_2 + 0xd0)" ( identifier , (binary_expression "param_2 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_003246a0(local_30,param_2,param_3);" (call_expression "FUN_003246a0(local_30,param_2,param_3)" identifier (argument_list "(local_30,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "FUN_002dd1a0(local_30);" (call_expression "FUN_002dd1a0(local_30)" identifier (argument_list "(local_30)" ( identifier ))) ;) comment (expression_statement "FUN_00300bb0(param_2,param_3);" (call_expression "FUN_00300bb0(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier ))) ;) (expression_statement "plVar1 = *(long **)(param_2 + 0xe8);" (assignment_expression "plVar1 = *(long **)(param_2 + 0xe8)" identifier = (pointer_expression "*(long **)(param_2 + 0xe8)" * (cast_expression "(long **)(param_2 + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0xe8)" ( (binary_expression "param_2 + 0xe8" identifier + number_literal) ))))) ;) (if_statement "if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }" if (parenthesized_expression "(plVar1 != (long *)0x0)" ( (binary_expression "plVar1 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_002dca60(local_30,plVar1 + 7);\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }" { (expression_statement "FUN_002dca60(local_30,plVar1 + 7);" (call_expression "FUN_002dca60(local_30,plVar1 + 7)" identifier (argument_list "(local_30,plVar1 + 7)" ( identifier , (binary_expression "plVar1 + 7" identifier + number_literal) ))) ;) comment (expression_statement "(**(code **)(*plVar1 + 0x10))(plVar1,param_3);" (call_expression "(**(code **)(*plVar1 + 0x10))(plVar1,param_3)" (parenthesized_expression "(**(code **)(*plVar1 + 0x10))" ( (pointer_expression "**(code **)(*plVar1 + 0x10)" * (pointer_expression "*(code **)(*plVar1 + 0x10)" * (cast_expression "(code **)(*plVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x10)" ( (binary_expression "*plVar1 + 0x10" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1,param_3)" ( identifier , identifier ))) ;) (expression_statement "FUN_002dd110(plVar1 + 7,param_3);" (call_expression "FUN_002dd110(plVar1 + 7,param_3)" identifier (argument_list "(plVar1 + 7,param_3)" ( (binary_expression "plVar1 + 7" identifier + number_literal) , identifier ))) ;) (expression_statement "FUN_002dd1a0(local_30);" (call_expression "FUN_002dd1a0(local_30)" identifier (argument_list "(local_30)" ( identifier ))) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* std::ios::imbue(std::locale const&) */\n\nlocale * std::ios::imbue(locale *param_1)\n\n{\n  long *plVar1;\n  locale *in_RDX;\n  ios *in_RSI;\n  locale local_30 [8];\n  \n  locale::locale(param_1,(locale *)(in_RSI + 0xd0));\n  ios_base::imbue(local_30);\n  locale::~locale(local_30);\n                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */\n  _M_cache_locale(in_RSI,in_RDX);\n  plVar1 = *(long **)(in_RSI + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    locale::locale(local_30,(locale *)(plVar1 + 7));\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1);\n    locale::operator=((locale *)(plVar1 + 7),in_RDX);\n    locale::~locale(local_30);\n  }\n  return param_1;\n}\n\n" comment (ERROR "locale * std::" (binary_expression "locale * std" identifier * identifier) : :) (labeled_statement "ios::imbue(locale *param_1)\n\n{\n  long *plVar1;\n  locale *in_RDX;\n  ios *in_RSI;\n  locale local_30 [8];\n  \n  locale::locale(param_1,(locale *)(in_RSI + 0xd0));\n  ios_base::imbue(local_30);\n  locale::~locale(local_30);\n                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */\n  _M_cache_locale(in_RSI,in_RDX);\n  plVar1 = *(long **)(in_RSI + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    locale::locale(local_30,(locale *)(plVar1 + 7));\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1);\n    locale::operator=((locale *)(plVar1 + 7),in_RDX);\n    locale::~locale(local_30);\n  }\n  return param_1;\n}" statement_identifier : (ERROR ":imbue(locale *param_1)" : (call_expression "imbue(locale *param_1)" identifier (argument_list "(locale *param_1)" ( (binary_expression "locale *param_1" identifier * identifier) )))) (compound_statement "{\n  long *plVar1;\n  locale *in_RDX;\n  ios *in_RSI;\n  locale local_30 [8];\n  \n  locale::locale(param_1,(locale *)(in_RSI + 0xd0));\n  ios_base::imbue(local_30);\n  locale::~locale(local_30);\n                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */\n  _M_cache_locale(in_RSI,in_RDX);\n  plVar1 = *(long **)(in_RSI + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    locale::locale(local_30,(locale *)(plVar1 + 7));\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1);\n    locale::operator=((locale *)(plVar1 + 7),in_RDX);\n    locale::~locale(local_30);\n  }\n  return param_1;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "locale *in_RDX;" type_identifier (pointer_declarator "*in_RDX" * identifier) ;) (declaration "ios *in_RSI;" type_identifier (pointer_declarator "*in_RSI" * identifier) ;) (declaration "locale local_30 [8];" type_identifier (array_declarator "local_30 [8]" identifier [ number_literal ]) ;) (labeled_statement "locale::locale(param_1,(locale *)(in_RSI + 0xd0));" statement_identifier : (ERROR ":" :) (expression_statement "locale(param_1,(locale *)(in_RSI + 0xd0));" (call_expression "locale(param_1,(locale *)(in_RSI + 0xd0))" identifier (argument_list "(param_1,(locale *)(in_RSI + 0xd0))" ( identifier , (cast_expression "(locale *)(in_RSI + 0xd0)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_RSI + 0xd0)" ( (binary_expression "in_RSI + 0xd0" identifier + number_literal) ))) ))) ;)) (labeled_statement "ios_base::imbue(local_30);" statement_identifier : (ERROR ":" :) (expression_statement "imbue(local_30);" (call_expression "imbue(local_30)" identifier (argument_list "(local_30)" ( identifier ))) ;)) (labeled_statement "locale::~locale(local_30);" statement_identifier : (ERROR ":" :) (expression_statement "~locale(local_30);" (unary_expression "~locale(local_30)" ~ (call_expression "locale(local_30)" identifier (argument_list "(local_30)" ( identifier )))) ;)) comment (expression_statement "_M_cache_locale(in_RSI,in_RDX);" (call_expression "_M_cache_locale(in_RSI,in_RDX)" identifier (argument_list "(in_RSI,in_RDX)" ( identifier , identifier ))) ;) (expression_statement "plVar1 = *(long **)(in_RSI + 0xe8);" (assignment_expression "plVar1 = *(long **)(in_RSI + 0xe8)" identifier = (pointer_expression "*(long **)(in_RSI + 0xe8)" * (cast_expression "(long **)(in_RSI + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(in_RSI + 0xe8)" ( (binary_expression "in_RSI + 0xe8" identifier + number_literal) ))))) ;) (if_statement "if (plVar1 != (long *)0x0) {\n    locale::locale(local_30,(locale *)(plVar1 + 7));\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1);\n    locale::operator=((locale *)(plVar1 + 7),in_RDX);\n    locale::~locale(local_30);\n  }" if (parenthesized_expression "(plVar1 != (long *)0x0)" ( (binary_expression "plVar1 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    locale::locale(local_30,(locale *)(plVar1 + 7));\n                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */\n    (**(code **)(*plVar1 + 0x10))(plVar1);\n    locale::operator=((locale *)(plVar1 + 7),in_RDX);\n    locale::~locale(local_30);\n  }" { (labeled_statement "locale::locale(local_30,(locale *)(plVar1 + 7));" statement_identifier : (ERROR ":" :) (expression_statement "locale(local_30,(locale *)(plVar1 + 7));" (call_expression "locale(local_30,(locale *)(plVar1 + 7))" identifier (argument_list "(local_30,(locale *)(plVar1 + 7))" ( identifier , (cast_expression "(locale *)(plVar1 + 7)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar1 + 7)" ( (binary_expression "plVar1 + 7" identifier + number_literal) ))) ))) ;)) comment (expression_statement "(**(code **)(*plVar1 + 0x10))(plVar1);" (call_expression "(**(code **)(*plVar1 + 0x10))(plVar1)" (parenthesized_expression "(**(code **)(*plVar1 + 0x10))" ( (pointer_expression "**(code **)(*plVar1 + 0x10)" * (pointer_expression "*(code **)(*plVar1 + 0x10)" * (cast_expression "(code **)(*plVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x10)" ( (binary_expression "*plVar1 + 0x10" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1)" ( identifier ))) ;) (labeled_statement "locale::operator=((locale *)(plVar1 + 7),in_RDX);" statement_identifier : (ERROR ":" :) (expression_statement "operator=((locale *)(plVar1 + 7),in_RDX);" (assignment_expression "operator=((locale *)(plVar1 + 7),in_RDX)" identifier = (parenthesized_expression "((locale *)(plVar1 + 7),in_RDX)" ( (comma_expression "(locale *)(plVar1 + 7),in_RDX" (cast_expression "(locale *)(plVar1 + 7)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar1 + 7)" ( (binary_expression "plVar1 + 7" identifier + number_literal) ))) , identifier) ))) ;)) (labeled_statement "locale::~locale(local_30);" statement_identifier : (ERROR ":" :) (expression_statement "~locale(local_30);" (unary_expression "~locale(local_30)" ~ (call_expression "locale(local_30)" identifier (argument_list "(local_30)" ( identifier )))) ;)) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "undefined8 FUN_00300f10(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  long *plVar1;\n  undefined1 local_30 [8];\n  \n  FUN_002dca60(param_1,param_2 + 0xd0);\n  FUN_003246a0(local_30,param_2,param_3);\n  FUN_002dd1a0(local_30);\n                    \n  FUN_00300bb0(param_2,param_3);\n  plVar1 = *(long **)(param_2 + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    \n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }\n  return param_1;\n}\n\n" (function_definition "undefined8 FUN_00300f10(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  long *plVar1;\n  undefined1 local_30 [8];\n  \n  FUN_002dca60(param_1,param_2 + 0xd0);\n  FUN_003246a0(local_30,param_2,param_3);\n  FUN_002dd1a0(local_30);\n                    \n  FUN_00300bb0(param_2,param_3);\n  plVar1 = *(long **)(param_2 + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    \n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }\n  return param_1;\n}" type_identifier (function_declarator "FUN_00300f10(undefined8 param_1,long param_2,undefined8 param_3)" identifier (parameter_list "(undefined8 param_1,long param_2,undefined8 param_3)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_3" type_identifier identifier) ))) (compound_statement "{\n  long *plVar1;\n  undefined1 local_30 [8];\n  \n  FUN_002dca60(param_1,param_2 + 0xd0);\n  FUN_003246a0(local_30,param_2,param_3);\n  FUN_002dd1a0(local_30);\n                    \n  FUN_00300bb0(param_2,param_3);\n  plVar1 = *(long **)(param_2 + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    \n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }\n  return param_1;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "undefined1 local_30 [8];" type_identifier (array_declarator "local_30 [8]" identifier [ number_literal ]) ;) (expression_statement "FUN_002dca60(param_1,param_2 + 0xd0);" (call_expression "FUN_002dca60(param_1,param_2 + 0xd0)" identifier (argument_list "(param_1,param_2 + 0xd0)" ( identifier , (binary_expression "param_2 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_003246a0(local_30,param_2,param_3);" (call_expression "FUN_003246a0(local_30,param_2,param_3)" identifier (argument_list "(local_30,param_2,param_3)" ( identifier , identifier , identifier ))) ;) (expression_statement "FUN_002dd1a0(local_30);" (call_expression "FUN_002dd1a0(local_30)" identifier (argument_list "(local_30)" ( identifier ))) ;) (expression_statement "FUN_00300bb0(param_2,param_3);" (call_expression "FUN_00300bb0(param_2,param_3)" identifier (argument_list "(param_2,param_3)" ( identifier , identifier ))) ;) (expression_statement "plVar1 = *(long **)(param_2 + 0xe8);" (assignment_expression "plVar1 = *(long **)(param_2 + 0xe8)" identifier = (pointer_expression "*(long **)(param_2 + 0xe8)" * (cast_expression "(long **)(param_2 + 0xe8)" ( (type_descriptor "long **" (sized_type_specifier "long" long) (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 0xe8)" ( (binary_expression "param_2 + 0xe8" identifier + number_literal) ))))) ;) (if_statement "if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    \n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }" if (parenthesized_expression "(plVar1 != (long *)0x0)" ( (binary_expression "plVar1 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    FUN_002dca60(local_30,plVar1 + 7);\n                    \n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }" { (expression_statement "FUN_002dca60(local_30,plVar1 + 7);" (call_expression "FUN_002dca60(local_30,plVar1 + 7)" identifier (argument_list "(local_30,plVar1 + 7)" ( identifier , (binary_expression "plVar1 + 7" identifier + number_literal) ))) ;) (expression_statement "(**(code **)(*plVar1 + 0x10))(plVar1,param_3);" (call_expression "(**(code **)(*plVar1 + 0x10))(plVar1,param_3)" (parenthesized_expression "(**(code **)(*plVar1 + 0x10))" ( (pointer_expression "**(code **)(*plVar1 + 0x10)" * (pointer_expression "*(code **)(*plVar1 + 0x10)" * (cast_expression "(code **)(*plVar1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar1 + 0x10)" ( (binary_expression "*plVar1 + 0x10" (pointer_expression "*plVar1" * identifier) + number_literal) ))))) )) (argument_list "(plVar1,param_3)" ( identifier , identifier ))) ;) (expression_statement "FUN_002dd110(plVar1 + 7,param_3);" (call_expression "FUN_002dd110(plVar1 + 7,param_3)" identifier (argument_list "(plVar1 + 7,param_3)" ( (binary_expression "plVar1 + 7" identifier + number_literal) , identifier ))) ;) (expression_statement "FUN_002dd1a0(local_30);" (call_expression "FUN_002dd1a0(local_30)" identifier (argument_list "(local_30)" ( identifier ))) ;) })) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (return_statement return IDENT ;) })))
(function_definition "undefined8 FUN_00300f10(undefined8 param_1,long param_2,undefined8 param_3)\n\n{\n  long *plVar1;\n  undefined1 local_30 [8];\n  \n  FUN_002dca60(param_1,param_2 + 0xd0);\n  FUN_003246a0(local_30,param_2,param_3);\n  FUN_002dd1a0(local_30);\n                    \n  FUN_00300bb0(param_2,param_3);\n  plVar1 = *(long **)(param_2 + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    \n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }\n  return param_1;\n}" (type_identifier "undefined8") (function_declarator "FUN_00300f10(undefined8 param_1,long param_2,undefined8 param_3)" (identifier "FUN_00300f10") (parameter_list "(undefined8 param_1,long param_2,undefined8 param_3)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) () ")"))) (compound_statement "{\n  long *plVar1;\n  undefined1 local_30 [8];\n  \n  FUN_002dca60(param_1,param_2 + 0xd0);\n  FUN_003246a0(local_30,param_2,param_3);\n  FUN_002dd1a0(local_30);\n                    \n  FUN_00300bb0(param_2,param_3);\n  plVar1 = *(long **)(param_2 + 0xe8);\n  if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    \n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }\n  return param_1;\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "undefined1 local_30 [8];" (type_identifier "undefined1") (array_declarator "local_30 [8]" (identifier "local_30") ([ "[") (number_literal "8") (] "]")) (; ";")) (expression_statement "FUN_002dca60(param_1,param_2 + 0xd0);" (call_expression "FUN_002dca60(param_1,param_2 + 0xd0)" (identifier "FUN_002dca60") (argument_list "(param_1,param_2 + 0xd0)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_2 + 0xd0" (identifier "param_2") (+ "+") (number_literal "0xd0")) () ")"))) (; ";")) (expression_statement "FUN_003246a0(local_30,param_2,param_3);" (call_expression "FUN_003246a0(local_30,param_2,param_3)" (identifier "FUN_003246a0") (argument_list "(local_30,param_2,param_3)" (( "(") (identifier "local_30") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "FUN_002dd1a0(local_30);" (call_expression "FUN_002dd1a0(local_30)" (identifier "FUN_002dd1a0") (argument_list "(local_30)" (( "(") (identifier "local_30") () ")"))) (; ";")) (expression_statement "FUN_00300bb0(param_2,param_3);" (call_expression "FUN_00300bb0(param_2,param_3)" (identifier "FUN_00300bb0") (argument_list "(param_2,param_3)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "plVar1 = *(long **)(param_2 + 0xe8);" (assignment_expression "plVar1 = *(long **)(param_2 + 0xe8)" (identifier "plVar1") (= "=") (pointer_expression "*(long **)(param_2 + 0xe8)" (* "*") (cast_expression "(long **)(param_2 + 0xe8)" (( "(") (type_descriptor "long **" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 0xe8)" (( "(") (binary_expression "param_2 + 0xe8" (identifier "param_2") (+ "+") (number_literal "0xe8")) () ")"))))) (; ";")) (if_statement "if (plVar1 != (long *)0x0) {\n    FUN_002dca60(local_30,plVar1 + 7);\n                    \n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }" (if "if") (parenthesized_expression "(plVar1 != (long *)0x0)" (( "(") (binary_expression "plVar1 != (long *)0x0" (identifier "plVar1") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    FUN_002dca60(local_30,plVar1 + 7);\n                    \n    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);\n    FUN_002dd110(plVar1 + 7,param_3);\n    FUN_002dd1a0(local_30);\n  }" ({ "{") (expression_statement "FUN_002dca60(local_30,plVar1 + 7);" (call_expression "FUN_002dca60(local_30,plVar1 + 7)" (identifier "FUN_002dca60") (argument_list "(local_30,plVar1 + 7)" (( "(") (identifier "local_30") (, ",") (binary_expression "plVar1 + 7" (identifier "plVar1") (+ "+") (number_literal "7")) () ")"))) (; ";")) (expression_statement "(**(code **)(*plVar1 + 0x10))(plVar1,param_3);" (call_expression "(**(code **)(*plVar1 + 0x10))(plVar1,param_3)" (parenthesized_expression "(**(code **)(*plVar1 + 0x10))" (( "(") (pointer_expression "**(code **)(*plVar1 + 0x10)" (* "*") (pointer_expression "*(code **)(*plVar1 + 0x10)" (* "*") (cast_expression "(code **)(*plVar1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar1 + 0x10)" (( "(") (binary_expression "*plVar1 + 0x10" (pointer_expression "*plVar1" (* "*") (identifier "plVar1")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(plVar1,param_3)" (( "(") (identifier "plVar1") (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "FUN_002dd110(plVar1 + 7,param_3);" (call_expression "FUN_002dd110(plVar1 + 7,param_3)" (identifier "FUN_002dd110") (argument_list "(plVar1 + 7,param_3)" (( "(") (binary_expression "plVar1 + 7" (identifier "plVar1") (+ "+") (number_literal "7")) (, ",") (identifier "param_3") () ")"))) (; ";")) (expression_statement "FUN_002dd1a0(local_30);" (call_expression "FUN_002dd1a0(local_30)" (identifier "FUN_002dd1a0") (argument_list "(local_30)" (( "(") (identifier "local_30") () ")"))) (; ";")) (} "}"))) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* std::ios::imbue(std::locale const&) */

type_1 * std::ios::var_2(type_1 *param_1)

{
  long *var_4;
  type_1 *in_RDX;
  type_2 *var_1;
  type_1 local_30 [8];
  
  locale::type_1(param_1,(type_1 *)(var_1 + 0xd0));
  ios_base::var_2(local_30);
  locale::~type_1(local_30);
                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */
  var_3(var_1,in_RDX);
  var_4 = *(long **)(var_1 + 0xe8);
  if (var_4 != (long *)0x0) {
    locale::type_1(local_30,(type_1 *)(var_4 + 7));
                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */
    (**(type_3 **)(*var_4 + 0x10))(var_4);
    locale::operator=((type_1 *)(var_4 + 7),in_RDX);
    locale::~type_1(local_30);
  }
  return param_1;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))))) (return_statement (identifier)))))

undefined8 MASKED(undefined8 param_1,long param_2,undefined8 param_3)

{
  long *plVar1;
  undefined1 local_30 [8];
  
  FUN_002dca60(param_1,param_2 + 0xd0);
  FUN_003246a0(local_30,param_2,param_3);
  FUN_002dd1a0(local_30);
                    /* try { // try from 00300f52 to 00300f56 has its CatchHandler @ 00300fa1 */
  FUN_00300bb0(param_2,param_3);
  plVar1 = *(long **)(param_2 + 0xe8);
  if (plVar1 != (long *)0x0) {
    FUN_002dca60(local_30,plVar1 + 7);
                    /* try { // try from 00300f7b to 00300f7d has its CatchHandler @ 00300fa6 */
    (**(code **)(*plVar1 + 0x10))(plVar1,param_3);
    FUN_002dd110(plVar1 + 7,param_3);
    FUN_002dd1a0(local_30);
  }
  return param_1;
}

