
/* std::wistream::get(wchar_t*, int, wchar_t) */

wistream * __thiscall
std::wistream::get(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)

{
  _Ios_Iostate _Var1;
  int iVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  int iVar6;
  undefined2 in_register_0000001c;
  int *piVar7;
  wchar_t *pwVar8;
  sentry local_30 [20];
  
  *(undefined4 *)(this + 4) = 0;
  sentry::sentry(local_30,this,true);
  if (local_30[0] == (sentry)0x0) {
    iVar3 = *(int *)(this + 4);
LAB_00362110:
    if (0 < param_2) {
      param_1[0] = L'\0';
      param_1[1] = L'\0';
    }
    _Var1 = _S_failbit;
    if (iVar3 != 0) {
      return this;
    }
LAB_00362280:
    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),
                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));
    return this;
  }
  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);
  if ((int *)piVar7[2] < (int *)piVar7[3]) {
    iVar2 = *(int *)piVar7[2];
  }
  else {
    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);
  }
LAB_00362178:
  iVar3 = *(int *)(this + 4);
  iVar6 = iVar3 + 1;
  pwVar8 = param_1;
  if (iVar6 < param_2) {
    do {
      if (iVar2 == -1) {
        _Var1 = _S_eofbit;
LAB_00362330:
        if (0 < param_2) {
          pwVar8[0] = L'\0';
          pwVar8[1] = L'\0';
        }
        if (iVar3 == 0) {
LAB_003622dc:
          _Var1 = _Var1 | _S_failbit;
        }
        else if (_Var1 == _S_goodbit) {
          return this;
        }
        goto LAB_00362280;
      }
      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {
        _Var1 = _S_goodbit;
        goto LAB_00362330;
      }
      piVar5 = (int *)piVar7[2];
      param_1 = pwVar8 + 2;
      piVar4 = (int *)piVar7[3];
      *(int *)pwVar8 = iVar2;
      *(int *)(this + 4) = iVar6;
      if (piVar5 < piVar4) {
        iVar3 = *piVar5;
        piVar7[2] = (int)(piVar5 + 1);
      }
      else {
                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */
        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);
      }
      if (iVar3 == -1) {
        iVar3 = *(int *)(this + 4);
        if (param_2 < 1) {
          _Var1 = _S_eofbit;
          if (iVar3 == 0) {
            _Var1 = _S_failbit|_S_eofbit;
          }
        }
        else {
          param_1[0] = L'\0';
          param_1[1] = L'\0';
          _Var1 = _S_eofbit;
          if (iVar3 == 0) goto LAB_003622dc;
        }
        goto LAB_00362280;
      }
      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;
      iVar2 = *(int *)piVar7[2];
      iVar3 = *(int *)(this + 4);
      iVar6 = iVar3 + 1;
      pwVar8 = param_1;
      if (param_2 <= iVar6) break;
    } while( true );
  }
  if (iVar2 == -1) {
    if (0 < param_2) {
      param_1[0] = L'\0';
      param_1[1] = L'\0';
    }
    if (iVar3 == 0) {
      _Var1 = _S_failbit|_S_eofbit;
    }
    else {
      _Var1 = _S_eofbit;
    }
    goto LAB_00362280;
  }
  goto LAB_00362110;
LAB_003622fc:
  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);
  goto LAB_00362178;
}



/* std::wistream::get(wchar_t*, int, wchar_t) */

wistream * __thiscall
std::wistream::get(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  int iVar6;
  undefined2 in_register_0000001c;
  int *piVar7;
  wchar_t *pwVar8;
  sentry local_30 [20];
  
  *(undefined4 *)(this + 4) = 0;
  sentry::sentry(local_30,this,true);
  if (local_30[0] == (sentry)0x0) {
    iVar3 = *(int *)(this + 4);
LAB_00362110:
    if (0 < param_2) {
      param_1[0] = L'\0';
      param_1[1] = L'\0';
    }
    uVar1 = 4;
    if (iVar3 != 0) {
      return this;
    }
LAB_00362280:
    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),
                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));
    return this;
  }
  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);
  if ((int *)piVar7[2] < (int *)piVar7[3]) {
    iVar2 = *(int *)piVar7[2];
  }
  else {
    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);
  }
LAB_00362178:
  iVar3 = *(int *)(this + 4);
  iVar6 = iVar3 + 1;
  pwVar8 = param_1;
  if (iVar6 < param_2) {
    do {
      if (iVar2 == -1) {
        uVar1 = 2;
LAB_00362330:
        if (0 < param_2) {
          pwVar8[0] = L'\0';
          pwVar8[1] = L'\0';
        }
        if (iVar3 == 0) {
LAB_003622dc:
          uVar1 = uVar1 | 4;
        }
        else if (uVar1 == 0) {
          return this;
        }
        goto LAB_00362280;
      }
      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {
        uVar1 = 0;
        goto LAB_00362330;
      }
      piVar5 = (int *)piVar7[2];
      param_1 = pwVar8 + 2;
      piVar4 = (int *)piVar7[3];
      *(int *)pwVar8 = iVar2;
      *(int *)(this + 4) = iVar6;
      if (piVar5 < piVar4) {
        iVar3 = *piVar5;
        piVar7[2] = (int)(piVar5 + 1);
      }
      else {
                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */
        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);
      }
      if (iVar3 == -1) {
        iVar3 = *(int *)(this + 4);
        if (param_2 < 1) {
          uVar1 = 2;
          if (iVar3 == 0) {
            uVar1 = 6;
          }
        }
        else {
          param_1[0] = L'\0';
          param_1[1] = L'\0';
          uVar1 = 2;
          if (iVar3 == 0) goto LAB_003622dc;
        }
        goto LAB_00362280;
      }
      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;
      iVar2 = *(int *)piVar7[2];
      iVar3 = *(int *)(this + 4);
      iVar6 = iVar3 + 1;
      pwVar8 = param_1;
      if (param_2 <= iVar6) break;
    } while( true );
  }
  if (iVar2 == -1) {
    if (0 < param_2) {
      param_1[0] = L'\0';
      param_1[1] = L'\0';
    }
    if (iVar3 == 0) {
      uVar1 = 6;
    }
    else {
      uVar1 = 2;
    }
    goto LAB_00362280;
  }
  goto LAB_00362110;
LAB_003622fc:
  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);
  goto LAB_00362178;
}


