
/* std::__moneypunct_cache<wchar_t, true>::_M_cache(std::locale const&) */

void __thiscall
std::__moneypunct_cache<wchar_t,true>::_M_cache
          (__moneypunct_cache<wchar_t,true> *this,locale *param_1)

{
  ulong uVar1;
  __moneypunct_cache<wchar_t,true> _Var2;
  undefined4 uVar3;
  moneypunct *pmVar4;
  char *pcVar5;
  wchar_t *pwVar6;
  wchar_t *pwVar7;
  wchar_t *pwVar8;
  ctype *pcVar9;
  wstring *local_70;
  allocator local_5b;
  allocator local_5a;
  allocator local_59;
  long local_58;
  long local_50;
  long local_48;
  long local_40 [2];
  
  pmVar4 = use_facet<std::moneypunct<wchar_t,true>>(param_1);
  if (*(code **)(*(long *)pmVar4 + 0x10) == (code *)PTR_do_decimal_point_003f7f58) {
    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x24);
  }
  else {
    uVar3 = (**(code **)(*(long *)pmVar4 + 0x10))(pmVar4);
  }
  *(undefined4 *)(this + 0x24) = uVar3;
  if (*(code **)(*(long *)pmVar4 + 0x18) == (code *)PTR_do_thousands_sep_003f7c98) {
    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x28);
  }
  else {
    uVar3 = (**(code **)(*(long *)pmVar4 + 0x18))(pmVar4);
  }
  *(undefined4 *)(this + 0x28) = uVar3;
  if (*(code **)(*(long *)pmVar4 + 0x40) == (code *)PTR_do_frac_digits_003f7ac8) {
    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x60);
  }
  else {
    uVar3 = (**(code **)(*(long *)pmVar4 + 0x40))(pmVar4);
  }
  *(undefined4 *)(this + 0x60) = uVar3;
  if (*(code **)(*(long *)pmVar4 + 0x20) == (code *)PTR_do_grouping_003f7e30) {
                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */
    std::string::string((string *)&local_58,*(char **)(*(long *)(pmVar4 + 0x10) + 0x10),
                        (allocator *)local_40);
  }
  else {
                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */
    (**(code **)(*(long *)pmVar4 + 0x20))(&local_58,pmVar4);
  }
  uVar1 = *(ulong *)(local_58 + -0x18);
  *(ulong *)(this + 0x18) = uVar1;
                    /* try { // try from 002efed8 to 002efedc has its CatchHandler @ 002f02cd */
  pcVar5 = (char *)operator_new__(uVar1);
                    /* try { // try from 002efeec to 002efef0 has its CatchHandler @ 002f02cb */
  std::string::copy((string *)&local_58,pcVar5,*(ulong *)(this + 0x18),0);
  _Var2 = (__moneypunct_cache<wchar_t,true>)0x0;
  if (*(long *)(this + 0x18) != 0) {
    _Var2 = (__moneypunct_cache<wchar_t,true>)((byte)(*pcVar5 - 1U) < 0x7e);
  }
  this[0x20] = _Var2;
  if (*(code **)(*(long *)pmVar4 + 0x28) == (code *)PTR_do_curr_symbol_003f7fc8) {
                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */
    std::wstring::wstring
              ((wstring *)&local_50,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30),&local_5b);
  }
  else {
                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */
    (**(code **)(*(long *)pmVar4 + 0x28))(&local_50,pmVar4);
  }
  uVar1 = *(ulong *)(local_50 + -0x18);
  *(ulong *)(this + 0x38) = uVar1;
  if (0x1ffffffffffffffe < uVar1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */
    __cxa_throw_bad_array_new_length();
  }
                    /* try { // try from 002eff54 to 002eff58 has its CatchHandler @ 002f034b */
  pwVar6 = (wchar_t *)operator_new__(uVar1 << 2);
                    /* try { // try from 002eff68 to 002eff6c has its CatchHandler @ 002f03ad */
  std::wstring::copy((wstring *)&local_50,pwVar6,*(ulong *)(this + 0x38),0);
  if (*(code **)(*(long *)pmVar4 + 0x30) == (code *)PTR_do_positive_sign_003f7fb8) {
                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */
    std::wstring::wstring
              ((wstring *)&local_48,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40),&local_5a);
  }
  else {
                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */
    (**(code **)(*(long *)pmVar4 + 0x30))(&local_48,pmVar4);
  }
  uVar1 = *(ulong *)(local_48 + -0x18);
  *(ulong *)(this + 0x48) = uVar1;
  if (0x1ffffffffffffffe < uVar1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */
    __cxa_throw_bad_array_new_length();
  }
                    /* try { // try from 002effc0 to 002effc4 has its CatchHandler @ 002f02e7 */
  pwVar7 = (wchar_t *)operator_new__(uVar1 << 2);
                    /* try { // try from 002effd4 to 002effd8 has its CatchHandler @ 002f02e5 */
  std::wstring::copy((wstring *)&local_48,pwVar7,*(ulong *)(this + 0x48),0);
  if (*(code **)(*(long *)pmVar4 + 0x38) == (code *)PTR_do_negative_sign_003f7e80) {
                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */
    std::wstring::wstring
              ((wstring *)local_40,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50),&local_59);
  }
  else {
                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */
    (**(code **)(*(long *)pmVar4 + 0x38))(local_40,pmVar4);
  }
  local_70 = (wstring *)local_40;
  uVar1 = *(ulong *)(local_40[0] + -0x18);
  *(ulong *)(this + 0x58) = uVar1;
  if (uVar1 < 0x1fffffffffffffff) {
                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */
    pwVar8 = (wchar_t *)operator_new__(uVar1 << 2);
                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */
    std::wstring::copy(local_70,pwVar8,*(ulong *)(this + 0x58),0);
    if (*(code **)(*(long *)pmVar4 + 0x48) == (code *)PTR_do_pos_format_003f7ca0) {
      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100);
    }
    else {
                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */
      uVar3 = (**(code **)(*(long *)pmVar4 + 0x48))(pmVar4);
    }
    *(undefined4 *)(this + 100) = uVar3;
    if (*(code **)(*(long *)pmVar4 + 0x50) == (code *)PTR_do_neg_format_003f7fe0) {
      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68);
    }
    else {
                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */
      uVar3 = (**(code **)(*(long *)pmVar4 + 0x50))(pmVar4);
    }
    *(undefined4 *)(this + 0x68) = uVar3;
    pcVar9 = use_facet<std::ctype<wchar_t>>(param_1);
    (**(code **)(*(long *)pcVar9 + 0x58))
              (pcVar9,money_base::_S_atoms,money_base::_S_atoms + 0xb,this + 0x6c);
    *(char **)(this + 0x10) = pcVar5;
    *(wchar_t **)(this + 0x30) = pwVar6;
    *(wchar_t **)(this + 0x40) = pwVar7;
    *(wchar_t **)(this + 0x50) = pwVar8;
    this[0x98] = (__moneypunct_cache<wchar_t,true>)0x1;
    if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage
       ) {
      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));
    }
    if ((allocator *)(local_48 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {
      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -0x18));
    }
    if ((allocator *)(local_50 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {
      std::wstring::_Rep::_M_dispose((allocator *)(local_50 + -0x18));
    }
    if ((allocator *)(local_58 + -0x18) != (allocator *)PTR__S_empty_rep_storage_003f7c38) {
      std::string::_Rep::_M_dispose((allocator *)(local_58 + -0x18));
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f03a1 to 002f03a5 has its CatchHandler @ 002f03a6 */
  __cxa_throw_bad_array_new_length();
}



void FUN_002efe20(long param_1,undefined8 param_2)

{
  ulong uVar1;
  bool bVar2;
  undefined4 uVar3;
  long *plVar4;
  char *pcVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  long *local_70;
  undefined1 local_5b;
  undefined1 local_5a;
  undefined1 local_59;
  long local_58;
  long local_50;
  long local_48;
  long local_40 [2];
  
  plVar4 = (long *)FUN_002efdd0(param_2);
  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {
    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);
  }
  else {
    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);
  }
  *(undefined4 *)(param_1 + 0x24) = uVar3;
  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {
    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);
  }
  else {
    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);
  }
  *(undefined4 *)(param_1 + 0x28) = uVar3;
  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {
    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);
  }
  else {
    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);
  }
  *(undefined4 *)(param_1 + 0x60) = uVar3;
  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {
                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */
    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);
  }
  else {
                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */
    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);
  }
  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);
                    /* try { // try from 002efed8 to 002efedc has its CatchHandler @ 002f02cd */
  pcVar5 = (char *)thunk_FUN_002a11b0();
                    /* try { // try from 002efeec to 002efef0 has its CatchHandler @ 002f02cb */
  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);
  bVar2 = false;
  if (*(long *)(param_1 + 0x18) != 0) {
    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;
  }
  *(bool *)(param_1 + 0x20) = bVar2;
  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {
                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */
    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);
  }
  else {
                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */
    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);
  }
  uVar1 = *(ulong *)(local_50 + -0x18);
  *(ulong *)(param_1 + 0x38) = uVar1;
  if (0x1ffffffffffffffe < uVar1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */
    FUN_002a23f0();
  }
                    /* try { // try from 002eff54 to 002eff58 has its CatchHandler @ 002f034b */
  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);
                    /* try { // try from 002eff68 to 002eff6c has its CatchHandler @ 002f03ad */
  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);
  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {
                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */
    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);
  }
  else {
                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */
    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);
  }
  uVar1 = *(ulong *)(local_48 + -0x18);
  *(ulong *)(param_1 + 0x48) = uVar1;
  if (0x1ffffffffffffffe < uVar1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */
    FUN_002a23f0();
  }
                    /* try { // try from 002effc0 to 002effc4 has its CatchHandler @ 002f02e7 */
  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);
                    /* try { // try from 002effd4 to 002effd8 has its CatchHandler @ 002f02e5 */
  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);
  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {
                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */
    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);
  }
  else {
                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */
    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);
  }
  local_70 = local_40;
  uVar1 = *(ulong *)(local_40[0] + -0x18);
  *(ulong *)(param_1 + 0x58) = uVar1;
  if (uVar1 < 0x1fffffffffffffff) {
                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */
    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);
                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */
    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);
    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {
      uVar3 = *(undefined4 *)(plVar4[2] + 100);
    }
    else {
                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */
      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);
    }
    *(undefined4 *)(param_1 + 100) = uVar3;
    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {
      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);
    }
    else {
                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */
      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);
    }
    *(undefined4 *)(param_1 + 0x68) = uVar3;
    plVar4 = (long *)FUN_002ef340(param_2);
    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);
    *(char **)(param_1 + 0x10) = pcVar5;
    *(undefined8 *)(param_1 + 0x30) = uVar6;
    *(undefined8 *)(param_1 + 0x40) = uVar7;
    *(undefined8 *)(param_1 + 0x50) = uVar8;
    *(undefined1 *)(param_1 + 0x98) = 1;
    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {
      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);
    }
    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {
      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);
    }
    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {
      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);
    }
    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {
      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f03a1 to 002f03a5 has its CatchHandler @ 002f03a6 */
  FUN_002a23f0();
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RDI
MOV RDI,RSI
SUB RSP,0x48
MOV qword ptr [RSP],RSI
CALL 0x002efdd0
MOV RBP,RAX
MOV RAX,qword ptr [RAX]
MOV RAX,qword ptr [RAX + 0x10]
CMP RAX,qword ptr [0x003f7f58]
JNZ 0x002f0180
MOV RAX,qword ptr [RBP + 0x10]
MOV EAX,dword ptr [RAX + 0x24]
MOV dword ptr [RBX + 0x24],EAX
MOV RAX,qword ptr [RBP]
MOV RAX,qword ptr [RAX + 0x18]
CMP RAX,qword ptr [0x003f7c98]
JNZ 0x002f0170
MOV RAX,qword ptr [RBP + 0x10]
MOV EAX,dword ptr [RAX + 0x28]
MOV dword ptr [RBX + 0x28],EAX
MOV RAX,qword ptr [RBP]
MOV RAX,qword ptr [RAX + 0x40]
CMP RAX,qword ptr [0x003f7ac8]
JNZ 0x002f0160
MOV RAX,qword ptr [RBP + 0x10]
MOV EAX,dword ptr [RAX + 0x60]
MOV dword ptr [RBX + 0x60],EAX
MOV RAX,qword ptr [RBP]
MOV RAX,qword ptr [RAX + 0x20]
CMP RAX,qword ptr [0x003f7e30]
JNZ 0x002f0148
MOV RAX,qword ptr [RBP + 0x10]
LEA R13,[RSP + 0x20]
LEA RDX,[RSP + 0x38]
MOV RDI,R13
MOV RSI,qword ptr [RAX + 0x10]
CALL 0x002d7350
MOV RAX,qword ptr [RSP + 0x20]
MOV RDI,qword ptr [RAX + -0x18]
MOV qword ptr [RBX + 0x18],RDI
CALL 0x002a1150
MOV RDX,qword ptr [RBX + 0x18]
XOR ECX,ECX
MOV RSI,RAX
MOV RDI,R13
MOV R12,RAX
CALL 0x002d4ac0
XOR EAX,EAX
CMP qword ptr [RBX + 0x18],0x0
JNZ 0x002f0130
MOV byte ptr [RBX + 0x20],AL
MOV RAX,qword ptr [RBP]
MOV RAX,qword ptr [RAX + 0x28]
CMP RAX,qword ptr [0x003f7fc8]
JNZ 0x002f0190
MOV RAX,qword ptr [RBP + 0x10]
LEA R13,[RSP + 0x28]
LEA RDX,[RSP + 0x1d]
MOV RDI,R13
MOV RSI,qword ptr [RAX + 0x30]
CALL 0x0031f630
MOV RAX,qword ptr [RSP + 0x28]
MOV RDI,qword ptr [RAX + -0x18]
MOV RAX,0x1ffffffffffffffe
MOV qword ptr [RBX + 0x38],RDI
CMP RDI,RAX
JA 0x002f034d
SHL RDI,0x2
CALL 0x002a1150
MOV RDX,qword ptr [RBX + 0x38]
XOR ECX,ECX
MOV RSI,RAX
MOV RDI,R13
MOV R15,RAX
CALL 0x0031cc50
MOV RAX,qword ptr [RBP]
MOV RAX,qword ptr [RAX + 0x30]
CMP RAX,qword ptr [0x003f7fb8]
JNZ 0x002f01a8
MOV RAX,qword ptr [RBP + 0x10]
LEA R13,[RSP + 0x30]
LEA RDX,[RSP + 0x1e]
MOV RDI,R13
MOV RSI,qword ptr [RAX + 0x40]
CALL 0x0031f630
MOV RAX,qword ptr [RSP + 0x30]
MOV RDI,qword ptr [RAX + -0x18]
MOV RAX,0x1ffffffffffffffe
MOV qword ptr [RBX + 0x48],RDI
CMP RDI,RAX
JA 0x002f03bf
SHL RDI,0x2
CALL 0x002a1150
MOV RDX,qword ptr [RBX + 0x48]
XOR ECX,ECX
MOV RSI,RAX
MOV RDI,R13
MOV R14,RAX
CALL 0x0031cc50
MOV RAX,qword ptr [RBP]
MOV RAX,qword ptr [RAX + 0x38]
CMP RAX,qword ptr [0x003f7e80]
JNZ 0x002f01d0
MOV RAX,qword ptr [RBP + 0x10]
LEA RDX,[RSP + 0x1f]
MOV RSI,qword ptr [RAX + 0x50]
LEA RAX,[RSP + 0x38]
MOV RDI,RAX
MOV qword ptr [RSP + 0x8],RAX
CALL 0x0031f630
MOV RAX,qword ptr [RSP + 0x38]
MOV RDI,qword ptr [RAX + -0x18]
MOV RAX,0x1ffffffffffffffe
MOV qword ptr [RBX + 0x58],RDI
CMP RDI,RAX
JA 0x002f03a1
SHL RDI,0x2
CALL 0x002a1150
MOV RDX,qword ptr [RBX + 0x58]
MOV RDI,qword ptr [RSP + 0x8]
XOR ECX,ECX
MOV RSI,RAX
MOV R13,RAX
CALL 0x0031cc50
MOV RAX,qword ptr [RBP]
MOV RAX,qword ptr [RAX + 0x48]
CMP RAX,qword ptr [0x003f7ca0]
JNZ 0x002f01f0
MOV RAX,qword ptr [RBP + 0x10]
MOV EAX,dword ptr [RAX + 0x64]
MOV dword ptr [RBX + 0x64],EAX
MOV RAX,qword ptr [RBP]
MOV RAX,qword ptr [RAX + 0x50]
CMP RAX,qword ptr [0x003f7fe0]
JNZ 0x002f01c0
MOV RAX,qword ptr [RBP + 0x10]
MOV EAX,dword ptr [RAX + 0x68]
MOV dword ptr [RBX + 0x68],EAX
MOV RDI,qword ptr [RSP]
CALL 0x002ef340
LEA RDX,[0x3f8630]
MOV R8,qword ptr [RAX]
LEA RCX,[RBX + 0x6c]
MOV RDI,RAX
MOV RSI,qword ptr [RDX]
LEA RDX,[RSI + 0xb]
CALL qword ptr [R8 + 0x58]
MOV RAX,qword ptr [RSP + 0x38]
MOV qword ptr [RBX + 0x10],R12
MOV qword ptr [RBX + 0x30],R15
MOV qword ptr [RBX + 0x40],R14
LEA RDI,[RAX + -0x18]
MOV qword ptr [RBX + 0x50],R13
MOV byte ptr [RBX + 0x98],0x1
LEA RBX,[0x405f00]
CMP RDI,RBX
JNZ 0x002f0230
MOV RAX,qword ptr [RSP + 0x30]
LEA RDI,[RAX + -0x18]
CMP RDI,RBX
JNZ 0x002f0210
MOV RAX,qword ptr [RSP + 0x28]
LEA RDI,[RAX + -0x18]
CMP RDI,RBX
JNZ 0x002f0220
MOV RAX,qword ptr [RSP + 0x20]
LEA RDI,[RAX + -0x18]
CMP RDI,qword ptr [0x003f7c38]
JNZ 0x002f0200
ADD RSP,0x48
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOVZX EAX,byte ptr [R12]
SUB EAX,0x1
CMP AL,0x7d
SETBE AL
JMP 0x002efefe
LEA R13,[RSP + 0x20]
MOV RSI,RBP
MOV RDI,R13
CALL RAX
JMP 0x002efecb
MOV RDI,RBP
CALL RAX
JMP 0x002efe99
MOV RDI,RBP
CALL RAX
JMP 0x002efe7a
MOV RDI,RBP
CALL RAX
JMP 0x002efe5b
LEA R13,[RSP + 0x28]
MOV RSI,RBP
MOV RDI,R13
CALL RAX
JMP 0x002eff30
LEA R13,[RSP + 0x30]
MOV RSI,RBP
MOV RDI,R13
CALL RAX
JMP 0x002eff9c
MOV RDI,RBP
CALL RAX
JMP 0x002f0087
LEA RCX,[RSP + 0x38]
MOV RSI,RBP
MOV qword ptr [RSP + 0x8],RCX
MOV RDI,RCX
CALL RAX
JMP 0x002f000d
MOV RDI,RBP
CALL RAX
JMP 0x002f0068
LEA RSI,[RSP + 0x1f]
CALL 0x002ed0c0
JMP 0x002f0119
LEA RSI,[RSP + 0x1f]
CALL 0x002ed100
JMP 0x002f00f1
LEA RSI,[RSP + 0x1f]
CALL 0x002ed100
JMP 0x002f0103
LEA RSI,[RSP + 0x1f]
CALL 0x002ed100
JMP 0x002f00df
CALL 0x002a23f0
CALL 0x002a23f0
CALL 0x002a23f0
(translation_unit "void FUN_002efe20(long param_1,undefined8 param_2)\n\n{\n  ulong uVar1;\n  bool bVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  char *pcVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long *local_70;\n  undefined1 local_5b;\n  undefined1 local_5a;\n  undefined1 local_59;\n  long local_58;\n  long local_50;\n  long local_48;\n  long local_40 [2];\n  \n  plVar4 = (long *)FUN_002efdd0(param_2);\n  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x24) = uVar3;\n  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x28) = uVar3;\n  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x60) = uVar3;\n  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */\n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }\n  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);\n                    /* try { // try from 002efed8 to 002efedc has its CatchHandler @ 002f02cd */\n  pcVar5 = (char *)thunk_FUN_002a11b0();\n                    /* try { // try from 002efeec to 002efef0 has its CatchHandler @ 002f02cb */\n  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);\n  bVar2 = false;\n  if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }\n  *(bool *)(param_1 + 0x20) = bVar2;\n  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */\n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }\n  uVar1 = *(ulong *)(local_50 + -0x18);\n  *(ulong *)(param_1 + 0x38) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */\n    FUN_002a23f0();\n  }\n                    /* try { // try from 002eff54 to 002eff58 has its CatchHandler @ 002f034b */\n  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002eff68 to 002eff6c has its CatchHandler @ 002f03ad */\n  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);\n  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */\n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }\n  uVar1 = *(ulong *)(local_48 + -0x18);\n  *(ulong *)(param_1 + 0x48) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */\n    FUN_002a23f0();\n  }\n                    /* try { // try from 002effc0 to 002effc4 has its CatchHandler @ 002f02e7 */\n  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002effd4 to 002effd8 has its CatchHandler @ 002f02e5 */\n  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);\n  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */\n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }\n  local_70 = local_40;\n  uVar1 = *(ulong *)(local_40[0] + -0x18);\n  *(ulong *)(param_1 + 0x58) = uVar1;\n  if (uVar1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */\n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */\n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03a1 to 002f03a5 has its CatchHandler @ 002f03a6 */\n  FUN_002a23f0();\n}\n\n" (function_definition "void FUN_002efe20(long param_1,undefined8 param_2)\n\n{\n  ulong uVar1;\n  bool bVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  char *pcVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long *local_70;\n  undefined1 local_5b;\n  undefined1 local_5a;\n  undefined1 local_59;\n  long local_58;\n  long local_50;\n  long local_48;\n  long local_40 [2];\n  \n  plVar4 = (long *)FUN_002efdd0(param_2);\n  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x24) = uVar3;\n  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x28) = uVar3;\n  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x60) = uVar3;\n  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */\n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }\n  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);\n                    /* try { // try from 002efed8 to 002efedc has its CatchHandler @ 002f02cd */\n  pcVar5 = (char *)thunk_FUN_002a11b0();\n                    /* try { // try from 002efeec to 002efef0 has its CatchHandler @ 002f02cb */\n  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);\n  bVar2 = false;\n  if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }\n  *(bool *)(param_1 + 0x20) = bVar2;\n  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */\n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }\n  uVar1 = *(ulong *)(local_50 + -0x18);\n  *(ulong *)(param_1 + 0x38) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */\n    FUN_002a23f0();\n  }\n                    /* try { // try from 002eff54 to 002eff58 has its CatchHandler @ 002f034b */\n  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002eff68 to 002eff6c has its CatchHandler @ 002f03ad */\n  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);\n  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */\n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }\n  uVar1 = *(ulong *)(local_48 + -0x18);\n  *(ulong *)(param_1 + 0x48) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */\n    FUN_002a23f0();\n  }\n                    /* try { // try from 002effc0 to 002effc4 has its CatchHandler @ 002f02e7 */\n  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002effd4 to 002effd8 has its CatchHandler @ 002f02e5 */\n  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);\n  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */\n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }\n  local_70 = local_40;\n  uVar1 = *(ulong *)(local_40[0] + -0x18);\n  *(ulong *)(param_1 + 0x58) = uVar1;\n  if (uVar1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */\n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */\n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03a1 to 002f03a5 has its CatchHandler @ 002f03a6 */\n  FUN_002a23f0();\n}" primitive_type (function_declarator "FUN_002efe20(long param_1,undefined8 param_2)" identifier (parameter_list "(long param_1,undefined8 param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  bool bVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  char *pcVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long *local_70;\n  undefined1 local_5b;\n  undefined1 local_5a;\n  undefined1 local_59;\n  long local_58;\n  long local_50;\n  long local_48;\n  long local_40 [2];\n  \n  plVar4 = (long *)FUN_002efdd0(param_2);\n  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x24) = uVar3;\n  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x28) = uVar3;\n  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x60) = uVar3;\n  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */\n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }\n  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);\n                    /* try { // try from 002efed8 to 002efedc has its CatchHandler @ 002f02cd */\n  pcVar5 = (char *)thunk_FUN_002a11b0();\n                    /* try { // try from 002efeec to 002efef0 has its CatchHandler @ 002f02cb */\n  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);\n  bVar2 = false;\n  if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }\n  *(bool *)(param_1 + 0x20) = bVar2;\n  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */\n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }\n  uVar1 = *(ulong *)(local_50 + -0x18);\n  *(ulong *)(param_1 + 0x38) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */\n    FUN_002a23f0();\n  }\n                    /* try { // try from 002eff54 to 002eff58 has its CatchHandler @ 002f034b */\n  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002eff68 to 002eff6c has its CatchHandler @ 002f03ad */\n  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);\n  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */\n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }\n  uVar1 = *(ulong *)(local_48 + -0x18);\n  *(ulong *)(param_1 + 0x48) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */\n    FUN_002a23f0();\n  }\n                    /* try { // try from 002effc0 to 002effc4 has its CatchHandler @ 002f02e7 */\n  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002effd4 to 002effd8 has its CatchHandler @ 002f02e5 */\n  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);\n  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */\n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }\n  local_70 = local_40;\n  uVar1 = *(ulong *)(local_40[0] + -0x18);\n  *(ulong *)(param_1 + 0x58) = uVar1;\n  if (uVar1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */\n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */\n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03a1 to 002f03a5 has its CatchHandler @ 002f03a6 */\n  FUN_002a23f0();\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "long *local_70;" (sized_type_specifier "long" long) (pointer_declarator "*local_70" * identifier) ;) (declaration "undefined1 local_5b;" type_identifier identifier ;) (declaration "undefined1 local_5a;" type_identifier identifier ;) (declaration "undefined1 local_59;" type_identifier identifier ;) (declaration "long local_58;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_48;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_40 [2];" (sized_type_specifier "long" long) (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "plVar4 = (long *)FUN_002efdd0(param_2);" (assignment_expression "plVar4 = (long *)FUN_002efdd0(param_2)" identifier = (cast_expression "(long *)FUN_002efdd0(param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002efdd0(param_2)" identifier (argument_list "(param_2)" ( identifier ))))) ;) (if_statement "if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58)" ( (binary_expression "*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58" (pointer_expression "*(code **)(*plVar4 + 0x10)" * (cast_expression "(code **)(*plVar4 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x10)" ( (binary_expression "*plVar4 + 0x10" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7f58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x24);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x24)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 0x24)" * (cast_expression "(undefined4 *)(plVar4[2] + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x24)" ( (binary_expression "plVar4[2] + 0x24" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }" else (compound_statement "{\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }" { (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x10))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x10))" ( (pointer_expression "**(code **)(*plVar4 + 0x10)" * (pointer_expression "*(code **)(*plVar4 + 0x10)" * (cast_expression "(code **)(*plVar4 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x10)" ( (binary_expression "*plVar4 + 0x10" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 0x24) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x24) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x24)" * (cast_expression "(undefined4 *)(param_1 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98)" ( (binary_expression "*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98" (pointer_expression "*(code **)(*plVar4 + 0x18)" * (cast_expression "(code **)(*plVar4 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x18)" ( (binary_expression "*plVar4 + 0x18" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7c98" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x28);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x28)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 0x28)" * (cast_expression "(undefined4 *)(plVar4[2] + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x28)" ( (binary_expression "plVar4[2] + 0x28" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }" else (compound_statement "{\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }" { (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x18))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x18))" ( (pointer_expression "**(code **)(*plVar4 + 0x18)" * (pointer_expression "*(code **)(*plVar4 + 0x18)" * (cast_expression "(code **)(*plVar4 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x18)" ( (binary_expression "*plVar4 + 0x18" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 0x28) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x28) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x28)" * (cast_expression "(undefined4 *)(param_1 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8)" ( (binary_expression "*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8" (pointer_expression "*(code **)(*plVar4 + 0x40)" * (cast_expression "(code **)(*plVar4 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x40)" ( (binary_expression "*plVar4 + 0x40" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7ac8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x60);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x60)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 0x60)" * (cast_expression "(undefined4 *)(plVar4[2] + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x60)" ( (binary_expression "plVar4[2] + 0x60" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }" else (compound_statement "{\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }" { (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x40))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x40))" ( (pointer_expression "**(code **)(*plVar4 + 0x40)" * (pointer_expression "*(code **)(*plVar4 + 0x40)" * (cast_expression "(code **)(*plVar4 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x40)" ( (binary_expression "*plVar4 + 0x40" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 0x60) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x60) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x60)" * (cast_expression "(undefined4 *)(param_1 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */\n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30)" ( (binary_expression "*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30" (pointer_expression "*(code **)(*plVar4 + 0x20)" * (cast_expression "(code **)(*plVar4 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x20)" ( (binary_expression "*plVar4 + 0x20" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7e30" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */\n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }" { comment (expression_statement "FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);" (call_expression "FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40)" identifier (argument_list "(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40)" ( (pointer_expression "&local_58" & identifier) , (pointer_expression "*(undefined8 *)(plVar4[2] + 0x10)" * (cast_expression "(undefined8 *)(plVar4[2] + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x10)" ( (binary_expression "plVar4[2] + 0x10" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) , identifier ))) ;) }) (else_clause "else {\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }" else (compound_statement "{\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }" { comment (expression_statement "(**(code **)(*plVar4 + 0x20))(&local_58,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x20))(&local_58,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x20))" ( (pointer_expression "**(code **)(*plVar4 + 0x20)" * (pointer_expression "*(code **)(*plVar4 + 0x20)" * (cast_expression "(code **)(*plVar4 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x20)" ( (binary_expression "*plVar4 + 0x20" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,plVar4)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) }))) (expression_statement "*(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);" (assignment_expression "*(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18)" (pointer_expression "*(undefined8 *)(param_1 + 0x18)" * (cast_expression "(undefined8 *)(param_1 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(local_58 + -0x18)" * (cast_expression "(undefined8 *)(local_58 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + -0x18)" ( (binary_expression "local_58 + -0x18" identifier + number_literal) ))))) ;) comment (expression_statement "pcVar5 = (char *)thunk_FUN_002a11b0();" (assignment_expression "pcVar5 = (char *)thunk_FUN_002a11b0()" identifier = (cast_expression "(char *)thunk_FUN_002a11b0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002a11b0()" identifier (argument_list "()" ( ))))) ;) comment (expression_statement "FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);" (call_expression "FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0)" identifier (argument_list "(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0)" ( (pointer_expression "&local_58" & identifier) , identifier , (pointer_expression "*(undefined8 *)(param_1 + 0x18)" * (cast_expression "(undefined8 *)(param_1 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) , number_literal ))) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (if_statement "if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0x18) != 0)" ( (binary_expression "*(long *)(param_1 + 0x18) != 0" (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }" { (expression_statement "bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;" (assignment_expression "bVar2 = (byte)(*pcVar5 - 1U) < 0x7e" identifier = (binary_expression "(byte)(*pcVar5 - 1U) < 0x7e" (call_expression "(byte)(*pcVar5 - 1U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar5 - 1U)" ( (binary_expression "*pcVar5 - 1U" (pointer_expression "*pcVar5" * identifier) - number_literal) ))) < number_literal)) ;) })) (expression_statement "*(bool *)(param_1 + 0x20) = bVar2;" (assignment_expression "*(bool *)(param_1 + 0x20) = bVar2" (pointer_expression "*(bool *)(param_1 + 0x20)" * (cast_expression "(bool *)(param_1 + 0x20)" ( (type_descriptor "bool *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */\n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8)" ( (binary_expression "*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8" (pointer_expression "*(code **)(*plVar4 + 0x28)" * (cast_expression "(code **)(*plVar4 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x28)" ( (binary_expression "*plVar4 + 0x28" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7fc8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */\n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }" { comment (expression_statement "FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);" (call_expression "FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b)" identifier (argument_list "(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b)" ( (pointer_expression "&local_50" & identifier) , (pointer_expression "*(undefined8 *)(plVar4[2] + 0x30)" * (cast_expression "(undefined8 *)(plVar4[2] + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x30)" ( (binary_expression "plVar4[2] + 0x30" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) , (pointer_expression "&local_5b" & identifier) ))) ;) }) (else_clause "else {\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }" else (compound_statement "{\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }" { comment (expression_statement "(**(code **)(*plVar4 + 0x28))(&local_50,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x28))(&local_50,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x28))" ( (pointer_expression "**(code **)(*plVar4 + 0x28)" * (pointer_expression "*(code **)(*plVar4 + 0x28)" * (cast_expression "(code **)(*plVar4 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x28)" ( (binary_expression "*plVar4 + 0x28" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(&local_50,plVar4)" ( (pointer_expression "&local_50" & identifier) , identifier ))) ;) }))) (expression_statement "uVar1 = *(ulong *)(local_50 + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_50 + -0x18)" identifier = (pointer_expression "*(ulong *)(local_50 + -0x18)" * (cast_expression "(ulong *)(local_50 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + -0x18)" ( (binary_expression "local_50 + -0x18" identifier + number_literal) ))))) ;) (expression_statement "*(ulong *)(param_1 + 0x38) = uVar1;" (assignment_expression "*(ulong *)(param_1 + 0x38) = uVar1" (pointer_expression "*(ulong *)(param_1 + 0x38)" * (cast_expression "(ulong *)(param_1 + 0x38)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */\n    FUN_002a23f0();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < uVar1)" ( (binary_expression "0x1ffffffffffffffe < uVar1" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */\n    FUN_002a23f0();\n  }" { comment comment (expression_statement "FUN_002a23f0();" (call_expression "FUN_002a23f0()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "uVar6 = thunk_FUN_002a11b0(uVar1 << 2);" (assignment_expression "uVar6 = thunk_FUN_002a11b0(uVar1 << 2)" identifier = (call_expression "thunk_FUN_002a11b0(uVar1 << 2)" identifier (argument_list "(uVar1 << 2)" ( (binary_expression "uVar1 << 2" identifier << number_literal) )))) ;) comment (expression_statement "FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);" (call_expression "FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0)" identifier (argument_list "(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0)" ( (pointer_expression "&local_50" & identifier) , identifier , (pointer_expression "*(undefined8 *)(param_1 + 0x38)" * (cast_expression "(undefined8 *)(param_1 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) , number_literal ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */\n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8)" ( (binary_expression "*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8" (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7fb8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */\n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }" { comment (expression_statement "FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);" (call_expression "FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a)" identifier (argument_list "(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a)" ( (pointer_expression "&local_48" & identifier) , (pointer_expression "*(undefined8 *)(plVar4[2] + 0x40)" * (cast_expression "(undefined8 *)(plVar4[2] + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x40)" ( (binary_expression "plVar4[2] + 0x40" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) , (pointer_expression "&local_5a" & identifier) ))) ;) }) (else_clause "else {\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }" else (compound_statement "{\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }" { comment (expression_statement "(**(code **)(*plVar4 + 0x30))(&local_48,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x30))(&local_48,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x30))" ( (pointer_expression "**(code **)(*plVar4 + 0x30)" * (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(&local_48,plVar4)" ( (pointer_expression "&local_48" & identifier) , identifier ))) ;) }))) (expression_statement "uVar1 = *(ulong *)(local_48 + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_48 + -0x18)" identifier = (pointer_expression "*(ulong *)(local_48 + -0x18)" * (cast_expression "(ulong *)(local_48 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) ))))) ;) (expression_statement "*(ulong *)(param_1 + 0x48) = uVar1;" (assignment_expression "*(ulong *)(param_1 + 0x48) = uVar1" (pointer_expression "*(ulong *)(param_1 + 0x48)" * (cast_expression "(ulong *)(param_1 + 0x48)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */\n    FUN_002a23f0();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < uVar1)" ( (binary_expression "0x1ffffffffffffffe < uVar1" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */\n    FUN_002a23f0();\n  }" { comment comment (expression_statement "FUN_002a23f0();" (call_expression "FUN_002a23f0()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "uVar7 = thunk_FUN_002a11b0(uVar1 << 2);" (assignment_expression "uVar7 = thunk_FUN_002a11b0(uVar1 << 2)" identifier = (call_expression "thunk_FUN_002a11b0(uVar1 << 2)" identifier (argument_list "(uVar1 << 2)" ( (binary_expression "uVar1 << 2" identifier << number_literal) )))) ;) comment (expression_statement "FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);" (call_expression "FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0)" identifier (argument_list "(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0)" ( (pointer_expression "&local_48" & identifier) , identifier , (pointer_expression "*(undefined8 *)(param_1 + 0x48)" * (cast_expression "(undefined8 *)(param_1 + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) , number_literal ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */\n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80)" ( (binary_expression "*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80" (pointer_expression "*(code **)(*plVar4 + 0x38)" * (cast_expression "(code **)(*plVar4 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x38)" ( (binary_expression "*plVar4 + 0x38" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7e80" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */\n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }" { comment (expression_statement "FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);" (call_expression "FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59)" identifier (argument_list "(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59)" ( identifier , (pointer_expression "*(undefined8 *)(plVar4[2] + 0x50)" * (cast_expression "(undefined8 *)(plVar4[2] + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x50)" ( (binary_expression "plVar4[2] + 0x50" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) , (pointer_expression "&local_59" & identifier) ))) ;) }) (else_clause "else {\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }" else (compound_statement "{\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }" { comment (expression_statement "(**(code **)(*plVar4 + 0x38))(local_40,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x38))(local_40,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x38))" ( (pointer_expression "**(code **)(*plVar4 + 0x38)" * (pointer_expression "*(code **)(*plVar4 + 0x38)" * (cast_expression "(code **)(*plVar4 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x38)" ( (binary_expression "*plVar4 + 0x38" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(local_40,plVar4)" ( identifier , identifier ))) ;) }))) (expression_statement "local_70 = local_40;" (assignment_expression "local_70 = local_40" identifier = identifier) ;) (expression_statement "uVar1 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(ulong *)(param_1 + 0x58) = uVar1;" (assignment_expression "*(ulong *)(param_1 + 0x58) = uVar1" (pointer_expression "*(ulong *)(param_1 + 0x58)" * (cast_expression "(ulong *)(param_1 + 0x58)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */\n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */\n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }" if (parenthesized_expression "(uVar1 < 0x1fffffffffffffff)" ( (binary_expression "uVar1 < 0x1fffffffffffffff" identifier < number_literal) )) (compound_statement "{\n                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */\n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */\n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }" { comment (expression_statement "uVar8 = thunk_FUN_002a11b0(uVar1 << 2);" (assignment_expression "uVar8 = thunk_FUN_002a11b0(uVar1 << 2)" identifier = (call_expression "thunk_FUN_002a11b0(uVar1 << 2)" identifier (argument_list "(uVar1 << 2)" ( (binary_expression "uVar1 << 2" identifier << number_literal) )))) ;) comment (expression_statement "FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);" (call_expression "FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0)" identifier (argument_list "(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0)" ( identifier , identifier , (pointer_expression "*(undefined8 *)(param_1 + 0x58)" * (cast_expression "(undefined8 *)(param_1 + 0x58)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) , number_literal ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0)" ( (binary_expression "*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0" (pointer_expression "*(code **)(*plVar4 + 0x48)" * (cast_expression "(code **)(*plVar4 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x48)" ( (binary_expression "*plVar4 + 0x48" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7ca0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 100);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 100)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 100)" * (cast_expression "(undefined4 *)(plVar4[2] + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 100)" ( (binary_expression "plVar4[2] + 100" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }" else (compound_statement "{\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }" { comment (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x48))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x48))" ( (pointer_expression "**(code **)(*plVar4 + 0x48)" * (pointer_expression "*(code **)(*plVar4 + 0x48)" * (cast_expression "(code **)(*plVar4 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x48)" ( (binary_expression "*plVar4 + 0x48" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 100) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 100) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 100)" * (cast_expression "(undefined4 *)(param_1 + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 100)" ( (binary_expression "param_1 + 100" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0)" ( (binary_expression "*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0" (pointer_expression "*(code **)(*plVar4 + 0x50)" * (cast_expression "(code **)(*plVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x50)" ( (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7fe0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x68);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x68)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 0x68)" * (cast_expression "(undefined4 *)(plVar4[2] + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x68)" ( (binary_expression "plVar4[2] + 0x68" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }" else (compound_statement "{\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }" { comment (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x50))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x50))" ( (pointer_expression "**(code **)(*plVar4 + 0x50)" * (pointer_expression "*(code **)(*plVar4 + 0x50)" * (cast_expression "(code **)(*plVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x50)" ( (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 0x68) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x68) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x68)" * (cast_expression "(undefined4 *)(param_1 + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x68)" ( (binary_expression "param_1 + 0x68" identifier + number_literal) )))) = identifier) ;) (expression_statement "plVar4 = (long *)FUN_002ef340(param_2);" (assignment_expression "plVar4 = (long *)FUN_002ef340(param_2)" identifier = (cast_expression "(long *)FUN_002ef340(param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002ef340(param_2)" identifier (argument_list "(param_2)" ( identifier ))))) ;) (expression_statement "(**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);" (call_expression "(**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c)" (parenthesized_expression "(**(code **)(*plVar4 + 0x58))" ( (pointer_expression "**(code **)(*plVar4 + 0x58)" * (pointer_expression "*(code **)(*plVar4 + 0x58)" * (cast_expression "(code **)(*plVar4 + 0x58)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x58)" ( (binary_expression "*plVar4 + 0x58" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c)" ( identifier , identifier , (binary_expression "PTR_DAT_003f8630 + 0xb" identifier + number_literal) , (binary_expression "param_1 + 0x6c" identifier + number_literal) ))) ;) (expression_statement "*(char **)(param_1 + 0x10) = pcVar5;" (assignment_expression "*(char **)(param_1 + 0x10) = pcVar5" (pointer_expression "*(char **)(param_1 + 0x10)" * (cast_expression "(char **)(param_1 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_1 + 0x30) = uVar6;" (assignment_expression "*(undefined8 *)(param_1 + 0x30) = uVar6" (pointer_expression "*(undefined8 *)(param_1 + 0x30)" * (cast_expression "(undefined8 *)(param_1 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_1 + 0x40) = uVar7;" (assignment_expression "*(undefined8 *)(param_1 + 0x40) = uVar7" (pointer_expression "*(undefined8 *)(param_1 + 0x40)" * (cast_expression "(undefined8 *)(param_1 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_1 + 0x50) = uVar8;" (assignment_expression "*(undefined8 *)(param_1 + 0x50) = uVar8" (pointer_expression "*(undefined8 *)(param_1 + 0x50)" * (cast_expression "(undefined8 *)(param_1 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 *)(param_1 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_1 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_1 + 0x98)" * (cast_expression "(undefined1 *)(param_1 + 0x98)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x98)" ( (binary_expression "param_1 + 0x98" identifier + number_literal) )))) = number_literal) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00405f00" & identifier)) )) (compound_statement "{\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }" { (expression_statement "FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);" (call_expression "FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_59)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_59" & identifier) ))) ;) })) (if_statement "if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }" if (parenthesized_expression "((undefined8 *)(local_48 + -0x18) != &DAT_00405f00)" ( (binary_expression "(undefined8 *)(local_48 + -0x18) != &DAT_00405f00" (cast_expression "(undefined8 *)(local_48 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) ))) != (pointer_expression "&DAT_00405f00" & identifier)) )) (compound_statement "{\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }" { (expression_statement "FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);" (call_expression "FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59)" identifier (argument_list "((undefined8 *)(local_48 + -0x18),&local_59)" ( (cast_expression "(undefined8 *)(local_48 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) ))) , (pointer_expression "&local_59" & identifier) ))) ;) })) (if_statement "if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }" if (parenthesized_expression "((undefined8 *)(local_50 + -0x18) != &DAT_00405f00)" ( (binary_expression "(undefined8 *)(local_50 + -0x18) != &DAT_00405f00" (cast_expression "(undefined8 *)(local_50 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + -0x18)" ( (binary_expression "local_50 + -0x18" identifier + number_literal) ))) != (pointer_expression "&DAT_00405f00" & identifier)) )) (compound_statement "{\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }" { (expression_statement "FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);" (call_expression "FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59)" identifier (argument_list "((undefined8 *)(local_50 + -0x18),&local_59)" ( (cast_expression "(undefined8 *)(local_50 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + -0x18)" ( (binary_expression "local_50 + -0x18" identifier + number_literal) ))) , (pointer_expression "&local_59" & identifier) ))) ;) })) (if_statement "if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }" if (parenthesized_expression "((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38)" ( (binary_expression "(undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38" (cast_expression "(undefined *)(local_58 + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + -0x18)" ( (binary_expression "local_58 + -0x18" identifier + number_literal) ))) != identifier) )) (compound_statement "{\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }" { (expression_statement "FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);" (call_expression "FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59)" identifier (argument_list "((undefined *)(local_58 + -0x18),&local_59)" ( (cast_expression "(undefined *)(local_58 + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + -0x18)" ( (binary_expression "local_58 + -0x18" identifier + number_literal) ))) , (pointer_expression "&local_59" & identifier) ))) ;) })) (return_statement "return;" return ;) })) comment comment (expression_statement "FUN_002a23f0();" (call_expression "FUN_002a23f0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit "/* std::__moneypunct_cache<wchar_t, true>::_M_cache(std::locale const&) */\n\nvoid __thiscall\nstd::__moneypunct_cache<wchar_t,true>::_M_cache\n          (__moneypunct_cache<wchar_t,true> *this,locale *param_1)\n\n{\n  ulong uVar1;\n  __moneypunct_cache<wchar_t,true> _Var2;\n  undefined4 uVar3;\n  moneypunct *pmVar4;\n  char *pcVar5;\n  wchar_t *pwVar6;\n  wchar_t *pwVar7;\n  wchar_t *pwVar8;\n  ctype *pcVar9;\n  wstring *local_70;\n  allocator local_5b;\n  allocator local_5a;\n  allocator local_59;\n  long local_58;\n  long local_50;\n  long local_48;\n  long local_40 [2];\n  \n  pmVar4 = use_facet<std::moneypunct<wchar_t,true>>(param_1);\n  if (*(code **)(*(long *)pmVar4 + 0x10) == (code *)PTR_do_decimal_point_003f7f58) {\n    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x10))(pmVar4);\n  }\n  *(undefined4 *)(this + 0x24) = uVar3;\n  if (*(code **)(*(long *)pmVar4 + 0x18) == (code *)PTR_do_thousands_sep_003f7c98) {\n    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x18))(pmVar4);\n  }\n  *(undefined4 *)(this + 0x28) = uVar3;\n  if (*(code **)(*(long *)pmVar4 + 0x40) == (code *)PTR_do_frac_digits_003f7ac8) {\n    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x40))(pmVar4);\n  }\n  *(undefined4 *)(this + 0x60) = uVar3;\n  if (*(code **)(*(long *)pmVar4 + 0x20) == (code *)PTR_do_grouping_003f7e30) {\n                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */\n    std::string::string((string *)&local_58,*(char **)(*(long *)(pmVar4 + 0x10) + 0x10),\n                        (allocator *)local_40);\n  }\n  else {\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*(long *)pmVar4 + 0x20))(&local_58,pmVar4);\n  }\n  uVar1 = *(ulong *)(local_58 + -0x18);\n  *(ulong *)(this + 0x18) = uVar1;\n                    /* try { // try from 002efed8 to 002efedc has its CatchHandler @ 002f02cd */\n  pcVar5 = (char *)operator_new__(uVar1);\n                    /* try { // try from 002efeec to 002efef0 has its CatchHandler @ 002f02cb */\n  std::string::copy((string *)&local_58,pcVar5,*(ulong *)(this + 0x18),0);\n  _Var2 = (__moneypunct_cache<wchar_t,true>)0x0;\n  if (*(long *)(this + 0x18) != 0) {\n    _Var2 = (__moneypunct_cache<wchar_t,true>)((byte)(*pcVar5 - 1U) < 0x7e);\n  }\n  this[0x20] = _Var2;\n  if (*(code **)(*(long *)pmVar4 + 0x28) == (code *)PTR_do_curr_symbol_003f7fc8) {\n                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */\n    std::wstring::wstring\n              ((wstring *)&local_50,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30),&local_5b);\n  }\n  else {\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*(long *)pmVar4 + 0x28))(&local_50,pmVar4);\n  }\n  uVar1 = *(ulong *)(local_50 + -0x18);\n  *(ulong *)(this + 0x38) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */\n    __cxa_throw_bad_array_new_length();\n  }\n                    /* try { // try from 002eff54 to 002eff58 has its CatchHandler @ 002f034b */\n  pwVar6 = (wchar_t *)operator_new__(uVar1 << 2);\n                    /* try { // try from 002eff68 to 002eff6c has its CatchHandler @ 002f03ad */\n  std::wstring::copy((wstring *)&local_50,pwVar6,*(ulong *)(this + 0x38),0);\n  if (*(code **)(*(long *)pmVar4 + 0x30) == (code *)PTR_do_positive_sign_003f7fb8) {\n                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */\n    std::wstring::wstring\n              ((wstring *)&local_48,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40),&local_5a);\n  }\n  else {\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*(long *)pmVar4 + 0x30))(&local_48,pmVar4);\n  }\n  uVar1 = *(ulong *)(local_48 + -0x18);\n  *(ulong *)(this + 0x48) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */\n    __cxa_throw_bad_array_new_length();\n  }\n                    /* try { // try from 002effc0 to 002effc4 has its CatchHandler @ 002f02e7 */\n  pwVar7 = (wchar_t *)operator_new__(uVar1 << 2);\n                    /* try { // try from 002effd4 to 002effd8 has its CatchHandler @ 002f02e5 */\n  std::wstring::copy((wstring *)&local_48,pwVar7,*(ulong *)(this + 0x48),0);\n  if (*(code **)(*(long *)pmVar4 + 0x38) == (code *)PTR_do_negative_sign_003f7e80) {\n                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */\n    std::wstring::wstring\n              ((wstring *)local_40,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50),&local_59);\n  }\n  else {\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*(long *)pmVar4 + 0x38))(local_40,pmVar4);\n  }\n  local_70 = (wstring *)local_40;\n  uVar1 = *(ulong *)(local_40[0] + -0x18);\n  *(ulong *)(this + 0x58) = uVar1;\n  if (uVar1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */\n    pwVar8 = (wchar_t *)operator_new__(uVar1 << 2);\n                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */\n    std::wstring::copy(local_70,pwVar8,*(ulong *)(this + 0x58),0);\n    if (*(code **)(*(long *)pmVar4 + 0x48) == (code *)PTR_do_pos_format_003f7ca0) {\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x48))(pmVar4);\n    }\n    *(undefined4 *)(this + 100) = uVar3;\n    if (*(code **)(*(long *)pmVar4 + 0x50) == (code *)PTR_do_neg_format_003f7fe0) {\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x50))(pmVar4);\n    }\n    *(undefined4 *)(this + 0x68) = uVar3;\n    pcVar9 = use_facet<std::ctype<wchar_t>>(param_1);\n    (**(code **)(*(long *)pcVar9 + 0x58))\n              (pcVar9,money_base::_S_atoms,money_base::_S_atoms + 0xb,this + 0x6c);\n    *(char **)(this + 0x10) = pcVar5;\n    *(wchar_t **)(this + 0x30) = pwVar6;\n    *(wchar_t **)(this + 0x40) = pwVar7;\n    *(wchar_t **)(this + 0x50) = pwVar8;\n    this[0x98] = (__moneypunct_cache<wchar_t,true>)0x1;\n    if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage\n       ) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }\n    if ((allocator *)(local_48 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n    }\n    if ((allocator *)(local_50 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_50 + -0x18));\n    }\n    if ((allocator *)(local_58 + -0x18) != (allocator *)PTR__S_empty_rep_storage_003f7c38) {\n      std::string::_Rep::_M_dispose((allocator *)(local_58 + -0x18));\n    }\n    return;\n  }\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03a1 to 002f03a5 has its CatchHandler @ 002f03a6 */\n  __cxa_throw_bad_array_new_length();\n}\n\n" comment (declaration "void __thiscall\nstd::__moneypunct_cache<wchar_t,true>::_M_cache\n          (__moneypunct_cache<wchar_t,true> *this,locale *param_1)\n\n{\n  ulong uVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::__moneypunct_cache<" identifier : : identifier <) identifier , (ERROR "true>::_M_cache\n          (__moneypunct_cache<wchar_t,true> *this,locale *param_1)\n\n{\n  ulong" identifier > : : (function_declarator "_M_cache\n          (__moneypunct_cache<wchar_t,true> *this,locale *param_1)" identifier (parameter_list "(__moneypunct_cache<wchar_t,true> *this,locale *param_1)" ( (parameter_declaration "__moneypunct_cache<wchar_t" type_identifier (ERROR "<" <) identifier) , (parameter_declaration "true> *this" type_identifier (ERROR ">" >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "locale *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) ))) { identifier) identifier ;) (expression_statement "__moneypunct_cache<wchar_t,true> _Var2;" (update_expression "__moneypunct_cache<wchar_t,true> _Var2" (binary_expression "__moneypunct_cache<wchar_t,true> _Var2" (binary_expression "__moneypunct_cache<wchar_t" identifier < identifier) (ERROR ",true" , true) > identifier) --) ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "moneypunct *pmVar4;" type_identifier (pointer_declarator "*pmVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "wchar_t *pwVar6;" type_identifier (pointer_declarator "*pwVar6" * identifier) ;) (declaration "wchar_t *pwVar7;" type_identifier (pointer_declarator "*pwVar7" * identifier) ;) (declaration "wchar_t *pwVar8;" type_identifier (pointer_declarator "*pwVar8" * identifier) ;) (declaration "ctype *pcVar9;" type_identifier (pointer_declarator "*pcVar9" * identifier) ;) (declaration "wstring *local_70;" type_identifier (pointer_declarator "*local_70" * identifier) ;) (declaration "allocator local_5b;" type_identifier identifier ;) (declaration "allocator local_5a;" type_identifier identifier ;) (declaration "allocator local_59;" type_identifier identifier ;) (declaration "long local_58;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_48;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_40 [2];" (sized_type_specifier "long" long) (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "pmVar4 = use_facet<std::moneypunct<wchar_t,true>>(param_1);" (update_expression "pmVar4 = use_facet<std::moneypunct<wchar_t,true>>(param_1)" (binary_expression "pmVar4 = use_facet<std::moneypunct<wchar_t,true>>(param_1)" (binary_expression "pmVar4 = use_facet<std::moneypunct<wchar_t" (assignment_expression "pmVar4 = use_facet<std" identifier = (binary_expression "use_facet<std" identifier < identifier)) (ERROR "::moneypunct" : : identifier) < identifier) (ERROR ",true" , true) >> (parenthesized_expression "(param_1)" ( identifier ))) --) ;) (if_statement "if (*(code **)(*(long *)pmVar4 + 0x10) == (code *)PTR_do_decimal_point_003f7f58) {\n    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x10))(pmVar4);\n  }" if (parenthesized_expression "(*(code **)(*(long *)pmVar4 + 0x10) == (code *)PTR_do_decimal_point_003f7f58)" ( (binary_expression "*(code **)(*(long *)pmVar4 + 0x10) == (code *)PTR_do_decimal_point_003f7f58" (pointer_expression "*(code **)(*(long *)pmVar4 + 0x10)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x10)" ( (binary_expression "*(long *)pmVar4 + 0x10" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == (cast_expression "(code *)PTR_do_decimal_point_003f7f58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x24);\n  }" { (expression_statement "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x24);" (assignment_expression "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x24)" identifier = (pointer_expression "*(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x24)" * (cast_expression "(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(pmVar4 + 0x10) + 0x24)" ( (binary_expression "*(long *)(pmVar4 + 0x10) + 0x24" (pointer_expression "*(long *)(pmVar4 + 0x10)" * (cast_expression "(long *)(pmVar4 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmVar4 + 0x10)" ( (binary_expression "pmVar4 + 0x10" identifier + number_literal) )))) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x10))(pmVar4);\n  }" else (compound_statement "{\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x10))(pmVar4);\n  }" { (expression_statement "uVar3 = (**(code **)(*(long *)pmVar4 + 0x10))(pmVar4);" (assignment_expression "uVar3 = (**(code **)(*(long *)pmVar4 + 0x10))(pmVar4)" identifier = (call_expression "(**(code **)(*(long *)pmVar4 + 0x10))(pmVar4)" (parenthesized_expression "(**(code **)(*(long *)pmVar4 + 0x10))" ( (pointer_expression "**(code **)(*(long *)pmVar4 + 0x10)" * (pointer_expression "*(code **)(*(long *)pmVar4 + 0x10)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x10)" ( (binary_expression "*(long *)pmVar4 + 0x10" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(pmVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(this + 0x24) = uVar3;" (assignment_expression "*(undefined4 *)(this + 0x24) = uVar3" (pointer_expression "*(undefined4 *)(this + 0x24)" * (cast_expression "(undefined4 *)(this + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x24)" ( (binary_expression "this + 0x24" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*(long *)pmVar4 + 0x18) == (code *)PTR_do_thousands_sep_003f7c98) {\n    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x18))(pmVar4);\n  }" if (parenthesized_expression "(*(code **)(*(long *)pmVar4 + 0x18) == (code *)PTR_do_thousands_sep_003f7c98)" ( (binary_expression "*(code **)(*(long *)pmVar4 + 0x18) == (code *)PTR_do_thousands_sep_003f7c98" (pointer_expression "*(code **)(*(long *)pmVar4 + 0x18)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x18)" ( (binary_expression "*(long *)pmVar4 + 0x18" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == (cast_expression "(code *)PTR_do_thousands_sep_003f7c98" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x28);\n  }" { (expression_statement "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x28);" (assignment_expression "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x28)" identifier = (pointer_expression "*(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x28)" * (cast_expression "(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(pmVar4 + 0x10) + 0x28)" ( (binary_expression "*(long *)(pmVar4 + 0x10) + 0x28" (pointer_expression "*(long *)(pmVar4 + 0x10)" * (cast_expression "(long *)(pmVar4 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmVar4 + 0x10)" ( (binary_expression "pmVar4 + 0x10" identifier + number_literal) )))) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x18))(pmVar4);\n  }" else (compound_statement "{\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x18))(pmVar4);\n  }" { (expression_statement "uVar3 = (**(code **)(*(long *)pmVar4 + 0x18))(pmVar4);" (assignment_expression "uVar3 = (**(code **)(*(long *)pmVar4 + 0x18))(pmVar4)" identifier = (call_expression "(**(code **)(*(long *)pmVar4 + 0x18))(pmVar4)" (parenthesized_expression "(**(code **)(*(long *)pmVar4 + 0x18))" ( (pointer_expression "**(code **)(*(long *)pmVar4 + 0x18)" * (pointer_expression "*(code **)(*(long *)pmVar4 + 0x18)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x18)" ( (binary_expression "*(long *)pmVar4 + 0x18" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(pmVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(this + 0x28) = uVar3;" (assignment_expression "*(undefined4 *)(this + 0x28) = uVar3" (pointer_expression "*(undefined4 *)(this + 0x28)" * (cast_expression "(undefined4 *)(this + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x28)" ( (binary_expression "this + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*(long *)pmVar4 + 0x40) == (code *)PTR_do_frac_digits_003f7ac8) {\n    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x40))(pmVar4);\n  }" if (parenthesized_expression "(*(code **)(*(long *)pmVar4 + 0x40) == (code *)PTR_do_frac_digits_003f7ac8)" ( (binary_expression "*(code **)(*(long *)pmVar4 + 0x40) == (code *)PTR_do_frac_digits_003f7ac8" (pointer_expression "*(code **)(*(long *)pmVar4 + 0x40)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x40)" ( (binary_expression "*(long *)pmVar4 + 0x40" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == (cast_expression "(code *)PTR_do_frac_digits_003f7ac8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x60);\n  }" { (expression_statement "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x60);" (assignment_expression "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x60)" identifier = (pointer_expression "*(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x60)" * (cast_expression "(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(pmVar4 + 0x10) + 0x60)" ( (binary_expression "*(long *)(pmVar4 + 0x10) + 0x60" (pointer_expression "*(long *)(pmVar4 + 0x10)" * (cast_expression "(long *)(pmVar4 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmVar4 + 0x10)" ( (binary_expression "pmVar4 + 0x10" identifier + number_literal) )))) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x40))(pmVar4);\n  }" else (compound_statement "{\n    uVar3 = (**(code **)(*(long *)pmVar4 + 0x40))(pmVar4);\n  }" { (expression_statement "uVar3 = (**(code **)(*(long *)pmVar4 + 0x40))(pmVar4);" (assignment_expression "uVar3 = (**(code **)(*(long *)pmVar4 + 0x40))(pmVar4)" identifier = (call_expression "(**(code **)(*(long *)pmVar4 + 0x40))(pmVar4)" (parenthesized_expression "(**(code **)(*(long *)pmVar4 + 0x40))" ( (pointer_expression "**(code **)(*(long *)pmVar4 + 0x40)" * (pointer_expression "*(code **)(*(long *)pmVar4 + 0x40)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x40)" ( (binary_expression "*(long *)pmVar4 + 0x40" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(pmVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(this + 0x60) = uVar3;" (assignment_expression "*(undefined4 *)(this + 0x60) = uVar3" (pointer_expression "*(undefined4 *)(this + 0x60)" * (cast_expression "(undefined4 *)(this + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x60)" ( (binary_expression "this + 0x60" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*(long *)pmVar4 + 0x20) == (code *)PTR_do_grouping_003f7e30) {\n                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */\n    std::string::string((string *)&local_58,*(char **)(*(long *)(pmVar4 + 0x10) + 0x10),\n                        (allocator *)local_40);\n  }\n  else {\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*(long *)pmVar4 + 0x20))(&local_58,pmVar4);\n  }" if (parenthesized_expression "(*(code **)(*(long *)pmVar4 + 0x20) == (code *)PTR_do_grouping_003f7e30)" ( (binary_expression "*(code **)(*(long *)pmVar4 + 0x20) == (code *)PTR_do_grouping_003f7e30" (pointer_expression "*(code **)(*(long *)pmVar4 + 0x20)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x20)" ( (binary_expression "*(long *)pmVar4 + 0x20" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == (cast_expression "(code *)PTR_do_grouping_003f7e30" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */\n    std::string::string((string *)&local_58,*(char **)(*(long *)(pmVar4 + 0x10) + 0x10),\n                        (allocator *)local_40);\n  }" { comment (labeled_statement "std::string::string((string *)&local_58,*(char **)(*(long *)(pmVar4 + 0x10) + 0x10),\n                        (allocator *)local_40);" statement_identifier : (ERROR ":" :) (labeled_statement "string::string((string *)&local_58,*(char **)(*(long *)(pmVar4 + 0x10) + 0x10),\n                        (allocator *)local_40);" statement_identifier : (ERROR ":" :) (expression_statement "string((string *)&local_58,*(char **)(*(long *)(pmVar4 + 0x10) + 0x10),\n                        (allocator *)local_40);" (call_expression "string((string *)&local_58,*(char **)(*(long *)(pmVar4 + 0x10) + 0x10),\n                        (allocator *)local_40)" identifier (argument_list "((string *)&local_58,*(char **)(*(long *)(pmVar4 + 0x10) + 0x10),\n                        (allocator *)local_40)" ( (cast_expression "(string *)&local_58" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_58" & identifier)) , (pointer_expression "*(char **)(*(long *)(pmVar4 + 0x10) + 0x10)" * (cast_expression "(char **)(*(long *)(pmVar4 + 0x10) + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(pmVar4 + 0x10) + 0x10)" ( (binary_expression "*(long *)(pmVar4 + 0x10) + 0x10" (pointer_expression "*(long *)(pmVar4 + 0x10)" * (cast_expression "(long *)(pmVar4 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmVar4 + 0x10)" ( (binary_expression "pmVar4 + 0x10" identifier + number_literal) )))) + number_literal) )))) , (cast_expression "(allocator *)local_40" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;))) }) (else_clause "else {\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*(long *)pmVar4 + 0x20))(&local_58,pmVar4);\n  }" else (compound_statement "{\n                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */\n    (**(code **)(*(long *)pmVar4 + 0x20))(&local_58,pmVar4);\n  }" { comment (expression_statement "(**(code **)(*(long *)pmVar4 + 0x20))(&local_58,pmVar4);" (call_expression "(**(code **)(*(long *)pmVar4 + 0x20))(&local_58,pmVar4)" (parenthesized_expression "(**(code **)(*(long *)pmVar4 + 0x20))" ( (pointer_expression "**(code **)(*(long *)pmVar4 + 0x20)" * (pointer_expression "*(code **)(*(long *)pmVar4 + 0x20)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x20)" ( (binary_expression "*(long *)pmVar4 + 0x20" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(&local_58,pmVar4)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) }))) (expression_statement "uVar1 = *(ulong *)(local_58 + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_58 + -0x18)" identifier = (pointer_expression "*(ulong *)(local_58 + -0x18)" * (cast_expression "(ulong *)(local_58 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + -0x18)" ( (binary_expression "local_58 + -0x18" identifier + number_literal) ))))) ;) (expression_statement "*(ulong *)(this + 0x18) = uVar1;" (assignment_expression "*(ulong *)(this + 0x18) = uVar1" (pointer_expression "*(ulong *)(this + 0x18)" * (cast_expression "(ulong *)(this + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) )))) = identifier) ;) comment (expression_statement "pcVar5 = (char *)operator_new__(uVar1);" (assignment_expression "pcVar5 = (char *)operator_new__(uVar1)" identifier = (cast_expression "(char *)operator_new__(uVar1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(uVar1)" identifier (argument_list "(uVar1)" ( identifier ))))) ;) comment (labeled_statement "std::string::copy((string *)&local_58,pcVar5,*(ulong *)(this + 0x18),0);" statement_identifier : (ERROR ":" :) (labeled_statement "string::copy((string *)&local_58,pcVar5,*(ulong *)(this + 0x18),0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((string *)&local_58,pcVar5,*(ulong *)(this + 0x18),0);" (call_expression "copy((string *)&local_58,pcVar5,*(ulong *)(this + 0x18),0)" identifier (argument_list "((string *)&local_58,pcVar5,*(ulong *)(this + 0x18),0)" ( (cast_expression "(string *)&local_58" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_58" & identifier)) , identifier , (pointer_expression "*(ulong *)(this + 0x18)" * (cast_expression "(ulong *)(this + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) )))) , number_literal ))) ;))) (expression_statement "_Var2 = (__moneypunct_cache<wchar_t,true>)0x0;" (assignment_expression "_Var2 = (__moneypunct_cache<wchar_t,true>)0x0" identifier = (parenthesized_expression "(__moneypunct_cache<wchar_t,true>)0x0" ( (comma_expression "__moneypunct_cache<wchar_t,true>)0x0" (binary_expression "__moneypunct_cache<wchar_t" identifier < identifier) , (binary_expression "true>)0x0" true > (ERROR ")" )) number_literal)) ))) ;) (if_statement "if (*(long *)(this + 0x18) != 0) {\n    _Var2 = (__moneypunct_cache<wchar_t,true>)((byte)(*pcVar5 - 1U) < 0x7e);\n  }" if (parenthesized_expression "(*(long *)(this + 0x18) != 0)" ( (binary_expression "*(long *)(this + 0x18) != 0" (pointer_expression "*(long *)(this + 0x18)" * (cast_expression "(long *)(this + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    _Var2 = (__moneypunct_cache<wchar_t,true>)((byte)(*pcVar5 - 1U) < 0x7e);\n  }" { (expression_statement "_Var2 = (__moneypunct_cache<wchar_t,true>)((byte)(*pcVar5 - 1U) < 0x7e);" (assignment_expression "_Var2 = (__moneypunct_cache<wchar_t,true>)((byte)(*pcVar5 - 1U) < 0x7e)" identifier = (call_expression "(__moneypunct_cache<wchar_t,true>)((byte)(*pcVar5 - 1U) < 0x7e)" (parenthesized_expression "(__moneypunct_cache<wchar_t,true>)" ( (comma_expression "__moneypunct_cache<wchar_t,true" (binary_expression "__moneypunct_cache<wchar_t" identifier < identifier) , true) (ERROR ">" >) )) (argument_list "((byte)(*pcVar5 - 1U) < 0x7e)" ( (binary_expression "(byte)(*pcVar5 - 1U) < 0x7e" (call_expression "(byte)(*pcVar5 - 1U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar5 - 1U)" ( (binary_expression "*pcVar5 - 1U" (pointer_expression "*pcVar5" * identifier) - number_literal) ))) < number_literal) )))) ;) })) (expression_statement "this[0x20] = _Var2;" (assignment_expression "this[0x20] = _Var2" (subscript_expression "this[0x20]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (*(code **)(*(long *)pmVar4 + 0x28) == (code *)PTR_do_curr_symbol_003f7fc8) {\n                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */\n    std::wstring::wstring\n              ((wstring *)&local_50,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30),&local_5b);\n  }\n  else {\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*(long *)pmVar4 + 0x28))(&local_50,pmVar4);\n  }" if (parenthesized_expression "(*(code **)(*(long *)pmVar4 + 0x28) == (code *)PTR_do_curr_symbol_003f7fc8)" ( (binary_expression "*(code **)(*(long *)pmVar4 + 0x28) == (code *)PTR_do_curr_symbol_003f7fc8" (pointer_expression "*(code **)(*(long *)pmVar4 + 0x28)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x28)" ( (binary_expression "*(long *)pmVar4 + 0x28" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == (cast_expression "(code *)PTR_do_curr_symbol_003f7fc8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */\n    std::wstring::wstring\n              ((wstring *)&local_50,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30),&local_5b);\n  }" { comment (labeled_statement "std::wstring::wstring\n              ((wstring *)&local_50,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30),&local_5b);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::wstring\n              ((wstring *)&local_50,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30),&local_5b);" statement_identifier : (ERROR ":" :) (expression_statement "wstring\n              ((wstring *)&local_50,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30),&local_5b);" (call_expression "wstring\n              ((wstring *)&local_50,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30),&local_5b)" identifier (argument_list "((wstring *)&local_50,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30),&local_5b)" ( (cast_expression "(wstring *)&local_50" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_50" & identifier)) , (pointer_expression "*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30)" * (cast_expression "(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x30)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(pmVar4 + 0x10) + 0x30)" ( (binary_expression "*(long *)(pmVar4 + 0x10) + 0x30" (pointer_expression "*(long *)(pmVar4 + 0x10)" * (cast_expression "(long *)(pmVar4 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmVar4 + 0x10)" ( (binary_expression "pmVar4 + 0x10" identifier + number_literal) )))) + number_literal) )))) , (pointer_expression "&local_5b" & identifier) ))) ;))) }) (else_clause "else {\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*(long *)pmVar4 + 0x28))(&local_50,pmVar4);\n  }" else (compound_statement "{\n                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */\n    (**(code **)(*(long *)pmVar4 + 0x28))(&local_50,pmVar4);\n  }" { comment (expression_statement "(**(code **)(*(long *)pmVar4 + 0x28))(&local_50,pmVar4);" (call_expression "(**(code **)(*(long *)pmVar4 + 0x28))(&local_50,pmVar4)" (parenthesized_expression "(**(code **)(*(long *)pmVar4 + 0x28))" ( (pointer_expression "**(code **)(*(long *)pmVar4 + 0x28)" * (pointer_expression "*(code **)(*(long *)pmVar4 + 0x28)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x28)" ( (binary_expression "*(long *)pmVar4 + 0x28" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(&local_50,pmVar4)" ( (pointer_expression "&local_50" & identifier) , identifier ))) ;) }))) (expression_statement "uVar1 = *(ulong *)(local_50 + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_50 + -0x18)" identifier = (pointer_expression "*(ulong *)(local_50 + -0x18)" * (cast_expression "(ulong *)(local_50 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + -0x18)" ( (binary_expression "local_50 + -0x18" identifier + number_literal) ))))) ;) (expression_statement "*(ulong *)(this + 0x38) = uVar1;" (assignment_expression "*(ulong *)(this + 0x38) = uVar1" (pointer_expression "*(ulong *)(this + 0x38)" * (cast_expression "(ulong *)(this + 0x38)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x38)" ( (binary_expression "this + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */\n    __cxa_throw_bad_array_new_length();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < uVar1)" ( (binary_expression "0x1ffffffffffffffe < uVar1" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */\n    __cxa_throw_bad_array_new_length();\n  }" { comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "pwVar6 = (wchar_t *)operator_new__(uVar1 << 2);" (assignment_expression "pwVar6 = (wchar_t *)operator_new__(uVar1 << 2)" identifier = (cast_expression "(wchar_t *)operator_new__(uVar1 << 2)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(uVar1 << 2)" identifier (argument_list "(uVar1 << 2)" ( (binary_expression "uVar1 << 2" identifier << number_literal) ))))) ;) comment (labeled_statement "std::wstring::copy((wstring *)&local_50,pwVar6,*(ulong *)(this + 0x38),0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)&local_50,pwVar6,*(ulong *)(this + 0x38),0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)&local_50,pwVar6,*(ulong *)(this + 0x38),0);" (call_expression "copy((wstring *)&local_50,pwVar6,*(ulong *)(this + 0x38),0)" identifier (argument_list "((wstring *)&local_50,pwVar6,*(ulong *)(this + 0x38),0)" ( (cast_expression "(wstring *)&local_50" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_50" & identifier)) , identifier , (pointer_expression "*(ulong *)(this + 0x38)" * (cast_expression "(ulong *)(this + 0x38)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x38)" ( (binary_expression "this + 0x38" identifier + number_literal) )))) , number_literal ))) ;))) (if_statement "if (*(code **)(*(long *)pmVar4 + 0x30) == (code *)PTR_do_positive_sign_003f7fb8) {\n                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */\n    std::wstring::wstring\n              ((wstring *)&local_48,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40),&local_5a);\n  }\n  else {\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*(long *)pmVar4 + 0x30))(&local_48,pmVar4);\n  }" if (parenthesized_expression "(*(code **)(*(long *)pmVar4 + 0x30) == (code *)PTR_do_positive_sign_003f7fb8)" ( (binary_expression "*(code **)(*(long *)pmVar4 + 0x30) == (code *)PTR_do_positive_sign_003f7fb8" (pointer_expression "*(code **)(*(long *)pmVar4 + 0x30)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x30)" ( (binary_expression "*(long *)pmVar4 + 0x30" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == (cast_expression "(code *)PTR_do_positive_sign_003f7fb8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */\n    std::wstring::wstring\n              ((wstring *)&local_48,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40),&local_5a);\n  }" { comment (labeled_statement "std::wstring::wstring\n              ((wstring *)&local_48,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40),&local_5a);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::wstring\n              ((wstring *)&local_48,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40),&local_5a);" statement_identifier : (ERROR ":" :) (expression_statement "wstring\n              ((wstring *)&local_48,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40),&local_5a);" (call_expression "wstring\n              ((wstring *)&local_48,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40),&local_5a)" identifier (argument_list "((wstring *)&local_48,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40),&local_5a)" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (pointer_expression "*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40)" * (cast_expression "(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x40)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(pmVar4 + 0x10) + 0x40)" ( (binary_expression "*(long *)(pmVar4 + 0x10) + 0x40" (pointer_expression "*(long *)(pmVar4 + 0x10)" * (cast_expression "(long *)(pmVar4 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmVar4 + 0x10)" ( (binary_expression "pmVar4 + 0x10" identifier + number_literal) )))) + number_literal) )))) , (pointer_expression "&local_5a" & identifier) ))) ;))) }) (else_clause "else {\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*(long *)pmVar4 + 0x30))(&local_48,pmVar4);\n  }" else (compound_statement "{\n                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */\n    (**(code **)(*(long *)pmVar4 + 0x30))(&local_48,pmVar4);\n  }" { comment (expression_statement "(**(code **)(*(long *)pmVar4 + 0x30))(&local_48,pmVar4);" (call_expression "(**(code **)(*(long *)pmVar4 + 0x30))(&local_48,pmVar4)" (parenthesized_expression "(**(code **)(*(long *)pmVar4 + 0x30))" ( (pointer_expression "**(code **)(*(long *)pmVar4 + 0x30)" * (pointer_expression "*(code **)(*(long *)pmVar4 + 0x30)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x30)" ( (binary_expression "*(long *)pmVar4 + 0x30" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(&local_48,pmVar4)" ( (pointer_expression "&local_48" & identifier) , identifier ))) ;) }))) (expression_statement "uVar1 = *(ulong *)(local_48 + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_48 + -0x18)" identifier = (pointer_expression "*(ulong *)(local_48 + -0x18)" * (cast_expression "(ulong *)(local_48 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) ))))) ;) (expression_statement "*(ulong *)(this + 0x48) = uVar1;" (assignment_expression "*(ulong *)(this + 0x48) = uVar1" (pointer_expression "*(ulong *)(this + 0x48)" * (cast_expression "(ulong *)(this + 0x48)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x48)" ( (binary_expression "this + 0x48" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0x1ffffffffffffffe < uVar1) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */\n    __cxa_throw_bad_array_new_length();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < uVar1)" ( (binary_expression "0x1ffffffffffffffe < uVar1" number_literal < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */\n    __cxa_throw_bad_array_new_length();\n  }" { comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) })) comment (expression_statement "pwVar7 = (wchar_t *)operator_new__(uVar1 << 2);" (assignment_expression "pwVar7 = (wchar_t *)operator_new__(uVar1 << 2)" identifier = (cast_expression "(wchar_t *)operator_new__(uVar1 << 2)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(uVar1 << 2)" identifier (argument_list "(uVar1 << 2)" ( (binary_expression "uVar1 << 2" identifier << number_literal) ))))) ;) comment (labeled_statement "std::wstring::copy((wstring *)&local_48,pwVar7,*(ulong *)(this + 0x48),0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy((wstring *)&local_48,pwVar7,*(ulong *)(this + 0x48),0);" statement_identifier : (ERROR ":" :) (expression_statement "copy((wstring *)&local_48,pwVar7,*(ulong *)(this + 0x48),0);" (call_expression "copy((wstring *)&local_48,pwVar7,*(ulong *)(this + 0x48),0)" identifier (argument_list "((wstring *)&local_48,pwVar7,*(ulong *)(this + 0x48),0)" ( (cast_expression "(wstring *)&local_48" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , identifier , (pointer_expression "*(ulong *)(this + 0x48)" * (cast_expression "(ulong *)(this + 0x48)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x48)" ( (binary_expression "this + 0x48" identifier + number_literal) )))) , number_literal ))) ;))) (if_statement "if (*(code **)(*(long *)pmVar4 + 0x38) == (code *)PTR_do_negative_sign_003f7e80) {\n                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */\n    std::wstring::wstring\n              ((wstring *)local_40,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50),&local_59);\n  }\n  else {\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*(long *)pmVar4 + 0x38))(local_40,pmVar4);\n  }" if (parenthesized_expression "(*(code **)(*(long *)pmVar4 + 0x38) == (code *)PTR_do_negative_sign_003f7e80)" ( (binary_expression "*(code **)(*(long *)pmVar4 + 0x38) == (code *)PTR_do_negative_sign_003f7e80" (pointer_expression "*(code **)(*(long *)pmVar4 + 0x38)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x38)" ( (binary_expression "*(long *)pmVar4 + 0x38" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == (cast_expression "(code *)PTR_do_negative_sign_003f7e80" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */\n    std::wstring::wstring\n              ((wstring *)local_40,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50),&local_59);\n  }" { comment (labeled_statement "std::wstring::wstring\n              ((wstring *)local_40,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50),&local_59);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::wstring\n              ((wstring *)local_40,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50),&local_59);" statement_identifier : (ERROR ":" :) (expression_statement "wstring\n              ((wstring *)local_40,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50),&local_59);" (call_expression "wstring\n              ((wstring *)local_40,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50),&local_59)" identifier (argument_list "((wstring *)local_40,*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50),&local_59)" ( (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (pointer_expression "*(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50)" * (cast_expression "(wchar_t **)(*(long *)(pmVar4 + 0x10) + 0x50)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(pmVar4 + 0x10) + 0x50)" ( (binary_expression "*(long *)(pmVar4 + 0x10) + 0x50" (pointer_expression "*(long *)(pmVar4 + 0x10)" * (cast_expression "(long *)(pmVar4 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmVar4 + 0x10)" ( (binary_expression "pmVar4 + 0x10" identifier + number_literal) )))) + number_literal) )))) , (pointer_expression "&local_59" & identifier) ))) ;))) }) (else_clause "else {\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*(long *)pmVar4 + 0x38))(local_40,pmVar4);\n  }" else (compound_statement "{\n                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */\n    (**(code **)(*(long *)pmVar4 + 0x38))(local_40,pmVar4);\n  }" { comment (expression_statement "(**(code **)(*(long *)pmVar4 + 0x38))(local_40,pmVar4);" (call_expression "(**(code **)(*(long *)pmVar4 + 0x38))(local_40,pmVar4)" (parenthesized_expression "(**(code **)(*(long *)pmVar4 + 0x38))" ( (pointer_expression "**(code **)(*(long *)pmVar4 + 0x38)" * (pointer_expression "*(code **)(*(long *)pmVar4 + 0x38)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x38)" ( (binary_expression "*(long *)pmVar4 + 0x38" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(local_40,pmVar4)" ( identifier , identifier ))) ;) }))) (expression_statement "local_70 = (wstring *)local_40;" (assignment_expression "local_70 = (wstring *)local_40" identifier = (cast_expression "(wstring *)local_40" ( (type_descriptor "wstring *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "uVar1 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(ulong *)(this + 0x58) = uVar1;" (assignment_expression "*(ulong *)(this + 0x58) = uVar1" (pointer_expression "*(ulong *)(this + 0x58)" * (cast_expression "(ulong *)(this + 0x58)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x58)" ( (binary_expression "this + 0x58" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar1 < 0x1fffffffffffffff) {\n                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */\n    pwVar8 = (wchar_t *)operator_new__(uVar1 << 2);\n                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */\n    std::wstring::copy(local_70,pwVar8,*(ulong *)(this + 0x58),0);\n    if (*(code **)(*(long *)pmVar4 + 0x48) == (code *)PTR_do_pos_format_003f7ca0) {\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x48))(pmVar4);\n    }\n    *(undefined4 *)(this + 100) = uVar3;\n    if (*(code **)(*(long *)pmVar4 + 0x50) == (code *)PTR_do_neg_format_003f7fe0) {\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x50))(pmVar4);\n    }\n    *(undefined4 *)(this + 0x68) = uVar3;\n    pcVar9 = use_facet<std::ctype<wchar_t>>(param_1);\n    (**(code **)(*(long *)pcVar9 + 0x58))\n              (pcVar9,money_base::_S_atoms,money_base::_S_atoms + 0xb,this + 0x6c);\n    *(char **)(this + 0x10) = pcVar5;\n    *(wchar_t **)(this + 0x30) = pwVar6;\n    *(wchar_t **)(this + 0x40) = pwVar7;\n    *(wchar_t **)(this + 0x50) = pwVar8;\n    this[0x98] = (__moneypunct_cache<wchar_t,true>)0x1;\n    if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage\n       ) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }\n    if ((allocator *)(local_48 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n    }\n    if ((allocator *)(local_50 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_50 + -0x18));\n    }\n    if ((allocator *)(local_58 + -0x18) != (allocator *)PTR__S_empty_rep_storage_003f7c38) {\n      std::string::_Rep::_M_dispose((allocator *)(local_58 + -0x18));\n    }\n    return;\n  }" if (parenthesized_expression "(uVar1 < 0x1fffffffffffffff)" ( (binary_expression "uVar1 < 0x1fffffffffffffff" identifier < number_literal) )) (compound_statement "{\n                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */\n    pwVar8 = (wchar_t *)operator_new__(uVar1 << 2);\n                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */\n    std::wstring::copy(local_70,pwVar8,*(ulong *)(this + 0x58),0);\n    if (*(code **)(*(long *)pmVar4 + 0x48) == (code *)PTR_do_pos_format_003f7ca0) {\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x48))(pmVar4);\n    }\n    *(undefined4 *)(this + 100) = uVar3;\n    if (*(code **)(*(long *)pmVar4 + 0x50) == (code *)PTR_do_neg_format_003f7fe0) {\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x50))(pmVar4);\n    }\n    *(undefined4 *)(this + 0x68) = uVar3;\n    pcVar9 = use_facet<std::ctype<wchar_t>>(param_1);\n    (**(code **)(*(long *)pcVar9 + 0x58))\n              (pcVar9,money_base::_S_atoms,money_base::_S_atoms + 0xb,this + 0x6c);\n    *(char **)(this + 0x10) = pcVar5;\n    *(wchar_t **)(this + 0x30) = pwVar6;\n    *(wchar_t **)(this + 0x40) = pwVar7;\n    *(wchar_t **)(this + 0x50) = pwVar8;\n    this[0x98] = (__moneypunct_cache<wchar_t,true>)0x1;\n    if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage\n       ) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }\n    if ((allocator *)(local_48 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n    }\n    if ((allocator *)(local_50 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_50 + -0x18));\n    }\n    if ((allocator *)(local_58 + -0x18) != (allocator *)PTR__S_empty_rep_storage_003f7c38) {\n      std::string::_Rep::_M_dispose((allocator *)(local_58 + -0x18));\n    }\n    return;\n  }" { comment (expression_statement "pwVar8 = (wchar_t *)operator_new__(uVar1 << 2);" (assignment_expression "pwVar8 = (wchar_t *)operator_new__(uVar1 << 2)" identifier = (cast_expression "(wchar_t *)operator_new__(uVar1 << 2)" ( (type_descriptor "wchar_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new__(uVar1 << 2)" identifier (argument_list "(uVar1 << 2)" ( (binary_expression "uVar1 << 2" identifier << number_literal) ))))) ;) comment (labeled_statement "std::wstring::copy(local_70,pwVar8,*(ulong *)(this + 0x58),0);" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::copy(local_70,pwVar8,*(ulong *)(this + 0x58),0);" statement_identifier : (ERROR ":" :) (expression_statement "copy(local_70,pwVar8,*(ulong *)(this + 0x58),0);" (call_expression "copy(local_70,pwVar8,*(ulong *)(this + 0x58),0)" identifier (argument_list "(local_70,pwVar8,*(ulong *)(this + 0x58),0)" ( identifier , identifier , (pointer_expression "*(ulong *)(this + 0x58)" * (cast_expression "(ulong *)(this + 0x58)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x58)" ( (binary_expression "this + 0x58" identifier + number_literal) )))) , number_literal ))) ;))) (if_statement "if (*(code **)(*(long *)pmVar4 + 0x48) == (code *)PTR_do_pos_format_003f7ca0) {\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100);\n    }\n    else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x48))(pmVar4);\n    }" if (parenthesized_expression "(*(code **)(*(long *)pmVar4 + 0x48) == (code *)PTR_do_pos_format_003f7ca0)" ( (binary_expression "*(code **)(*(long *)pmVar4 + 0x48) == (code *)PTR_do_pos_format_003f7ca0" (pointer_expression "*(code **)(*(long *)pmVar4 + 0x48)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x48)" ( (binary_expression "*(long *)pmVar4 + 0x48" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == (cast_expression "(code *)PTR_do_pos_format_003f7ca0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100);\n    }" { (expression_statement "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100);" (assignment_expression "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100)" identifier = (pointer_expression "*(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100)" * (cast_expression "(undefined4 *)(*(long *)(pmVar4 + 0x10) + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(pmVar4 + 0x10) + 100)" ( (binary_expression "*(long *)(pmVar4 + 0x10) + 100" (pointer_expression "*(long *)(pmVar4 + 0x10)" * (cast_expression "(long *)(pmVar4 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmVar4 + 0x10)" ( (binary_expression "pmVar4 + 0x10" identifier + number_literal) )))) + number_literal) ))))) ;) }) (else_clause "else {\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x48))(pmVar4);\n    }" else (compound_statement "{\n                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x48))(pmVar4);\n    }" { comment (expression_statement "uVar3 = (**(code **)(*(long *)pmVar4 + 0x48))(pmVar4);" (assignment_expression "uVar3 = (**(code **)(*(long *)pmVar4 + 0x48))(pmVar4)" identifier = (call_expression "(**(code **)(*(long *)pmVar4 + 0x48))(pmVar4)" (parenthesized_expression "(**(code **)(*(long *)pmVar4 + 0x48))" ( (pointer_expression "**(code **)(*(long *)pmVar4 + 0x48)" * (pointer_expression "*(code **)(*(long *)pmVar4 + 0x48)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x48)" ( (binary_expression "*(long *)pmVar4 + 0x48" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(pmVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(this + 100) = uVar3;" (assignment_expression "*(undefined4 *)(this + 100) = uVar3" (pointer_expression "*(undefined4 *)(this + 100)" * (cast_expression "(undefined4 *)(this + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 100)" ( (binary_expression "this + 100" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*(long *)pmVar4 + 0x50) == (code *)PTR_do_neg_format_003f7fe0) {\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68);\n    }\n    else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x50))(pmVar4);\n    }" if (parenthesized_expression "(*(code **)(*(long *)pmVar4 + 0x50) == (code *)PTR_do_neg_format_003f7fe0)" ( (binary_expression "*(code **)(*(long *)pmVar4 + 0x50) == (code *)PTR_do_neg_format_003f7fe0" (pointer_expression "*(code **)(*(long *)pmVar4 + 0x50)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x50)" ( (binary_expression "*(long *)pmVar4 + 0x50" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) )))) == (cast_expression "(code *)PTR_do_neg_format_003f7fe0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68);\n    }" { (expression_statement "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68);" (assignment_expression "uVar3 = *(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68)" identifier = (pointer_expression "*(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68)" * (cast_expression "(undefined4 *)(*(long *)(pmVar4 + 0x10) + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(pmVar4 + 0x10) + 0x68)" ( (binary_expression "*(long *)(pmVar4 + 0x10) + 0x68" (pointer_expression "*(long *)(pmVar4 + 0x10)" * (cast_expression "(long *)(pmVar4 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pmVar4 + 0x10)" ( (binary_expression "pmVar4 + 0x10" identifier + number_literal) )))) + number_literal) ))))) ;) }) (else_clause "else {\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x50))(pmVar4);\n    }" else (compound_statement "{\n                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */\n      uVar3 = (**(code **)(*(long *)pmVar4 + 0x50))(pmVar4);\n    }" { comment (expression_statement "uVar3 = (**(code **)(*(long *)pmVar4 + 0x50))(pmVar4);" (assignment_expression "uVar3 = (**(code **)(*(long *)pmVar4 + 0x50))(pmVar4)" identifier = (call_expression "(**(code **)(*(long *)pmVar4 + 0x50))(pmVar4)" (parenthesized_expression "(**(code **)(*(long *)pmVar4 + 0x50))" ( (pointer_expression "**(code **)(*(long *)pmVar4 + 0x50)" * (pointer_expression "*(code **)(*(long *)pmVar4 + 0x50)" * (cast_expression "(code **)(*(long *)pmVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pmVar4 + 0x50)" ( (binary_expression "*(long *)pmVar4 + 0x50" (pointer_expression "*(long *)pmVar4" * (cast_expression "(long *)pmVar4" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(pmVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(this + 0x68) = uVar3;" (assignment_expression "*(undefined4 *)(this + 0x68) = uVar3" (pointer_expression "*(undefined4 *)(this + 0x68)" * (cast_expression "(undefined4 *)(this + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x68)" ( (binary_expression "this + 0x68" identifier + number_literal) )))) = identifier) ;) (expression_statement "pcVar9 = use_facet<std::ctype<wchar_t>>(param_1);" (binary_expression "pcVar9 = use_facet<std::ctype<wchar_t>>(param_1)" (assignment_expression "pcVar9 = use_facet<std" identifier = (binary_expression "use_facet<std" identifier < identifier)) (ERROR "::ctype" : : identifier) < (binary_expression "wchar_t>>(param_1)" identifier >> (parenthesized_expression "(param_1)" ( identifier )))) ;) (expression_statement "(**(code **)(*(long *)pcVar9 + 0x58))\n              (pcVar9,money_base::_S_atoms,money_base::_S_atoms + 0xb,this + 0x6c);" (call_expression "(**(code **)(*(long *)pcVar9 + 0x58))\n              (pcVar9,money_base::_S_atoms,money_base::_S_atoms + 0xb,this + 0x6c)" (parenthesized_expression "(**(code **)(*(long *)pcVar9 + 0x58))" ( (pointer_expression "**(code **)(*(long *)pcVar9 + 0x58)" * (pointer_expression "*(code **)(*(long *)pcVar9 + 0x58)" * (cast_expression "(code **)(*(long *)pcVar9 + 0x58)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)pcVar9 + 0x58)" ( (binary_expression "*(long *)pcVar9 + 0x58" (pointer_expression "*(long *)pcVar9" * (cast_expression "(long *)pcVar9" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) )) (argument_list "(pcVar9,money_base::_S_atoms,money_base::_S_atoms + 0xb,this + 0x6c)" ( identifier , identifier (ERROR "::_S_atoms" : : identifier) , (binary_expression "money_base::_S_atoms + 0xb" identifier (ERROR "::_S_atoms" : : identifier) + number_literal) , (binary_expression "this + 0x6c" identifier + number_literal) ))) ;) (expression_statement "*(char **)(this + 0x10) = pcVar5;" (assignment_expression "*(char **)(this + 0x10) = pcVar5" (pointer_expression "*(char **)(this + 0x10)" * (cast_expression "(char **)(this + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(wchar_t **)(this + 0x30) = pwVar6;" (assignment_expression "*(wchar_t **)(this + 0x30) = pwVar6" (pointer_expression "*(wchar_t **)(this + 0x30)" * (cast_expression "(wchar_t **)(this + 0x30)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x30)" ( (binary_expression "this + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(wchar_t **)(this + 0x40) = pwVar7;" (assignment_expression "*(wchar_t **)(this + 0x40) = pwVar7" (pointer_expression "*(wchar_t **)(this + 0x40)" * (cast_expression "(wchar_t **)(this + 0x40)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x40)" ( (binary_expression "this + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(wchar_t **)(this + 0x50) = pwVar8;" (assignment_expression "*(wchar_t **)(this + 0x50) = pwVar8" (pointer_expression "*(wchar_t **)(this + 0x50)" * (cast_expression "(wchar_t **)(this + 0x50)" ( (type_descriptor "wchar_t **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + 0x50)" ( (binary_expression "this + 0x50" identifier + number_literal) )))) = identifier) ;) (expression_statement "this[0x98] = (__moneypunct_cache<wchar_t,true>)0x1;" (assignment_expression "this[0x98] = (__moneypunct_cache<wchar_t,true>)0x1" (subscript_expression "this[0x98]" identifier [ number_literal ]) = (parenthesized_expression "(__moneypunct_cache<wchar_t,true>)0x1" ( (comma_expression "__moneypunct_cache<wchar_t,true>)0x1" (binary_expression "__moneypunct_cache<wchar_t" identifier < identifier) , (binary_expression "true>)0x1" true > (ERROR ")" )) number_literal)) ))) ;) (if_statement "if ((allocator *)(local_40[0] + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage\n       ) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }" if (parenthesized_expression "((allocator *)(local_40[0] + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage\n       )" ( (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)&std" (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (cast_expression "(allocator *)&std" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&std" & identifier))) (ERROR "::wstring::_Rep::_S_empty_rep_storage" : : identifier : : identifier : : identifier) )) (compound_statement "{\n      std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n    }" { (labeled_statement "std::wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_dispose((allocator *)(local_40[0] + -0x18));" (call_expression "_M_dispose((allocator *)(local_40[0] + -0x18))" identifier (argument_list "((allocator *)(local_40[0] + -0x18))" ( (cast_expression "(allocator *)(local_40[0] + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) ))) ;)))) })) (if_statement "if ((allocator *)(local_48 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n    }" if (parenthesized_expression "((allocator *)(local_48 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage)" ( (binary_expression "(allocator *)(local_48 + -0x18) != (allocator *)&std" (cast_expression "(allocator *)(local_48 + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) ))) != (cast_expression "(allocator *)&std" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&std" & identifier))) (ERROR "::wstring::_Rep::_S_empty_rep_storage" : : identifier : : identifier : : identifier) )) (compound_statement "{\n      std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n    }" { (labeled_statement "std::wstring::_Rep::_M_dispose((allocator *)(local_48 + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_dispose((allocator *)(local_48 + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_dispose((allocator *)(local_48 + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_dispose((allocator *)(local_48 + -0x18));" (call_expression "_M_dispose((allocator *)(local_48 + -0x18))" identifier (argument_list "((allocator *)(local_48 + -0x18))" ( (cast_expression "(allocator *)(local_48 + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) ))) ))) ;)))) })) (if_statement "if ((allocator *)(local_50 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage) {\n      std::wstring::_Rep::_M_dispose((allocator *)(local_50 + -0x18));\n    }" if (parenthesized_expression "((allocator *)(local_50 + -0x18) != (allocator *)&std::wstring::_Rep::_S_empty_rep_storage)" ( (binary_expression "(allocator *)(local_50 + -0x18) != (allocator *)&std" (cast_expression "(allocator *)(local_50 + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + -0x18)" ( (binary_expression "local_50 + -0x18" identifier + number_literal) ))) != (cast_expression "(allocator *)&std" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&std" & identifier))) (ERROR "::wstring::_Rep::_S_empty_rep_storage" : : identifier : : identifier : : identifier) )) (compound_statement "{\n      std::wstring::_Rep::_M_dispose((allocator *)(local_50 + -0x18));\n    }" { (labeled_statement "std::wstring::_Rep::_M_dispose((allocator *)(local_50 + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "wstring::_Rep::_M_dispose((allocator *)(local_50 + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_dispose((allocator *)(local_50 + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_dispose((allocator *)(local_50 + -0x18));" (call_expression "_M_dispose((allocator *)(local_50 + -0x18))" identifier (argument_list "((allocator *)(local_50 + -0x18))" ( (cast_expression "(allocator *)(local_50 + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + -0x18)" ( (binary_expression "local_50 + -0x18" identifier + number_literal) ))) ))) ;)))) })) (if_statement "if ((allocator *)(local_58 + -0x18) != (allocator *)PTR__S_empty_rep_storage_003f7c38) {\n      std::string::_Rep::_M_dispose((allocator *)(local_58 + -0x18));\n    }" if (parenthesized_expression "((allocator *)(local_58 + -0x18) != (allocator *)PTR__S_empty_rep_storage_003f7c38)" ( (binary_expression "(allocator *)(local_58 + -0x18) != (allocator *)PTR__S_empty_rep_storage_003f7c38" (cast_expression "(allocator *)(local_58 + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + -0x18)" ( (binary_expression "local_58 + -0x18" identifier + number_literal) ))) != (cast_expression "(allocator *)PTR__S_empty_rep_storage_003f7c38" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      std::string::_Rep::_M_dispose((allocator *)(local_58 + -0x18));\n    }" { (labeled_statement "std::string::_Rep::_M_dispose((allocator *)(local_58 + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "string::_Rep::_M_dispose((allocator *)(local_58 + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "_Rep::_M_dispose((allocator *)(local_58 + -0x18));" statement_identifier : (ERROR ":" :) (expression_statement "_M_dispose((allocator *)(local_58 + -0x18));" (call_expression "_M_dispose((allocator *)(local_58 + -0x18))" identifier (argument_list "((allocator *)(local_58 + -0x18))" ( (cast_expression "(allocator *)(local_58 + -0x18)" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + -0x18)" ( (binary_expression "local_58 + -0x18" identifier + number_literal) ))) ))) ;)))) })) (return_statement "return;" return ;) })) comment comment (expression_statement "__cxa_throw_bad_array_new_length();" (call_expression "__cxa_throw_bad_array_new_length()" identifier (argument_list "()" ( ))) ;) (ERROR "}" }))
(translation_unit "void FUN_002efe20(long param_1,undefined8 param_2)\n\n{\n  ulong uVar1;\n  bool bVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  char *pcVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long *local_70;\n  undefined1 local_5b;\n  undefined1 local_5a;\n  undefined1 local_59;\n  long local_58;\n  long local_50;\n  long local_48;\n  long local_40 [2];\n  \n  plVar4 = (long *)FUN_002efdd0(param_2);\n  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x24) = uVar3;\n  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x28) = uVar3;\n  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x60) = uVar3;\n  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    \n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }\n  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);\n                    \n  pcVar5 = (char *)thunk_FUN_002a11b0();\n                    \n  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);\n  bVar2 = false;\n  if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }\n  *(bool *)(param_1 + 0x20) = bVar2;\n  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    \n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }\n  uVar1 = *(ulong *)(local_50 + -0x18);\n  *(ulong *)(param_1 + 0x38) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);\n  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    \n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }\n  uVar1 = *(ulong *)(local_48 + -0x18);\n  *(ulong *)(param_1 + 0x48) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);\n  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    \n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }\n  local_70 = local_40;\n  uVar1 = *(ulong *)(local_40[0] + -0x18);\n  *(ulong *)(param_1 + 0x58) = uVar1;\n  if (uVar1 < 0x1fffffffffffffff) {\n                    \n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }\n                    \n                    \n  FUN_002a23f0();\n}\n\n" (function_definition "void FUN_002efe20(long param_1,undefined8 param_2)\n\n{\n  ulong uVar1;\n  bool bVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  char *pcVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long *local_70;\n  undefined1 local_5b;\n  undefined1 local_5a;\n  undefined1 local_59;\n  long local_58;\n  long local_50;\n  long local_48;\n  long local_40 [2];\n  \n  plVar4 = (long *)FUN_002efdd0(param_2);\n  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x24) = uVar3;\n  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x28) = uVar3;\n  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x60) = uVar3;\n  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    \n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }\n  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);\n                    \n  pcVar5 = (char *)thunk_FUN_002a11b0();\n                    \n  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);\n  bVar2 = false;\n  if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }\n  *(bool *)(param_1 + 0x20) = bVar2;\n  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    \n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }\n  uVar1 = *(ulong *)(local_50 + -0x18);\n  *(ulong *)(param_1 + 0x38) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);\n  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    \n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }\n  uVar1 = *(ulong *)(local_48 + -0x18);\n  *(ulong *)(param_1 + 0x48) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);\n  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    \n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }\n  local_70 = local_40;\n  uVar1 = *(ulong *)(local_40[0] + -0x18);\n  *(ulong *)(param_1 + 0x58) = uVar1;\n  if (uVar1 < 0x1fffffffffffffff) {\n                    \n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }\n                    \n                    \n  FUN_002a23f0();\n}" primitive_type (function_declarator "FUN_002efe20(long param_1,undefined8 param_2)" identifier (parameter_list "(long param_1,undefined8 param_2)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "undefined8 param_2" type_identifier identifier) ))) (compound_statement "{\n  ulong uVar1;\n  bool bVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  char *pcVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long *local_70;\n  undefined1 local_5b;\n  undefined1 local_5a;\n  undefined1 local_59;\n  long local_58;\n  long local_50;\n  long local_48;\n  long local_40 [2];\n  \n  plVar4 = (long *)FUN_002efdd0(param_2);\n  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x24) = uVar3;\n  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x28) = uVar3;\n  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x60) = uVar3;\n  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    \n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }\n  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);\n                    \n  pcVar5 = (char *)thunk_FUN_002a11b0();\n                    \n  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);\n  bVar2 = false;\n  if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }\n  *(bool *)(param_1 + 0x20) = bVar2;\n  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    \n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }\n  uVar1 = *(ulong *)(local_50 + -0x18);\n  *(ulong *)(param_1 + 0x38) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);\n  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    \n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }\n  uVar1 = *(ulong *)(local_48 + -0x18);\n  *(ulong *)(param_1 + 0x48) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);\n  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    \n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }\n  local_70 = local_40;\n  uVar1 = *(ulong *)(local_40[0] + -0x18);\n  *(ulong *)(param_1 + 0x58) = uVar1;\n  if (uVar1 < 0x1fffffffffffffff) {\n                    \n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }\n                    \n                    \n  FUN_002a23f0();\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "undefined4 uVar3;" type_identifier identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "undefined8 uVar6;" type_identifier identifier ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "undefined8 uVar8;" type_identifier identifier ;) (declaration "long *local_70;" (sized_type_specifier "long" long) (pointer_declarator "*local_70" * identifier) ;) (declaration "undefined1 local_5b;" type_identifier identifier ;) (declaration "undefined1 local_5a;" type_identifier identifier ;) (declaration "undefined1 local_59;" type_identifier identifier ;) (declaration "long local_58;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_50;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_48;" (sized_type_specifier "long" long) identifier ;) (declaration "long local_40 [2];" (sized_type_specifier "long" long) (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "plVar4 = (long *)FUN_002efdd0(param_2);" (assignment_expression "plVar4 = (long *)FUN_002efdd0(param_2)" identifier = (cast_expression "(long *)FUN_002efdd0(param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002efdd0(param_2)" identifier (argument_list "(param_2)" ( identifier ))))) ;) (if_statement "if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58)" ( (binary_expression "*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58" (pointer_expression "*(code **)(*plVar4 + 0x10)" * (cast_expression "(code **)(*plVar4 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x10)" ( (binary_expression "*plVar4 + 0x10" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7f58" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x24);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x24)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 0x24)" * (cast_expression "(undefined4 *)(plVar4[2] + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x24)" ( (binary_expression "plVar4[2] + 0x24" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }" else (compound_statement "{\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }" { (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x10))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x10))" ( (pointer_expression "**(code **)(*plVar4 + 0x10)" * (pointer_expression "*(code **)(*plVar4 + 0x10)" * (cast_expression "(code **)(*plVar4 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x10)" ( (binary_expression "*plVar4 + 0x10" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 0x24) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x24) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x24)" * (cast_expression "(undefined4 *)(param_1 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x24)" ( (binary_expression "param_1 + 0x24" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98)" ( (binary_expression "*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98" (pointer_expression "*(code **)(*plVar4 + 0x18)" * (cast_expression "(code **)(*plVar4 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x18)" ( (binary_expression "*plVar4 + 0x18" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7c98" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x28);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x28)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 0x28)" * (cast_expression "(undefined4 *)(plVar4[2] + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x28)" ( (binary_expression "plVar4[2] + 0x28" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }" else (compound_statement "{\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }" { (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x18))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x18))" ( (pointer_expression "**(code **)(*plVar4 + 0x18)" * (pointer_expression "*(code **)(*plVar4 + 0x18)" * (cast_expression "(code **)(*plVar4 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x18)" ( (binary_expression "*plVar4 + 0x18" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 0x28) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x28) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x28)" * (cast_expression "(undefined4 *)(param_1 + 0x28)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x28)" ( (binary_expression "param_1 + 0x28" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8)" ( (binary_expression "*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8" (pointer_expression "*(code **)(*plVar4 + 0x40)" * (cast_expression "(code **)(*plVar4 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x40)" ( (binary_expression "*plVar4 + 0x40" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7ac8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x60);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x60)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 0x60)" * (cast_expression "(undefined4 *)(plVar4[2] + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x60)" ( (binary_expression "plVar4[2] + 0x60" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }" else (compound_statement "{\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }" { (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x40))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x40))" ( (pointer_expression "**(code **)(*plVar4 + 0x40)" * (pointer_expression "*(code **)(*plVar4 + 0x40)" * (cast_expression "(code **)(*plVar4 + 0x40)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x40)" ( (binary_expression "*plVar4 + 0x40" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 0x60) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x60) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x60)" * (cast_expression "(undefined4 *)(param_1 + 0x60)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x60)" ( (binary_expression "param_1 + 0x60" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    \n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30)" ( (binary_expression "*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30" (pointer_expression "*(code **)(*plVar4 + 0x20)" * (cast_expression "(code **)(*plVar4 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x20)" ( (binary_expression "*plVar4 + 0x20" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7e30" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    \n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }" { (expression_statement "FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);" (call_expression "FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40)" identifier (argument_list "(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40)" ( (pointer_expression "&local_58" & identifier) , (pointer_expression "*(undefined8 *)(plVar4[2] + 0x10)" * (cast_expression "(undefined8 *)(plVar4[2] + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x10)" ( (binary_expression "plVar4[2] + 0x10" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) , identifier ))) ;) }) (else_clause "else {\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }" else (compound_statement "{\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }" { (expression_statement "(**(code **)(*plVar4 + 0x20))(&local_58,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x20))(&local_58,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x20))" ( (pointer_expression "**(code **)(*plVar4 + 0x20)" * (pointer_expression "*(code **)(*plVar4 + 0x20)" * (cast_expression "(code **)(*plVar4 + 0x20)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x20)" ( (binary_expression "*plVar4 + 0x20" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(&local_58,plVar4)" ( (pointer_expression "&local_58" & identifier) , identifier ))) ;) }))) (expression_statement "*(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);" (assignment_expression "*(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18)" (pointer_expression "*(undefined8 *)(param_1 + 0x18)" * (cast_expression "(undefined8 *)(param_1 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(local_58 + -0x18)" * (cast_expression "(undefined8 *)(local_58 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + -0x18)" ( (binary_expression "local_58 + -0x18" identifier + number_literal) ))))) ;) (expression_statement "pcVar5 = (char *)thunk_FUN_002a11b0();" (assignment_expression "pcVar5 = (char *)thunk_FUN_002a11b0()" identifier = (cast_expression "(char *)thunk_FUN_002a11b0()" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002a11b0()" identifier (argument_list "()" ( ))))) ;) (expression_statement "FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);" (call_expression "FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0)" identifier (argument_list "(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0)" ( (pointer_expression "&local_58" & identifier) , identifier , (pointer_expression "*(undefined8 *)(param_1 + 0x18)" * (cast_expression "(undefined8 *)(param_1 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) , number_literal ))) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (if_statement "if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }" if (parenthesized_expression "(*(long *)(param_1 + 0x18) != 0)" ( (binary_expression "*(long *)(param_1 + 0x18) != 0" (pointer_expression "*(long *)(param_1 + 0x18)" * (cast_expression "(long *)(param_1 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x18)" ( (binary_expression "param_1 + 0x18" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }" { (expression_statement "bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;" (assignment_expression "bVar2 = (byte)(*pcVar5 - 1U) < 0x7e" identifier = (binary_expression "(byte)(*pcVar5 - 1U) < 0x7e" (call_expression "(byte)(*pcVar5 - 1U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar5 - 1U)" ( (binary_expression "*pcVar5 - 1U" (pointer_expression "*pcVar5" * identifier) - number_literal) ))) < number_literal)) ;) })) (expression_statement "*(bool *)(param_1 + 0x20) = bVar2;" (assignment_expression "*(bool *)(param_1 + 0x20) = bVar2" (pointer_expression "*(bool *)(param_1 + 0x20)" * (cast_expression "(bool *)(param_1 + 0x20)" ( (type_descriptor "bool *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    \n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8)" ( (binary_expression "*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8" (pointer_expression "*(code **)(*plVar4 + 0x28)" * (cast_expression "(code **)(*plVar4 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x28)" ( (binary_expression "*plVar4 + 0x28" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7fc8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    \n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }" { (expression_statement "FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);" (call_expression "FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b)" identifier (argument_list "(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b)" ( (pointer_expression "&local_50" & identifier) , (pointer_expression "*(undefined8 *)(plVar4[2] + 0x30)" * (cast_expression "(undefined8 *)(plVar4[2] + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x30)" ( (binary_expression "plVar4[2] + 0x30" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) , (pointer_expression "&local_5b" & identifier) ))) ;) }) (else_clause "else {\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }" else (compound_statement "{\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }" { (expression_statement "(**(code **)(*plVar4 + 0x28))(&local_50,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x28))(&local_50,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x28))" ( (pointer_expression "**(code **)(*plVar4 + 0x28)" * (pointer_expression "*(code **)(*plVar4 + 0x28)" * (cast_expression "(code **)(*plVar4 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x28)" ( (binary_expression "*plVar4 + 0x28" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(&local_50,plVar4)" ( (pointer_expression "&local_50" & identifier) , identifier ))) ;) }))) (expression_statement "uVar1 = *(ulong *)(local_50 + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_50 + -0x18)" identifier = (pointer_expression "*(ulong *)(local_50 + -0x18)" * (cast_expression "(ulong *)(local_50 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + -0x18)" ( (binary_expression "local_50 + -0x18" identifier + number_literal) ))))) ;) (expression_statement "*(ulong *)(param_1 + 0x38) = uVar1;" (assignment_expression "*(ulong *)(param_1 + 0x38) = uVar1" (pointer_expression "*(ulong *)(param_1 + 0x38)" * (cast_expression "(ulong *)(param_1 + 0x38)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < uVar1)" ( (binary_expression "0x1ffffffffffffffe < uVar1" number_literal < identifier) )) (compound_statement "{\n                    \n                    \n    FUN_002a23f0();\n  }" { (expression_statement "FUN_002a23f0();" (call_expression "FUN_002a23f0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar6 = thunk_FUN_002a11b0(uVar1 << 2);" (assignment_expression "uVar6 = thunk_FUN_002a11b0(uVar1 << 2)" identifier = (call_expression "thunk_FUN_002a11b0(uVar1 << 2)" identifier (argument_list "(uVar1 << 2)" ( (binary_expression "uVar1 << 2" identifier << number_literal) )))) ;) (expression_statement "FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);" (call_expression "FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0)" identifier (argument_list "(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0)" ( (pointer_expression "&local_50" & identifier) , identifier , (pointer_expression "*(undefined8 *)(param_1 + 0x38)" * (cast_expression "(undefined8 *)(param_1 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x38)" ( (binary_expression "param_1 + 0x38" identifier + number_literal) )))) , number_literal ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    \n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8)" ( (binary_expression "*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8" (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7fb8" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    \n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }" { (expression_statement "FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);" (call_expression "FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a)" identifier (argument_list "(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a)" ( (pointer_expression "&local_48" & identifier) , (pointer_expression "*(undefined8 *)(plVar4[2] + 0x40)" * (cast_expression "(undefined8 *)(plVar4[2] + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x40)" ( (binary_expression "plVar4[2] + 0x40" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) , (pointer_expression "&local_5a" & identifier) ))) ;) }) (else_clause "else {\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }" else (compound_statement "{\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }" { (expression_statement "(**(code **)(*plVar4 + 0x30))(&local_48,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x30))(&local_48,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x30))" ( (pointer_expression "**(code **)(*plVar4 + 0x30)" * (pointer_expression "*(code **)(*plVar4 + 0x30)" * (cast_expression "(code **)(*plVar4 + 0x30)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x30)" ( (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(&local_48,plVar4)" ( (pointer_expression "&local_48" & identifier) , identifier ))) ;) }))) (expression_statement "uVar1 = *(ulong *)(local_48 + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_48 + -0x18)" identifier = (pointer_expression "*(ulong *)(local_48 + -0x18)" * (cast_expression "(ulong *)(local_48 + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) ))))) ;) (expression_statement "*(ulong *)(param_1 + 0x48) = uVar1;" (assignment_expression "*(ulong *)(param_1 + 0x48) = uVar1" (pointer_expression "*(ulong *)(param_1 + 0x48)" * (cast_expression "(ulong *)(param_1 + 0x48)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) = identifier) ;) (if_statement "if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }" if (parenthesized_expression "(0x1ffffffffffffffe < uVar1)" ( (binary_expression "0x1ffffffffffffffe < uVar1" number_literal < identifier) )) (compound_statement "{\n                    \n                    \n    FUN_002a23f0();\n  }" { (expression_statement "FUN_002a23f0();" (call_expression "FUN_002a23f0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "uVar7 = thunk_FUN_002a11b0(uVar1 << 2);" (assignment_expression "uVar7 = thunk_FUN_002a11b0(uVar1 << 2)" identifier = (call_expression "thunk_FUN_002a11b0(uVar1 << 2)" identifier (argument_list "(uVar1 << 2)" ( (binary_expression "uVar1 << 2" identifier << number_literal) )))) ;) (expression_statement "FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);" (call_expression "FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0)" identifier (argument_list "(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0)" ( (pointer_expression "&local_48" & identifier) , identifier , (pointer_expression "*(undefined8 *)(param_1 + 0x48)" * (cast_expression "(undefined8 *)(param_1 + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x48)" ( (binary_expression "param_1 + 0x48" identifier + number_literal) )))) , number_literal ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    \n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80)" ( (binary_expression "*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80" (pointer_expression "*(code **)(*plVar4 + 0x38)" * (cast_expression "(code **)(*plVar4 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x38)" ( (binary_expression "*plVar4 + 0x38" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7e80" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n                    \n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }" { (expression_statement "FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);" (call_expression "FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59)" identifier (argument_list "(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59)" ( identifier , (pointer_expression "*(undefined8 *)(plVar4[2] + 0x50)" * (cast_expression "(undefined8 *)(plVar4[2] + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x50)" ( (binary_expression "plVar4[2] + 0x50" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) )))) , (pointer_expression "&local_59" & identifier) ))) ;) }) (else_clause "else {\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }" else (compound_statement "{\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }" { (expression_statement "(**(code **)(*plVar4 + 0x38))(local_40,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x38))(local_40,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x38))" ( (pointer_expression "**(code **)(*plVar4 + 0x38)" * (pointer_expression "*(code **)(*plVar4 + 0x38)" * (cast_expression "(code **)(*plVar4 + 0x38)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x38)" ( (binary_expression "*plVar4 + 0x38" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(local_40,plVar4)" ( identifier , identifier ))) ;) }))) (expression_statement "local_70 = local_40;" (assignment_expression "local_70 = local_40" identifier = identifier) ;) (expression_statement "uVar1 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_40[0] + -0x18)" identifier = (pointer_expression "*(ulong *)(local_40[0] + -0x18)" * (cast_expression "(ulong *)(local_40[0] + -0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))))) ;) (expression_statement "*(ulong *)(param_1 + 0x58) = uVar1;" (assignment_expression "*(ulong *)(param_1 + 0x58) = uVar1" (pointer_expression "*(ulong *)(param_1 + 0x58)" * (cast_expression "(ulong *)(param_1 + 0x58)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) = identifier) ;) (if_statement "if (uVar1 < 0x1fffffffffffffff) {\n                    \n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }" if (parenthesized_expression "(uVar1 < 0x1fffffffffffffff)" ( (binary_expression "uVar1 < 0x1fffffffffffffff" identifier < number_literal) )) (compound_statement "{\n                    \n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }" { (expression_statement "uVar8 = thunk_FUN_002a11b0(uVar1 << 2);" (assignment_expression "uVar8 = thunk_FUN_002a11b0(uVar1 << 2)" identifier = (call_expression "thunk_FUN_002a11b0(uVar1 << 2)" identifier (argument_list "(uVar1 << 2)" ( (binary_expression "uVar1 << 2" identifier << number_literal) )))) ;) (expression_statement "FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);" (call_expression "FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0)" identifier (argument_list "(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0)" ( identifier , identifier , (pointer_expression "*(undefined8 *)(param_1 + 0x58)" * (cast_expression "(undefined8 *)(param_1 + 0x58)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x58)" ( (binary_expression "param_1 + 0x58" identifier + number_literal) )))) , number_literal ))) ;) (if_statement "if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0)" ( (binary_expression "*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0" (pointer_expression "*(code **)(*plVar4 + 0x48)" * (cast_expression "(code **)(*plVar4 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x48)" ( (binary_expression "*plVar4 + 0x48" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7ca0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 100);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 100)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 100)" * (cast_expression "(undefined4 *)(plVar4[2] + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 100)" ( (binary_expression "plVar4[2] + 100" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }" else (compound_statement "{\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }" { (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x48))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x48))" ( (pointer_expression "**(code **)(*plVar4 + 0x48)" * (pointer_expression "*(code **)(*plVar4 + 0x48)" * (cast_expression "(code **)(*plVar4 + 0x48)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x48)" ( (binary_expression "*plVar4 + 0x48" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 100) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 100) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 100)" * (cast_expression "(undefined4 *)(param_1 + 100)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 100)" ( (binary_expression "param_1 + 100" identifier + number_literal) )))) = identifier) ;) (if_statement "if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }" if (parenthesized_expression "(*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0)" ( (binary_expression "*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0" (pointer_expression "*(code **)(*plVar4 + 0x50)" * (cast_expression "(code **)(*plVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x50)" ( (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" * identifier) + number_literal) )))) == (cast_expression "(code *)PTR_FUN_003f7fe0" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }" { (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x68);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x68)" identifier = (pointer_expression "*(undefined4 *)(plVar4[2] + 0x68)" * (cast_expression "(undefined4 *)(plVar4[2] + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar4[2] + 0x68)" ( (binary_expression "plVar4[2] + 0x68" (subscript_expression "plVar4[2]" identifier [ number_literal ]) + number_literal) ))))) ;) }) (else_clause "else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }" else (compound_statement "{\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }" { (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4)" identifier = (call_expression "(**(code **)(*plVar4 + 0x50))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x50))" ( (pointer_expression "**(code **)(*plVar4 + 0x50)" * (pointer_expression "*(code **)(*plVar4 + 0x50)" * (cast_expression "(code **)(*plVar4 + 0x50)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x50)" ( (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4)" ( identifier )))) ;) }))) (expression_statement "*(undefined4 *)(param_1 + 0x68) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x68) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x68)" * (cast_expression "(undefined4 *)(param_1 + 0x68)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x68)" ( (binary_expression "param_1 + 0x68" identifier + number_literal) )))) = identifier) ;) (expression_statement "plVar4 = (long *)FUN_002ef340(param_2);" (assignment_expression "plVar4 = (long *)FUN_002ef340(param_2)" identifier = (cast_expression "(long *)FUN_002ef340(param_2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002ef340(param_2)" identifier (argument_list "(param_2)" ( identifier ))))) ;) (expression_statement "(**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);" (call_expression "(**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c)" (parenthesized_expression "(**(code **)(*plVar4 + 0x58))" ( (pointer_expression "**(code **)(*plVar4 + 0x58)" * (pointer_expression "*(code **)(*plVar4 + 0x58)" * (cast_expression "(code **)(*plVar4 + 0x58)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*plVar4 + 0x58)" ( (binary_expression "*plVar4 + 0x58" (pointer_expression "*plVar4" * identifier) + number_literal) ))))) )) (argument_list "(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c)" ( identifier , identifier , (binary_expression "PTR_DAT_003f8630 + 0xb" identifier + number_literal) , (binary_expression "param_1 + 0x6c" identifier + number_literal) ))) ;) (expression_statement "*(char **)(param_1 + 0x10) = pcVar5;" (assignment_expression "*(char **)(param_1 + 0x10) = pcVar5" (pointer_expression "*(char **)(param_1 + 0x10)" * (cast_expression "(char **)(param_1 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_1 + 0x10)" ( (binary_expression "param_1 + 0x10" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_1 + 0x30) = uVar6;" (assignment_expression "*(undefined8 *)(param_1 + 0x30) = uVar6" (pointer_expression "*(undefined8 *)(param_1 + 0x30)" * (cast_expression "(undefined8 *)(param_1 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x30)" ( (binary_expression "param_1 + 0x30" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_1 + 0x40) = uVar7;" (assignment_expression "*(undefined8 *)(param_1 + 0x40) = uVar7" (pointer_expression "*(undefined8 *)(param_1 + 0x40)" * (cast_expression "(undefined8 *)(param_1 + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x40)" ( (binary_expression "param_1 + 0x40" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined8 *)(param_1 + 0x50) = uVar8;" (assignment_expression "*(undefined8 *)(param_1 + 0x50) = uVar8" (pointer_expression "*(undefined8 *)(param_1 + 0x50)" * (cast_expression "(undefined8 *)(param_1 + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x50)" ( (binary_expression "param_1 + 0x50" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 *)(param_1 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_1 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_1 + 0x98)" * (cast_expression "(undefined1 *)(param_1 + 0x98)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x98)" ( (binary_expression "param_1 + 0x98" identifier + number_literal) )))) = number_literal) ;) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }" if (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00)" ( (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) != (pointer_expression "&DAT_00405f00" & identifier)) )) (compound_statement "{\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }" { (expression_statement "FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);" (call_expression "FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59)" identifier (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_59)" ( (cast_expression "(undefined8 *)(local_40[0] + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_40[0] + -0x18)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) ))) , (pointer_expression "&local_59" & identifier) ))) ;) })) (if_statement "if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }" if (parenthesized_expression "((undefined8 *)(local_48 + -0x18) != &DAT_00405f00)" ( (binary_expression "(undefined8 *)(local_48 + -0x18) != &DAT_00405f00" (cast_expression "(undefined8 *)(local_48 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) ))) != (pointer_expression "&DAT_00405f00" & identifier)) )) (compound_statement "{\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }" { (expression_statement "FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);" (call_expression "FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59)" identifier (argument_list "((undefined8 *)(local_48 + -0x18),&local_59)" ( (cast_expression "(undefined8 *)(local_48 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) ))) , (pointer_expression "&local_59" & identifier) ))) ;) })) (if_statement "if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }" if (parenthesized_expression "((undefined8 *)(local_50 + -0x18) != &DAT_00405f00)" ( (binary_expression "(undefined8 *)(local_50 + -0x18) != &DAT_00405f00" (cast_expression "(undefined8 *)(local_50 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + -0x18)" ( (binary_expression "local_50 + -0x18" identifier + number_literal) ))) != (pointer_expression "&DAT_00405f00" & identifier)) )) (compound_statement "{\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }" { (expression_statement "FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);" (call_expression "FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59)" identifier (argument_list "((undefined8 *)(local_50 + -0x18),&local_59)" ( (cast_expression "(undefined8 *)(local_50 + -0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_50 + -0x18)" ( (binary_expression "local_50 + -0x18" identifier + number_literal) ))) , (pointer_expression "&local_59" & identifier) ))) ;) })) (if_statement "if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }" if (parenthesized_expression "((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38)" ( (binary_expression "(undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38" (cast_expression "(undefined *)(local_58 + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + -0x18)" ( (binary_expression "local_58 + -0x18" identifier + number_literal) ))) != identifier) )) (compound_statement "{\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }" { (expression_statement "FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);" (call_expression "FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59)" identifier (argument_list "((undefined *)(local_58 + -0x18),&local_59)" ( (cast_expression "(undefined *)(local_58 + -0x18)" ( (type_descriptor "undefined *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_58 + -0x18)" ( (binary_expression "local_58 + -0x18" identifier + number_literal) ))) , (pointer_expression "&local_59" & identifier) ))) ;) })) (return_statement "return;" return ;) })) (expression_statement "FUN_002a23f0();" (call_expression "FUN_002a23f0()" identifier (argument_list "()" ( ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (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 )))) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (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 )))) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (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 )))) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) , IDENT ))) ;) }) (else_clause else (compound_statement { (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 ( (pointer_expression & IDENT) , IDENT ))) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( ))))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT ))) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * IDENT) - LIT) ))) < LIT)) ;) })) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) , (pointer_expression & IDENT) ))) ;) }) (else_clause else (compound_statement { (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 ( (pointer_expression & IDENT) , IDENT ))) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT << LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) , (pointer_expression & IDENT) ))) ;) }) (else_clause else (compound_statement { (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 ( (pointer_expression & IDENT) , IDENT ))) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT << LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )))) , (pointer_expression & IDENT) ))) ;) }) (else_clause else (compound_statement { (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 (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT << LIT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (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 )))) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (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 )))) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) (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 , (binary_expression IDENT + LIT) , (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) != (pointer_expression & IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) != (pointer_expression & IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) != (pointer_expression & IDENT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) , (pointer_expression & IDENT) ))) ;) })) (return_statement return ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })))
(function_definition "void FUN_002efe20(long param_1,undefined8 param_2)\n\n{\n  ulong uVar1;\n  bool bVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  char *pcVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long *local_70;\n  undefined1 local_5b;\n  undefined1 local_5a;\n  undefined1 local_59;\n  long local_58;\n  long local_50;\n  long local_48;\n  long local_40 [2];\n  \n  plVar4 = (long *)FUN_002efdd0(param_2);\n  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x24) = uVar3;\n  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x28) = uVar3;\n  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x60) = uVar3;\n  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    \n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }\n  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);\n                    \n  pcVar5 = (char *)thunk_FUN_002a11b0();\n                    \n  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);\n  bVar2 = false;\n  if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }\n  *(bool *)(param_1 + 0x20) = bVar2;\n  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    \n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }\n  uVar1 = *(ulong *)(local_50 + -0x18);\n  *(ulong *)(param_1 + 0x38) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);\n  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    \n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }\n  uVar1 = *(ulong *)(local_48 + -0x18);\n  *(ulong *)(param_1 + 0x48) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);\n  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    \n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }\n  local_70 = local_40;\n  uVar1 = *(ulong *)(local_40[0] + -0x18);\n  *(ulong *)(param_1 + 0x58) = uVar1;\n  if (uVar1 < 0x1fffffffffffffff) {\n                    \n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }\n                    \n                    \n  FUN_002a23f0();\n}" (primitive_type "void") (function_declarator "FUN_002efe20(long param_1,undefined8 param_2)" (identifier "FUN_002efe20") (parameter_list "(long param_1,undefined8 param_2)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "undefined8 param_2" (type_identifier "undefined8") (identifier "param_2")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  bool bVar2;\n  undefined4 uVar3;\n  long *plVar4;\n  char *pcVar5;\n  undefined8 uVar6;\n  undefined8 uVar7;\n  undefined8 uVar8;\n  long *local_70;\n  undefined1 local_5b;\n  undefined1 local_5a;\n  undefined1 local_59;\n  long local_58;\n  long local_50;\n  long local_48;\n  long local_40 [2];\n  \n  plVar4 = (long *)FUN_002efdd0(param_2);\n  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x24) = uVar3;\n  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x28) = uVar3;\n  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }\n  *(undefined4 *)(param_1 + 0x60) = uVar3;\n  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    \n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }\n  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);\n                    \n  pcVar5 = (char *)thunk_FUN_002a11b0();\n                    \n  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);\n  bVar2 = false;\n  if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }\n  *(bool *)(param_1 + 0x20) = bVar2;\n  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    \n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }\n  uVar1 = *(ulong *)(local_50 + -0x18);\n  *(ulong *)(param_1 + 0x38) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);\n  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    \n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }\n  uVar1 = *(ulong *)(local_48 + -0x18);\n  *(ulong *)(param_1 + 0x48) = uVar1;\n  if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }\n                    \n  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);\n  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    \n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }\n  local_70 = local_40;\n  uVar1 = *(ulong *)(local_40[0] + -0x18);\n  *(ulong *)(param_1 + 0x58) = uVar1;\n  if (uVar1 < 0x1fffffffffffffff) {\n                    \n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }\n                    \n                    \n  FUN_002a23f0();\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "bool bVar2;" (primitive_type "bool") (identifier "bVar2") (; ";")) (declaration "undefined4 uVar3;" (type_identifier "undefined4") (identifier "uVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (declaration "char *pcVar5;" (primitive_type "char") (pointer_declarator "*pcVar5" (* "*") (identifier "pcVar5")) (; ";")) (declaration "undefined8 uVar6;" (type_identifier "undefined8") (identifier "uVar6") (; ";")) (declaration "undefined8 uVar7;" (type_identifier "undefined8") (identifier "uVar7") (; ";")) (declaration "undefined8 uVar8;" (type_identifier "undefined8") (identifier "uVar8") (; ";")) (declaration "long *local_70;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*local_70" (* "*") (identifier "local_70")) (; ";")) (declaration "undefined1 local_5b;" (type_identifier "undefined1") (identifier "local_5b") (; ";")) (declaration "undefined1 local_5a;" (type_identifier "undefined1") (identifier "local_5a") (; ";")) (declaration "undefined1 local_59;" (type_identifier "undefined1") (identifier "local_59") (; ";")) (declaration "long local_58;" (sized_type_specifier "long" (long "long")) (identifier "local_58") (; ";")) (declaration "long local_50;" (sized_type_specifier "long" (long "long")) (identifier "local_50") (; ";")) (declaration "long local_48;" (sized_type_specifier "long" (long "long")) (identifier "local_48") (; ";")) (declaration "long local_40 [2];" (sized_type_specifier "long" (long "long")) (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (expression_statement "plVar4 = (long *)FUN_002efdd0(param_2);" (assignment_expression "plVar4 = (long *)FUN_002efdd0(param_2)" (identifier "plVar4") (= "=") (cast_expression "(long *)FUN_002efdd0(param_2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002efdd0(param_2)" (identifier "FUN_002efdd0") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")"))))) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58" (pointer_expression "*(code **)(*plVar4 + 0x10)" (* "*") (cast_expression "(code **)(*plVar4 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x10)" (( "(") (binary_expression "*plVar4 + 0x10" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x10")) () ")")))) (== "==") (cast_expression "(code *)PTR_FUN_003f7f58" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_003f7f58"))) () ")")) (compound_statement "{\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);\n  }" ({ "{") (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x24);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x24)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined4 *)(plVar4[2] + 0x24)" (* "*") (cast_expression "(undefined4 *)(plVar4[2] + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 0x24)" (( "(") (binary_expression "plVar4[2] + 0x24" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x24")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }" (else "else") (compound_statement "{\n    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);\n  }" ({ "{") (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4)" (identifier "uVar3") (= "=") (call_expression "(**(code **)(*plVar4 + 0x10))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x10))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x10)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x10)" (* "*") (cast_expression "(code **)(*plVar4 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x10)" (( "(") (binary_expression "*plVar4 + 0x10" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")")))) (; ";")) (} "}")))) (expression_statement "*(undefined4 *)(param_1 + 0x24) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x24) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x24)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x24)" (( "(") (binary_expression "param_1 + 0x24" (identifier "param_1") (+ "+") (number_literal "0x24")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98" (pointer_expression "*(code **)(*plVar4 + 0x18)" (* "*") (cast_expression "(code **)(*plVar4 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x18)" (( "(") (binary_expression "*plVar4 + 0x18" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x18")) () ")")))) (== "==") (cast_expression "(code *)PTR_FUN_003f7c98" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_003f7c98"))) () ")")) (compound_statement "{\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);\n  }" ({ "{") (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x28);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x28)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined4 *)(plVar4[2] + 0x28)" (* "*") (cast_expression "(undefined4 *)(plVar4[2] + 0x28)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 0x28)" (( "(") (binary_expression "plVar4[2] + 0x28" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }" (else "else") (compound_statement "{\n    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);\n  }" ({ "{") (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4)" (identifier "uVar3") (= "=") (call_expression "(**(code **)(*plVar4 + 0x18))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x18))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x18)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x18)" (* "*") (cast_expression "(code **)(*plVar4 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x18)" (( "(") (binary_expression "*plVar4 + 0x18" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x18")) () ")"))))) () ")")) (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")")))) (; ";")) (} "}")))) (expression_statement "*(undefined4 *)(param_1 + 0x28) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x28) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x28)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x28)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x28)" (( "(") (binary_expression "param_1 + 0x28" (identifier "param_1") (+ "+") (number_literal "0x28")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }\n  else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8" (pointer_expression "*(code **)(*plVar4 + 0x40)" (* "*") (cast_expression "(code **)(*plVar4 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x40)" (( "(") (binary_expression "*plVar4 + 0x40" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x40")) () ")")))) (== "==") (cast_expression "(code *)PTR_FUN_003f7ac8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_003f7ac8"))) () ")")) (compound_statement "{\n    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);\n  }" ({ "{") (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x60);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x60)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined4 *)(plVar4[2] + 0x60)" (* "*") (cast_expression "(undefined4 *)(plVar4[2] + 0x60)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 0x60)" (( "(") (binary_expression "plVar4[2] + 0x60" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x60")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }" (else "else") (compound_statement "{\n    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);\n  }" ({ "{") (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4)" (identifier "uVar3") (= "=") (call_expression "(**(code **)(*plVar4 + 0x40))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x40))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x40)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x40)" (* "*") (cast_expression "(code **)(*plVar4 + 0x40)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x40)" (( "(") (binary_expression "*plVar4 + 0x40" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x40")) () ")"))))) () ")")) (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")")))) (; ";")) (} "}")))) (expression_statement "*(undefined4 *)(param_1 + 0x60) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x60) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x60)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x60)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x60)" (( "(") (binary_expression "param_1 + 0x60" (identifier "param_1") (+ "+") (number_literal "0x60")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {\n                    \n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30" (pointer_expression "*(code **)(*plVar4 + 0x20)" (* "*") (cast_expression "(code **)(*plVar4 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x20)" (( "(") (binary_expression "*plVar4 + 0x20" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x20")) () ")")))) (== "==") (cast_expression "(code *)PTR_FUN_003f7e30" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_003f7e30"))) () ")")) (compound_statement "{\n                    \n    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);\n  }" ({ "{") (expression_statement "FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);" (call_expression "FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40)" (identifier "FUN_002d7350") (argument_list "(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (pointer_expression "*(undefined8 *)(plVar4[2] + 0x10)" (* "*") (cast_expression "(undefined8 *)(plVar4[2] + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 0x10)" (( "(") (binary_expression "plVar4[2] + 0x10" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x10")) () ")")))) (, ",") (identifier "local_40") () ")"))) (; ";")) (} "}")) (else_clause "else {\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }" (else "else") (compound_statement "{\n                    \n    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);\n  }" ({ "{") (expression_statement "(**(code **)(*plVar4 + 0x20))(&local_58,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x20))(&local_58,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x20))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x20)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x20)" (* "*") (cast_expression "(code **)(*plVar4 + 0x20)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x20)" (( "(") (binary_expression "*plVar4 + 0x20" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x20")) () ")"))))) () ")")) (argument_list "(&local_58,plVar4)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "plVar4") () ")"))) (; ";")) (} "}")))) (expression_statement "*(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);" (assignment_expression "*(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18)" (pointer_expression "*(undefined8 *)(param_1 + 0x18)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (= "=") (pointer_expression "*(undefined8 *)(local_58 + -0x18)" (* "*") (cast_expression "(undefined8 *)(local_58 + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 + -0x18)" (( "(") (binary_expression "local_58 + -0x18" (identifier "local_58") (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (expression_statement "pcVar5 = (char *)thunk_FUN_002a11b0();" (assignment_expression "pcVar5 = (char *)thunk_FUN_002a11b0()" (identifier "pcVar5") (= "=") (cast_expression "(char *)thunk_FUN_002a11b0()" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "thunk_FUN_002a11b0()" (identifier "thunk_FUN_002a11b0") (argument_list "()" (( "(") () ")"))))) (; ";")) (expression_statement "FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);" (call_expression "FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0)" (identifier "FUN_002d4ac0") (argument_list "(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0)" (( "(") (pointer_expression "&local_58" (& "&") (identifier "local_58")) (, ",") (identifier "pcVar5") (, ",") (pointer_expression "*(undefined8 *)(param_1 + 0x18)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" (identifier "bVar2") (= "=") (false "false")) (; ";")) (if_statement "if (*(long *)(param_1 + 0x18) != 0) {\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0x18) != 0)" (( "(") (binary_expression "*(long *)(param_1 + 0x18) != 0" (pointer_expression "*(long *)(param_1 + 0x18)" (* "*") (cast_expression "(long *)(param_1 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x18)" (( "(") (binary_expression "param_1 + 0x18" (identifier "param_1") (+ "+") (number_literal "0x18")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;\n  }" ({ "{") (expression_statement "bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;" (assignment_expression "bVar2 = (byte)(*pcVar5 - 1U) < 0x7e" (identifier "bVar2") (= "=") (binary_expression "(byte)(*pcVar5 - 1U) < 0x7e" (call_expression "(byte)(*pcVar5 - 1U)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(*pcVar5 - 1U)" (( "(") (binary_expression "*pcVar5 - 1U" (pointer_expression "*pcVar5" (* "*") (identifier "pcVar5")) (- "-") (number_literal "1U")) () ")"))) (< "<") (number_literal "0x7e"))) (; ";")) (} "}"))) (expression_statement "*(bool *)(param_1 + 0x20) = bVar2;" (assignment_expression "*(bool *)(param_1 + 0x20) = bVar2" (pointer_expression "*(bool *)(param_1 + 0x20)" (* "*") (cast_expression "(bool *)(param_1 + 0x20)" (( "(") (type_descriptor "bool *" (primitive_type "bool") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (= "=") (identifier "bVar2")) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {\n                    \n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8" (pointer_expression "*(code **)(*plVar4 + 0x28)" (* "*") (cast_expression "(code **)(*plVar4 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x28)" (( "(") (binary_expression "*plVar4 + 0x28" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x28")) () ")")))) (== "==") (cast_expression "(code *)PTR_FUN_003f7fc8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_003f7fc8"))) () ")")) (compound_statement "{\n                    \n    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);\n  }" ({ "{") (expression_statement "FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);" (call_expression "FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b)" (identifier "FUN_0031f630") (argument_list "(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b)" (( "(") (pointer_expression "&local_50" (& "&") (identifier "local_50")) (, ",") (pointer_expression "*(undefined8 *)(plVar4[2] + 0x30)" (* "*") (cast_expression "(undefined8 *)(plVar4[2] + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 0x30)" (( "(") (binary_expression "plVar4[2] + 0x30" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x30")) () ")")))) (, ",") (pointer_expression "&local_5b" (& "&") (identifier "local_5b")) () ")"))) (; ";")) (} "}")) (else_clause "else {\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }" (else "else") (compound_statement "{\n                    \n    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);\n  }" ({ "{") (expression_statement "(**(code **)(*plVar4 + 0x28))(&local_50,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x28))(&local_50,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x28))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x28)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x28)" (* "*") (cast_expression "(code **)(*plVar4 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x28)" (( "(") (binary_expression "*plVar4 + 0x28" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(&local_50,plVar4)" (( "(") (pointer_expression "&local_50" (& "&") (identifier "local_50")) (, ",") (identifier "plVar4") () ")"))) (; ";")) (} "}")))) (expression_statement "uVar1 = *(ulong *)(local_50 + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_50 + -0x18)" (identifier "uVar1") (= "=") (pointer_expression "*(ulong *)(local_50 + -0x18)" (* "*") (cast_expression "(ulong *)(local_50 + -0x18)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_50 + -0x18)" (( "(") (binary_expression "local_50 + -0x18" (identifier "local_50") (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (expression_statement "*(ulong *)(param_1 + 0x38) = uVar1;" (assignment_expression "*(ulong *)(param_1 + 0x38) = uVar1" (pointer_expression "*(ulong *)(param_1 + 0x38)" (* "*") (cast_expression "(ulong *)(param_1 + 0x38)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (if_statement "if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }" (if "if") (parenthesized_expression "(0x1ffffffffffffffe < uVar1)" (( "(") (binary_expression "0x1ffffffffffffffe < uVar1" (number_literal "0x1ffffffffffffffe") (< "<") (identifier "uVar1")) () ")")) (compound_statement "{\n                    \n                    \n    FUN_002a23f0();\n  }" ({ "{") (expression_statement "FUN_002a23f0();" (call_expression "FUN_002a23f0()" (identifier "FUN_002a23f0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = thunk_FUN_002a11b0(uVar1 << 2);" (assignment_expression "uVar6 = thunk_FUN_002a11b0(uVar1 << 2)" (identifier "uVar6") (= "=") (call_expression "thunk_FUN_002a11b0(uVar1 << 2)" (identifier "thunk_FUN_002a11b0") (argument_list "(uVar1 << 2)" (( "(") (binary_expression "uVar1 << 2" (identifier "uVar1") (<< "<<") (number_literal "2")) () ")")))) (; ";")) (expression_statement "FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);" (call_expression "FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0)" (identifier "FUN_0031cc50") (argument_list "(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0)" (( "(") (pointer_expression "&local_50" (& "&") (identifier "local_50")) (, ",") (identifier "uVar6") (, ",") (pointer_expression "*(undefined8 *)(param_1 + 0x38)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x38)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x38)" (( "(") (binary_expression "param_1 + 0x38" (identifier "param_1") (+ "+") (number_literal "0x38")) () ")")))) (, ",") (number_literal "0") () ")"))) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {\n                    \n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8" (pointer_expression "*(code **)(*plVar4 + 0x30)" (* "*") (cast_expression "(code **)(*plVar4 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x30)" (( "(") (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x30")) () ")")))) (== "==") (cast_expression "(code *)PTR_FUN_003f7fb8" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_003f7fb8"))) () ")")) (compound_statement "{\n                    \n    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);\n  }" ({ "{") (expression_statement "FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);" (call_expression "FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a)" (identifier "FUN_0031f630") (argument_list "(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (pointer_expression "*(undefined8 *)(plVar4[2] + 0x40)" (* "*") (cast_expression "(undefined8 *)(plVar4[2] + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 0x40)" (( "(") (binary_expression "plVar4[2] + 0x40" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x40")) () ")")))) (, ",") (pointer_expression "&local_5a" (& "&") (identifier "local_5a")) () ")"))) (; ";")) (} "}")) (else_clause "else {\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }" (else "else") (compound_statement "{\n                    \n    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);\n  }" ({ "{") (expression_statement "(**(code **)(*plVar4 + 0x30))(&local_48,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x30))(&local_48,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x30))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x30)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x30)" (* "*") (cast_expression "(code **)(*plVar4 + 0x30)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x30)" (( "(") (binary_expression "*plVar4 + 0x30" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x30")) () ")"))))) () ")")) (argument_list "(&local_48,plVar4)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "plVar4") () ")"))) (; ";")) (} "}")))) (expression_statement "uVar1 = *(ulong *)(local_48 + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_48 + -0x18)" (identifier "uVar1") (= "=") (pointer_expression "*(ulong *)(local_48 + -0x18)" (* "*") (cast_expression "(ulong *)(local_48 + -0x18)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -0x18)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (expression_statement "*(ulong *)(param_1 + 0x48) = uVar1;" (assignment_expression "*(ulong *)(param_1 + 0x48) = uVar1" (pointer_expression "*(ulong *)(param_1 + 0x48)" (* "*") (cast_expression "(ulong *)(param_1 + 0x48)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (if_statement "if (0x1ffffffffffffffe < uVar1) {\n                    \n                    \n    FUN_002a23f0();\n  }" (if "if") (parenthesized_expression "(0x1ffffffffffffffe < uVar1)" (( "(") (binary_expression "0x1ffffffffffffffe < uVar1" (number_literal "0x1ffffffffffffffe") (< "<") (identifier "uVar1")) () ")")) (compound_statement "{\n                    \n                    \n    FUN_002a23f0();\n  }" ({ "{") (expression_statement "FUN_002a23f0();" (call_expression "FUN_002a23f0()" (identifier "FUN_002a23f0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar7 = thunk_FUN_002a11b0(uVar1 << 2);" (assignment_expression "uVar7 = thunk_FUN_002a11b0(uVar1 << 2)" (identifier "uVar7") (= "=") (call_expression "thunk_FUN_002a11b0(uVar1 << 2)" (identifier "thunk_FUN_002a11b0") (argument_list "(uVar1 << 2)" (( "(") (binary_expression "uVar1 << 2" (identifier "uVar1") (<< "<<") (number_literal "2")) () ")")))) (; ";")) (expression_statement "FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);" (call_expression "FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0)" (identifier "FUN_0031cc50") (argument_list "(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "uVar7") (, ",") (pointer_expression "*(undefined8 *)(param_1 + 0x48)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x48)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x48)" (( "(") (binary_expression "param_1 + 0x48" (identifier "param_1") (+ "+") (number_literal "0x48")) () ")")))) (, ",") (number_literal "0") () ")"))) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {\n                    \n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }\n  else {\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80" (pointer_expression "*(code **)(*plVar4 + 0x38)" (* "*") (cast_expression "(code **)(*plVar4 + 0x38)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x38)" (( "(") (binary_expression "*plVar4 + 0x38" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x38")) () ")")))) (== "==") (cast_expression "(code *)PTR_FUN_003f7e80" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_003f7e80"))) () ")")) (compound_statement "{\n                    \n    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);\n  }" ({ "{") (expression_statement "FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);" (call_expression "FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59)" (identifier "FUN_0031f630") (argument_list "(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59)" (( "(") (identifier "local_40") (, ",") (pointer_expression "*(undefined8 *)(plVar4[2] + 0x50)" (* "*") (cast_expression "(undefined8 *)(plVar4[2] + 0x50)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 0x50)" (( "(") (binary_expression "plVar4[2] + 0x50" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x50")) () ")")))) (, ",") (pointer_expression "&local_59" (& "&") (identifier "local_59")) () ")"))) (; ";")) (} "}")) (else_clause "else {\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }" (else "else") (compound_statement "{\n                    \n    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);\n  }" ({ "{") (expression_statement "(**(code **)(*plVar4 + 0x38))(local_40,plVar4);" (call_expression "(**(code **)(*plVar4 + 0x38))(local_40,plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x38))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x38)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x38)" (* "*") (cast_expression "(code **)(*plVar4 + 0x38)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x38)" (( "(") (binary_expression "*plVar4 + 0x38" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x38")) () ")"))))) () ")")) (argument_list "(local_40,plVar4)" (( "(") (identifier "local_40") (, ",") (identifier "plVar4") () ")"))) (; ";")) (} "}")))) (expression_statement "local_70 = local_40;" (assignment_expression "local_70 = local_40" (identifier "local_70") (= "=") (identifier "local_40")) (; ";")) (expression_statement "uVar1 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar1 = *(ulong *)(local_40[0] + -0x18)" (identifier "uVar1") (= "=") (pointer_expression "*(ulong *)(local_40[0] + -0x18)" (* "*") (cast_expression "(ulong *)(local_40[0] + -0x18)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (expression_statement "*(ulong *)(param_1 + 0x58) = uVar1;" (assignment_expression "*(ulong *)(param_1 + 0x58) = uVar1" (pointer_expression "*(ulong *)(param_1 + 0x58)" (* "*") (cast_expression "(ulong *)(param_1 + 0x58)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")")))) (= "=") (identifier "uVar1")) (; ";")) (if_statement "if (uVar1 < 0x1fffffffffffffff) {\n                    \n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }" (if "if") (parenthesized_expression "(uVar1 < 0x1fffffffffffffff)" (( "(") (binary_expression "uVar1 < 0x1fffffffffffffff" (identifier "uVar1") (< "<") (number_literal "0x1fffffffffffffff")) () ")")) (compound_statement "{\n                    \n    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);\n                    \n    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);\n    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 100) = uVar3;\n    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }\n    *(undefined4 *)(param_1 + 0x68) = uVar3;\n    plVar4 = (long *)FUN_002ef340(param_2);\n    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);\n    *(char **)(param_1 + 0x10) = pcVar5;\n    *(undefined8 *)(param_1 + 0x30) = uVar6;\n    *(undefined8 *)(param_1 + 0x40) = uVar7;\n    *(undefined8 *)(param_1 + 0x50) = uVar8;\n    *(undefined1 *)(param_1 + 0x98) = 1;\n    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }\n    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }\n    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }\n    return;\n  }" ({ "{") (expression_statement "uVar8 = thunk_FUN_002a11b0(uVar1 << 2);" (assignment_expression "uVar8 = thunk_FUN_002a11b0(uVar1 << 2)" (identifier "uVar8") (= "=") (call_expression "thunk_FUN_002a11b0(uVar1 << 2)" (identifier "thunk_FUN_002a11b0") (argument_list "(uVar1 << 2)" (( "(") (binary_expression "uVar1 << 2" (identifier "uVar1") (<< "<<") (number_literal "2")) () ")")))) (; ";")) (expression_statement "FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);" (call_expression "FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0)" (identifier "FUN_0031cc50") (argument_list "(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0)" (( "(") (identifier "local_70") (, ",") (identifier "uVar8") (, ",") (pointer_expression "*(undefined8 *)(param_1 + 0x58)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x58)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x58)" (( "(") (binary_expression "param_1 + 0x58" (identifier "param_1") (+ "+") (number_literal "0x58")) () ")")))) (, ",") (number_literal "0") () ")"))) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0" (pointer_expression "*(code **)(*plVar4 + 0x48)" (* "*") (cast_expression "(code **)(*plVar4 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x48)" (( "(") (binary_expression "*plVar4 + 0x48" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x48")) () ")")))) (== "==") (cast_expression "(code *)PTR_FUN_003f7ca0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_003f7ca0"))) () ")")) (compound_statement "{\n      uVar3 = *(undefined4 *)(plVar4[2] + 100);\n    }" ({ "{") (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 100);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 100)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined4 *)(plVar4[2] + 100)" (* "*") (cast_expression "(undefined4 *)(plVar4[2] + 100)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 100)" (( "(") (binary_expression "plVar4[2] + 100" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "100")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }" (else "else") (compound_statement "{\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);\n    }" ({ "{") (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4)" (identifier "uVar3") (= "=") (call_expression "(**(code **)(*plVar4 + 0x48))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x48))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x48)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x48)" (* "*") (cast_expression "(code **)(*plVar4 + 0x48)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x48)" (( "(") (binary_expression "*plVar4 + 0x48" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x48")) () ")"))))) () ")")) (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")")))) (; ";")) (} "}")))) (expression_statement "*(undefined4 *)(param_1 + 100) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 100) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 100)" (* "*") (cast_expression "(undefined4 *)(param_1 + 100)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 100)" (( "(") (binary_expression "param_1 + 100" (identifier "param_1") (+ "+") (number_literal "100")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (if_statement "if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }\n    else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }" (if "if") (parenthesized_expression "(*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0)" (( "(") (binary_expression "*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0" (pointer_expression "*(code **)(*plVar4 + 0x50)" (* "*") (cast_expression "(code **)(*plVar4 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x50)" (( "(") (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x50")) () ")")))) (== "==") (cast_expression "(code *)PTR_FUN_003f7fe0" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "PTR_FUN_003f7fe0"))) () ")")) (compound_statement "{\n      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);\n    }" ({ "{") (expression_statement "uVar3 = *(undefined4 *)(plVar4[2] + 0x68);" (assignment_expression "uVar3 = *(undefined4 *)(plVar4[2] + 0x68)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined4 *)(plVar4[2] + 0x68)" (* "*") (cast_expression "(undefined4 *)(plVar4[2] + 0x68)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar4[2] + 0x68)" (( "(") (binary_expression "plVar4[2] + 0x68" (subscript_expression "plVar4[2]" (identifier "plVar4") ([ "[") (number_literal "2") (] "]")) (+ "+") (number_literal "0x68")) () ")"))))) (; ";")) (} "}")) (else_clause "else {\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }" (else "else") (compound_statement "{\n                    \n      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);\n    }" ({ "{") (expression_statement "uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);" (assignment_expression "uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4)" (identifier "uVar3") (= "=") (call_expression "(**(code **)(*plVar4 + 0x50))(plVar4)" (parenthesized_expression "(**(code **)(*plVar4 + 0x50))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x50)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x50)" (* "*") (cast_expression "(code **)(*plVar4 + 0x50)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x50)" (( "(") (binary_expression "*plVar4 + 0x50" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x50")) () ")"))))) () ")")) (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")")))) (; ";")) (} "}")))) (expression_statement "*(undefined4 *)(param_1 + 0x68) = uVar3;" (assignment_expression "*(undefined4 *)(param_1 + 0x68) = uVar3" (pointer_expression "*(undefined4 *)(param_1 + 0x68)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0x68)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x68)" (( "(") (binary_expression "param_1 + 0x68" (identifier "param_1") (+ "+") (number_literal "0x68")) () ")")))) (= "=") (identifier "uVar3")) (; ";")) (expression_statement "plVar4 = (long *)FUN_002ef340(param_2);" (assignment_expression "plVar4 = (long *)FUN_002ef340(param_2)" (identifier "plVar4") (= "=") (cast_expression "(long *)FUN_002ef340(param_2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002ef340(param_2)" (identifier "FUN_002ef340") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")"))))) (; ";")) (expression_statement "(**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);" (call_expression "(**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c)" (parenthesized_expression "(**(code **)(*plVar4 + 0x58))" (( "(") (pointer_expression "**(code **)(*plVar4 + 0x58)" (* "*") (pointer_expression "*(code **)(*plVar4 + 0x58)" (* "*") (cast_expression "(code **)(*plVar4 + 0x58)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*plVar4 + 0x58)" (( "(") (binary_expression "*plVar4 + 0x58" (pointer_expression "*plVar4" (* "*") (identifier "plVar4")) (+ "+") (number_literal "0x58")) () ")"))))) () ")")) (argument_list "(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c)" (( "(") (identifier "plVar4") (, ",") (identifier "PTR_DAT_003f8630") (, ",") (binary_expression "PTR_DAT_003f8630 + 0xb" (identifier "PTR_DAT_003f8630") (+ "+") (number_literal "0xb")) (, ",") (binary_expression "param_1 + 0x6c" (identifier "param_1") (+ "+") (number_literal "0x6c")) () ")"))) (; ";")) (expression_statement "*(char **)(param_1 + 0x10) = pcVar5;" (assignment_expression "*(char **)(param_1 + 0x10) = pcVar5" (pointer_expression "*(char **)(param_1 + 0x10)" (* "*") (cast_expression "(char **)(param_1 + 0x10)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_1 + 0x10)" (( "(") (binary_expression "param_1 + 0x10" (identifier "param_1") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (identifier "pcVar5")) (; ";")) (expression_statement "*(undefined8 *)(param_1 + 0x30) = uVar6;" (assignment_expression "*(undefined8 *)(param_1 + 0x30) = uVar6" (pointer_expression "*(undefined8 *)(param_1 + 0x30)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x30)" (( "(") (binary_expression "param_1 + 0x30" (identifier "param_1") (+ "+") (number_literal "0x30")) () ")")))) (= "=") (identifier "uVar6")) (; ";")) (expression_statement "*(undefined8 *)(param_1 + 0x40) = uVar7;" (assignment_expression "*(undefined8 *)(param_1 + 0x40) = uVar7" (pointer_expression "*(undefined8 *)(param_1 + 0x40)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x40)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x40)" (( "(") (binary_expression "param_1 + 0x40" (identifier "param_1") (+ "+") (number_literal "0x40")) () ")")))) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "*(undefined8 *)(param_1 + 0x50) = uVar8;" (assignment_expression "*(undefined8 *)(param_1 + 0x50) = uVar8" (pointer_expression "*(undefined8 *)(param_1 + 0x50)" (* "*") (cast_expression "(undefined8 *)(param_1 + 0x50)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x50)" (( "(") (binary_expression "param_1 + 0x50" (identifier "param_1") (+ "+") (number_literal "0x50")) () ")")))) (= "=") (identifier "uVar8")) (; ";")) (expression_statement "*(undefined1 *)(param_1 + 0x98) = 1;" (assignment_expression "*(undefined1 *)(param_1 + 0x98) = 1" (pointer_expression "*(undefined1 *)(param_1 + 0x98)" (* "*") (cast_expression "(undefined1 *)(param_1 + 0x98)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x98)" (( "(") (binary_expression "param_1 + 0x98" (identifier "param_1") (+ "+") (number_literal "0x98")) () ")")))) (= "=") (number_literal "1")) (; ";")) (if_statement "if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }" (if "if") (parenthesized_expression "((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00)" (( "(") (binary_expression "(undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00" (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (pointer_expression "&DAT_00405f00" (& "&") (identifier "DAT_00405f00"))) () ")")) (compound_statement "{\n      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);\n    }" ({ "{") (expression_statement "FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);" (call_expression "FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59)" (identifier "FUN_002ed100") (argument_list "((undefined8 *)(local_40[0] + -0x18),&local_59)" (( "(") (cast_expression "(undefined8 *)(local_40[0] + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_40[0] + -0x18)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_59" (& "&") (identifier "local_59")) () ")"))) (; ";")) (} "}"))) (if_statement "if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }" (if "if") (parenthesized_expression "((undefined8 *)(local_48 + -0x18) != &DAT_00405f00)" (( "(") (binary_expression "(undefined8 *)(local_48 + -0x18) != &DAT_00405f00" (cast_expression "(undefined8 *)(local_48 + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -0x18)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (pointer_expression "&DAT_00405f00" (& "&") (identifier "DAT_00405f00"))) () ")")) (compound_statement "{\n      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);\n    }" ({ "{") (expression_statement "FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);" (call_expression "FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59)" (identifier "FUN_002ed100") (argument_list "((undefined8 *)(local_48 + -0x18),&local_59)" (( "(") (cast_expression "(undefined8 *)(local_48 + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -0x18)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_59" (& "&") (identifier "local_59")) () ")"))) (; ";")) (} "}"))) (if_statement "if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }" (if "if") (parenthesized_expression "((undefined8 *)(local_50 + -0x18) != &DAT_00405f00)" (( "(") (binary_expression "(undefined8 *)(local_50 + -0x18) != &DAT_00405f00" (cast_expression "(undefined8 *)(local_50 + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_50 + -0x18)" (( "(") (binary_expression "local_50 + -0x18" (identifier "local_50") (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (pointer_expression "&DAT_00405f00" (& "&") (identifier "DAT_00405f00"))) () ")")) (compound_statement "{\n      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);\n    }" ({ "{") (expression_statement "FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);" (call_expression "FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59)" (identifier "FUN_002ed100") (argument_list "((undefined8 *)(local_50 + -0x18),&local_59)" (( "(") (cast_expression "(undefined8 *)(local_50 + -0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_50 + -0x18)" (( "(") (binary_expression "local_50 + -0x18" (identifier "local_50") (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_59" (& "&") (identifier "local_59")) () ")"))) (; ";")) (} "}"))) (if_statement "if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }" (if "if") (parenthesized_expression "((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38)" (( "(") (binary_expression "(undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38" (cast_expression "(undefined *)(local_58 + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 + -0x18)" (( "(") (binary_expression "local_58 + -0x18" (identifier "local_58") (+ "+") (number_literal "-0x18")) () ")"))) (!= "!=") (identifier "PTR_DAT_003f7c38")) () ")")) (compound_statement "{\n      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);\n    }" ({ "{") (expression_statement "FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);" (call_expression "FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59)" (identifier "FUN_002ed0c0") (argument_list "((undefined *)(local_58 + -0x18),&local_59)" (( "(") (cast_expression "(undefined *)(local_58 + -0x18)" (( "(") (type_descriptor "undefined *" (type_identifier "undefined") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_58 + -0x18)" (( "(") (binary_expression "local_58 + -0x18" (identifier "local_58") (+ "+") (number_literal "-0x18")) () ")"))) (, ",") (pointer_expression "&local_59" (& "&") (identifier "local_59")) () ")"))) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "FUN_002a23f0();" (call_expression "FUN_002a23f0()" (identifier "FUN_002a23f0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}")))

/* std::__moneypunct_cache<wchar_t, true>::_M_cache(std::locale const&) */

void __thiscall
var_5::var_1<var_2,true>::_M_cache
          (var_1<var_2,true> *var_7,locale *param_1)

{
  type_7 var_13;
  var_1<var_2,true> var_3;
  type_1 uVar3;
  type_2 *var_6;
  char *pcVar5;
  var_2 *pwVar6;
  var_2 *pwVar7;
  var_2 *pwVar8;
  type_3 *pcVar9;
  type_4 *local_70;
  type_5 local_5b;
  type_5 local_5a;
  type_5 local_59;
  long var_9;
  long var_12;
  long var_15;
  long local_40 [2];
  
  var_6 = var_4<var_5::type_2<var_2,true>>(param_1);
  if (*(type_6 **)(*(long *)var_6 + 0x10) == (type_6 *)PTR_do_decimal_point_003f7f58) {
    uVar3 = *(type_1 *)(*(long *)(var_6 + 0x10) + 0x24);
  }
  else {
    uVar3 = (**(type_6 **)(*(long *)var_6 + 0x10))(var_6);
  }
  *(type_1 *)(var_7 + 0x24) = uVar3;
  if (*(type_6 **)(*(long *)var_6 + 0x18) == (type_6 *)PTR_do_thousands_sep_003f7c98) {
    uVar3 = *(type_1 *)(*(long *)(var_6 + 0x10) + 0x28);
  }
  else {
    uVar3 = (**(type_6 **)(*(long *)var_6 + 0x18))(var_6);
  }
  *(type_1 *)(var_7 + 0x28) = uVar3;
  if (*(type_6 **)(*(long *)var_6 + 0x40) == (type_6 *)PTR_do_frac_digits_003f7ac8) {
    uVar3 = *(type_1 *)(*(long *)(var_6 + 0x10) + 0x60);
  }
  else {
    uVar3 = (**(type_6 **)(*(long *)var_6 + 0x40))(var_6);
  }
  *(type_1 *)(var_7 + 0x60) = uVar3;
  if (*(type_6 **)(*(long *)var_6 + 0x20) == (type_6 *)PTR_do_grouping_003f7e30) {
                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */
    std::string::var_8((var_8 *)&var_9,*(char **)(*(long *)(var_6 + 0x10) + 0x10),
                        (type_5 *)local_40);
  }
  else {
                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */
    (**(type_6 **)(*(long *)var_6 + 0x20))(&var_9,var_6);
  }
  var_13 = *(type_7 *)(var_9 + -0x18);
  *(type_7 *)(var_7 + 0x18) = var_13;
                    /* try { // try from 002efed8 to 002efedc has its CatchHandler @ 002f02cd */
  pcVar5 = (char *)var_10(var_13);
                    /* try { // try from 002efeec to 002efef0 has its CatchHandler @ 002f02cb */
  std::string::var_11((var_8 *)&var_9,pcVar5,*(type_7 *)(var_7 + 0x18),0);
  var_3 = (var_1<var_2,true>)0x0;
  if (*(long *)(var_7 + 0x18) != 0) {
    var_3 = (var_1<var_2,true>)((byte)(*pcVar5 - 1U) < 0x7e);
  }
  var_7[0x20] = var_3;
  if (*(type_6 **)(*(long *)var_6 + 0x28) == (type_6 *)PTR_do_curr_symbol_003f7fc8) {
                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */
    std::wstring::type_4
              ((type_4 *)&var_12,*(var_2 **)(*(long *)(var_6 + 0x10) + 0x30),&local_5b);
  }
  else {
                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */
    (**(type_6 **)(*(long *)var_6 + 0x28))(&var_12,var_6);
  }
  var_13 = *(type_7 *)(var_12 + -0x18);
  *(type_7 *)(var_7 + 0x38) = var_13;
  if (0x1ffffffffffffffe < var_13) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */
    var_14();
  }
                    /* try { // try from 002eff54 to 002eff58 has its CatchHandler @ 002f034b */
  pwVar6 = (var_2 *)var_10(var_13 << 2);
                    /* try { // try from 002eff68 to 002eff6c has its CatchHandler @ 002f03ad */
  std::wstring::var_11((type_4 *)&var_12,pwVar6,*(type_7 *)(var_7 + 0x38),0);
  if (*(type_6 **)(*(long *)var_6 + 0x30) == (type_6 *)PTR_do_positive_sign_003f7fb8) {
                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */
    std::wstring::type_4
              ((type_4 *)&var_15,*(var_2 **)(*(long *)(var_6 + 0x10) + 0x40),&local_5a);
  }
  else {
                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */
    (**(type_6 **)(*(long *)var_6 + 0x30))(&var_15,var_6);
  }
  var_13 = *(type_7 *)(var_15 + -0x18);
  *(type_7 *)(var_7 + 0x48) = var_13;
  if (0x1ffffffffffffffe < var_13) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */
    var_14();
  }
                    /* try { // try from 002effc0 to 002effc4 has its CatchHandler @ 002f02e7 */
  pwVar7 = (var_2 *)var_10(var_13 << 2);
                    /* try { // try from 002effd4 to 002effd8 has its CatchHandler @ 002f02e5 */
  std::wstring::var_11((type_4 *)&var_15,pwVar7,*(type_7 *)(var_7 + 0x48),0);
  if (*(type_6 **)(*(long *)var_6 + 0x38) == (type_6 *)PTR_do_negative_sign_003f7e80) {
                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */
    std::wstring::type_4
              ((type_4 *)local_40,*(var_2 **)(*(long *)(var_6 + 0x10) + 0x50),&local_59);
  }
  else {
                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */
    (**(type_6 **)(*(long *)var_6 + 0x38))(local_40,var_6);
  }
  local_70 = (type_4 *)local_40;
  var_13 = *(type_7 *)(local_40[0] + -0x18);
  *(type_7 *)(var_7 + 0x58) = var_13;
  if (var_13 < 0x1fffffffffffffff) {
                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */
    pwVar8 = (var_2 *)var_10(var_13 << 2);
                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */
    std::wstring::var_11(local_70,pwVar8,*(type_7 *)(var_7 + 0x58),0);
    if (*(type_6 **)(*(long *)var_6 + 0x48) == (type_6 *)PTR_do_pos_format_003f7ca0) {
      uVar3 = *(type_1 *)(*(long *)(var_6 + 0x10) + 100);
    }
    else {
                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */
      uVar3 = (**(type_6 **)(*(long *)var_6 + 0x48))(var_6);
    }
    *(type_1 *)(var_7 + 100) = uVar3;
    if (*(type_6 **)(*(long *)var_6 + 0x50) == (type_6 *)PTR_do_neg_format_003f7fe0) {
      uVar3 = *(type_1 *)(*(long *)(var_6 + 0x10) + 0x68);
    }
    else {
                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */
      uVar3 = (**(type_6 **)(*(long *)var_6 + 0x50))(var_6);
    }
    *(type_1 *)(var_7 + 0x68) = uVar3;
    pcVar9 = var_4<var_5::type_3<var_2>>(param_1);
    (**(type_6 **)(*(long *)pcVar9 + 0x58))
              (pcVar9,var_16::_S_atoms,var_16::_S_atoms + 0xb,var_7 + 0x6c);
    *(char **)(var_7 + 0x10) = pcVar5;
    *(var_2 **)(var_7 + 0x30) = pwVar6;
    *(var_2 **)(var_7 + 0x40) = pwVar7;
    *(var_2 **)(var_7 + 0x50) = pwVar8;
    var_7[0x98] = (var_1<var_2,true>)0x1;
    if ((type_5 *)(local_40[0] + -0x18) != (type_5 *)&var_5::type_4::_Rep::_S_empty_rep_storage
       ) {
      std::wstring::_Rep::var_17((type_5 *)(local_40[0] + -0x18));
    }
    if ((type_5 *)(var_15 + -0x18) != (type_5 *)&var_5::type_4::_Rep::_S_empty_rep_storage) {
      std::wstring::_Rep::var_17((type_5 *)(var_15 + -0x18));
    }
    if ((type_5 *)(var_12 + -0x18) != (type_5 *)&var_5::type_4::_Rep::_S_empty_rep_storage) {
      std::wstring::_Rep::var_17((type_5 *)(var_12 + -0x18));
    }
    if ((type_5 *)(var_9 + -0x18) != (type_5 *)PTR__S_empty_rep_storage_003f7c38) {
      std::string::_Rep::var_17((type_5 *)(var_9 + -0x18));
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f03a1 to 002f03a5 has its CatchHandler @ 002f03a6 */
  var_14();
}


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

void MASKED(long param_1,undefined8 param_2)

{
  ulong uVar1;
  bool bVar2;
  undefined4 uVar3;
  long *plVar4;
  char *pcVar5;
  undefined8 uVar6;
  undefined8 uVar7;
  undefined8 uVar8;
  long *local_70;
  undefined1 local_5b;
  undefined1 local_5a;
  undefined1 local_59;
  long local_58;
  long local_50;
  long local_48;
  long local_40 [2];
  
  plVar4 = (long *)FUN_002efdd0(param_2);
  if (*(code **)(*plVar4 + 0x10) == (code *)PTR_FUN_003f7f58) {
    uVar3 = *(undefined4 *)(plVar4[2] + 0x24);
  }
  else {
    uVar3 = (**(code **)(*plVar4 + 0x10))(plVar4);
  }
  *(undefined4 *)(param_1 + 0x24) = uVar3;
  if (*(code **)(*plVar4 + 0x18) == (code *)PTR_FUN_003f7c98) {
    uVar3 = *(undefined4 *)(plVar4[2] + 0x28);
  }
  else {
    uVar3 = (**(code **)(*plVar4 + 0x18))(plVar4);
  }
  *(undefined4 *)(param_1 + 0x28) = uVar3;
  if (*(code **)(*plVar4 + 0x40) == (code *)PTR_FUN_003f7ac8) {
    uVar3 = *(undefined4 *)(plVar4[2] + 0x60);
  }
  else {
    uVar3 = (**(code **)(*plVar4 + 0x40))(plVar4);
  }
  *(undefined4 *)(param_1 + 0x60) = uVar3;
  if (*(code **)(*plVar4 + 0x20) == (code *)PTR_FUN_003f7e30) {
                    /* try { // try from 002efec6 to 002efeca has its CatchHandler @ 002f0241 */
    FUN_002d7350(&local_58,*(undefined8 *)(plVar4[2] + 0x10),local_40);
  }
  else {
                    /* try { // try from 002f0153 to 002f0154 has its CatchHandler @ 002f0241 */
    (**(code **)(*plVar4 + 0x20))(&local_58,plVar4);
  }
  *(undefined8 *)(param_1 + 0x18) = *(undefined8 *)(local_58 + -0x18);
                    /* try { // try from 002efed8 to 002efedc has its CatchHandler @ 002f02cd */
  pcVar5 = (char *)thunk_FUN_002a11b0();
                    /* try { // try from 002efeec to 002efef0 has its CatchHandler @ 002f02cb */
  FUN_002d4ac0(&local_58,pcVar5,*(undefined8 *)(param_1 + 0x18),0);
  bVar2 = false;
  if (*(long *)(param_1 + 0x18) != 0) {
    bVar2 = (byte)(*pcVar5 - 1U) < 0x7e;
  }
  *(bool *)(param_1 + 0x20) = bVar2;
  if (*(code **)(*plVar4 + 0x28) == (code *)PTR_FUN_003f7fc8) {
                    /* try { // try from 002eff2b to 002eff2f has its CatchHandler @ 002f03a8 */
    FUN_0031f630(&local_50,*(undefined8 *)(plVar4[2] + 0x30),&local_5b);
  }
  else {
                    /* try { // try from 002f019b to 002f019c has its CatchHandler @ 002f023f */
    (**(code **)(*plVar4 + 0x28))(&local_50,plVar4);
  }
  uVar1 = *(ulong *)(local_50 + -0x18);
  *(ulong *)(param_1 + 0x38) = uVar1;
  if (0x1ffffffffffffffe < uVar1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f034d to 002f0351 has its CatchHandler @ 002f0364 */
    FUN_002a23f0();
  }
                    /* try { // try from 002eff54 to 002eff58 has its CatchHandler @ 002f034b */
  uVar6 = thunk_FUN_002a11b0(uVar1 << 2);
                    /* try { // try from 002eff68 to 002eff6c has its CatchHandler @ 002f03ad */
  FUN_0031cc50(&local_50,uVar6,*(undefined8 *)(param_1 + 0x38),0);
  if (*(code **)(*plVar4 + 0x30) == (code *)PTR_FUN_003f7fb8) {
                    /* try { // try from 002eff97 to 002eff9b has its CatchHandler @ 002f03c9 */
    FUN_0031f630(&local_48,*(undefined8 *)(plVar4[2] + 0x40),&local_5a);
  }
  else {
                    /* try { // try from 002f01b3 to 002f01b4 has its CatchHandler @ 002f03cb */
    (**(code **)(*plVar4 + 0x30))(&local_48,plVar4);
  }
  uVar1 = *(ulong *)(local_48 + -0x18);
  *(ulong *)(param_1 + 0x48) = uVar1;
  if (0x1ffffffffffffffe < uVar1) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f03bf to 002f03c3 has its CatchHandler @ 002f03cd */
    FUN_002a23f0();
  }
                    /* try { // try from 002effc0 to 002effc4 has its CatchHandler @ 002f02e7 */
  uVar7 = thunk_FUN_002a11b0(uVar1 << 2);
                    /* try { // try from 002effd4 to 002effd8 has its CatchHandler @ 002f02e5 */
  FUN_0031cc50(&local_48,uVar7,*(undefined8 *)(param_1 + 0x48),0);
  if (*(code **)(*plVar4 + 0x38) == (code *)PTR_FUN_003f7e80) {
                    /* try { // try from 002f0008 to 002f000c has its CatchHandler @ 002f0366 */
    FUN_0031f630(local_40,*(undefined8 *)(plVar4[2] + 0x50),&local_59);
  }
  else {
                    /* try { // try from 002f01e0 to 002f01e1 has its CatchHandler @ 002f03c4 */
    (**(code **)(*plVar4 + 0x38))(local_40,plVar4);
  }
  local_70 = local_40;
  uVar1 = *(ulong *)(local_40[0] + -0x18);
  *(ulong *)(param_1 + 0x58) = uVar1;
  if (uVar1 < 0x1fffffffffffffff) {
                    /* try { // try from 002f0031 to 002f0035 has its CatchHandler @ 002f039c */
    uVar8 = thunk_FUN_002a11b0(uVar1 << 2);
                    /* try { // try from 002f0047 to 002f00ae has its CatchHandler @ 002f0368 */
    FUN_0031cc50(local_70,uVar8,*(undefined8 *)(param_1 + 0x58),0);
    if (*(code **)(*plVar4 + 0x48) == (code *)PTR_FUN_003f7ca0) {
      uVar3 = *(undefined4 *)(plVar4[2] + 100);
    }
    else {
                    /* try { // try from 002f01f3 to 002f01f4 has its CatchHandler @ 002f0368 */
      uVar3 = (**(code **)(*plVar4 + 0x48))(plVar4);
    }
    *(undefined4 *)(param_1 + 100) = uVar3;
    if (*(code **)(*plVar4 + 0x50) == (code *)PTR_FUN_003f7fe0) {
      uVar3 = *(undefined4 *)(plVar4[2] + 0x68);
    }
    else {
                    /* try { // try from 002f01c3 to 002f01c4 has its CatchHandler @ 002f0368 */
      uVar3 = (**(code **)(*plVar4 + 0x50))(plVar4);
    }
    *(undefined4 *)(param_1 + 0x68) = uVar3;
    plVar4 = (long *)FUN_002ef340(param_2);
    (**(code **)(*plVar4 + 0x58))(plVar4,PTR_DAT_003f8630,PTR_DAT_003f8630 + 0xb,param_1 + 0x6c);
    *(char **)(param_1 + 0x10) = pcVar5;
    *(undefined8 *)(param_1 + 0x30) = uVar6;
    *(undefined8 *)(param_1 + 0x40) = uVar7;
    *(undefined8 *)(param_1 + 0x50) = uVar8;
    *(undefined1 *)(param_1 + 0x98) = 1;
    if ((undefined8 *)(local_40[0] + -0x18) != &DAT_00405f00) {
      FUN_002ed100((undefined8 *)(local_40[0] + -0x18),&local_59);
    }
    if ((undefined8 *)(local_48 + -0x18) != &DAT_00405f00) {
      FUN_002ed100((undefined8 *)(local_48 + -0x18),&local_59);
    }
    if ((undefined8 *)(local_50 + -0x18) != &DAT_00405f00) {
      FUN_002ed100((undefined8 *)(local_50 + -0x18),&local_59);
    }
    if ((undefined *)(local_58 + -0x18) != PTR_DAT_003f7c38) {
      FUN_002ed0c0((undefined *)(local_58 + -0x18),&local_59);
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 002f03a1 to 002f03a5 has its CatchHandler @ 002f03a6 */
  FUN_002a23f0();
}

