
/* std::ostreambuf_iterator<char, std::char_traits<char> > std::money_put<char,
   std::ostreambuf_iterator<char, std::char_traits<char> >
   >::_M_insert<false>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&,
   char, std::string const&) const */

undefined1  [16]
std::money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::_M_insert<false>
          (undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,
          undefined8 *param_6)

{
  long *plVar1;
  char cVar2;
  int iVar3;
  ctype *pcVar4;
  ulong uVar5;
  byte *pbVar6;
  char *pcVar7;
  long lVar8;
  __moneypunct_cache<char,false> *this;
  bool bVar9;
  ulong uVar10;
  char **ppcVar11;
  ulong uVar12;
  uint uVar13;
  byte *pbVar14;
  ulong uVar15;
  byte *pbVar16;
  undefined1 auVar17 [16];
  char local_8e;
  char *local_88;
  ulong local_80;
  undefined1 local_4c [4];
  char *local_48;
  undefined1 *local_40 [2];
  
  local_8e = (char)param_3;
  pcVar4 = use_facet<std::ctype<char>>((locale *)(param_4 + 0xd0));
  uVar5 = locale::id::_M_id((id *)&moneypunct<char,false>::id);
  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar5 * 8);
  lVar8 = *plVar1;
  if (lVar8 == 0) {
                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */
    this = (__moneypunct_cache<char,false> *)operator_new(0x70);
    *(undefined4 *)(this + 8) = 0;
    *(undefined8 *)(this + 0x10) = 0;
    *(undefined8 *)(this + 0x18) = 0;
    this[0x22] = (__moneypunct_cache<char,false>)0x0;
    *(undefined ***)this = &PTR____moneypunct_cache_00677260;
    *(undefined2 *)(this + 0x20) = 0;
    *(undefined8 *)(this + 0x28) = 0;
    *(undefined8 *)(this + 0x30) = 0;
    *(undefined8 *)(this + 0x38) = 0;
    *(undefined8 *)(this + 0x40) = 0;
    *(undefined8 *)(this + 0x48) = 0;
    *(undefined8 *)(this + 0x50) = 0;
    *(undefined8 *)(this + 0x58) = 0;
    *(undefined4 *)(this + 0x60) = 0;
    this[0x6f] = (__moneypunct_cache<char,false>)0x0;
                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */
    __moneypunct_cache<char,false>::_M_cache(this,(locale *)(param_4 + 0xd0));
    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5);
    lVar8 = *plVar1;
  }
  pbVar16 = (byte *)*param_6;
  pbVar14 = pbVar16 + -0x18;
  if (*pbVar16 == *(byte *)(lVar8 + 100)) {
    local_4c = *(undefined1 (*) [4])(lVar8 + 0x60);
    if (*(long *)pbVar14 == 0) goto LAB_004b2580;
    local_88 = *(char **)(lVar8 + 0x48);
    uVar5 = *(ulong *)(lVar8 + 0x50);
    pbVar16 = pbVar16 + 1;
  }
  else {
    local_4c = *(undefined1 (*) [4])(lVar8 + 0x5c);
    uVar5 = *(ulong *)(lVar8 + 0x40);
    local_88 = *(char **)(lVar8 + 0x38);
  }
  pbVar14 = pbVar16 + *(long *)pbVar14;
  if ((pbVar16 < pbVar14) &&
     (pbVar6 = pbVar16, (*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8) != 0)) {
    do {
      pbVar6 = pbVar6 + 1;
      if (pbVar14 == pbVar6) {
        uVar15 = (long)pbVar14 - (long)pbVar16;
        goto joined_r0x004b257e;
      }
    } while ((*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8) != 0);
    uVar15 = (long)pbVar6 - (long)pbVar16;
joined_r0x004b257e:
    if (uVar15 != 0) {
      local_48 = &DAT_00689d98;
                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */
      std::string::reserve((string *)&local_48,uVar15 * 2);
      iVar3 = *(int *)(lVar8 + 0x58);
      uVar10 = uVar15 - (long)iVar3;
      if (0 < (long)uVar10) {
        if (iVar3 < 0) {
          uVar10 = uVar15;
        }
        if (*(long *)(lVar8 + 0x18) == 0) {
                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */
          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);
        }
        else {
          std::string::_M_replace_aux
                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');
          uVar12 = *(ulong *)(lVar8 + 0x18);
          pcVar7 = *(char **)(lVar8 + 0x10);
          cVar2 = *(char *)(lVar8 + 0x22);
          std::string::_M_leak((string *)&local_48);
          pcVar7 = __add_grouping<char>
                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,
                              (char *)(pbVar16 + uVar10));
          std::string::_M_leak((string *)&local_48);
          uVar12 = (long)pcVar7 - (long)local_48;
          if (*(ulong *)(local_48 + -0x18) < uVar12) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */
            __throw_out_of_range_fmt
                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",
                       "basic_string::erase",uVar12);
          }
          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)
          ;
        }
        iVar3 = *(int *)(lVar8 + 0x58);
      }
      if (0 < iVar3) {
                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */
        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));
        if ((long)uVar10 < 0) {
          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));
          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);
        }
        else {
          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),
                              (long)*(int *)(lVar8 + 0x58));
        }
      }
      uVar13 = *(uint *)(param_4 + 0x18) & 0xb0;
      local_80 = *(long *)(local_48 + -0x18) + uVar5;
      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {
        local_80 = local_80 + *(long *)(lVar8 + 0x30);
      }
      local_40[0] = &DAT_00689d98;
                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */
      std::string::reserve((string *)local_40,local_80 * 2);
      uVar15 = *(ulong *)(param_4 + 0x10);
      ppcVar11 = (char **)local_4c;
      bVar9 = uVar13 == 0x10 && local_80 < uVar15;
      do {
        switch(*(undefined1 *)ppcVar11) {
        case 0:
          if (bVar9) {
LAB_004b27c0:
            std::string::append((string *)local_40,uVar15 - local_80,param_5);
          }
          break;
        case 1:
          if (bVar9) goto LAB_004b27c0;
                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */
          std::string::push_back((string *)local_40,param_5);
          break;
        case 2:
          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {
            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)
                               );
          }
          break;
        case 3:
          if (uVar5 != 0) {
            std::string::push_back((string *)local_40,*local_88);
          }
          break;
        case 4:
          std::string::append((string *)local_40,(string *)&local_48);
        }
        ppcVar11 = (char **)((long)ppcVar11 + 1);
      } while (ppcVar11 != &local_48);
      if (1 < uVar5) {
        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);
      }
      uVar5 = *(ulong *)(local_40[0] + -0x18);
      if (uVar5 < uVar15) {
        if (uVar13 == 0x20) {
                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */
          std::string::append((string *)local_40,uVar15 - uVar5,param_5);
          uVar5 = uVar15;
        }
        else {
          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);
          uVar5 = uVar15;
        }
      }
      if (local_8e == '\0') {
        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);
        local_8e = (int)uVar5 != lVar8;
      }
      param_3 = param_3 & 0xffffffffffffff00;
      if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {
        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));
      }
      if ((allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {
        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));
      }
    }
  }
LAB_004b2580:
  auVar17._9_7_ = (int7)(param_3 >> 8);
  auVar17[8] = local_8e;
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar17._0_8_ = param_2;
  return auVar17;
}



undefined1  [16]
FUN_004b24a0(undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,
            undefined8 *param_6)

{
  long *plVar1;
  char cVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  byte *pbVar8;
  long lVar9;
  long lVar10;
  undefined8 *puVar11;
  bool bVar12;
  undefined1 **ppuVar13;
  ulong uVar14;
  ulong uVar15;
  uint uVar16;
  byte *pbVar17;
  byte *pbVar18;
  undefined1 auVar19 [16];
  char local_8e;
  char *local_88;
  ulong local_80;
  undefined1 local_4d;
  undefined1 local_4c [4];
  undefined1 *local_48;
  undefined1 *local_40 [2];
  
  local_8e = (char)param_3;
  lVar6 = FUN_004afd30(param_4 + 0xd0);
  lVar7 = FUN_004a0a70(&DAT_00689d70);
  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8);
  lVar10 = *plVar1;
  if (lVar10 == 0) {
                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */
    puVar11 = (undefined8 *)FUN_0049cb60(0x70);
    *(undefined4 *)(puVar11 + 1) = 0;
    puVar11[2] = 0;
    puVar11[3] = 0;
    *(undefined1 *)((long)puVar11 + 0x22) = 0;
    *puVar11 = &PTR_FUN_00677260;
    *(undefined2 *)(puVar11 + 4) = 0;
    puVar11[5] = 0;
    puVar11[6] = 0;
    puVar11[7] = 0;
    puVar11[8] = 0;
    puVar11[9] = 0;
    puVar11[10] = 0;
    puVar11[0xb] = 0;
    *(undefined4 *)(puVar11 + 0xc) = 0;
    *(undefined1 *)((long)puVar11 + 0x6f) = 0;
                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */
    FUN_004b0f50(puVar11,param_4 + 0xd0);
    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);
    lVar10 = *plVar1;
  }
  pbVar18 = (byte *)*param_6;
  pbVar17 = pbVar18 + -0x18;
  if (*pbVar18 == *(byte *)(lVar10 + 100)) {
    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);
    if (*(long *)pbVar17 == 0) goto LAB_004b2580;
    local_88 = *(char **)(lVar10 + 0x48);
    uVar14 = *(ulong *)(lVar10 + 0x50);
    pbVar18 = pbVar18 + 1;
  }
  else {
    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);
    uVar14 = *(ulong *)(lVar10 + 0x40);
    local_88 = *(char **)(lVar10 + 0x38);
  }
  pbVar17 = pbVar18 + *(long *)pbVar17;
  if ((pbVar18 < pbVar17) &&
     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)) {
    do {
      pbVar8 = pbVar8 + 1;
      if (pbVar17 == pbVar8) {
        lVar6 = (long)pbVar17 - (long)pbVar18;
        goto joined_r0x004b257e;
      }
    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);
    lVar6 = (long)pbVar8 - (long)pbVar18;
joined_r0x004b257e:
    if (lVar6 != 0) {
      local_48 = &DAT_00689d98;
                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */
      FUN_004d1e60(&local_48,lVar6 * 2);
      iVar5 = *(int *)(lVar10 + 0x58);
      lVar7 = lVar6 - iVar5;
      if (0 < lVar7) {
        if (iVar5 < 0) {
          lVar7 = lVar6;
        }
        if (*(long *)(lVar10 + 0x18) == 0) {
                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */
          FUN_004d19a0(&local_48,pbVar18,lVar7);
        }
        else {
          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);
          uVar3 = *(undefined8 *)(lVar10 + 0x18);
          uVar4 = *(undefined8 *)(lVar10 + 0x10);
          cVar2 = *(char *)(lVar10 + 0x22);
          FUN_004d1500(&local_48);
          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);
          FUN_004d1500(&local_48);
          uVar15 = lVar9 - (long)local_48;
          if (*(ulong *)(local_48 + -0x18) < uVar15) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */
            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",
                         "basic_string::erase",uVar15);
          }
          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);
        }
        iVar5 = *(int *)(lVar10 + 0x58);
      }
      if (0 < iVar5) {
                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */
        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));
        if (lVar7 < 0) {
          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));
          FUN_004d20c0(&local_48,pbVar18,lVar6);
        }
        else {
          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));
        }
      }
      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;
      local_80 = *(long *)(local_48 + -0x18) + uVar14;
      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {
        local_80 = local_80 + *(long *)(lVar10 + 0x30);
      }
      local_40[0] = &DAT_00689d98;
                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */
      FUN_004d1e60(local_40,local_80 * 2);
      uVar15 = *(ulong *)(param_4 + 0x10);
      ppuVar13 = (undefined1 **)local_4c;
      bVar12 = uVar16 == 0x10 && local_80 < uVar15;
      do {
        switch(*(undefined1 *)ppuVar13) {
        case 0:
          if (bVar12) {
LAB_004b27c0:
            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);
          }
          break;
        case 1:
          if (bVar12) goto LAB_004b27c0;
                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */
          FUN_004d2340(local_40,(int)param_5);
          break;
        case 2:
          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {
            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));
          }
          break;
        case 3:
          if (uVar14 != 0) {
            FUN_004d2340(local_40,(int)*local_88);
          }
          break;
        case 4:
          FUN_004d1f40(local_40,&local_48);
        }
        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);
      } while (ppuVar13 != &local_48);
      if (1 < uVar14) {
        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);
      }
      uVar14 = *(ulong *)(local_40[0] + -0x18);
      if (uVar14 < uVar15) {
        if (uVar16 == 0x20) {
                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */
          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);
          uVar14 = uVar15;
        }
        else {
          FUN_004d1770(local_40,0,0);
          uVar14 = uVar15;
        }
      }
      if (local_8e == '\0') {
        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);
        local_8e = (int)uVar14 != lVar10;
      }
      param_3 = param_3 & 0xffffffffffffff00;
      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {
        FUN_004ad930(local_40[0] + -0x18,&local_4d);
      }
      if (local_48 + -0x18 != PTR_DAT_0067bc38) {
        FUN_004ad930(local_48 + -0x18,&local_4d);
      }
    }
  }
LAB_004b2580:
  auVar19._9_7_ = (int7)(param_3 >> 8);
  auVar19[8] = local_8e;
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar19._0_8_ = param_2;
  return auVar19;
}