lui gp,0x16
addiu gp,gp,0x7198
addu gp,gp,t9
addiu sp,sp,-0x48
lw t9,-0x40c4(gp)
sw s1,0x30(sp)
or s1,a0,zero
sw gp,0x10(sp)
addiu a0,sp,0x18
sw s4,0x3c(sp)
or s4,a2,zero
li a2,0x1
sw s5,0x40(sp)
sw s2,0x34(sp)
or s2,a1,zero
sw ra,0x44(sp)
or a1,s1,zero
sw s3,0x38(sp)
or s5,a3,zero
sw s0,0x2c(sp)
bal 0x00361358
_sw zero,0x4(s1)
lbu v0,0x18(sp)
bne v0,zero,0x0036214c
_lw gp,0x10(sp)
lw v1,0x4(s1)
blez s4,0x0036211c
_nop
sw zero,0x0(s2)
beq v1,zero,0x00362280
_li v0,0x4
lw ra,0x44(sp)
or v0,s1,zero
lw s5,0x40(sp)
lw s4,0x3c(sp)
lw s3,0x38(sp)
lw s2,0x34(sp)
lw s1,0x30(sp)
lw s0,0x2c(sp)
jr ra
_addiu sp,sp,0x48
lw v0,0x0(s1)
lw v0,-0xc(v0)
addu v0,s1,v0
lw s0,0x7c(v0)
lw v1,0x8(s0)
lw v0,0xc(s0)
sltu v0,v1,v0
beq v0,zero,0x00362314
_nop
lw v0,0x0(v1)
li s3,-0x1
lw v1,0x4(s1)
addiu a1,v1,0x1
slt a0,a1,s4
beq a0,zero,0x003621f8
_li a0,-0x1
beq v0,s3,0x00362380
_nop
beq s5,v0,0x0036232c
_nop
lw a0,0x8(s0)
addiu s2,s2,0x4
lw v1,0xc(s0)
sw v0,-0x4(s2)
sltu v1,a0,v1
beq v1,zero,0x003622e4
_sw a1,0x4(s1)
addiu v1,a0,0x4
lw v0,0x0(a0)
sw v1,0x8(s0)
beq v0,s3,0x003622c8
_nop
lw v1,0x8(s0)
lw v0,0xc(s0)
sltu v0,v1,v0
beq v0,zero,0x003622fc
_nop
lw v0,0x0(v1)
lw v1,0x4(s1)
addiu a1,v1,0x1
slt a0,a1,s4
bne a0,zero,0x0036218c
_li a0,-0x1
bne v0,a0,0x00362110
_nop
blez s4,0x0036220c
_nop
sw zero,0x0(s2)
beq v1,zero,0x00362388
_nop
b 0x00362280
_li v0,0x2
lw v1,0x0(s1)
lw t9,-0x40c0(gp)
lw v1,-0xc(v1)
addu v1,s1,v1
or a0,v1,zero
lw a1,0x14(v1)
bal 0x003667f4
_or a1,v0,a1
or v0,s1,zero
lw ra,0x44(sp)
lw s5,0x40(sp)
lw s4,0x3c(sp)
lw s3,0x38(sp)
lw s2,0x34(sp)
lw s1,0x30(sp)
lw s0,0x2c(sp)
jr ra
_addiu sp,sp,0x48
blez s4,0x00362370
_lw v1,0x4(s1)
sw zero,0x0(s2)
bne v1,zero,0x00362280
_li v0,0x2
b 0x00362280
_ori v0,v0,0x4
lw v0,0x0(s0)
lw t9,0x28(v0)
jalr t9
_or a0,s0,zero
b 0x003621c4
_lw gp,0x10(sp)
lw v0,0x0(s0)
lw t9,0x24(v0)
jalr t9
_or a0,s0,zero
b 0x00362178
_lw gp,0x10(sp)
lw v0,0x0(s0)
lw t9,0x24(v0)
jalr t9
_or a0,s0,zero
b 0x00362174
_lw gp,0x10(sp)
or v0,zero,zero
blez s4,0x0036233c
_nop
sw zero,0x0(s2)
beq v1,zero,0x003622dc
_nop
bne v0,zero,0x00362280
_lw ra,0x44(sp)
or v0,s1,zero
lw s5,0x40(sp)
lw s4,0x3c(sp)
lw s3,0x38(sp)
lw s2,0x34(sp)
lw s1,0x30(sp)
lw s0,0x2c(sp)
jr ra
_addiu sp,sp,0x48
bne v1,zero,0x00362280
_li v0,0x2
b 0x00362280
_ori v0,v0,0x4
b 0x00362330
_li v0,0x2
b 0x00362280
_li v0,0x6
(translation_unit "/* std::wistream::get(wchar_t*, int, wchar_t) */\n\nwistream * __thiscall\nstd::wistream::get(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  undefined2 in_register_0000001c;\n  int *piVar7;\n  wchar_t *pwVar8;\n  sentry local_30 [20];\n  \n  *(undefined4 *)(this + 4) = 0;\n  sentry::sentry(local_30,this,true);\n  if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }\n  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);\n  if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }\nLAB_00362178:\n  iVar3 = *(int *)(this + 4);\n  iVar6 = iVar3 + 1;\n  pwVar8 = param_1;\n  if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }\n  if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }\n  goto LAB_00362110;\nLAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  goto LAB_00362178;\n}\n\n" comment (ERROR "wistream * __thiscall\nstd::wistream::get(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)" (binary_expression "wistream * __thiscall\nstd::wistream::get(wistream *this" (binary_expression "wistream * __thiscall" identifier * identifier) (ERROR "std::wistream::get(wistream" identifier : : identifier : : identifier ( identifier) * identifier) , type_identifier (pointer_declarator "*param_1" * identifier) , (ERROR "int" identifier) identifier , identifier identifier )) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  undefined2 in_register_0000001c;\n  int *piVar7;\n  wchar_t *pwVar8;\n  sentry local_30 [20];\n  \n  *(undefined4 *)(this + 4) = 0;\n  sentry::sentry(local_30,this,true);\n  if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }\n  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);\n  if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }\nLAB_00362178:\n  iVar3 = *(int *)(this + 4);\n  iVar6 = iVar3 + 1;\n  pwVar8 = param_1;\n  if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }\n  if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }\n  goto LAB_00362110;\nLAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  goto LAB_00362178;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined2 in_register_0000001c;" type_identifier identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "wchar_t *pwVar8;" type_identifier (pointer_declarator "*pwVar8" * identifier) ;) (declaration "sentry local_30 [20];" type_identifier (array_declarator "local_30 [20]" identifier [ number_literal ]) ;) (expression_statement "*(undefined4 *)(this + 4) = 0;" (assignment_expression "*(undefined4 *)(this + 4) = 0" (pointer_expression "*(undefined4 *)(this + 4)" * (cast_expression "(undefined4 *)(this + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) = number_literal) ;) (labeled_statement "sentry::sentry(local_30,this,true);" statement_identifier : (ERROR ":" :) (expression_statement "sentry(local_30,this,true);" (call_expression "sentry(local_30,this,true)" identifier (argument_list "(local_30,this,true)" ( identifier , identifier , true ))) ;)) (if_statement "if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }" if (parenthesized_expression "(local_30[0] == (sentry)0x0)" ( (binary_expression "local_30[0] == (sentry)0x0" (subscript_expression "local_30[0]" identifier [ number_literal ]) == (cast_expression "(sentry)0x0" ( (type_descriptor "sentry" type_identifier) ) number_literal)) )) (compound_statement "{\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }" { (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" statement_identifier : (if_statement "if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" { (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) }))) (expression_statement "uVar1 = 4;" (assignment_expression "uVar1 = 4" identifier = number_literal) ;) (if_statement "if (iVar3 != 0) {\n      return this;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      return this;\n    }" { (return_statement "return this;" return identifier ;) })) (labeled_statement "LAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" statement_identifier : (labeled_statement "wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" statement_identifier : (ERROR ":" :) (expression_statement "clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" (call_expression "clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14))" identifier (argument_list "((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14))" ( (cast_expression "(wios *)(this + *(int *)(*(int *)this + -0xc))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc))" ( (binary_expression "this + *(int *)(*(int *)this + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)this + -0xc)" * (cast_expression "(int *)(*(int *)this + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)this + -0xc)" ( (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) , (binary_expression "uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" identifier | (pointer_expression "*(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" * (cast_expression "(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" ( (binary_expression "(wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14" (cast_expression "(wios *)(this + *(int *)(*(int *)this + -0xc))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc))" ( (binary_expression "this + *(int *)(*(int *)this + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)this + -0xc)" * (cast_expression "(int *)(*(int *)this + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)this + -0xc)" ( (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) + number_literal) ))))) ))) ;))) (return_statement "return this;" return identifier ;) })) (expression_statement "piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);" (assignment_expression "piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" identifier = (pointer_expression "*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" * (cast_expression "(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc) + 0x7c)" ( (binary_expression "this + *(int *)(*(int *)this + -0xc) + 0x7c" (binary_expression "this + *(int *)(*(int *)this + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)this + -0xc)" * (cast_expression "(int *)(*(int *)this + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)this + -0xc)" ( (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" if (parenthesized_expression "((int *)piVar7[2] < (int *)piVar7[3])" ( (binary_expression "(int *)piVar7[2] < (int *)piVar7[3]" (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ])) < (cast_expression "(int *)piVar7[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[3]" identifier [ number_literal ]))) )) (compound_statement "{\n    iVar2 = *(int *)piVar7[2];\n  }" { (expression_statement "iVar2 = *(int *)piVar7[2];" (assignment_expression "iVar2 = *(int *)piVar7[2]" identifier = (pointer_expression "*(int *)piVar7[2]" * (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ])))) ;) }) (else_clause "else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" else (compound_statement "{\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" { (expression_statement "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" (assignment_expression "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7)" identifier = (call_expression "(**(code **)(*piVar7 + 0x24))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x24))" ( (pointer_expression "**(code **)(*piVar7 + 0x24)" * (pointer_expression "*(code **)(*piVar7 + 0x24)" * (cast_expression "(code **)(*piVar7 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar7 + 0x24)" ( (binary_expression "*piVar7 + 0x24" (pointer_expression "*piVar7" * identifier) + number_literal) ))))) )) (argument_list "(piVar7)" ( identifier )))) ;) }))) (labeled_statement "LAB_00362178:\n  iVar3 = *(int *)(this + 4);" statement_identifier : (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;)) (expression_statement "iVar6 = iVar3 + 1;" (assignment_expression "iVar6 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "pwVar8 = param_1;" (assignment_expression "pwVar8 = param_1" identifier = identifier) ;) (if_statement "if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }" if (parenthesized_expression "(iVar6 < param_2)" ( (binary_expression "iVar6 < param_2" identifier < identifier) )) (compound_statement "{\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }" { (do_statement "do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );" do (compound_statement "{\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    }" { (if_statement "if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }" { (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" identifier = number_literal) ;) (labeled_statement "LAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" statement_identifier : (if_statement "if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" { (expression_statement "pwVar8[0] = L'\0';" (assignment_expression "pwVar8[0] = L'\0'" (subscript_expression "pwVar8[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "pwVar8[1] = L'\0';" (assignment_expression "pwVar8[1] = L'\0'" (subscript_expression "pwVar8[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) }))) (if_statement "if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }" { (labeled_statement "LAB_003622dc:\n          uVar1 = uVar1 | 4;" statement_identifier : (expression_statement "uVar1 = uVar1 | 4;" (assignment_expression "uVar1 = uVar1 | 4" identifier = (binary_expression "uVar1 | 4" identifier | number_literal)) ;)) }) (else_clause "else if (uVar1 == 0) {\n          return this;\n        }" else (if_statement "if (uVar1 == 0) {\n          return this;\n        }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          return this;\n        }" { (return_statement "return this;" return identifier ;) })))) (goto_statement "goto LAB_00362280;" goto statement_identifier ;) })) (if_statement "if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }" if (parenthesized_expression "(CONCAT22(in_register_0000001c,param_3) == iVar2)" ( (binary_expression "CONCAT22(in_register_0000001c,param_3) == iVar2" (call_expression "CONCAT22(in_register_0000001c,param_3)" identifier (argument_list "(in_register_0000001c,param_3)" ( identifier , identifier ))) == identifier) )) (compound_statement "{\n        uVar1 = 0;\n        goto LAB_00362330;\n      }" { (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_00362330;" goto statement_identifier ;) })) (expression_statement "piVar5 = (int *)piVar7[2];" (assignment_expression "piVar5 = (int *)piVar7[2]" identifier = (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ]))) ;) (expression_statement "param_1 = pwVar8 + 2;" (assignment_expression "param_1 = pwVar8 + 2" identifier = (binary_expression "pwVar8 + 2" identifier + number_literal)) ;) (expression_statement "piVar4 = (int *)piVar7[3];" (assignment_expression "piVar4 = (int *)piVar7[3]" identifier = (cast_expression "(int *)piVar7[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[3]" identifier [ number_literal ]))) ;) (expression_statement "*(int *)pwVar8 = iVar2;" (assignment_expression "*(int *)pwVar8 = iVar2" (pointer_expression "*(int *)pwVar8" * (cast_expression "(int *)pwVar8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(int *)(this + 4) = iVar6;" (assignment_expression "*(int *)(this + 4) = iVar6" (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) = identifier) ;) (if_statement "if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" if (parenthesized_expression "(piVar5 < piVar4)" ( (binary_expression "piVar5 < piVar4" identifier < identifier) )) (compound_statement "{\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }" { (expression_statement "iVar3 = *piVar5;" (assignment_expression "iVar3 = *piVar5" identifier = (pointer_expression "*piVar5" * identifier)) ;) (expression_statement "piVar7[2] = (int)(piVar5 + 1);" (assignment_expression "piVar7[2] = (int)(piVar5 + 1)" (subscript_expression "piVar7[2]" identifier [ number_literal ]) = (cast_expression "(int)(piVar5 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(piVar5 + 1)" ( (binary_expression "piVar5 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" else (compound_statement "{\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" { comment (expression_statement "iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);" (assignment_expression "iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7)" identifier = (call_expression "(**(code **)(*piVar7 + 0x28))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x28))" ( (pointer_expression "**(code **)(*piVar7 + 0x28)" * (pointer_expression "*(code **)(*piVar7 + 0x28)" * (cast_expression "(code **)(*piVar7 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar7 + 0x28)" ( (binary_expression "*piVar7 + 0x28" (pointer_expression "*piVar7" * identifier) + number_literal) ))))) )) (argument_list "(piVar7)" ( identifier )))) ;) }))) (if_statement "if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }" { (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;) (if_statement "if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" if (parenthesized_expression "(param_2 < 1)" ( (binary_expression "param_2 < 1" identifier < number_literal) )) (compound_statement "{\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }" { (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" identifier = number_literal) ;) (if_statement "if (iVar3 == 0) {\n            uVar1 = 6;\n          }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n            uVar1 = 6;\n          }" { (expression_statement "uVar1 = 6;" (assignment_expression "uVar1 = 6" identifier = number_literal) ;) })) }) (else_clause "else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" else (compound_statement "{\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" { (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" identifier = number_literal) ;) (if_statement "if (iVar3 == 0) goto LAB_003622dc;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_003622dc;" goto statement_identifier ;)) }))) (goto_statement "goto LAB_00362280;" goto statement_identifier ;) })) (if_statement "if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;" if (parenthesized_expression "((int *)piVar7[3] <= (int *)piVar7[2])" ( (binary_expression "(int *)piVar7[3] <= (int *)piVar7[2]" (cast_expression "(int *)piVar7[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[3]" identifier [ number_literal ])) <= (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_003622fc;" goto statement_identifier ;)) (expression_statement "iVar2 = *(int *)piVar7[2];" (assignment_expression "iVar2 = *(int *)piVar7[2]" identifier = (pointer_expression "*(int *)piVar7[2]" * (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ])))) ;) (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = iVar3 + 1;" (assignment_expression "iVar6 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "pwVar8 = param_1;" (assignment_expression "pwVar8 = param_1" identifier = identifier) ;) (if_statement "if (param_2 <= iVar6) break;" if (parenthesized_expression "(param_2 <= iVar6)" ( (binary_expression "param_2 <= iVar6" identifier <= identifier) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) (if_statement "if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }" { (if_statement "if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" { (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) })) (if_statement "if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar1 = 6;\n    }" { (expression_statement "uVar1 = 6;" (assignment_expression "uVar1 = 6" identifier = number_literal) ;) }) (else_clause "else {\n      uVar1 = 2;\n    }" else (compound_statement "{\n      uVar1 = 2;\n    }" { (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" identifier = number_literal) ;) }))) (goto_statement "goto LAB_00362280;" goto statement_identifier ;) })) (goto_statement "goto LAB_00362110;" goto statement_identifier ;) (labeled_statement "LAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" statement_identifier : (expression_statement "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" (assignment_expression "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7)" identifier = (call_expression "(**(code **)(*piVar7 + 0x24))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x24))" ( (pointer_expression "**(code **)(*piVar7 + 0x24)" * (pointer_expression "*(code **)(*piVar7 + 0x24)" * (cast_expression "(code **)(*piVar7 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar7 + 0x24)" ( (binary_expression "*piVar7 + 0x24" (pointer_expression "*piVar7" * identifier) + number_literal) ))))) )) (argument_list "(piVar7)" ( identifier )))) ;)) (goto_statement "goto LAB_00362178;" goto statement_identifier ;) }))
(translation_unit "/* std::wistream::get(wchar_t*, int, wchar_t) */\n\nwistream * __thiscall\nstd::wistream::get(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)\n\n{\n  _Ios_Iostate _Var1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  undefined2 in_register_0000001c;\n  int *piVar7;\n  wchar_t *pwVar8;\n  sentry local_30 [20];\n  \n  *(undefined4 *)(this + 4) = 0;\n  sentry::sentry(local_30,this,true);\n  if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    _Var1 = _S_failbit;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }\n  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);\n  if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }\nLAB_00362178:\n  iVar3 = *(int *)(this + 4);\n  iVar6 = iVar3 + 1;\n  pwVar8 = param_1;\n  if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        _Var1 = _S_eofbit;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }\n        else if (_Var1 == _S_goodbit) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        _Var1 = _S_goodbit;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }\n  if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      _Var1 = _S_failbit|_S_eofbit;\n    }\n    else {\n      _Var1 = _S_eofbit;\n    }\n    goto LAB_00362280;\n  }\n  goto LAB_00362110;\nLAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  goto LAB_00362178;\n}\n\n" comment (ERROR "wistream * __thiscall\nstd::wistream::get(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)" (binary_expression "wistream * __thiscall\nstd::wistream::get(wistream *this" (binary_expression "wistream * __thiscall" identifier * identifier) (ERROR "std::wistream::get(wistream" identifier : : identifier : : identifier ( identifier) * identifier) , type_identifier (pointer_declarator "*param_1" * identifier) , (ERROR "int" identifier) identifier , identifier identifier )) (compound_statement "{\n  _Ios_Iostate _Var1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  undefined2 in_register_0000001c;\n  int *piVar7;\n  wchar_t *pwVar8;\n  sentry local_30 [20];\n  \n  *(undefined4 *)(this + 4) = 0;\n  sentry::sentry(local_30,this,true);\n  if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    _Var1 = _S_failbit;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }\n  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);\n  if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }\nLAB_00362178:\n  iVar3 = *(int *)(this + 4);\n  iVar6 = iVar3 + 1;\n  pwVar8 = param_1;\n  if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        _Var1 = _S_eofbit;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }\n        else if (_Var1 == _S_goodbit) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        _Var1 = _S_goodbit;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }\n  if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      _Var1 = _S_failbit|_S_eofbit;\n    }\n    else {\n      _Var1 = _S_eofbit;\n    }\n    goto LAB_00362280;\n  }\n  goto LAB_00362110;\nLAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  goto LAB_00362178;\n}" { (declaration "_Ios_Iostate _Var1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined2 in_register_0000001c;" type_identifier identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "wchar_t *pwVar8;" type_identifier (pointer_declarator "*pwVar8" * identifier) ;) (declaration "sentry local_30 [20];" type_identifier (array_declarator "local_30 [20]" identifier [ number_literal ]) ;) (expression_statement "*(undefined4 *)(this + 4) = 0;" (assignment_expression "*(undefined4 *)(this + 4) = 0" (pointer_expression "*(undefined4 *)(this + 4)" * (cast_expression "(undefined4 *)(this + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) = number_literal) ;) (labeled_statement "sentry::sentry(local_30,this,true);" statement_identifier : (ERROR ":" :) (expression_statement "sentry(local_30,this,true);" (call_expression "sentry(local_30,this,true)" identifier (argument_list "(local_30,this,true)" ( identifier , identifier , true ))) ;)) (if_statement "if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    _Var1 = _S_failbit;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }" if (parenthesized_expression "(local_30[0] == (sentry)0x0)" ( (binary_expression "local_30[0] == (sentry)0x0" (subscript_expression "local_30[0]" identifier [ number_literal ]) == (cast_expression "(sentry)0x0" ( (type_descriptor "sentry" type_identifier) ) number_literal)) )) (compound_statement "{\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    _Var1 = _S_failbit;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }" { (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" statement_identifier : (if_statement "if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" { (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) }))) (expression_statement "_Var1 = _S_failbit;" (assignment_expression "_Var1 = _S_failbit" identifier = identifier) ;) (if_statement "if (iVar3 != 0) {\n      return this;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      return this;\n    }" { (return_statement "return this;" return identifier ;) })) (labeled_statement "LAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" statement_identifier : (labeled_statement "wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" statement_identifier : (ERROR ":" :) (expression_statement "clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" (call_expression "clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14))" identifier (argument_list "((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                _Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14))" ( (cast_expression "(wios *)(this + *(int *)(*(int *)this + -0xc))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc))" ( (binary_expression "this + *(int *)(*(int *)this + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)this + -0xc)" * (cast_expression "(int *)(*(int *)this + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)this + -0xc)" ( (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) , (binary_expression "_Var1 | *(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" identifier | (pointer_expression "*(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" * (cast_expression "(_Ios_Iostate *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" ( (type_descriptor "_Ios_Iostate *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" ( (binary_expression "(wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14" (cast_expression "(wios *)(this + *(int *)(*(int *)this + -0xc))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc))" ( (binary_expression "this + *(int *)(*(int *)this + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)this + -0xc)" * (cast_expression "(int *)(*(int *)this + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)this + -0xc)" ( (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) + number_literal) ))))) ))) ;))) (return_statement "return this;" return identifier ;) })) (expression_statement "piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);" (assignment_expression "piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" identifier = (pointer_expression "*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" * (cast_expression "(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc) + 0x7c)" ( (binary_expression "this + *(int *)(*(int *)this + -0xc) + 0x7c" (binary_expression "this + *(int *)(*(int *)this + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)this + -0xc)" * (cast_expression "(int *)(*(int *)this + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)this + -0xc)" ( (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" if (parenthesized_expression "((int *)piVar7[2] < (int *)piVar7[3])" ( (binary_expression "(int *)piVar7[2] < (int *)piVar7[3]" (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ])) < (cast_expression "(int *)piVar7[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[3]" identifier [ number_literal ]))) )) (compound_statement "{\n    iVar2 = *(int *)piVar7[2];\n  }" { (expression_statement "iVar2 = *(int *)piVar7[2];" (assignment_expression "iVar2 = *(int *)piVar7[2]" identifier = (pointer_expression "*(int *)piVar7[2]" * (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ])))) ;) }) (else_clause "else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" else (compound_statement "{\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" { (expression_statement "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" (assignment_expression "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7)" identifier = (call_expression "(**(code **)(*piVar7 + 0x24))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x24))" ( (pointer_expression "**(code **)(*piVar7 + 0x24)" * (pointer_expression "*(code **)(*piVar7 + 0x24)" * (cast_expression "(code **)(*piVar7 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar7 + 0x24)" ( (binary_expression "*piVar7 + 0x24" (pointer_expression "*piVar7" * identifier) + number_literal) ))))) )) (argument_list "(piVar7)" ( identifier )))) ;) }))) (labeled_statement "LAB_00362178:\n  iVar3 = *(int *)(this + 4);" statement_identifier : (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;)) (expression_statement "iVar6 = iVar3 + 1;" (assignment_expression "iVar6 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "pwVar8 = param_1;" (assignment_expression "pwVar8 = param_1" identifier = identifier) ;) (if_statement "if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        _Var1 = _S_eofbit;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }\n        else if (_Var1 == _S_goodbit) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        _Var1 = _S_goodbit;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }" if (parenthesized_expression "(iVar6 < param_2)" ( (binary_expression "iVar6 < param_2" identifier < identifier) )) (compound_statement "{\n    do {\n      if (iVar2 == -1) {\n        _Var1 = _S_eofbit;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }\n        else if (_Var1 == _S_goodbit) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        _Var1 = _S_goodbit;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }" { (do_statement "do {\n      if (iVar2 == -1) {\n        _Var1 = _S_eofbit;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }\n        else if (_Var1 == _S_goodbit) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        _Var1 = _S_goodbit;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );" do (compound_statement "{\n      if (iVar2 == -1) {\n        _Var1 = _S_eofbit;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }\n        else if (_Var1 == _S_goodbit) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        _Var1 = _S_goodbit;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    }" { (if_statement "if (iVar2 == -1) {\n        _Var1 = _S_eofbit;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }\n        else if (_Var1 == _S_goodbit) {\n          return this;\n        }\n        goto LAB_00362280;\n      }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n        _Var1 = _S_eofbit;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }\n        else if (_Var1 == _S_goodbit) {\n          return this;\n        }\n        goto LAB_00362280;\n      }" { (expression_statement "_Var1 = _S_eofbit;" (assignment_expression "_Var1 = _S_eofbit" identifier = identifier) ;) (labeled_statement "LAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" statement_identifier : (if_statement "if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" { (expression_statement "pwVar8[0] = L'\0';" (assignment_expression "pwVar8[0] = L'\0'" (subscript_expression "pwVar8[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "pwVar8[1] = L'\0';" (assignment_expression "pwVar8[1] = L'\0'" (subscript_expression "pwVar8[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) }))) (if_statement "if (iVar3 == 0) {\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }\n        else if (_Var1 == _S_goodbit) {\n          return this;\n        }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;\n        }" { (labeled_statement "LAB_003622dc:\n          _Var1 = _Var1 | _S_failbit;" statement_identifier : (expression_statement "_Var1 = _Var1 | _S_failbit;" (assignment_expression "_Var1 = _Var1 | _S_failbit" identifier = (binary_expression "_Var1 | _S_failbit" identifier | identifier)) ;)) }) (else_clause "else if (_Var1 == _S_goodbit) {\n          return this;\n        }" else (if_statement "if (_Var1 == _S_goodbit) {\n          return this;\n        }" if (parenthesized_expression "(_Var1 == _S_goodbit)" ( (binary_expression "_Var1 == _S_goodbit" identifier == identifier) )) (compound_statement "{\n          return this;\n        }" { (return_statement "return this;" return identifier ;) })))) (goto_statement "goto LAB_00362280;" goto statement_identifier ;) })) (if_statement "if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        _Var1 = _S_goodbit;\n        goto LAB_00362330;\n      }" if (parenthesized_expression "(CONCAT22(in_register_0000001c,param_3) == iVar2)" ( (binary_expression "CONCAT22(in_register_0000001c,param_3) == iVar2" (call_expression "CONCAT22(in_register_0000001c,param_3)" identifier (argument_list "(in_register_0000001c,param_3)" ( identifier , identifier ))) == identifier) )) (compound_statement "{\n        _Var1 = _S_goodbit;\n        goto LAB_00362330;\n      }" { (expression_statement "_Var1 = _S_goodbit;" (assignment_expression "_Var1 = _S_goodbit" identifier = identifier) ;) (goto_statement "goto LAB_00362330;" goto statement_identifier ;) })) (expression_statement "piVar5 = (int *)piVar7[2];" (assignment_expression "piVar5 = (int *)piVar7[2]" identifier = (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ]))) ;) (expression_statement "param_1 = pwVar8 + 2;" (assignment_expression "param_1 = pwVar8 + 2" identifier = (binary_expression "pwVar8 + 2" identifier + number_literal)) ;) (expression_statement "piVar4 = (int *)piVar7[3];" (assignment_expression "piVar4 = (int *)piVar7[3]" identifier = (cast_expression "(int *)piVar7[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[3]" identifier [ number_literal ]))) ;) (expression_statement "*(int *)pwVar8 = iVar2;" (assignment_expression "*(int *)pwVar8 = iVar2" (pointer_expression "*(int *)pwVar8" * (cast_expression "(int *)pwVar8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(int *)(this + 4) = iVar6;" (assignment_expression "*(int *)(this + 4) = iVar6" (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) = identifier) ;) (if_statement "if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" if (parenthesized_expression "(piVar5 < piVar4)" ( (binary_expression "piVar5 < piVar4" identifier < identifier) )) (compound_statement "{\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }" { (expression_statement "iVar3 = *piVar5;" (assignment_expression "iVar3 = *piVar5" identifier = (pointer_expression "*piVar5" * identifier)) ;) (expression_statement "piVar7[2] = (int)(piVar5 + 1);" (assignment_expression "piVar7[2] = (int)(piVar5 + 1)" (subscript_expression "piVar7[2]" identifier [ number_literal ]) = (cast_expression "(int)(piVar5 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(piVar5 + 1)" ( (binary_expression "piVar5 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" else (compound_statement "{\n                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */\n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" { comment (expression_statement "iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);" (assignment_expression "iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7)" identifier = (call_expression "(**(code **)(*piVar7 + 0x28))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x28))" ( (pointer_expression "**(code **)(*piVar7 + 0x28)" * (pointer_expression "*(code **)(*piVar7 + 0x28)" * (cast_expression "(code **)(*piVar7 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar7 + 0x28)" ( (binary_expression "*piVar7 + 0x28" (pointer_expression "*piVar7" * identifier) + number_literal) ))))) )) (argument_list "(piVar7)" ( identifier )))) ;) }))) (if_statement "if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }" { (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;) (if_statement "if (param_2 < 1) {\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" if (parenthesized_expression "(param_2 < 1)" ( (binary_expression "param_2 < 1" identifier < number_literal) )) (compound_statement "{\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }\n        }" { (expression_statement "_Var1 = _S_eofbit;" (assignment_expression "_Var1 = _S_eofbit" identifier = identifier) ;) (if_statement "if (iVar3 == 0) {\n            _Var1 = _S_failbit|_S_eofbit;\n          }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n            _Var1 = _S_failbit|_S_eofbit;\n          }" { (expression_statement "_Var1 = _S_failbit|_S_eofbit;" (assignment_expression "_Var1 = _S_failbit|_S_eofbit" identifier = (binary_expression "_S_failbit|_S_eofbit" identifier | identifier)) ;) })) }) (else_clause "else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" else (compound_statement "{\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          _Var1 = _S_eofbit;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" { (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "_Var1 = _S_eofbit;" (assignment_expression "_Var1 = _S_eofbit" identifier = identifier) ;) (if_statement "if (iVar3 == 0) goto LAB_003622dc;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_003622dc;" goto statement_identifier ;)) }))) (goto_statement "goto LAB_00362280;" goto statement_identifier ;) })) (if_statement "if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;" if (parenthesized_expression "((int *)piVar7[3] <= (int *)piVar7[2])" ( (binary_expression "(int *)piVar7[3] <= (int *)piVar7[2]" (cast_expression "(int *)piVar7[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[3]" identifier [ number_literal ])) <= (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_003622fc;" goto statement_identifier ;)) (expression_statement "iVar2 = *(int *)piVar7[2];" (assignment_expression "iVar2 = *(int *)piVar7[2]" identifier = (pointer_expression "*(int *)piVar7[2]" * (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ])))) ;) (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = iVar3 + 1;" (assignment_expression "iVar6 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "pwVar8 = param_1;" (assignment_expression "pwVar8 = param_1" identifier = identifier) ;) (if_statement "if (param_2 <= iVar6) break;" if (parenthesized_expression "(param_2 <= iVar6)" ( (binary_expression "param_2 <= iVar6" identifier <= identifier) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) (if_statement "if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      _Var1 = _S_failbit|_S_eofbit;\n    }\n    else {\n      _Var1 = _S_eofbit;\n    }\n    goto LAB_00362280;\n  }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      _Var1 = _S_failbit|_S_eofbit;\n    }\n    else {\n      _Var1 = _S_eofbit;\n    }\n    goto LAB_00362280;\n  }" { (if_statement "if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" { (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) })) (if_statement "if (iVar3 == 0) {\n      _Var1 = _S_failbit|_S_eofbit;\n    }\n    else {\n      _Var1 = _S_eofbit;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      _Var1 = _S_failbit|_S_eofbit;\n    }" { (expression_statement "_Var1 = _S_failbit|_S_eofbit;" (assignment_expression "_Var1 = _S_failbit|_S_eofbit" identifier = (binary_expression "_S_failbit|_S_eofbit" identifier | identifier)) ;) }) (else_clause "else {\n      _Var1 = _S_eofbit;\n    }" else (compound_statement "{\n      _Var1 = _S_eofbit;\n    }" { (expression_statement "_Var1 = _S_eofbit;" (assignment_expression "_Var1 = _S_eofbit" identifier = identifier) ;) }))) (goto_statement "goto LAB_00362280;" goto statement_identifier ;) })) (goto_statement "goto LAB_00362110;" goto statement_identifier ;) (labeled_statement "LAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" statement_identifier : (expression_statement "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" (assignment_expression "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7)" identifier = (call_expression "(**(code **)(*piVar7 + 0x24))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x24))" ( (pointer_expression "**(code **)(*piVar7 + 0x24)" * (pointer_expression "*(code **)(*piVar7 + 0x24)" * (cast_expression "(code **)(*piVar7 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar7 + 0x24)" ( (binary_expression "*piVar7 + 0x24" (pointer_expression "*piVar7" * identifier) + number_literal) ))))) )) (argument_list "(piVar7)" ( identifier )))) ;)) (goto_statement "goto LAB_00362178;" goto statement_identifier ;) }))
(translation_unit "wistream * __thiscall\nstd::wistream::get(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)\n\n{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  undefined2 in_register_0000001c;\n  int *piVar7;\n  wchar_t *pwVar8;\n  sentry local_30 [20];\n  \n  *(undefined4 *)(this + 4) = 0;\n  sentry::sentry(local_30,this,true);\n  if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }\n  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);\n  if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }\nLAB_00362178:\n  iVar3 = *(int *)(this + 4);\n  iVar6 = iVar3 + 1;\n  pwVar8 = param_1;\n  if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }\n  if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }\n  goto LAB_00362110;\nLAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  goto LAB_00362178;\n}\n\n" (ERROR "wistream * __thiscall\nstd::wistream::get(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)" (binary_expression "wistream * __thiscall\nstd::wistream::get(wistream *this" (binary_expression "wistream * __thiscall" identifier * identifier) (ERROR "std::wistream::get(wistream" identifier : : identifier : : identifier ( identifier) * identifier) , type_identifier (pointer_declarator "*param_1" * identifier) , (ERROR "int" identifier) identifier , identifier identifier )) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  undefined2 in_register_0000001c;\n  int *piVar7;\n  wchar_t *pwVar8;\n  sentry local_30 [20];\n  \n  *(undefined4 *)(this + 4) = 0;\n  sentry::sentry(local_30,this,true);\n  if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }\n  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);\n  if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }\nLAB_00362178:\n  iVar3 = *(int *)(this + 4);\n  iVar6 = iVar3 + 1;\n  pwVar8 = param_1;\n  if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }\n  if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }\n  goto LAB_00362110;\nLAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  goto LAB_00362178;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "int iVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "undefined2 in_register_0000001c;" type_identifier identifier ;) (declaration "int *piVar7;" primitive_type (pointer_declarator "*piVar7" * identifier) ;) (declaration "wchar_t *pwVar8;" type_identifier (pointer_declarator "*pwVar8" * identifier) ;) (declaration "sentry local_30 [20];" type_identifier (array_declarator "local_30 [20]" identifier [ number_literal ]) ;) (expression_statement "*(undefined4 *)(this + 4) = 0;" (assignment_expression "*(undefined4 *)(this + 4) = 0" (pointer_expression "*(undefined4 *)(this + 4)" * (cast_expression "(undefined4 *)(this + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) = number_literal) ;) (labeled_statement "sentry::sentry(local_30,this,true);" statement_identifier : (ERROR ":" :) (expression_statement "sentry(local_30,this,true);" (call_expression "sentry(local_30,this,true)" identifier (argument_list "(local_30,this,true)" ( identifier , identifier , true ))) ;)) (if_statement "if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }" if (parenthesized_expression "(local_30[0] == (sentry)0x0)" ( (binary_expression "local_30[0] == (sentry)0x0" (subscript_expression "local_30[0]" identifier [ number_literal ]) == (cast_expression "(sentry)0x0" ( (type_descriptor "sentry" type_identifier) ) number_literal)) )) (compound_statement "{\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }" { (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;) (labeled_statement "LAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" statement_identifier : (if_statement "if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" { (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) }))) (expression_statement "uVar1 = 4;" (assignment_expression "uVar1 = 4" identifier = number_literal) ;) (if_statement "if (iVar3 != 0) {\n      return this;\n    }" if (parenthesized_expression "(iVar3 != 0)" ( (binary_expression "iVar3 != 0" identifier != number_literal) )) (compound_statement "{\n      return this;\n    }" { (return_statement "return this;" return identifier ;) })) (labeled_statement "LAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" statement_identifier : (labeled_statement "wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" statement_identifier : (ERROR ":" :) (expression_statement "clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" (call_expression "clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14))" identifier (argument_list "((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14))" ( (cast_expression "(wios *)(this + *(int *)(*(int *)this + -0xc))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc))" ( (binary_expression "this + *(int *)(*(int *)this + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)this + -0xc)" * (cast_expression "(int *)(*(int *)this + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)this + -0xc)" ( (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) , (binary_expression "uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" identifier | (pointer_expression "*(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" * (cast_expression "(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" ( (binary_expression "(wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14" (cast_expression "(wios *)(this + *(int *)(*(int *)this + -0xc))" ( (type_descriptor "wios *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc))" ( (binary_expression "this + *(int *)(*(int *)this + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)this + -0xc)" * (cast_expression "(int *)(*(int *)this + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)this + -0xc)" ( (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) ))) + number_literal) ))))) ))) ;))) (return_statement "return this;" return identifier ;) })) (expression_statement "piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);" (assignment_expression "piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" identifier = (pointer_expression "*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" * (cast_expression "(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" ( (type_descriptor "int **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc) + 0x7c)" ( (binary_expression "this + *(int *)(*(int *)this + -0xc) + 0x7c" (binary_expression "this + *(int *)(*(int *)this + -0xc)" identifier + (pointer_expression "*(int *)(*(int *)this + -0xc)" * (cast_expression "(int *)(*(int *)this + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)this + -0xc)" ( (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" * (cast_expression "(int *)this" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) + number_literal) ))))) + number_literal) ))))) ;) (if_statement "if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" if (parenthesized_expression "((int *)piVar7[2] < (int *)piVar7[3])" ( (binary_expression "(int *)piVar7[2] < (int *)piVar7[3]" (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ])) < (cast_expression "(int *)piVar7[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[3]" identifier [ number_literal ]))) )) (compound_statement "{\n    iVar2 = *(int *)piVar7[2];\n  }" { (expression_statement "iVar2 = *(int *)piVar7[2];" (assignment_expression "iVar2 = *(int *)piVar7[2]" identifier = (pointer_expression "*(int *)piVar7[2]" * (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ])))) ;) }) (else_clause "else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" else (compound_statement "{\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" { (expression_statement "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" (assignment_expression "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7)" identifier = (call_expression "(**(code **)(*piVar7 + 0x24))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x24))" ( (pointer_expression "**(code **)(*piVar7 + 0x24)" * (pointer_expression "*(code **)(*piVar7 + 0x24)" * (cast_expression "(code **)(*piVar7 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar7 + 0x24)" ( (binary_expression "*piVar7 + 0x24" (pointer_expression "*piVar7" * identifier) + number_literal) ))))) )) (argument_list "(piVar7)" ( identifier )))) ;) }))) (labeled_statement "LAB_00362178:\n  iVar3 = *(int *)(this + 4);" statement_identifier : (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;)) (expression_statement "iVar6 = iVar3 + 1;" (assignment_expression "iVar6 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "pwVar8 = param_1;" (assignment_expression "pwVar8 = param_1" identifier = identifier) ;) (if_statement "if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }" if (parenthesized_expression "(iVar6 < param_2)" ( (binary_expression "iVar6 < param_2" identifier < identifier) )) (compound_statement "{\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }" { (do_statement "do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );" do (compound_statement "{\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    }" { (if_statement "if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }" { (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" identifier = number_literal) ;) (labeled_statement "LAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" statement_identifier : (if_statement "if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" { (expression_statement "pwVar8[0] = L'\0';" (assignment_expression "pwVar8[0] = L'\0'" (subscript_expression "pwVar8[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "pwVar8[1] = L'\0';" (assignment_expression "pwVar8[1] = L'\0'" (subscript_expression "pwVar8[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) }))) (if_statement "if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }" { (labeled_statement "LAB_003622dc:\n          uVar1 = uVar1 | 4;" statement_identifier : (expression_statement "uVar1 = uVar1 | 4;" (assignment_expression "uVar1 = uVar1 | 4" identifier = (binary_expression "uVar1 | 4" identifier | number_literal)) ;)) }) (else_clause "else if (uVar1 == 0) {\n          return this;\n        }" else (if_statement "if (uVar1 == 0) {\n          return this;\n        }" if (parenthesized_expression "(uVar1 == 0)" ( (binary_expression "uVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          return this;\n        }" { (return_statement "return this;" return identifier ;) })))) (goto_statement "goto LAB_00362280;" goto statement_identifier ;) })) (if_statement "if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }" if (parenthesized_expression "(CONCAT22(in_register_0000001c,param_3) == iVar2)" ( (binary_expression "CONCAT22(in_register_0000001c,param_3) == iVar2" (call_expression "CONCAT22(in_register_0000001c,param_3)" identifier (argument_list "(in_register_0000001c,param_3)" ( identifier , identifier ))) == identifier) )) (compound_statement "{\n        uVar1 = 0;\n        goto LAB_00362330;\n      }" { (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" identifier = number_literal) ;) (goto_statement "goto LAB_00362330;" goto statement_identifier ;) })) (expression_statement "piVar5 = (int *)piVar7[2];" (assignment_expression "piVar5 = (int *)piVar7[2]" identifier = (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ]))) ;) (expression_statement "param_1 = pwVar8 + 2;" (assignment_expression "param_1 = pwVar8 + 2" identifier = (binary_expression "pwVar8 + 2" identifier + number_literal)) ;) (expression_statement "piVar4 = (int *)piVar7[3];" (assignment_expression "piVar4 = (int *)piVar7[3]" identifier = (cast_expression "(int *)piVar7[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[3]" identifier [ number_literal ]))) ;) (expression_statement "*(int *)pwVar8 = iVar2;" (assignment_expression "*(int *)pwVar8 = iVar2" (pointer_expression "*(int *)pwVar8" * (cast_expression "(int *)pwVar8" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) = identifier) ;) (expression_statement "*(int *)(this + 4) = iVar6;" (assignment_expression "*(int *)(this + 4) = iVar6" (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) )))) = identifier) ;) (if_statement "if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" if (parenthesized_expression "(piVar5 < piVar4)" ( (binary_expression "piVar5 < piVar4" identifier < identifier) )) (compound_statement "{\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }" { (expression_statement "iVar3 = *piVar5;" (assignment_expression "iVar3 = *piVar5" identifier = (pointer_expression "*piVar5" * identifier)) ;) (expression_statement "piVar7[2] = (int)(piVar5 + 1);" (assignment_expression "piVar7[2] = (int)(piVar5 + 1)" (subscript_expression "piVar7[2]" identifier [ number_literal ]) = (cast_expression "(int)(piVar5 + 1)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(piVar5 + 1)" ( (binary_expression "piVar5 + 1" identifier + number_literal) )))) ;) }) (else_clause "else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" else (compound_statement "{\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" { (expression_statement "iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);" (assignment_expression "iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7)" identifier = (call_expression "(**(code **)(*piVar7 + 0x28))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x28))" ( (pointer_expression "**(code **)(*piVar7 + 0x28)" * (pointer_expression "*(code **)(*piVar7 + 0x28)" * (cast_expression "(code **)(*piVar7 + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar7 + 0x28)" ( (binary_expression "*piVar7 + 0x28" (pointer_expression "*piVar7" * identifier) + number_literal) ))))) )) (argument_list "(piVar7)" ( identifier )))) ;) }))) (if_statement "if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }" if (parenthesized_expression "(iVar3 == -1)" ( (binary_expression "iVar3 == -1" identifier == number_literal) )) (compound_statement "{\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }" { (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;) (if_statement "if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" if (parenthesized_expression "(param_2 < 1)" ( (binary_expression "param_2 < 1" identifier < number_literal) )) (compound_statement "{\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }" { (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" identifier = number_literal) ;) (if_statement "if (iVar3 == 0) {\n            uVar1 = 6;\n          }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n            uVar1 = 6;\n          }" { (expression_statement "uVar1 = 6;" (assignment_expression "uVar1 = 6" identifier = number_literal) ;) })) }) (else_clause "else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" else (compound_statement "{\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" { (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" identifier = number_literal) ;) (if_statement "if (iVar3 == 0) goto LAB_003622dc;" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_003622dc;" goto statement_identifier ;)) }))) (goto_statement "goto LAB_00362280;" goto statement_identifier ;) })) (if_statement "if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;" if (parenthesized_expression "((int *)piVar7[3] <= (int *)piVar7[2])" ( (binary_expression "(int *)piVar7[3] <= (int *)piVar7[2]" (cast_expression "(int *)piVar7[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[3]" identifier [ number_literal ])) <= (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ]))) )) (goto_statement "goto LAB_003622fc;" goto statement_identifier ;)) (expression_statement "iVar2 = *(int *)piVar7[2];" (assignment_expression "iVar2 = *(int *)piVar7[2]" identifier = (pointer_expression "*(int *)piVar7[2]" * (cast_expression "(int *)piVar7[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar7[2]" identifier [ number_literal ])))) ;) (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" identifier = (pointer_expression "*(int *)(this + 4)" * (cast_expression "(int *)(this + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(this + 4)" ( (binary_expression "this + 4" identifier + number_literal) ))))) ;) (expression_statement "iVar6 = iVar3 + 1;" (assignment_expression "iVar6 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (expression_statement "pwVar8 = param_1;" (assignment_expression "pwVar8 = param_1" identifier = identifier) ;) (if_statement "if (param_2 <= iVar6) break;" if (parenthesized_expression "(param_2 <= iVar6)" ( (binary_expression "param_2 <= iVar6" identifier <= identifier) )) (break_statement "break;" break ;)) }) while (parenthesized_expression "( true )" ( true )) ;) })) (if_statement "if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }" if (parenthesized_expression "(iVar2 == -1)" ( (binary_expression "iVar2 == -1" identifier == number_literal) )) (compound_statement "{\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }" { (if_statement "if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" if (parenthesized_expression "(0 < param_2)" ( (binary_expression "0 < param_2" number_literal < identifier) )) (compound_statement "{\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" { (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (char_literal "L'\0'" L' escape_sequence ')) ;) })) (if_statement "if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }" if (parenthesized_expression "(iVar3 == 0)" ( (binary_expression "iVar3 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar1 = 6;\n    }" { (expression_statement "uVar1 = 6;" (assignment_expression "uVar1 = 6" identifier = number_literal) ;) }) (else_clause "else {\n      uVar1 = 2;\n    }" else (compound_statement "{\n      uVar1 = 2;\n    }" { (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" identifier = number_literal) ;) }))) (goto_statement "goto LAB_00362280;" goto statement_identifier ;) })) (goto_statement "goto LAB_00362110;" goto statement_identifier ;) (labeled_statement "LAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" statement_identifier : (expression_statement "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" (assignment_expression "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7)" identifier = (call_expression "(**(code **)(*piVar7 + 0x24))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x24))" ( (pointer_expression "**(code **)(*piVar7 + 0x24)" * (pointer_expression "*(code **)(*piVar7 + 0x24)" * (cast_expression "(code **)(*piVar7 + 0x24)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*piVar7 + 0x24)" ( (binary_expression "*piVar7 + 0x24" (pointer_expression "*piVar7" * identifier) + number_literal) ))))) )) (argument_list "(piVar7)" ( identifier )))) ;)) (goto_statement "goto LAB_00362178;" goto statement_identifier ;) }))
(translation_unit (ERROR (binary_expression (binary_expression IDENT * IDENT) (ERROR IDENT : : IDENT : : IDENT ( IDENT) * IDENT) , TYPE (pointer_declarator * IDENT) , (ERROR IDENT) IDENT , IDENT IDENT )) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (labeled_statement statement_identifier : (ERROR :) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , BOOL ))) ;)) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (cast_expression ( (type_descriptor TYPE) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal L' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal L' escape_sequence ')) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (labeled_statement statement_identifier : (ERROR :) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) + LIT) ))))) ))) , (binary_expression IDENT | (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) + LIT) ))))) ))) + LIT) ))))) ))) ;))) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) + LIT) ))))) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))) (labeled_statement statement_identifier : (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)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal L' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal L' escape_sequence ')) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT | LIT)) ;)) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return IDENT ;) })))) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( IDENT , IDENT ))) == IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT)) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) )) (argument_list ( IDENT )))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (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 IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal L' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal L' escape_sequence ')) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) }))) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) <= (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_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)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (break_statement break ;)) }) while (parenthesized_expression ( BOOL )) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal L' escape_sequence ')) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (char_literal L' escape_sequence ')) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) }))) (goto_statement goto statement_identifier ;) })) (goto_statement goto statement_identifier ;) (labeled_statement statement_identifier : (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 )))) ;)) (goto_statement goto statement_identifier ;) }))
(ERROR "wistream * __thiscall\nstd::wistream::get(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)" (binary_expression "wistream * __thiscall\nstd::wistream::get(wistream *this" (binary_expression "wistream * __thiscall" (identifier "wistream") (* "*") (identifier "__thiscall")) (ERROR "std::wistream::get(wistream" (identifier "std") (: ":") (: ":") (identifier "wistream") (: ":") (: ":") (identifier "get") (( "(") (identifier "wistream")) (* "*") (identifier "this")) (, ",") (type_identifier "wchar_t") (pointer_declarator "*param_1" (* "*") (identifier "param_1")) (, ",") (ERROR "int" (identifier "int")) (identifier "param_2") (, ",") (identifier "wchar_t") (identifier "param_3") () ")")) (compound_statement "{\n  uint uVar1;\n  int iVar2;\n  int iVar3;\n  int *piVar4;\n  int *piVar5;\n  int iVar6;\n  undefined2 in_register_0000001c;\n  int *piVar7;\n  wchar_t *pwVar8;\n  sentry local_30 [20];\n  \n  *(undefined4 *)(this + 4) = 0;\n  sentry::sentry(local_30,this,true);\n  if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }\n  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);\n  if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }\nLAB_00362178:\n  iVar3 = *(int *)(this + 4);\n  iVar6 = iVar3 + 1;\n  pwVar8 = param_1;\n  if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }\n  if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }\n  goto LAB_00362110;\nLAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  goto LAB_00362178;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "int iVar2;" (primitive_type "int") (identifier "iVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "int *piVar5;" (primitive_type "int") (pointer_declarator "*piVar5" (* "*") (identifier "piVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "undefined2 in_register_0000001c;" (type_identifier "undefined2") (identifier "in_register_0000001c") (; ";")) (declaration "int *piVar7;" (primitive_type "int") (pointer_declarator "*piVar7" (* "*") (identifier "piVar7")) (; ";")) (declaration "wchar_t *pwVar8;" (type_identifier "wchar_t") (pointer_declarator "*pwVar8" (* "*") (identifier "pwVar8")) (; ";")) (declaration "sentry local_30 [20];" (type_identifier "sentry") (array_declarator "local_30 [20]" (identifier "local_30") ([ "[") (number_literal "20") (] "]")) (; ";")) (expression_statement "*(undefined4 *)(this + 4) = 0;" (assignment_expression "*(undefined4 *)(this + 4) = 0" (pointer_expression "*(undefined4 *)(this + 4)" (* "*") (cast_expression "(undefined4 *)(this + 4)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 4)" (( "(") (binary_expression "this + 4" (identifier "this") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "0")) (; ";")) (labeled_statement "sentry::sentry(local_30,this,true);" (statement_identifier "sentry") (: ":") (ERROR ":" (: ":")) (expression_statement "sentry(local_30,this,true);" (call_expression "sentry(local_30,this,true)" (identifier "sentry") (argument_list "(local_30,this,true)" (( "(") (identifier "local_30") (, ",") (identifier "this") (, ",") (true "true") () ")"))) (; ";"))) (if_statement "if (local_30[0] == (sentry)0x0) {\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }" (if "if") (parenthesized_expression "(local_30[0] == (sentry)0x0)" (( "(") (binary_expression "local_30[0] == (sentry)0x0" (subscript_expression "local_30[0]" (identifier "local_30") ([ "[") (number_literal "0") (] "]")) (== "==") (cast_expression "(sentry)0x0" (( "(") (type_descriptor "sentry" (type_identifier "sentry")) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    iVar3 = *(int *)(this + 4);\nLAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    uVar1 = 4;\n    if (iVar3 != 0) {\n      return this;\n    }\nLAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));\n    return this;\n  }" ({ "{") (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(this + 4)" (* "*") (cast_expression "(int *)(this + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 4)" (( "(") (binary_expression "this + 4" (identifier "this") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (labeled_statement "LAB_00362110:\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" (statement_identifier "LAB_00362110") (: ":") (if_statement "if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" (if "if") (parenthesized_expression "(0 < param_2)" (( "(") (binary_expression "0 < param_2" (number_literal "0") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" ({ "{") (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" (identifier "param_1") ([ "[") (number_literal "0") (] "]")) (= "=") (char_literal "L'\0'" (L' "L'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (char_literal "L'\0'" (L' "L'") (escape_sequence "\0") (' "'"))) (; ";")) (} "}")))) (expression_statement "uVar1 = 4;" (assignment_expression "uVar1 = 4" (identifier "uVar1") (= "=") (number_literal "4")) (; ";")) (if_statement "if (iVar3 != 0) {\n      return this;\n    }" (if "if") (parenthesized_expression "(iVar3 != 0)" (( "(") (binary_expression "iVar3 != 0" (identifier "iVar3") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      return this;\n    }" ({ "{") (return_statement "return this;" (return "return") (identifier "this") (; ";")) (} "}"))) (labeled_statement "LAB_00362280:\n    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" (statement_identifier "LAB_00362280") (: ":") (labeled_statement "wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" (statement_identifier "wios") (: ":") (ERROR ":" (: ":")) (expression_statement "clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));" (call_expression "clear((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14))" (identifier "clear") (argument_list "((wios *)(this + *(int *)(*(int *)this + -0xc)),\n                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14))" (( "(") (cast_expression "(wios *)(this + *(int *)(*(int *)this + -0xc))" (( "(") (type_descriptor "wios *" (type_identifier "wios") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc))" (( "(") (binary_expression "this + *(int *)(*(int *)this + -0xc)" (identifier "this") (+ "+") (pointer_expression "*(int *)(*(int *)this + -0xc)" (* "*") (cast_expression "(int *)(*(int *)this + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)this + -0xc)" (( "(") (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" (* "*") (cast_expression "(int *)this" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this"))) (+ "+") (number_literal "-0xc")) () ")"))))) () ")"))) (, ",") (binary_expression "uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" (identifier "uVar1") (| "|") (pointer_expression "*(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" (* "*") (cast_expression "(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14)" (( "(") (binary_expression "(wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14" (cast_expression "(wios *)(this + *(int *)(*(int *)this + -0xc))" (( "(") (type_descriptor "wios *" (type_identifier "wios") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc))" (( "(") (binary_expression "this + *(int *)(*(int *)this + -0xc)" (identifier "this") (+ "+") (pointer_expression "*(int *)(*(int *)this + -0xc)" (* "*") (cast_expression "(int *)(*(int *)this + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)this + -0xc)" (( "(") (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" (* "*") (cast_expression "(int *)this" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this"))) (+ "+") (number_literal "-0xc")) () ")"))))) () ")"))) (+ "+") (number_literal "0x14")) () ")"))))) () ")"))) (; ";")))) (return_statement "return this;" (return "return") (identifier "this") (; ";")) (} "}"))) (expression_statement "piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);" (assignment_expression "piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" (identifier "piVar7") (= "=") (pointer_expression "*(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" (* "*") (cast_expression "(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c)" (( "(") (type_descriptor "int **" (primitive_type "int") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(this + *(int *)(*(int *)this + -0xc) + 0x7c)" (( "(") (binary_expression "this + *(int *)(*(int *)this + -0xc) + 0x7c" (binary_expression "this + *(int *)(*(int *)this + -0xc)" (identifier "this") (+ "+") (pointer_expression "*(int *)(*(int *)this + -0xc)" (* "*") (cast_expression "(int *)(*(int *)this + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)this + -0xc)" (( "(") (binary_expression "*(int *)this + -0xc" (pointer_expression "*(int *)this" (* "*") (cast_expression "(int *)this" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "this"))) (+ "+") (number_literal "-0xc")) () ")"))))) (+ "+") (number_literal "0x7c")) () ")"))))) (; ";")) (if_statement "if ((int *)piVar7[2] < (int *)piVar7[3]) {\n    iVar2 = *(int *)piVar7[2];\n  }\n  else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" (if "if") (parenthesized_expression "((int *)piVar7[2] < (int *)piVar7[3])" (( "(") (binary_expression "(int *)piVar7[2] < (int *)piVar7[3]" (cast_expression "(int *)piVar7[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar7[2]" (identifier "piVar7") ([ "[") (number_literal "2") (] "]"))) (< "<") (cast_expression "(int *)piVar7[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar7[3]" (identifier "piVar7") ([ "[") (number_literal "3") (] "]")))) () ")")) (compound_statement "{\n    iVar2 = *(int *)piVar7[2];\n  }" ({ "{") (expression_statement "iVar2 = *(int *)piVar7[2];" (assignment_expression "iVar2 = *(int *)piVar7[2]" (identifier "iVar2") (= "=") (pointer_expression "*(int *)piVar7[2]" (* "*") (cast_expression "(int *)piVar7[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar7[2]" (identifier "piVar7") ([ "[") (number_literal "2") (] "]"))))) (; ";")) (} "}")) (else_clause "else {\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" (else "else") (compound_statement "{\n    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);\n  }" ({ "{") (expression_statement "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" (assignment_expression "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7)" (identifier "iVar2") (= "=") (call_expression "(**(code **)(*piVar7 + 0x24))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x24))" (( "(") (pointer_expression "**(code **)(*piVar7 + 0x24)" (* "*") (pointer_expression "*(code **)(*piVar7 + 0x24)" (* "*") (cast_expression "(code **)(*piVar7 + 0x24)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar7 + 0x24)" (( "(") (binary_expression "*piVar7 + 0x24" (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) (+ "+") (number_literal "0x24")) () ")"))))) () ")")) (argument_list "(piVar7)" (( "(") (identifier "piVar7") () ")")))) (; ";")) (} "}")))) (labeled_statement "LAB_00362178:\n  iVar3 = *(int *)(this + 4);" (statement_identifier "LAB_00362178") (: ":") (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(this + 4)" (* "*") (cast_expression "(int *)(this + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 4)" (( "(") (binary_expression "this + 4" (identifier "this") (+ "+") (number_literal "4")) () ")"))))) (; ";"))) (expression_statement "iVar6 = iVar3 + 1;" (assignment_expression "iVar6 = iVar3 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pwVar8 = param_1;" (assignment_expression "pwVar8 = param_1" (identifier "pwVar8") (= "=") (identifier "param_1")) (; ";")) (if_statement "if (iVar6 < param_2) {\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }" (if "if") (parenthesized_expression "(iVar6 < param_2)" (( "(") (binary_expression "iVar6 < param_2" (identifier "iVar6") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n    do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );\n  }" ({ "{") (do_statement "do {\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    } while( true );" (do "do") (compound_statement "{\n      if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }\n      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }\n      piVar5 = (int *)piVar7[2];\n      param_1 = pwVar8 + 2;\n      piVar4 = (int *)piVar7[3];\n      *(int *)pwVar8 = iVar2;\n      *(int *)(this + 4) = iVar6;\n      if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }\n      if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }\n      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;\n      iVar2 = *(int *)piVar7[2];\n      iVar3 = *(int *)(this + 4);\n      iVar6 = iVar3 + 1;\n      pwVar8 = param_1;\n      if (param_2 <= iVar6) break;\n    }" ({ "{") (if_statement "if (iVar2 == -1) {\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }" (if "if") (parenthesized_expression "(iVar2 == -1)" (( "(") (binary_expression "iVar2 == -1" (identifier "iVar2") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        uVar1 = 2;\nLAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }\n        if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }\n        goto LAB_00362280;\n      }" ({ "{") (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" (identifier "uVar1") (= "=") (number_literal "2")) (; ";")) (labeled_statement "LAB_00362330:\n        if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" (statement_identifier "LAB_00362330") (: ":") (if_statement "if (0 < param_2) {\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" (if "if") (parenthesized_expression "(0 < param_2)" (( "(") (binary_expression "0 < param_2" (number_literal "0") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n          pwVar8[0] = L'\0';\n          pwVar8[1] = L'\0';\n        }" ({ "{") (expression_statement "pwVar8[0] = L'\0';" (assignment_expression "pwVar8[0] = L'\0'" (subscript_expression "pwVar8[0]" (identifier "pwVar8") ([ "[") (number_literal "0") (] "]")) (= "=") (char_literal "L'\0'" (L' "L'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "pwVar8[1] = L'\0';" (assignment_expression "pwVar8[1] = L'\0'" (subscript_expression "pwVar8[1]" (identifier "pwVar8") ([ "[") (number_literal "1") (] "]")) (= "=") (char_literal "L'\0'" (L' "L'") (escape_sequence "\0") (' "'"))) (; ";")) (} "}")))) (if_statement "if (iVar3 == 0) {\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }\n        else if (uVar1 == 0) {\n          return this;\n        }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\nLAB_003622dc:\n          uVar1 = uVar1 | 4;\n        }" ({ "{") (labeled_statement "LAB_003622dc:\n          uVar1 = uVar1 | 4;" (statement_identifier "LAB_003622dc") (: ":") (expression_statement "uVar1 = uVar1 | 4;" (assignment_expression "uVar1 = uVar1 | 4" (identifier "uVar1") (= "=") (binary_expression "uVar1 | 4" (identifier "uVar1") (| "|") (number_literal "4"))) (; ";"))) (} "}")) (else_clause "else if (uVar1 == 0) {\n          return this;\n        }" (else "else") (if_statement "if (uVar1 == 0) {\n          return this;\n        }" (if "if") (parenthesized_expression "(uVar1 == 0)" (( "(") (binary_expression "uVar1 == 0" (identifier "uVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return this;\n        }" ({ "{") (return_statement "return this;" (return "return") (identifier "this") (; ";")) (} "}"))))) (goto_statement "goto LAB_00362280;" (goto "goto") (statement_identifier "LAB_00362280") (; ";")) (} "}"))) (if_statement "if (CONCAT22(in_register_0000001c,param_3) == iVar2) {\n        uVar1 = 0;\n        goto LAB_00362330;\n      }" (if "if") (parenthesized_expression "(CONCAT22(in_register_0000001c,param_3) == iVar2)" (( "(") (binary_expression "CONCAT22(in_register_0000001c,param_3) == iVar2" (call_expression "CONCAT22(in_register_0000001c,param_3)" (identifier "CONCAT22") (argument_list "(in_register_0000001c,param_3)" (( "(") (identifier "in_register_0000001c") (, ",") (identifier "param_3") () ")"))) (== "==") (identifier "iVar2")) () ")")) (compound_statement "{\n        uVar1 = 0;\n        goto LAB_00362330;\n      }" ({ "{") (expression_statement "uVar1 = 0;" (assignment_expression "uVar1 = 0" (identifier "uVar1") (= "=") (number_literal "0")) (; ";")) (goto_statement "goto LAB_00362330;" (goto "goto") (statement_identifier "LAB_00362330") (; ";")) (} "}"))) (expression_statement "piVar5 = (int *)piVar7[2];" (assignment_expression "piVar5 = (int *)piVar7[2]" (identifier "piVar5") (= "=") (cast_expression "(int *)piVar7[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar7[2]" (identifier "piVar7") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "param_1 = pwVar8 + 2;" (assignment_expression "param_1 = pwVar8 + 2" (identifier "param_1") (= "=") (binary_expression "pwVar8 + 2" (identifier "pwVar8") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "piVar4 = (int *)piVar7[3];" (assignment_expression "piVar4 = (int *)piVar7[3]" (identifier "piVar4") (= "=") (cast_expression "(int *)piVar7[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar7[3]" (identifier "piVar7") ([ "[") (number_literal "3") (] "]")))) (; ";")) (expression_statement "*(int *)pwVar8 = iVar2;" (assignment_expression "*(int *)pwVar8 = iVar2" (pointer_expression "*(int *)pwVar8" (* "*") (cast_expression "(int *)pwVar8" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "pwVar8"))) (= "=") (identifier "iVar2")) (; ";")) (expression_statement "*(int *)(this + 4) = iVar6;" (assignment_expression "*(int *)(this + 4) = iVar6" (pointer_expression "*(int *)(this + 4)" (* "*") (cast_expression "(int *)(this + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 4)" (( "(") (binary_expression "this + 4" (identifier "this") (+ "+") (number_literal "4")) () ")")))) (= "=") (identifier "iVar6")) (; ";")) (if_statement "if (piVar5 < piVar4) {\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }\n      else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" (if "if") (parenthesized_expression "(piVar5 < piVar4)" (( "(") (binary_expression "piVar5 < piVar4" (identifier "piVar5") (< "<") (identifier "piVar4")) () ")")) (compound_statement "{\n        iVar3 = *piVar5;\n        piVar7[2] = (int)(piVar5 + 1);\n      }" ({ "{") (expression_statement "iVar3 = *piVar5;" (assignment_expression "iVar3 = *piVar5" (identifier "iVar3") (= "=") (pointer_expression "*piVar5" (* "*") (identifier "piVar5"))) (; ";")) (expression_statement "piVar7[2] = (int)(piVar5 + 1);" (assignment_expression "piVar7[2] = (int)(piVar5 + 1)" (subscript_expression "piVar7[2]" (identifier "piVar7") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(int)(piVar5 + 1)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(piVar5 + 1)" (( "(") (binary_expression "piVar5 + 1" (identifier "piVar5") (+ "+") (number_literal "1")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" (else "else") (compound_statement "{\n                    \n        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);\n      }" ({ "{") (expression_statement "iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);" (assignment_expression "iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7)" (identifier "iVar3") (= "=") (call_expression "(**(code **)(*piVar7 + 0x28))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x28))" (( "(") (pointer_expression "**(code **)(*piVar7 + 0x28)" (* "*") (pointer_expression "*(code **)(*piVar7 + 0x28)" (* "*") (cast_expression "(code **)(*piVar7 + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar7 + 0x28)" (( "(") (binary_expression "*piVar7 + 0x28" (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "(piVar7)" (( "(") (identifier "piVar7") () ")")))) (; ";")) (} "}")))) (if_statement "if (iVar3 == -1) {\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }" (if "if") (parenthesized_expression "(iVar3 == -1)" (( "(") (binary_expression "iVar3 == -1" (identifier "iVar3") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        iVar3 = *(int *)(this + 4);\n        if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }\n        goto LAB_00362280;\n      }" ({ "{") (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(this + 4)" (* "*") (cast_expression "(int *)(this + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 4)" (( "(") (binary_expression "this + 4" (identifier "this") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (if_statement "if (param_2 < 1) {\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }\n        else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" (if "if") (parenthesized_expression "(param_2 < 1)" (( "(") (binary_expression "param_2 < 1" (identifier "param_2") (< "<") (number_literal "1")) () ")")) (compound_statement "{\n          uVar1 = 2;\n          if (iVar3 == 0) {\n            uVar1 = 6;\n          }\n        }" ({ "{") (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" (identifier "uVar1") (= "=") (number_literal "2")) (; ";")) (if_statement "if (iVar3 == 0) {\n            uVar1 = 6;\n          }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            uVar1 = 6;\n          }" ({ "{") (expression_statement "uVar1 = 6;" (assignment_expression "uVar1 = 6" (identifier "uVar1") (= "=") (number_literal "6")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" (else "else") (compound_statement "{\n          param_1[0] = L'\0';\n          param_1[1] = L'\0';\n          uVar1 = 2;\n          if (iVar3 == 0) goto LAB_003622dc;\n        }" ({ "{") (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" (identifier "param_1") ([ "[") (number_literal "0") (] "]")) (= "=") (char_literal "L'\0'" (L' "L'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (char_literal "L'\0'" (L' "L'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" (identifier "uVar1") (= "=") (number_literal "2")) (; ";")) (if_statement "if (iVar3 == 0) goto LAB_003622dc;" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_003622dc;" (goto "goto") (statement_identifier "LAB_003622dc") (; ";"))) (} "}")))) (goto_statement "goto LAB_00362280;" (goto "goto") (statement_identifier "LAB_00362280") (; ";")) (} "}"))) (if_statement "if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;" (if "if") (parenthesized_expression "((int *)piVar7[3] <= (int *)piVar7[2])" (( "(") (binary_expression "(int *)piVar7[3] <= (int *)piVar7[2]" (cast_expression "(int *)piVar7[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar7[3]" (identifier "piVar7") ([ "[") (number_literal "3") (] "]"))) (<= "<=") (cast_expression "(int *)piVar7[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar7[2]" (identifier "piVar7") ([ "[") (number_literal "2") (] "]")))) () ")")) (goto_statement "goto LAB_003622fc;" (goto "goto") (statement_identifier "LAB_003622fc") (; ";"))) (expression_statement "iVar2 = *(int *)piVar7[2];" (assignment_expression "iVar2 = *(int *)piVar7[2]" (identifier "iVar2") (= "=") (pointer_expression "*(int *)piVar7[2]" (* "*") (cast_expression "(int *)piVar7[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar7[2]" (identifier "piVar7") ([ "[") (number_literal "2") (] "]"))))) (; ";")) (expression_statement "iVar3 = *(int *)(this + 4);" (assignment_expression "iVar3 = *(int *)(this + 4)" (identifier "iVar3") (= "=") (pointer_expression "*(int *)(this + 4)" (* "*") (cast_expression "(int *)(this + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(this + 4)" (( "(") (binary_expression "this + 4" (identifier "this") (+ "+") (number_literal "4")) () ")"))))) (; ";")) (expression_statement "iVar6 = iVar3 + 1;" (assignment_expression "iVar6 = iVar3 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "pwVar8 = param_1;" (assignment_expression "pwVar8 = param_1" (identifier "pwVar8") (= "=") (identifier "param_1")) (; ";")) (if_statement "if (param_2 <= iVar6) break;" (if "if") (parenthesized_expression "(param_2 <= iVar6)" (( "(") (binary_expression "param_2 <= iVar6" (identifier "param_2") (<= "<=") (identifier "iVar6")) () ")")) (break_statement "break;" (break "break") (; ";"))) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}"))) (if_statement "if (iVar2 == -1) {\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }" (if "if") (parenthesized_expression "(iVar2 == -1)" (( "(") (binary_expression "iVar2 == -1" (identifier "iVar2") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n    if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }\n    if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }\n    goto LAB_00362280;\n  }" ({ "{") (if_statement "if (0 < param_2) {\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" (if "if") (parenthesized_expression "(0 < param_2)" (( "(") (binary_expression "0 < param_2" (number_literal "0") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n      param_1[0] = L'\0';\n      param_1[1] = L'\0';\n    }" ({ "{") (expression_statement "param_1[0] = L'\0';" (assignment_expression "param_1[0] = L'\0'" (subscript_expression "param_1[0]" (identifier "param_1") ([ "[") (number_literal "0") (] "]")) (= "=") (char_literal "L'\0'" (L' "L'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "param_1[1] = L'\0';" (assignment_expression "param_1[1] = L'\0'" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (char_literal "L'\0'" (L' "L'") (escape_sequence "\0") (' "'"))) (; ";")) (} "}"))) (if_statement "if (iVar3 == 0) {\n      uVar1 = 6;\n    }\n    else {\n      uVar1 = 2;\n    }" (if "if") (parenthesized_expression "(iVar3 == 0)" (( "(") (binary_expression "iVar3 == 0" (identifier "iVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar1 = 6;\n    }" ({ "{") (expression_statement "uVar1 = 6;" (assignment_expression "uVar1 = 6" (identifier "uVar1") (= "=") (number_literal "6")) (; ";")) (} "}")) (else_clause "else {\n      uVar1 = 2;\n    }" (else "else") (compound_statement "{\n      uVar1 = 2;\n    }" ({ "{") (expression_statement "uVar1 = 2;" (assignment_expression "uVar1 = 2" (identifier "uVar1") (= "=") (number_literal "2")) (; ";")) (} "}")))) (goto_statement "goto LAB_00362280;" (goto "goto") (statement_identifier "LAB_00362280") (; ";")) (} "}"))) (goto_statement "goto LAB_00362110;" (goto "goto") (statement_identifier "LAB_00362110") (; ";")) (labeled_statement "LAB_003622fc:\n  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" (statement_identifier "LAB_003622fc") (: ":") (expression_statement "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);" (assignment_expression "iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7)" (identifier "iVar2") (= "=") (call_expression "(**(code **)(*piVar7 + 0x24))(piVar7)" (parenthesized_expression "(**(code **)(*piVar7 + 0x24))" (( "(") (pointer_expression "**(code **)(*piVar7 + 0x24)" (* "*") (pointer_expression "*(code **)(*piVar7 + 0x24)" (* "*") (cast_expression "(code **)(*piVar7 + 0x24)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*piVar7 + 0x24)" (( "(") (binary_expression "*piVar7 + 0x24" (pointer_expression "*piVar7" (* "*") (identifier "piVar7")) (+ "+") (number_literal "0x24")) () ")"))))) () ")")) (argument_list "(piVar7)" (( "(") (identifier "piVar7") () ")")))) (; ";"))) (goto_statement "goto LAB_00362178;" (goto "goto") (statement_identifier "LAB_00362178") (; ";")) (} "}"))

/* std::wistream::get(wchar_t*, int, wchar_t) */

wistream * __thiscall
std::wistream::get(wistream *var_1,type_3 *param_1,int var_2,type_3 param_3)

{
  type_1 var_5;
  int var_7;
  int var_3;
  int *var_13;
  int *var_12;
  int var_6;
  type_2 in_register_0000001c;
  int *piVar7;
  type_3 *var_11;
  type_4 local_30 [20];
  
  *(type_5 *)(var_1 + 4) = 0;
  sentry::type_4(local_30,var_1,true);
  if (local_30[0] == (type_4)0x0) {
    var_3 = *(int *)(var_1 + 4);
LAB_00362110:
    if (0 < var_2) {
      param_1[0] = L'\0';
      param_1[1] = L'\0';
    }
    var_5 = var_8;
    if (var_3 != 0) {
      return var_1;
    }
LAB_00362280:
    wios::var_4((type_6 *)(var_1 + *(int *)(*(int *)var_1 + -0xc)),
                var_5 | *(type_1 *)((type_6 *)(var_1 + *(int *)(*(int *)var_1 + -0xc)) + 0x14));
    return var_1;
  }
  piVar7 = *(int **)(var_1 + *(int *)(*(int *)var_1 + -0xc) + 0x7c);
  if ((int *)piVar7[2] < (int *)piVar7[3]) {
    var_7 = *(int *)piVar7[2];
  }
  else {
    var_7 = (**(type_7 **)(*piVar7 + 0x24))(piVar7);
  }
LAB_00362178:
  var_3 = *(int *)(var_1 + 4);
  var_6 = var_3 + 1;
  var_11 = param_1;
  if (var_6 < var_2) {
    do {
      if (var_7 == -1) {
        var_5 = var_14;
LAB_00362330:
        if (0 < var_2) {
          var_11[0] = L'\0';
          var_11[1] = L'\0';
        }
        if (var_3 == 0) {
LAB_003622dc:
          var_5 = var_5 | var_8;
        }
        else if (var_5 == var_9) {
          return var_1;
        }
        goto LAB_00362280;
      }
      if (var_10(in_register_0000001c,param_3) == var_7) {
        var_5 = var_9;
        goto LAB_00362330;
      }
      var_12 = (int *)piVar7[2];
      param_1 = var_11 + 2;
      var_13 = (int *)piVar7[3];
      *(int *)var_11 = var_7;
      *(int *)(var_1 + 4) = var_6;
      if (var_12 < var_13) {
        var_3 = *var_12;
        piVar7[2] = (int)(var_12 + 1);
      }
      else {
                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */
        var_3 = (**(type_7 **)(*piVar7 + 0x28))(piVar7);
      }
      if (var_3 == -1) {
        var_3 = *(int *)(var_1 + 4);
        if (var_2 < 1) {
          var_5 = var_14;
          if (var_3 == 0) {
            var_5 = var_8|var_14;
          }
        }
        else {
          param_1[0] = L'\0';
          param_1[1] = L'\0';
          var_5 = var_14;
          if (var_3 == 0) goto LAB_003622dc;
        }
        goto LAB_00362280;
      }
      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;
      var_7 = *(int *)piVar7[2];
      var_3 = *(int *)(var_1 + 4);
      var_6 = var_3 + 1;
      var_11 = param_1;
      if (var_2 <= var_6) break;
    } while( true );
  }
  if (var_7 == -1) {
    if (0 < var_2) {
      param_1[0] = L'\0';
      param_1[1] = L'\0';
    }
    if (var_3 == 0) {
      var_5 = var_8|var_14;
    }
    else {
      var_5 = var_14;
    }
    goto LAB_00362280;
  }
  goto LAB_00362110;
LAB_003622fc:
  var_7 = (**(type_7 **)(*piVar7 + 0x24))(piVar7);
  goto LAB_00362178;
}


(translation_unit (ERROR (binary_expression left: (binary_expression left: (identifier) right: (identifier)) (ERROR (identifier) (identifier) (identifier) (identifier)) right: (identifier)) type: (type_identifier) (pointer_declarator declarator: (identifier)) (ERROR (identifier)) declarator: (identifier) (identifier) (identifier)) (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) 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))) (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))) (labeled_statement label: (statement_identifier) (ERROR) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (true))))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (number_literal)))) consequence: (compound_statement (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))))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))) (labeled_statement label: (statement_identifier) (labeled_statement label: (statement_identifier) (ERROR) (expression_statement (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal)))))))) (binary_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: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal)))))))) right: (number_literal))))))))))) (return_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: (binary_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: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (number_literal)))))) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier)))))))) (labeled_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)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (identifier)))))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (parenthesized_expression (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))) arguments: (argument_list (identifier)))))))) (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: (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 (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier)))))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (subscript_expression argument: (identifier) index: (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)) value: (subscript_expression argument: (identifier) index: (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: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (break_statement))) condition: (parenthesized_expression (true))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (goto_statement label: (statement_identifier)))) (goto_statement label: (statement_identifier)) (labeled_statement label: (statement_identifier) (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)))))) (goto_statement label: (statement_identifier))))