PUSH R15
LEA RAX,[RCX + 0xd0]
MOV R15,RCX
PUSH R14
MOV RDI,RAX
MOV R14,R9
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RDX
SUB RSP,0x88
MOV qword ptr [RSP + 0x8],RSI
MOV qword ptr [RSP + 0x18],RDX
MOV dword ptr [RSP + 0x2c],R8D
MOV byte ptr [RSP + 0x2b],R8B
MOV byte ptr [RSP + 0x2a],DL
MOV qword ptr [RSP + 0x20],RAX
CALL 0x004afd30
LEA RDI,[0x689d70]
MOV qword ptr [RSP + 0x10],RAX
CALL 0x004a0a70
MOV R13,RAX
MOV RAX,qword ptr [R15 + 0xd0]
MOV RAX,qword ptr [RAX + 0x18]
LEA R12,[RAX + R13*0x8]
MOV RBP,qword ptr [R12]
TEST RBP,RBP
JZ 0x004b2968
MOV R13,qword ptr [R14]
MOVZX EAX,byte ptr [RBP + 0x64]
MOV R12,qword ptr [R13 + -0x18]
CMP byte ptr [R13],AL
JZ 0x004b2748
MOV EAX,dword ptr [RBP + 0x5c]
MOV R14,qword ptr [RBP + 0x40]
MOV dword ptr [RSP + 0x6c],EAX
MOV RAX,qword ptr [RBP + 0x38]
MOV qword ptr [RSP + 0x30],RAX
ADD R12,R13
CMP R12,R13
JBE 0x004b2580
MOV RAX,qword ptr [RSP + 0x10]
MOV RCX,qword ptr [RAX + 0x30]
MOVZX EAX,byte ptr [R13]
TEST byte ptr [RCX + RAX*0x2 + 0x1],0x8
JZ 0x004b2580
MOV RAX,R13
JMP 0x004b2572
MOVZX EDX,byte ptr [RAX]
TEST byte ptr [RCX + RDX*0x2 + 0x1],0x8
JZ 0x004b25b0
ADD RAX,0x1
CMP R12,RAX
JNZ 0x004b2568
SUB R12,R13
JNZ 0x004b25b8
MOV BL,byte ptr [RSP + 0x2a]
MOV qword ptr [R15 + 0x10],0x0
MOV RAX,qword ptr [RSP + 0x8]
ADD RSP,0x88
MOV RDX,RBX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV R12,RAX
SUB R12,R13
JZ 0x004b2580
LEA RAX,[0x689d80]
LEA RSI,[R12 + R12*0x1]
ADD RAX,0x18
MOV qword ptr [RSP + 0x70],RAX
LEA RAX,[RSP + 0x70]
MOV RDI,RAX
MOV qword ptr [RSP + 0x10],RAX
CALL 0x004d1e60
MOVSXD RDX,dword ptr [RBP + 0x58]
MOV RBX,R12
SUB RBX,RDX
MOV RAX,RDX
TEST RBX,RBX
JLE 0x004b26a5
TEST EDX,EDX
CMOVS RBX,R12
CMP qword ptr [RBP + 0x18],0x0
JZ 0x004b2a10
MOV RAX,qword ptr [RSP + 0x70]
MOV RDI,qword ptr [RSP + 0x10]
LEA RCX,[RBX + RBX*0x1]
XOR ESI,ESI
XOR R8D,R8D
MOV RDX,qword ptr [RAX + -0x18]
CALL 0x004d1770
MOV RSI,qword ptr [RBP + 0x18]
MOV RDX,qword ptr [RBP + 0x10]
MOVSX R10D,byte ptr [RBP + 0x22]
MOV RDI,qword ptr [RSP + 0x10]
MOV qword ptr [RSP + 0x20],RSI
MOV qword ptr [RSP + 0x38],RDX
MOV dword ptr [RSP + 0x40],R10D
CALL 0x004d1500
MOV RCX,qword ptr [RSP + 0x20]
MOV RDX,qword ptr [RSP + 0x38]
LEA R9,[R13 + RBX*0x1]
MOV R8,R13
MOV ESI,dword ptr [RSP + 0x40]
MOV RDI,qword ptr [RSP + 0x70]
CALL 0x004b1be0
MOV RDI,qword ptr [RSP + 0x10]
MOV qword ptr [RSP + 0x20],RAX
CALL 0x004d1500
MOV RAX,qword ptr [RSP + 0x70]
MOV RSI,qword ptr [RSP + 0x20]
MOV RCX,qword ptr [RAX + -0x18]
SUB RSI,RAX
MOV RDX,RCX
SUB RDX,RSI
CMP RSI,RCX
JA 0x004b2a73
MOV RDI,qword ptr [RSP + 0x10]
XOR ECX,ECX
CALL 0x004d1290
MOV EAX,dword ptr [RBP + 0x58]
TEST EAX,EAX
JG 0x004b2920
MOV RDX,qword ptr [RSP + 0x70]
MOV EAX,dword ptr [R15 + 0x18]
MOV RSI,qword ptr [RDX + -0x18]
MOV EDI,EAX
AND EDI,0xb0
ADD RSI,R14
MOV dword ptr [RSP + 0x48],EDI
MOV qword ptr [RSP + 0x38],RSI
TEST AH,0x2
JNZ 0x004b28e8
LEA RAX,[0x689d80]
MOV RBX,qword ptr [RSP + 0x38]
ADD RAX,0x18
LEA RSI,[RBX + RBX*0x1]
MOV qword ptr [RSP + 0x78],RAX
LEA RAX,[RSP + 0x78]
MOV RDI,RAX
MOV qword ptr [RSP + 0x20],RAX
CALL 0x004d1e60
MOV RAX,qword ptr [R15 + 0x10]
CMP dword ptr [RSP + 0x48],0x10
LEA R12,[0x58b384]
SETZ DL
CMP RAX,RBX
MOV qword ptr [RSP + 0x40],RAX
LEA RBX,[RSP + 0x6c]
SETA AL
LEA R13,[RBX + 0x4]
AND EDX,EAX
MOV byte ptr [RSP + 0x4f],DL
CMP byte ptr [RBX],0x4
JA 0x004b2800
MOVZX EAX,byte ptr [RBX]
MOVSXD RAX,dword ptr [R12 + RAX*0x4]
ADD RAX,R12
JMP RAX
MOV EAX,dword ptr [RBP + 0x60]
MOV dword ptr [RSP + 0x6c],EAX
TEST R12,R12
JZ 0x004b2580
MOV RAX,qword ptr [RBP + 0x48]
MOV R14,qword ptr [RBP + 0x50]
ADD R13,0x1
MOV qword ptr [RSP + 0x30],RAX
JMP 0x004b253f
TEST R14,R14
JZ 0x004b2800
MOV RAX,qword ptr [RSP + 0x30]
MOV RDI,qword ptr [RSP + 0x20]
MOVSX ESI,byte ptr [RAX]
CALL 0x004d2340
JMP 0x004b2800
TEST byte ptr [R15 + 0x19],0x2
JZ 0x004b2800
MOV RDX,qword ptr [RBP + 0x30]
MOV RSI,qword ptr [RBP + 0x28]
MOV RDI,qword ptr [RSP + 0x20]
CALL 0x004d20c0
JMP 0x004b2800
CMP byte ptr [RSP + 0x4f],0x0
MOVSX EDX,byte ptr [RSP + 0x2b]
JZ 0x004b2950
MOV RDI,qword ptr [RSP + 0x20]
MOV RSI,qword ptr [RSP + 0x40]
SUB RSI,qword ptr [RSP + 0x38]
CALL 0x004d2230
JMP 0x004b2800
CMP byte ptr [RSP + 0x4f],0x0
JZ 0x004b2800
MOVSX EDX,byte ptr [RSP + 0x2b]
JMP 0x004b27c0
MOV RSI,qword ptr [RSP + 0x10]
MOV RDI,qword ptr [RSP + 0x20]
CALL 0x004d1f40
NOP
ADD RBX,0x1
CMP RBX,R13
JNZ 0x004b272f
CMP R14,0x1
JA 0x004b2900
MOV RSI,qword ptr [RSP + 0x78]
MOV RAX,qword ptr [RSP + 0x40]
MOV RBX,qword ptr [RSI + -0x18]
CMP RAX,RBX
JA 0x004b28b0
CMP byte ptr [RSP + 0x2a],0x0
MOVSXD RBX,EBX
JNZ 0x004b2853
MOV RDI,qword ptr [RSP + 0x8]
MOV RDX,RBX
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x60]
CMP RBX,RAX
MOV RSI,qword ptr [RSP + 0x78]
SETNZ byte ptr [RSP + 0x2a]
XOR EBX,EBX
MOV RAX,qword ptr [RSP + 0x8]
MOV BL,byte ptr [RSP + 0x2a]
LEA RDI,[RSI + -0x18]
MOV qword ptr [RSP + 0x50],RAX
MOVZX EAX,BL
MOV qword ptr [RSP + 0x58],RBX
MOV RBX,qword ptr [RSP + 0x18]
XOR BL,BL
OR RBX,RAX
CMP RDI,qword ptr [0x0067bc38]
MOV byte ptr [RSP + 0x2a],BL
JNZ 0x004b2a64
MOV RAX,qword ptr [RSP + 0x70]
LEA RDI,[RAX + -0x18]
CMP RDI,qword ptr [0x0067bc38]
JZ 0x004b2580
LEA RSI,[RSP + 0x6b]
CALL 0x004ad930
JMP 0x004b2580
SUB RAX,RBX
CMP dword ptr [RSP + 0x48],0x20
MOVSX R8D,byte ptr [RSP + 0x2c]
MOV RCX,RAX
JZ 0x004b2a4f
MOV RDI,qword ptr [RSP + 0x20]
XOR EDX,EDX
XOR ESI,ESI
CALL 0x004d1770
MOV RSI,qword ptr [RSP + 0x78]
MOV RBX,qword ptr [RSP + 0x40]
JMP 0x004b282e
MOV RAX,qword ptr [RBP + 0x30]
ADD RSI,RAX
MOV qword ptr [RSP + 0x38],RSI
JMP 0x004b26d7
MOV RSI,qword ptr [RSP + 0x30]
MOV RDI,qword ptr [RSP + 0x20]
LEA RDX,[R14 + -0x1]
ADD RSI,0x1
CALL 0x004d20c0
JMP 0x004b2817
MOVSX ESI,byte ptr [RBP + 0x21]
MOV RDI,qword ptr [RSP + 0x10]
CALL 0x004d2340
TEST RBX,RBX
JS 0x004b2a25
MOVSXD RDX,dword ptr [RBP + 0x58]
MOV RDI,qword ptr [RSP + 0x10]
LEA RSI,[R13 + RBX*0x1]
CALL 0x004d20c0
JMP 0x004b26ad
MOV RDI,qword ptr [RSP + 0x20]
MOV ESI,EDX
CALL 0x004d2340
JMP 0x004b2800
MOV EDI,0x70
CALL 0x0049cb60
MOV RBP,RAX
MOV dword ptr [RAX + 0x8],0x0
MOV RSI,qword ptr [RSP + 0x20]
LEA RAX,[0x677250]
MOV qword ptr [RBP + 0x10],0x0
MOV RDI,RBP
MOV qword ptr [RBP + 0x18],0x0
ADD RAX,0x10
MOV byte ptr [RBP + 0x22],0x0
MOV qword ptr [RBP],RAX
XOR EAX,EAX
MOV word ptr [RBP + 0x20],AX
MOV qword ptr [RBP + 0x28],0x0
MOV qword ptr [RBP + 0x30],0x0
MOV qword ptr [RBP + 0x38],0x0
MOV qword ptr [RBP + 0x40],0x0
MOV qword ptr [RBP + 0x48],0x0
MOV qword ptr [RBP + 0x50],0x0
MOV qword ptr [RBP + 0x58],0x0
MOV dword ptr [RBP + 0x60],0x0
MOV byte ptr [RBP + 0x6f],0x0
CALL 0x004b0f50
MOV RDI,qword ptr [R15 + 0xd0]
MOV RSI,RBP
MOV RDX,R13
CALL 0x004a0ee0
MOV RBP,qword ptr [R12]
JMP 0x004b2516
MOV RDI,qword ptr [RSP + 0x10]
MOV RDX,RBX
MOV RSI,R13
CALL 0x004d19a0
JMP 0x004b26a2
MOV RSI,RBX
MOV RBX,qword ptr [RSP + 0x10]
MOVSX EDX,byte ptr [RBP + 0x65]
NEG RSI
MOV RDI,RBX
CALL 0x004d2230
MOV RDX,R12
MOV RSI,R13
MOV RDI,RBX
CALL 0x004d20c0
JMP 0x004b26ad
MOV RDI,qword ptr [RSP + 0x20]
MOV EDX,R8D
MOV RSI,RAX
CALL 0x004d2230
JMP 0x004b28d5
LEA RSI,[RSP + 0x6b]
CALL 0x004ad930
JMP 0x004b288a
MOV RDX,RSI
LEA RDI,[0x56ca88]
XOR EAX,EAX
LEA RSI,[0x582c64]
CALL 0x004dcce0
(translation_unit "undefined1  [16]\nFUN_004b24a0(undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;\n  char cVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  int iVar5;\n  long lVar6;\n  long lVar7;\n  byte *pbVar8;\n  long lVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  bool bVar12;\n  undefined1 **ppuVar13;\n  ulong uVar14;\n  ulong uVar15;\n  uint uVar16;\n  byte *pbVar17;\n  byte *pbVar18;\n  undefined1 auVar19 [16];\n  char local_8e;\n  char *local_88;\n  ulong local_80;\n  undefined1 local_4d;\n  undefined1 local_4c [4];\n  undefined1 *local_48;\n  undefined1 *local_40 [2];\n  \n  local_8e = (char)param_3;\n  lVar6 = FUN_004afd30(param_4 + 0xd0);\n  lVar7 = FUN_004a0a70(&DAT_00689d70);\n  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8);\n  lVar10 = *plVar1;\n  if (lVar10 == 0) {\n                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */\n    puVar11 = (undefined8 *)FUN_0049cb60(0x70);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)((long)puVar11 + 0x22) = 0;\n    *puVar11 = &PTR_FUN_00677260;\n    *(undefined2 *)(puVar11 + 4) = 0;\n    puVar11[5] = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    *(undefined4 *)(puVar11 + 0xc) = 0;\n    *(undefined1 *)((long)puVar11 + 0x6f) = 0;\n                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */\n    FUN_004b0f50(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);\n    lVar10 = *plVar1;\n  }\n  pbVar18 = (byte *)*param_6;\n  pbVar17 = pbVar18 + -0x18;\n  if (*pbVar18 == *(byte *)(lVar10 + 100)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);\n    if (*(long *)pbVar17 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar10 + 0x48);\n    uVar14 = *(ulong *)(lVar10 + 0x50);\n    pbVar18 = pbVar18 + 1;\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }\n  pbVar17 = pbVar18 + *(long *)pbVar17;\n  if ((pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)) {\n    do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);\n    lVar6 = (long)pbVar8 - (long)pbVar18;\njoined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }\n  }\nLAB_004b2580:\n  auVar19._9_7_ = (int7)(param_3 >> 8);\n  auVar19[8] = local_8e;\n  *(undefined8 *)(param_4 + 0x10) = 0;\n  auVar19._0_8_ = param_2;\n  return auVar19;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (declaration "FUN_004b24a0(undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;" (macro_type_specifier "FUN_004b24a0(undefined8" identifier ( (type_descriptor "undefined8" type_identifier) )) identifier , (ERROR "long" identifier) (pointer_declarator "*param_2" * identifier) , (ERROR "ulong" identifier) identifier , (ERROR "long" identifier) identifier , (ERROR "char" identifier) identifier , (ERROR "undefined8 *param_6)\n\n{\n  long" identifier (pointer_declarator "*param_6" * identifier) ) { long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "undefined1 **ppuVar13;" type_identifier (pointer_declarator "**ppuVar13" * (pointer_declarator "*ppuVar13" * identifier)) ;) (declaration "ulong uVar14;" type_identifier identifier ;) (declaration "ulong uVar15;" type_identifier identifier ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "byte *pbVar17;" type_identifier (pointer_declarator "*pbVar17" * identifier) ;) (declaration "byte *pbVar18;" type_identifier (pointer_declarator "*pbVar18" * identifier) ;) (declaration "undefined1 auVar19 [16];" type_identifier (array_declarator "auVar19 [16]" identifier [ number_literal ]) ;) (declaration "char local_8e;" primitive_type identifier ;) (declaration "char *local_88;" primitive_type (pointer_declarator "*local_88" * identifier) ;) (declaration "ulong local_80;" type_identifier identifier ;) (declaration "undefined1 local_4d;" type_identifier identifier ;) (declaration "undefined1 local_4c [4];" type_identifier (array_declarator "local_4c [4]" identifier [ number_literal ]) ;) (declaration "undefined1 *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "undefined1 *local_40 [2];" type_identifier (pointer_declarator "*local_40 [2]" * (array_declarator "local_40 [2]" identifier [ number_literal ])) ;) (expression_statement "local_8e = (char)param_3;" (assignment_expression "local_8e = (char)param_3" identifier = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "lVar6 = FUN_004afd30(param_4 + 0xd0);" (assignment_expression "lVar6 = FUN_004afd30(param_4 + 0xd0)" identifier = (call_expression "FUN_004afd30(param_4 + 0xd0)" identifier (argument_list "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) ;) (expression_statement "lVar7 = FUN_004a0a70(&DAT_00689d70);" (assignment_expression "lVar7 = FUN_004a0a70(&DAT_00689d70)" identifier = (call_expression "FUN_004a0a70(&DAT_00689d70)" identifier (argument_list "(&DAT_00689d70)" ( (pointer_expression "&DAT_00689d70" & identifier) )))) ;) (expression_statement "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8);" (assignment_expression "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8)" identifier = (cast_expression "(long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8)" ( (binary_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8" (pointer_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18)" * (cast_expression "(long *)(*(long *)(param_4 + 0xd0) + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_4 + 0xd0) + 0x18)" ( (binary_expression "*(long *)(param_4 + 0xd0) + 0x18" (pointer_expression "*(long *)(param_4 + 0xd0)" * (cast_expression "(long *)(param_4 + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "lVar7 * 8" identifier * number_literal)) )))) ;) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) (if_statement "if (lVar10 == 0) {\n                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */\n    puVar11 = (undefined8 *)FUN_0049cb60(0x70);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)((long)puVar11 + 0x22) = 0;\n    *puVar11 = &PTR_FUN_00677260;\n    *(undefined2 *)(puVar11 + 4) = 0;\n    puVar11[5] = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    *(undefined4 *)(puVar11 + 0xc) = 0;\n    *(undefined1 *)((long)puVar11 + 0x6f) = 0;\n                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */\n    FUN_004b0f50(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);\n    lVar10 = *plVar1;\n  }" if (parenthesized_expression "(lVar10 == 0)" ( (binary_expression "lVar10 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */\n    puVar11 = (undefined8 *)FUN_0049cb60(0x70);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)((long)puVar11 + 0x22) = 0;\n    *puVar11 = &PTR_FUN_00677260;\n    *(undefined2 *)(puVar11 + 4) = 0;\n    puVar11[5] = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    *(undefined4 *)(puVar11 + 0xc) = 0;\n    *(undefined1 *)((long)puVar11 + 0x6f) = 0;\n                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */\n    FUN_004b0f50(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);\n    lVar10 = *plVar1;\n  }" { comment (expression_statement "puVar11 = (undefined8 *)FUN_0049cb60(0x70);" (assignment_expression "puVar11 = (undefined8 *)FUN_0049cb60(0x70)" identifier = (cast_expression "(undefined8 *)FUN_0049cb60(0x70)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0049cb60(0x70)" identifier (argument_list "(0x70)" ( number_literal ))))) ;) (expression_statement "*(undefined4 *)(puVar11 + 1) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 1) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 1)" * (cast_expression "(undefined4 *)(puVar11 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 1)" ( (binary_expression "puVar11 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "puVar11[2] = 0;" (assignment_expression "puVar11[2] = 0" (subscript_expression "puVar11[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[3] = 0;" (assignment_expression "puVar11[3] = 0" (subscript_expression "puVar11[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar11 + 0x22) = 0;" (assignment_expression "*(undefined1 *)((long)puVar11 + 0x22) = 0" (pointer_expression "*(undefined1 *)((long)puVar11 + 0x22)" * (cast_expression "(undefined1 *)((long)puVar11 + 0x22)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar11 + 0x22)" ( (binary_expression "(long)puVar11 + 0x22" (cast_expression "(long)puVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*puVar11 = &PTR_FUN_00677260;" (assignment_expression "*puVar11 = &PTR_FUN_00677260" (pointer_expression "*puVar11" * identifier) = (pointer_expression "&PTR_FUN_00677260" & identifier)) ;) (expression_statement "*(undefined2 *)(puVar11 + 4) = 0;" (assignment_expression "*(undefined2 *)(puVar11 + 4) = 0" (pointer_expression "*(undefined2 *)(puVar11 + 4)" * (cast_expression "(undefined2 *)(puVar11 + 4)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 4)" ( (binary_expression "puVar11 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "puVar11[5] = 0;" (assignment_expression "puVar11[5] = 0" (subscript_expression "puVar11[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[6] = 0;" (assignment_expression "puVar11[6] = 0" (subscript_expression "puVar11[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[7] = 0;" (assignment_expression "puVar11[7] = 0" (subscript_expression "puVar11[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[8] = 0;" (assignment_expression "puVar11[8] = 0" (subscript_expression "puVar11[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[9] = 0;" (assignment_expression "puVar11[9] = 0" (subscript_expression "puVar11[9]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[10] = 0;" (assignment_expression "puVar11[10] = 0" (subscript_expression "puVar11[10]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[0xb] = 0;" (assignment_expression "puVar11[0xb] = 0" (subscript_expression "puVar11[0xb]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined4 *)(puVar11 + 0xc) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 0xc) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 0xc)" * (cast_expression "(undefined4 *)(puVar11 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xc)" ( (binary_expression "puVar11 + 0xc" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar11 + 0x6f) = 0;" (assignment_expression "*(undefined1 *)((long)puVar11 + 0x6f) = 0" (pointer_expression "*(undefined1 *)((long)puVar11 + 0x6f)" * (cast_expression "(undefined1 *)((long)puVar11 + 0x6f)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar11 + 0x6f)" ( (binary_expression "(long)puVar11 + 0x6f" (cast_expression "(long)puVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) comment (expression_statement "FUN_004b0f50(puVar11,param_4 + 0xd0);" (call_expression "FUN_004b0f50(puVar11,param_4 + 0xd0)" identifier (argument_list "(puVar11,param_4 + 0xd0)" ( identifier , (binary_expression "param_4 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);" (call_expression "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7)" identifier (argument_list "(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7)" ( (pointer_expression "*(undefined8 *)(param_4 + 0xd0)" * (cast_expression "(undefined8 *)(param_4 + 0xd0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) , identifier , identifier ))) ;) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) })) (expression_statement "pbVar18 = (byte *)*param_6;" (assignment_expression "pbVar18 = (byte *)*param_6" identifier = (cast_expression "(byte *)*param_6" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_6" * identifier))) ;) (expression_statement "pbVar17 = pbVar18 + -0x18;" (assignment_expression "pbVar17 = pbVar18 + -0x18" identifier = (binary_expression "pbVar18 + -0x18" identifier + number_literal)) ;) (if_statement "if (*pbVar18 == *(byte *)(lVar10 + 100)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);\n    if (*(long *)pbVar17 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar10 + 0x48);\n    uVar14 = *(ulong *)(lVar10 + 0x50);\n    pbVar18 = pbVar18 + 1;\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }" if (parenthesized_expression "(*pbVar18 == *(byte *)(lVar10 + 100))" ( (binary_expression "*pbVar18 == *(byte *)(lVar10 + 100)" (pointer_expression "*pbVar18" * identifier) == (pointer_expression "*(byte *)(lVar10 + 100)" * (cast_expression "(byte *)(lVar10 + 100)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 100)" ( (binary_expression "lVar10 + 100" identifier + number_literal) ))))) )) (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);\n    if (*(long *)pbVar17 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar10 + 0x48);\n    uVar14 = *(ulong *)(lVar10 + 0x50);\n    pbVar18 = pbVar18 + 1;\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 0x60)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar10 + 0x60)" * (cast_expression "(undefined1 (*) [4])(lVar10 + 0x60)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar10 + 0x60)" ( (binary_expression "lVar10 + 0x60" identifier + number_literal) ))))) ;) (if_statement "if (*(long *)pbVar17 == 0) goto LAB_004b2580;" if (parenthesized_expression "(*(long *)pbVar17 == 0)" ( (binary_expression "*(long *)pbVar17 == 0" (pointer_expression "*(long *)pbVar17" * (cast_expression "(long *)pbVar17" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) == number_literal) )) (goto_statement "goto LAB_004b2580;" goto statement_identifier ;)) (expression_statement "local_88 = *(char **)(lVar10 + 0x48);" (assignment_expression "local_88 = *(char **)(lVar10 + 0x48)" identifier = (pointer_expression "*(char **)(lVar10 + 0x48)" * (cast_expression "(char **)(lVar10 + 0x48)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar10 + 0x48)" ( (binary_expression "lVar10 + 0x48" identifier + number_literal) ))))) ;) (expression_statement "uVar14 = *(ulong *)(lVar10 + 0x50);" (assignment_expression "uVar14 = *(ulong *)(lVar10 + 0x50)" identifier = (pointer_expression "*(ulong *)(lVar10 + 0x50)" * (cast_expression "(ulong *)(lVar10 + 0x50)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x50)" ( (binary_expression "lVar10 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "pbVar18 = pbVar18 + 1;" (assignment_expression "pbVar18 = pbVar18 + 1" identifier = (binary_expression "pbVar18 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }" else (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar10 + 0x5c)" * (cast_expression "(undefined1 (*) [4])(lVar10 + 0x5c)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar10 + 0x5c)" ( (binary_expression "lVar10 + 0x5c" identifier + number_literal) ))))) ;) (expression_statement "uVar14 = *(ulong *)(lVar10 + 0x40);" (assignment_expression "uVar14 = *(ulong *)(lVar10 + 0x40)" identifier = (pointer_expression "*(ulong *)(lVar10 + 0x40)" * (cast_expression "(ulong *)(lVar10 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x40)" ( (binary_expression "lVar10 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "local_88 = *(char **)(lVar10 + 0x38);" (assignment_expression "local_88 = *(char **)(lVar10 + 0x38)" identifier = (pointer_expression "*(char **)(lVar10 + 0x38)" * (cast_expression "(char **)(lVar10 + 0x38)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar10 + 0x38)" ( (binary_expression "lVar10 + 0x38" identifier + number_literal) ))))) ;) }))) (expression_statement "pbVar17 = pbVar18 + *(long *)pbVar17;" (assignment_expression "pbVar17 = pbVar18 + *(long *)pbVar17" identifier = (binary_expression "pbVar18 + *(long *)pbVar17" identifier + (pointer_expression "*(long *)pbVar17" * (cast_expression "(long *)pbVar17" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (if_statement "if ((pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)) {\n    do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);\n    lVar6 = (long)pbVar8 - (long)pbVar18;\njoined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }\n  }" if (parenthesized_expression "((pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0))" ( (binary_expression "(pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)" (parenthesized_expression "(pbVar18 < pbVar17)" ( (binary_expression "pbVar18 < pbVar17" identifier < identifier) )) && (parenthesized_expression "(pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)" ( (comma_expression "pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0" (assignment_expression "pbVar8 = pbVar18" identifier = identifier) , (binary_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0" (parenthesized_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8)" ( (binary_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8" (pointer_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2)" * (cast_expression "(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2)" ( (binary_expression "*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2" (binary_expression "*(long *)(lVar6 + 0x30) + 1" (pointer_expression "*(long *)(lVar6 + 0x30)" * (cast_expression "(long *)(lVar6 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + 0x30)" ( (binary_expression "lVar6 + 0x30" identifier + number_literal) )))) + number_literal) + (binary_expression "(ulong)*pbVar18 * 2" (binary_expression "(ulong)*pbVar18" (parenthesized_expression "(ulong)" ( identifier )) * identifier) * number_literal)) )))) & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n    do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);\n    lVar6 = (long)pbVar8 - (long)pbVar18;\njoined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }\n  }" { (do_statement "do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);" do (compound_statement "{\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    }" { (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) (if_statement "if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }" if (parenthesized_expression "(pbVar17 == pbVar8)" ( (binary_expression "pbVar17 == pbVar8" identifier == identifier) )) (compound_statement "{\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }" { (expression_statement "lVar6 = (long)pbVar17 - (long)pbVar18;" (assignment_expression "lVar6 = (long)pbVar17 - (long)pbVar18" identifier = (binary_expression "(long)pbVar17 - (long)pbVar18" (cast_expression "(long)pbVar17" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pbVar18" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (goto_statement "goto joined_r0x004b257e;" goto statement_identifier ;) })) }) while (parenthesized_expression "((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0)" ( (binary_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0" (parenthesized_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8)" ( (binary_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8" (pointer_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2)" * (cast_expression "(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2)" ( (binary_expression "*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2" (binary_expression "*(long *)(lVar6 + 0x30) + 1" (pointer_expression "*(long *)(lVar6 + 0x30)" * (cast_expression "(long *)(lVar6 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + 0x30)" ( (binary_expression "lVar6 + 0x30" identifier + number_literal) )))) + number_literal) + (binary_expression "(ulong)*pbVar8 * 2" (binary_expression "(ulong)*pbVar8" (parenthesized_expression "(ulong)" ( identifier )) * identifier) * number_literal)) )))) & number_literal) )) != number_literal) )) ;) (expression_statement "lVar6 = (long)pbVar8 - (long)pbVar18;" (assignment_expression "lVar6 = (long)pbVar8 - (long)pbVar18" identifier = (binary_expression "(long)pbVar8 - (long)pbVar18" (cast_expression "(long)pbVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pbVar18" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (labeled_statement "joined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }" statement_identifier : (if_statement "if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }" if (parenthesized_expression "(lVar6 != 0)" ( (binary_expression "lVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }" { (expression_statement "local_48 = &DAT_00689d98;" (assignment_expression "local_48 = &DAT_00689d98" identifier = (pointer_expression "&DAT_00689d98" & identifier)) ;) comment (expression_statement "FUN_004d1e60(&local_48,lVar6 * 2);" (call_expression "FUN_004d1e60(&local_48,lVar6 * 2)" identifier (argument_list "(&local_48,lVar6 * 2)" ( (pointer_expression "&local_48" & identifier) , (binary_expression "lVar6 * 2" identifier * number_literal) ))) ;) (expression_statement "iVar5 = *(int *)(lVar10 + 0x58);" (assignment_expression "iVar5 = *(int *)(lVar10 + 0x58)" identifier = (pointer_expression "*(int *)(lVar10 + 0x58)" * (cast_expression "(int *)(lVar10 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x58)" ( (binary_expression "lVar10 + 0x58" identifier + number_literal) ))))) ;) (expression_statement "lVar7 = lVar6 - iVar5;" (assignment_expression "lVar7 = lVar6 - iVar5" identifier = (binary_expression "lVar6 - iVar5" identifier - identifier)) ;) (if_statement "if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }" if (parenthesized_expression "(0 < lVar7)" ( (binary_expression "0 < lVar7" number_literal < identifier) )) (compound_statement "{\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }" { (if_statement "if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }" if (parenthesized_expression "(iVar5 < 0)" ( (binary_expression "iVar5 < 0" identifier < number_literal) )) (compound_statement "{\n          lVar7 = lVar6;\n        }" { (expression_statement "lVar7 = lVar6;" (assignment_expression "lVar7 = lVar6" identifier = identifier) ;) })) (if_statement "if (*(long *)(lVar10 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }" if (parenthesized_expression "(*(long *)(lVar10 + 0x18) == 0)" ( (binary_expression "*(long *)(lVar10 + 0x18) == 0" (pointer_expression "*(long *)(lVar10 + 0x18)" * (cast_expression "(long *)(lVar10 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x18)" ( (binary_expression "lVar10 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }" { comment (expression_statement "FUN_004d19a0(&local_48,pbVar18,lVar7);" (call_expression "FUN_004d19a0(&local_48,pbVar18,lVar7)" identifier (argument_list "(&local_48,pbVar18,lVar7)" ( (pointer_expression "&local_48" & identifier) , identifier , identifier ))) ;) }) (else_clause "else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }" else (compound_statement "{\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }" { (expression_statement "FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);" (call_expression "FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0)" identifier (argument_list "(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0)" ( (pointer_expression "&local_48" & identifier) , number_literal , (pointer_expression "*(undefined8 *)(local_48 + -0x18)" * (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) )))) , (binary_expression "lVar7 * 2" identifier * number_literal) , number_literal ))) ;) (expression_statement "uVar3 = *(undefined8 *)(lVar10 + 0x18);" (assignment_expression "uVar3 = *(undefined8 *)(lVar10 + 0x18)" identifier = (pointer_expression "*(undefined8 *)(lVar10 + 0x18)" * (cast_expression "(undefined8 *)(lVar10 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x18)" ( (binary_expression "lVar10 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(undefined8 *)(lVar10 + 0x10);" (assignment_expression "uVar4 = *(undefined8 *)(lVar10 + 0x10)" identifier = (pointer_expression "*(undefined8 *)(lVar10 + 0x10)" * (cast_expression "(undefined8 *)(lVar10 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x10)" ( (binary_expression "lVar10 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "cVar2 = *(char *)(lVar10 + 0x22);" (assignment_expression "cVar2 = *(char *)(lVar10 + 0x22)" identifier = (pointer_expression "*(char *)(lVar10 + 0x22)" * (cast_expression "(char *)(lVar10 + 0x22)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x22)" ( (binary_expression "lVar10 + 0x22" identifier + number_literal) ))))) ;) (expression_statement "FUN_004d1500(&local_48);" (call_expression "FUN_004d1500(&local_48)" identifier (argument_list "(&local_48)" ( (pointer_expression "&local_48" & identifier) ))) ;) (expression_statement "lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);" (assignment_expression "lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7)" identifier = (call_expression "FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7)" identifier (argument_list "(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7)" ( identifier , (cast_expression "(int)cVar2" ( (type_descriptor "int" primitive_type) ) identifier) , identifier , identifier , identifier , (binary_expression "pbVar18 + lVar7" identifier + identifier) )))) ;) (expression_statement "FUN_004d1500(&local_48);" (call_expression "FUN_004d1500(&local_48)" identifier (argument_list "(&local_48)" ( (pointer_expression "&local_48" & identifier) ))) ;) (expression_statement "uVar15 = lVar9 - (long)local_48;" (assignment_expression "uVar15 = lVar9 - (long)local_48" identifier = (binary_expression "lVar9 - (long)local_48" identifier - (cast_expression "(long)local_48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }" if (parenthesized_expression "(*(ulong *)(local_48 + -0x18) < uVar15)" ( (binary_expression "*(ulong *)(local_48 + -0x18) < uVar15" (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) )))) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }" { comment comment (expression_statement "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);" (call_expression "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15)" identifier (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15)" ( (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" " string_content ") , (string_literal ""basic_string::erase"" " string_content ") , identifier ))) ;) })) (expression_statement "FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);" (call_expression "FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0)" identifier (argument_list "(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0)" ( (pointer_expression "&local_48" & identifier) , identifier , (binary_expression "*(ulong *)(local_48 + -0x18) - uVar15" (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) )))) - identifier) , number_literal ))) ;) }))) (expression_statement "iVar5 = *(int *)(lVar10 + 0x58);" (assignment_expression "iVar5 = *(int *)(lVar10 + 0x58)" identifier = (pointer_expression "*(int *)(lVar10 + 0x58)" * (cast_expression "(int *)(lVar10 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x58)" ( (binary_expression "lVar10 + 0x58" identifier + number_literal) ))))) ;) })) (if_statement "if (0 < iVar5) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }" if (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) (compound_statement "{\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }" { comment (expression_statement "FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));" (call_expression "FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21))" identifier (argument_list "(&local_48,(int)*(char *)(lVar10 + 0x21))" ( (pointer_expression "&local_48" & identifier) , (cast_expression "(int)*(char *)(lVar10 + 0x21)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(char *)(lVar10 + 0x21)" * (cast_expression "(char *)(lVar10 + 0x21)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x21)" ( (binary_expression "lVar10 + 0x21" identifier + number_literal) ))))) ))) ;) (if_statement "if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }" if (parenthesized_expression "(lVar7 < 0)" ( (binary_expression "lVar7 < 0" identifier < number_literal) )) (compound_statement "{\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }" { (expression_statement "FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));" (call_expression "FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65))" identifier (argument_list "(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65))" ( (pointer_expression "&local_48" & identifier) , (unary_expression "-lVar7" - identifier) , (cast_expression "(int)*(char *)(lVar10 + 0x65)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(char *)(lVar10 + 0x65)" * (cast_expression "(char *)(lVar10 + 0x65)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x65)" ( (binary_expression "lVar10 + 0x65" identifier + number_literal) ))))) ))) ;) (expression_statement "FUN_004d20c0(&local_48,pbVar18,lVar6);" (call_expression "FUN_004d20c0(&local_48,pbVar18,lVar6)" identifier (argument_list "(&local_48,pbVar18,lVar6)" ( (pointer_expression "&local_48" & identifier) , identifier , identifier ))) ;) }) (else_clause "else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }" else (compound_statement "{\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }" { (expression_statement "FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));" (call_expression "FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58))" identifier (argument_list "(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58))" ( (pointer_expression "&local_48" & identifier) , (binary_expression "pbVar18 + lVar7" identifier + identifier) , (cast_expression "(long)*(int *)(lVar10 + 0x58)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(lVar10 + 0x58)" * (cast_expression "(int *)(lVar10 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x58)" ( (binary_expression "lVar10 + 0x58" identifier + number_literal) ))))) ))) ;) }))) })) (expression_statement "uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;" (assignment_expression "uVar16 = *(uint *)(param_4 + 0x18) & 0xb0" identifier = (binary_expression "*(uint *)(param_4 + 0x18) & 0xb0" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "local_80 = *(long *)(local_48 + -0x18) + uVar14;" (assignment_expression "local_80 = *(long *)(local_48 + -0x18) + uVar14" identifier = (binary_expression "*(long *)(local_48 + -0x18) + uVar14" (pointer_expression "*(long *)(local_48 + -0x18)" * (cast_expression "(long *)(local_48 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) + identifier)) ;) (if_statement "if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }" if (parenthesized_expression "((*(uint *)(param_4 + 0x18) & 0x200) != 0)" ( (binary_expression "(*(uint *)(param_4 + 0x18) & 0x200) != 0" (parenthesized_expression "(*(uint *)(param_4 + 0x18) & 0x200)" ( (binary_expression "*(uint *)(param_4 + 0x18) & 0x200" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }" { (expression_statement "local_80 = local_80 + *(long *)(lVar10 + 0x30);" (assignment_expression "local_80 = local_80 + *(long *)(lVar10 + 0x30)" identifier = (binary_expression "local_80 + *(long *)(lVar10 + 0x30)" identifier + (pointer_expression "*(long *)(lVar10 + 0x30)" * (cast_expression "(long *)(lVar10 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x30)" ( (binary_expression "lVar10 + 0x30" identifier + number_literal) )))))) ;) })) (expression_statement "local_40[0] = &DAT_00689d98;" (assignment_expression "local_40[0] = &DAT_00689d98" (subscript_expression "local_40[0]" identifier [ number_literal ]) = (pointer_expression "&DAT_00689d98" & identifier)) ;) comment (expression_statement "FUN_004d1e60(local_40,local_80 * 2);" (call_expression "FUN_004d1e60(local_40,local_80 * 2)" identifier (argument_list "(local_40,local_80 * 2)" ( identifier , (binary_expression "local_80 * 2" identifier * number_literal) ))) ;) (expression_statement "uVar15 = *(ulong *)(param_4 + 0x10);" (assignment_expression "uVar15 = *(ulong *)(param_4 + 0x10)" identifier = (pointer_expression "*(ulong *)(param_4 + 0x10)" * (cast_expression "(ulong *)(param_4 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "ppuVar13 = (undefined1 **)local_4c;" (assignment_expression "ppuVar13 = (undefined1 **)local_4c" identifier = (cast_expression "(undefined1 **)local_4c" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "bVar12 = uVar16 == 0x10 && local_80 < uVar15;" (assignment_expression "bVar12 = uVar16 == 0x10 && local_80 < uVar15" identifier = (binary_expression "uVar16 == 0x10 && local_80 < uVar15" (binary_expression "uVar16 == 0x10" identifier == number_literal) && (binary_expression "local_80 < uVar15" identifier < identifier))) ;) (do_statement "do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);" do (compound_statement "{\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      }" { (switch_statement "switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }" switch (parenthesized_expression "(*(undefined1 *)ppuVar13)" ( (pointer_expression "*(undefined1 *)ppuVar13" * (cast_expression "(undefined1 *)ppuVar13" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }" { (case_statement "case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;" case number_literal : (if_statement "if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }" { (labeled_statement "LAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);" statement_identifier : (expression_statement "FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);" (call_expression "FUN_004d2230(local_40,uVar15 - local_80,(int)param_5)" identifier (argument_list "(local_40,uVar15 - local_80,(int)param_5)" ( identifier , (binary_expression "uVar15 - local_80" identifier - identifier) , (cast_expression "(int)param_5" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;)) })) (break_statement "break;" break ;)) (case_statement "case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          FUN_004d2340(local_40,(int)param_5);\n          break;" case number_literal : (if_statement "if (bVar12) goto LAB_004b27c0;" if (parenthesized_expression "(bVar12)" ( identifier )) (goto_statement "goto LAB_004b27c0;" goto statement_identifier ;)) comment (expression_statement "FUN_004d2340(local_40,(int)param_5);" (call_expression "FUN_004d2340(local_40,(int)param_5)" identifier (argument_list "(local_40,(int)param_5)" ( identifier , (cast_expression "(int)param_5" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;) (break_statement "break;" break ;)) (case_statement "case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;" case number_literal : (if_statement "if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }" if (parenthesized_expression "((*(byte *)(param_4 + 0x19) & 2) != 0)" ( (binary_expression "(*(byte *)(param_4 + 0x19) & 2) != 0" (parenthesized_expression "(*(byte *)(param_4 + 0x19) & 2)" ( (binary_expression "*(byte *)(param_4 + 0x19) & 2" (pointer_expression "*(byte *)(param_4 + 0x19)" * (cast_expression "(byte *)(param_4 + 0x19)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x19)" ( (binary_expression "param_4 + 0x19" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }" { (expression_statement "FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));" (call_expression "FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30))" identifier (argument_list "(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30))" ( identifier , (pointer_expression "*(undefined8 *)(lVar10 + 0x28)" * (cast_expression "(undefined8 *)(lVar10 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x28)" ( (binary_expression "lVar10 + 0x28" identifier + number_literal) )))) , (pointer_expression "*(undefined8 *)(lVar10 + 0x30)" * (cast_expression "(undefined8 *)(lVar10 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x30)" ( (binary_expression "lVar10 + 0x30" identifier + number_literal) )))) ))) ;) })) (break_statement "break;" break ;)) (case_statement "case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;" case number_literal : (if_statement "if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }" if (parenthesized_expression "(uVar14 != 0)" ( (binary_expression "uVar14 != 0" identifier != number_literal) )) (compound_statement "{\n            FUN_004d2340(local_40,(int)*local_88);\n          }" { (expression_statement "FUN_004d2340(local_40,(int)*local_88);" (call_expression "FUN_004d2340(local_40,(int)*local_88)" identifier (argument_list "(local_40,(int)*local_88)" ( identifier , (cast_expression "(int)*local_88" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*local_88" * identifier)) ))) ;) })) (break_statement "break;" break ;)) (case_statement "case 4:\n          FUN_004d1f40(local_40,&local_48);" case number_literal : (expression_statement "FUN_004d1f40(local_40,&local_48);" (call_expression "FUN_004d1f40(local_40,&local_48)" identifier (argument_list "(local_40,&local_48)" ( identifier , (pointer_expression "&local_48" & identifier) ))) ;)) })) (expression_statement "ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);" (assignment_expression "ppuVar13 = (undefined1 **)((long)ppuVar13 + 1)" identifier = (cast_expression "(undefined1 **)((long)ppuVar13 + 1)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)ppuVar13 + 1)" ( (binary_expression "(long)ppuVar13 + 1" (cast_expression "(long)ppuVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(ppuVar13 != &local_48)" ( (binary_expression "ppuVar13 != &local_48" identifier != (pointer_expression "&local_48" & identifier)) )) ;) (if_statement "if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }" if (parenthesized_expression "(1 < uVar14)" ( (binary_expression "1 < uVar14" number_literal < identifier) )) (compound_statement "{\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }" { (expression_statement "FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);" (call_expression "FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1)" identifier (argument_list "(local_40,local_88 + 1,uVar14 - 1)" ( identifier , (binary_expression "local_88 + 1" identifier + number_literal) , (binary_expression "uVar14 - 1" identifier - number_literal) ))) ;) })) (expression_statement "uVar14 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar14 = *(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) ))))) ;) (if_statement "if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }" if (parenthesized_expression "(uVar14 < uVar15)" ( (binary_expression "uVar14 < uVar15" identifier < identifier) )) (compound_statement "{\n        if (uVar16 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }" { (if_statement "if (uVar16 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }" if (parenthesized_expression "(uVar16 == 0x20)" ( (binary_expression "uVar16 == 0x20" identifier == number_literal) )) (compound_statement "{\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }" { comment (expression_statement "FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);" (call_expression "FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14)" identifier (argument_list "(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14)" ( identifier , (binary_expression "uVar15 - uVar14" identifier - identifier) , (cast_expression "(int)param_5" ( (type_descriptor "int" primitive_type) ) identifier) , (binary_expression "uVar15 - uVar14" identifier - identifier) ))) ;) (expression_statement "uVar14 = uVar15;" (assignment_expression "uVar14 = uVar15" identifier = identifier) ;) }) (else_clause "else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }" else (compound_statement "{\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }" { (expression_statement "FUN_004d1770(local_40,0,0);" (call_expression "FUN_004d1770(local_40,0,0)" identifier (argument_list "(local_40,0,0)" ( identifier , number_literal , number_literal ))) ;) (expression_statement "uVar14 = uVar15;" (assignment_expression "uVar14 = uVar15" identifier = identifier) ;) }))) })) (if_statement "if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }" if (parenthesized_expression "(local_8e == '\0')" ( (binary_expression "local_8e == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }" { (expression_statement "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);" (assignment_expression "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14)" identifier = (call_expression "(**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14)" (parenthesized_expression "(**(code **)(*param_2 + 0x60))" ( (pointer_expression "**(code **)(*param_2 + 0x60)" * (pointer_expression "*(code **)(*param_2 + 0x60)" * (cast_expression "(code **)(*param_2 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x60)" ( (binary_expression "*param_2 + 0x60" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,local_40[0],(long)(int)uVar14)" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) , (cast_expression "(long)(int)uVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar14" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "local_8e = (int)uVar14 != lVar10;" (assignment_expression "local_8e = (int)uVar14 != lVar10" identifier = (binary_expression "(int)uVar14 != lVar10" (cast_expression "(int)uVar14" ( (type_descriptor "int" primitive_type) ) identifier) != identifier)) ;) })) (expression_statement "param_3 = param_3 & 0xffffffffffffff00;" (assignment_expression "param_3 = param_3 & 0xffffffffffffff00" identifier = (binary_expression "param_3 & 0xffffffffffffff00" identifier & number_literal)) ;) (if_statement "if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }" if (parenthesized_expression "(local_40[0] + -0x18 != PTR_DAT_0067bc38)" ( (binary_expression "local_40[0] + -0x18 != PTR_DAT_0067bc38" (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) != identifier) )) (compound_statement "{\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }" { (expression_statement "FUN_004ad930(local_40[0] + -0x18,&local_4d);" (call_expression "FUN_004ad930(local_40[0] + -0x18,&local_4d)" identifier (argument_list "(local_40[0] + -0x18,&local_4d)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_4d" & identifier) ))) ;) })) (if_statement "if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }" if (parenthesized_expression "(local_48 + -0x18 != PTR_DAT_0067bc38)" ( (binary_expression "local_48 + -0x18 != PTR_DAT_0067bc38" (binary_expression "local_48 + -0x18" identifier + number_literal) != identifier) )) (compound_statement "{\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }" { (expression_statement "FUN_004ad930(local_48 + -0x18,&local_4d);" (call_expression "FUN_004ad930(local_48 + -0x18,&local_4d)" identifier (argument_list "(local_48 + -0x18,&local_4d)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) , (pointer_expression "&local_4d" & identifier) ))) ;) })) }))) })) (labeled_statement "LAB_004b2580:\n  auVar19._9_7_ = (int7)(param_3 >> 8);" statement_identifier : (expression_statement "auVar19._9_7_ = (int7)(param_3 >> 8);" (assignment_expression "auVar19._9_7_ = (int7)(param_3 >> 8)" (field_expression "auVar19._9_7_" identifier . field_identifier) = (call_expression "(int7)(param_3 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(param_3 >> 8)" ( (binary_expression "param_3 >> 8" identifier >> number_literal) )))) ;)) (expression_statement "auVar19[8] = local_8e;" (assignment_expression "auVar19[8] = local_8e" (subscript_expression "auVar19[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined8 *)(param_4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_4 + 0x10)" * (cast_expression "(undefined8 *)(param_4 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "auVar19._0_8_ = param_2;" (assignment_expression "auVar19._0_8_ = param_2" (field_expression "auVar19._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar19;" return identifier ;) (ERROR "}" }))
(translation_unit "/* std::ostreambuf_iterator<char, std::char_traits<char> > std::money_put<char,\n   std::ostreambuf_iterator<char, std::char_traits<char> >\n   >::_M_insert<false>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&,\n   char, std::string const&) const */\n\nundefined1  [16]\nstd::money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::_M_insert<false>\n          (undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n          undefined8 *param_6)\n\n{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  ctype *pcVar4;\n  ulong uVar5;\n  byte *pbVar6;\n  char *pcVar7;\n  long lVar8;\n  __moneypunct_cache<char,false> *this;\n  bool bVar9;\n  ulong uVar10;\n  char **ppcVar11;\n  ulong uVar12;\n  uint uVar13;\n  byte *pbVar14;\n  ulong uVar15;\n  byte *pbVar16;\n  undefined1 auVar17 [16];\n  char local_8e;\n  char *local_88;\n  ulong local_80;\n  undefined1 local_4c [4];\n  char *local_48;\n  undefined1 *local_40 [2];\n  \n  local_8e = (char)param_3;\n  pcVar4 = use_facet<std::ctype<char>>((locale *)(param_4 + 0xd0));\n  uVar5 = locale::id::_M_id((id *)&moneypunct<char,false>::id);\n  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar5 * 8);\n  lVar8 = *plVar1;\n  if (lVar8 == 0) {\n                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */\n    this = (__moneypunct_cache<char,false> *)operator_new(0x70);\n    *(undefined4 *)(this + 8) = 0;\n    *(undefined8 *)(this + 0x10) = 0;\n    *(undefined8 *)(this + 0x18) = 0;\n    this[0x22] = (__moneypunct_cache<char,false>)0x0;\n    *(undefined ***)this = &PTR____moneypunct_cache_00677260;\n    *(undefined2 *)(this + 0x20) = 0;\n    *(undefined8 *)(this + 0x28) = 0;\n    *(undefined8 *)(this + 0x30) = 0;\n    *(undefined8 *)(this + 0x38) = 0;\n    *(undefined8 *)(this + 0x40) = 0;\n    *(undefined8 *)(this + 0x48) = 0;\n    *(undefined8 *)(this + 0x50) = 0;\n    *(undefined8 *)(this + 0x58) = 0;\n    *(undefined4 *)(this + 0x60) = 0;\n    this[0x6f] = (__moneypunct_cache<char,false>)0x0;\n                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */\n    __moneypunct_cache<char,false>::_M_cache(this,(locale *)(param_4 + 0xd0));\n    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5);\n    lVar8 = *plVar1;\n  }\n  pbVar16 = (byte *)*param_6;\n  pbVar14 = pbVar16 + -0x18;\n  if (*pbVar16 == *(byte *)(lVar8 + 100)) {\n    local_4c = *(undefined1 (*) [4])(lVar8 + 0x60);\n    if (*(long *)pbVar14 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar8 + 0x48);\n    uVar5 = *(ulong *)(lVar8 + 0x50);\n    pbVar16 = pbVar16 + 1;\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar8 + 0x5c);\n    uVar5 = *(ulong *)(lVar8 + 0x40);\n    local_88 = *(char **)(lVar8 + 0x38);\n  }\n  pbVar14 = pbVar16 + *(long *)pbVar14;\n  if ((pbVar16 < pbVar14) &&\n     (pbVar6 = pbVar16, (*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8) != 0)) {\n    do {\n      pbVar6 = pbVar6 + 1;\n      if (pbVar14 == pbVar6) {\n        uVar15 = (long)pbVar14 - (long)pbVar16;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8) != 0);\n    uVar15 = (long)pbVar6 - (long)pbVar16;\njoined_r0x004b257e:\n    if (uVar15 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      std::string::reserve((string *)&local_48,uVar15 * 2);\n      iVar3 = *(int *)(lVar8 + 0x58);\n      uVar10 = uVar15 - (long)iVar3;\n      if (0 < (long)uVar10) {\n        if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }\n        if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }\n        iVar3 = *(int *)(lVar8 + 0x58);\n      }\n      if (0 < iVar3) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));\n        if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }\n      }\n      uVar13 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar5;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar8 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      std::string::reserve((string *)local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppcVar11 = (char **)local_4c;\n      bVar9 = uVar13 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }\n        ppcVar11 = (char **)((long)ppcVar11 + 1);\n      } while (ppcVar11 != &local_48);\n      if (1 < uVar5) {\n        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);\n      }\n      uVar5 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar5 < uVar15) {\n        if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);\n        local_8e = (int)uVar5 != lVar8;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n      }\n      if ((allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n      }\n    }\n  }\nLAB_004b2580:\n  auVar17._9_7_ = (int7)(param_3 >> 8);\n  auVar17[8] = local_8e;\n  *(undefined8 *)(param_4 + 0x10) = 0;\n  auVar17._0_8_ = param_2;\n  return auVar17;\n}\n\n" comment (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (labeled_statement "std::money_put<char,std::ostreambuf_iterator<char,std::char_traits<char>>>::_M_insert<false>\n          (undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n          undefined8 *param_6)" statement_identifier (ERROR "::money_put<char,std::ostreambuf_iterator<char,std:" : : (comma_expression "money_put<char,std" (binary_expression "money_put<char" identifier < identifier) , identifier) : : (comma_expression "ostreambuf_iterator<char,std" (binary_expression "ostreambuf_iterator<char" identifier < identifier) , identifier) :) : (expression_statement "char_traits<char>>>::_M_insert<false>\n          (undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n          undefined8 *param_6)" (binary_expression "char_traits<char>>>::_M_insert<false>\n          (undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n          undefined8 *param_6)" (binary_expression "char_traits<char>>>::_M_insert<false" (binary_expression "char_traits<char>>>::_M_insert" identifier < (binary_expression "char>>>::_M_insert" identifier >> (ERROR ">::" > : :) identifier)) < false) > (parenthesized_expression "(undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n          undefined8 *param_6)" ( (comma_expression "undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n          undefined8 *param_6" identifier (ERROR "param_1" identifier) , (comma_expression "long *param_2,ulong param_3,long param_4,char param_5,\n          undefined8 *param_6" (binary_expression "long *param_2" identifier * identifier) , (ERROR "ulong" identifier) (comma_expression "param_3,long param_4,char param_5,\n          undefined8 *param_6" identifier , (ERROR "long" identifier) (comma_expression "param_4,char param_5,\n          undefined8 *param_6" identifier , (ERROR "char" identifier) (comma_expression "param_5,\n          undefined8 *param_6" identifier , (binary_expression "undefined8 *param_6" identifier * identifier)))))) ))) ;)) (compound_statement "{\n  long *plVar1;\n  char cVar2;\n  int iVar3;\n  ctype *pcVar4;\n  ulong uVar5;\n  byte *pbVar6;\n  char *pcVar7;\n  long lVar8;\n  __moneypunct_cache<char,false> *this;\n  bool bVar9;\n  ulong uVar10;\n  char **ppcVar11;\n  ulong uVar12;\n  uint uVar13;\n  byte *pbVar14;\n  ulong uVar15;\n  byte *pbVar16;\n  undefined1 auVar17 [16];\n  char local_8e;\n  char *local_88;\n  ulong local_80;\n  undefined1 local_4c [4];\n  char *local_48;\n  undefined1 *local_40 [2];\n  \n  local_8e = (char)param_3;\n  pcVar4 = use_facet<std::ctype<char>>((locale *)(param_4 + 0xd0));\n  uVar5 = locale::id::_M_id((id *)&moneypunct<char,false>::id);\n  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar5 * 8);\n  lVar8 = *plVar1;\n  if (lVar8 == 0) {\n                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */\n    this = (__moneypunct_cache<char,false> *)operator_new(0x70);\n    *(undefined4 *)(this + 8) = 0;\n    *(undefined8 *)(this + 0x10) = 0;\n    *(undefined8 *)(this + 0x18) = 0;\n    this[0x22] = (__moneypunct_cache<char,false>)0x0;\n    *(undefined ***)this = &PTR____moneypunct_cache_00677260;\n    *(undefined2 *)(this + 0x20) = 0;\n    *(undefined8 *)(this + 0x28) = 0;\n    *(undefined8 *)(this + 0x30) = 0;\n    *(undefined8 *)(this + 0x38) = 0;\n    *(undefined8 *)(this + 0x40) = 0;\n    *(undefined8 *)(this + 0x48) = 0;\n    *(undefined8 *)(this + 0x50) = 0;\n    *(undefined8 *)(this + 0x58) = 0;\n    *(undefined4 *)(this + 0x60) = 0;\n    this[0x6f] = (__moneypunct_cache<char,false>)0x0;\n                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */\n    __moneypunct_cache<char,false>::_M_cache(this,(locale *)(param_4 + 0xd0));\n    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5);\n    lVar8 = *plVar1;\n  }\n  pbVar16 = (byte *)*param_6;\n  pbVar14 = pbVar16 + -0x18;\n  if (*pbVar16 == *(byte *)(lVar8 + 100)) {\n    local_4c = *(undefined1 (*) [4])(lVar8 + 0x60);\n    if (*(long *)pbVar14 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar8 + 0x48);\n    uVar5 = *(ulong *)(lVar8 + 0x50);\n    pbVar16 = pbVar16 + 1;\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar8 + 0x5c);\n    uVar5 = *(ulong *)(lVar8 + 0x40);\n    local_88 = *(char **)(lVar8 + 0x38);\n  }\n  pbVar14 = pbVar16 + *(long *)pbVar14;\n  if ((pbVar16 < pbVar14) &&\n     (pbVar6 = pbVar16, (*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8) != 0)) {\n    do {\n      pbVar6 = pbVar6 + 1;\n      if (pbVar14 == pbVar6) {\n        uVar15 = (long)pbVar14 - (long)pbVar16;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8) != 0);\n    uVar15 = (long)pbVar6 - (long)pbVar16;\njoined_r0x004b257e:\n    if (uVar15 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      std::string::reserve((string *)&local_48,uVar15 * 2);\n      iVar3 = *(int *)(lVar8 + 0x58);\n      uVar10 = uVar15 - (long)iVar3;\n      if (0 < (long)uVar10) {\n        if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }\n        if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }\n        iVar3 = *(int *)(lVar8 + 0x58);\n      }\n      if (0 < iVar3) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));\n        if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }\n      }\n      uVar13 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar5;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar8 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      std::string::reserve((string *)local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppcVar11 = (char **)local_4c;\n      bVar9 = uVar13 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }\n        ppcVar11 = (char **)((long)ppcVar11 + 1);\n      } while (ppcVar11 != &local_48);\n      if (1 < uVar5) {\n        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);\n      }\n      uVar5 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar5 < uVar15) {\n        if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);\n        local_8e = (int)uVar5 != lVar8;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n      }\n      if ((allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n      }\n    }\n  }\nLAB_004b2580:\n  auVar17._9_7_ = (int7)(param_3 >> 8);\n  auVar17[8] = local_8e;\n  *(undefined8 *)(param_4 + 0x10) = 0;\n  auVar17._0_8_ = param_2;\n  return auVar17;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ctype *pcVar4;" type_identifier (pointer_declarator "*pcVar4" * identifier) ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "char *pcVar7;" primitive_type (pointer_declarator "*pcVar7" * identifier) ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (expression_statement "__moneypunct_cache<char,false> *this;" (comma_expression "__moneypunct_cache<char,false> *this" (binary_expression "__moneypunct_cache<char" identifier < identifier) , (binary_expression "false> *this" false > (pointer_expression "*this" * identifier))) ;) (declaration "bool bVar9;" primitive_type identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "char **ppcVar11;" primitive_type (pointer_declarator "**ppcVar11" * (pointer_declarator "*ppcVar11" * identifier)) ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "byte *pbVar14;" type_identifier (pointer_declarator "*pbVar14" * identifier) ;) (declaration "ulong uVar15;" type_identifier identifier ;) (declaration "byte *pbVar16;" type_identifier (pointer_declarator "*pbVar16" * identifier) ;) (declaration "undefined1 auVar17 [16];" type_identifier (array_declarator "auVar17 [16]" identifier [ number_literal ]) ;) (declaration "char local_8e;" primitive_type identifier ;) (declaration "char *local_88;" primitive_type (pointer_declarator "*local_88" * identifier) ;) (declaration "ulong local_80;" type_identifier identifier ;) (declaration "undefined1 local_4c [4];" type_identifier (array_declarator "local_4c [4]" identifier [ number_literal ]) ;) (declaration "char *local_48;" primitive_type (pointer_declarator "*local_48" * identifier) ;) (declaration "undefined1 *local_40 [2];" type_identifier (pointer_declarator "*local_40 [2]" * (array_declarator "local_40 [2]" identifier [ number_literal ])) ;) (expression_statement "local_8e = (char)param_3;" (assignment_expression "local_8e = (char)param_3" identifier = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "pcVar4 = use_facet<std::ctype<char>>((locale *)(param_4 + 0xd0));" (binary_expression "pcVar4 = use_facet<std::ctype<char>>((locale *)(param_4 + 0xd0))" (assignment_expression "pcVar4 = use_facet<std" identifier = (binary_expression "use_facet<std" identifier < identifier)) (ERROR "::ctype" : : identifier) < (binary_expression "char>>((locale *)(param_4 + 0xd0))" identifier >> (parenthesized_expression "((locale *)(param_4 + 0xd0))" ( (cast_expression "(locale *)(param_4 + 0xd0)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) ))) )))) ;) (ERROR "uVar5 = locale::" (assignment_expression "uVar5 = locale" identifier = identifier) : :) (labeled_statement "id::_M_id((id *)&moneypunct<char,false>::id);" statement_identifier : (ERROR ":" :) (expression_statement "_M_id((id *)&moneypunct<char,false>::id);" (call_expression "_M_id((id *)&moneypunct<char,false>::id)" identifier (argument_list "((id *)&moneypunct<char,false>::id)" ( (binary_expression "(id *)&moneypunct<char" (cast_expression "(id *)&moneypunct" ( (type_descriptor "id *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&moneypunct" & identifier)) < identifier) , (binary_expression "false>::id" false > (ERROR "::" : :) identifier) ))) ;)) (expression_statement "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar5 * 8);" (assignment_expression "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar5 * 8)" identifier = (cast_expression "(long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar5 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar5 * 8)" ( (binary_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + uVar5 * 8" (pointer_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18)" * (cast_expression "(long *)(*(long *)(param_4 + 0xd0) + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_4 + 0xd0) + 0x18)" ( (binary_expression "*(long *)(param_4 + 0xd0) + 0x18" (pointer_expression "*(long *)(param_4 + 0xd0)" * (cast_expression "(long *)(param_4 + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "uVar5 * 8" identifier * number_literal)) )))) ;) (expression_statement "lVar8 = *plVar1;" (assignment_expression "lVar8 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) (if_statement "if (lVar8 == 0) {\n                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */\n    this = (__moneypunct_cache<char,false> *)operator_new(0x70);\n    *(undefined4 *)(this + 8) = 0;\n    *(undefined8 *)(this + 0x10) = 0;\n    *(undefined8 *)(this + 0x18) = 0;\n    this[0x22] = (__moneypunct_cache<char,false>)0x0;\n    *(undefined ***)this = &PTR____moneypunct_cache_00677260;\n    *(undefined2 *)(this + 0x20) = 0;\n    *(undefined8 *)(this + 0x28) = 0;\n    *(undefined8 *)(this + 0x30) = 0;\n    *(undefined8 *)(this + 0x38) = 0;\n    *(undefined8 *)(this + 0x40) = 0;\n    *(undefined8 *)(this + 0x48) = 0;\n    *(undefined8 *)(this + 0x50) = 0;\n    *(undefined8 *)(this + 0x58) = 0;\n    *(undefined4 *)(this + 0x60) = 0;\n    this[0x6f] = (__moneypunct_cache<char,false>)0x0;\n                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */\n    __moneypunct_cache<char,false>::_M_cache(this,(locale *)(param_4 + 0xd0));\n    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5);\n    lVar8 = *plVar1;\n  }" if (parenthesized_expression "(lVar8 == 0)" ( (binary_expression "lVar8 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */\n    this = (__moneypunct_cache<char,false> *)operator_new(0x70);\n    *(undefined4 *)(this + 8) = 0;\n    *(undefined8 *)(this + 0x10) = 0;\n    *(undefined8 *)(this + 0x18) = 0;\n    this[0x22] = (__moneypunct_cache<char,false>)0x0;\n    *(undefined ***)this = &PTR____moneypunct_cache_00677260;\n    *(undefined2 *)(this + 0x20) = 0;\n    *(undefined8 *)(this + 0x28) = 0;\n    *(undefined8 *)(this + 0x30) = 0;\n    *(undefined8 *)(this + 0x38) = 0;\n    *(undefined8 *)(this + 0x40) = 0;\n    *(undefined8 *)(this + 0x48) = 0;\n    *(undefined8 *)(this + 0x50) = 0;\n    *(undefined8 *)(this + 0x58) = 0;\n    *(undefined4 *)(this + 0x60) = 0;\n    this[0x6f] = (__moneypunct_cache<char,false>)0x0;\n                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */\n    __moneypunct_cache<char,false>::_M_cache(this,(locale *)(param_4 + 0xd0));\n    locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5);\n    lVar8 = *plVar1;\n  }" { comment (expression_statement "this = (__moneypunct_cache<char,false> *)operator_new(0x70);" (assignment_expression "this = (__moneypunct_cache<char,false> *)operator_new(0x70)" identifier = (parenthesized_expression "(__moneypunct_cache<char,false> *)operator_new(0x70)" ( (comma_expression "__moneypunct_cache<char,false> *)operator_new(0x70)" (binary_expression "__moneypunct_cache<char" identifier < identifier) , (binary_expression "false> *)operator_new(0x70)" false > (pointer_expression "*)operator_new(0x70)" * (ERROR ")" )) (call_expression "operator_new(0x70)" identifier (argument_list "(0x70)" ( number_literal )))))) ))) ;) (expression_statement "*(undefined4 *)(this + 8) = 0;" (assignment_expression "*(undefined4 *)(this + 8) = 0" (pointer_expression "*(undefined4 *)(this + 8)" * (cast_expression "(undefined4 *)(this + 8)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 8)" ( (binary_expression "this + 8" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x10) = 0;" (assignment_expression "*(undefined8 *)(this + 0x10) = 0" (pointer_expression "*(undefined8 *)(this + 0x10)" * (cast_expression "(undefined8 *)(this + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x10)" ( (binary_expression "this + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x18) = 0;" (assignment_expression "*(undefined8 *)(this + 0x18) = 0" (pointer_expression "*(undefined8 *)(this + 0x18)" * (cast_expression "(undefined8 *)(this + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x18)" ( (binary_expression "this + 0x18" identifier + number_literal) )))) = number_literal) ;) (expression_statement "this[0x22] = (__moneypunct_cache<char,false>)0x0;" (assignment_expression "this[0x22] = (__moneypunct_cache<char,false>)0x0" (subscript_expression "this[0x22]" identifier [ number_literal ]) = (parenthesized_expression "(__moneypunct_cache<char,false>)0x0" ( (comma_expression "__moneypunct_cache<char,false>)0x0" (binary_expression "__moneypunct_cache<char" identifier < identifier) , (binary_expression "false>)0x0" false > (ERROR ")" )) number_literal)) ))) ;) (expression_statement "*(undefined ***)this = &PTR____moneypunct_cache_00677260;" (assignment_expression "*(undefined ***)this = &PTR____moneypunct_cache_00677260" (pointer_expression "*(undefined ***)this" * (cast_expression "(undefined ***)this" ( (type_descriptor "undefined ***" type_identifier (abstract_pointer_declarator "***" * (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *)))) ) identifier)) = (pointer_expression "&PTR____moneypunct_cache_00677260" & identifier)) ;) (expression_statement "*(undefined2 *)(this + 0x20) = 0;" (assignment_expression "*(undefined2 *)(this + 0x20) = 0" (pointer_expression "*(undefined2 *)(this + 0x20)" * (cast_expression "(undefined2 *)(this + 0x20)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x20)" ( (binary_expression "this + 0x20" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x28) = 0;" (assignment_expression "*(undefined8 *)(this + 0x28) = 0" (pointer_expression "*(undefined8 *)(this + 0x28)" * (cast_expression "(undefined8 *)(this + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x28)" ( (binary_expression "this + 0x28" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x30) = 0;" (assignment_expression "*(undefined8 *)(this + 0x30) = 0" (pointer_expression "*(undefined8 *)(this + 0x30)" * (cast_expression "(undefined8 *)(this + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x30)" ( (binary_expression "this + 0x30" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x38) = 0;" (assignment_expression "*(undefined8 *)(this + 0x38) = 0" (pointer_expression "*(undefined8 *)(this + 0x38)" * (cast_expression "(undefined8 *)(this + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x38)" ( (binary_expression "this + 0x38" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x40) = 0;" (assignment_expression "*(undefined8 *)(this + 0x40) = 0" (pointer_expression "*(undefined8 *)(this + 0x40)" * (cast_expression "(undefined8 *)(this + 0x40)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x40)" ( (binary_expression "this + 0x40" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x48) = 0;" (assignment_expression "*(undefined8 *)(this + 0x48) = 0" (pointer_expression "*(undefined8 *)(this + 0x48)" * (cast_expression "(undefined8 *)(this + 0x48)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x48)" ( (binary_expression "this + 0x48" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x50) = 0;" (assignment_expression "*(undefined8 *)(this + 0x50) = 0" (pointer_expression "*(undefined8 *)(this + 0x50)" * (cast_expression "(undefined8 *)(this + 0x50)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x50)" ( (binary_expression "this + 0x50" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined8 *)(this + 0x58) = 0;" (assignment_expression "*(undefined8 *)(this + 0x58) = 0" (pointer_expression "*(undefined8 *)(this + 0x58)" * (cast_expression "(undefined8 *)(this + 0x58)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 0x58)" ( (binary_expression "this + 0x58" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)(this + 0x60) = 0;" (assignment_expression "*(undefined4 *)(this + 0x60) = 0" (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) )))) = number_literal) ;) (expression_statement "this[0x6f] = (__moneypunct_cache<char,false>)0x0;" (assignment_expression "this[0x6f] = (__moneypunct_cache<char,false>)0x0" (subscript_expression "this[0x6f]" identifier [ number_literal ]) = (parenthesized_expression "(__moneypunct_cache<char,false>)0x0" ( (comma_expression "__moneypunct_cache<char,false>)0x0" (binary_expression "__moneypunct_cache<char" identifier < identifier) , (binary_expression "false>)0x0" false > (ERROR ")" )) number_literal)) ))) ;) comment (expression_statement "__moneypunct_cache<char,false>::_M_cache(this,(locale *)(param_4 + 0xd0));" (comma_expression "__moneypunct_cache<char,false>::_M_cache(this,(locale *)(param_4 + 0xd0))" (binary_expression "__moneypunct_cache<char" identifier < identifier) , (binary_expression "false>::_M_cache(this,(locale *)(param_4 + 0xd0))" false > (ERROR "::" : :) (call_expression "_M_cache(this,(locale *)(param_4 + 0xd0))" identifier (argument_list "(this,(locale *)(param_4 + 0xd0))" ( identifier , (cast_expression "(locale *)(param_4 + 0xd0)" ( (type_descriptor "locale *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) ))) ))))) ;) (labeled_statement "locale::_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5);" statement_identifier : (ERROR ":" :) (labeled_statement "_Impl::_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5);" statement_identifier : (ERROR ":" :) (expression_statement "_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5);" (call_expression "_M_install_cache(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5)" identifier (argument_list "(*(_Impl **)(param_4 + 0xd0),(facet *)this,uVar5)" ( (pointer_expression "*(_Impl **)(param_4 + 0xd0)" * (cast_expression "(_Impl **)(param_4 + 0xd0)" ( (type_descriptor "_Impl **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) , (cast_expression "(facet *)this" ( (type_descriptor "facet *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;))) (expression_statement "lVar8 = *plVar1;" (assignment_expression "lVar8 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) })) (expression_statement "pbVar16 = (byte *)*param_6;" (assignment_expression "pbVar16 = (byte *)*param_6" identifier = (cast_expression "(byte *)*param_6" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_6" * identifier))) ;) (expression_statement "pbVar14 = pbVar16 + -0x18;" (assignment_expression "pbVar14 = pbVar16 + -0x18" identifier = (binary_expression "pbVar16 + -0x18" identifier + number_literal)) ;) (if_statement "if (*pbVar16 == *(byte *)(lVar8 + 100)) {\n    local_4c = *(undefined1 (*) [4])(lVar8 + 0x60);\n    if (*(long *)pbVar14 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar8 + 0x48);\n    uVar5 = *(ulong *)(lVar8 + 0x50);\n    pbVar16 = pbVar16 + 1;\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar8 + 0x5c);\n    uVar5 = *(ulong *)(lVar8 + 0x40);\n    local_88 = *(char **)(lVar8 + 0x38);\n  }" if (parenthesized_expression "(*pbVar16 == *(byte *)(lVar8 + 100))" ( (binary_expression "*pbVar16 == *(byte *)(lVar8 + 100)" (pointer_expression "*pbVar16" * identifier) == (pointer_expression "*(byte *)(lVar8 + 100)" * (cast_expression "(byte *)(lVar8 + 100)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 100)" ( (binary_expression "lVar8 + 100" identifier + number_literal) ))))) )) (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar8 + 0x60);\n    if (*(long *)pbVar14 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar8 + 0x48);\n    uVar5 = *(ulong *)(lVar8 + 0x50);\n    pbVar16 = pbVar16 + 1;\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar8 + 0x60);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar8 + 0x60)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar8 + 0x60)" * (cast_expression "(undefined1 (*) [4])(lVar8 + 0x60)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar8 + 0x60)" ( (binary_expression "lVar8 + 0x60" identifier + number_literal) ))))) ;) (if_statement "if (*(long *)pbVar14 == 0) goto LAB_004b2580;" if (parenthesized_expression "(*(long *)pbVar14 == 0)" ( (binary_expression "*(long *)pbVar14 == 0" (pointer_expression "*(long *)pbVar14" * (cast_expression "(long *)pbVar14" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) == number_literal) )) (goto_statement "goto LAB_004b2580;" goto statement_identifier ;)) (expression_statement "local_88 = *(char **)(lVar8 + 0x48);" (assignment_expression "local_88 = *(char **)(lVar8 + 0x48)" identifier = (pointer_expression "*(char **)(lVar8 + 0x48)" * (cast_expression "(char **)(lVar8 + 0x48)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar8 + 0x48)" ( (binary_expression "lVar8 + 0x48" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(ulong *)(lVar8 + 0x50);" (assignment_expression "uVar5 = *(ulong *)(lVar8 + 0x50)" identifier = (pointer_expression "*(ulong *)(lVar8 + 0x50)" * (cast_expression "(ulong *)(lVar8 + 0x50)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x50)" ( (binary_expression "lVar8 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "pbVar16 = pbVar16 + 1;" (assignment_expression "pbVar16 = pbVar16 + 1" identifier = (binary_expression "pbVar16 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n    local_4c = *(undefined1 (*) [4])(lVar8 + 0x5c);\n    uVar5 = *(ulong *)(lVar8 + 0x40);\n    local_88 = *(char **)(lVar8 + 0x38);\n  }" else (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar8 + 0x5c);\n    uVar5 = *(ulong *)(lVar8 + 0x40);\n    local_88 = *(char **)(lVar8 + 0x38);\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar8 + 0x5c);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar8 + 0x5c)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar8 + 0x5c)" * (cast_expression "(undefined1 (*) [4])(lVar8 + 0x5c)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar8 + 0x5c)" ( (binary_expression "lVar8 + 0x5c" identifier + number_literal) ))))) ;) (expression_statement "uVar5 = *(ulong *)(lVar8 + 0x40);" (assignment_expression "uVar5 = *(ulong *)(lVar8 + 0x40)" identifier = (pointer_expression "*(ulong *)(lVar8 + 0x40)" * (cast_expression "(ulong *)(lVar8 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x40)" ( (binary_expression "lVar8 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "local_88 = *(char **)(lVar8 + 0x38);" (assignment_expression "local_88 = *(char **)(lVar8 + 0x38)" identifier = (pointer_expression "*(char **)(lVar8 + 0x38)" * (cast_expression "(char **)(lVar8 + 0x38)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar8 + 0x38)" ( (binary_expression "lVar8 + 0x38" identifier + number_literal) ))))) ;) }))) (expression_statement "pbVar14 = pbVar16 + *(long *)pbVar14;" (assignment_expression "pbVar14 = pbVar16 + *(long *)pbVar14" identifier = (binary_expression "pbVar16 + *(long *)pbVar14" identifier + (pointer_expression "*(long *)pbVar14" * (cast_expression "(long *)pbVar14" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (if_statement "if ((pbVar16 < pbVar14) &&\n     (pbVar6 = pbVar16, (*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8) != 0)) {\n    do {\n      pbVar6 = pbVar6 + 1;\n      if (pbVar14 == pbVar6) {\n        uVar15 = (long)pbVar14 - (long)pbVar16;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8) != 0);\n    uVar15 = (long)pbVar6 - (long)pbVar16;\njoined_r0x004b257e:\n    if (uVar15 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      std::string::reserve((string *)&local_48,uVar15 * 2);\n      iVar3 = *(int *)(lVar8 + 0x58);\n      uVar10 = uVar15 - (long)iVar3;\n      if (0 < (long)uVar10) {\n        if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }\n        if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }\n        iVar3 = *(int *)(lVar8 + 0x58);\n      }\n      if (0 < iVar3) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));\n        if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }\n      }\n      uVar13 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar5;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar8 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      std::string::reserve((string *)local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppcVar11 = (char **)local_4c;\n      bVar9 = uVar13 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }\n        ppcVar11 = (char **)((long)ppcVar11 + 1);\n      } while (ppcVar11 != &local_48);\n      if (1 < uVar5) {\n        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);\n      }\n      uVar5 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar5 < uVar15) {\n        if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);\n        local_8e = (int)uVar5 != lVar8;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n      }\n      if ((allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n      }\n    }\n  }" if (parenthesized_expression "((pbVar16 < pbVar14) &&\n     (pbVar6 = pbVar16, (*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8) != 0))" ( (binary_expression "(pbVar16 < pbVar14) &&\n     (pbVar6 = pbVar16, (*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8) != 0)" (parenthesized_expression "(pbVar16 < pbVar14)" ( (binary_expression "pbVar16 < pbVar14" identifier < identifier) )) && (parenthesized_expression "(pbVar6 = pbVar16, (*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8) != 0)" ( (comma_expression "pbVar6 = pbVar16, (*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8) != 0" (assignment_expression "pbVar6 = pbVar16" identifier = identifier) , (binary_expression "(*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8) != 0" (parenthesized_expression "(*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8)" ( (binary_expression "*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2) & 8" (pointer_expression "*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2)" * (cast_expression "(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2)" ( (binary_expression "*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar16 * 2" (binary_expression "*(long *)(pcVar4 + 0x30) + 1" (pointer_expression "*(long *)(pcVar4 + 0x30)" * (cast_expression "(long *)(pcVar4 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 0x30)" ( (binary_expression "pcVar4 + 0x30" identifier + number_literal) )))) + number_literal) + (binary_expression "(ulong)*pbVar16 * 2" (binary_expression "(ulong)*pbVar16" (parenthesized_expression "(ulong)" ( identifier )) * identifier) * number_literal)) )))) & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n    do {\n      pbVar6 = pbVar6 + 1;\n      if (pbVar14 == pbVar6) {\n        uVar15 = (long)pbVar14 - (long)pbVar16;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8) != 0);\n    uVar15 = (long)pbVar6 - (long)pbVar16;\njoined_r0x004b257e:\n    if (uVar15 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      std::string::reserve((string *)&local_48,uVar15 * 2);\n      iVar3 = *(int *)(lVar8 + 0x58);\n      uVar10 = uVar15 - (long)iVar3;\n      if (0 < (long)uVar10) {\n        if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }\n        if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }\n        iVar3 = *(int *)(lVar8 + 0x58);\n      }\n      if (0 < iVar3) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));\n        if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }\n      }\n      uVar13 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar5;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar8 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      std::string::reserve((string *)local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppcVar11 = (char **)local_4c;\n      bVar9 = uVar13 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }\n        ppcVar11 = (char **)((long)ppcVar11 + 1);\n      } while (ppcVar11 != &local_48);\n      if (1 < uVar5) {\n        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);\n      }\n      uVar5 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar5 < uVar15) {\n        if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);\n        local_8e = (int)uVar5 != lVar8;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n      }\n      if ((allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n      }\n    }\n  }" { (do_statement "do {\n      pbVar6 = pbVar6 + 1;\n      if (pbVar14 == pbVar6) {\n        uVar15 = (long)pbVar14 - (long)pbVar16;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8) != 0);" do (compound_statement "{\n      pbVar6 = pbVar6 + 1;\n      if (pbVar14 == pbVar6) {\n        uVar15 = (long)pbVar14 - (long)pbVar16;\n        goto joined_r0x004b257e;\n      }\n    }" { (expression_statement "pbVar6 = pbVar6 + 1;" (assignment_expression "pbVar6 = pbVar6 + 1" identifier = (binary_expression "pbVar6 + 1" identifier + number_literal)) ;) (if_statement "if (pbVar14 == pbVar6) {\n        uVar15 = (long)pbVar14 - (long)pbVar16;\n        goto joined_r0x004b257e;\n      }" if (parenthesized_expression "(pbVar14 == pbVar6)" ( (binary_expression "pbVar14 == pbVar6" identifier == identifier) )) (compound_statement "{\n        uVar15 = (long)pbVar14 - (long)pbVar16;\n        goto joined_r0x004b257e;\n      }" { (expression_statement "uVar15 = (long)pbVar14 - (long)pbVar16;" (assignment_expression "uVar15 = (long)pbVar14 - (long)pbVar16" identifier = (binary_expression "(long)pbVar14 - (long)pbVar16" (cast_expression "(long)pbVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pbVar16" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (goto_statement "goto joined_r0x004b257e;" goto statement_identifier ;) })) }) while (parenthesized_expression "((*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8) != 0)" ( (binary_expression "(*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8) != 0" (parenthesized_expression "(*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8)" ( (binary_expression "*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2) & 8" (pointer_expression "*(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2)" * (cast_expression "(byte *)(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2)" ( (binary_expression "*(long *)(pcVar4 + 0x30) + 1 + (ulong)*pbVar6 * 2" (binary_expression "*(long *)(pcVar4 + 0x30) + 1" (pointer_expression "*(long *)(pcVar4 + 0x30)" * (cast_expression "(long *)(pcVar4 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar4 + 0x30)" ( (binary_expression "pcVar4 + 0x30" identifier + number_literal) )))) + number_literal) + (binary_expression "(ulong)*pbVar6 * 2" (binary_expression "(ulong)*pbVar6" (parenthesized_expression "(ulong)" ( identifier )) * identifier) * number_literal)) )))) & number_literal) )) != number_literal) )) ;) (expression_statement "uVar15 = (long)pbVar6 - (long)pbVar16;" (assignment_expression "uVar15 = (long)pbVar6 - (long)pbVar16" identifier = (binary_expression "(long)pbVar6 - (long)pbVar16" (cast_expression "(long)pbVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pbVar16" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (labeled_statement "joined_r0x004b257e:\n    if (uVar15 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      std::string::reserve((string *)&local_48,uVar15 * 2);\n      iVar3 = *(int *)(lVar8 + 0x58);\n      uVar10 = uVar15 - (long)iVar3;\n      if (0 < (long)uVar10) {\n        if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }\n        if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }\n        iVar3 = *(int *)(lVar8 + 0x58);\n      }\n      if (0 < iVar3) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));\n        if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }\n      }\n      uVar13 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar5;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar8 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      std::string::reserve((string *)local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppcVar11 = (char **)local_4c;\n      bVar9 = uVar13 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }\n        ppcVar11 = (char **)((long)ppcVar11 + 1);\n      } while (ppcVar11 != &local_48);\n      if (1 < uVar5) {\n        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);\n      }\n      uVar5 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar5 < uVar15) {\n        if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);\n        local_8e = (int)uVar5 != lVar8;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n      }\n      if ((allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n      }\n    }" statement_identifier : (if_statement "if (uVar15 != 0) {\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      std::string::reserve((string *)&local_48,uVar15 * 2);\n      iVar3 = *(int *)(lVar8 + 0x58);\n      uVar10 = uVar15 - (long)iVar3;\n      if (0 < (long)uVar10) {\n        if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }\n        if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }\n        iVar3 = *(int *)(lVar8 + 0x58);\n      }\n      if (0 < iVar3) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));\n        if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }\n      }\n      uVar13 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar5;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar8 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      std::string::reserve((string *)local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppcVar11 = (char **)local_4c;\n      bVar9 = uVar13 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }\n        ppcVar11 = (char **)((long)ppcVar11 + 1);\n      } while (ppcVar11 != &local_48);\n      if (1 < uVar5) {\n        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);\n      }\n      uVar5 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar5 < uVar15) {\n        if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);\n        local_8e = (int)uVar5 != lVar8;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n      }\n      if ((allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n      }\n    }" if (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) (compound_statement "{\n      local_48 = &DAT_00689d98;\n                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */\n      std::string::reserve((string *)&local_48,uVar15 * 2);\n      iVar3 = *(int *)(lVar8 + 0x58);\n      uVar10 = uVar15 - (long)iVar3;\n      if (0 < (long)uVar10) {\n        if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }\n        if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }\n        iVar3 = *(int *)(lVar8 + 0x58);\n      }\n      if (0 < iVar3) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));\n        if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }\n      }\n      uVar13 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar5;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar8 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */\n      std::string::reserve((string *)local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppcVar11 = (char **)local_4c;\n      bVar9 = uVar13 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }\n        ppcVar11 = (char **)((long)ppcVar11 + 1);\n      } while (ppcVar11 != &local_48);\n      if (1 < uVar5) {\n        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);\n      }\n      uVar5 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar5 < uVar15) {\n        if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);\n        local_8e = (int)uVar5 != lVar8;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n      }\n      if ((allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n      }\n    }" { (expression_statement "local_48 = &DAT_00689d98;" (assignment_expression "local_48 = &DAT_00689d98" identifier = (pointer_expression "&DAT_00689d98" & identifier)) ;) comment (labeled_statement "std::string::reserve((string *)&local_48,uVar15 * 2);" statement_identifier : (ERROR ":" :) (labeled_statement "string::reserve((string *)&local_48,uVar15 * 2);" statement_identifier : (ERROR ":" :) (expression_statement "reserve((string *)&local_48,uVar15 * 2);" (call_expression "reserve((string *)&local_48,uVar15 * 2)" identifier (argument_list "((string *)&local_48,uVar15 * 2)" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (binary_expression "uVar15 * 2" identifier * number_literal) ))) ;))) (expression_statement "iVar3 = *(int *)(lVar8 + 0x58);" (assignment_expression "iVar3 = *(int *)(lVar8 + 0x58)" identifier = (pointer_expression "*(int *)(lVar8 + 0x58)" * (cast_expression "(int *)(lVar8 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x58)" ( (binary_expression "lVar8 + 0x58" identifier + number_literal) ))))) ;) (expression_statement "uVar10 = uVar15 - (long)iVar3;" (assignment_expression "uVar10 = uVar15 - (long)iVar3" identifier = (binary_expression "uVar15 - (long)iVar3" identifier - (cast_expression "(long)iVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (0 < (long)uVar10) {\n        if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }\n        if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }\n        iVar3 = *(int *)(lVar8 + 0x58);\n      }" if (parenthesized_expression "(0 < (long)uVar10)" ( (binary_expression "0 < (long)uVar10" number_literal < (cast_expression "(long)uVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (compound_statement "{\n        if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }\n        if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }\n        iVar3 = *(int *)(lVar8 + 0x58);\n      }" { (if_statement "if (iVar3 < 0) {\n          uVar10 = uVar15;\n        }" if (parenthesized_expression "(iVar3 < 0)" ( (binary_expression "iVar3 < 0" identifier < number_literal) )) (compound_statement "{\n          uVar10 = uVar15;\n        }" { (expression_statement "uVar10 = uVar15;" (assignment_expression "uVar10 = uVar15" identifier = identifier) ;) })) (if_statement "if (*(long *)(lVar8 + 0x18) == 0) {\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }\n        else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }" if (parenthesized_expression "(*(long *)(lVar8 + 0x18) == 0)" ( (binary_expression "*(long *)(lVar8 + 0x18) == 0" (pointer_expression "*(long *)(lVar8 + 0x18)" * (cast_expression "(long *)(lVar8 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x18)" ( (binary_expression "lVar8 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */\n          std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);\n        }" { comment (labeled_statement "std::string::assign((string *)&local_48,(char *)pbVar16,uVar10);" statement_identifier : (ERROR ":" :) (labeled_statement "string::assign((string *)&local_48,(char *)pbVar16,uVar10);" statement_identifier : (ERROR ":" :) (expression_statement "assign((string *)&local_48,(char *)pbVar16,uVar10);" (call_expression "assign((string *)&local_48,(char *)pbVar16,uVar10)" identifier (argument_list "((string *)&local_48,(char *)pbVar16,uVar10)" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (cast_expression "(char *)pbVar16" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;))) }) (else_clause "else {\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }" else (compound_statement "{\n          std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');\n          uVar12 = *(ulong *)(lVar8 + 0x18);\n          pcVar7 = *(char **)(lVar8 + 0x10);\n          cVar2 = *(char *)(lVar8 + 0x22);\n          std::string::_M_leak((string *)&local_48);\n          pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));\n          std::string::_M_leak((string *)&local_48);\n          uVar12 = (long)pcVar7 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }\n          std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;\n        }" { (labeled_statement "std::string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');" statement_identifier : (ERROR ":" :) (labeled_statement "string::_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');" statement_identifier : (ERROR ":" :) (expression_statement "_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0');" (call_expression "_M_replace_aux\n                    ((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0')" identifier (argument_list "((string *)&local_48,0,*(ulong *)(local_48 + -0x18),uVar10 * 2,'\0')" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , number_literal , (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) )))) , (binary_expression "uVar10 * 2" identifier * number_literal) , (char_literal "'\0'" ' escape_sequence ') ))) ;))) (expression_statement "uVar12 = *(ulong *)(lVar8 + 0x18);" (assignment_expression "uVar12 = *(ulong *)(lVar8 + 0x18)" identifier = (pointer_expression "*(ulong *)(lVar8 + 0x18)" * (cast_expression "(ulong *)(lVar8 + 0x18)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x18)" ( (binary_expression "lVar8 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "pcVar7 = *(char **)(lVar8 + 0x10);" (assignment_expression "pcVar7 = *(char **)(lVar8 + 0x10)" identifier = (pointer_expression "*(char **)(lVar8 + 0x10)" * (cast_expression "(char **)(lVar8 + 0x10)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar8 + 0x10)" ( (binary_expression "lVar8 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "cVar2 = *(char *)(lVar8 + 0x22);" (assignment_expression "cVar2 = *(char *)(lVar8 + 0x22)" identifier = (pointer_expression "*(char *)(lVar8 + 0x22)" * (cast_expression "(char *)(lVar8 + 0x22)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x22)" ( (binary_expression "lVar8 + 0x22" identifier + number_literal) ))))) ;) (labeled_statement "std::string::_M_leak((string *)&local_48);" statement_identifier : (ERROR ":" :) (labeled_statement "string::_M_leak((string *)&local_48);" statement_identifier : (ERROR ":" :) (expression_statement "_M_leak((string *)&local_48);" (call_expression "_M_leak((string *)&local_48)" identifier (argument_list "((string *)&local_48)" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) ))) ;))) (expression_statement "pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10));" (assignment_expression "pcVar7 = __add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10))" identifier = (binary_expression "__add_grouping<char>\n                             (local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10))" (binary_expression "__add_grouping<char" identifier < identifier) > (parenthesized_expression "(local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10))" ( (comma_expression "local_48,cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10)" identifier , (comma_expression "cVar2,pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10)" identifier , (comma_expression "pcVar7,uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10)" identifier , (comma_expression "uVar12,(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10)" identifier , (comma_expression "(char *)pbVar16,\n                              (char *)(pbVar16 + uVar10)" (cast_expression "(char *)pbVar16" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(char *)(pbVar16 + uVar10)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar16 + uVar10)" ( (binary_expression "pbVar16 + uVar10" identifier + identifier) )))))))) )))) ;) (labeled_statement "std::string::_M_leak((string *)&local_48);" statement_identifier : (ERROR ":" :) (labeled_statement "string::_M_leak((string *)&local_48);" statement_identifier : (ERROR ":" :) (expression_statement "_M_leak((string *)&local_48);" (call_expression "_M_leak((string *)&local_48)" identifier (argument_list "((string *)&local_48)" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) ))) ;))) (expression_statement "uVar12 = (long)pcVar7 - (long)local_48;" (assignment_expression "uVar12 = (long)pcVar7 - (long)local_48" identifier = (binary_expression "(long)pcVar7 - (long)local_48" (cast_expression "(long)pcVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)local_48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (*(ulong *)(local_48 + -0x18) < uVar12) {\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }" if (parenthesized_expression "(*(ulong *)(local_48 + -0x18) < uVar12)" ( (binary_expression "*(ulong *)(local_48 + -0x18) < uVar12" (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) )))) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */\n            __throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);\n          }" { comment comment (expression_statement "__throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12);" (call_expression "__throw_out_of_range_fmt\n                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12)" identifier (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                       "basic_string::erase",uVar12)" ( (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" " string_content ") , (string_literal ""basic_string::erase"" " string_content ") , identifier ))) ;) })) (labeled_statement "std::string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;" statement_identifier : (ERROR ":" :) (labeled_statement "string::_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;" statement_identifier : (ERROR ":" :) (expression_statement "_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)\n          ;" (call_expression "_M_mutate((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)" identifier (argument_list "((string *)&local_48,uVar12,*(ulong *)(local_48 + -0x18) - uVar12,0)" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , identifier , (binary_expression "*(ulong *)(local_48 + -0x18) - uVar12" (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) )))) - identifier) , number_literal ))) ;))) }))) (expression_statement "iVar3 = *(int *)(lVar8 + 0x58);" (assignment_expression "iVar3 = *(int *)(lVar8 + 0x58)" identifier = (pointer_expression "*(int *)(lVar8 + 0x58)" * (cast_expression "(int *)(lVar8 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x58)" ( (binary_expression "lVar8 + 0x58" identifier + number_literal) ))))) ;) })) (if_statement "if (0 < iVar3) {\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));\n        if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }\n      }" if (parenthesized_expression "(0 < iVar3)" ( (binary_expression "0 < iVar3" number_literal < identifier) )) (compound_statement "{\n                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */\n        std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));\n        if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }\n      }" { comment (labeled_statement "std::string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));" statement_identifier : (ERROR ":" :) (labeled_statement "string::push_back((string *)&local_48,*(char *)(lVar8 + 0x21));" statement_identifier : (ERROR ":" :) (expression_statement "push_back((string *)&local_48,*(char *)(lVar8 + 0x21));" (call_expression "push_back((string *)&local_48,*(char *)(lVar8 + 0x21))" identifier (argument_list "((string *)&local_48,*(char *)(lVar8 + 0x21))" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (pointer_expression "*(char *)(lVar8 + 0x21)" * (cast_expression "(char *)(lVar8 + 0x21)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x21)" ( (binary_expression "lVar8 + 0x21" identifier + number_literal) )))) ))) ;))) (if_statement "if ((long)uVar10 < 0) {\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }\n        else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }" if (parenthesized_expression "((long)uVar10 < 0)" ( (binary_expression "(long)uVar10 < 0" (cast_expression "(long)uVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < number_literal) )) (compound_statement "{\n          std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));\n          std::string::append((string *)&local_48,(char *)pbVar16,uVar15);\n        }" { (labeled_statement "std::string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));" statement_identifier : (ERROR ":" :) (labeled_statement "string::append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));" statement_identifier : (ERROR ":" :) (expression_statement "append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65));" (call_expression "append((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65))" identifier (argument_list "((string *)&local_48,-uVar10,*(char *)(lVar8 + 0x65))" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (unary_expression "-uVar10" - identifier) , (pointer_expression "*(char *)(lVar8 + 0x65)" * (cast_expression "(char *)(lVar8 + 0x65)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x65)" ( (binary_expression "lVar8 + 0x65" identifier + number_literal) )))) ))) ;))) (labeled_statement "std::string::append((string *)&local_48,(char *)pbVar16,uVar15);" statement_identifier : (ERROR ":" :) (labeled_statement "string::append((string *)&local_48,(char *)pbVar16,uVar15);" statement_identifier : (ERROR ":" :) (expression_statement "append((string *)&local_48,(char *)pbVar16,uVar15);" (call_expression "append((string *)&local_48,(char *)pbVar16,uVar15)" identifier (argument_list "((string *)&local_48,(char *)pbVar16,uVar15)" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (cast_expression "(char *)pbVar16" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;))) }) (else_clause "else {\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }" else (compound_statement "{\n          std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));\n        }" { (labeled_statement "std::string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));" statement_identifier : (ERROR ":" :) (labeled_statement "string::append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));" statement_identifier : (ERROR ":" :) (expression_statement "append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58));" (call_expression "append((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58))" identifier (argument_list "((string *)&local_48,(char *)(pbVar16 + uVar10),\n                              (long)*(int *)(lVar8 + 0x58))" ( (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) , (cast_expression "(char *)(pbVar16 + uVar10)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar16 + uVar10)" ( (binary_expression "pbVar16 + uVar10" identifier + identifier) ))) , (cast_expression "(long)*(int *)(lVar8 + 0x58)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(lVar8 + 0x58)" * (cast_expression "(int *)(lVar8 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x58)" ( (binary_expression "lVar8 + 0x58" identifier + number_literal) ))))) ))) ;))) }))) })) (expression_statement "uVar13 = *(uint *)(param_4 + 0x18) & 0xb0;" (assignment_expression "uVar13 = *(uint *)(param_4 + 0x18) & 0xb0" identifier = (binary_expression "*(uint *)(param_4 + 0x18) & 0xb0" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "local_80 = *(long *)(local_48 + -0x18) + uVar5;" (assignment_expression "local_80 = *(long *)(local_48 + -0x18) + uVar5" identifier = (binary_expression "*(long *)(local_48 + -0x18) + uVar5" (pointer_expression "*(long *)(local_48 + -0x18)" * (cast_expression "(long *)(local_48 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) + identifier)) ;) (if_statement "if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar8 + 0x30);\n      }" if (parenthesized_expression "((*(uint *)(param_4 + 0x18) & 0x200) != 0)" ( (binary_expression "(*(uint *)(param_4 + 0x18) & 0x200) != 0" (parenthesized_expression "(*(uint *)(param_4 + 0x18) & 0x200)" ( (binary_expression "*(uint *)(param_4 + 0x18) & 0x200" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n        local_80 = local_80 + *(long *)(lVar8 + 0x30);\n      }" { (expression_statement "local_80 = local_80 + *(long *)(lVar8 + 0x30);" (assignment_expression "local_80 = local_80 + *(long *)(lVar8 + 0x30)" identifier = (binary_expression "local_80 + *(long *)(lVar8 + 0x30)" identifier + (pointer_expression "*(long *)(lVar8 + 0x30)" * (cast_expression "(long *)(lVar8 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x30)" ( (binary_expression "lVar8 + 0x30" identifier + number_literal) )))))) ;) })) (expression_statement "local_40[0] = &DAT_00689d98;" (assignment_expression "local_40[0] = &DAT_00689d98" (subscript_expression "local_40[0]" identifier [ number_literal ]) = (pointer_expression "&DAT_00689d98" & identifier)) ;) comment (labeled_statement "std::string::reserve((string *)local_40,local_80 * 2);" statement_identifier : (ERROR ":" :) (labeled_statement "string::reserve((string *)local_40,local_80 * 2);" statement_identifier : (ERROR ":" :) (expression_statement "reserve((string *)local_40,local_80 * 2);" (call_expression "reserve((string *)local_40,local_80 * 2)" identifier (argument_list "((string *)local_40,local_80 * 2)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "local_80 * 2" identifier * number_literal) ))) ;))) (expression_statement "uVar15 = *(ulong *)(param_4 + 0x10);" (assignment_expression "uVar15 = *(ulong *)(param_4 + 0x10)" identifier = (pointer_expression "*(ulong *)(param_4 + 0x10)" * (cast_expression "(ulong *)(param_4 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "ppcVar11 = (char **)local_4c;" (assignment_expression "ppcVar11 = (char **)local_4c" identifier = (cast_expression "(char **)local_4c" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "bVar9 = uVar13 == 0x10 && local_80 < uVar15;" (assignment_expression "bVar9 = uVar13 == 0x10 && local_80 < uVar15" identifier = (binary_expression "uVar13 == 0x10 && local_80 < uVar15" (binary_expression "uVar13 == 0x10" identifier == number_literal) && (binary_expression "local_80 < uVar15" identifier < identifier))) ;) (do_statement "do {\n        switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }\n        ppcVar11 = (char **)((long)ppcVar11 + 1);\n      } while (ppcVar11 != &local_48);" do (compound_statement "{\n        switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }\n        ppcVar11 = (char **)((long)ppcVar11 + 1);\n      }" { (switch_statement "switch(*(undefined1 *)ppcVar11) {\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }" switch (parenthesized_expression "(*(undefined1 *)ppcVar11)" ( (pointer_expression "*(undefined1 *)ppcVar11" * (cast_expression "(undefined1 *)ppcVar11" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;\n        case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;\n        case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;\n        case 4:\n          std::string::append((string *)local_40,(string *)&local_48);\n        }" { (case_statement "case 0:\n          if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }\n          break;" case number_literal : (if_statement "if (bVar9) {\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }" if (parenthesized_expression "(bVar9)" ( identifier )) (compound_statement "{\nLAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);\n          }" { (labeled_statement "LAB_004b27c0:\n            std::string::append((string *)local_40,uVar15 - local_80,param_5);" statement_identifier : (labeled_statement "std::string::append((string *)local_40,uVar15 - local_80,param_5);" statement_identifier : (ERROR ":" :) (labeled_statement "string::append((string *)local_40,uVar15 - local_80,param_5);" statement_identifier : (ERROR ":" :) (expression_statement "append((string *)local_40,uVar15 - local_80,param_5);" (call_expression "append((string *)local_40,uVar15 - local_80,param_5)" identifier (argument_list "((string *)local_40,uVar15 - local_80,param_5)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "uVar15 - local_80" identifier - identifier) , identifier ))) ;)))) })) (break_statement "break;" break ;)) (case_statement "case 1:\n          if (bVar9) goto LAB_004b27c0;\n                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */\n          std::string::push_back((string *)local_40,param_5);\n          break;" case number_literal : (if_statement "if (bVar9) goto LAB_004b27c0;" if (parenthesized_expression "(bVar9)" ( identifier )) (goto_statement "goto LAB_004b27c0;" goto statement_identifier ;)) comment (labeled_statement "std::string::push_back((string *)local_40,param_5);" statement_identifier : (ERROR ":" :) (labeled_statement "string::push_back((string *)local_40,param_5);" statement_identifier : (ERROR ":" :) (expression_statement "push_back((string *)local_40,param_5);" (call_expression "push_back((string *)local_40,param_5)" identifier (argument_list "((string *)local_40,param_5)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))) ;))) (break_statement "break;" break ;)) (case_statement "case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }\n          break;" case number_literal : (if_statement "if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }" if (parenthesized_expression "((*(byte *)(param_4 + 0x19) & 2) != 0)" ( (binary_expression "(*(byte *)(param_4 + 0x19) & 2) != 0" (parenthesized_expression "(*(byte *)(param_4 + 0x19) & 2)" ( (binary_expression "*(byte *)(param_4 + 0x19) & 2" (pointer_expression "*(byte *)(param_4 + 0x19)" * (cast_expression "(byte *)(param_4 + 0x19)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x19)" ( (binary_expression "param_4 + 0x19" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n            std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );\n          }" { (labeled_statement "std::string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );" statement_identifier : (ERROR ":" :) (labeled_statement "string::append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );" statement_identifier : (ERROR ":" :) (expression_statement "append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               );" (call_expression "append((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               )" identifier (argument_list "((string *)local_40,*(char **)(lVar8 + 0x28),*(ulong *)(lVar8 + 0x30)\n                               )" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (pointer_expression "*(char **)(lVar8 + 0x28)" * (cast_expression "(char **)(lVar8 + 0x28)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar8 + 0x28)" ( (binary_expression "lVar8 + 0x28" identifier + number_literal) )))) , (pointer_expression "*(ulong *)(lVar8 + 0x30)" * (cast_expression "(ulong *)(lVar8 + 0x30)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar8 + 0x30)" ( (binary_expression "lVar8 + 0x30" identifier + number_literal) )))) ))) ;))) })) (break_statement "break;" break ;)) (case_statement "case 3:\n          if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }\n          break;" case number_literal : (if_statement "if (uVar5 != 0) {\n            std::string::push_back((string *)local_40,*local_88);\n          }" if (parenthesized_expression "(uVar5 != 0)" ( (binary_expression "uVar5 != 0" identifier != number_literal) )) (compound_statement "{\n            std::string::push_back((string *)local_40,*local_88);\n          }" { (labeled_statement "std::string::push_back((string *)local_40,*local_88);" statement_identifier : (ERROR ":" :) (labeled_statement "string::push_back((string *)local_40,*local_88);" statement_identifier : (ERROR ":" :) (expression_statement "push_back((string *)local_40,*local_88);" (call_expression "push_back((string *)local_40,*local_88)" identifier (argument_list "((string *)local_40,*local_88)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (pointer_expression "*local_88" * identifier) ))) ;))) })) (break_statement "break;" break ;)) (case_statement "case 4:\n          std::string::append((string *)local_40,(string *)&local_48);" case number_literal : (labeled_statement "std::string::append((string *)local_40,(string *)&local_48);" statement_identifier : (ERROR ":" :) (labeled_statement "string::append((string *)local_40,(string *)&local_48);" statement_identifier : (ERROR ":" :) (expression_statement "append((string *)local_40,(string *)&local_48);" (call_expression "append((string *)local_40,(string *)&local_48)" identifier (argument_list "((string *)local_40,(string *)&local_48)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (cast_expression "(string *)&local_48" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&local_48" & identifier)) ))) ;)))) })) (expression_statement "ppcVar11 = (char **)((long)ppcVar11 + 1);" (assignment_expression "ppcVar11 = (char **)((long)ppcVar11 + 1)" identifier = (cast_expression "(char **)((long)ppcVar11 + 1)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)ppcVar11 + 1)" ( (binary_expression "(long)ppcVar11 + 1" (cast_expression "(long)ppcVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(ppcVar11 != &local_48)" ( (binary_expression "ppcVar11 != &local_48" identifier != (pointer_expression "&local_48" & identifier)) )) ;) (if_statement "if (1 < uVar5) {\n        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);\n      }" if (parenthesized_expression "(1 < uVar5)" ( (binary_expression "1 < uVar5" number_literal < identifier) )) (compound_statement "{\n        std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);\n      }" { (labeled_statement "std::string::append((string *)local_40,local_88 + 1,uVar5 - 1);" statement_identifier : (ERROR ":" :) (labeled_statement "string::append((string *)local_40,local_88 + 1,uVar5 - 1);" statement_identifier : (ERROR ":" :) (expression_statement "append((string *)local_40,local_88 + 1,uVar5 - 1);" (call_expression "append((string *)local_40,local_88 + 1,uVar5 - 1)" identifier (argument_list "((string *)local_40,local_88 + 1,uVar5 - 1)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "local_88 + 1" identifier + number_literal) , (binary_expression "uVar5 - 1" identifier - number_literal) ))) ;))) })) (expression_statement "uVar5 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar5 = *(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) ))))) ;) (if_statement "if (uVar5 < uVar15) {\n        if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n      }" if (parenthesized_expression "(uVar5 < uVar15)" ( (binary_expression "uVar5 < uVar15" identifier < identifier) )) (compound_statement "{\n        if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n      }" { (if_statement "if (uVar13 == 0x20) {\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }\n        else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }" if (parenthesized_expression "(uVar13 == 0x20)" ( (binary_expression "uVar13 == 0x20" identifier == number_literal) )) (compound_statement "{\n                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */\n          std::string::append((string *)local_40,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }" { comment (labeled_statement "std::string::append((string *)local_40,uVar15 - uVar5,param_5);" statement_identifier : (ERROR ":" :) (labeled_statement "string::append((string *)local_40,uVar15 - uVar5,param_5);" statement_identifier : (ERROR ":" :) (expression_statement "append((string *)local_40,uVar15 - uVar5,param_5);" (call_expression "append((string *)local_40,uVar15 - uVar5,param_5)" identifier (argument_list "((string *)local_40,uVar15 - uVar5,param_5)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "uVar15 - uVar5" identifier - identifier) , identifier ))) ;))) (expression_statement "uVar5 = uVar15;" (assignment_expression "uVar5 = uVar15" identifier = identifier) ;) }) (else_clause "else {\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }" else (compound_statement "{\n          std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);\n          uVar5 = uVar15;\n        }" { (labeled_statement "std::string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);" statement_identifier : (ERROR ":" :) (labeled_statement "string::_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);" statement_identifier : (ERROR ":" :) (expression_statement "_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5);" (call_expression "_M_replace_aux((string *)local_40,0,0,uVar15 - uVar5,param_5)" identifier (argument_list "((string *)local_40,0,0,uVar15 - uVar5,param_5)" ( (cast_expression "(string *)local_40" ( (type_descriptor "string *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , number_literal , number_literal , (binary_expression "uVar15 - uVar5" identifier - identifier) , identifier ))) ;))) (expression_statement "uVar5 = uVar15;" (assignment_expression "uVar5 = uVar15" identifier = identifier) ;) }))) })) (if_statement "if (local_8e == '\0') {\n        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);\n        local_8e = (int)uVar5 != lVar8;\n      }" if (parenthesized_expression "(local_8e == '\0')" ( (binary_expression "local_8e == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);\n        local_8e = (int)uVar5 != lVar8;\n      }" { (expression_statement "lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5);" (assignment_expression "lVar8 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5)" identifier = (call_expression "(**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar5)" (parenthesized_expression "(**(code **)(*param_2 + 0x60))" ( (pointer_expression "**(code **)(*param_2 + 0x60)" * (pointer_expression "*(code **)(*param_2 + 0x60)" * (cast_expression "(code **)(*param_2 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x60)" ( (binary_expression "*param_2 + 0x60" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,local_40[0],(long)(int)uVar5)" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) , (cast_expression "(long)(int)uVar5" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "local_8e = (int)uVar5 != lVar8;" (assignment_expression "local_8e = (int)uVar5 != lVar8" identifier = (binary_expression "(int)uVar5 != lVar8" (cast_expression "(int)uVar5" ( (type_descriptor "int" primitive_type) ) identifier) != identifier)) ;) })) (expression_statement "param_3 = param_3 & 0xffffffffffffff00;" (assignment_expression "param_3 = param_3 & 0xffffffffffffff00" identifier = (binary_expression "param_3 & 0xffffffffffffff00" identifier & number_literal)) ;) (if_statement "if ((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n      }" if (parenthesized_expression "((allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38)" ( (binary_expression "(allocator *)(local_40[0] + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38" (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 *)PTR__S_empty_rep_storage_0067bc38" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));\n      }" { (labeled_statement "std::string::_Rep::_M_dispose((allocator *)(local_40[0] + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "string::_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 *)PTR__S_empty_rep_storage_0067bc38) {\n        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n      }" if (parenthesized_expression "((allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38)" ( (binary_expression "(allocator *)(local_48 + -0x18) != (allocator *)PTR__S_empty_rep_storage_0067bc38" (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 *)PTR__S_empty_rep_storage_0067bc38" ( (type_descriptor "allocator *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));\n      }" { (labeled_statement "std::string::_Rep::_M_dispose((allocator *)(local_48 + -0x18));" statement_identifier : (ERROR ":" :) (labeled_statement "string::_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) ))) ))) ;)))) })) }))) })) (labeled_statement "LAB_004b2580:\n  auVar17._9_7_ = (int7)(param_3 >> 8);" statement_identifier : (expression_statement "auVar17._9_7_ = (int7)(param_3 >> 8);" (assignment_expression "auVar17._9_7_ = (int7)(param_3 >> 8)" (field_expression "auVar17._9_7_" identifier . field_identifier) = (call_expression "(int7)(param_3 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(param_3 >> 8)" ( (binary_expression "param_3 >> 8" identifier >> number_literal) )))) ;)) (expression_statement "auVar17[8] = local_8e;" (assignment_expression "auVar17[8] = local_8e" (subscript_expression "auVar17[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined8 *)(param_4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_4 + 0x10)" * (cast_expression "(undefined8 *)(param_4 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "auVar17._0_8_ = param_2;" (assignment_expression "auVar17._0_8_ = param_2" (field_expression "auVar17._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar17;" return identifier ;) }))
(translation_unit "undefined1  [16]\nFUN_004b24a0(undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;\n  char cVar2;\n  undefined8 uVar3;\n  undefined8 uVar4;\n  int iVar5;\n  long lVar6;\n  long lVar7;\n  byte *pbVar8;\n  long lVar9;\n  long lVar10;\n  undefined8 *puVar11;\n  bool bVar12;\n  undefined1 **ppuVar13;\n  ulong uVar14;\n  ulong uVar15;\n  uint uVar16;\n  byte *pbVar17;\n  byte *pbVar18;\n  undefined1 auVar19 [16];\n  char local_8e;\n  char *local_88;\n  ulong local_80;\n  undefined1 local_4d;\n  undefined1 local_4c [4];\n  undefined1 *local_48;\n  undefined1 *local_40 [2];\n  \n  local_8e = (char)param_3;\n  lVar6 = FUN_004afd30(param_4 + 0xd0);\n  lVar7 = FUN_004a0a70(&DAT_00689d70);\n  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8);\n  lVar10 = *plVar1;\n  if (lVar10 == 0) {\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0x70);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)((long)puVar11 + 0x22) = 0;\n    *puVar11 = &PTR_FUN_00677260;\n    *(undefined2 *)(puVar11 + 4) = 0;\n    puVar11[5] = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    *(undefined4 *)(puVar11 + 0xc) = 0;\n    *(undefined1 *)((long)puVar11 + 0x6f) = 0;\n                    \n    FUN_004b0f50(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);\n    lVar10 = *plVar1;\n  }\n  pbVar18 = (byte *)*param_6;\n  pbVar17 = pbVar18 + -0x18;\n  if (*pbVar18 == *(byte *)(lVar10 + 100)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);\n    if (*(long *)pbVar17 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar10 + 0x48);\n    uVar14 = *(ulong *)(lVar10 + 0x50);\n    pbVar18 = pbVar18 + 1;\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }\n  pbVar17 = pbVar18 + *(long *)pbVar17;\n  if ((pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)) {\n    do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);\n    lVar6 = (long)pbVar8 - (long)pbVar18;\njoined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }\n  }\nLAB_004b2580:\n  auVar19._9_7_ = (int7)(param_3 >> 8);\n  auVar19[8] = local_8e;\n  *(undefined8 *)(param_4 + 0x10) = 0;\n  auVar19._0_8_ = param_2;\n  return auVar19;\n}\n\n" (expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" identifier [ number_literal ]) ;) (declaration "FUN_004b24a0(undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;" (macro_type_specifier "FUN_004b24a0(undefined8" identifier ( (type_descriptor "undefined8" type_identifier) )) identifier , (ERROR "long" identifier) (pointer_declarator "*param_2" * identifier) , (ERROR "ulong" identifier) identifier , (ERROR "long" identifier) identifier , (ERROR "char" identifier) identifier , (ERROR "undefined8 *param_6)\n\n{\n  long" identifier (pointer_declarator "*param_6" * identifier) ) { long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar8;" type_identifier (pointer_declarator "*pbVar8" * identifier) ;) (declaration "long lVar9;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar10;" (sized_type_specifier "long" long) identifier ;) (declaration "undefined8 *puVar11;" type_identifier (pointer_declarator "*puVar11" * identifier) ;) (declaration "bool bVar12;" primitive_type identifier ;) (declaration "undefined1 **ppuVar13;" type_identifier (pointer_declarator "**ppuVar13" * (pointer_declarator "*ppuVar13" * identifier)) ;) (declaration "ulong uVar14;" type_identifier identifier ;) (declaration "ulong uVar15;" type_identifier identifier ;) (declaration "uint uVar16;" type_identifier identifier ;) (declaration "byte *pbVar17;" type_identifier (pointer_declarator "*pbVar17" * identifier) ;) (declaration "byte *pbVar18;" type_identifier (pointer_declarator "*pbVar18" * identifier) ;) (declaration "undefined1 auVar19 [16];" type_identifier (array_declarator "auVar19 [16]" identifier [ number_literal ]) ;) (declaration "char local_8e;" primitive_type identifier ;) (declaration "char *local_88;" primitive_type (pointer_declarator "*local_88" * identifier) ;) (declaration "ulong local_80;" type_identifier identifier ;) (declaration "undefined1 local_4d;" type_identifier identifier ;) (declaration "undefined1 local_4c [4];" type_identifier (array_declarator "local_4c [4]" identifier [ number_literal ]) ;) (declaration "undefined1 *local_48;" type_identifier (pointer_declarator "*local_48" * identifier) ;) (declaration "undefined1 *local_40 [2];" type_identifier (pointer_declarator "*local_40 [2]" * (array_declarator "local_40 [2]" identifier [ number_literal ])) ;) (expression_statement "local_8e = (char)param_3;" (assignment_expression "local_8e = (char)param_3" identifier = (cast_expression "(char)param_3" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "lVar6 = FUN_004afd30(param_4 + 0xd0);" (assignment_expression "lVar6 = FUN_004afd30(param_4 + 0xd0)" identifier = (call_expression "FUN_004afd30(param_4 + 0xd0)" identifier (argument_list "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) ;) (expression_statement "lVar7 = FUN_004a0a70(&DAT_00689d70);" (assignment_expression "lVar7 = FUN_004a0a70(&DAT_00689d70)" identifier = (call_expression "FUN_004a0a70(&DAT_00689d70)" identifier (argument_list "(&DAT_00689d70)" ( (pointer_expression "&DAT_00689d70" & identifier) )))) ;) (expression_statement "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8);" (assignment_expression "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8)" identifier = (cast_expression "(long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8)" ( (binary_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8" (pointer_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18)" * (cast_expression "(long *)(*(long *)(param_4 + 0xd0) + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(param_4 + 0xd0) + 0x18)" ( (binary_expression "*(long *)(param_4 + 0xd0) + 0x18" (pointer_expression "*(long *)(param_4 + 0xd0)" * (cast_expression "(long *)(param_4 + 0xd0)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) + number_literal) )))) + (binary_expression "lVar7 * 8" identifier * number_literal)) )))) ;) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) (if_statement "if (lVar10 == 0) {\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0x70);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)((long)puVar11 + 0x22) = 0;\n    *puVar11 = &PTR_FUN_00677260;\n    *(undefined2 *)(puVar11 + 4) = 0;\n    puVar11[5] = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    *(undefined4 *)(puVar11 + 0xc) = 0;\n    *(undefined1 *)((long)puVar11 + 0x6f) = 0;\n                    \n    FUN_004b0f50(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);\n    lVar10 = *plVar1;\n  }" if (parenthesized_expression "(lVar10 == 0)" ( (binary_expression "lVar10 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0x70);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)((long)puVar11 + 0x22) = 0;\n    *puVar11 = &PTR_FUN_00677260;\n    *(undefined2 *)(puVar11 + 4) = 0;\n    puVar11[5] = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    *(undefined4 *)(puVar11 + 0xc) = 0;\n    *(undefined1 *)((long)puVar11 + 0x6f) = 0;\n                    \n    FUN_004b0f50(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);\n    lVar10 = *plVar1;\n  }" { (expression_statement "puVar11 = (undefined8 *)FUN_0049cb60(0x70);" (assignment_expression "puVar11 = (undefined8 *)FUN_0049cb60(0x70)" identifier = (cast_expression "(undefined8 *)FUN_0049cb60(0x70)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0049cb60(0x70)" identifier (argument_list "(0x70)" ( number_literal ))))) ;) (expression_statement "*(undefined4 *)(puVar11 + 1) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 1) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 1)" * (cast_expression "(undefined4 *)(puVar11 + 1)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 1)" ( (binary_expression "puVar11 + 1" identifier + number_literal) )))) = number_literal) ;) (expression_statement "puVar11[2] = 0;" (assignment_expression "puVar11[2] = 0" (subscript_expression "puVar11[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[3] = 0;" (assignment_expression "puVar11[3] = 0" (subscript_expression "puVar11[3]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar11 + 0x22) = 0;" (assignment_expression "*(undefined1 *)((long)puVar11 + 0x22) = 0" (pointer_expression "*(undefined1 *)((long)puVar11 + 0x22)" * (cast_expression "(undefined1 *)((long)puVar11 + 0x22)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar11 + 0x22)" ( (binary_expression "(long)puVar11 + 0x22" (cast_expression "(long)puVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*puVar11 = &PTR_FUN_00677260;" (assignment_expression "*puVar11 = &PTR_FUN_00677260" (pointer_expression "*puVar11" * identifier) = (pointer_expression "&PTR_FUN_00677260" & identifier)) ;) (expression_statement "*(undefined2 *)(puVar11 + 4) = 0;" (assignment_expression "*(undefined2 *)(puVar11 + 4) = 0" (pointer_expression "*(undefined2 *)(puVar11 + 4)" * (cast_expression "(undefined2 *)(puVar11 + 4)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 4)" ( (binary_expression "puVar11 + 4" identifier + number_literal) )))) = number_literal) ;) (expression_statement "puVar11[5] = 0;" (assignment_expression "puVar11[5] = 0" (subscript_expression "puVar11[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[6] = 0;" (assignment_expression "puVar11[6] = 0" (subscript_expression "puVar11[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[7] = 0;" (assignment_expression "puVar11[7] = 0" (subscript_expression "puVar11[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[8] = 0;" (assignment_expression "puVar11[8] = 0" (subscript_expression "puVar11[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[9] = 0;" (assignment_expression "puVar11[9] = 0" (subscript_expression "puVar11[9]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[10] = 0;" (assignment_expression "puVar11[10] = 0" (subscript_expression "puVar11[10]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar11[0xb] = 0;" (assignment_expression "puVar11[0xb] = 0" (subscript_expression "puVar11[0xb]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "*(undefined4 *)(puVar11 + 0xc) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 0xc) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 0xc)" * (cast_expression "(undefined4 *)(puVar11 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar11 + 0xc)" ( (binary_expression "puVar11 + 0xc" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined1 *)((long)puVar11 + 0x6f) = 0;" (assignment_expression "*(undefined1 *)((long)puVar11 + 0x6f) = 0" (pointer_expression "*(undefined1 *)((long)puVar11 + 0x6f)" * (cast_expression "(undefined1 *)((long)puVar11 + 0x6f)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar11 + 0x6f)" ( (binary_expression "(long)puVar11 + 0x6f" (cast_expression "(long)puVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "FUN_004b0f50(puVar11,param_4 + 0xd0);" (call_expression "FUN_004b0f50(puVar11,param_4 + 0xd0)" identifier (argument_list "(puVar11,param_4 + 0xd0)" ( identifier , (binary_expression "param_4 + 0xd0" identifier + number_literal) ))) ;) (expression_statement "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);" (call_expression "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7)" identifier (argument_list "(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7)" ( (pointer_expression "*(undefined8 *)(param_4 + 0xd0)" * (cast_expression "(undefined8 *)(param_4 + 0xd0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0xd0)" ( (binary_expression "param_4 + 0xd0" identifier + number_literal) )))) , identifier , identifier ))) ;) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" identifier = (pointer_expression "*plVar1" * identifier)) ;) })) (expression_statement "pbVar18 = (byte *)*param_6;" (assignment_expression "pbVar18 = (byte *)*param_6" identifier = (cast_expression "(byte *)*param_6" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_6" * identifier))) ;) (expression_statement "pbVar17 = pbVar18 + -0x18;" (assignment_expression "pbVar17 = pbVar18 + -0x18" identifier = (binary_expression "pbVar18 + -0x18" identifier + number_literal)) ;) (if_statement "if (*pbVar18 == *(byte *)(lVar10 + 100)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);\n    if (*(long *)pbVar17 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar10 + 0x48);\n    uVar14 = *(ulong *)(lVar10 + 0x50);\n    pbVar18 = pbVar18 + 1;\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }" if (parenthesized_expression "(*pbVar18 == *(byte *)(lVar10 + 100))" ( (binary_expression "*pbVar18 == *(byte *)(lVar10 + 100)" (pointer_expression "*pbVar18" * identifier) == (pointer_expression "*(byte *)(lVar10 + 100)" * (cast_expression "(byte *)(lVar10 + 100)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 100)" ( (binary_expression "lVar10 + 100" identifier + number_literal) ))))) )) (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);\n    if (*(long *)pbVar17 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar10 + 0x48);\n    uVar14 = *(ulong *)(lVar10 + 0x50);\n    pbVar18 = pbVar18 + 1;\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 0x60)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar10 + 0x60)" * (cast_expression "(undefined1 (*) [4])(lVar10 + 0x60)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar10 + 0x60)" ( (binary_expression "lVar10 + 0x60" identifier + number_literal) ))))) ;) (if_statement "if (*(long *)pbVar17 == 0) goto LAB_004b2580;" if (parenthesized_expression "(*(long *)pbVar17 == 0)" ( (binary_expression "*(long *)pbVar17 == 0" (pointer_expression "*(long *)pbVar17" * (cast_expression "(long *)pbVar17" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)) == number_literal) )) (goto_statement "goto LAB_004b2580;" goto statement_identifier ;)) (expression_statement "local_88 = *(char **)(lVar10 + 0x48);" (assignment_expression "local_88 = *(char **)(lVar10 + 0x48)" identifier = (pointer_expression "*(char **)(lVar10 + 0x48)" * (cast_expression "(char **)(lVar10 + 0x48)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar10 + 0x48)" ( (binary_expression "lVar10 + 0x48" identifier + number_literal) ))))) ;) (expression_statement "uVar14 = *(ulong *)(lVar10 + 0x50);" (assignment_expression "uVar14 = *(ulong *)(lVar10 + 0x50)" identifier = (pointer_expression "*(ulong *)(lVar10 + 0x50)" * (cast_expression "(ulong *)(lVar10 + 0x50)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x50)" ( (binary_expression "lVar10 + 0x50" identifier + number_literal) ))))) ;) (expression_statement "pbVar18 = pbVar18 + 1;" (assignment_expression "pbVar18 = pbVar18 + 1" identifier = (binary_expression "pbVar18 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }" else (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }" { (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c)" identifier = (pointer_expression "*(undefined1 (*) [4])(lVar10 + 0x5c)" * (cast_expression "(undefined1 (*) [4])(lVar10 + 0x5c)" ( (type_descriptor "undefined1 (*) [4]" type_identifier (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" ( (abstract_pointer_declarator "*" *) )) [ number_literal ])) ) (parenthesized_expression "(lVar10 + 0x5c)" ( (binary_expression "lVar10 + 0x5c" identifier + number_literal) ))))) ;) (expression_statement "uVar14 = *(ulong *)(lVar10 + 0x40);" (assignment_expression "uVar14 = *(ulong *)(lVar10 + 0x40)" identifier = (pointer_expression "*(ulong *)(lVar10 + 0x40)" * (cast_expression "(ulong *)(lVar10 + 0x40)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x40)" ( (binary_expression "lVar10 + 0x40" identifier + number_literal) ))))) ;) (expression_statement "local_88 = *(char **)(lVar10 + 0x38);" (assignment_expression "local_88 = *(char **)(lVar10 + 0x38)" identifier = (pointer_expression "*(char **)(lVar10 + 0x38)" * (cast_expression "(char **)(lVar10 + 0x38)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar10 + 0x38)" ( (binary_expression "lVar10 + 0x38" identifier + number_literal) ))))) ;) }))) (expression_statement "pbVar17 = pbVar18 + *(long *)pbVar17;" (assignment_expression "pbVar17 = pbVar18 + *(long *)pbVar17" identifier = (binary_expression "pbVar18 + *(long *)pbVar17" identifier + (pointer_expression "*(long *)pbVar17" * (cast_expression "(long *)pbVar17" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) identifier)))) ;) (if_statement "if ((pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)) {\n    do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);\n    lVar6 = (long)pbVar8 - (long)pbVar18;\njoined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }\n  }" if (parenthesized_expression "((pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0))" ( (binary_expression "(pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)" (parenthesized_expression "(pbVar18 < pbVar17)" ( (binary_expression "pbVar18 < pbVar17" identifier < identifier) )) && (parenthesized_expression "(pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)" ( (comma_expression "pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0" (assignment_expression "pbVar8 = pbVar18" identifier = identifier) , (binary_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0" (parenthesized_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8)" ( (binary_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8" (pointer_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2)" * (cast_expression "(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2)" ( (binary_expression "*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2" (binary_expression "*(long *)(lVar6 + 0x30) + 1" (pointer_expression "*(long *)(lVar6 + 0x30)" * (cast_expression "(long *)(lVar6 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + 0x30)" ( (binary_expression "lVar6 + 0x30" identifier + number_literal) )))) + number_literal) + (binary_expression "(ulong)*pbVar18 * 2" (binary_expression "(ulong)*pbVar18" (parenthesized_expression "(ulong)" ( identifier )) * identifier) * number_literal)) )))) & number_literal) )) != number_literal)) ))) )) (compound_statement "{\n    do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);\n    lVar6 = (long)pbVar8 - (long)pbVar18;\njoined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }\n  }" { (do_statement "do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);" do (compound_statement "{\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    }" { (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" identifier = (binary_expression "pbVar8 + 1" identifier + number_literal)) ;) (if_statement "if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }" if (parenthesized_expression "(pbVar17 == pbVar8)" ( (binary_expression "pbVar17 == pbVar8" identifier == identifier) )) (compound_statement "{\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }" { (expression_statement "lVar6 = (long)pbVar17 - (long)pbVar18;" (assignment_expression "lVar6 = (long)pbVar17 - (long)pbVar18" identifier = (binary_expression "(long)pbVar17 - (long)pbVar18" (cast_expression "(long)pbVar17" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pbVar18" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (goto_statement "goto joined_r0x004b257e;" goto statement_identifier ;) })) }) while (parenthesized_expression "((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0)" ( (binary_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0" (parenthesized_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8)" ( (binary_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8" (pointer_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2)" * (cast_expression "(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2)" ( (binary_expression "*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2" (binary_expression "*(long *)(lVar6 + 0x30) + 1" (pointer_expression "*(long *)(lVar6 + 0x30)" * (cast_expression "(long *)(lVar6 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar6 + 0x30)" ( (binary_expression "lVar6 + 0x30" identifier + number_literal) )))) + number_literal) + (binary_expression "(ulong)*pbVar8 * 2" (binary_expression "(ulong)*pbVar8" (parenthesized_expression "(ulong)" ( identifier )) * identifier) * number_literal)) )))) & number_literal) )) != number_literal) )) ;) (expression_statement "lVar6 = (long)pbVar8 - (long)pbVar18;" (assignment_expression "lVar6 = (long)pbVar8 - (long)pbVar18" identifier = (binary_expression "(long)pbVar8 - (long)pbVar18" (cast_expression "(long)pbVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)pbVar18" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (labeled_statement "joined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }" statement_identifier : (if_statement "if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }" if (parenthesized_expression "(lVar6 != 0)" ( (binary_expression "lVar6 != 0" identifier != number_literal) )) (compound_statement "{\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }" { (expression_statement "local_48 = &DAT_00689d98;" (assignment_expression "local_48 = &DAT_00689d98" identifier = (pointer_expression "&DAT_00689d98" & identifier)) ;) (expression_statement "FUN_004d1e60(&local_48,lVar6 * 2);" (call_expression "FUN_004d1e60(&local_48,lVar6 * 2)" identifier (argument_list "(&local_48,lVar6 * 2)" ( (pointer_expression "&local_48" & identifier) , (binary_expression "lVar6 * 2" identifier * number_literal) ))) ;) (expression_statement "iVar5 = *(int *)(lVar10 + 0x58);" (assignment_expression "iVar5 = *(int *)(lVar10 + 0x58)" identifier = (pointer_expression "*(int *)(lVar10 + 0x58)" * (cast_expression "(int *)(lVar10 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x58)" ( (binary_expression "lVar10 + 0x58" identifier + number_literal) ))))) ;) (expression_statement "lVar7 = lVar6 - iVar5;" (assignment_expression "lVar7 = lVar6 - iVar5" identifier = (binary_expression "lVar6 - iVar5" identifier - identifier)) ;) (if_statement "if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }" if (parenthesized_expression "(0 < lVar7)" ( (binary_expression "0 < lVar7" number_literal < identifier) )) (compound_statement "{\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }" { (if_statement "if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }" if (parenthesized_expression "(iVar5 < 0)" ( (binary_expression "iVar5 < 0" identifier < number_literal) )) (compound_statement "{\n          lVar7 = lVar6;\n        }" { (expression_statement "lVar7 = lVar6;" (assignment_expression "lVar7 = lVar6" identifier = identifier) ;) })) (if_statement "if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }" if (parenthesized_expression "(*(long *)(lVar10 + 0x18) == 0)" ( (binary_expression "*(long *)(lVar10 + 0x18) == 0" (pointer_expression "*(long *)(lVar10 + 0x18)" * (cast_expression "(long *)(lVar10 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x18)" ( (binary_expression "lVar10 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }" { (expression_statement "FUN_004d19a0(&local_48,pbVar18,lVar7);" (call_expression "FUN_004d19a0(&local_48,pbVar18,lVar7)" identifier (argument_list "(&local_48,pbVar18,lVar7)" ( (pointer_expression "&local_48" & identifier) , identifier , identifier ))) ;) }) (else_clause "else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }" else (compound_statement "{\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }" { (expression_statement "FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);" (call_expression "FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0)" identifier (argument_list "(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0)" ( (pointer_expression "&local_48" & identifier) , number_literal , (pointer_expression "*(undefined8 *)(local_48 + -0x18)" * (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) )))) , (binary_expression "lVar7 * 2" identifier * number_literal) , number_literal ))) ;) (expression_statement "uVar3 = *(undefined8 *)(lVar10 + 0x18);" (assignment_expression "uVar3 = *(undefined8 *)(lVar10 + 0x18)" identifier = (pointer_expression "*(undefined8 *)(lVar10 + 0x18)" * (cast_expression "(undefined8 *)(lVar10 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x18)" ( (binary_expression "lVar10 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "uVar4 = *(undefined8 *)(lVar10 + 0x10);" (assignment_expression "uVar4 = *(undefined8 *)(lVar10 + 0x10)" identifier = (pointer_expression "*(undefined8 *)(lVar10 + 0x10)" * (cast_expression "(undefined8 *)(lVar10 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x10)" ( (binary_expression "lVar10 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "cVar2 = *(char *)(lVar10 + 0x22);" (assignment_expression "cVar2 = *(char *)(lVar10 + 0x22)" identifier = (pointer_expression "*(char *)(lVar10 + 0x22)" * (cast_expression "(char *)(lVar10 + 0x22)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x22)" ( (binary_expression "lVar10 + 0x22" identifier + number_literal) ))))) ;) (expression_statement "FUN_004d1500(&local_48);" (call_expression "FUN_004d1500(&local_48)" identifier (argument_list "(&local_48)" ( (pointer_expression "&local_48" & identifier) ))) ;) (expression_statement "lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);" (assignment_expression "lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7)" identifier = (call_expression "FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7)" identifier (argument_list "(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7)" ( identifier , (cast_expression "(int)cVar2" ( (type_descriptor "int" primitive_type) ) identifier) , identifier , identifier , identifier , (binary_expression "pbVar18 + lVar7" identifier + identifier) )))) ;) (expression_statement "FUN_004d1500(&local_48);" (call_expression "FUN_004d1500(&local_48)" identifier (argument_list "(&local_48)" ( (pointer_expression "&local_48" & identifier) ))) ;) (expression_statement "uVar15 = lVar9 - (long)local_48;" (assignment_expression "uVar15 = lVar9 - (long)local_48" identifier = (binary_expression "lVar9 - (long)local_48" identifier - (cast_expression "(long)local_48" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }" if (parenthesized_expression "(*(ulong *)(local_48 + -0x18) < uVar15)" ( (binary_expression "*(ulong *)(local_48 + -0x18) < uVar15" (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) )))) < identifier) )) (compound_statement "{\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }" { (expression_statement "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);" (call_expression "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15)" identifier (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15)" ( (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" " string_content ") , (string_literal ""basic_string::erase"" " string_content ") , identifier ))) ;) })) (expression_statement "FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);" (call_expression "FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0)" identifier (argument_list "(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0)" ( (pointer_expression "&local_48" & identifier) , identifier , (binary_expression "*(ulong *)(local_48 + -0x18) - uVar15" (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) )))) - identifier) , number_literal ))) ;) }))) (expression_statement "iVar5 = *(int *)(lVar10 + 0x58);" (assignment_expression "iVar5 = *(int *)(lVar10 + 0x58)" identifier = (pointer_expression "*(int *)(lVar10 + 0x58)" * (cast_expression "(int *)(lVar10 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x58)" ( (binary_expression "lVar10 + 0x58" identifier + number_literal) ))))) ;) })) (if_statement "if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }" if (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) (compound_statement "{\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }" { (expression_statement "FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));" (call_expression "FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21))" identifier (argument_list "(&local_48,(int)*(char *)(lVar10 + 0x21))" ( (pointer_expression "&local_48" & identifier) , (cast_expression "(int)*(char *)(lVar10 + 0x21)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(char *)(lVar10 + 0x21)" * (cast_expression "(char *)(lVar10 + 0x21)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x21)" ( (binary_expression "lVar10 + 0x21" identifier + number_literal) ))))) ))) ;) (if_statement "if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }" if (parenthesized_expression "(lVar7 < 0)" ( (binary_expression "lVar7 < 0" identifier < number_literal) )) (compound_statement "{\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }" { (expression_statement "FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));" (call_expression "FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65))" identifier (argument_list "(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65))" ( (pointer_expression "&local_48" & identifier) , (unary_expression "-lVar7" - identifier) , (cast_expression "(int)*(char *)(lVar10 + 0x65)" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*(char *)(lVar10 + 0x65)" * (cast_expression "(char *)(lVar10 + 0x65)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x65)" ( (binary_expression "lVar10 + 0x65" identifier + number_literal) ))))) ))) ;) (expression_statement "FUN_004d20c0(&local_48,pbVar18,lVar6);" (call_expression "FUN_004d20c0(&local_48,pbVar18,lVar6)" identifier (argument_list "(&local_48,pbVar18,lVar6)" ( (pointer_expression "&local_48" & identifier) , identifier , identifier ))) ;) }) (else_clause "else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }" else (compound_statement "{\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }" { (expression_statement "FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));" (call_expression "FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58))" identifier (argument_list "(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58))" ( (pointer_expression "&local_48" & identifier) , (binary_expression "pbVar18 + lVar7" identifier + identifier) , (cast_expression "(long)*(int *)(lVar10 + 0x58)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(lVar10 + 0x58)" * (cast_expression "(int *)(lVar10 + 0x58)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x58)" ( (binary_expression "lVar10 + 0x58" identifier + number_literal) ))))) ))) ;) }))) })) (expression_statement "uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;" (assignment_expression "uVar16 = *(uint *)(param_4 + 0x18) & 0xb0" identifier = (binary_expression "*(uint *)(param_4 + 0x18) & 0xb0" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal)) ;) (expression_statement "local_80 = *(long *)(local_48 + -0x18) + uVar14;" (assignment_expression "local_80 = *(long *)(local_48 + -0x18) + uVar14" identifier = (binary_expression "*(long *)(local_48 + -0x18) + uVar14" (pointer_expression "*(long *)(local_48 + -0x18)" * (cast_expression "(long *)(local_48 + -0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(local_48 + -0x18)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) )))) + identifier)) ;) (if_statement "if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }" if (parenthesized_expression "((*(uint *)(param_4 + 0x18) & 0x200) != 0)" ( (binary_expression "(*(uint *)(param_4 + 0x18) & 0x200) != 0" (parenthesized_expression "(*(uint *)(param_4 + 0x18) & 0x200)" ( (binary_expression "*(uint *)(param_4 + 0x18) & 0x200" (pointer_expression "*(uint *)(param_4 + 0x18)" * (cast_expression "(uint *)(param_4 + 0x18)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x18)" ( (binary_expression "param_4 + 0x18" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }" { (expression_statement "local_80 = local_80 + *(long *)(lVar10 + 0x30);" (assignment_expression "local_80 = local_80 + *(long *)(lVar10 + 0x30)" identifier = (binary_expression "local_80 + *(long *)(lVar10 + 0x30)" identifier + (pointer_expression "*(long *)(lVar10 + 0x30)" * (cast_expression "(long *)(lVar10 + 0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x30)" ( (binary_expression "lVar10 + 0x30" identifier + number_literal) )))))) ;) })) (expression_statement "local_40[0] = &DAT_00689d98;" (assignment_expression "local_40[0] = &DAT_00689d98" (subscript_expression "local_40[0]" identifier [ number_literal ]) = (pointer_expression "&DAT_00689d98" & identifier)) ;) (expression_statement "FUN_004d1e60(local_40,local_80 * 2);" (call_expression "FUN_004d1e60(local_40,local_80 * 2)" identifier (argument_list "(local_40,local_80 * 2)" ( identifier , (binary_expression "local_80 * 2" identifier * number_literal) ))) ;) (expression_statement "uVar15 = *(ulong *)(param_4 + 0x10);" (assignment_expression "uVar15 = *(ulong *)(param_4 + 0x10)" identifier = (pointer_expression "*(ulong *)(param_4 + 0x10)" * (cast_expression "(ulong *)(param_4 + 0x10)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "ppuVar13 = (undefined1 **)local_4c;" (assignment_expression "ppuVar13 = (undefined1 **)local_4c" identifier = (cast_expression "(undefined1 **)local_4c" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) identifier)) ;) (expression_statement "bVar12 = uVar16 == 0x10 && local_80 < uVar15;" (assignment_expression "bVar12 = uVar16 == 0x10 && local_80 < uVar15" identifier = (binary_expression "uVar16 == 0x10 && local_80 < uVar15" (binary_expression "uVar16 == 0x10" identifier == number_literal) && (binary_expression "local_80 < uVar15" identifier < identifier))) ;) (do_statement "do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);" do (compound_statement "{\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      }" { (switch_statement "switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }" switch (parenthesized_expression "(*(undefined1 *)ppuVar13)" ( (pointer_expression "*(undefined1 *)ppuVar13" * (cast_expression "(undefined1 *)ppuVar13" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) )) (compound_statement "{\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }" { (case_statement "case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;" case number_literal : (if_statement "if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }" if (parenthesized_expression "(bVar12)" ( identifier )) (compound_statement "{\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }" { (labeled_statement "LAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);" statement_identifier : (expression_statement "FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);" (call_expression "FUN_004d2230(local_40,uVar15 - local_80,(int)param_5)" identifier (argument_list "(local_40,uVar15 - local_80,(int)param_5)" ( identifier , (binary_expression "uVar15 - local_80" identifier - identifier) , (cast_expression "(int)param_5" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;)) })) (break_statement "break;" break ;)) (case_statement "case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;" case number_literal : (if_statement "if (bVar12) goto LAB_004b27c0;" if (parenthesized_expression "(bVar12)" ( identifier )) (goto_statement "goto LAB_004b27c0;" goto statement_identifier ;)) (expression_statement "FUN_004d2340(local_40,(int)param_5);" (call_expression "FUN_004d2340(local_40,(int)param_5)" identifier (argument_list "(local_40,(int)param_5)" ( identifier , (cast_expression "(int)param_5" ( (type_descriptor "int" primitive_type) ) identifier) ))) ;) (break_statement "break;" break ;)) (case_statement "case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;" case number_literal : (if_statement "if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }" if (parenthesized_expression "((*(byte *)(param_4 + 0x19) & 2) != 0)" ( (binary_expression "(*(byte *)(param_4 + 0x19) & 2) != 0" (parenthesized_expression "(*(byte *)(param_4 + 0x19) & 2)" ( (binary_expression "*(byte *)(param_4 + 0x19) & 2" (pointer_expression "*(byte *)(param_4 + 0x19)" * (cast_expression "(byte *)(param_4 + 0x19)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x19)" ( (binary_expression "param_4 + 0x19" identifier + number_literal) )))) & number_literal) )) != number_literal) )) (compound_statement "{\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }" { (expression_statement "FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));" (call_expression "FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30))" identifier (argument_list "(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30))" ( identifier , (pointer_expression "*(undefined8 *)(lVar10 + 0x28)" * (cast_expression "(undefined8 *)(lVar10 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x28)" ( (binary_expression "lVar10 + 0x28" identifier + number_literal) )))) , (pointer_expression "*(undefined8 *)(lVar10 + 0x30)" * (cast_expression "(undefined8 *)(lVar10 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar10 + 0x30)" ( (binary_expression "lVar10 + 0x30" identifier + number_literal) )))) ))) ;) })) (break_statement "break;" break ;)) (case_statement "case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;" case number_literal : (if_statement "if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }" if (parenthesized_expression "(uVar14 != 0)" ( (binary_expression "uVar14 != 0" identifier != number_literal) )) (compound_statement "{\n            FUN_004d2340(local_40,(int)*local_88);\n          }" { (expression_statement "FUN_004d2340(local_40,(int)*local_88);" (call_expression "FUN_004d2340(local_40,(int)*local_88)" identifier (argument_list "(local_40,(int)*local_88)" ( identifier , (cast_expression "(int)*local_88" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*local_88" * identifier)) ))) ;) })) (break_statement "break;" break ;)) (case_statement "case 4:\n          FUN_004d1f40(local_40,&local_48);" case number_literal : (expression_statement "FUN_004d1f40(local_40,&local_48);" (call_expression "FUN_004d1f40(local_40,&local_48)" identifier (argument_list "(local_40,&local_48)" ( identifier , (pointer_expression "&local_48" & identifier) ))) ;)) })) (expression_statement "ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);" (assignment_expression "ppuVar13 = (undefined1 **)((long)ppuVar13 + 1)" identifier = (cast_expression "(undefined1 **)((long)ppuVar13 + 1)" ( (type_descriptor "undefined1 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "((long)ppuVar13 + 1)" ( (binary_expression "(long)ppuVar13 + 1" (cast_expression "(long)ppuVar13" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ;) }) while (parenthesized_expression "(ppuVar13 != &local_48)" ( (binary_expression "ppuVar13 != &local_48" identifier != (pointer_expression "&local_48" & identifier)) )) ;) (if_statement "if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }" if (parenthesized_expression "(1 < uVar14)" ( (binary_expression "1 < uVar14" number_literal < identifier) )) (compound_statement "{\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }" { (expression_statement "FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);" (call_expression "FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1)" identifier (argument_list "(local_40,local_88 + 1,uVar14 - 1)" ( identifier , (binary_expression "local_88 + 1" identifier + number_literal) , (binary_expression "uVar14 - 1" identifier - number_literal) ))) ;) })) (expression_statement "uVar14 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar14 = *(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) ))))) ;) (if_statement "if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }" if (parenthesized_expression "(uVar14 < uVar15)" ( (binary_expression "uVar14 < uVar15" identifier < identifier) )) (compound_statement "{\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }" { (if_statement "if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }" if (parenthesized_expression "(uVar16 == 0x20)" ( (binary_expression "uVar16 == 0x20" identifier == number_literal) )) (compound_statement "{\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }" { (expression_statement "FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);" (call_expression "FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14)" identifier (argument_list "(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14)" ( identifier , (binary_expression "uVar15 - uVar14" identifier - identifier) , (cast_expression "(int)param_5" ( (type_descriptor "int" primitive_type) ) identifier) , (binary_expression "uVar15 - uVar14" identifier - identifier) ))) ;) (expression_statement "uVar14 = uVar15;" (assignment_expression "uVar14 = uVar15" identifier = identifier) ;) }) (else_clause "else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }" else (compound_statement "{\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }" { (expression_statement "FUN_004d1770(local_40,0,0);" (call_expression "FUN_004d1770(local_40,0,0)" identifier (argument_list "(local_40,0,0)" ( identifier , number_literal , number_literal ))) ;) (expression_statement "uVar14 = uVar15;" (assignment_expression "uVar14 = uVar15" identifier = identifier) ;) }))) })) (if_statement "if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }" if (parenthesized_expression "(local_8e == '\0')" ( (binary_expression "local_8e == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }" { (expression_statement "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);" (assignment_expression "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14)" identifier = (call_expression "(**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14)" (parenthesized_expression "(**(code **)(*param_2 + 0x60))" ( (pointer_expression "**(code **)(*param_2 + 0x60)" * (pointer_expression "*(code **)(*param_2 + 0x60)" * (cast_expression "(code **)(*param_2 + 0x60)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_2 + 0x60)" ( (binary_expression "*param_2 + 0x60" (pointer_expression "*param_2" * identifier) + number_literal) ))))) )) (argument_list "(param_2,local_40[0],(long)(int)uVar14)" ( identifier , (subscript_expression "local_40[0]" identifier [ number_literal ]) , (cast_expression "(long)(int)uVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)uVar14" ( (type_descriptor "int" primitive_type) ) identifier)) )))) ;) (expression_statement "local_8e = (int)uVar14 != lVar10;" (assignment_expression "local_8e = (int)uVar14 != lVar10" identifier = (binary_expression "(int)uVar14 != lVar10" (cast_expression "(int)uVar14" ( (type_descriptor "int" primitive_type) ) identifier) != identifier)) ;) })) (expression_statement "param_3 = param_3 & 0xffffffffffffff00;" (assignment_expression "param_3 = param_3 & 0xffffffffffffff00" identifier = (binary_expression "param_3 & 0xffffffffffffff00" identifier & number_literal)) ;) (if_statement "if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }" if (parenthesized_expression "(local_40[0] + -0x18 != PTR_DAT_0067bc38)" ( (binary_expression "local_40[0] + -0x18 != PTR_DAT_0067bc38" (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) != identifier) )) (compound_statement "{\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }" { (expression_statement "FUN_004ad930(local_40[0] + -0x18,&local_4d);" (call_expression "FUN_004ad930(local_40[0] + -0x18,&local_4d)" identifier (argument_list "(local_40[0] + -0x18,&local_4d)" ( (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_4d" & identifier) ))) ;) })) (if_statement "if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }" if (parenthesized_expression "(local_48 + -0x18 != PTR_DAT_0067bc38)" ( (binary_expression "local_48 + -0x18 != PTR_DAT_0067bc38" (binary_expression "local_48 + -0x18" identifier + number_literal) != identifier) )) (compound_statement "{\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }" { (expression_statement "FUN_004ad930(local_48 + -0x18,&local_4d);" (call_expression "FUN_004ad930(local_48 + -0x18,&local_4d)" identifier (argument_list "(local_48 + -0x18,&local_4d)" ( (binary_expression "local_48 + -0x18" identifier + number_literal) , (pointer_expression "&local_4d" & identifier) ))) ;) })) }))) })) (labeled_statement "LAB_004b2580:\n  auVar19._9_7_ = (int7)(param_3 >> 8);" statement_identifier : (expression_statement "auVar19._9_7_ = (int7)(param_3 >> 8);" (assignment_expression "auVar19._9_7_ = (int7)(param_3 >> 8)" (field_expression "auVar19._9_7_" identifier . field_identifier) = (call_expression "(int7)(param_3 >> 8)" (parenthesized_expression "(int7)" ( identifier )) (argument_list "(param_3 >> 8)" ( (binary_expression "param_3 >> 8" identifier >> number_literal) )))) ;)) (expression_statement "auVar19[8] = local_8e;" (assignment_expression "auVar19[8] = local_8e" (subscript_expression "auVar19[8]" identifier [ number_literal ]) = identifier) ;) (expression_statement "*(undefined8 *)(param_4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_4 + 0x10)" * (cast_expression "(undefined8 *)(param_4 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_4 + 0x10)" ( (binary_expression "param_4 + 0x10" identifier + number_literal) )))) = number_literal) ;) (expression_statement "auVar19._0_8_ = param_2;" (assignment_expression "auVar19._0_8_ = param_2" (field_expression "auVar19._0_8_" identifier . field_identifier) = identifier) ;) (return_statement "return auVar19;" return identifier ;) (ERROR "}" }))
(translation_unit (expression_statement (subscript_expression IDENT [ LIT ]) ;) (declaration (macro_type_specifier IDENT ( (type_descriptor TYPE) )) IDENT , (ERROR IDENT) (pointer_declarator * IDENT) , (ERROR IDENT) IDENT , (ERROR IDENT) IDENT , (ERROR IDENT) IDENT , (ERROR IDENT (pointer_declarator * IDENT) ) { long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * (pointer_declarator * IDENT)) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * (array_declarator IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) )))) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_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) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , IDENT , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_array_declarator (abstract_parenthesized_declarator ( (abstract_pointer_declarator *) )) [ LIT ])) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) IDENT)) == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_array_declarator (abstract_parenthesized_declarator ( (abstract_pointer_declarator *) )) [ LIT ])) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) IDENT)))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * LIT)) )))) & LIT) )) != LIT)) ))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (goto_statement goto statement_identifier ;) })) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT) + (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * IDENT) * LIT)) )))) & LIT) )) != LIT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (binary_expression IDENT * LIT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (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 (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , LIT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) , (binary_expression IDENT * LIT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE) ) IDENT) , IDENT , IDENT , IDENT , (binary_expression IDENT + IDENT) )))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_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 ( (string_literal " string_content ") , (string_literal " string_content ") , IDENT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) - IDENT) , LIT ))) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (unary_expression - IDENT) , (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (binary_expression IDENT + IDENT) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ))) ;) }))) })) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression & IDENT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT * LIT) ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT == LIT) && (binary_expression IDENT < IDENT))) ;) (do_statement do (compound_statement { (switch_statement switch (parenthesized_expression ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) )) (compound_statement { (case_statement case LIT : (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT - IDENT) , (cast_expression ( (type_descriptor TYPE) ) IDENT) ))) ;)) })) (break_statement break ;)) (case_statement case LIT : (if_statement if (parenthesized_expression ( IDENT )) (goto_statement goto statement_identifier ;)) (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE) ) IDENT) ))) ;) (break_statement break ;)) (case_statement case LIT : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (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) )))) ))) ;) })) (break_statement break ;)) (case_statement case LIT : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) ))) ;) })) (break_statement break ;)) (case_statement case LIT : (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) ))) ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (pointer_expression & IDENT)) )) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) , (binary_expression IDENT - LIT) ))) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT - IDENT) , (cast_expression ( (type_descriptor TYPE) ) IDENT) , (binary_expression IDENT - IDENT) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , LIT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (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 , (subscript_expression IDENT [ LIT ]) , (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) != IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) , (pointer_expression & IDENT) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (pointer_expression & IDENT) ))) ;) })) }))) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT >> LIT) )))) ;)) (expression_statement (assignment_expression (subscript_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) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = IDENT) ;) (return_statement return IDENT ;) (ERROR }))
(expression_statement "undefined1  [16]" (subscript_expression "undefined1  [16]" (identifier "undefined1") ([ "[") (number_literal "16") (] "]")) (; "")) (declaration "FUN_004b24a0(undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,\n            undefined8 *param_6)\n\n{\n  long *plVar1;" (macro_type_specifier "FUN_004b24a0(undefined8" (identifier "FUN_004b24a0") (( "(") (type_descriptor "undefined8" (type_identifier "undefined8")) () "")) (identifier "param_1") (, ",") (ERROR "long" (identifier "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2")) (, ",") (ERROR "ulong" (identifier "ulong")) (identifier "param_3") (, ",") (ERROR "long" (identifier "long")) (identifier "param_4") (, ",") (ERROR "char" (identifier "char")) (identifier "param_5") (, ",") (ERROR "undefined8 *param_6)\n\n{\n  long" (identifier "undefined8") (pointer_declarator "*param_6" (* "*") (identifier "param_6")) () ")") ({ "{") (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "byte *pbVar8;" (type_identifier "byte") (pointer_declarator "*pbVar8" (* "*") (identifier "pbVar8")) (; ";")) (declaration "long lVar9;" (sized_type_specifier "long" (long "long")) (identifier "lVar9") (; ";")) (declaration "long lVar10;" (sized_type_specifier "long" (long "long")) (identifier "lVar10") (; ";")) (declaration "undefined8 *puVar11;" (type_identifier "undefined8") (pointer_declarator "*puVar11" (* "*") (identifier "puVar11")) (; ";")) (declaration "bool bVar12;" (primitive_type "bool") (identifier "bVar12") (; ";")) (declaration "undefined1 **ppuVar13;" (type_identifier "undefined1") (pointer_declarator "**ppuVar13" (* "*") (pointer_declarator "*ppuVar13" (* "*") (identifier "ppuVar13"))) (; ";")) (declaration "ulong uVar14;" (type_identifier "ulong") (identifier "uVar14") (; ";")) (declaration "ulong uVar15;" (type_identifier "ulong") (identifier "uVar15") (; ";")) (declaration "uint uVar16;" (type_identifier "uint") (identifier "uVar16") (; ";")) (declaration "byte *pbVar17;" (type_identifier "byte") (pointer_declarator "*pbVar17" (* "*") (identifier "pbVar17")) (; ";")) (declaration "byte *pbVar18;" (type_identifier "byte") (pointer_declarator "*pbVar18" (* "*") (identifier "pbVar18")) (; ";")) (declaration "undefined1 auVar19 [16];" (type_identifier "undefined1") (array_declarator "auVar19 [16]" (identifier "auVar19") ([ "[") (number_literal "16") (] "]")) (; ";")) (declaration "char local_8e;" (primitive_type "char") (identifier "local_8e") (; ";")) (declaration "char *local_88;" (primitive_type "char") (pointer_declarator "*local_88" (* "*") (identifier "local_88")) (; ";")) (declaration "ulong local_80;" (type_identifier "ulong") (identifier "local_80") (; ";")) (declaration "undefined1 local_4d;" (type_identifier "undefined1") (identifier "local_4d") (; ";")) (declaration "undefined1 local_4c [4];" (type_identifier "undefined1") (array_declarator "local_4c [4]" (identifier "local_4c") ([ "[") (number_literal "4") (] "]")) (; ";")) (declaration "undefined1 *local_48;" (type_identifier "undefined1") (pointer_declarator "*local_48" (* "*") (identifier "local_48")) (; ";")) (declaration "undefined1 *local_40 [2];" (type_identifier "undefined1") (pointer_declarator "*local_40 [2]" (* "*") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "local_8e = (char)param_3;" (assignment_expression "local_8e = (char)param_3" (identifier "local_8e") (= "=") (cast_expression "(char)param_3" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "param_3"))) (; ";")) (expression_statement "lVar6 = FUN_004afd30(param_4 + 0xd0);" (assignment_expression "lVar6 = FUN_004afd30(param_4 + 0xd0)" (identifier "lVar6") (= "=") (call_expression "FUN_004afd30(param_4 + 0xd0)" (identifier "FUN_004afd30") (argument_list "(param_4 + 0xd0)" (( "(") (binary_expression "param_4 + 0xd0" (identifier "param_4") (+ "+") (number_literal "0xd0")) () ")")))) (; ";")) (expression_statement "lVar7 = FUN_004a0a70(&DAT_00689d70);" (assignment_expression "lVar7 = FUN_004a0a70(&DAT_00689d70)" (identifier "lVar7") (= "=") (call_expression "FUN_004a0a70(&DAT_00689d70)" (identifier "FUN_004a0a70") (argument_list "(&DAT_00689d70)" (( "(") (pointer_expression "&DAT_00689d70" (& "&") (identifier "DAT_00689d70")) () ")")))) (; ";")) (expression_statement "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8);" (assignment_expression "plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8)" (identifier "plVar1") (= "=") (cast_expression "(long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8)" (( "(") (binary_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8" (pointer_expression "*(long *)(*(long *)(param_4 + 0xd0) + 0x18)" (* "*") (cast_expression "(long *)(*(long *)(param_4 + 0xd0) + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(param_4 + 0xd0) + 0x18)" (( "(") (binary_expression "*(long *)(param_4 + 0xd0) + 0x18" (pointer_expression "*(long *)(param_4 + 0xd0)" (* "*") (cast_expression "(long *)(param_4 + 0xd0)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0xd0)" (( "(") (binary_expression "param_4 + 0xd0" (identifier "param_4") (+ "+") (number_literal "0xd0")) () ")")))) (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (binary_expression "lVar7 * 8" (identifier "lVar7") (* "*") (number_literal "8"))) () ")")))) (; ";")) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" (identifier "lVar10") (= "=") (pointer_expression "*plVar1" (* "*") (identifier "plVar1"))) (; ";")) (if_statement "if (lVar10 == 0) {\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0x70);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)((long)puVar11 + 0x22) = 0;\n    *puVar11 = &PTR_FUN_00677260;\n    *(undefined2 *)(puVar11 + 4) = 0;\n    puVar11[5] = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    *(undefined4 *)(puVar11 + 0xc) = 0;\n    *(undefined1 *)((long)puVar11 + 0x6f) = 0;\n                    \n    FUN_004b0f50(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);\n    lVar10 = *plVar1;\n  }" (if "if") (parenthesized_expression "(lVar10 == 0)" (( "(") (binary_expression "lVar10 == 0" (identifier "lVar10") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n    puVar11 = (undefined8 *)FUN_0049cb60(0x70);\n    *(undefined4 *)(puVar11 + 1) = 0;\n    puVar11[2] = 0;\n    puVar11[3] = 0;\n    *(undefined1 *)((long)puVar11 + 0x22) = 0;\n    *puVar11 = &PTR_FUN_00677260;\n    *(undefined2 *)(puVar11 + 4) = 0;\n    puVar11[5] = 0;\n    puVar11[6] = 0;\n    puVar11[7] = 0;\n    puVar11[8] = 0;\n    puVar11[9] = 0;\n    puVar11[10] = 0;\n    puVar11[0xb] = 0;\n    *(undefined4 *)(puVar11 + 0xc) = 0;\n    *(undefined1 *)((long)puVar11 + 0x6f) = 0;\n                    \n    FUN_004b0f50(puVar11,param_4 + 0xd0);\n    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);\n    lVar10 = *plVar1;\n  }" ({ "{") (expression_statement "puVar11 = (undefined8 *)FUN_0049cb60(0x70);" (assignment_expression "puVar11 = (undefined8 *)FUN_0049cb60(0x70)" (identifier "puVar11") (= "=") (cast_expression "(undefined8 *)FUN_0049cb60(0x70)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0049cb60(0x70)" (identifier "FUN_0049cb60") (argument_list "(0x70)" (( "(") (number_literal "0x70") () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(puVar11 + 1) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 1) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 1)" (* "*") (cast_expression "(undefined4 *)(puVar11 + 1)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 1)" (( "(") (binary_expression "puVar11 + 1" (identifier "puVar11") (+ "+") (number_literal "1")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[2] = 0;" (assignment_expression "puVar11[2] = 0" (subscript_expression "puVar11[2]" (identifier "puVar11") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[3] = 0;" (assignment_expression "puVar11[3] = 0" (subscript_expression "puVar11[3]" (identifier "puVar11") ([ "[") (number_literal "3") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)((long)puVar11 + 0x22) = 0;" (assignment_expression "*(undefined1 *)((long)puVar11 + 0x22) = 0" (pointer_expression "*(undefined1 *)((long)puVar11 + 0x22)" (* "*") (cast_expression "(undefined1 *)((long)puVar11 + 0x22)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar11 + 0x22)" (( "(") (binary_expression "(long)puVar11 + 0x22" (cast_expression "(long)puVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar11")) (+ "+") (number_literal "0x22")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*puVar11 = &PTR_FUN_00677260;" (assignment_expression "*puVar11 = &PTR_FUN_00677260" (pointer_expression "*puVar11" (* "*") (identifier "puVar11")) (= "=") (pointer_expression "&PTR_FUN_00677260" (& "&") (identifier "PTR_FUN_00677260"))) (; ";")) (expression_statement "*(undefined2 *)(puVar11 + 4) = 0;" (assignment_expression "*(undefined2 *)(puVar11 + 4) = 0" (pointer_expression "*(undefined2 *)(puVar11 + 4)" (* "*") (cast_expression "(undefined2 *)(puVar11 + 4)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 4)" (( "(") (binary_expression "puVar11 + 4" (identifier "puVar11") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[5] = 0;" (assignment_expression "puVar11[5] = 0" (subscript_expression "puVar11[5]" (identifier "puVar11") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[6] = 0;" (assignment_expression "puVar11[6] = 0" (subscript_expression "puVar11[6]" (identifier "puVar11") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[7] = 0;" (assignment_expression "puVar11[7] = 0" (subscript_expression "puVar11[7]" (identifier "puVar11") ([ "[") (number_literal "7") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[8] = 0;" (assignment_expression "puVar11[8] = 0" (subscript_expression "puVar11[8]" (identifier "puVar11") ([ "[") (number_literal "8") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[9] = 0;" (assignment_expression "puVar11[9] = 0" (subscript_expression "puVar11[9]" (identifier "puVar11") ([ "[") (number_literal "9") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[10] = 0;" (assignment_expression "puVar11[10] = 0" (subscript_expression "puVar11[10]" (identifier "puVar11") ([ "[") (number_literal "10") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar11[0xb] = 0;" (assignment_expression "puVar11[0xb] = 0" (subscript_expression "puVar11[0xb]" (identifier "puVar11") ([ "[") (number_literal "0xb") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined4 *)(puVar11 + 0xc) = 0;" (assignment_expression "*(undefined4 *)(puVar11 + 0xc) = 0" (pointer_expression "*(undefined4 *)(puVar11 + 0xc)" (* "*") (cast_expression "(undefined4 *)(puVar11 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar11 + 0xc)" (( "(") (binary_expression "puVar11 + 0xc" (identifier "puVar11") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined1 *)((long)puVar11 + 0x6f) = 0;" (assignment_expression "*(undefined1 *)((long)puVar11 + 0x6f) = 0" (pointer_expression "*(undefined1 *)((long)puVar11 + 0x6f)" (* "*") (cast_expression "(undefined1 *)((long)puVar11 + 0x6f)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar11 + 0x6f)" (( "(") (binary_expression "(long)puVar11 + 0x6f" (cast_expression "(long)puVar11" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar11")) (+ "+") (number_literal "0x6f")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_004b0f50(puVar11,param_4 + 0xd0);" (call_expression "FUN_004b0f50(puVar11,param_4 + 0xd0)" (identifier "FUN_004b0f50") (argument_list "(puVar11,param_4 + 0xd0)" (( "(") (identifier "puVar11") (, ",") (binary_expression "param_4 + 0xd0" (identifier "param_4") (+ "+") (number_literal "0xd0")) () ")"))) (; ";")) (expression_statement "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);" (call_expression "FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7)" (identifier "FUN_004a0ee0") (argument_list "(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7)" (( "(") (pointer_expression "*(undefined8 *)(param_4 + 0xd0)" (* "*") (cast_expression "(undefined8 *)(param_4 + 0xd0)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0xd0)" (( "(") (binary_expression "param_4 + 0xd0" (identifier "param_4") (+ "+") (number_literal "0xd0")) () ")")))) (, ",") (identifier "puVar11") (, ",") (identifier "lVar7") () ")"))) (; ";")) (expression_statement "lVar10 = *plVar1;" (assignment_expression "lVar10 = *plVar1" (identifier "lVar10") (= "=") (pointer_expression "*plVar1" (* "*") (identifier "plVar1"))) (; ";")) (} "}"))) (expression_statement "pbVar18 = (byte *)*param_6;" (assignment_expression "pbVar18 = (byte *)*param_6" (identifier "pbVar18") (= "=") (cast_expression "(byte *)*param_6" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_6" (* "*") (identifier "param_6")))) (; ";")) (expression_statement "pbVar17 = pbVar18 + -0x18;" (assignment_expression "pbVar17 = pbVar18 + -0x18" (identifier "pbVar17") (= "=") (binary_expression "pbVar18 + -0x18" (identifier "pbVar18") (+ "+") (number_literal "-0x18"))) (; ";")) (if_statement "if (*pbVar18 == *(byte *)(lVar10 + 100)) {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);\n    if (*(long *)pbVar17 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar10 + 0x48);\n    uVar14 = *(ulong *)(lVar10 + 0x50);\n    pbVar18 = pbVar18 + 1;\n  }\n  else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }" (if "if") (parenthesized_expression "(*pbVar18 == *(byte *)(lVar10 + 100))" (( "(") (binary_expression "*pbVar18 == *(byte *)(lVar10 + 100)" (pointer_expression "*pbVar18" (* "*") (identifier "pbVar18")) (== "==") (pointer_expression "*(byte *)(lVar10 + 100)" (* "*") (cast_expression "(byte *)(lVar10 + 100)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 100)" (( "(") (binary_expression "lVar10 + 100" (identifier "lVar10") (+ "+") (number_literal "100")) () ")"))))) () ")")) (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);\n    if (*(long *)pbVar17 == 0) goto LAB_004b2580;\n    local_88 = *(char **)(lVar10 + 0x48);\n    uVar14 = *(ulong *)(lVar10 + 0x50);\n    pbVar18 = pbVar18 + 1;\n  }" ({ "{") (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 0x60)" (identifier "local_4c") (= "=") (pointer_expression "*(undefined1 (*) [4])(lVar10 + 0x60)" (* "*") (cast_expression "(undefined1 (*) [4])(lVar10 + 0x60)" (( "(") (type_descriptor "undefined1 (*) [4]" (type_identifier "undefined1") (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" (( "(") (abstract_pointer_declarator "*" (* "*")) () ")")) ([ "[") (number_literal "4") (] "]"))) () ")") (parenthesized_expression "(lVar10 + 0x60)" (( "(") (binary_expression "lVar10 + 0x60" (identifier "lVar10") (+ "+") (number_literal "0x60")) () ")"))))) (; ";")) (if_statement "if (*(long *)pbVar17 == 0) goto LAB_004b2580;" (if "if") (parenthesized_expression "(*(long *)pbVar17 == 0)" (( "(") (binary_expression "*(long *)pbVar17 == 0" (pointer_expression "*(long *)pbVar17" (* "*") (cast_expression "(long *)pbVar17" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pbVar17"))) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_004b2580;" (goto "goto") (statement_identifier "LAB_004b2580") (; ";"))) (expression_statement "local_88 = *(char **)(lVar10 + 0x48);" (assignment_expression "local_88 = *(char **)(lVar10 + 0x48)" (identifier "local_88") (= "=") (pointer_expression "*(char **)(lVar10 + 0x48)" (* "*") (cast_expression "(char **)(lVar10 + 0x48)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar10 + 0x48)" (( "(") (binary_expression "lVar10 + 0x48" (identifier "lVar10") (+ "+") (number_literal "0x48")) () ")"))))) (; ";")) (expression_statement "uVar14 = *(ulong *)(lVar10 + 0x50);" (assignment_expression "uVar14 = *(ulong *)(lVar10 + 0x50)" (identifier "uVar14") (= "=") (pointer_expression "*(ulong *)(lVar10 + 0x50)" (* "*") (cast_expression "(ulong *)(lVar10 + 0x50)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x50)" (( "(") (binary_expression "lVar10 + 0x50" (identifier "lVar10") (+ "+") (number_literal "0x50")) () ")"))))) (; ";")) (expression_statement "pbVar18 = pbVar18 + 1;" (assignment_expression "pbVar18 = pbVar18 + 1" (identifier "pbVar18") (= "=") (binary_expression "pbVar18 + 1" (identifier "pbVar18") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }" (else "else") (compound_statement "{\n    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);\n    uVar14 = *(ulong *)(lVar10 + 0x40);\n    local_88 = *(char **)(lVar10 + 0x38);\n  }" ({ "{") (expression_statement "local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);" (assignment_expression "local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c)" (identifier "local_4c") (= "=") (pointer_expression "*(undefined1 (*) [4])(lVar10 + 0x5c)" (* "*") (cast_expression "(undefined1 (*) [4])(lVar10 + 0x5c)" (( "(") (type_descriptor "undefined1 (*) [4]" (type_identifier "undefined1") (abstract_array_declarator "(*) [4]" (abstract_parenthesized_declarator "(*)" (( "(") (abstract_pointer_declarator "*" (* "*")) () ")")) ([ "[") (number_literal "4") (] "]"))) () ")") (parenthesized_expression "(lVar10 + 0x5c)" (( "(") (binary_expression "lVar10 + 0x5c" (identifier "lVar10") (+ "+") (number_literal "0x5c")) () ")"))))) (; ";")) (expression_statement "uVar14 = *(ulong *)(lVar10 + 0x40);" (assignment_expression "uVar14 = *(ulong *)(lVar10 + 0x40)" (identifier "uVar14") (= "=") (pointer_expression "*(ulong *)(lVar10 + 0x40)" (* "*") (cast_expression "(ulong *)(lVar10 + 0x40)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x40)" (( "(") (binary_expression "lVar10 + 0x40" (identifier "lVar10") (+ "+") (number_literal "0x40")) () ")"))))) (; ";")) (expression_statement "local_88 = *(char **)(lVar10 + 0x38);" (assignment_expression "local_88 = *(char **)(lVar10 + 0x38)" (identifier "local_88") (= "=") (pointer_expression "*(char **)(lVar10 + 0x38)" (* "*") (cast_expression "(char **)(lVar10 + 0x38)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar10 + 0x38)" (( "(") (binary_expression "lVar10 + 0x38" (identifier "lVar10") (+ "+") (number_literal "0x38")) () ")"))))) (; ";")) (} "}")))) (expression_statement "pbVar17 = pbVar18 + *(long *)pbVar17;" (assignment_expression "pbVar17 = pbVar18 + *(long *)pbVar17" (identifier "pbVar17") (= "=") (binary_expression "pbVar18 + *(long *)pbVar17" (identifier "pbVar18") (+ "+") (pointer_expression "*(long *)pbVar17" (* "*") (cast_expression "(long *)pbVar17" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pbVar17"))))) (; ";")) (if_statement "if ((pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)) {\n    do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);\n    lVar6 = (long)pbVar8 - (long)pbVar18;\njoined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }\n  }" (if "if") (parenthesized_expression "((pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0))" (( "(") (binary_expression "(pbVar18 < pbVar17) &&\n     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)" (parenthesized_expression "(pbVar18 < pbVar17)" (( "(") (binary_expression "pbVar18 < pbVar17" (identifier "pbVar18") (< "<") (identifier "pbVar17")) () ")")) (&& "&&") (parenthesized_expression "(pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)" (( "(") (comma_expression "pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0" (assignment_expression "pbVar8 = pbVar18" (identifier "pbVar8") (= "=") (identifier "pbVar18")) (, ",") (binary_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0" (parenthesized_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8)" (( "(") (binary_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8" (pointer_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2)" (* "*") (cast_expression "(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2)" (( "(") (binary_expression "*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2" (binary_expression "*(long *)(lVar6 + 0x30) + 1" (pointer_expression "*(long *)(lVar6 + 0x30)" (* "*") (cast_expression "(long *)(lVar6 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + 0x30)" (( "(") (binary_expression "lVar6 + 0x30" (identifier "lVar6") (+ "+") (number_literal "0x30")) () ")")))) (+ "+") (number_literal "1")) (+ "+") (binary_expression "(ulong)*pbVar18 * 2" (binary_expression "(ulong)*pbVar18" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (identifier "pbVar18")) (* "*") (number_literal "2"))) () ")")))) (& "&") (number_literal "8")) () ")")) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (compound_statement "{\n    do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);\n    lVar6 = (long)pbVar8 - (long)pbVar18;\njoined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }\n  }" ({ "{") (do_statement "do {\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);" (do "do") (compound_statement "{\n      pbVar8 = pbVar8 + 1;\n      if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }\n    }" ({ "{") (expression_statement "pbVar8 = pbVar8 + 1;" (assignment_expression "pbVar8 = pbVar8 + 1" (identifier "pbVar8") (= "=") (binary_expression "pbVar8 + 1" (identifier "pbVar8") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (pbVar17 == pbVar8) {\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }" (if "if") (parenthesized_expression "(pbVar17 == pbVar8)" (( "(") (binary_expression "pbVar17 == pbVar8" (identifier "pbVar17") (== "==") (identifier "pbVar8")) () ")")) (compound_statement "{\n        lVar6 = (long)pbVar17 - (long)pbVar18;\n        goto joined_r0x004b257e;\n      }" ({ "{") (expression_statement "lVar6 = (long)pbVar17 - (long)pbVar18;" (assignment_expression "lVar6 = (long)pbVar17 - (long)pbVar18" (identifier "lVar6") (= "=") (binary_expression "(long)pbVar17 - (long)pbVar18" (cast_expression "(long)pbVar17" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar17")) (- "-") (cast_expression "(long)pbVar18" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar18")))) (; ";")) (goto_statement "goto joined_r0x004b257e;" (goto "goto") (statement_identifier "joined_r0x004b257e") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0)" (( "(") (binary_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0" (parenthesized_expression "(*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8)" (( "(") (binary_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8" (pointer_expression "*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2)" (* "*") (cast_expression "(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2)" (( "(") (binary_expression "*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2" (binary_expression "*(long *)(lVar6 + 0x30) + 1" (pointer_expression "*(long *)(lVar6 + 0x30)" (* "*") (cast_expression "(long *)(lVar6 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar6 + 0x30)" (( "(") (binary_expression "lVar6 + 0x30" (identifier "lVar6") (+ "+") (number_literal "0x30")) () ")")))) (+ "+") (number_literal "1")) (+ "+") (binary_expression "(ulong)*pbVar8 * 2" (binary_expression "(ulong)*pbVar8" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (identifier "pbVar8")) (* "*") (number_literal "2"))) () ")")))) (& "&") (number_literal "8")) () ")")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "lVar6 = (long)pbVar8 - (long)pbVar18;" (assignment_expression "lVar6 = (long)pbVar8 - (long)pbVar18" (identifier "lVar6") (= "=") (binary_expression "(long)pbVar8 - (long)pbVar18" (cast_expression "(long)pbVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar8")) (- "-") (cast_expression "(long)pbVar18" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar18")))) (; ";")) (labeled_statement "joined_r0x004b257e:\n    if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }" (statement_identifier "joined_r0x004b257e") (: ":") (if_statement "if (lVar6 != 0) {\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }" (if "if") (parenthesized_expression "(lVar6 != 0)" (( "(") (binary_expression "lVar6 != 0" (identifier "lVar6") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      local_48 = &DAT_00689d98;\n                    \n      FUN_004d1e60(&local_48,lVar6 * 2);\n      iVar5 = *(int *)(lVar10 + 0x58);\n      lVar7 = lVar6 - iVar5;\n      if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }\n      if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }\n      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;\n      local_80 = *(long *)(local_48 + -0x18) + uVar14;\n      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }\n      local_40[0] = &DAT_00689d98;\n                    \n      FUN_004d1e60(local_40,local_80 * 2);\n      uVar15 = *(ulong *)(param_4 + 0x10);\n      ppuVar13 = (undefined1 **)local_4c;\n      bVar12 = uVar16 == 0x10 && local_80 < uVar15;\n      do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);\n      if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }\n      uVar14 = *(ulong *)(local_40[0] + -0x18);\n      if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }\n      if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }\n      param_3 = param_3 & 0xffffffffffffff00;\n      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }\n      if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }\n    }" ({ "{") (expression_statement "local_48 = &DAT_00689d98;" (assignment_expression "local_48 = &DAT_00689d98" (identifier "local_48") (= "=") (pointer_expression "&DAT_00689d98" (& "&") (identifier "DAT_00689d98"))) (; ";")) (expression_statement "FUN_004d1e60(&local_48,lVar6 * 2);" (call_expression "FUN_004d1e60(&local_48,lVar6 * 2)" (identifier "FUN_004d1e60") (argument_list "(&local_48,lVar6 * 2)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (binary_expression "lVar6 * 2" (identifier "lVar6") (* "*") (number_literal "2")) () ")"))) (; ";")) (expression_statement "iVar5 = *(int *)(lVar10 + 0x58);" (assignment_expression "iVar5 = *(int *)(lVar10 + 0x58)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(lVar10 + 0x58)" (* "*") (cast_expression "(int *)(lVar10 + 0x58)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x58)" (( "(") (binary_expression "lVar10 + 0x58" (identifier "lVar10") (+ "+") (number_literal "0x58")) () ")"))))) (; ";")) (expression_statement "lVar7 = lVar6 - iVar5;" (assignment_expression "lVar7 = lVar6 - iVar5" (identifier "lVar7") (= "=") (binary_expression "lVar6 - iVar5" (identifier "lVar6") (- "-") (identifier "iVar5"))) (; ";")) (if_statement "if (0 < lVar7) {\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }" (if "if") (parenthesized_expression "(0 < lVar7)" (( "(") (binary_expression "0 < lVar7" (number_literal "0") (< "<") (identifier "lVar7")) () ")")) (compound_statement "{\n        if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }\n        if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }\n        iVar5 = *(int *)(lVar10 + 0x58);\n      }" ({ "{") (if_statement "if (iVar5 < 0) {\n          lVar7 = lVar6;\n        }" (if "if") (parenthesized_expression "(iVar5 < 0)" (( "(") (binary_expression "iVar5 < 0" (identifier "iVar5") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          lVar7 = lVar6;\n        }" ({ "{") (expression_statement "lVar7 = lVar6;" (assignment_expression "lVar7 = lVar6" (identifier "lVar7") (= "=") (identifier "lVar6")) (; ";")) (} "}"))) (if_statement "if (*(long *)(lVar10 + 0x18) == 0) {\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }\n        else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }" (if "if") (parenthesized_expression "(*(long *)(lVar10 + 0x18) == 0)" (( "(") (binary_expression "*(long *)(lVar10 + 0x18) == 0" (pointer_expression "*(long *)(lVar10 + 0x18)" (* "*") (cast_expression "(long *)(lVar10 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x18)" (( "(") (binary_expression "lVar10 + 0x18" (identifier "lVar10") (+ "+") (number_literal "0x18")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n          FUN_004d19a0(&local_48,pbVar18,lVar7);\n        }" ({ "{") (expression_statement "FUN_004d19a0(&local_48,pbVar18,lVar7);" (call_expression "FUN_004d19a0(&local_48,pbVar18,lVar7)" (identifier "FUN_004d19a0") (argument_list "(&local_48,pbVar18,lVar7)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "pbVar18") (, ",") (identifier "lVar7") () ")"))) (; ";")) (} "}")) (else_clause "else {\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }" (else "else") (compound_statement "{\n          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);\n          uVar3 = *(undefined8 *)(lVar10 + 0x18);\n          uVar4 = *(undefined8 *)(lVar10 + 0x10);\n          cVar2 = *(char *)(lVar10 + 0x22);\n          FUN_004d1500(&local_48);\n          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);\n          FUN_004d1500(&local_48);\n          uVar15 = lVar9 - (long)local_48;\n          if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }\n          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);\n        }" ({ "{") (expression_statement "FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);" (call_expression "FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0)" (identifier "FUN_004d1770") (argument_list "(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (number_literal "0") (, ",") (pointer_expression "*(undefined8 *)(local_48 + -0x18)" (* "*") (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")) () ")")))) (, ",") (binary_expression "lVar7 * 2" (identifier "lVar7") (* "*") (number_literal "2")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "uVar3 = *(undefined8 *)(lVar10 + 0x18);" (assignment_expression "uVar3 = *(undefined8 *)(lVar10 + 0x18)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined8 *)(lVar10 + 0x18)" (* "*") (cast_expression "(undefined8 *)(lVar10 + 0x18)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x18)" (( "(") (binary_expression "lVar10 + 0x18" (identifier "lVar10") (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (expression_statement "uVar4 = *(undefined8 *)(lVar10 + 0x10);" (assignment_expression "uVar4 = *(undefined8 *)(lVar10 + 0x10)" (identifier "uVar4") (= "=") (pointer_expression "*(undefined8 *)(lVar10 + 0x10)" (* "*") (cast_expression "(undefined8 *)(lVar10 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x10)" (( "(") (binary_expression "lVar10 + 0x10" (identifier "lVar10") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "cVar2 = *(char *)(lVar10 + 0x22);" (assignment_expression "cVar2 = *(char *)(lVar10 + 0x22)" (identifier "cVar2") (= "=") (pointer_expression "*(char *)(lVar10 + 0x22)" (* "*") (cast_expression "(char *)(lVar10 + 0x22)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x22)" (( "(") (binary_expression "lVar10 + 0x22" (identifier "lVar10") (+ "+") (number_literal "0x22")) () ")"))))) (; ";")) (expression_statement "FUN_004d1500(&local_48);" (call_expression "FUN_004d1500(&local_48)" (identifier "FUN_004d1500") (argument_list "(&local_48)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";")) (expression_statement "lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);" (assignment_expression "lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7)" (identifier "lVar9") (= "=") (call_expression "FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7)" (identifier "FUN_004b1be0") (argument_list "(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7)" (( "(") (identifier "local_48") (, ",") (cast_expression "(int)cVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "cVar2")) (, ",") (identifier "uVar4") (, ",") (identifier "uVar3") (, ",") (identifier "pbVar18") (, ",") (binary_expression "pbVar18 + lVar7" (identifier "pbVar18") (+ "+") (identifier "lVar7")) () ")")))) (; ";")) (expression_statement "FUN_004d1500(&local_48);" (call_expression "FUN_004d1500(&local_48)" (identifier "FUN_004d1500") (argument_list "(&local_48)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";")) (expression_statement "uVar15 = lVar9 - (long)local_48;" (assignment_expression "uVar15 = lVar9 - (long)local_48" (identifier "uVar15") (= "=") (binary_expression "lVar9 - (long)local_48" (identifier "lVar9") (- "-") (cast_expression "(long)local_48" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "local_48")))) (; ";")) (if_statement "if (*(ulong *)(local_48 + -0x18) < uVar15) {\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }" (if "if") (parenthesized_expression "(*(ulong *)(local_48 + -0x18) < uVar15)" (( "(") (binary_expression "*(ulong *)(local_48 + -0x18) < uVar15" (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")) () ")")))) (< "<") (identifier "uVar15")) () ")")) (compound_statement "{\n                    \n                    \n            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);\n          }" ({ "{") (expression_statement "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15);" (call_expression "FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15)" (identifier "FUN_004dcce0") (argument_list "("%s: __pos (which is %zu) > this->size() (which is %zu)",\n                         "basic_string::erase",uVar15)" (( "(") (string_literal ""%s: __pos (which is %zu) > this->size() (which is %zu)"" (" """) (string_content "%s: __pos (which is %zu) > this->size() (which is %zu)") (" """)) (, ",") (string_literal ""basic_string::erase"" (" """) (string_content "basic_string::erase") (" """)) (, ",") (identifier "uVar15") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);" (call_expression "FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0)" (identifier "FUN_004d1290") (argument_list "(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "uVar15") (, ",") (binary_expression "*(ulong *)(local_48 + -0x18) - uVar15" (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")) () ")")))) (- "-") (identifier "uVar15")) (, ",") (number_literal "0") () ")"))) (; ";")) (} "}")))) (expression_statement "iVar5 = *(int *)(lVar10 + 0x58);" (assignment_expression "iVar5 = *(int *)(lVar10 + 0x58)" (identifier "iVar5") (= "=") (pointer_expression "*(int *)(lVar10 + 0x58)" (* "*") (cast_expression "(int *)(lVar10 + 0x58)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x58)" (( "(") (binary_expression "lVar10 + 0x58" (identifier "lVar10") (+ "+") (number_literal "0x58")) () ")"))))) (; ";")) (} "}"))) (if_statement "if (0 < iVar5) {\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }" (if "if") (parenthesized_expression "(0 < iVar5)" (( "(") (binary_expression "0 < iVar5" (number_literal "0") (< "<") (identifier "iVar5")) () ")")) (compound_statement "{\n                    \n        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));\n        if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }\n      }" ({ "{") (expression_statement "FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));" (call_expression "FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21))" (identifier "FUN_004d2340") (argument_list "(&local_48,(int)*(char *)(lVar10 + 0x21))" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (cast_expression "(int)*(char *)(lVar10 + 0x21)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(char *)(lVar10 + 0x21)" (* "*") (cast_expression "(char *)(lVar10 + 0x21)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x21)" (( "(") (binary_expression "lVar10 + 0x21" (identifier "lVar10") (+ "+") (number_literal "0x21")) () ")"))))) () ")"))) (; ";")) (if_statement "if (lVar7 < 0) {\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }\n        else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }" (if "if") (parenthesized_expression "(lVar7 < 0)" (( "(") (binary_expression "lVar7 < 0" (identifier "lVar7") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));\n          FUN_004d20c0(&local_48,pbVar18,lVar6);\n        }" ({ "{") (expression_statement "FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));" (call_expression "FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65))" (identifier "FUN_004d2230") (argument_list "(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65))" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (unary_expression "-lVar7" (- "-") (identifier "lVar7")) (, ",") (cast_expression "(int)*(char *)(lVar10 + 0x65)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*(char *)(lVar10 + 0x65)" (* "*") (cast_expression "(char *)(lVar10 + 0x65)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x65)" (( "(") (binary_expression "lVar10 + 0x65" (identifier "lVar10") (+ "+") (number_literal "0x65")) () ")"))))) () ")"))) (; ";")) (expression_statement "FUN_004d20c0(&local_48,pbVar18,lVar6);" (call_expression "FUN_004d20c0(&local_48,pbVar18,lVar6)" (identifier "FUN_004d20c0") (argument_list "(&local_48,pbVar18,lVar6)" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (identifier "pbVar18") (, ",") (identifier "lVar6") () ")"))) (; ";")) (} "}")) (else_clause "else {\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }" (else "else") (compound_statement "{\n          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));\n        }" ({ "{") (expression_statement "FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));" (call_expression "FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58))" (identifier "FUN_004d20c0") (argument_list "(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58))" (( "(") (pointer_expression "&local_48" (& "&") (identifier "local_48")) (, ",") (binary_expression "pbVar18 + lVar7" (identifier "pbVar18") (+ "+") (identifier "lVar7")) (, ",") (cast_expression "(long)*(int *)(lVar10 + 0x58)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(lVar10 + 0x58)" (* "*") (cast_expression "(int *)(lVar10 + 0x58)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x58)" (( "(") (binary_expression "lVar10 + 0x58" (identifier "lVar10") (+ "+") (number_literal "0x58")) () ")"))))) () ")"))) (; ";")) (} "}")))) (} "}"))) (expression_statement "uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;" (assignment_expression "uVar16 = *(uint *)(param_4 + 0x18) & 0xb0" (identifier "uVar16") (= "=") (binary_expression "*(uint *)(param_4 + 0x18) & 0xb0" (pointer_expression "*(uint *)(param_4 + 0x18)" (* "*") (cast_expression "(uint *)(param_4 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x18)" (( "(") (binary_expression "param_4 + 0x18" (identifier "param_4") (+ "+") (number_literal "0x18")) () ")")))) (& "&") (number_literal "0xb0"))) (; ";")) (expression_statement "local_80 = *(long *)(local_48 + -0x18) + uVar14;" (assignment_expression "local_80 = *(long *)(local_48 + -0x18) + uVar14" (identifier "local_80") (= "=") (binary_expression "*(long *)(local_48 + -0x18) + uVar14" (pointer_expression "*(long *)(local_48 + -0x18)" (* "*") (cast_expression "(long *)(local_48 + -0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(local_48 + -0x18)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) () ")")))) (+ "+") (identifier "uVar14"))) (; ";")) (if_statement "if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }" (if "if") (parenthesized_expression "((*(uint *)(param_4 + 0x18) & 0x200) != 0)" (( "(") (binary_expression "(*(uint *)(param_4 + 0x18) & 0x200) != 0" (parenthesized_expression "(*(uint *)(param_4 + 0x18) & 0x200)" (( "(") (binary_expression "*(uint *)(param_4 + 0x18) & 0x200" (pointer_expression "*(uint *)(param_4 + 0x18)" (* "*") (cast_expression "(uint *)(param_4 + 0x18)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x18)" (( "(") (binary_expression "param_4 + 0x18" (identifier "param_4") (+ "+") (number_literal "0x18")) () ")")))) (& "&") (number_literal "0x200")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        local_80 = local_80 + *(long *)(lVar10 + 0x30);\n      }" ({ "{") (expression_statement "local_80 = local_80 + *(long *)(lVar10 + 0x30);" (assignment_expression "local_80 = local_80 + *(long *)(lVar10 + 0x30)" (identifier "local_80") (= "=") (binary_expression "local_80 + *(long *)(lVar10 + 0x30)" (identifier "local_80") (+ "+") (pointer_expression "*(long *)(lVar10 + 0x30)" (* "*") (cast_expression "(long *)(lVar10 + 0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x30)" (( "(") (binary_expression "lVar10 + 0x30" (identifier "lVar10") (+ "+") (number_literal "0x30")) () ")")))))) (; ";")) (} "}"))) (expression_statement "local_40[0] = &DAT_00689d98;" (assignment_expression "local_40[0] = &DAT_00689d98" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (= "=") (pointer_expression "&DAT_00689d98" (& "&") (identifier "DAT_00689d98"))) (; ";")) (expression_statement "FUN_004d1e60(local_40,local_80 * 2);" (call_expression "FUN_004d1e60(local_40,local_80 * 2)" (identifier "FUN_004d1e60") (argument_list "(local_40,local_80 * 2)" (( "(") (identifier "local_40") (, ",") (binary_expression "local_80 * 2" (identifier "local_80") (* "*") (number_literal "2")) () ")"))) (; ";")) (expression_statement "uVar15 = *(ulong *)(param_4 + 0x10);" (assignment_expression "uVar15 = *(ulong *)(param_4 + 0x10)" (identifier "uVar15") (= "=") (pointer_expression "*(ulong *)(param_4 + 0x10)" (* "*") (cast_expression "(ulong *)(param_4 + 0x10)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x10)" (( "(") (binary_expression "param_4 + 0x10" (identifier "param_4") (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (expression_statement "ppuVar13 = (undefined1 **)local_4c;" (assignment_expression "ppuVar13 = (undefined1 **)local_4c" (identifier "ppuVar13") (= "=") (cast_expression "(undefined1 **)local_4c" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (identifier "local_4c"))) (; ";")) (expression_statement "bVar12 = uVar16 == 0x10 && local_80 < uVar15;" (assignment_expression "bVar12 = uVar16 == 0x10 && local_80 < uVar15" (identifier "bVar12") (= "=") (binary_expression "uVar16 == 0x10 && local_80 < uVar15" (binary_expression "uVar16 == 0x10" (identifier "uVar16") (== "==") (number_literal "0x10")) (&& "&&") (binary_expression "local_80 < uVar15" (identifier "local_80") (< "<") (identifier "uVar15")))) (; ";")) (do_statement "do {\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      } while (ppuVar13 != &local_48);" (do "do") (compound_statement "{\n        switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }\n        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);\n      }" ({ "{") (switch_statement "switch(*(undefined1 *)ppuVar13) {\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }" (switch "switch") (parenthesized_expression "(*(undefined1 *)ppuVar13)" (( "(") (pointer_expression "*(undefined1 *)ppuVar13" (* "*") (cast_expression "(undefined1 *)ppuVar13" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "ppuVar13"))) () ")")) (compound_statement "{\n        case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;\n        case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;\n        case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;\n        case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;\n        case 4:\n          FUN_004d1f40(local_40,&local_48);\n        }" ({ "{") (case_statement "case 0:\n          if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }\n          break;" (case "case") (number_literal "0") (: ":") (if_statement "if (bVar12) {\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (compound_statement "{\nLAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);\n          }" ({ "{") (labeled_statement "LAB_004b27c0:\n            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);" (statement_identifier "LAB_004b27c0") (: ":") (expression_statement "FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);" (call_expression "FUN_004d2230(local_40,uVar15 - local_80,(int)param_5)" (identifier "FUN_004d2230") (argument_list "(local_40,uVar15 - local_80,(int)param_5)" (( "(") (identifier "local_40") (, ",") (binary_expression "uVar15 - local_80" (identifier "uVar15") (- "-") (identifier "local_80")) (, ",") (cast_expression "(int)param_5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_5")) () ")"))) (; ";"))) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 1:\n          if (bVar12) goto LAB_004b27c0;\n                    \n          FUN_004d2340(local_40,(int)param_5);\n          break;" (case "case") (number_literal "1") (: ":") (if_statement "if (bVar12) goto LAB_004b27c0;" (if "if") (parenthesized_expression "(bVar12)" (( "(") (identifier "bVar12") () ")")) (goto_statement "goto LAB_004b27c0;" (goto "goto") (statement_identifier "LAB_004b27c0") (; ";"))) (expression_statement "FUN_004d2340(local_40,(int)param_5);" (call_expression "FUN_004d2340(local_40,(int)param_5)" (identifier "FUN_004d2340") (argument_list "(local_40,(int)param_5)" (( "(") (identifier "local_40") (, ",") (cast_expression "(int)param_5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_5")) () ")"))) (; ";")) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 2:\n          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }\n          break;" (case "case") (number_literal "2") (: ":") (if_statement "if ((*(byte *)(param_4 + 0x19) & 2) != 0) {\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }" (if "if") (parenthesized_expression "((*(byte *)(param_4 + 0x19) & 2) != 0)" (( "(") (binary_expression "(*(byte *)(param_4 + 0x19) & 2) != 0" (parenthesized_expression "(*(byte *)(param_4 + 0x19) & 2)" (( "(") (binary_expression "*(byte *)(param_4 + 0x19) & 2" (pointer_expression "*(byte *)(param_4 + 0x19)" (* "*") (cast_expression "(byte *)(param_4 + 0x19)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x19)" (( "(") (binary_expression "param_4 + 0x19" (identifier "param_4") (+ "+") (number_literal "0x19")) () ")")))) (& "&") (number_literal "2")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));\n          }" ({ "{") (expression_statement "FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));" (call_expression "FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30))" (identifier "FUN_004d20c0") (argument_list "(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30))" (( "(") (identifier "local_40") (, ",") (pointer_expression "*(undefined8 *)(lVar10 + 0x28)" (* "*") (cast_expression "(undefined8 *)(lVar10 + 0x28)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x28)" (( "(") (binary_expression "lVar10 + 0x28" (identifier "lVar10") (+ "+") (number_literal "0x28")) () ")")))) (, ",") (pointer_expression "*(undefined8 *)(lVar10 + 0x30)" (* "*") (cast_expression "(undefined8 *)(lVar10 + 0x30)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar10 + 0x30)" (( "(") (binary_expression "lVar10 + 0x30" (identifier "lVar10") (+ "+") (number_literal "0x30")) () ")")))) () ")"))) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 3:\n          if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }\n          break;" (case "case") (number_literal "3") (: ":") (if_statement "if (uVar14 != 0) {\n            FUN_004d2340(local_40,(int)*local_88);\n          }" (if "if") (parenthesized_expression "(uVar14 != 0)" (( "(") (binary_expression "uVar14 != 0" (identifier "uVar14") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            FUN_004d2340(local_40,(int)*local_88);\n          }" ({ "{") (expression_statement "FUN_004d2340(local_40,(int)*local_88);" (call_expression "FUN_004d2340(local_40,(int)*local_88)" (identifier "FUN_004d2340") (argument_list "(local_40,(int)*local_88)" (( "(") (identifier "local_40") (, ",") (cast_expression "(int)*local_88" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*local_88" (* "*") (identifier "local_88"))) () ")"))) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";"))) (case_statement "case 4:\n          FUN_004d1f40(local_40,&local_48);" (case "case") (number_literal "4") (: ":") (expression_statement "FUN_004d1f40(local_40,&local_48);" (call_expression "FUN_004d1f40(local_40,&local_48)" (identifier "FUN_004d1f40") (argument_list "(local_40,&local_48)" (( "(") (identifier "local_40") (, ",") (pointer_expression "&local_48" (& "&") (identifier "local_48")) () ")"))) (; ";"))) (} "}"))) (expression_statement "ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);" (assignment_expression "ppuVar13 = (undefined1 **)((long)ppuVar13 + 1)" (identifier "ppuVar13") (= "=") (cast_expression "(undefined1 **)((long)ppuVar13 + 1)" (( "(") (type_descriptor "undefined1 **" (type_identifier "undefined1") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "((long)ppuVar13 + 1)" (( "(") (binary_expression "(long)ppuVar13 + 1" (cast_expression "(long)ppuVar13" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "ppuVar13")) (+ "+") (number_literal "1")) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(ppuVar13 != &local_48)" (( "(") (binary_expression "ppuVar13 != &local_48" (identifier "ppuVar13") (!= "!=") (pointer_expression "&local_48" (& "&") (identifier "local_48"))) () ")")) (; ";")) (if_statement "if (1 < uVar14) {\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }" (if "if") (parenthesized_expression "(1 < uVar14)" (( "(") (binary_expression "1 < uVar14" (number_literal "1") (< "<") (identifier "uVar14")) () ")")) (compound_statement "{\n        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);\n      }" ({ "{") (expression_statement "FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);" (call_expression "FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1)" (identifier "FUN_004d20c0") (argument_list "(local_40,local_88 + 1,uVar14 - 1)" (( "(") (identifier "local_40") (, ",") (binary_expression "local_88 + 1" (identifier "local_88") (+ "+") (number_literal "1")) (, ",") (binary_expression "uVar14 - 1" (identifier "uVar14") (- "-") (number_literal "1")) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar14 = *(ulong *)(local_40[0] + -0x18);" (assignment_expression "uVar14 = *(ulong *)(local_40[0] + -0x18)" (identifier "uVar14") (= "=") (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")) () ")"))))) (; ";")) (if_statement "if (uVar14 < uVar15) {\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }" (if "if") (parenthesized_expression "(uVar14 < uVar15)" (( "(") (binary_expression "uVar14 < uVar15" (identifier "uVar14") (< "<") (identifier "uVar15")) () ")")) (compound_statement "{\n        if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }\n      }" ({ "{") (if_statement "if (uVar16 == 0x20) {\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }\n        else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }" (if "if") (parenthesized_expression "(uVar16 == 0x20)" (( "(") (binary_expression "uVar16 == 0x20" (identifier "uVar16") (== "==") (number_literal "0x20")) () ")")) (compound_statement "{\n                    \n          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);\n          uVar14 = uVar15;\n        }" ({ "{") (expression_statement "FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);" (call_expression "FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14)" (identifier "FUN_004d2230") (argument_list "(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14)" (( "(") (identifier "local_40") (, ",") (binary_expression "uVar15 - uVar14" (identifier "uVar15") (- "-") (identifier "uVar14")) (, ",") (cast_expression "(int)param_5" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_5")) (, ",") (binary_expression "uVar15 - uVar14" (identifier "uVar15") (- "-") (identifier "uVar14")) () ")"))) (; ";")) (expression_statement "uVar14 = uVar15;" (assignment_expression "uVar14 = uVar15" (identifier "uVar14") (= "=") (identifier "uVar15")) (; ";")) (} "}")) (else_clause "else {\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }" (else "else") (compound_statement "{\n          FUN_004d1770(local_40,0,0);\n          uVar14 = uVar15;\n        }" ({ "{") (expression_statement "FUN_004d1770(local_40,0,0);" (call_expression "FUN_004d1770(local_40,0,0)" (identifier "FUN_004d1770") (argument_list "(local_40,0,0)" (( "(") (identifier "local_40") (, ",") (number_literal "0") (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "uVar14 = uVar15;" (assignment_expression "uVar14 = uVar15" (identifier "uVar14") (= "=") (identifier "uVar15")) (; ";")) (} "}")))) (} "}"))) (if_statement "if (local_8e == '\0') {\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }" (if "if") (parenthesized_expression "(local_8e == '\0')" (( "(") (binary_expression "local_8e == '\0'" (identifier "local_8e") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);\n        local_8e = (int)uVar14 != lVar10;\n      }" ({ "{") (expression_statement "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);" (assignment_expression "lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14)" (identifier "lVar10") (= "=") (call_expression "(**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14)" (parenthesized_expression "(**(code **)(*param_2 + 0x60))" (( "(") (pointer_expression "**(code **)(*param_2 + 0x60)" (* "*") (pointer_expression "*(code **)(*param_2 + 0x60)" (* "*") (cast_expression "(code **)(*param_2 + 0x60)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_2 + 0x60)" (( "(") (binary_expression "*param_2 + 0x60" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "0x60")) () ")"))))) () ")")) (argument_list "(param_2,local_40[0],(long)(int)uVar14)" (( "(") (identifier "param_2") (, ",") (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (, ",") (cast_expression "(long)(int)uVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)uVar14" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar14"))) () ")")))) (; ";")) (expression_statement "local_8e = (int)uVar14 != lVar10;" (assignment_expression "local_8e = (int)uVar14 != lVar10" (identifier "local_8e") (= "=") (binary_expression "(int)uVar14 != lVar10" (cast_expression "(int)uVar14" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar14")) (!= "!=") (identifier "lVar10"))) (; ";")) (} "}"))) (expression_statement "param_3 = param_3 & 0xffffffffffffff00;" (assignment_expression "param_3 = param_3 & 0xffffffffffffff00" (identifier "param_3") (= "=") (binary_expression "param_3 & 0xffffffffffffff00" (identifier "param_3") (& "&") (number_literal "0xffffffffffffff00"))) (; ";")) (if_statement "if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }" (if "if") (parenthesized_expression "(local_40[0] + -0x18 != PTR_DAT_0067bc38)" (( "(") (binary_expression "local_40[0] + -0x18 != PTR_DAT_0067bc38" (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) (!= "!=") (identifier "PTR_DAT_0067bc38")) () ")")) (compound_statement "{\n        FUN_004ad930(local_40[0] + -0x18,&local_4d);\n      }" ({ "{") (expression_statement "FUN_004ad930(local_40[0] + -0x18,&local_4d);" (call_expression "FUN_004ad930(local_40[0] + -0x18,&local_4d)" (identifier "FUN_004ad930") (argument_list "(local_40[0] + -0x18,&local_4d)" (( "(") (binary_expression "local_40[0] + -0x18" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (+ "+") (number_literal "-0x18")) (, ",") (pointer_expression "&local_4d" (& "&") (identifier "local_4d")) () ")"))) (; ";")) (} "}"))) (if_statement "if (local_48 + -0x18 != PTR_DAT_0067bc38) {\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }" (if "if") (parenthesized_expression "(local_48 + -0x18 != PTR_DAT_0067bc38)" (( "(") (binary_expression "local_48 + -0x18 != PTR_DAT_0067bc38" (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) (!= "!=") (identifier "PTR_DAT_0067bc38")) () ")")) (compound_statement "{\n        FUN_004ad930(local_48 + -0x18,&local_4d);\n      }" ({ "{") (expression_statement "FUN_004ad930(local_48 + -0x18,&local_4d);" (call_expression "FUN_004ad930(local_48 + -0x18,&local_4d)" (identifier "FUN_004ad930") (argument_list "(local_48 + -0x18,&local_4d)" (( "(") (binary_expression "local_48 + -0x18" (identifier "local_48") (+ "+") (number_literal "-0x18")) (, ",") (pointer_expression "&local_4d" (& "&") (identifier "local_4d")) () ")"))) (; ";")) (} "}"))) (} "}")))) (} "}"))) (labeled_statement "LAB_004b2580:\n  auVar19._9_7_ = (int7)(param_3 >> 8);" (statement_identifier "LAB_004b2580") (: ":") (expression_statement "auVar19._9_7_ = (int7)(param_3 >> 8);" (assignment_expression "auVar19._9_7_ = (int7)(param_3 >> 8)" (field_expression "auVar19._9_7_" (identifier "auVar19") (. ".") (field_identifier "_9_7_")) (= "=") (call_expression "(int7)(param_3 >> 8)" (parenthesized_expression "(int7)" (( "(") (identifier "int7") () ")")) (argument_list "(param_3 >> 8)" (( "(") (binary_expression "param_3 >> 8" (identifier "param_3") (>> ">>") (number_literal "8")) () ")")))) (; ";"))) (expression_statement "auVar19[8] = local_8e;" (assignment_expression "auVar19[8] = local_8e" (subscript_expression "auVar19[8]" (identifier "auVar19") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "local_8e")) (; ";")) (expression_statement "*(undefined8 *)(param_4 + 0x10) = 0;" (assignment_expression "*(undefined8 *)(param_4 + 0x10) = 0" (pointer_expression "*(undefined8 *)(param_4 + 0x10)" (* "*") (cast_expression "(undefined8 *)(param_4 + 0x10)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_4 + 0x10)" (( "(") (binary_expression "param_4 + 0x10" (identifier "param_4") (+ "+") (number_literal "0x10")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "auVar19._0_8_ = param_2;" (assignment_expression "auVar19._0_8_ = param_2" (field_expression "auVar19._0_8_" (identifier "auVar19") (. ".") (field_identifier "_0_8_")) (= "=") (identifier "param_2")) (; ";")) (return_statement "return auVar19;" (return "return") (identifier "auVar19") (; ";")) (ERROR "}" (} "}"))

/* std::ostreambuf_iterator<char, std::char_traits<char> > std::money_put<char,
   std::ostreambuf_iterator<char, std::char_traits<char> >
   >::_M_insert<false>(std::ostreambuf_iterator<char, std::char_traits<char> >, std::ios_base&,
   char, std::string const&) const */

type_5  [16]
std::money_put<var_2,var_10::ostreambuf_iterator<var_2,var_10::var_1<var_2>>>::var_3<false>
          (var_6 param_1,var_4 *var_5,type_2 var_42,var_4 var_11,var_2 param_5,
          var_6 *var_7)

{
  long *plVar1;
  char cVar2;
  int var_25;
  type_1 *var_21;
  type_2 var_13;
  type_3 *var_22;
  char *pcVar7;
  long var_14;
  var_8<var_2,false> *var_16;
  bool bVar9;
  type_2 var_29;
  char **var_39;
  type_2 var_32;
  type_4 var_38;
  type_3 *var_20;
  type_2 var_23;
  type_3 *var_19;
  type_5 auVar17 [16];
  char var_41;
  char *var_40;
  type_2 var_37;
  type_5 local_4c [4];
  char *var_28;
  type_5 *local_40 [2];
  
  var_41 = (char)var_42;
  var_21 = var_9<var_10::type_1<var_2>>((type_6 *)(var_11 + 0xd0));
  var_13 = type_6::id::var_12((type_7 *)&moneypunct<var_2,false>::type_7);
  plVar1 = (long *)(*(long *)(*(long *)(var_11 + 0xd0) + 0x18) + var_13 * 8);
  var_14 = *plVar1;
  if (var_14 == 0) {
                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */
    var_16 = (var_8<var_2,false> *)var_15(0x70);
    *(type_8 *)(var_16 + 8) = 0;
    *(var_6 *)(var_16 + 0x10) = 0;
    *(var_6 *)(var_16 + 0x18) = 0;
    var_16[0x22] = (var_8<var_2,false>)0x0;
    *(type_9 ***)var_16 = &PTR____moneypunct_cache_00677260;
    *(type_10 *)(var_16 + 0x20) = 0;
    *(var_6 *)(var_16 + 0x28) = 0;
    *(var_6 *)(var_16 + 0x30) = 0;
    *(var_6 *)(var_16 + 0x38) = 0;
    *(var_6 *)(var_16 + 0x40) = 0;
    *(var_6 *)(var_16 + 0x48) = 0;
    *(var_6 *)(var_16 + 0x50) = 0;
    *(var_6 *)(var_16 + 0x58) = 0;
    *(type_8 *)(var_16 + 0x60) = 0;
    var_16[0x6f] = (var_8<var_2,false>)0x0;
                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */
    var_8<var_2,false>::var_17(var_16,(type_6 *)(var_11 + 0xd0));
    locale::_Impl::var_18(*(type_11 **)(var_11 + 0xd0),(type_12 *)var_16,var_13);
    var_14 = *plVar1;
  }
  var_19 = (type_3 *)*var_7;
  var_20 = var_19 + -0x18;
  if (*var_19 == *(type_3 *)(var_14 + 100)) {
    local_4c = *(type_5 (*) [4])(var_14 + 0x60);
    if (*(long *)var_20 == 0) goto LAB_004b2580;
    var_40 = *(char **)(var_14 + 0x48);
    var_13 = *(type_2 *)(var_14 + 0x50);
    var_19 = var_19 + 1;
  }
  else {
    local_4c = *(type_5 (*) [4])(var_14 + 0x5c);
    var_13 = *(type_2 *)(var_14 + 0x40);
    var_40 = *(char **)(var_14 + 0x38);
  }
  var_20 = var_19 + *(long *)var_20;
  if ((var_19 < var_20) &&
     (var_22 = var_19, (*(type_3 *)(*(long *)(var_21 + 0x30) + 1 + (type_2)*var_19 * 2) & 8) != 0)) {
    do {
      var_22 = var_22 + 1;
      if (var_20 == var_22) {
        var_23 = (long)var_20 - (long)var_19;
        goto joined_r0x004b257e;
      }
    } while ((*(type_3 *)(*(long *)(var_21 + 0x30) + 1 + (type_2)*var_22 * 2) & 8) != 0);
    var_23 = (long)var_22 - (long)var_19;
joined_r0x004b257e:
    if (var_23 != 0) {
      var_28 = &DAT_00689d98;
                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */
      std::string::var_24((type_13 *)&var_28,var_23 * 2);
      var_25 = *(int *)(var_14 + 0x58);
      var_29 = var_23 - (long)var_25;
      if (0 < (long)var_29) {
        if (var_25 < 0) {
          var_29 = var_23;
        }
        if (*(long *)(var_14 + 0x18) == 0) {
                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */
          std::string::var_26((type_13 *)&var_28,(char *)var_19,var_29);
        }
        else {
          std::string::var_27
                    ((type_13 *)&var_28,0,*(type_2 *)(var_28 + -0x18),var_29 * 2,'\0');
          var_32 = *(type_2 *)(var_14 + 0x18);
          pcVar7 = *(char **)(var_14 + 0x10);
          cVar2 = *(char *)(var_14 + 0x22);
          std::string::var_30((type_13 *)&var_28);
          pcVar7 = var_31<var_2>
                             (var_28,cVar2,pcVar7,var_32,(char *)var_19,
                              (char *)(var_19 + var_29));
          std::string::var_30((type_13 *)&var_28);
          var_32 = (long)pcVar7 - (long)var_28;
          if (*(type_2 *)(var_28 + -0x18) < var_32) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */
            var_33
                      ("%s: __pos (which is %zu) > this->size() (which is %zu)",
                       "basic_string::erase",var_32);
          }
          std::string::var_34((type_13 *)&var_28,var_32,*(type_2 *)(var_28 + -0x18) - var_32,0)
          ;
        }
        var_25 = *(int *)(var_14 + 0x58);
      }
      if (0 < var_25) {
                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */
        std::string::var_35((type_13 *)&var_28,*(char *)(var_14 + 0x21));
        if ((long)var_29 < 0) {
          std::string::var_36((type_13 *)&var_28,-var_29,*(char *)(var_14 + 0x65));
          std::string::var_36((type_13 *)&var_28,(char *)var_19,var_23);
        }
        else {
          std::string::var_36((type_13 *)&var_28,(char *)(var_19 + var_29),
                              (long)*(int *)(var_14 + 0x58));
        }
      }
      var_38 = *(type_4 *)(var_11 + 0x18) & 0xb0;
      var_37 = *(long *)(var_28 + -0x18) + var_13;
      if ((*(type_4 *)(var_11 + 0x18) & 0x200) != 0) {
        var_37 = var_37 + *(long *)(var_14 + 0x30);
      }
      local_40[0] = &DAT_00689d98;
                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */
      std::string::var_24((type_13 *)local_40,var_37 * 2);
      var_23 = *(type_2 *)(var_11 + 0x10);
      var_39 = (char **)local_4c;
      bVar9 = var_38 == 0x10 && var_37 < var_23;
      do {
        switch(*(type_5 *)var_39) {
        case 0:
          if (bVar9) {
LAB_004b27c0:
            std::string::var_36((type_13 *)local_40,var_23 - var_37,param_5);
          }
          break;
        case 1:
          if (bVar9) goto LAB_004b27c0;
                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */
          std::string::var_35((type_13 *)local_40,param_5);
          break;
        case 2:
          if ((*(type_3 *)(var_11 + 0x19) & 2) != 0) {
            std::string::var_36((type_13 *)local_40,*(char **)(var_14 + 0x28),*(type_2 *)(var_14 + 0x30)
                               );
          }
          break;
        case 3:
          if (var_13 != 0) {
            std::string::var_35((type_13 *)local_40,*var_40);
          }
          break;
        case 4:
          std::string::var_36((type_13 *)local_40,(type_13 *)&var_28);
        }
        var_39 = (char **)((long)var_39 + 1);
      } while (var_39 != &var_28);
      if (1 < var_13) {
        std::string::var_36((type_13 *)local_40,var_40 + 1,var_13 - 1);
      }
      var_13 = *(type_2 *)(local_40[0] + -0x18);
      if (var_13 < var_23) {
        if (var_38 == 0x20) {
                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */
          std::string::var_36((type_13 *)local_40,var_23 - var_13,param_5);
          var_13 = var_23;
        }
        else {
          std::string::var_27((type_13 *)local_40,0,0,var_23 - var_13,param_5);
          var_13 = var_23;
        }
      }
      if (var_41 == '\0') {
        var_14 = (**(type_14 **)(*var_5 + 0x60))(var_5,local_40[0],(long)(int)var_13);
        var_41 = (int)var_13 != var_14;
      }
      var_42 = var_42 & 0xffffffffffffff00;
      if ((type_15 *)(local_40[0] + -0x18) != (type_15 *)PTR__S_empty_rep_storage_0067bc38) {
        std::string::_Rep::var_43((type_15 *)(local_40[0] + -0x18));
      }
      if ((type_15 *)(var_28 + -0x18) != (type_15 *)PTR__S_empty_rep_storage_0067bc38) {
        std::string::_Rep::var_43((type_15 *)(var_28 + -0x18));
      }
    }
  }
LAB_004b2580:
  auVar17._9_7_ = (int7)(var_42 >> 8);
  auVar17[8] = var_41;
  *(var_6 *)(var_11 + 0x10) = 0;
  auVar17._0_8_ = var_5;
  return auVar17;
}


(translation_unit (expression_statement (subscript_expression argument: (identifier) index: (number_literal)) (MISSING ";")) (declaration type: (macro_type_specifier name: (identifier) type: (type_descriptor type: (type_identifier)) (MISSING ")")) declarator: (identifier) (ERROR (identifier)) declarator: (pointer_declarator declarator: (identifier)) (ERROR (identifier)) declarator: (identifier) (ERROR (identifier)) declarator: (identifier) (ERROR (identifier)) declarator: (identifier) (ERROR (identifier) (pointer_declarator declarator: (identifier))) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator 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: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (primitive_type) 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: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (array_declarator declarator: (identifier) size: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (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: (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))))) right: (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_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: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (pointer_expression argument: (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))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (assignment_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: (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: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (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))))) (identifier) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (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))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator declarator: (abstract_parenthesized_declarator (abstract_pointer_declarator)) size: (number_literal))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (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: (identifier))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_array_declarator declarator: (abstract_parenthesized_declarator (abstract_pointer_declarator)) size: (number_literal))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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)) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (number_literal)))))) right: (number_literal))) right: (number_literal)))))) consequence: (compound_statement (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) (goto_statement label: (statement_identifier))))) condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (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)) right: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier)) right: (number_literal)))))) right: (number_literal))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (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))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (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 (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (number_literal) (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))))) (binary_expression left: (identifier) right: (number_literal)) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) (identifier) (identifier) (identifier) (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_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))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (binary_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)) (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (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))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (cast_expression type: (type_descriptor type: (primitive_type)) value: (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))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (unary_expression argument: (identifier)) (cast_expression type: (type_descriptor type: (primitive_type)) value: (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))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (identifier) (identifier))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (binary_expression left: (identifier) right: (identifier)) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (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)))))))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (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: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_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))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (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)))))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (identifier))))) (do_statement body: (compound_statement (switch_statement condition: (parenthesized_expression (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (identifier)))) body: (compound_statement (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (identifier)) (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))))))) (break_statement)) (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (identifier)) consequence: (goto_statement label: (statement_identifier))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (break_statement)) (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_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))) right: (number_literal))) 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: (identifier) right: (number_literal))))) (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)))))))))) (break_statement)) (case_statement value: (number_literal) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier)))))))) (break_statement)) (case_statement value: (number_literal) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (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 (identifier) (binary_expression left: (identifier) right: (number_literal)) (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (identifier)) (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) (binary_expression left: (identifier) right: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) consequence: (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) (subscript_expression argument: (identifier) index: (number_literal)) (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (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: (binary_expression left: (identifier) right: (number_literal)) right: (identifier))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (pointer_expression argument: (identifier)))))))))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (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))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (identifier))) (return_statement (identifier)) (ERROR))

undefined1  [16]
MASKED(undefined8 param_1,long *param_2,ulong param_3,long param_4,char param_5,
            undefined8 *param_6)

{
  long *plVar1;
  char cVar2;
  undefined8 uVar3;
  undefined8 uVar4;
  int iVar5;
  long lVar6;
  long lVar7;
  byte *pbVar8;
  long lVar9;
  long lVar10;
  undefined8 *puVar11;
  bool bVar12;
  undefined1 **ppuVar13;
  ulong uVar14;
  ulong uVar15;
  uint uVar16;
  byte *pbVar17;
  byte *pbVar18;
  undefined1 auVar19 [16];
  char local_8e;
  char *local_88;
  ulong local_80;
  undefined1 local_4d;
  undefined1 local_4c [4];
  undefined1 *local_48;
  undefined1 *local_40 [2];
  
  local_8e = (char)param_3;
  lVar6 = FUN_004afd30(param_4 + 0xd0);
  lVar7 = FUN_004a0a70(&DAT_00689d70);
  plVar1 = (long *)(*(long *)(*(long *)(param_4 + 0xd0) + 0x18) + lVar7 * 8);
  lVar10 = *plVar1;
  if (lVar10 == 0) {
                    /* try { // try from 004b296d to 004b2971 has its CatchHandler @ 004b2ad5 */
    puVar11 = (undefined8 *)FUN_0049cb60(0x70);
    *(undefined4 *)(puVar11 + 1) = 0;
    puVar11[2] = 0;
    puVar11[3] = 0;
    *(undefined1 *)((long)puVar11 + 0x22) = 0;
    *puVar11 = &PTR_FUN_00677260;
    *(undefined2 *)(puVar11 + 4) = 0;
    puVar11[5] = 0;
    puVar11[6] = 0;
    puVar11[7] = 0;
    puVar11[8] = 0;
    puVar11[9] = 0;
    puVar11[10] = 0;
    puVar11[0xb] = 0;
    *(undefined4 *)(puVar11 + 0xc) = 0;
    *(undefined1 *)((long)puVar11 + 0x6f) = 0;
                    /* try { // try from 004b29f0 to 004b29f4 has its CatchHandler @ 004b2ad3 */
    FUN_004b0f50(puVar11,param_4 + 0xd0);
    FUN_004a0ee0(*(undefined8 *)(param_4 + 0xd0),puVar11,lVar7);
    lVar10 = *plVar1;
  }
  pbVar18 = (byte *)*param_6;
  pbVar17 = pbVar18 + -0x18;
  if (*pbVar18 == *(byte *)(lVar10 + 100)) {
    local_4c = *(undefined1 (*) [4])(lVar10 + 0x60);
    if (*(long *)pbVar17 == 0) goto LAB_004b2580;
    local_88 = *(char **)(lVar10 + 0x48);
    uVar14 = *(ulong *)(lVar10 + 0x50);
    pbVar18 = pbVar18 + 1;
  }
  else {
    local_4c = *(undefined1 (*) [4])(lVar10 + 0x5c);
    uVar14 = *(ulong *)(lVar10 + 0x40);
    local_88 = *(char **)(lVar10 + 0x38);
  }
  pbVar17 = pbVar18 + *(long *)pbVar17;
  if ((pbVar18 < pbVar17) &&
     (pbVar8 = pbVar18, (*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar18 * 2) & 8) != 0)) {
    do {
      pbVar8 = pbVar8 + 1;
      if (pbVar17 == pbVar8) {
        lVar6 = (long)pbVar17 - (long)pbVar18;
        goto joined_r0x004b257e;
      }
    } while ((*(byte *)(*(long *)(lVar6 + 0x30) + 1 + (ulong)*pbVar8 * 2) & 8) != 0);
    lVar6 = (long)pbVar8 - (long)pbVar18;
joined_r0x004b257e:
    if (lVar6 != 0) {
      local_48 = &DAT_00689d98;
                    /* try { // try from 004b25d9 to 004b26a1 has its CatchHandler @ 004b2a8b */
      FUN_004d1e60(&local_48,lVar6 * 2);
      iVar5 = *(int *)(lVar10 + 0x58);
      lVar7 = lVar6 - iVar5;
      if (0 < lVar7) {
        if (iVar5 < 0) {
          lVar7 = lVar6;
        }
        if (*(long *)(lVar10 + 0x18) == 0) {
                    /* try { // try from 004b2a1b to 004b2a49 has its CatchHandler @ 004b2a8b */
          FUN_004d19a0(&local_48,pbVar18,lVar7);
        }
        else {
          FUN_004d1770(&local_48,0,*(undefined8 *)(local_48 + -0x18),lVar7 * 2,0);
          uVar3 = *(undefined8 *)(lVar10 + 0x18);
          uVar4 = *(undefined8 *)(lVar10 + 0x10);
          cVar2 = *(char *)(lVar10 + 0x22);
          FUN_004d1500(&local_48);
          lVar9 = FUN_004b1be0(local_48,(int)cVar2,uVar4,uVar3,pbVar18,pbVar18 + lVar7);
          FUN_004d1500(&local_48);
          uVar15 = lVar9 - (long)local_48;
          if (*(ulong *)(local_48 + -0x18) < uVar15) {
                    /* WARNING: Subroutine does not return */
                    /* try { // try from 004b2a86 to 004b2a8a has its CatchHandler @ 004b2a8b */
            FUN_004dcce0("%s: __pos (which is %zu) > this->size() (which is %zu)",
                         "basic_string::erase",uVar15);
          }
          FUN_004d1290(&local_48,uVar15,*(ulong *)(local_48 + -0x18) - uVar15,0);
        }
        iVar5 = *(int *)(lVar10 + 0x58);
      }
      if (0 < iVar5) {
                    /* try { // try from 004b2929 to 004b2949 has its CatchHandler @ 004b2a8b */
        FUN_004d2340(&local_48,(int)*(char *)(lVar10 + 0x21));
        if (lVar7 < 0) {
          FUN_004d2230(&local_48,-lVar7,(int)*(char *)(lVar10 + 0x65));
          FUN_004d20c0(&local_48,pbVar18,lVar6);
        }
        else {
          FUN_004d20c0(&local_48,pbVar18 + lVar7,(long)*(int *)(lVar10 + 0x58));
        }
      }
      uVar16 = *(uint *)(param_4 + 0x18) & 0xb0;
      local_80 = *(long *)(local_48 + -0x18) + uVar14;
      if ((*(uint *)(param_4 + 0x18) & 0x200) != 0) {
        local_80 = local_80 + *(long *)(lVar10 + 0x30);
      }
      local_40[0] = &DAT_00689d98;
                    /* try { // try from 004b26fd to 004b2916 has its CatchHandler @ 004b2a90 */
      FUN_004d1e60(local_40,local_80 * 2);
      uVar15 = *(ulong *)(param_4 + 0x10);
      ppuVar13 = (undefined1 **)local_4c;
      bVar12 = uVar16 == 0x10 && local_80 < uVar15;
      do {
        switch(*(undefined1 *)ppuVar13) {
        case 0:
          if (bVar12) {
LAB_004b27c0:
            FUN_004d2230(local_40,uVar15 - local_80,(int)param_5);
          }
          break;
        case 1:
          if (bVar12) goto LAB_004b27c0;
                    /* try { // try from 004b2957 to 004b295b has its CatchHandler @ 004b2a90 */
          FUN_004d2340(local_40,(int)param_5);
          break;
        case 2:
          if ((*(byte *)(param_4 + 0x19) & 2) != 0) {
            FUN_004d20c0(local_40,*(undefined8 *)(lVar10 + 0x28),*(undefined8 *)(lVar10 + 0x30));
          }
          break;
        case 3:
          if (uVar14 != 0) {
            FUN_004d2340(local_40,(int)*local_88);
          }
          break;
        case 4:
          FUN_004d1f40(local_40,&local_48);
        }
        ppuVar13 = (undefined1 **)((long)ppuVar13 + 1);
      } while (ppuVar13 != &local_48);
      if (1 < uVar14) {
        FUN_004d20c0(local_40,local_88 + 1,uVar14 - 1);
      }
      uVar14 = *(ulong *)(local_40[0] + -0x18);
      if (uVar14 < uVar15) {
        if (uVar16 == 0x20) {
                    /* try { // try from 004b2a5a to 004b2a5e has its CatchHandler @ 004b2a90 */
          FUN_004d2230(local_40,uVar15 - uVar14,(int)param_5,uVar15 - uVar14);
          uVar14 = uVar15;
        }
        else {
          FUN_004d1770(local_40,0,0);
          uVar14 = uVar15;
        }
      }
      if (local_8e == '\0') {
        lVar10 = (**(code **)(*param_2 + 0x60))(param_2,local_40[0],(long)(int)uVar14);
        local_8e = (int)uVar14 != lVar10;
      }
      param_3 = param_3 & 0xffffffffffffff00;
      if (local_40[0] + -0x18 != PTR_DAT_0067bc38) {
        FUN_004ad930(local_40[0] + -0x18,&local_4d);
      }
      if (local_48 + -0x18 != PTR_DAT_0067bc38) {
        FUN_004ad930(local_48 + -0x18,&local_4d);
      }
    }
  }
LAB_004b2580:
  auVar19._9_7_ = (int7)(param_3 >> 8);
  auVar19[8] = local_8e;
  *(undefined8 *)(param_4 + 0x10) = 0;
  auVar19._0_8_ = param_2;
  return auVar19;
}