/* std::wistream::MASKED(wchar_t*, int, wchar_t) */

wistream * __thiscall
std::wistream::MASKED(wistream *this,wchar_t *param_1,int param_2,wchar_t param_3)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  int *piVar4;
  int *piVar5;
  int iVar6;
  undefined2 in_register_0000001c;
  int *piVar7;
  wchar_t *pwVar8;
  sentry local_30 [20];
  
  *(undefined4 *)(this + 4) = 0;
  sentry::sentry(local_30,this,true);
  if (local_30[0] == (sentry)0x0) {
    iVar3 = *(int *)(this + 4);
LAB_00362110:
    if (0 < param_2) {
      param_1[0] = L'\0';
      param_1[1] = L'\0';
    }
    uVar1 = 4;
    if (iVar3 != 0) {
      return this;
    }
LAB_00362280:
    wios::clear((wios *)(this + *(int *)(*(int *)this + -0xc)),
                uVar1 | *(uint *)((wios *)(this + *(int *)(*(int *)this + -0xc)) + 0x14));
    return this;
  }
  piVar7 = *(int **)(this + *(int *)(*(int *)this + -0xc) + 0x7c);
  if ((int *)piVar7[2] < (int *)piVar7[3]) {
    iVar2 = *(int *)piVar7[2];
  }
  else {
    iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);
  }
LAB_00362178:
  iVar3 = *(int *)(this + 4);
  iVar6 = iVar3 + 1;
  pwVar8 = param_1;
  if (iVar6 < param_2) {
    do {
      if (iVar2 == -1) {
        uVar1 = 2;
LAB_00362330:
        if (0 < param_2) {
          pwVar8[0] = L'\0';
          pwVar8[1] = L'\0';
        }
        if (iVar3 == 0) {
LAB_003622dc:
          uVar1 = uVar1 | 4;
        }
        else if (uVar1 == 0) {
          return this;
        }
        goto LAB_00362280;
      }
      if (CONCAT22(in_register_0000001c,param_3) == iVar2) {
        uVar1 = 0;
        goto LAB_00362330;
      }
      piVar5 = (int *)piVar7[2];
      param_1 = pwVar8 + 2;
      piVar4 = (int *)piVar7[3];
      *(int *)pwVar8 = iVar2;
      *(int *)(this + 4) = iVar6;
      if (piVar5 < piVar4) {
        iVar3 = *piVar5;
        piVar7[2] = (int)(piVar5 + 1);
      }
      else {
                    /* try { // try from 003622ec to 00362323 has its CatchHandler @ 0036221c */
        iVar3 = (**(code **)(*piVar7 + 0x28))(piVar7);
      }
      if (iVar3 == -1) {
        iVar3 = *(int *)(this + 4);
        if (param_2 < 1) {
          uVar1 = 2;
          if (iVar3 == 0) {
            uVar1 = 6;
          }
        }
        else {
          param_1[0] = L'\0';
          param_1[1] = L'\0';
          uVar1 = 2;
          if (iVar3 == 0) goto LAB_003622dc;
        }
        goto LAB_00362280;
      }
      if ((int *)piVar7[3] <= (int *)piVar7[2]) goto LAB_003622fc;
      iVar2 = *(int *)piVar7[2];
      iVar3 = *(int *)(this + 4);
      iVar6 = iVar3 + 1;
      pwVar8 = param_1;
      if (param_2 <= iVar6) break;
    } while( true );
  }
  if (iVar2 == -1) {
    if (0 < param_2) {
      param_1[0] = L'\0';
      param_1[1] = L'\0';
    }
    if (iVar3 == 0) {
      uVar1 = 6;
    }
    else {
      uVar1 = 2;
    }
    goto LAB_00362280;
  }
  goto LAB_00362110;
LAB_003622fc:
  iVar2 = (**(code **)(*piVar7 + 0x24))(piVar7);
  goto LAB_00362178;
}

