
/* DWARF original prototype: void do_parse<true>(Dwarf_info_reader * this) */

void __thiscall gold::Dwarf_info_reader::do_parse<true>(Dwarf_info_reader *this)

{
  uint uVar1;
  _func_int_varargs **pp_Var2;
  ulong uVar3;
  _func_int_varargs *p_Var4;
  undefined8 uVar5;
  int iVar6;
  uint abbrev_shndx;
  uchar *puVar7;
  undefined4 extraout_var;
  Elf_reloc_mapper *pEVar8;
  uint *puVar9;
  Dwarf_info_reader *abbrev_offset;
  uint *puVar10;
  Dwarf_info_reader *pDVar11;
  uint *puVar12;
  uint uVar13;
  uint *puVar14;
  uint *puVar15;
  long lVar16;
  byte *pbVar17;
  ulong uVar18;
  byte *pbVar19;
  long lVar20;
  ulong local_e8;
  ulong local_e0;
  bool buffer_is_new;
  section_size_type buffer_size;
  Dwarf_die root_die;
  
  puVar7 = Object::decompressed_section_contents
                     (&this->object_->super_Object,this->shndx_,&buffer_size,&buffer_is_new,
                      (uint64_t *)0x0);
  this->buffer_ = puVar7;
  if ((puVar7 != (uchar *)0x0) && (buffer_size != 0)) {
    this->buffer_end_ = puVar7 + buffer_size;
    iVar6 = (*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(ulong)this->shndx_);
    pEVar8 = make_elf_reloc_mapper(this->object_,this->symtab_,this->symtab_size_);
    pp_Var2 = pEVar8->_vptr_Elf_reloc_mapper;
    this->reloc_mapper_ = pEVar8;
    (*pp_Var2[2])(pEVar8,(ulong)this->reloc_shndx_,(ulong)this->reloc_type_);
    puVar15 = (uint *)this->buffer_;
    puVar9 = (uint *)this->buffer_end_;
    abbrev_shndx = this->abbrev_shndx_;
    if (puVar15 < puVar9) {
      puVar10 = puVar15 + 1;
      this->cu_offset_ = 0;
      this->cu_length_ = (long)puVar9 - (long)puVar15;
      if (puVar10 <= puVar9) {
        lVar16 = 0;
        puVar12 = puVar15;
        do {
          uVar13 = *puVar12;
          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |
                   uVar13 << 0x18;
          if (uVar13 == 0xffffffff) {
            puVar10 = puVar12 + 3;
            if (puVar9 < puVar10) break;
            uVar5 = *(undefined8 *)(puVar12 + 1);
            this->offset_size_ = 8;
            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |
                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |
                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |
                     (uint)((ulong)uVar5 >> 8) & 0xff000000;
          }
          else {
            this->offset_size_ = 4;
          }
          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);
          if (puVar9 < puVar14) break;
          uVar13 = this->offset_size_;
          uVar18 = (ulong)uVar13;
          lVar20 = (long)puVar14 - (long)puVar12;
          this->cu_length_ = lVar20;
          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <
              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;
          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));
          if (uVar13 == 4) {
            uVar1 = *(uint *)((long)puVar10 + 2);
            pDVar11 = (Dwarf_info_reader *)
                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |
                             uVar1 << 0x18);
          }
          else {
            uVar3 = *(ulong *)((long)puVar10 + 2);
            pDVar11 = (Dwarf_info_reader *)
                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |
                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |
                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |
                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);
          }
          abbrev_offset = pDVar11;
          if (this->reloc_shndx_ != 0) {
            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])
                                     (this->reloc_mapper_,
                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)
            ;
            if (abbrev_shndx == 0) {
              return;
            }
            abbrev_offset = root_die.dwinfo_;
            if (this->reloc_type_ == 9) {
              abbrev_offset =
                   (Dwarf_info_reader *)
                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +
                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);
            }
            uVar13 = this->offset_size_;
            uVar18 = (ulong)uVar13;
          }
          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);
          pbVar19 = pbVar17 + 1;
          this->address_size_ = (uint)*pbVar17;
          if (this->is_type_unit_ == false) {
            local_e0 = 0;
            local_e8 = 0;
          }
          else {
            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;
            uVar3 = *(ulong *)(pbVar17 + 1);
            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |
                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |
                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |
                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;
            if (uVar13 == 4) {
              uVar13 = *(uint *)(pbVar17 + 9);
              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8
                                | uVar13 << 0x18);
            }
            else {
              uVar3 = *(ulong *)(pbVar17 + 9);
              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |
                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |
                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |
                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;
            }
            pbVar19 = pbVar17 + uVar18 + 9;
          }
          uVar13 = (this->abbrev_table_).abbrev_shndx_;
          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||
             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {
            Dwarf_abbrev_table::do_read_abbrevs
                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);
          }
          Dwarf_die::Dwarf_die
                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),
                     (Dwarf_die *)0x0);
          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))
          {
            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);
            if (this->is_type_unit_ == false) {
              p_Var4 = this->_vptr_Dwarf_info_reader[2];
              if (p_Var4 != visit_compilation_unit) {
                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */
                (*p_Var4)(this,lVar16,lVar20,&root_die);
              }
            }
            else {
              p_Var4 = this->_vptr_Dwarf_info_reader[3];
              if (p_Var4 != visit_type_unit) {
                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);
              }
            }
          }
          if (root_die.attributes_.
              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>
              ._M_impl._M_start != (pointer)0x0) {
            operator_delete(root_die.attributes_.
                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>
                            ._M_impl._M_start);
          }
          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;
          puVar15 = (uint *)this->buffer_;
          lVar20 = (long)this->buffer_end_ - (long)puVar14;
          puVar10 = puVar14 + 1;
          this->cu_length_ = lVar20;
          lVar16 = (long)puVar14 - (long)puVar15;
          this->cu_offset_ = lVar16;
          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);
          puVar12 = puVar14;
        } while (puVar10 <= puVar9);
      }
      warn_corrupt_debug_section(this);
    }
LAB_00306aa8:
    if (buffer_is_new != false) {
      if (this->buffer_ != (uchar *)0x0) {
        operator_delete__(this->buffer_);
      }
      this->buffer_ = (uchar *)0x0;
    }
  }
  return;
}



void FUN_003067f0(long *param_1)

{
  uint uVar1;
  code *pcVar2;
  undefined8 uVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long *plVar7;
  uint *puVar8;
  ulong uVar9;
  uint *puVar10;
  ulong uVar11;
  uint *puVar12;
  uint uVar13;
  uint *puVar14;
  uint *puVar15;
  byte *pbVar16;
  ulong uVar17;
  byte *pbVar18;
  long lVar19;
  ulong local_e8;
  ulong local_e0;
  char local_d1;
  long local_d0;
  ulong local_c8 [6];
  int *local_98;
  long local_90;
  
  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);
  param_1[8] = lVar5;
  if ((lVar5 != 0) && (local_d0 != 0)) {
    param_1[9] = lVar5 + local_d0;
    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);
    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);
    lVar5 = *plVar7;
    param_1[0x123] = (long)plVar7;
    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);
    puVar15 = (uint *)param_1[8];
    puVar8 = (uint *)param_1[9];
    iVar4 = *(int *)((long)param_1 + 0x34);
    if (puVar15 < puVar8) {
      puVar10 = puVar15 + 1;
      param_1[10] = 0;
      param_1[0xb] = (long)puVar8 - (long)puVar15;
      if (puVar10 <= puVar8) {
        lVar5 = 0;
        puVar12 = puVar15;
        do {
          uVar13 = *puVar12;
          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |
                   uVar13 << 0x18;
          if (uVar13 == 0xffffffff) {
            puVar10 = puVar12 + 3;
            if (puVar8 < puVar10) break;
            uVar3 = *(undefined8 *)(puVar12 + 1);
            *(undefined4 *)(param_1 + 0xc) = 8;
            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |
                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |
                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |
                     (uint)((ulong)uVar3 >> 8) & 0xff000000;
          }
          else {
            *(undefined4 *)(param_1 + 0xc) = 4;
          }
          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);
          if (puVar8 < puVar14) break;
          uVar13 = *(uint *)(param_1 + 0xc);
          uVar17 = (ulong)uVar13;
          lVar19 = (long)puVar14 - (long)puVar12;
          param_1[0xb] = lVar19;
          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <
              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;
          *(uint *)(param_1 + 0xd) =
               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));
          if (uVar13 == 4) {
            uVar1 = *(uint *)((long)puVar10 + 2);
            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |
                            uVar1 << 0x18);
          }
          else {
            uVar11 = *(ulong *)((long)puVar10 + 2);
            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |
                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |
                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |
                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;
          }
          uVar9 = uVar11;
          if (*(int *)((long)param_1 + 0x2c) != 0) {
            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))
                              ((long *)param_1[0x123],
                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);
            if (iVar4 == 0) {
              return;
            }
            uVar9 = local_c8[0];
            if ((int)param_1[6] == 9) {
              uVar9 = local_c8[0] + uVar11;
            }
            uVar13 = *(uint *)(param_1 + 0xc);
            uVar17 = (ulong)uVar13;
          }
          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);
          pbVar18 = pbVar16 + 1;
          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;
          if ((char)param_1[1] == '\0') {
            local_e0 = 0;
            local_e8 = 0;
          }
          else {
            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;
            uVar11 = *(ulong *)(pbVar16 + 1);
            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |
                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |
                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |
                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;
            if (uVar13 == 4) {
              uVar13 = *(uint *)(pbVar16 + 9);
              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8
                                | uVar13 << 0x18);
            }
            else {
              uVar11 = *(ulong *)(pbVar16 + 9);
              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |
                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |
                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |
                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;
            }
            pbVar18 = pbVar16 + uVar17 + 9;
          }
          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))
          {
            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);
          }
          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);
          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {
            if ((char)param_1[1] == '\0') {
              pcVar2 = *(code **)(*param_1 + 0x10);
              if (pcVar2 != FUN_00301070) {
                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */
                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);
              }
            }
            else {
              pcVar2 = *(code **)(*param_1 + 0x18);
              if (pcVar2 != FUN_00301080) {
                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);
              }
            }
          }
          if (local_90 != 0) {
            FUN_00338a40();
          }
          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;
          puVar15 = (uint *)param_1[8];
          lVar19 = param_1[9] - (long)puVar14;
          puVar10 = puVar14 + 1;
          param_1[0xb] = lVar19;
          lVar5 = (long)puVar14 - (long)puVar15;
          param_1[10] = lVar5;
          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);
          puVar12 = puVar14;
        } while (puVar10 <= puVar8);
      }
      FUN_00301e60(param_1);
    }
LAB_00306aa8:
    if (local_d1 != '\0') {
      if (param_1[8] != 0) {
        thunk_FUN_00338a40();
      }
      param_1[8] = 0;
    }
  }
  return;
}


PUSH R15
XOR R8D,R8D
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
MOV RBX,RDI
SUB RSP,0xc8
MOV ESI,dword ptr [RDI + 0x28]
MOV RDI,qword ptr [RDI + 0x10]
LEA RCX,[RSP + 0x27]
LEA RDX,[RSP + 0x28]
CALL 0x0022a660
MOV qword ptr [RBX + 0x40],RAX
TEST RAX,RAX
JZ 0x00306ac5
MOV RDX,qword ptr [RSP + 0x28]
TEST RDX,RDX
JZ 0x00306ac5
MOV RDI,qword ptr [RBX + 0x10]
ADD RAX,RDX
MOV ESI,dword ptr [RBX + 0x28]
MOV qword ptr [RBX + 0x48],RAX
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0xd0]
MOV RDX,qword ptr [RBX + 0x20]
MOV RSI,qword ptr [RBX + 0x18]
MOV RDI,qword ptr [RBX + 0x10]
MOV R15,RAX
CALL 0x00301200
MOV ESI,dword ptr [RBX + 0x2c]
MOV EDX,dword ptr [RBX + 0x30]
MOV RCX,qword ptr [RAX]
MOV qword ptr [RBX + 0x918],RAX
MOV RDI,RAX
CALL qword ptr [RCX + 0x10]
MOV RSI,qword ptr [RBX + 0x40]
MOV RAX,qword ptr [RBX + 0x48]
MOV R13D,dword ptr [RBX + 0x34]
CMP RSI,RAX
JNC 0x00306aa8
MOV RDX,RAX
LEA RCX,[RSI + 0x4]
MOV qword ptr [RBX + 0x50],0x0
SUB RDX,RSI
MOV qword ptr [RBX + 0x58],RDX
CMP RCX,RAX
JA 0x00306aa0
MOV RDX,RSI
XOR EDI,EDI
LEA R14,[RSP + 0x30]
MOV EBP,dword ptr [RDX]
BSWAP EBP
CMP EBP,-0x1
JZ 0x00306ae0
MOV dword ptr [RBX + 0x60],0x4
MOV EBP,EBP
ADD RBP,RCX
CMP RBP,RAX
JA 0x00306aa0
MOV R12,RBP
MOV R9D,dword ptr [RBX + 0x60]
SUB R12,RDX
LEA RAX,[R12 + RDI*0x1]
LEA RDX,[RCX + R9*0x1 + 0x3]
MOV qword ptr [RBX + 0x58],R12
MOV R10,R9
ADD RAX,RSI
CMP RDX,RAX
JA 0x00306aa0
MOVZX EAX,byte ptr [RCX]
LEA R8,[RCX + 0x2]
SHL EAX,0x8
MOV EDX,EAX
MOVZX EAX,byte ptr [RCX + 0x1]
OR EAX,EDX
MOVZX EAX,AX
MOV dword ptr [RBX + 0x68],EAX
CMP R9D,0x4
JZ 0x00306b20
MOV RCX,qword ptr [RCX + 0x2]
BSWAP RCX
MOV EDX,dword ptr [RBX + 0x2c]
TEST EDX,EDX
JZ 0x00306980
MOV RDI,qword ptr [RBX + 0x918]
MOV RAX,R8
MOV qword ptr [RSP + 0x10],RCX
MOV RDX,R14
SUB RAX,RSI
MOV qword ptr [RSP + 0x8],R8
MOV RSI,RAX
MOV RAX,qword ptr [RDI]
CALL qword ptr [RAX + 0x28]
MOV R13D,EAX
TEST EAX,EAX
JZ 0x00306ac5
CMP dword ptr [RBX + 0x30],0x9
MOV RAX,qword ptr [RSP + 0x30]
MOV R8,qword ptr [RSP + 0x8]
MOV RCX,qword ptr [RSP + 0x10]
JZ 0x00306b18
MOV R9D,dword ptr [RBX + 0x60]
MOV RCX,RAX
MOV R10,R9
ADD R8,R9
CMP byte ptr [RBX + 0x8],0x0
MOVZX EAX,byte ptr [R8]
LEA R11,[R8 + 0x1]
MOV dword ptr [RBX + 0x64],EAX
JZ 0x00306b30
MOV RAX,qword ptr [RBX + 0x58]
LEA RDX,[R11 + R9*0x1 + 0x8]
ADD RAX,qword ptr [RBX + 0x50]
ADD RAX,qword ptr [RBX + 0x40]
CMP RDX,RAX
JA 0x00306aa0
MOV RAX,qword ptr [R8 + 0x1]
LEA R11,[R8 + 0x9]
BSWAP RAX
MOV qword ptr [RSP + 0x10],RAX
CMP R10D,0x4
JZ 0x00306b00
MOV RAX,qword ptr [R8 + 0x9]
BSWAP RAX
MOV qword ptr [RSP + 0x18],RAX
ADD R11,R9
MOV EAX,dword ptr [RBX + 0x70]
LEA RDI,[RBX + 0x70]
MOV RSI,qword ptr [RBX + 0x10]
TEST EAX,EAX
JZ 0x003069f3
CMP R13D,EAX
JZ 0x00306b50
MOV EDX,R13D
MOV qword ptr [RSP + 0x8],R11
CALL 0x00302430
MOV R11,qword ptr [RSP + 0x8]
MOV RDX,R11
XOR ECX,ECX
SUB RDX,qword ptr [RBX + 0x40]
MOV RSI,RBX
SUB RDX,qword ptr [RBX + 0x50]
MOV RDI,R14
CALL 0x00303d40
MOV RAX,qword ptr [RSP + 0x60]
TEST RAX,RAX
JZ 0x00306a58
MOV EAX,dword ptr [RAX]
TEST EAX,EAX
JZ 0x00306a58
MOV RSI,qword ptr [RBX + 0x50]
MOV RAX,qword ptr [RBX]
ADD RSI,R15
CMP byte ptr [RBX + 0x8],0x0
JZ 0x00306b60
MOV RAX,qword ptr [RAX + 0x18]
LEA RCX,[0x301080]
CMP RAX,RCX
JNZ 0x00306b88
NOP dword ptr [RAX]
MOV RDI,qword ptr [RSP + 0x68]
TEST RDI,RDI
JZ 0x00306a67
CALL 0x00338a40
MOV RDX,qword ptr [RBX + 0x48]
CMP RDX,RBP
JBE 0x00306aa8
MOV RSI,qword ptr [RBX + 0x40]
MOV RAX,RBP
SUB RDX,RBP
LEA RCX,[RBP + 0x4]
MOV qword ptr [RBX + 0x58],RDX
SUB RAX,RSI
ADD RDX,RAX
MOV qword ptr [RBX + 0x50],RAX
MOV RDI,RAX
LEA RAX,[RSI + RDX*0x1]
MOV RDX,RBP
CMP RCX,RAX
JBE 0x003068b7
NOP
MOV RDI,RBX
CALL 0x00301e60
CMP byte ptr [RSP + 0x27],0x0
JZ 0x00306ac5
MOV RDI,qword ptr [RBX + 0x40]
TEST RDI,RDI
JZ 0x00306abd
CALL 0x00338a10
MOV qword ptr [RBX + 0x40],0x0
ADD RSP,0xc8
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
LEA RCX,[RDX + 0xc]
CMP RCX,RAX
JA 0x00306aa0
MOV RBP,qword ptr [RDX + 0x4]
MOV dword ptr [RBX + 0x60],0x8
BSWAP RBP
JMP 0x003068cb
MOV EAX,dword ptr [R8 + 0x9]
BSWAP EAX
MOV EAX,EAX
MOV qword ptr [RSP + 0x18],RAX
JMP 0x003069d8
ADD RAX,RCX
JMP 0x00306976
MOV ECX,dword ptr [RCX + 0x2]
BSWAP ECX
MOV ECX,ECX
JMP 0x00306928
MOV qword ptr [RSP + 0x18],0x0
MOV qword ptr [RSP + 0x10],0x0
JMP 0x003069db
CMP RCX,qword ptr [RBX + 0x78]
JNZ 0x003069f3
JMP 0x00306a05
MOV RAX,qword ptr [RAX + 0x10]
LEA RCX,[0x301070]
CMP RAX,RCX
JZ 0x00306a58
MOV RCX,R14
MOV RDX,R12
MOV RDI,RBX
CALL RAX
JMP 0x00306a58
MOV R9,R14
MOV R8,qword ptr [RSP + 0x10]
MOV RCX,qword ptr [RSP + 0x18]
MOV RDX,R12
MOV RDI,RBX
CALL RAX
JMP 0x00306a58
(translation_unit "void FUN_003067f0(long *param_1)\n\n{\n  uint uVar1;\n  code *pcVar2;\n  undefined8 uVar3;\n  int iVar4;\n  long lVar5;\n  long lVar6;\n  long *plVar7;\n  uint *puVar8;\n  ulong uVar9;\n  uint *puVar10;\n  ulong uVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  byte *pbVar16;\n  ulong uVar17;\n  byte *pbVar18;\n  long lVar19;\n  ulong local_e8;\n  ulong local_e0;\n  char local_d1;\n  long local_d0;\n  ulong local_c8 [6];\n  int *local_98;\n  long local_90;\n  \n  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);\n  param_1[8] = lVar5;\n  if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_003067f0(long *param_1)\n\n{\n  uint uVar1;\n  code *pcVar2;\n  undefined8 uVar3;\n  int iVar4;\n  long lVar5;\n  long lVar6;\n  long *plVar7;\n  uint *puVar8;\n  ulong uVar9;\n  uint *puVar10;\n  ulong uVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  byte *pbVar16;\n  ulong uVar17;\n  byte *pbVar18;\n  long lVar19;\n  ulong local_e8;\n  ulong local_e0;\n  char local_d1;\n  long local_d0;\n  ulong local_c8 [6];\n  int *local_98;\n  long local_90;\n  \n  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);\n  param_1[8] = lVar5;\n  if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_003067f0(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  code *pcVar2;\n  undefined8 uVar3;\n  int iVar4;\n  long lVar5;\n  long lVar6;\n  long *plVar7;\n  uint *puVar8;\n  ulong uVar9;\n  uint *puVar10;\n  ulong uVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  byte *pbVar16;\n  ulong uVar17;\n  byte *pbVar18;\n  long lVar19;\n  ulong local_e8;\n  ulong local_e0;\n  char local_d1;\n  long local_d0;\n  ulong local_c8 [6];\n  int *local_98;\n  long local_90;\n  \n  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);\n  param_1[8] = lVar5;\n  if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "uint *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "uint *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "byte *pbVar16;" type_identifier (pointer_declarator "*pbVar16" * identifier) ;) (declaration "ulong uVar17;" type_identifier identifier ;) (declaration "byte *pbVar18;" type_identifier (pointer_declarator "*pbVar18" * identifier) ;) (declaration "long lVar19;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_e8;" type_identifier identifier ;) (declaration "ulong local_e0;" type_identifier identifier ;) (declaration "char local_d1;" primitive_type identifier ;) (declaration "long local_d0;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_c8 [6];" type_identifier (array_declarator "local_c8 [6]" identifier [ number_literal ]) ;) (declaration "int *local_98;" primitive_type (pointer_declarator "*local_98" * identifier) ;) (declaration "long local_90;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);" (assignment_expression "lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0)" identifier = (call_expression "FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0)" identifier (argument_list "(param_1[2],(int)param_1[5],&local_d0,&local_d1,0)" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) , (pointer_expression "&local_d0" & identifier) , (pointer_expression "&local_d1" & identifier) , number_literal )))) ;) (expression_statement "param_1[8] = lVar5;" (assignment_expression "param_1[8] = lVar5" (subscript_expression "param_1[8]" identifier [ number_literal ]) = identifier) ;) (if_statement "if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }" if (parenthesized_expression "((lVar5 != 0) && (local_d0 != 0))" ( (binary_expression "(lVar5 != 0) && (local_d0 != 0)" (parenthesized_expression "(lVar5 != 0)" ( (binary_expression "lVar5 != 0" identifier != number_literal) )) && (parenthesized_expression "(local_d0 != 0)" ( (binary_expression "local_d0 != 0" identifier != number_literal) ))) )) (compound_statement "{\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }" { (expression_statement "param_1[9] = lVar5 + local_d0;" (assignment_expression "param_1[9] = lVar5 + local_d0" (subscript_expression "param_1[9]" identifier [ number_literal ]) = (binary_expression "lVar5 + local_d0" identifier + identifier)) ;) (expression_statement "lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);" (assignment_expression "lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5])" identifier = (call_expression "(**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5])" (parenthesized_expression "(**(code **)(*(long *)param_1[2] + 0xd0))" ( (pointer_expression "**(code **)(*(long *)param_1[2] + 0xd0)" * (pointer_expression "*(code **)(*(long *)param_1[2] + 0xd0)" * (cast_expression "(code **)(*(long *)param_1[2] + 0xd0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)param_1[2] + 0xd0)" ( (binary_expression "*(long *)param_1[2] + 0xd0" (pointer_expression "*(long *)param_1[2]" * (cast_expression "(long *)param_1[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "((long *)param_1[2],(int)param_1[5])" ( (cast_expression "(long *)param_1[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) , (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) )))) ;) (expression_statement "plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);" (assignment_expression "plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4])" identifier = (cast_expression "(long *)FUN_00301200(param_1[2],param_1[3],param_1[4])" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00301200(param_1[2],param_1[3],param_1[4])" identifier (argument_list "(param_1[2],param_1[3],param_1[4])" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "param_1[3]" identifier [ number_literal ]) , (subscript_expression "param_1[4]" identifier [ number_literal ]) ))))) ;) (expression_statement "lVar5 = *plVar7;" (assignment_expression "lVar5 = *plVar7" identifier = (pointer_expression "*plVar7" * identifier)) ;) (expression_statement "param_1[0x123] = (long)plVar7;" (assignment_expression "param_1[0x123] = (long)plVar7" (subscript_expression "param_1[0x123]" identifier [ number_literal ]) = (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "(**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);" (call_expression "(**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6])" (parenthesized_expression "(**(code **)(lVar5 + 0x10))" ( (pointer_expression "**(code **)(lVar5 + 0x10)" * (pointer_expression "*(code **)(lVar5 + 0x10)" * (cast_expression "(code **)(lVar5 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) ))))) )) (argument_list "(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6])" ( identifier , (pointer_expression "*(undefined4 *)((long)param_1 + 0x2c)" * (cast_expression "(undefined4 *)((long)param_1 + 0x2c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x2c)" ( (binary_expression "(long)param_1 + 0x2c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) ))) ;) (expression_statement "puVar15 = (uint *)param_1[8];" (assignment_expression "puVar15 = (uint *)param_1[8]" identifier = (cast_expression "(uint *)param_1[8]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ]))) ;) (expression_statement "puVar8 = (uint *)param_1[9];" (assignment_expression "puVar8 = (uint *)param_1[9]" identifier = (cast_expression "(uint *)param_1[9]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[9]" identifier [ number_literal ]))) ;) (expression_statement "iVar4 = *(int *)((long)param_1 + 0x34);" (assignment_expression "iVar4 = *(int *)((long)param_1 + 0x34)" identifier = (pointer_expression "*(int *)((long)param_1 + 0x34)" * (cast_expression "(int *)((long)param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x34)" ( (binary_expression "(long)param_1 + 0x34" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (if_statement "if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }" if (parenthesized_expression "(puVar15 < puVar8)" ( (binary_expression "puVar15 < puVar8" identifier < identifier) )) (compound_statement "{\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }" { (expression_statement "puVar10 = puVar15 + 1;" (assignment_expression "puVar10 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) (expression_statement "param_1[10] = 0;" (assignment_expression "param_1[10] = 0" (subscript_expression "param_1[10]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0xb] = (long)puVar8 - (long)puVar15;" (assignment_expression "param_1[0xb] = (long)puVar8 - (long)puVar15" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = (binary_expression "(long)puVar8 - (long)puVar15" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }" if (parenthesized_expression "(puVar10 <= puVar8)" ( (binary_expression "puVar10 <= puVar8" identifier <= identifier) )) (compound_statement "{\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }" { (expression_statement "lVar5 = 0;" (assignment_expression "lVar5 = 0" identifier = number_literal) ;) (expression_statement "puVar12 = puVar15;" (assignment_expression "puVar12 = puVar15" identifier = identifier) ;) (do_statement "do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);" do (compound_statement "{\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        }" { (expression_statement "uVar13 = *puVar12;" (assignment_expression "uVar13 = *puVar12" identifier = (pointer_expression "*puVar12" * identifier)) ;) (expression_statement "uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;" (assignment_expression "uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" identifier = (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" ( (binary_expression "uVar13 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" ( (binary_expression "uVar13 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar13 << 0x18" identifier << number_literal))) ;) (if_statement "if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }" if (parenthesized_expression "(uVar13 == 0xffffffff)" ( (binary_expression "uVar13 == 0xffffffff" identifier == number_literal) )) (compound_statement "{\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }" { (expression_statement "puVar10 = puVar12 + 3;" (assignment_expression "puVar10 = puVar12 + 3" identifier = (binary_expression "puVar12 + 3" identifier + number_literal)) ;) (if_statement "if (puVar8 < puVar10) break;" if (parenthesized_expression "(puVar8 < puVar10)" ( (binary_expression "puVar8 < puVar10" identifier < identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = *(undefined8 *)(puVar12 + 1);" (assignment_expression "uVar3 = *(undefined8 *)(puVar12 + 1)" identifier = (pointer_expression "*(undefined8 *)(puVar12 + 1)" * (cast_expression "(undefined8 *)(puVar12 + 1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar12 + 1)" ( (binary_expression "puVar12 + 1" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(param_1 + 0xc) = 8;" (assignment_expression "*(undefined4 *)(param_1 + 0xc) = 8" (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = number_literal) ;) (expression_statement "uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;" (assignment_expression "uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000" identifier = (binary_expression "(uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000" (binary_expression "(uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000" (binary_expression "(uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8" (call_expression "(uint)(byte)((ulong)uVar3 >> 0x38)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "((ulong)uVar3 >> 0x38)" ( (binary_expression "(ulong)uVar3 >> 0x38" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) | (binary_expression "((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8" (parenthesized_expression "((uint)((ulong)uVar3 >> 0x20) & 0xff0000)" ( (binary_expression "(uint)((ulong)uVar3 >> 0x20) & 0xff0000" (call_expression "(uint)((ulong)uVar3 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)uVar3 >> 0x20)" ( (binary_expression "(ulong)uVar3 >> 0x20" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) & number_literal) )) >> number_literal)) | (binary_expression "(uint)((ulong)uVar3 >> 0x18) & 0xff0000" (call_expression "(uint)((ulong)uVar3 >> 0x18)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)uVar3 >> 0x18)" ( (binary_expression "(ulong)uVar3 >> 0x18" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) & number_literal)) | (binary_expression "(uint)((ulong)uVar3 >> 8) & 0xff000000" (call_expression "(uint)((ulong)uVar3 >> 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)uVar3 >> 8)" ( (binary_expression "(ulong)uVar3 >> 8" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) & number_literal))) ;) }) (else_clause "else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }" else (compound_statement "{\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }" { (expression_statement "*(undefined4 *)(param_1 + 0xc) = 4;" (assignment_expression "*(undefined4 *)(param_1 + 0xc) = 4" (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = number_literal) ;) }))) (expression_statement "puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);" (assignment_expression "puVar14 = (uint *)((ulong)uVar13 + (long)puVar10)" identifier = (cast_expression "(uint *)((ulong)uVar13 + (long)puVar10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)uVar13 + (long)puVar10)" ( (binary_expression "(ulong)uVar13 + (long)puVar10" (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier) + (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (if_statement "if (puVar8 < puVar14) break;" if (parenthesized_expression "(puVar8 < puVar14)" ( (binary_expression "puVar8 < puVar14" identifier < identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar13 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar13 = *(uint *)(param_1 + 0xc)" identifier = (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar17 = (ulong)uVar13;" (assignment_expression "uVar17 = (ulong)uVar13" identifier = (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "lVar19 = (long)puVar14 - (long)puVar12;" (assignment_expression "lVar19 = (long)puVar14 - (long)puVar12" identifier = (binary_expression "(long)puVar14 - (long)puVar12" (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "param_1[0xb] = lVar19;" (assignment_expression "param_1[0xb] = lVar19" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = identifier) ;) (if_statement "if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;" if (parenthesized_expression "((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3))" ( (binary_expression "(undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)" (cast_expression "(undefined1 *)(lVar19 + lVar5 + (long)puVar15)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar19 + lVar5 + (long)puVar15)" ( (binary_expression "lVar19 + lVar5 + (long)puVar15" (binary_expression "lVar19 + lVar5" identifier + identifier) + (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) < (cast_expression "(undefined1 *)((long)puVar10 + uVar17 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + uVar17 + 3)" ( (binary_expression "(long)puVar10 + uVar17 + 3" (binary_expression "(long)puVar10 + uVar17" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) )) (break_statement "break;" break ;)) (expression_statement "*(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));" (assignment_expression "*(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" (pointer_expression "*(uint *)(param_1 + 0xd)" * (cast_expression "(uint *)(param_1 + 0xd)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xd)" ( (binary_expression "param_1 + 0xd" identifier + number_literal) )))) = (cast_expression "(uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" identifier (argument_list "((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" ( (cast_expression "(char)*puVar10" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*puVar10" * identifier)) , (pointer_expression "*(undefined1 *)((long)puVar10 + 1)" * (cast_expression "(undefined1 *)((long)puVar10 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + 1)" ( (binary_expression "(long)puVar10 + 1" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ))))) ;) (if_statement "if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }" if (parenthesized_expression "(uVar13 == 4)" ( (binary_expression "uVar13 == 4" identifier == number_literal) )) (compound_statement "{\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }" { (expression_statement "uVar1 = *(uint *)((long)puVar10 + 2);" (assignment_expression "uVar1 = *(uint *)((long)puVar10 + 2)" identifier = (pointer_expression "*(uint *)((long)puVar10 + 2)" * (cast_expression "(uint *)((long)puVar10 + 2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + 2)" ( (binary_expression "(long)puVar10 + 2" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);" (assignment_expression "uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18)" identifier = (call_expression "(ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18)" ( (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 << 0x18" identifier << number_literal)) )))) ;) }) (else_clause "else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }" else (compound_statement "{\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }" { (expression_statement "uVar11 = *(ulong *)((long)puVar10 + 2);" (assignment_expression "uVar11 = *(ulong *)((long)puVar10 + 2)" identifier = (pointer_expression "*(ulong *)((long)puVar10 + 2)" * (cast_expression "(ulong *)((long)puVar10 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + 2)" ( (binary_expression "(long)puVar10 + 2" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;" (assignment_expression "uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" identifier = (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" ( (binary_expression "uVar11 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" ( (binary_expression "uVar11 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" ( (binary_expression "uVar11 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" ( (binary_expression "uVar11 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" ( (binary_expression "uVar11 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" ( (binary_expression "uVar11 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar11 << 0x38" identifier << number_literal))) ;) }))) (expression_statement "uVar9 = uVar11;" (assignment_expression "uVar9 = uVar11" identifier = identifier) ;) (if_statement "if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }" if (parenthesized_expression "(*(int *)((long)param_1 + 0x2c) != 0)" ( (binary_expression "*(int *)((long)param_1 + 0x2c) != 0" (pointer_expression "*(int *)((long)param_1 + 0x2c)" * (cast_expression "(int *)((long)param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x2c)" ( (binary_expression "(long)param_1 + 0x2c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) != number_literal) )) (compound_statement "{\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }" { (expression_statement "iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);" (assignment_expression "iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8)" identifier = (call_expression "(**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8)" (parenthesized_expression "(**(code **)(*(long *)param_1[0x123] + 0x28))" ( (pointer_expression "**(code **)(*(long *)param_1[0x123] + 0x28)" * (pointer_expression "*(code **)(*(long *)param_1[0x123] + 0x28)" * (cast_expression "(code **)(*(long *)param_1[0x123] + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)param_1[0x123] + 0x28)" ( (binary_expression "*(long *)param_1[0x123] + 0x28" (pointer_expression "*(long *)param_1[0x123]" * (cast_expression "(long *)param_1[0x123]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x123]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8)" ( (cast_expression "(long *)param_1[0x123]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x123]" identifier [ number_literal ])) , (cast_expression "(undefined1 *)((long)puVar10 + (2 - (long)puVar15))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + (2 - (long)puVar15))" ( (binary_expression "(long)puVar10 + (2 - (long)puVar15)" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(2 - (long)puVar15)" ( (binary_expression "2 - (long)puVar15" number_literal - (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ))) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n              return;\n            }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) (expression_statement "uVar9 = local_c8[0];" (assignment_expression "uVar9 = local_c8[0]" identifier = (subscript_expression "local_c8[0]" identifier [ number_literal ])) ;) (if_statement "if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }" if (parenthesized_expression "((int)param_1[6] == 9)" ( (binary_expression "(int)param_1[6] == 9" (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) == number_literal) )) (compound_statement "{\n              uVar9 = local_c8[0] + uVar11;\n            }" { (expression_statement "uVar9 = local_c8[0] + uVar11;" (assignment_expression "uVar9 = local_c8[0] + uVar11" identifier = (binary_expression "local_c8[0] + uVar11" (subscript_expression "local_c8[0]" identifier [ number_literal ]) + identifier)) ;) })) (expression_statement "uVar13 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar13 = *(uint *)(param_1 + 0xc)" identifier = (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar17 = (ulong)uVar13;" (assignment_expression "uVar17 = (ulong)uVar13" identifier = (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (expression_statement "pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);" (assignment_expression "pbVar16 = (byte *)((long)puVar10 + uVar17 + 2)" identifier = (cast_expression "(byte *)((long)puVar10 + uVar17 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + uVar17 + 2)" ( (binary_expression "(long)puVar10 + uVar17 + 2" (binary_expression "(long)puVar10 + uVar17" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "pbVar18 = pbVar16 + 1;" (assignment_expression "pbVar18 = pbVar16 + 1" identifier = (binary_expression "pbVar16 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)((long)param_1 + 100) = (uint)*pbVar16;" (assignment_expression "*(uint *)((long)param_1 + 100) = (uint)*pbVar16" (pointer_expression "*(uint *)((long)param_1 + 100)" * (cast_expression "(uint *)((long)param_1 + 100)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 100)" ( (binary_expression "(long)param_1 + 100" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (binary_expression "(uint)*pbVar16" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (if_statement "if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }" if (parenthesized_expression "((char)param_1[1] == '\0')" ( (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            local_e0 = 0;\n            local_e8 = 0;\n          }" { (expression_statement "local_e0 = 0;" (assignment_expression "local_e0 = 0" identifier = number_literal) ;) (expression_statement "local_e8 = 0;" (assignment_expression "local_e8 = 0" identifier = number_literal) ;) }) (else_clause "else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }" else (compound_statement "{\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }" { (if_statement "if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;" if (parenthesized_expression "((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9)" ( (binary_expression "(byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9" (cast_expression "(byte *)(param_1[0xb] + param_1[10] + param_1[8])" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xb] + param_1[10] + param_1[8])" ( (binary_expression "param_1[0xb] + param_1[10] + param_1[8]" (binary_expression "param_1[0xb] + param_1[10]" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) + (subscript_expression "param_1[10]" identifier [ number_literal ])) + (subscript_expression "param_1[8]" identifier [ number_literal ])) ))) < (binary_expression "pbVar16 + uVar17 + 9" (binary_expression "pbVar16 + uVar17" identifier + identifier) + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "uVar11 = *(ulong *)(pbVar16 + 1);" (assignment_expression "uVar11 = *(ulong *)(pbVar16 + 1)" identifier = (pointer_expression "*(ulong *)(pbVar16 + 1)" * (cast_expression "(ulong *)(pbVar16 + 1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar16 + 1)" ( (binary_expression "pbVar16 + 1" identifier + number_literal) ))))) ;) (expression_statement "local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;" (assignment_expression "local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" identifier = (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" ( (binary_expression "uVar11 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" ( (binary_expression "uVar11 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" ( (binary_expression "uVar11 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" ( (binary_expression "uVar11 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" ( (binary_expression "uVar11 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" ( (binary_expression "uVar11 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar11 << 0x38" identifier << number_literal))) ;) (if_statement "if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }" if (parenthesized_expression "(uVar13 == 4)" ( (binary_expression "uVar13 == 4" identifier == number_literal) )) (compound_statement "{\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }" { (expression_statement "uVar13 = *(uint *)(pbVar16 + 9);" (assignment_expression "uVar13 = *(uint *)(pbVar16 + 9)" identifier = (pointer_expression "*(uint *)(pbVar16 + 9)" * (cast_expression "(uint *)(pbVar16 + 9)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar16 + 9)" ( (binary_expression "pbVar16 + 9" identifier + number_literal) ))))) ;) (expression_statement "local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);" (assignment_expression "local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" identifier = (call_expression "(ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" ( (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" ( (binary_expression "uVar13 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" ( (binary_expression "uVar13 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar13 << 0x18" identifier << number_literal)) )))) ;) }) (else_clause "else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }" else (compound_statement "{\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }" { (expression_statement "uVar11 = *(ulong *)(pbVar16 + 9);" (assignment_expression "uVar11 = *(ulong *)(pbVar16 + 9)" identifier = (pointer_expression "*(ulong *)(pbVar16 + 9)" * (cast_expression "(ulong *)(pbVar16 + 9)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar16 + 9)" ( (binary_expression "pbVar16 + 9" identifier + number_literal) ))))) ;) (expression_statement "local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;" (assignment_expression "local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" identifier = (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" ( (binary_expression "uVar11 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" ( (binary_expression "uVar11 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" ( (binary_expression "uVar11 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" ( (binary_expression "uVar11 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" ( (binary_expression "uVar11 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" ( (binary_expression "uVar11 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar11 << 0x38" identifier << number_literal))) ;) }))) (expression_statement "pbVar18 = pbVar16 + uVar17 + 9;" (assignment_expression "pbVar18 = pbVar16 + uVar17 + 9" identifier = (binary_expression "pbVar16 + uVar17 + 9" (binary_expression "pbVar16 + uVar17" identifier + identifier) + number_literal)) ;) }))) (if_statement "if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }" if (parenthesized_expression "((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))" ( (binary_expression "(((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf])" (parenthesized_expression "(((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe]))" ( (binary_expression "((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])" (parenthesized_expression "((int)param_1[0xe] == 0)" ( (binary_expression "(int)param_1[0xe] == 0" (cast_expression "(int)param_1[0xe]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0xe]" identifier [ number_literal ])) == number_literal) )) || (parenthesized_expression "(iVar4 != (int)param_1[0xe])" ( (binary_expression "iVar4 != (int)param_1[0xe]" identifier != (cast_expression "(int)param_1[0xe]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ))) )) || (parenthesized_expression "(uVar9 != param_1[0xf])" ( (binary_expression "uVar9 != param_1[0xf]" identifier != (subscript_expression "param_1[0xf]" identifier [ number_literal ])) ))) )) (compound_statement "{\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }" { (expression_statement "FUN_00302430(param_1 + 0xe,param_1[2],iVar4);" (call_expression "FUN_00302430(param_1 + 0xe,param_1[2],iVar4)" identifier (argument_list "(param_1 + 0xe,param_1[2],iVar4)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) , (subscript_expression "param_1[2]" identifier [ number_literal ]) , identifier ))) ;) })) (expression_statement "FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);" (call_expression "FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0)" identifier (argument_list "(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0)" ( identifier , identifier , (binary_expression "pbVar18 + (-param_1[10] - param_1[8])" identifier + (parenthesized_expression "(-param_1[10] - param_1[8])" ( (binary_expression "-param_1[10] - param_1[8]" (unary_expression "-param_1[10]" - (subscript_expression "param_1[10]" identifier [ number_literal ])) - (subscript_expression "param_1[8]" identifier [ number_literal ])) ))) , number_literal ))) ;) (if_statement "if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }" if (parenthesized_expression "((local_98 != (int *)0x0) && (*local_98 != 0))" ( (binary_expression "(local_98 != (int *)0x0) && (*local_98 != 0)" (parenthesized_expression "(local_98 != (int *)0x0)" ( (binary_expression "local_98 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*local_98 != 0)" ( (binary_expression "*local_98 != 0" (pointer_expression "*local_98" * identifier) != number_literal) ))) )) (compound_statement "{\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }" { (if_statement "if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }" if (parenthesized_expression "((char)param_1[1] == '\0')" ( (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }" { (expression_statement "pcVar2 = *(code **)(*param_1 + 0x10);" (assignment_expression "pcVar2 = *(code **)(*param_1 + 0x10)" identifier = (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) ;) (if_statement "if (pcVar2 != FUN_00301070) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }" if (parenthesized_expression "(pcVar2 != FUN_00301070)" ( (binary_expression "pcVar2 != FUN_00301070" identifier != identifier) )) (compound_statement "{\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }" { comment (expression_statement "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);" (call_expression "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(param_1,param_1[10] + lVar6,lVar19,local_c8)" ( identifier , (binary_expression "param_1[10] + lVar6" (subscript_expression "param_1[10]" identifier [ number_literal ]) + identifier) , identifier , identifier ))) ;) })) }) (else_clause "else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }" else (compound_statement "{\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }" { (expression_statement "pcVar2 = *(code **)(*param_1 + 0x18);" (assignment_expression "pcVar2 = *(code **)(*param_1 + 0x18)" identifier = (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) ;) (if_statement "if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }" if (parenthesized_expression "(pcVar2 != FUN_00301080)" ( (binary_expression "pcVar2 != FUN_00301080" identifier != identifier) )) (compound_statement "{\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }" { (expression_statement "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);" (call_expression "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8)" ( identifier , (binary_expression "param_1[10] + lVar6" (subscript_expression "param_1[10]" identifier [ number_literal ]) + identifier) , identifier , identifier , identifier , identifier ))) ;) })) }))) })) (if_statement "if (local_90 != 0) {\n            FUN_00338a40();\n          }" if (parenthesized_expression "(local_90 != 0)" ( (binary_expression "local_90 != 0" identifier != number_literal) )) (compound_statement "{\n            FUN_00338a40();\n          }" { (expression_statement "FUN_00338a40();" (call_expression "FUN_00338a40()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;" if (parenthesized_expression "((uint *)param_1[9] <= puVar14)" ( (binary_expression "(uint *)param_1[9] <= puVar14" (cast_expression "(uint *)param_1[9]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[9]" identifier [ number_literal ])) <= identifier) )) (goto_statement "goto LAB_00306aa8;" goto statement_identifier ;)) (expression_statement "puVar15 = (uint *)param_1[8];" (assignment_expression "puVar15 = (uint *)param_1[8]" identifier = (cast_expression "(uint *)param_1[8]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ]))) ;) (expression_statement "lVar19 = param_1[9] - (long)puVar14;" (assignment_expression "lVar19 = param_1[9] - (long)puVar14" identifier = (binary_expression "param_1[9] - (long)puVar14" (subscript_expression "param_1[9]" identifier [ number_literal ]) - (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "puVar10 = puVar14 + 1;" (assignment_expression "puVar10 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) (expression_statement "param_1[0xb] = lVar19;" (assignment_expression "param_1[0xb] = lVar19" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = (long)puVar14 - (long)puVar15;" (assignment_expression "lVar5 = (long)puVar14 - (long)puVar15" identifier = (binary_expression "(long)puVar14 - (long)puVar15" (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "param_1[10] = lVar5;" (assignment_expression "param_1[10] = lVar5" (subscript_expression "param_1[10]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);" (assignment_expression "puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5)" identifier = (cast_expression "(uint *)((long)puVar15 + lVar19 + lVar5)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar15 + lVar19 + lVar5)" ( (binary_expression "(long)puVar15 + lVar19 + lVar5" (binary_expression "(long)puVar15 + lVar19" (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + identifier) )))) ;) (expression_statement "puVar12 = puVar14;" (assignment_expression "puVar12 = puVar14" identifier = identifier) ;) }) while (parenthesized_expression "(puVar10 <= puVar8)" ( (binary_expression "puVar10 <= puVar8" identifier <= identifier) )) ;) })) (expression_statement "FUN_00301e60(param_1);" (call_expression "FUN_00301e60(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) })) (labeled_statement "LAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }" statement_identifier : (if_statement "if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }" if (parenthesized_expression "(local_d1 != '\0')" ( (binary_expression "local_d1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }" { (if_statement "if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }" if (parenthesized_expression "(param_1[8] != 0)" ( (binary_expression "param_1[8] != 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        thunk_FUN_00338a40();\n      }" { (expression_statement "thunk_FUN_00338a40();" (call_expression "thunk_FUN_00338a40()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) = number_literal) ;) }))) })) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void do_parse<true>(Dwarf_info_reader * this) */\n\nvoid __thiscall gold::Dwarf_info_reader::do_parse<true>(Dwarf_info_reader *this)\n\n{\n  uint uVar1;\n  _func_int_varargs **pp_Var2;\n  ulong uVar3;\n  _func_int_varargs *p_Var4;\n  undefined8 uVar5;\n  int iVar6;\n  uint abbrev_shndx;\n  uchar *puVar7;\n  undefined4 extraout_var;\n  Elf_reloc_mapper *pEVar8;\n  uint *puVar9;\n  Dwarf_info_reader *abbrev_offset;\n  uint *puVar10;\n  Dwarf_info_reader *pDVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  long lVar16;\n  byte *pbVar17;\n  ulong uVar18;\n  byte *pbVar19;\n  long lVar20;\n  ulong local_e8;\n  ulong local_e0;\n  bool buffer_is_new;\n  section_size_type buffer_size;\n  Dwarf_die root_die;\n  \n  puVar7 = Object::decompressed_section_contents\n                     (&this->object_->super_Object,this->shndx_,&buffer_size,&buffer_is_new,\n                      (uint64_t *)0x0);\n  this->buffer_ = puVar7;\n  if ((puVar7 != (uchar *)0x0) && (buffer_size != 0)) {\n    this->buffer_end_ = puVar7 + buffer_size;\n    iVar6 = (*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(ulong)this->shndx_);\n    pEVar8 = make_elf_reloc_mapper(this->object_,this->symtab_,this->symtab_size_);\n    pp_Var2 = pEVar8->_vptr_Elf_reloc_mapper;\n    this->reloc_mapper_ = pEVar8;\n    (*pp_Var2[2])(pEVar8,(ulong)this->reloc_shndx_,(ulong)this->reloc_type_);\n    puVar15 = (uint *)this->buffer_;\n    puVar9 = (uint *)this->buffer_end_;\n    abbrev_shndx = this->abbrev_shndx_;\n    if (puVar15 < puVar9) {\n      puVar10 = puVar15 + 1;\n      this->cu_offset_ = 0;\n      this->cu_length_ = (long)puVar9 - (long)puVar15;\n      if (puVar10 <= puVar9) {\n        lVar16 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);\n      }\n      warn_corrupt_debug_section(this);\n    }\nLAB_00306aa8:\n    if (buffer_is_new != false) {\n      if (this->buffer_ != (uchar *)0x0) {\n        operator_delete__(this->buffer_);\n      }\n      this->buffer_ = (uchar *)0x0;\n    }\n  }\n  return;\n}\n\n" comment (function_definition "void __thiscall gold::Dwarf_info_reader::do_parse<true>(Dwarf_info_reader *this)\n\n{\n  uint uVar1;\n  _func_int_varargs **pp_Var2;\n  ulong uVar3;\n  _func_int_varargs *p_Var4;\n  undefined8 uVar5;\n  int iVar6;\n  uint abbrev_shndx;\n  uchar *puVar7;\n  undefined4 extraout_var;\n  Elf_reloc_mapper *pEVar8;\n  uint *puVar9;\n  Dwarf_info_reader *abbrev_offset;\n  uint *puVar10;\n  Dwarf_info_reader *pDVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  long lVar16;\n  byte *pbVar17;\n  ulong uVar18;\n  byte *pbVar19;\n  long lVar20;\n  ulong local_e8;\n  ulong local_e0;\n  bool buffer_is_new;\n  section_size_type buffer_size;\n  Dwarf_die root_die;\n  \n  puVar7 = Object::decompressed_section_contents\n                     (&this->object_->super_Object,this->shndx_,&buffer_size,&buffer_is_new,\n                      (uint64_t *)0x0);\n  this->buffer_ = puVar7;\n  if ((puVar7 != (uchar *)0x0) && (buffer_size != 0)) {\n    this->buffer_end_ = puVar7 + buffer_size;\n    iVar6 = (*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(ulong)this->shndx_);\n    pEVar8 = make_elf_reloc_mapper(this->object_,this->symtab_,this->symtab_size_);\n    pp_Var2 = pEVar8->_vptr_Elf_reloc_mapper;\n    this->reloc_mapper_ = pEVar8;\n    (*pp_Var2[2])(pEVar8,(ulong)this->reloc_shndx_,(ulong)this->reloc_type_);\n    puVar15 = (uint *)this->buffer_;\n    puVar9 = (uint *)this->buffer_end_;\n    abbrev_shndx = this->abbrev_shndx_;\n    if (puVar15 < puVar9) {\n      puVar10 = puVar15 + 1;\n      this->cu_offset_ = 0;\n      this->cu_length_ = (long)puVar9 - (long)puVar15;\n      if (puVar10 <= puVar9) {\n        lVar16 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);\n      }\n      warn_corrupt_debug_section(this);\n    }\nLAB_00306aa8:\n    if (buffer_is_new != false) {\n      if (this->buffer_ != (uchar *)0x0) {\n        operator_delete__(this->buffer_);\n      }\n      this->buffer_ = (uchar *)0x0;\n    }\n  }\n  return;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Dwarf_info_reader::do_parse<true>(Dwarf_info_reader" identifier : : identifier : : identifier < true > ( identifier) (pointer_declarator "*this" * identifier) (ERROR ")" )) (compound_statement "{\n  uint uVar1;\n  _func_int_varargs **pp_Var2;\n  ulong uVar3;\n  _func_int_varargs *p_Var4;\n  undefined8 uVar5;\n  int iVar6;\n  uint abbrev_shndx;\n  uchar *puVar7;\n  undefined4 extraout_var;\n  Elf_reloc_mapper *pEVar8;\n  uint *puVar9;\n  Dwarf_info_reader *abbrev_offset;\n  uint *puVar10;\n  Dwarf_info_reader *pDVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  long lVar16;\n  byte *pbVar17;\n  ulong uVar18;\n  byte *pbVar19;\n  long lVar20;\n  ulong local_e8;\n  ulong local_e0;\n  bool buffer_is_new;\n  section_size_type buffer_size;\n  Dwarf_die root_die;\n  \n  puVar7 = Object::decompressed_section_contents\n                     (&this->object_->super_Object,this->shndx_,&buffer_size,&buffer_is_new,\n                      (uint64_t *)0x0);\n  this->buffer_ = puVar7;\n  if ((puVar7 != (uchar *)0x0) && (buffer_size != 0)) {\n    this->buffer_end_ = puVar7 + buffer_size;\n    iVar6 = (*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(ulong)this->shndx_);\n    pEVar8 = make_elf_reloc_mapper(this->object_,this->symtab_,this->symtab_size_);\n    pp_Var2 = pEVar8->_vptr_Elf_reloc_mapper;\n    this->reloc_mapper_ = pEVar8;\n    (*pp_Var2[2])(pEVar8,(ulong)this->reloc_shndx_,(ulong)this->reloc_type_);\n    puVar15 = (uint *)this->buffer_;\n    puVar9 = (uint *)this->buffer_end_;\n    abbrev_shndx = this->abbrev_shndx_;\n    if (puVar15 < puVar9) {\n      puVar10 = puVar15 + 1;\n      this->cu_offset_ = 0;\n      this->cu_length_ = (long)puVar9 - (long)puVar15;\n      if (puVar10 <= puVar9) {\n        lVar16 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);\n      }\n      warn_corrupt_debug_section(this);\n    }\nLAB_00306aa8:\n    if (buffer_is_new != false) {\n      if (this->buffer_ != (uchar *)0x0) {\n        operator_delete__(this->buffer_);\n      }\n      this->buffer_ = (uchar *)0x0;\n    }\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "_func_int_varargs **pp_Var2;" type_identifier (pointer_declarator "**pp_Var2" * (pointer_declarator "*pp_Var2" * identifier)) ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "_func_int_varargs *p_Var4;" type_identifier (pointer_declarator "*p_Var4" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint abbrev_shndx;" type_identifier identifier ;) (declaration "uchar *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "undefined4 extraout_var;" type_identifier identifier ;) (declaration "Elf_reloc_mapper *pEVar8;" type_identifier (pointer_declarator "*pEVar8" * identifier) ;) (declaration "uint *puVar9;" type_identifier (pointer_declarator "*puVar9" * identifier) ;) (declaration "Dwarf_info_reader *abbrev_offset;" type_identifier (pointer_declarator "*abbrev_offset" * identifier) ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "Dwarf_info_reader *pDVar11;" type_identifier (pointer_declarator "*pDVar11" * identifier) ;) (declaration "uint *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "long lVar16;" (sized_type_specifier "long" long) identifier ;) (declaration "byte *pbVar17;" type_identifier (pointer_declarator "*pbVar17" * identifier) ;) (declaration "ulong uVar18;" type_identifier identifier ;) (declaration "byte *pbVar19;" type_identifier (pointer_declarator "*pbVar19" * identifier) ;) (declaration "long lVar20;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_e8;" type_identifier identifier ;) (declaration "ulong local_e0;" type_identifier identifier ;) (declaration "bool buffer_is_new;" primitive_type identifier ;) (declaration "section_size_type buffer_size;" type_identifier identifier ;) (declaration "Dwarf_die root_die;" type_identifier identifier ;) (ERROR "puVar7 = Object::" (assignment_expression "puVar7 = Object" identifier = identifier) : :) (expression_statement "decompressed_section_contents\n                     (&this->object_->super_Object,this->shndx_,&buffer_size,&buffer_is_new,\n                      (uint64_t *)0x0);" (call_expression "decompressed_section_contents\n                     (&this->object_->super_Object,this->shndx_,&buffer_size,&buffer_is_new,\n                      (uint64_t *)0x0)" identifier (argument_list "(&this->object_->super_Object,this->shndx_,&buffer_size,&buffer_is_new,\n                      (uint64_t *)0x0)" ( (pointer_expression "&this->object_->super_Object" & (field_expression "this->object_->super_Object" (field_expression "this->object_" identifier -> field_identifier) -> field_identifier)) , (field_expression "this->shndx_" identifier -> field_identifier) , (pointer_expression "&buffer_size" & identifier) , (pointer_expression "&buffer_is_new" & identifier) , (cast_expression "(uint64_t *)0x0" ( (type_descriptor "uint64_t *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;) (expression_statement "this->buffer_ = puVar7;" (assignment_expression "this->buffer_ = puVar7" (field_expression "this->buffer_" identifier -> field_identifier) = identifier) ;) (if_statement "if ((puVar7 != (uchar *)0x0) && (buffer_size != 0)) {\n    this->buffer_end_ = puVar7 + buffer_size;\n    iVar6 = (*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(ulong)this->shndx_);\n    pEVar8 = make_elf_reloc_mapper(this->object_,this->symtab_,this->symtab_size_);\n    pp_Var2 = pEVar8->_vptr_Elf_reloc_mapper;\n    this->reloc_mapper_ = pEVar8;\n    (*pp_Var2[2])(pEVar8,(ulong)this->reloc_shndx_,(ulong)this->reloc_type_);\n    puVar15 = (uint *)this->buffer_;\n    puVar9 = (uint *)this->buffer_end_;\n    abbrev_shndx = this->abbrev_shndx_;\n    if (puVar15 < puVar9) {\n      puVar10 = puVar15 + 1;\n      this->cu_offset_ = 0;\n      this->cu_length_ = (long)puVar9 - (long)puVar15;\n      if (puVar10 <= puVar9) {\n        lVar16 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);\n      }\n      warn_corrupt_debug_section(this);\n    }\nLAB_00306aa8:\n    if (buffer_is_new != false) {\n      if (this->buffer_ != (uchar *)0x0) {\n        operator_delete__(this->buffer_);\n      }\n      this->buffer_ = (uchar *)0x0;\n    }\n  }" if (parenthesized_expression "((puVar7 != (uchar *)0x0) && (buffer_size != 0))" ( (binary_expression "(puVar7 != (uchar *)0x0) && (buffer_size != 0)" (parenthesized_expression "(puVar7 != (uchar *)0x0)" ( (binary_expression "puVar7 != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(buffer_size != 0)" ( (binary_expression "buffer_size != 0" identifier != number_literal) ))) )) (compound_statement "{\n    this->buffer_end_ = puVar7 + buffer_size;\n    iVar6 = (*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(ulong)this->shndx_);\n    pEVar8 = make_elf_reloc_mapper(this->object_,this->symtab_,this->symtab_size_);\n    pp_Var2 = pEVar8->_vptr_Elf_reloc_mapper;\n    this->reloc_mapper_ = pEVar8;\n    (*pp_Var2[2])(pEVar8,(ulong)this->reloc_shndx_,(ulong)this->reloc_type_);\n    puVar15 = (uint *)this->buffer_;\n    puVar9 = (uint *)this->buffer_end_;\n    abbrev_shndx = this->abbrev_shndx_;\n    if (puVar15 < puVar9) {\n      puVar10 = puVar15 + 1;\n      this->cu_offset_ = 0;\n      this->cu_length_ = (long)puVar9 - (long)puVar15;\n      if (puVar10 <= puVar9) {\n        lVar16 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);\n      }\n      warn_corrupt_debug_section(this);\n    }\nLAB_00306aa8:\n    if (buffer_is_new != false) {\n      if (this->buffer_ != (uchar *)0x0) {\n        operator_delete__(this->buffer_);\n      }\n      this->buffer_ = (uchar *)0x0;\n    }\n  }" { (expression_statement "this->buffer_end_ = puVar7 + buffer_size;" (assignment_expression "this->buffer_end_ = puVar7 + buffer_size" (field_expression "this->buffer_end_" identifier -> field_identifier) = (binary_expression "puVar7 + buffer_size" identifier + identifier)) ;) (expression_statement "iVar6 = (*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(ulong)this->shndx_);" (assignment_expression "iVar6 = (*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(ulong)this->shndx_)" identifier = (call_expression "(*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(ulong)this->shndx_)" (parenthesized_expression "(*(this->object_->super_Object)._vptr_Object[0x1a])" ( (pointer_expression "*(this->object_->super_Object)._vptr_Object[0x1a]" * (subscript_expression "(this->object_->super_Object)._vptr_Object[0x1a]" (field_expression "(this->object_->super_Object)._vptr_Object" (parenthesized_expression "(this->object_->super_Object)" ( (field_expression "this->object_->super_Object" (field_expression "this->object_" identifier -> field_identifier) -> field_identifier) )) . field_identifier) [ number_literal ])) )) (argument_list "(this->object_,(ulong)this->shndx_)" ( (field_expression "this->object_" identifier -> field_identifier) , (cast_expression "(ulong)this->shndx_" ( (type_descriptor "ulong" type_identifier) ) (field_expression "this->shndx_" identifier -> field_identifier)) )))) ;) (expression_statement "pEVar8 = make_elf_reloc_mapper(this->object_,this->symtab_,this->symtab_size_);" (assignment_expression "pEVar8 = make_elf_reloc_mapper(this->object_,this->symtab_,this->symtab_size_)" identifier = (call_expression "make_elf_reloc_mapper(this->object_,this->symtab_,this->symtab_size_)" identifier (argument_list "(this->object_,this->symtab_,this->symtab_size_)" ( (field_expression "this->object_" identifier -> field_identifier) , (field_expression "this->symtab_" identifier -> field_identifier) , (field_expression "this->symtab_size_" identifier -> field_identifier) )))) ;) (expression_statement "pp_Var2 = pEVar8->_vptr_Elf_reloc_mapper;" (assignment_expression "pp_Var2 = pEVar8->_vptr_Elf_reloc_mapper" identifier = (field_expression "pEVar8->_vptr_Elf_reloc_mapper" identifier -> field_identifier)) ;) (expression_statement "this->reloc_mapper_ = pEVar8;" (assignment_expression "this->reloc_mapper_ = pEVar8" (field_expression "this->reloc_mapper_" identifier -> field_identifier) = identifier) ;) (expression_statement "(*pp_Var2[2])(pEVar8,(ulong)this->reloc_shndx_,(ulong)this->reloc_type_);" (call_expression "(*pp_Var2[2])(pEVar8,(ulong)this->reloc_shndx_,(ulong)this->reloc_type_)" (parenthesized_expression "(*pp_Var2[2])" ( (pointer_expression "*pp_Var2[2]" * (subscript_expression "pp_Var2[2]" identifier [ number_literal ])) )) (argument_list "(pEVar8,(ulong)this->reloc_shndx_,(ulong)this->reloc_type_)" ( identifier , (cast_expression "(ulong)this->reloc_shndx_" ( (type_descriptor "ulong" type_identifier) ) (field_expression "this->reloc_shndx_" identifier -> field_identifier)) , (cast_expression "(ulong)this->reloc_type_" ( (type_descriptor "ulong" type_identifier) ) (field_expression "this->reloc_type_" identifier -> field_identifier)) ))) ;) (expression_statement "puVar15 = (uint *)this->buffer_;" (assignment_expression "puVar15 = (uint *)this->buffer_" identifier = (cast_expression "(uint *)this->buffer_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "this->buffer_" identifier -> field_identifier))) ;) (expression_statement "puVar9 = (uint *)this->buffer_end_;" (assignment_expression "puVar9 = (uint *)this->buffer_end_" identifier = (cast_expression "(uint *)this->buffer_end_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "this->buffer_end_" identifier -> field_identifier))) ;) (expression_statement "abbrev_shndx = this->abbrev_shndx_;" (assignment_expression "abbrev_shndx = this->abbrev_shndx_" identifier = (field_expression "this->abbrev_shndx_" identifier -> field_identifier)) ;) (if_statement "if (puVar15 < puVar9) {\n      puVar10 = puVar15 + 1;\n      this->cu_offset_ = 0;\n      this->cu_length_ = (long)puVar9 - (long)puVar15;\n      if (puVar10 <= puVar9) {\n        lVar16 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);\n      }\n      warn_corrupt_debug_section(this);\n    }" if (parenthesized_expression "(puVar15 < puVar9)" ( (binary_expression "puVar15 < puVar9" identifier < identifier) )) (compound_statement "{\n      puVar10 = puVar15 + 1;\n      this->cu_offset_ = 0;\n      this->cu_length_ = (long)puVar9 - (long)puVar15;\n      if (puVar10 <= puVar9) {\n        lVar16 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);\n      }\n      warn_corrupt_debug_section(this);\n    }" { (expression_statement "puVar10 = puVar15 + 1;" (assignment_expression "puVar10 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) (expression_statement "this->cu_offset_ = 0;" (assignment_expression "this->cu_offset_ = 0" (field_expression "this->cu_offset_" identifier -> field_identifier) = number_literal) ;) (expression_statement "this->cu_length_ = (long)puVar9 - (long)puVar15;" (assignment_expression "this->cu_length_ = (long)puVar9 - (long)puVar15" (field_expression "this->cu_length_" identifier -> field_identifier) = (binary_expression "(long)puVar9 - (long)puVar15" (cast_expression "(long)puVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (puVar10 <= puVar9) {\n        lVar16 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);\n      }" if (parenthesized_expression "(puVar10 <= puVar9)" ( (binary_expression "puVar10 <= puVar9" identifier <= identifier) )) (compound_statement "{\n        lVar16 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);\n      }" { (expression_statement "lVar16 = 0;" (assignment_expression "lVar16 = 0" identifier = number_literal) ;) (expression_statement "puVar12 = puVar15;" (assignment_expression "puVar12 = puVar15" identifier = identifier) ;) (do_statement "do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar9);" do (compound_statement "{\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar9 < puVar14) break;\n          uVar13 = this->offset_size_;\n          uVar18 = (ulong)uVar13;\n          lVar20 = (long)puVar14 - (long)puVar12;\n          this->cu_length_ = lVar20;\n          if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;\n          this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }\n          abbrev_offset = pDVar11;\n          if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }\n          pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);\n          pbVar19 = pbVar17 + 1;\n          this->address_size_ = (uint)*pbVar17;\n          if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }\n          uVar13 = (this->abbrev_table_).abbrev_shndx_;\n          if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }\n          Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);\n          if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }\n          if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }\n          if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)this->buffer_;\n          lVar20 = (long)this->buffer_end_ - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          this->cu_length_ = lVar20;\n          lVar16 = (long)puVar14 - (long)puVar15;\n          this->cu_offset_ = lVar16;\n          puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);\n          puVar12 = puVar14;\n        }" { (expression_statement "uVar13 = *puVar12;" (assignment_expression "uVar13 = *puVar12" identifier = (pointer_expression "*puVar12" * identifier)) ;) (expression_statement "uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;" (assignment_expression "uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" identifier = (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" ( (binary_expression "uVar13 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" ( (binary_expression "uVar13 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar13 << 0x18" identifier << number_literal))) ;) (if_statement "if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }\n          else {\n            this->offset_size_ = 4;\n          }" if (parenthesized_expression "(uVar13 == 0xffffffff)" ( (binary_expression "uVar13 == 0xffffffff" identifier == number_literal) )) (compound_statement "{\n            puVar10 = puVar12 + 3;\n            if (puVar9 < puVar10) break;\n            uVar5 = *(undefined8 *)(puVar12 + 1);\n            this->offset_size_ = 8;\n            uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;\n          }" { (expression_statement "puVar10 = puVar12 + 3;" (assignment_expression "puVar10 = puVar12 + 3" identifier = (binary_expression "puVar12 + 3" identifier + number_literal)) ;) (if_statement "if (puVar9 < puVar10) break;" if (parenthesized_expression "(puVar9 < puVar10)" ( (binary_expression "puVar9 < puVar10" identifier < identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar5 = *(undefined8 *)(puVar12 + 1);" (assignment_expression "uVar5 = *(undefined8 *)(puVar12 + 1)" identifier = (pointer_expression "*(undefined8 *)(puVar12 + 1)" * (cast_expression "(undefined8 *)(puVar12 + 1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar12 + 1)" ( (binary_expression "puVar12 + 1" identifier + number_literal) ))))) ;) (expression_statement "this->offset_size_ = 8;" (assignment_expression "this->offset_size_ = 8" (field_expression "this->offset_size_" identifier -> field_identifier) = number_literal) ;) (expression_statement "uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000;" (assignment_expression "uVar13 = (uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000" identifier = (binary_expression "(uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar5 >> 8) & 0xff000000" (binary_expression "(uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar5 >> 0x18) & 0xff0000" (binary_expression "(uint)(byte)((ulong)uVar5 >> 0x38) |\n                     ((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8" (call_expression "(uint)(byte)((ulong)uVar5 >> 0x38)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "((ulong)uVar5 >> 0x38)" ( (binary_expression "(ulong)uVar5 >> 0x38" (cast_expression "(ulong)uVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) | (binary_expression "((uint)((ulong)uVar5 >> 0x20) & 0xff0000) >> 8" (parenthesized_expression "((uint)((ulong)uVar5 >> 0x20) & 0xff0000)" ( (binary_expression "(uint)((ulong)uVar5 >> 0x20) & 0xff0000" (call_expression "(uint)((ulong)uVar5 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)uVar5 >> 0x20)" ( (binary_expression "(ulong)uVar5 >> 0x20" (cast_expression "(ulong)uVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) & number_literal) )) >> number_literal)) | (binary_expression "(uint)((ulong)uVar5 >> 0x18) & 0xff0000" (call_expression "(uint)((ulong)uVar5 >> 0x18)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)uVar5 >> 0x18)" ( (binary_expression "(ulong)uVar5 >> 0x18" (cast_expression "(ulong)uVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) & number_literal)) | (binary_expression "(uint)((ulong)uVar5 >> 8) & 0xff000000" (call_expression "(uint)((ulong)uVar5 >> 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)uVar5 >> 8)" ( (binary_expression "(ulong)uVar5 >> 8" (cast_expression "(ulong)uVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) & number_literal))) ;) }) (else_clause "else {\n            this->offset_size_ = 4;\n          }" else (compound_statement "{\n            this->offset_size_ = 4;\n          }" { (expression_statement "this->offset_size_ = 4;" (assignment_expression "this->offset_size_ = 4" (field_expression "this->offset_size_" identifier -> field_identifier) = number_literal) ;) }))) (expression_statement "puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);" (assignment_expression "puVar14 = (uint *)((ulong)uVar13 + (long)puVar10)" identifier = (cast_expression "(uint *)((ulong)uVar13 + (long)puVar10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)uVar13 + (long)puVar10)" ( (binary_expression "(ulong)uVar13 + (long)puVar10" (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier) + (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (if_statement "if (puVar9 < puVar14) break;" if (parenthesized_expression "(puVar9 < puVar14)" ( (binary_expression "puVar9 < puVar14" identifier < identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar13 = this->offset_size_;" (assignment_expression "uVar13 = this->offset_size_" identifier = (field_expression "this->offset_size_" identifier -> field_identifier)) ;) (expression_statement "uVar18 = (ulong)uVar13;" (assignment_expression "uVar18 = (ulong)uVar13" identifier = (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "lVar20 = (long)puVar14 - (long)puVar12;" (assignment_expression "lVar20 = (long)puVar14 - (long)puVar12" identifier = (binary_expression "(long)puVar14 - (long)puVar12" (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "this->cu_length_ = lVar20;" (assignment_expression "this->cu_length_ = lVar20" (field_expression "this->cu_length_" identifier -> field_identifier) = identifier) ;) (if_statement "if ((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)) break;" if (parenthesized_expression "((undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3))" ( (binary_expression "(undefined1 *)(lVar20 + lVar16 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar18 + 3)" (cast_expression "(undefined1 *)(lVar20 + lVar16 + (long)puVar15)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar20 + lVar16 + (long)puVar15)" ( (binary_expression "lVar20 + lVar16 + (long)puVar15" (binary_expression "lVar20 + lVar16" identifier + identifier) + (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) < (cast_expression "(undefined1 *)((long)puVar10 + uVar18 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + uVar18 + 3)" ( (binary_expression "(long)puVar10 + uVar18 + 3" (binary_expression "(long)puVar10 + uVar18" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) )) (break_statement "break;" break ;)) (expression_statement "this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));" (assignment_expression "this->cu_version_ = (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" (field_expression "this->cu_version_" identifier -> field_identifier) = (cast_expression "(uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" identifier (argument_list "((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" ( (cast_expression "(char)*puVar10" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*puVar10" * identifier)) , (pointer_expression "*(undefined1 *)((long)puVar10 + 1)" * (cast_expression "(undefined1 *)((long)puVar10 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + 1)" ( (binary_expression "(long)puVar10 + 1" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ))))) ;) (if_statement "if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }\n          else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }" if (parenthesized_expression "(uVar13 == 4)" ( (binary_expression "uVar13 == 4" identifier == number_literal) )) (compound_statement "{\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);\n          }" { (expression_statement "uVar1 = *(uint *)((long)puVar10 + 2);" (assignment_expression "uVar1 = *(uint *)((long)puVar10 + 2)" identifier = (pointer_expression "*(uint *)((long)puVar10 + 2)" * (cast_expression "(uint *)((long)puVar10 + 2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + 2)" ( (binary_expression "(long)puVar10 + 2" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18);" (assignment_expression "pDVar11 = (Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18)" identifier = (cast_expression "(Dwarf_info_reader *)\n                      (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18)" ( (type_descriptor "Dwarf_info_reader *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18)" ( (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                             uVar1 << 0x18" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 << 0x18" identifier << number_literal)) ))))) ;) }) (else_clause "else {\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }" else (compound_statement "{\n            uVar3 = *(ulong *)((long)puVar10 + 2);\n            pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);\n          }" { (expression_statement "uVar3 = *(ulong *)((long)puVar10 + 2);" (assignment_expression "uVar3 = *(ulong *)((long)puVar10 + 2)" identifier = (pointer_expression "*(ulong *)((long)puVar10 + 2)" * (cast_expression "(ulong *)((long)puVar10 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + 2)" ( (binary_expression "(long)puVar10 + 2" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38);" (assignment_expression "pDVar11 = (Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38)" identifier = (cast_expression "(Dwarf_info_reader *)\n                      (uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38)" ( (type_descriptor "Dwarf_info_reader *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38)" ( (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28" (binary_expression "uVar3 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar3 & 0xff000000000000)" ( (binary_expression "uVar3 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar3 & 0xff0000000000)" ( (binary_expression "uVar3 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00000000) >> 8" (parenthesized_expression "(uVar3 & 0xff00000000)" ( (binary_expression "uVar3 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff000000) << 8" (parenthesized_expression "(uVar3 & 0xff000000)" ( (binary_expression "uVar3 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar3 & 0xff0000) << 0x18" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar3 & 0xff00) << 0x28" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x38" identifier << number_literal)) )))) ;) }))) (expression_statement "abbrev_offset = pDVar11;" (assignment_expression "abbrev_offset = pDVar11" identifier = identifier) ;) (if_statement "if (this->reloc_shndx_ != 0) {\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }" if (parenthesized_expression "(this->reloc_shndx_ != 0)" ( (binary_expression "this->reloc_shndx_ != 0" (field_expression "this->reloc_shndx_" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n            abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;\n            if (abbrev_shndx == 0) {\n              return;\n            }\n            abbrev_offset = root_die.dwinfo_;\n            if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }\n            uVar13 = this->offset_size_;\n            uVar18 = (ulong)uVar13;\n          }" { (expression_statement "abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)\n            ;" (assignment_expression "abbrev_shndx = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)" identifier = (call_expression "(*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])\n                                     (this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)" (parenthesized_expression "(*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])" ( (pointer_expression "*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5]" * (subscript_expression "this->reloc_mapper_->_vptr_Elf_reloc_mapper[5]" (field_expression "this->reloc_mapper_->_vptr_Elf_reloc_mapper" (field_expression "this->reloc_mapper_" identifier -> field_identifier) -> field_identifier) [ number_literal ])) )) (argument_list "(this->reloc_mapper_,\n                                      (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),&root_die)" ( (field_expression "this->reloc_mapper_" identifier -> field_identifier) , (cast_expression "(undefined1 *)((long)puVar10 + (2 - (long)puVar15))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + (2 - (long)puVar15))" ( (binary_expression "(long)puVar10 + (2 - (long)puVar15)" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(2 - (long)puVar15)" ( (binary_expression "2 - (long)puVar15" number_literal - (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ))) , (pointer_expression "&root_die" & identifier) )))) ;) (if_statement "if (abbrev_shndx == 0) {\n              return;\n            }" if (parenthesized_expression "(abbrev_shndx == 0)" ( (binary_expression "abbrev_shndx == 0" identifier == number_literal) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) (expression_statement "abbrev_offset = root_die.dwinfo_;" (assignment_expression "abbrev_offset = root_die.dwinfo_" identifier = (field_expression "root_die.dwinfo_" identifier . field_identifier)) ;) (if_statement "if (this->reloc_type_ == 9) {\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }" if (parenthesized_expression "(this->reloc_type_ == 9)" ( (binary_expression "this->reloc_type_ == 9" (field_expression "this->reloc_type_" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n              abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);\n            }" { (expression_statement "abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);" (assignment_expression "abbrev_offset =\n                   (Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_)" identifier = (cast_expression "(Dwarf_info_reader *)\n                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_)" ( (type_descriptor "Dwarf_info_reader *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_)" ( (binary_expression "(long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +\n                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_" (cast_expression "(long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets" & (field_expression "((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets" (field_expression "((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h" (field_expression "((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_" (parenthesized_expression "((root_die.dwinfo_)->abbrev_table_)" ( (field_expression "(root_die.dwinfo_)->abbrev_table_" (parenthesized_expression "(root_die.dwinfo_)" ( (field_expression "root_die.dwinfo_" identifier . field_identifier) )) -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier))) + (cast_expression "(long)pDVar11[-1].abbrev_table_.low_abbrev_codes_" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "pDVar11[-1].abbrev_table_.low_abbrev_codes_" (field_expression "pDVar11[-1].abbrev_table_" (subscript_expression "pDVar11[-1]" identifier [ number_literal ]) . field_identifier) . field_identifier))) )))) ;) })) (expression_statement "uVar13 = this->offset_size_;" (assignment_expression "uVar13 = this->offset_size_" identifier = (field_expression "this->offset_size_" identifier -> field_identifier)) ;) (expression_statement "uVar18 = (ulong)uVar13;" (assignment_expression "uVar18 = (ulong)uVar13" identifier = (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (expression_statement "pbVar17 = (byte *)((long)puVar10 + uVar18 + 2);" (assignment_expression "pbVar17 = (byte *)((long)puVar10 + uVar18 + 2)" identifier = (cast_expression "(byte *)((long)puVar10 + uVar18 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + uVar18 + 2)" ( (binary_expression "(long)puVar10 + uVar18 + 2" (binary_expression "(long)puVar10 + uVar18" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "pbVar19 = pbVar17 + 1;" (assignment_expression "pbVar19 = pbVar17 + 1" identifier = (binary_expression "pbVar17 + 1" identifier + number_literal)) ;) (expression_statement "this->address_size_ = (uint)*pbVar17;" (assignment_expression "this->address_size_ = (uint)*pbVar17" (field_expression "this->address_size_" identifier -> field_identifier) = (binary_expression "(uint)*pbVar17" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (if_statement "if (this->is_type_unit_ == false) {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }" if (parenthesized_expression "(this->is_type_unit_ == false)" ( (binary_expression "this->is_type_unit_ == false" (field_expression "this->is_type_unit_" identifier -> field_identifier) == false) )) (compound_statement "{\n            local_e0 = 0;\n            local_e8 = 0;\n          }" { (expression_statement "local_e0 = 0;" (assignment_expression "local_e0 = 0" identifier = number_literal) ;) (expression_statement "local_e8 = 0;" (assignment_expression "local_e8 = 0" identifier = number_literal) ;) }) (else_clause "else {\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }" else (compound_statement "{\n            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;\n            uVar3 = *(ulong *)(pbVar17 + 1);\n            local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }\n            pbVar19 = pbVar17 + uVar18 + 9;\n          }" { (if_statement "if (this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9) break;" if (parenthesized_expression "(this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9)" ( (binary_expression "this->buffer_ + this->cu_length_ + this->cu_offset_ < pbVar17 + uVar18 + 9" (binary_expression "this->buffer_ + this->cu_length_ + this->cu_offset_" (binary_expression "this->buffer_ + this->cu_length_" (field_expression "this->buffer_" identifier -> field_identifier) + (field_expression "this->cu_length_" identifier -> field_identifier)) + (field_expression "this->cu_offset_" identifier -> field_identifier)) < (binary_expression "pbVar17 + uVar18 + 9" (binary_expression "pbVar17 + uVar18" identifier + identifier) + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = *(ulong *)(pbVar17 + 1);" (assignment_expression "uVar3 = *(ulong *)(pbVar17 + 1)" identifier = (pointer_expression "*(ulong *)(pbVar17 + 1)" * (cast_expression "(ulong *)(pbVar17 + 1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar17 + 1)" ( (binary_expression "pbVar17 + 1" identifier + number_literal) ))))) ;) (expression_statement "local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;" (assignment_expression "local_e8 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38" identifier = (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                       (uVar3 & 0xff00) << 0x28" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                       (uVar3 & 0xff000000) << 8" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                       (uVar3 & 0xff0000000000) >> 0x18" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28" (binary_expression "uVar3 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar3 & 0xff000000000000)" ( (binary_expression "uVar3 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar3 & 0xff0000000000)" ( (binary_expression "uVar3 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00000000) >> 8" (parenthesized_expression "(uVar3 & 0xff00000000)" ( (binary_expression "uVar3 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff000000) << 8" (parenthesized_expression "(uVar3 & 0xff000000)" ( (binary_expression "uVar3 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar3 & 0xff0000) << 0x18" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar3 & 0xff00) << 0x28" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x38" identifier << number_literal))) ;) (if_statement "if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }" if (parenthesized_expression "(uVar13 == 4)" ( (binary_expression "uVar13 == 4" identifier == number_literal) )) (compound_statement "{\n              uVar13 = *(uint *)(pbVar17 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }" { (expression_statement "uVar13 = *(uint *)(pbVar17 + 9);" (assignment_expression "uVar13 = *(uint *)(pbVar17 + 9)" identifier = (pointer_expression "*(uint *)(pbVar17 + 9)" * (cast_expression "(uint *)(pbVar17 + 9)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar17 + 9)" ( (binary_expression "pbVar17 + 9" identifier + number_literal) ))))) ;) (expression_statement "local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);" (assignment_expression "local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" identifier = (call_expression "(ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" ( (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" ( (binary_expression "uVar13 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" ( (binary_expression "uVar13 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar13 << 0x18" identifier << number_literal)) )))) ;) }) (else_clause "else {\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }" else (compound_statement "{\n              uVar3 = *(ulong *)(pbVar17 + 9);\n              local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;\n            }" { (expression_statement "uVar3 = *(ulong *)(pbVar17 + 9);" (assignment_expression "uVar3 = *(ulong *)(pbVar17 + 9)" identifier = (pointer_expression "*(ulong *)(pbVar17 + 9)" * (cast_expression "(ulong *)(pbVar17 + 9)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar17 + 9)" ( (binary_expression "pbVar17 + 9" identifier + number_literal) ))))) ;) (expression_statement "local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38;" (assignment_expression "local_e0 = uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38" identifier = (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28 | uVar3 << 0x38" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18 |\n                         (uVar3 & 0xff00) << 0x28" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8 | (uVar3 & 0xff0000) << 0x18" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8 |\n                         (uVar3 & 0xff000000) << 8" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18 | (uVar3 & 0xff00000000) >> 8" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28 |\n                         (uVar3 & 0xff0000000000) >> 0x18" (binary_expression "uVar3 >> 0x38 | (uVar3 & 0xff000000000000) >> 0x28" (binary_expression "uVar3 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar3 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar3 & 0xff000000000000)" ( (binary_expression "uVar3 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar3 & 0xff0000000000)" ( (binary_expression "uVar3 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff00000000) >> 8" (parenthesized_expression "(uVar3 & 0xff00000000)" ( (binary_expression "uVar3 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar3 & 0xff000000) << 8" (parenthesized_expression "(uVar3 & 0xff000000)" ( (binary_expression "uVar3 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar3 & 0xff0000) << 0x18" (parenthesized_expression "(uVar3 & 0xff0000)" ( (binary_expression "uVar3 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar3 & 0xff00) << 0x28" (parenthesized_expression "(uVar3 & 0xff00)" ( (binary_expression "uVar3 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar3 << 0x38" identifier << number_literal))) ;) }))) (expression_statement "pbVar19 = pbVar17 + uVar18 + 9;" (assignment_expression "pbVar19 = pbVar17 + uVar18 + 9" identifier = (binary_expression "pbVar17 + uVar18 + 9" (binary_expression "pbVar17 + uVar18" identifier + identifier) + number_literal)) ;) }))) (expression_statement "uVar13 = (this->abbrev_table_).abbrev_shndx_;" (assignment_expression "uVar13 = (this->abbrev_table_).abbrev_shndx_" identifier = (field_expression "(this->abbrev_table_).abbrev_shndx_" (parenthesized_expression "(this->abbrev_table_)" ( (field_expression "this->abbrev_table_" identifier -> field_identifier) )) . field_identifier)) ;) (if_statement "if (((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)) {\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }" if (parenthesized_expression "(((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_))" ( (binary_expression "((uVar13 == 0) || (abbrev_shndx != uVar13)) ||\n             (abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)" (parenthesized_expression "((uVar13 == 0) || (abbrev_shndx != uVar13))" ( (binary_expression "(uVar13 == 0) || (abbrev_shndx != uVar13)" (parenthesized_expression "(uVar13 == 0)" ( (binary_expression "uVar13 == 0" identifier == number_literal) )) || (parenthesized_expression "(abbrev_shndx != uVar13)" ( (binary_expression "abbrev_shndx != uVar13" identifier != identifier) ))) )) || (parenthesized_expression "(abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_)" ( (binary_expression "abbrev_offset != (Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_" identifier != (cast_expression "(Dwarf_info_reader *)(this->abbrev_table_).abbrev_offset_" ( (type_descriptor "Dwarf_info_reader *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(this->abbrev_table_).abbrev_offset_" (parenthesized_expression "(this->abbrev_table_)" ( (field_expression "this->abbrev_table_" identifier -> field_identifier) )) . field_identifier))) ))) )) (compound_statement "{\n            Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);\n          }" { (labeled_statement "Dwarf_abbrev_table::do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);" statement_identifier : (ERROR ":" :) (expression_statement "do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset);" (call_expression "do_read_abbrevs\n                      (&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset)" identifier (argument_list "(&this->abbrev_table_,this->object_,abbrev_shndx,(off_t)abbrev_offset)" ( (pointer_expression "&this->abbrev_table_" & (field_expression "this->abbrev_table_" identifier -> field_identifier)) , (field_expression "this->object_" identifier -> field_identifier) , identifier , (cast_expression "(off_t)abbrev_offset" ( (type_descriptor "off_t" type_identifier) ) identifier) ))) ;)) })) (labeled_statement "Dwarf_die::Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);" statement_identifier : (ERROR ":" :) (expression_statement "Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0);" (call_expression "Dwarf_die\n                    (&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0)" identifier (argument_list "(&root_die,this,(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_)),\n                     (Dwarf_die *)0x0)" ( (pointer_expression "&root_die" & identifier) , identifier , (call_expression "(off_t)(pbVar19 + (-this->cu_offset_ - (long)this->buffer_))" (parenthesized_expression "(off_t)" ( identifier )) (argument_list "(pbVar19 + (-this->cu_offset_ - (long)this->buffer_))" ( (binary_expression "pbVar19 + (-this->cu_offset_ - (long)this->buffer_)" identifier + (parenthesized_expression "(-this->cu_offset_ - (long)this->buffer_)" ( (binary_expression "-this->cu_offset_ - (long)this->buffer_" (unary_expression "-this->cu_offset_" - (field_expression "this->cu_offset_" identifier -> field_identifier)) - (cast_expression "(long)this->buffer_" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "this->buffer_" identifier -> field_identifier))) ))) ))) , (cast_expression "(Dwarf_die *)0x0" ( (type_descriptor "Dwarf_die *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ))) ;)) (if_statement "if ((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))\n          {\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }" if (parenthesized_expression "((root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0))" ( (binary_expression "(root_die.abbrev_code_ != (Abbrev_code *)0x0) && ((root_die.abbrev_code_)->tag != 0)" (parenthesized_expression "(root_die.abbrev_code_ != (Abbrev_code *)0x0)" ( (binary_expression "root_die.abbrev_code_ != (Abbrev_code *)0x0" (field_expression "root_die.abbrev_code_" identifier . field_identifier) != (cast_expression "(Abbrev_code *)0x0" ( (type_descriptor "Abbrev_code *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "((root_die.abbrev_code_)->tag != 0)" ( (binary_expression "(root_die.abbrev_code_)->tag != 0" (field_expression "(root_die.abbrev_code_)->tag" (parenthesized_expression "(root_die.abbrev_code_)" ( (field_expression "root_die.abbrev_code_" identifier . field_identifier) )) -> field_identifier) != number_literal) ))) )) (compound_statement "{\n            lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);\n            if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }\n          }" { (expression_statement "lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6);" (assignment_expression "lVar16 = this->cu_offset_ + CONCAT44(extraout_var,iVar6)" identifier = (binary_expression "this->cu_offset_ + CONCAT44(extraout_var,iVar6)" (field_expression "this->cu_offset_" identifier -> field_identifier) + (call_expression "CONCAT44(extraout_var,iVar6)" identifier (argument_list "(extraout_var,iVar6)" ( identifier , identifier ))))) ;) (if_statement "if (this->is_type_unit_ == false) {\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }\n            else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }" if (parenthesized_expression "(this->is_type_unit_ == false)" ( (binary_expression "this->is_type_unit_ == false" (field_expression "this->is_type_unit_" identifier -> field_identifier) == false) )) (compound_statement "{\n              p_Var4 = this->_vptr_Dwarf_info_reader[2];\n              if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }\n            }" { (expression_statement "p_Var4 = this->_vptr_Dwarf_info_reader[2];" (assignment_expression "p_Var4 = this->_vptr_Dwarf_info_reader[2]" identifier = (subscript_expression "this->_vptr_Dwarf_info_reader[2]" (field_expression "this->_vptr_Dwarf_info_reader" identifier -> field_identifier) [ number_literal ])) ;) (if_statement "if (p_Var4 != visit_compilation_unit) {\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }" if (parenthesized_expression "(p_Var4 != visit_compilation_unit)" ( (binary_expression "p_Var4 != visit_compilation_unit" identifier != identifier) )) (compound_statement "{\n                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */\n                (*p_Var4)(this,lVar16,lVar20,&root_die);\n              }" { comment (expression_statement "(*p_Var4)(this,lVar16,lVar20,&root_die);" (call_expression "(*p_Var4)(this,lVar16,lVar20,&root_die)" (parenthesized_expression "(*p_Var4)" ( (pointer_expression "*p_Var4" * identifier) )) (argument_list "(this,lVar16,lVar20,&root_die)" ( identifier , identifier , identifier , (pointer_expression "&root_die" & identifier) ))) ;) })) }) (else_clause "else {\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }" else (compound_statement "{\n              p_Var4 = this->_vptr_Dwarf_info_reader[3];\n              if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }\n            }" { (expression_statement "p_Var4 = this->_vptr_Dwarf_info_reader[3];" (assignment_expression "p_Var4 = this->_vptr_Dwarf_info_reader[3]" identifier = (subscript_expression "this->_vptr_Dwarf_info_reader[3]" (field_expression "this->_vptr_Dwarf_info_reader" identifier -> field_identifier) [ number_literal ])) ;) (if_statement "if (p_Var4 != visit_type_unit) {\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }" if (parenthesized_expression "(p_Var4 != visit_type_unit)" ( (binary_expression "p_Var4 != visit_type_unit" identifier != identifier) )) (compound_statement "{\n                (*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);\n              }" { (expression_statement "(*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die);" (call_expression "(*p_Var4)(this,lVar16,lVar20,local_e0,local_e8,&root_die)" (parenthesized_expression "(*p_Var4)" ( (pointer_expression "*p_Var4" * identifier) )) (argument_list "(this,lVar16,lVar20,local_e0,local_e8,&root_die)" ( identifier , identifier , identifier , identifier , identifier , (pointer_expression "&root_die" & identifier) ))) ;) })) }))) })) (if_statement "if (root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0) {\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }" if (parenthesized_expression "(root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0)" ( (ERROR "root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::" (comma_expression "root_die.attributes_.\n              super__Vector_base<gold::Dwarf_die::Attribute_value,_std" (binary_expression "root_die.attributes_.\n              super__Vector_base<gold" (field_expression "root_die.attributes_.\n              super__Vector_base" (field_expression "root_die.attributes_" identifier . field_identifier) . field_identifier) < identifier) (ERROR "::Dwarf_die::Attribute_value" : : identifier : : identifier) , identifier) : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (binary_expression "Attribute_value>_>\n              ._M_impl._M_start != (pointer)0x0" (field_expression "Attribute_value>_>\n              ._M_impl._M_start" (field_expression "Attribute_value>_>\n              ._M_impl" (binary_expression "Attribute_value>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) != (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) )) (compound_statement "{\n            operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);\n          }" { (expression_statement "operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start);" (call_expression "operator_delete(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start)" identifier (argument_list "(root_die.attributes_.\n                            super__Vector_base<gold::Dwarf_die::Attribute_value,_std::allocator<gold::Dwarf_die::Attribute_value>_>\n                            ._M_impl._M_start)" ( (binary_expression "root_die.attributes_.\n                            super__Vector_base<gold" (field_expression "root_die.attributes_.\n                            super__Vector_base" (field_expression "root_die.attributes_" identifier . field_identifier) . field_identifier) < identifier) (ERROR "::Dwarf_die::Attribute_value" : : identifier : : identifier) , (ERROR "_std::allocator<gold::Dwarf_die::" identifier : : (binary_expression "allocator<gold" identifier < identifier) : : identifier : :) (field_expression "Attribute_value>_>\n                            ._M_impl._M_start" (field_expression "Attribute_value>_>\n                            ._M_impl" (binary_expression "Attribute_value>_" identifier > identifier) (ERROR ">" >) . field_identifier) . field_identifier) ))) ;) })) (if_statement "if (this->buffer_end_ <= puVar14) goto LAB_00306aa8;" if (parenthesized_expression "(this->buffer_end_ <= puVar14)" ( (binary_expression "this->buffer_end_ <= puVar14" (field_expression "this->buffer_end_" identifier -> field_identifier) <= identifier) )) (goto_statement "goto LAB_00306aa8;" goto statement_identifier ;)) (expression_statement "puVar15 = (uint *)this->buffer_;" (assignment_expression "puVar15 = (uint *)this->buffer_" identifier = (cast_expression "(uint *)this->buffer_" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "this->buffer_" identifier -> field_identifier))) ;) (expression_statement "lVar20 = (long)this->buffer_end_ - (long)puVar14;" (assignment_expression "lVar20 = (long)this->buffer_end_ - (long)puVar14" identifier = (binary_expression "(long)this->buffer_end_ - (long)puVar14" (cast_expression "(long)this->buffer_end_" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "this->buffer_end_" identifier -> field_identifier)) - (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "puVar10 = puVar14 + 1;" (assignment_expression "puVar10 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) (expression_statement "this->cu_length_ = lVar20;" (assignment_expression "this->cu_length_ = lVar20" (field_expression "this->cu_length_" identifier -> field_identifier) = identifier) ;) (expression_statement "lVar16 = (long)puVar14 - (long)puVar15;" (assignment_expression "lVar16 = (long)puVar14 - (long)puVar15" identifier = (binary_expression "(long)puVar14 - (long)puVar15" (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "this->cu_offset_ = lVar16;" (assignment_expression "this->cu_offset_ = lVar16" (field_expression "this->cu_offset_" identifier -> field_identifier) = identifier) ;) (expression_statement "puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16);" (assignment_expression "puVar9 = (uint *)((long)puVar15 + lVar20 + lVar16)" identifier = (cast_expression "(uint *)((long)puVar15 + lVar20 + lVar16)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar15 + lVar20 + lVar16)" ( (binary_expression "(long)puVar15 + lVar20 + lVar16" (binary_expression "(long)puVar15 + lVar20" (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + identifier) )))) ;) (expression_statement "puVar12 = puVar14;" (assignment_expression "puVar12 = puVar14" identifier = identifier) ;) }) while (parenthesized_expression "(puVar10 <= puVar9)" ( (binary_expression "puVar10 <= puVar9" identifier <= identifier) )) ;) })) (expression_statement "warn_corrupt_debug_section(this);" (call_expression "warn_corrupt_debug_section(this)" identifier (argument_list "(this)" ( identifier ))) ;) })) (labeled_statement "LAB_00306aa8:\n    if (buffer_is_new != false) {\n      if (this->buffer_ != (uchar *)0x0) {\n        operator_delete__(this->buffer_);\n      }\n      this->buffer_ = (uchar *)0x0;\n    }" statement_identifier : (if_statement "if (buffer_is_new != false) {\n      if (this->buffer_ != (uchar *)0x0) {\n        operator_delete__(this->buffer_);\n      }\n      this->buffer_ = (uchar *)0x0;\n    }" if (parenthesized_expression "(buffer_is_new != false)" ( (binary_expression "buffer_is_new != false" identifier != false) )) (compound_statement "{\n      if (this->buffer_ != (uchar *)0x0) {\n        operator_delete__(this->buffer_);\n      }\n      this->buffer_ = (uchar *)0x0;\n    }" { (if_statement "if (this->buffer_ != (uchar *)0x0) {\n        operator_delete__(this->buffer_);\n      }" if (parenthesized_expression "(this->buffer_ != (uchar *)0x0)" ( (binary_expression "this->buffer_ != (uchar *)0x0" (field_expression "this->buffer_" identifier -> field_identifier) != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        operator_delete__(this->buffer_);\n      }" { (expression_statement "operator_delete__(this->buffer_);" (call_expression "operator_delete__(this->buffer_)" identifier (argument_list "(this->buffer_)" ( (field_expression "this->buffer_" identifier -> field_identifier) ))) ;) })) (expression_statement "this->buffer_ = (uchar *)0x0;" (assignment_expression "this->buffer_ = (uchar *)0x0" (field_expression "this->buffer_" identifier -> field_identifier) = (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) }))) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_003067f0(long *param_1)\n\n{\n  uint uVar1;\n  code *pcVar2;\n  undefined8 uVar3;\n  int iVar4;\n  long lVar5;\n  long lVar6;\n  long *plVar7;\n  uint *puVar8;\n  ulong uVar9;\n  uint *puVar10;\n  ulong uVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  byte *pbVar16;\n  ulong uVar17;\n  byte *pbVar18;\n  long lVar19;\n  ulong local_e8;\n  ulong local_e0;\n  char local_d1;\n  long local_d0;\n  ulong local_c8 [6];\n  int *local_98;\n  long local_90;\n  \n  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);\n  param_1[8] = lVar5;\n  if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }\n  return;\n}\n\n" (function_definition "void FUN_003067f0(long *param_1)\n\n{\n  uint uVar1;\n  code *pcVar2;\n  undefined8 uVar3;\n  int iVar4;\n  long lVar5;\n  long lVar6;\n  long *plVar7;\n  uint *puVar8;\n  ulong uVar9;\n  uint *puVar10;\n  ulong uVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  byte *pbVar16;\n  ulong uVar17;\n  byte *pbVar18;\n  long lVar19;\n  ulong local_e8;\n  ulong local_e0;\n  char local_d1;\n  long local_d0;\n  ulong local_c8 [6];\n  int *local_98;\n  long local_90;\n  \n  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);\n  param_1[8] = lVar5;\n  if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }\n  return;\n}" primitive_type (function_declarator "FUN_003067f0(long *param_1)" identifier (parameter_list "(long *param_1)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  code *pcVar2;\n  undefined8 uVar3;\n  int iVar4;\n  long lVar5;\n  long lVar6;\n  long *plVar7;\n  uint *puVar8;\n  ulong uVar9;\n  uint *puVar10;\n  ulong uVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  byte *pbVar16;\n  ulong uVar17;\n  byte *pbVar18;\n  long lVar19;\n  ulong local_e8;\n  ulong local_e0;\n  char local_d1;\n  long local_d0;\n  ulong local_c8 [6];\n  int *local_98;\n  long local_90;\n  \n  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);\n  param_1[8] = lVar5;\n  if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }\n  return;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "code *pcVar2;" type_identifier (pointer_declarator "*pcVar2" * identifier) ;) (declaration "undefined8 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar6;" (sized_type_specifier "long" long) identifier ;) (declaration "long *plVar7;" (sized_type_specifier "long" long) (pointer_declarator "*plVar7" * identifier) ;) (declaration "uint *puVar8;" type_identifier (pointer_declarator "*puVar8" * identifier) ;) (declaration "ulong uVar9;" type_identifier identifier ;) (declaration "uint *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "uint *puVar12;" type_identifier (pointer_declarator "*puVar12" * identifier) ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint *puVar14;" type_identifier (pointer_declarator "*puVar14" * identifier) ;) (declaration "uint *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "byte *pbVar16;" type_identifier (pointer_declarator "*pbVar16" * identifier) ;) (declaration "ulong uVar17;" type_identifier identifier ;) (declaration "byte *pbVar18;" type_identifier (pointer_declarator "*pbVar18" * identifier) ;) (declaration "long lVar19;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_e8;" type_identifier identifier ;) (declaration "ulong local_e0;" type_identifier identifier ;) (declaration "char local_d1;" primitive_type identifier ;) (declaration "long local_d0;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_c8 [6];" type_identifier (array_declarator "local_c8 [6]" identifier [ number_literal ]) ;) (declaration "int *local_98;" primitive_type (pointer_declarator "*local_98" * identifier) ;) (declaration "long local_90;" (sized_type_specifier "long" long) identifier ;) (expression_statement "lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);" (assignment_expression "lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0)" identifier = (call_expression "FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0)" identifier (argument_list "(param_1[2],(int)param_1[5],&local_d0,&local_d1,0)" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) , (pointer_expression "&local_d0" & identifier) , (pointer_expression "&local_d1" & identifier) , number_literal )))) ;) (expression_statement "param_1[8] = lVar5;" (assignment_expression "param_1[8] = lVar5" (subscript_expression "param_1[8]" identifier [ number_literal ]) = identifier) ;) (if_statement "if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }" if (parenthesized_expression "((lVar5 != 0) && (local_d0 != 0))" ( (binary_expression "(lVar5 != 0) && (local_d0 != 0)" (parenthesized_expression "(lVar5 != 0)" ( (binary_expression "lVar5 != 0" identifier != number_literal) )) && (parenthesized_expression "(local_d0 != 0)" ( (binary_expression "local_d0 != 0" identifier != number_literal) ))) )) (compound_statement "{\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }" { (expression_statement "param_1[9] = lVar5 + local_d0;" (assignment_expression "param_1[9] = lVar5 + local_d0" (subscript_expression "param_1[9]" identifier [ number_literal ]) = (binary_expression "lVar5 + local_d0" identifier + identifier)) ;) (expression_statement "lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);" (assignment_expression "lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5])" identifier = (call_expression "(**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5])" (parenthesized_expression "(**(code **)(*(long *)param_1[2] + 0xd0))" ( (pointer_expression "**(code **)(*(long *)param_1[2] + 0xd0)" * (pointer_expression "*(code **)(*(long *)param_1[2] + 0xd0)" * (cast_expression "(code **)(*(long *)param_1[2] + 0xd0)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)param_1[2] + 0xd0)" ( (binary_expression "*(long *)param_1[2] + 0xd0" (pointer_expression "*(long *)param_1[2]" * (cast_expression "(long *)param_1[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "((long *)param_1[2],(int)param_1[5])" ( (cast_expression "(long *)param_1[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ])) , (cast_expression "(int)param_1[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[5]" identifier [ number_literal ])) )))) ;) (expression_statement "plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);" (assignment_expression "plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4])" identifier = (cast_expression "(long *)FUN_00301200(param_1[2],param_1[3],param_1[4])" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00301200(param_1[2],param_1[3],param_1[4])" identifier (argument_list "(param_1[2],param_1[3],param_1[4])" ( (subscript_expression "param_1[2]" identifier [ number_literal ]) , (subscript_expression "param_1[3]" identifier [ number_literal ]) , (subscript_expression "param_1[4]" identifier [ number_literal ]) ))))) ;) (expression_statement "lVar5 = *plVar7;" (assignment_expression "lVar5 = *plVar7" identifier = (pointer_expression "*plVar7" * identifier)) ;) (expression_statement "param_1[0x123] = (long)plVar7;" (assignment_expression "param_1[0x123] = (long)plVar7" (subscript_expression "param_1[0x123]" identifier [ number_literal ]) = (cast_expression "(long)plVar7" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "(**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);" (call_expression "(**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6])" (parenthesized_expression "(**(code **)(lVar5 + 0x10))" ( (pointer_expression "**(code **)(lVar5 + 0x10)" * (pointer_expression "*(code **)(lVar5 + 0x10)" * (cast_expression "(code **)(lVar5 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar5 + 0x10)" ( (binary_expression "lVar5 + 0x10" identifier + number_literal) ))))) )) (argument_list "(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6])" ( identifier , (pointer_expression "*(undefined4 *)((long)param_1 + 0x2c)" * (cast_expression "(undefined4 *)((long)param_1 + 0x2c)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x2c)" ( (binary_expression "(long)param_1 + 0x2c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) , (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) ))) ;) (expression_statement "puVar15 = (uint *)param_1[8];" (assignment_expression "puVar15 = (uint *)param_1[8]" identifier = (cast_expression "(uint *)param_1[8]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ]))) ;) (expression_statement "puVar8 = (uint *)param_1[9];" (assignment_expression "puVar8 = (uint *)param_1[9]" identifier = (cast_expression "(uint *)param_1[9]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[9]" identifier [ number_literal ]))) ;) (expression_statement "iVar4 = *(int *)((long)param_1 + 0x34);" (assignment_expression "iVar4 = *(int *)((long)param_1 + 0x34)" identifier = (pointer_expression "*(int *)((long)param_1 + 0x34)" * (cast_expression "(int *)((long)param_1 + 0x34)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x34)" ( (binary_expression "(long)param_1 + 0x34" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (if_statement "if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }" if (parenthesized_expression "(puVar15 < puVar8)" ( (binary_expression "puVar15 < puVar8" identifier < identifier) )) (compound_statement "{\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }" { (expression_statement "puVar10 = puVar15 + 1;" (assignment_expression "puVar10 = puVar15 + 1" identifier = (binary_expression "puVar15 + 1" identifier + number_literal)) ;) (expression_statement "param_1[10] = 0;" (assignment_expression "param_1[10] = 0" (subscript_expression "param_1[10]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0xb] = (long)puVar8 - (long)puVar15;" (assignment_expression "param_1[0xb] = (long)puVar8 - (long)puVar15" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = (binary_expression "(long)puVar8 - (long)puVar15" (cast_expression "(long)puVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }" if (parenthesized_expression "(puVar10 <= puVar8)" ( (binary_expression "puVar10 <= puVar8" identifier <= identifier) )) (compound_statement "{\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }" { (expression_statement "lVar5 = 0;" (assignment_expression "lVar5 = 0" identifier = number_literal) ;) (expression_statement "puVar12 = puVar15;" (assignment_expression "puVar12 = puVar15" identifier = identifier) ;) (do_statement "do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);" do (compound_statement "{\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        }" { (expression_statement "uVar13 = *puVar12;" (assignment_expression "uVar13 = *puVar12" identifier = (pointer_expression "*puVar12" * identifier)) ;) (expression_statement "uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;" (assignment_expression "uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" identifier = (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" ( (binary_expression "uVar13 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" ( (binary_expression "uVar13 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar13 << 0x18" identifier << number_literal))) ;) (if_statement "if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }" if (parenthesized_expression "(uVar13 == 0xffffffff)" ( (binary_expression "uVar13 == 0xffffffff" identifier == number_literal) )) (compound_statement "{\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }" { (expression_statement "puVar10 = puVar12 + 3;" (assignment_expression "puVar10 = puVar12 + 3" identifier = (binary_expression "puVar12 + 3" identifier + number_literal)) ;) (if_statement "if (puVar8 < puVar10) break;" if (parenthesized_expression "(puVar8 < puVar10)" ( (binary_expression "puVar8 < puVar10" identifier < identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = *(undefined8 *)(puVar12 + 1);" (assignment_expression "uVar3 = *(undefined8 *)(puVar12 + 1)" identifier = (pointer_expression "*(undefined8 *)(puVar12 + 1)" * (cast_expression "(undefined8 *)(puVar12 + 1)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar12 + 1)" ( (binary_expression "puVar12 + 1" identifier + number_literal) ))))) ;) (expression_statement "*(undefined4 *)(param_1 + 0xc) = 8;" (assignment_expression "*(undefined4 *)(param_1 + 0xc) = 8" (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = number_literal) ;) (expression_statement "uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;" (assignment_expression "uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000" identifier = (binary_expression "(uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000" (binary_expression "(uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000" (binary_expression "(uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8" (call_expression "(uint)(byte)((ulong)uVar3 >> 0x38)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "((ulong)uVar3 >> 0x38)" ( (binary_expression "(ulong)uVar3 >> 0x38" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) | (binary_expression "((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8" (parenthesized_expression "((uint)((ulong)uVar3 >> 0x20) & 0xff0000)" ( (binary_expression "(uint)((ulong)uVar3 >> 0x20) & 0xff0000" (call_expression "(uint)((ulong)uVar3 >> 0x20)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)uVar3 >> 0x20)" ( (binary_expression "(ulong)uVar3 >> 0x20" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) & number_literal) )) >> number_literal)) | (binary_expression "(uint)((ulong)uVar3 >> 0x18) & 0xff0000" (call_expression "(uint)((ulong)uVar3 >> 0x18)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)uVar3 >> 0x18)" ( (binary_expression "(ulong)uVar3 >> 0x18" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) & number_literal)) | (binary_expression "(uint)((ulong)uVar3 >> 8) & 0xff000000" (call_expression "(uint)((ulong)uVar3 >> 8)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((ulong)uVar3 >> 8)" ( (binary_expression "(ulong)uVar3 >> 8" (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) >> number_literal) ))) & number_literal))) ;) }) (else_clause "else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }" else (compound_statement "{\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }" { (expression_statement "*(undefined4 *)(param_1 + 0xc) = 4;" (assignment_expression "*(undefined4 *)(param_1 + 0xc) = 4" (pointer_expression "*(undefined4 *)(param_1 + 0xc)" * (cast_expression "(undefined4 *)(param_1 + 0xc)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) )))) = number_literal) ;) }))) (expression_statement "puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);" (assignment_expression "puVar14 = (uint *)((ulong)uVar13 + (long)puVar10)" identifier = (cast_expression "(uint *)((ulong)uVar13 + (long)puVar10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)uVar13 + (long)puVar10)" ( (binary_expression "(ulong)uVar13 + (long)puVar10" (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier) + (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (if_statement "if (puVar8 < puVar14) break;" if (parenthesized_expression "(puVar8 < puVar14)" ( (binary_expression "puVar8 < puVar14" identifier < identifier) )) (break_statement "break;" break ;)) (expression_statement "uVar13 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar13 = *(uint *)(param_1 + 0xc)" identifier = (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar17 = (ulong)uVar13;" (assignment_expression "uVar17 = (ulong)uVar13" identifier = (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "lVar19 = (long)puVar14 - (long)puVar12;" (assignment_expression "lVar19 = (long)puVar14 - (long)puVar12" identifier = (binary_expression "(long)puVar14 - (long)puVar12" (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "param_1[0xb] = lVar19;" (assignment_expression "param_1[0xb] = lVar19" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = identifier) ;) (if_statement "if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;" if (parenthesized_expression "((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3))" ( (binary_expression "(undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)" (cast_expression "(undefined1 *)(lVar19 + lVar5 + (long)puVar15)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar19 + lVar5 + (long)puVar15)" ( (binary_expression "lVar19 + lVar5 + (long)puVar15" (binary_expression "lVar19 + lVar5" identifier + identifier) + (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) < (cast_expression "(undefined1 *)((long)puVar10 + uVar17 + 3)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + uVar17 + 3)" ( (binary_expression "(long)puVar10 + uVar17 + 3" (binary_expression "(long)puVar10 + uVar17" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) )) (break_statement "break;" break ;)) (expression_statement "*(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));" (assignment_expression "*(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" (pointer_expression "*(uint *)(param_1 + 0xd)" * (cast_expression "(uint *)(param_1 + 0xd)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xd)" ( (binary_expression "param_1 + 0xd" identifier + number_literal) )))) = (cast_expression "(uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" ( (type_descriptor "uint" type_identifier) ) (call_expression "CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" identifier (argument_list "((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" ( (cast_expression "(char)*puVar10" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*puVar10" * identifier)) , (pointer_expression "*(undefined1 *)((long)puVar10 + 1)" * (cast_expression "(undefined1 *)((long)puVar10 + 1)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + 1)" ( (binary_expression "(long)puVar10 + 1" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) ))))) ;) (if_statement "if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }" if (parenthesized_expression "(uVar13 == 4)" ( (binary_expression "uVar13 == 4" identifier == number_literal) )) (compound_statement "{\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }" { (expression_statement "uVar1 = *(uint *)((long)puVar10 + 2);" (assignment_expression "uVar1 = *(uint *)((long)puVar10 + 2)" identifier = (pointer_expression "*(uint *)((long)puVar10 + 2)" * (cast_expression "(uint *)((long)puVar10 + 2)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + 2)" ( (binary_expression "(long)puVar10 + 2" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);" (assignment_expression "uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18)" identifier = (call_expression "(ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18)" ( (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" ( (binary_expression "uVar1 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" ( (binary_expression "uVar1 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar1 << 0x18" identifier << number_literal)) )))) ;) }) (else_clause "else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }" else (compound_statement "{\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }" { (expression_statement "uVar11 = *(ulong *)((long)puVar10 + 2);" (assignment_expression "uVar11 = *(ulong *)((long)puVar10 + 2)" identifier = (pointer_expression "*(ulong *)((long)puVar10 + 2)" * (cast_expression "(ulong *)((long)puVar10 + 2)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + 2)" ( (binary_expression "(long)puVar10 + 2" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;" (assignment_expression "uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" identifier = (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" ( (binary_expression "uVar11 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" ( (binary_expression "uVar11 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" ( (binary_expression "uVar11 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" ( (binary_expression "uVar11 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" ( (binary_expression "uVar11 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" ( (binary_expression "uVar11 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar11 << 0x38" identifier << number_literal))) ;) }))) (expression_statement "uVar9 = uVar11;" (assignment_expression "uVar9 = uVar11" identifier = identifier) ;) (if_statement "if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }" if (parenthesized_expression "(*(int *)((long)param_1 + 0x2c) != 0)" ( (binary_expression "*(int *)((long)param_1 + 0x2c) != 0" (pointer_expression "*(int *)((long)param_1 + 0x2c)" * (cast_expression "(int *)((long)param_1 + 0x2c)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x2c)" ( (binary_expression "(long)param_1 + 0x2c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) != number_literal) )) (compound_statement "{\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }" { (expression_statement "iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);" (assignment_expression "iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8)" identifier = (call_expression "(**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8)" (parenthesized_expression "(**(code **)(*(long *)param_1[0x123] + 0x28))" ( (pointer_expression "**(code **)(*(long *)param_1[0x123] + 0x28)" * (pointer_expression "*(code **)(*(long *)param_1[0x123] + 0x28)" * (cast_expression "(code **)(*(long *)param_1[0x123] + 0x28)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)param_1[0x123] + 0x28)" ( (binary_expression "*(long *)param_1[0x123] + 0x28" (pointer_expression "*(long *)param_1[0x123]" * (cast_expression "(long *)param_1[0x123]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x123]" identifier [ number_literal ]))) + number_literal) ))))) )) (argument_list "((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8)" ( (cast_expression "(long *)param_1[0x123]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x123]" identifier [ number_literal ])) , (cast_expression "(undefined1 *)((long)puVar10 + (2 - (long)puVar15))" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + (2 - (long)puVar15))" ( (binary_expression "(long)puVar10 + (2 - (long)puVar15)" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(2 - (long)puVar15)" ( (binary_expression "2 - (long)puVar15" number_literal - (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) ))) , identifier )))) ;) (if_statement "if (iVar4 == 0) {\n              return;\n            }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n              return;\n            }" { (return_statement "return;" return ;) })) (expression_statement "uVar9 = local_c8[0];" (assignment_expression "uVar9 = local_c8[0]" identifier = (subscript_expression "local_c8[0]" identifier [ number_literal ])) ;) (if_statement "if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }" if (parenthesized_expression "((int)param_1[6] == 9)" ( (binary_expression "(int)param_1[6] == 9" (cast_expression "(int)param_1[6]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[6]" identifier [ number_literal ])) == number_literal) )) (compound_statement "{\n              uVar9 = local_c8[0] + uVar11;\n            }" { (expression_statement "uVar9 = local_c8[0] + uVar11;" (assignment_expression "uVar9 = local_c8[0] + uVar11" identifier = (binary_expression "local_c8[0] + uVar11" (subscript_expression "local_c8[0]" identifier [ number_literal ]) + identifier)) ;) })) (expression_statement "uVar13 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar13 = *(uint *)(param_1 + 0xc)" identifier = (pointer_expression "*(uint *)(param_1 + 0xc)" * (cast_expression "(uint *)(param_1 + 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0xc)" ( (binary_expression "param_1 + 0xc" identifier + number_literal) ))))) ;) (expression_statement "uVar17 = (ulong)uVar13;" (assignment_expression "uVar17 = (ulong)uVar13" identifier = (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (expression_statement "pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);" (assignment_expression "pbVar16 = (byte *)((long)puVar10 + uVar17 + 2)" identifier = (cast_expression "(byte *)((long)puVar10 + uVar17 + 2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar10 + uVar17 + 2)" ( (binary_expression "(long)puVar10 + uVar17 + 2" (binary_expression "(long)puVar10 + uVar17" (cast_expression "(long)puVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) )))) ;) (expression_statement "pbVar18 = pbVar16 + 1;" (assignment_expression "pbVar18 = pbVar16 + 1" identifier = (binary_expression "pbVar16 + 1" identifier + number_literal)) ;) (expression_statement "*(uint *)((long)param_1 + 100) = (uint)*pbVar16;" (assignment_expression "*(uint *)((long)param_1 + 100) = (uint)*pbVar16" (pointer_expression "*(uint *)((long)param_1 + 100)" * (cast_expression "(uint *)((long)param_1 + 100)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 100)" ( (binary_expression "(long)param_1 + 100" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = (binary_expression "(uint)*pbVar16" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (if_statement "if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }" if (parenthesized_expression "((char)param_1[1] == '\0')" ( (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n            local_e0 = 0;\n            local_e8 = 0;\n          }" { (expression_statement "local_e0 = 0;" (assignment_expression "local_e0 = 0" identifier = number_literal) ;) (expression_statement "local_e8 = 0;" (assignment_expression "local_e8 = 0" identifier = number_literal) ;) }) (else_clause "else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }" else (compound_statement "{\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }" { (if_statement "if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;" if (parenthesized_expression "((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9)" ( (binary_expression "(byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9" (cast_expression "(byte *)(param_1[0xb] + param_1[10] + param_1[8])" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xb] + param_1[10] + param_1[8])" ( (binary_expression "param_1[0xb] + param_1[10] + param_1[8]" (binary_expression "param_1[0xb] + param_1[10]" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) + (subscript_expression "param_1[10]" identifier [ number_literal ])) + (subscript_expression "param_1[8]" identifier [ number_literal ])) ))) < (binary_expression "pbVar16 + uVar17 + 9" (binary_expression "pbVar16 + uVar17" identifier + identifier) + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "uVar11 = *(ulong *)(pbVar16 + 1);" (assignment_expression "uVar11 = *(ulong *)(pbVar16 + 1)" identifier = (pointer_expression "*(ulong *)(pbVar16 + 1)" * (cast_expression "(ulong *)(pbVar16 + 1)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar16 + 1)" ( (binary_expression "pbVar16 + 1" identifier + number_literal) ))))) ;) (expression_statement "local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;" (assignment_expression "local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" identifier = (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" ( (binary_expression "uVar11 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" ( (binary_expression "uVar11 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" ( (binary_expression "uVar11 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" ( (binary_expression "uVar11 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" ( (binary_expression "uVar11 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" ( (binary_expression "uVar11 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar11 << 0x38" identifier << number_literal))) ;) (if_statement "if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }" if (parenthesized_expression "(uVar13 == 4)" ( (binary_expression "uVar13 == 4" identifier == number_literal) )) (compound_statement "{\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }" { (expression_statement "uVar13 = *(uint *)(pbVar16 + 9);" (assignment_expression "uVar13 = *(uint *)(pbVar16 + 9)" identifier = (pointer_expression "*(uint *)(pbVar16 + 9)" * (cast_expression "(uint *)(pbVar16 + 9)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar16 + 9)" ( (binary_expression "pbVar16 + 9" identifier + number_literal) ))))) ;) (expression_statement "local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);" (assignment_expression "local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" identifier = (call_expression "(ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" ( (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" identifier >> number_literal) | (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" ( (binary_expression "uVar13 & 0xff0000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" ( (binary_expression "uVar13 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar13 << 0x18" identifier << number_literal)) )))) ;) }) (else_clause "else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }" else (compound_statement "{\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }" { (expression_statement "uVar11 = *(ulong *)(pbVar16 + 9);" (assignment_expression "uVar11 = *(ulong *)(pbVar16 + 9)" identifier = (pointer_expression "*(ulong *)(pbVar16 + 9)" * (cast_expression "(ulong *)(pbVar16 + 9)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pbVar16 + 9)" ( (binary_expression "pbVar16 + 9" identifier + number_literal) ))))) ;) (expression_statement "local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;" (assignment_expression "local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" identifier = (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" identifier >> number_literal) | (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" ( (binary_expression "uVar11 & 0xff000000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" ( (binary_expression "uVar11 & 0xff0000000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" ( (binary_expression "uVar11 & 0xff00000000" identifier & number_literal) )) >> number_literal)) | (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" ( (binary_expression "uVar11 & 0xff000000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" ( (binary_expression "uVar11 & 0xff0000" identifier & number_literal) )) << number_literal)) | (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" ( (binary_expression "uVar11 & 0xff00" identifier & number_literal) )) << number_literal)) | (binary_expression "uVar11 << 0x38" identifier << number_literal))) ;) }))) (expression_statement "pbVar18 = pbVar16 + uVar17 + 9;" (assignment_expression "pbVar18 = pbVar16 + uVar17 + 9" identifier = (binary_expression "pbVar16 + uVar17 + 9" (binary_expression "pbVar16 + uVar17" identifier + identifier) + number_literal)) ;) }))) (if_statement "if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }" if (parenthesized_expression "((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))" ( (binary_expression "(((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf])" (parenthesized_expression "(((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe]))" ( (binary_expression "((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])" (parenthesized_expression "((int)param_1[0xe] == 0)" ( (binary_expression "(int)param_1[0xe] == 0" (cast_expression "(int)param_1[0xe]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0xe]" identifier [ number_literal ])) == number_literal) )) || (parenthesized_expression "(iVar4 != (int)param_1[0xe])" ( (binary_expression "iVar4 != (int)param_1[0xe]" identifier != (cast_expression "(int)param_1[0xe]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ))) )) || (parenthesized_expression "(uVar9 != param_1[0xf])" ( (binary_expression "uVar9 != param_1[0xf]" identifier != (subscript_expression "param_1[0xf]" identifier [ number_literal ])) ))) )) (compound_statement "{\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }" { (expression_statement "FUN_00302430(param_1 + 0xe,param_1[2],iVar4);" (call_expression "FUN_00302430(param_1 + 0xe,param_1[2],iVar4)" identifier (argument_list "(param_1 + 0xe,param_1[2],iVar4)" ( (binary_expression "param_1 + 0xe" identifier + number_literal) , (subscript_expression "param_1[2]" identifier [ number_literal ]) , identifier ))) ;) })) (expression_statement "FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);" (call_expression "FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0)" identifier (argument_list "(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0)" ( identifier , identifier , (binary_expression "pbVar18 + (-param_1[10] - param_1[8])" identifier + (parenthesized_expression "(-param_1[10] - param_1[8])" ( (binary_expression "-param_1[10] - param_1[8]" (unary_expression "-param_1[10]" - (subscript_expression "param_1[10]" identifier [ number_literal ])) - (subscript_expression "param_1[8]" identifier [ number_literal ])) ))) , number_literal ))) ;) (if_statement "if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }" if (parenthesized_expression "((local_98 != (int *)0x0) && (*local_98 != 0))" ( (binary_expression "(local_98 != (int *)0x0) && (*local_98 != 0)" (parenthesized_expression "(local_98 != (int *)0x0)" ( (binary_expression "local_98 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*local_98 != 0)" ( (binary_expression "*local_98 != 0" (pointer_expression "*local_98" * identifier) != number_literal) ))) )) (compound_statement "{\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }" { (if_statement "if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }" if (parenthesized_expression "((char)param_1[1] == '\0')" ( (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" ( (type_descriptor "char" primitive_type) ) (subscript_expression "param_1[1]" identifier [ number_literal ])) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }" { (expression_statement "pcVar2 = *(code **)(*param_1 + 0x10);" (assignment_expression "pcVar2 = *(code **)(*param_1 + 0x10)" identifier = (pointer_expression "*(code **)(*param_1 + 0x10)" * (cast_expression "(code **)(*param_1 + 0x10)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) ))))) ;) (if_statement "if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }" if (parenthesized_expression "(pcVar2 != FUN_00301070)" ( (binary_expression "pcVar2 != FUN_00301070" identifier != identifier) )) (compound_statement "{\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }" { (expression_statement "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);" (call_expression "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(param_1,param_1[10] + lVar6,lVar19,local_c8)" ( identifier , (binary_expression "param_1[10] + lVar6" (subscript_expression "param_1[10]" identifier [ number_literal ]) + identifier) , identifier , identifier ))) ;) })) }) (else_clause "else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }" else (compound_statement "{\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }" { (expression_statement "pcVar2 = *(code **)(*param_1 + 0x18);" (assignment_expression "pcVar2 = *(code **)(*param_1 + 0x18)" identifier = (pointer_expression "*(code **)(*param_1 + 0x18)" * (cast_expression "(code **)(*param_1 + 0x18)" ( (type_descriptor "code **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*param_1 + 0x18)" ( (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" * identifier) + number_literal) ))))) ;) (if_statement "if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }" if (parenthesized_expression "(pcVar2 != FUN_00301080)" ( (binary_expression "pcVar2 != FUN_00301080" identifier != identifier) )) (compound_statement "{\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }" { (expression_statement "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);" (call_expression "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8)" (parenthesized_expression "(*pcVar2)" ( (pointer_expression "*pcVar2" * identifier) )) (argument_list "(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8)" ( identifier , (binary_expression "param_1[10] + lVar6" (subscript_expression "param_1[10]" identifier [ number_literal ]) + identifier) , identifier , identifier , identifier , identifier ))) ;) })) }))) })) (if_statement "if (local_90 != 0) {\n            FUN_00338a40();\n          }" if (parenthesized_expression "(local_90 != 0)" ( (binary_expression "local_90 != 0" identifier != number_literal) )) (compound_statement "{\n            FUN_00338a40();\n          }" { (expression_statement "FUN_00338a40();" (call_expression "FUN_00338a40()" identifier (argument_list "()" ( ))) ;) })) (if_statement "if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;" if (parenthesized_expression "((uint *)param_1[9] <= puVar14)" ( (binary_expression "(uint *)param_1[9] <= puVar14" (cast_expression "(uint *)param_1[9]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[9]" identifier [ number_literal ])) <= identifier) )) (goto_statement "goto LAB_00306aa8;" goto statement_identifier ;)) (expression_statement "puVar15 = (uint *)param_1[8];" (assignment_expression "puVar15 = (uint *)param_1[8]" identifier = (cast_expression "(uint *)param_1[8]" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[8]" identifier [ number_literal ]))) ;) (expression_statement "lVar19 = param_1[9] - (long)puVar14;" (assignment_expression "lVar19 = param_1[9] - (long)puVar14" identifier = (binary_expression "param_1[9] - (long)puVar14" (subscript_expression "param_1[9]" identifier [ number_literal ]) - (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "puVar10 = puVar14 + 1;" (assignment_expression "puVar10 = puVar14 + 1" identifier = (binary_expression "puVar14 + 1" identifier + number_literal)) ;) (expression_statement "param_1[0xb] = lVar19;" (assignment_expression "param_1[0xb] = lVar19" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) = identifier) ;) (expression_statement "lVar5 = (long)puVar14 - (long)puVar15;" (assignment_expression "lVar5 = (long)puVar14 - (long)puVar15" identifier = (binary_expression "(long)puVar14 - (long)puVar15" (cast_expression "(long)puVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "param_1[10] = lVar5;" (assignment_expression "param_1[10] = lVar5" (subscript_expression "param_1[10]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);" (assignment_expression "puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5)" identifier = (cast_expression "(uint *)((long)puVar15 + lVar19 + lVar5)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)puVar15 + lVar19 + lVar5)" ( (binary_expression "(long)puVar15 + lVar19 + lVar5" (binary_expression "(long)puVar15 + lVar19" (cast_expression "(long)puVar15" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + identifier) )))) ;) (expression_statement "puVar12 = puVar14;" (assignment_expression "puVar12 = puVar14" identifier = identifier) ;) }) while (parenthesized_expression "(puVar10 <= puVar8)" ( (binary_expression "puVar10 <= puVar8" identifier <= identifier) )) ;) })) (expression_statement "FUN_00301e60(param_1);" (call_expression "FUN_00301e60(param_1)" identifier (argument_list "(param_1)" ( identifier ))) ;) })) (labeled_statement "LAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }" statement_identifier : (if_statement "if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }" if (parenthesized_expression "(local_d1 != '\0')" ( (binary_expression "local_d1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }" { (if_statement "if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }" if (parenthesized_expression "(param_1[8] != 0)" ( (binary_expression "param_1[8] != 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        thunk_FUN_00338a40();\n      }" { (expression_statement "thunk_FUN_00338a40();" (call_expression "thunk_FUN_00338a40()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" identifier [ number_literal ]) = number_literal) ;) }))) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) , (pointer_expression & IDENT) , (pointer_expression & IDENT) , LIT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + IDENT)) ;) (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 * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) , (subscript_expression IDENT [ LIT ]) ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) , (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) ))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) | (binary_expression (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) & LIT) )) >> LIT)) | (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) & LIT)) | (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) >> LIT) ))) & LIT))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) < (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) )) (break_statement break ;)) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (cast_expression ( (type_descriptor TYPE) ) (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) ))))) ;) (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 (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) )))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) != LIT) )) (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 * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) + LIT) ))))) )) (argument_list ( (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) ))) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + (subscript_expression IDENT [ LIT ])) + (subscript_expression IDENT [ LIT ])) ))) < (binary_expression (binary_expression IDENT + IDENT) + LIT)) )) (break_statement break ;)) (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 (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) (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) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT)) )))) ;) }) (else_clause else (compound_statement { (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 (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression (binary_expression IDENT >> LIT) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) >> LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) << LIT)) | (binary_expression IDENT << LIT))) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) + LIT)) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == LIT) )) || (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ))) )) || (parenthesized_expression ( (binary_expression IDENT != (subscript_expression IDENT [ LIT ])) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , (subscript_expression IDENT [ LIT ]) , IDENT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + (parenthesized_expression ( (binary_expression (unary_expression - (subscript_expression IDENT [ LIT ])) - (subscript_expression IDENT [ LIT ])) ))) , LIT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , IDENT , IDENT ))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) , IDENT , IDENT , IDENT , IDENT ))) ;) })) }))) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) <= IDENT) )) (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 (subscript_expression IDENT [ LIT ]) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + IDENT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) }))) })) (return_statement return ;) })))
(function_definition "void FUN_003067f0(long *param_1)\n\n{\n  uint uVar1;\n  code *pcVar2;\n  undefined8 uVar3;\n  int iVar4;\n  long lVar5;\n  long lVar6;\n  long *plVar7;\n  uint *puVar8;\n  ulong uVar9;\n  uint *puVar10;\n  ulong uVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  byte *pbVar16;\n  ulong uVar17;\n  byte *pbVar18;\n  long lVar19;\n  ulong local_e8;\n  ulong local_e0;\n  char local_d1;\n  long local_d0;\n  ulong local_c8 [6];\n  int *local_98;\n  long local_90;\n  \n  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);\n  param_1[8] = lVar5;\n  if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_003067f0(long *param_1)" (identifier "FUN_003067f0") (parameter_list "(long *param_1)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  uint uVar1;\n  code *pcVar2;\n  undefined8 uVar3;\n  int iVar4;\n  long lVar5;\n  long lVar6;\n  long *plVar7;\n  uint *puVar8;\n  ulong uVar9;\n  uint *puVar10;\n  ulong uVar11;\n  uint *puVar12;\n  uint uVar13;\n  uint *puVar14;\n  uint *puVar15;\n  byte *pbVar16;\n  ulong uVar17;\n  byte *pbVar18;\n  long lVar19;\n  ulong local_e8;\n  ulong local_e0;\n  char local_d1;\n  long local_d0;\n  ulong local_c8 [6];\n  int *local_98;\n  long local_90;\n  \n  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);\n  param_1[8] = lVar5;\n  if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }\n  return;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "code *pcVar2;" (type_identifier "code") (pointer_declarator "*pcVar2" (* "*") (identifier "pcVar2")) (; ";")) (declaration "undefined8 uVar3;" (type_identifier "undefined8") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "long lVar6;" (sized_type_specifier "long" (long "long")) (identifier "lVar6") (; ";")) (declaration "long *plVar7;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar7" (* "*") (identifier "plVar7")) (; ";")) (declaration "uint *puVar8;" (type_identifier "uint") (pointer_declarator "*puVar8" (* "*") (identifier "puVar8")) (; ";")) (declaration "ulong uVar9;" (type_identifier "ulong") (identifier "uVar9") (; ";")) (declaration "uint *puVar10;" (type_identifier "uint") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "ulong uVar11;" (type_identifier "ulong") (identifier "uVar11") (; ";")) (declaration "uint *puVar12;" (type_identifier "uint") (pointer_declarator "*puVar12" (* "*") (identifier "puVar12")) (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (declaration "uint *puVar14;" (type_identifier "uint") (pointer_declarator "*puVar14" (* "*") (identifier "puVar14")) (; ";")) (declaration "uint *puVar15;" (type_identifier "uint") (pointer_declarator "*puVar15" (* "*") (identifier "puVar15")) (; ";")) (declaration "byte *pbVar16;" (type_identifier "byte") (pointer_declarator "*pbVar16" (* "*") (identifier "pbVar16")) (; ";")) (declaration "ulong uVar17;" (type_identifier "ulong") (identifier "uVar17") (; ";")) (declaration "byte *pbVar18;" (type_identifier "byte") (pointer_declarator "*pbVar18" (* "*") (identifier "pbVar18")) (; ";")) (declaration "long lVar19;" (sized_type_specifier "long" (long "long")) (identifier "lVar19") (; ";")) (declaration "ulong local_e8;" (type_identifier "ulong") (identifier "local_e8") (; ";")) (declaration "ulong local_e0;" (type_identifier "ulong") (identifier "local_e0") (; ";")) (declaration "char local_d1;" (primitive_type "char") (identifier "local_d1") (; ";")) (declaration "long local_d0;" (sized_type_specifier "long" (long "long")) (identifier "local_d0") (; ";")) (declaration "ulong local_c8 [6];" (type_identifier "ulong") (array_declarator "local_c8 [6]" (identifier "local_c8") ([ "[") (number_literal "6") (] "]")) (; ";")) (declaration "int *local_98;" (primitive_type "int") (pointer_declarator "*local_98" (* "*") (identifier "local_98")) (; ";")) (declaration "long local_90;" (sized_type_specifier "long" (long "long")) (identifier "local_90") (; ";")) (expression_statement "lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);" (assignment_expression "lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0)" (identifier "lVar5") (= "=") (call_expression "FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0)" (identifier "FUN_0022a660") (argument_list "(param_1[2],(int)param_1[5],&local_d0,&local_d1,0)" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (cast_expression "(int)param_1[5]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (, ",") (pointer_expression "&local_d0" (& "&") (identifier "local_d0")) (, ",") (pointer_expression "&local_d1" (& "&") (identifier "local_d1")) (, ",") (number_literal "0") () ")")))) (; ";")) (expression_statement "param_1[8] = lVar5;" (assignment_expression "param_1[8] = lVar5" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (= "=") (identifier "lVar5")) (; ";")) (if_statement "if ((lVar5 != 0) && (local_d0 != 0)) {\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }" (if "if") (parenthesized_expression "((lVar5 != 0) && (local_d0 != 0))" (( "(") (binary_expression "(lVar5 != 0) && (local_d0 != 0)" (parenthesized_expression "(lVar5 != 0)" (( "(") (binary_expression "lVar5 != 0" (identifier "lVar5") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(local_d0 != 0)" (( "(") (binary_expression "local_d0 != 0" (identifier "local_d0") (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n    param_1[9] = lVar5 + local_d0;\n    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);\n    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);\n    lVar5 = *plVar7;\n    param_1[0x123] = (long)plVar7;\n    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);\n    puVar15 = (uint *)param_1[8];\n    puVar8 = (uint *)param_1[9];\n    iVar4 = *(int *)((long)param_1 + 0x34);\n    if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }\nLAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }\n  }" ({ "{") (expression_statement "param_1[9] = lVar5 + local_d0;" (assignment_expression "param_1[9] = lVar5 + local_d0" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (= "=") (binary_expression "lVar5 + local_d0" (identifier "lVar5") (+ "+") (identifier "local_d0"))) (; ";")) (expression_statement "lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);" (assignment_expression "lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5])" (identifier "lVar6") (= "=") (call_expression "(**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5])" (parenthesized_expression "(**(code **)(*(long *)param_1[2] + 0xd0))" (( "(") (pointer_expression "**(code **)(*(long *)param_1[2] + 0xd0)" (* "*") (pointer_expression "*(code **)(*(long *)param_1[2] + 0xd0)" (* "*") (cast_expression "(code **)(*(long *)param_1[2] + 0xd0)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)param_1[2] + 0xd0)" (( "(") (binary_expression "*(long *)param_1[2] + 0xd0" (pointer_expression "*(long *)param_1[2]" (* "*") (cast_expression "(long *)param_1[2]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) (+ "+") (number_literal "0xd0")) () ")"))))) () ")")) (argument_list "((long *)param_1[2],(int)param_1[5])" (( "(") (cast_expression "(long *)param_1[2]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]"))) (, ",") (cast_expression "(int)param_1[5]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) () ")")))) (; ";")) (expression_statement "plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);" (assignment_expression "plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4])" (identifier "plVar7") (= "=") (cast_expression "(long *)FUN_00301200(param_1[2],param_1[3],param_1[4])" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00301200(param_1[2],param_1[3],param_1[4])" (identifier "FUN_00301200") (argument_list "(param_1[2],param_1[3],param_1[4])" (( "(") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")) (, ",") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) () ")"))))) (; ";")) (expression_statement "lVar5 = *plVar7;" (assignment_expression "lVar5 = *plVar7" (identifier "lVar5") (= "=") (pointer_expression "*plVar7" (* "*") (identifier "plVar7"))) (; ";")) (expression_statement "param_1[0x123] = (long)plVar7;" (assignment_expression "param_1[0x123] = (long)plVar7" (subscript_expression "param_1[0x123]" (identifier "param_1") ([ "[") (number_literal "0x123") (] "]")) (= "=") (cast_expression "(long)plVar7" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar7"))) (; ";")) (expression_statement "(**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);" (call_expression "(**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6])" (parenthesized_expression "(**(code **)(lVar5 + 0x10))" (( "(") (pointer_expression "**(code **)(lVar5 + 0x10)" (* "*") (pointer_expression "*(code **)(lVar5 + 0x10)" (* "*") (cast_expression "(code **)(lVar5 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar5 + 0x10)" (( "(") (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) () ")"))))) () ")")) (argument_list "(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6])" (( "(") (identifier "plVar7") (, ",") (pointer_expression "*(undefined4 *)((long)param_1 + 0x2c)" (* "*") (cast_expression "(undefined4 *)((long)param_1 + 0x2c)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x2c)" (( "(") (binary_expression "(long)param_1 + 0x2c" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2c")) () ")")))) (, ",") (cast_expression "(int)param_1[6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) () ")"))) (; ";")) (expression_statement "puVar15 = (uint *)param_1[8];" (assignment_expression "puVar15 = (uint *)param_1[8]" (identifier "puVar15") (= "=") (cast_expression "(uint *)param_1[8]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")))) (; ";")) (expression_statement "puVar8 = (uint *)param_1[9];" (assignment_expression "puVar8 = (uint *)param_1[9]" (identifier "puVar8") (= "=") (cast_expression "(uint *)param_1[9]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")))) (; ";")) (expression_statement "iVar4 = *(int *)((long)param_1 + 0x34);" (assignment_expression "iVar4 = *(int *)((long)param_1 + 0x34)" (identifier "iVar4") (= "=") (pointer_expression "*(int *)((long)param_1 + 0x34)" (* "*") (cast_expression "(int *)((long)param_1 + 0x34)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x34)" (( "(") (binary_expression "(long)param_1 + 0x34" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x34")) () ")"))))) (; ";")) (if_statement "if (puVar15 < puVar8) {\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }" (if "if") (parenthesized_expression "(puVar15 < puVar8)" (( "(") (binary_expression "puVar15 < puVar8" (identifier "puVar15") (< "<") (identifier "puVar8")) () ")")) (compound_statement "{\n      puVar10 = puVar15 + 1;\n      param_1[10] = 0;\n      param_1[0xb] = (long)puVar8 - (long)puVar15;\n      if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }\n      FUN_00301e60(param_1);\n    }" ({ "{") (expression_statement "puVar10 = puVar15 + 1;" (assignment_expression "puVar10 = puVar15 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar15 + 1" (identifier "puVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_1[10] = 0;" (assignment_expression "param_1[10] = 0" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0xb] = (long)puVar8 - (long)puVar15;" (assignment_expression "param_1[0xb] = (long)puVar8 - (long)puVar15" (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]")) (= "=") (binary_expression "(long)puVar8 - (long)puVar15" (cast_expression "(long)puVar8" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar8")) (- "-") (cast_expression "(long)puVar15" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar15")))) (; ";")) (if_statement "if (puVar10 <= puVar8) {\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }" (if "if") (parenthesized_expression "(puVar10 <= puVar8)" (( "(") (binary_expression "puVar10 <= puVar8" (identifier "puVar10") (<= "<=") (identifier "puVar8")) () ")")) (compound_statement "{\n        lVar5 = 0;\n        puVar12 = puVar15;\n        do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);\n      }" ({ "{") (expression_statement "lVar5 = 0;" (assignment_expression "lVar5 = 0" (identifier "lVar5") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar12 = puVar15;" (assignment_expression "puVar12 = puVar15" (identifier "puVar12") (= "=") (identifier "puVar15")) (; ";")) (do_statement "do {\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        } while (puVar10 <= puVar8);" (do "do") (compound_statement "{\n          uVar13 = *puVar12;\n          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;\n          if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }\n          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);\n          if (puVar8 < puVar14) break;\n          uVar13 = *(uint *)(param_1 + 0xc);\n          uVar17 = (ulong)uVar13;\n          lVar19 = (long)puVar14 - (long)puVar12;\n          param_1[0xb] = lVar19;\n          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;\n          *(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));\n          if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }\n          uVar9 = uVar11;\n          if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }\n          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);\n          pbVar18 = pbVar16 + 1;\n          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;\n          if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }\n          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }\n          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);\n          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }\n          if (local_90 != 0) {\n            FUN_00338a40();\n          }\n          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;\n          puVar15 = (uint *)param_1[8];\n          lVar19 = param_1[9] - (long)puVar14;\n          puVar10 = puVar14 + 1;\n          param_1[0xb] = lVar19;\n          lVar5 = (long)puVar14 - (long)puVar15;\n          param_1[10] = lVar5;\n          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);\n          puVar12 = puVar14;\n        }" ({ "{") (expression_statement "uVar13 = *puVar12;" (assignment_expression "uVar13 = *puVar12" (identifier "uVar13") (= "=") (pointer_expression "*puVar12" (* "*") (identifier "puVar12"))) (; ";")) (expression_statement "uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18;" (assignment_expression "uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" (identifier "uVar13") (= "=") (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |\n                   uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" (identifier "uVar13") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" (( "(") (binary_expression "uVar13 & 0xff0000" (identifier "uVar13") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" (( "(") (binary_expression "uVar13 & 0xff00" (identifier "uVar13") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar13 << 0x18" (identifier "uVar13") (<< "<<") (number_literal "0x18")))) (; ";")) (if_statement "if (uVar13 == 0xffffffff) {\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }\n          else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }" (if "if") (parenthesized_expression "(uVar13 == 0xffffffff)" (( "(") (binary_expression "uVar13 == 0xffffffff" (identifier "uVar13") (== "==") (number_literal "0xffffffff")) () ")")) (compound_statement "{\n            puVar10 = puVar12 + 3;\n            if (puVar8 < puVar10) break;\n            uVar3 = *(undefined8 *)(puVar12 + 1);\n            *(undefined4 *)(param_1 + 0xc) = 8;\n            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;\n          }" ({ "{") (expression_statement "puVar10 = puVar12 + 3;" (assignment_expression "puVar10 = puVar12 + 3" (identifier "puVar10") (= "=") (binary_expression "puVar12 + 3" (identifier "puVar12") (+ "+") (number_literal "3"))) (; ";")) (if_statement "if (puVar8 < puVar10) break;" (if "if") (parenthesized_expression "(puVar8 < puVar10)" (( "(") (binary_expression "puVar8 < puVar10" (identifier "puVar8") (< "<") (identifier "puVar10")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar3 = *(undefined8 *)(puVar12 + 1);" (assignment_expression "uVar3 = *(undefined8 *)(puVar12 + 1)" (identifier "uVar3") (= "=") (pointer_expression "*(undefined8 *)(puVar12 + 1)" (* "*") (cast_expression "(undefined8 *)(puVar12 + 1)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar12 + 1)" (( "(") (binary_expression "puVar12 + 1" (identifier "puVar12") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "*(undefined4 *)(param_1 + 0xc) = 8;" (assignment_expression "*(undefined4 *)(param_1 + 0xc) = 8" (pointer_expression "*(undefined4 *)(param_1 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "8")) (; ";")) (expression_statement "uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000;" (assignment_expression "uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000" (identifier "uVar13") (= "=") (binary_expression "(uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |\n                     (uint)((ulong)uVar3 >> 8) & 0xff000000" (binary_expression "(uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |\n                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000" (binary_expression "(uint)(byte)((ulong)uVar3 >> 0x38) |\n                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8" (call_expression "(uint)(byte)((ulong)uVar3 >> 0x38)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(byte)" (( "(") (identifier "byte") () ")"))) (argument_list "((ulong)uVar3 >> 0x38)" (( "(") (binary_expression "(ulong)uVar3 >> 0x38" (cast_expression "(ulong)uVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar3")) (>> ">>") (number_literal "0x38")) () ")"))) (| "|") (binary_expression "((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8" (parenthesized_expression "((uint)((ulong)uVar3 >> 0x20) & 0xff0000)" (( "(") (binary_expression "(uint)((ulong)uVar3 >> 0x20) & 0xff0000" (call_expression "(uint)((ulong)uVar3 >> 0x20)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulong)uVar3 >> 0x20)" (( "(") (binary_expression "(ulong)uVar3 >> 0x20" (cast_expression "(ulong)uVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar3")) (>> ">>") (number_literal "0x20")) () ")"))) (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uint)((ulong)uVar3 >> 0x18) & 0xff0000" (call_expression "(uint)((ulong)uVar3 >> 0x18)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulong)uVar3 >> 0x18)" (( "(") (binary_expression "(ulong)uVar3 >> 0x18" (cast_expression "(ulong)uVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar3")) (>> ">>") (number_literal "0x18")) () ")"))) (& "&") (number_literal "0xff0000"))) (| "|") (binary_expression "(uint)((ulong)uVar3 >> 8) & 0xff000000" (call_expression "(uint)((ulong)uVar3 >> 8)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((ulong)uVar3 >> 8)" (( "(") (binary_expression "(ulong)uVar3 >> 8" (cast_expression "(ulong)uVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar3")) (>> ">>") (number_literal "8")) () ")"))) (& "&") (number_literal "0xff000000")))) (; ";")) (} "}")) (else_clause "else {\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }" (else "else") (compound_statement "{\n            *(undefined4 *)(param_1 + 0xc) = 4;\n          }" ({ "{") (expression_statement "*(undefined4 *)(param_1 + 0xc) = 4;" (assignment_expression "*(undefined4 *)(param_1 + 0xc) = 4" (pointer_expression "*(undefined4 *)(param_1 + 0xc)" (* "*") (cast_expression "(undefined4 *)(param_1 + 0xc)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")")))) (= "=") (number_literal "4")) (; ";")) (} "}")))) (expression_statement "puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);" (assignment_expression "puVar14 = (uint *)((ulong)uVar13 + (long)puVar10)" (identifier "puVar14") (= "=") (cast_expression "(uint *)((ulong)uVar13 + (long)puVar10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)uVar13 + (long)puVar10)" (( "(") (binary_expression "(ulong)uVar13 + (long)puVar10" (cast_expression "(ulong)uVar13" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar13")) (+ "+") (cast_expression "(long)puVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar10"))) () ")")))) (; ";")) (if_statement "if (puVar8 < puVar14) break;" (if "if") (parenthesized_expression "(puVar8 < puVar14)" (( "(") (binary_expression "puVar8 < puVar14" (identifier "puVar8") (< "<") (identifier "puVar14")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar13 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar13 = *(uint *)(param_1 + 0xc)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)(param_1 + 0xc)" (* "*") (cast_expression "(uint *)(param_1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "uVar17 = (ulong)uVar13;" (assignment_expression "uVar17 = (ulong)uVar13" (identifier "uVar17") (= "=") (cast_expression "(ulong)uVar13" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar13"))) (; ";")) (expression_statement "lVar19 = (long)puVar14 - (long)puVar12;" (assignment_expression "lVar19 = (long)puVar14 - (long)puVar12" (identifier "lVar19") (= "=") (binary_expression "(long)puVar14 - (long)puVar12" (cast_expression "(long)puVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar14")) (- "-") (cast_expression "(long)puVar12" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar12")))) (; ";")) (expression_statement "param_1[0xb] = lVar19;" (assignment_expression "param_1[0xb] = lVar19" (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]")) (= "=") (identifier "lVar19")) (; ";")) (if_statement "if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;" (if "if") (parenthesized_expression "((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3))" (( "(") (binary_expression "(undefined1 *)(lVar19 + lVar5 + (long)puVar15) <\n              (undefined1 *)((long)puVar10 + uVar17 + 3)" (cast_expression "(undefined1 *)(lVar19 + lVar5 + (long)puVar15)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar19 + lVar5 + (long)puVar15)" (( "(") (binary_expression "lVar19 + lVar5 + (long)puVar15" (binary_expression "lVar19 + lVar5" (identifier "lVar19") (+ "+") (identifier "lVar5")) (+ "+") (cast_expression "(long)puVar15" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar15"))) () ")"))) (< "<") (cast_expression "(undefined1 *)((long)puVar10 + uVar17 + 3)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar10 + uVar17 + 3)" (( "(") (binary_expression "(long)puVar10 + uVar17 + 3" (binary_expression "(long)puVar10 + uVar17" (cast_expression "(long)puVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar10")) (+ "+") (identifier "uVar17")) (+ "+") (number_literal "3")) () ")")))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "*(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));" (assignment_expression "*(uint *)(param_1 + 0xd) =\n               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" (pointer_expression "*(uint *)(param_1 + 0xd)" (* "*") (cast_expression "(uint *)(param_1 + 0xd)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xd)" (( "(") (binary_expression "param_1 + 0xd" (identifier "param_1") (+ "+") (number_literal "0xd")) () ")")))) (= "=") (cast_expression "(uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (call_expression "CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" (identifier "CONCAT11") (argument_list "((char)*puVar10,*(undefined1 *)((long)puVar10 + 1))" (( "(") (cast_expression "(char)*puVar10" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (pointer_expression "*puVar10" (* "*") (identifier "puVar10"))) (, ",") (pointer_expression "*(undefined1 *)((long)puVar10 + 1)" (* "*") (cast_expression "(undefined1 *)((long)puVar10 + 1)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar10 + 1)" (( "(") (binary_expression "(long)puVar10 + 1" (cast_expression "(long)puVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar10")) (+ "+") (number_literal "1")) () ")")))) () ")"))))) (; ";")) (if_statement "if (uVar13 == 4) {\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }\n          else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }" (if "if") (parenthesized_expression "(uVar13 == 4)" (( "(") (binary_expression "uVar13 == 4" (identifier "uVar13") (== "==") (number_literal "4")) () ")")) (compound_statement "{\n            uVar1 = *(uint *)((long)puVar10 + 2);\n            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);\n          }" ({ "{") (expression_statement "uVar1 = *(uint *)((long)puVar10 + 2);" (assignment_expression "uVar1 = *(uint *)((long)puVar10 + 2)" (identifier "uVar1") (= "=") (pointer_expression "*(uint *)((long)puVar10 + 2)" (* "*") (cast_expression "(uint *)((long)puVar10 + 2)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar10 + 2)" (( "(") (binary_expression "(long)puVar10 + 2" (cast_expression "(long)puVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar10")) (+ "+") (number_literal "2")) () ")"))))) (; ";")) (expression_statement "uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18);" (assignment_expression "uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18)" (identifier "uVar11") (= "=") (call_expression "(ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18)" (( "(") (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |\n                            uVar1 << 0x18" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8" (binary_expression "uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8" (binary_expression "uVar1 >> 0x18" (identifier "uVar1") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar1 & 0xff0000) >> 8" (parenthesized_expression "(uVar1 & 0xff0000)" (( "(") (binary_expression "uVar1 & 0xff0000" (identifier "uVar1") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar1 & 0xff00) << 8" (parenthesized_expression "(uVar1 & 0xff00)" (( "(") (binary_expression "uVar1 & 0xff00" (identifier "uVar1") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar1 << 0x18" (identifier "uVar1") (<< "<<") (number_literal "0x18"))) () ")")))) (; ";")) (} "}")) (else_clause "else {\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }" (else "else") (compound_statement "{\n            uVar11 = *(ulong *)((long)puVar10 + 2);\n            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n          }" ({ "{") (expression_statement "uVar11 = *(ulong *)((long)puVar10 + 2);" (assignment_expression "uVar11 = *(ulong *)((long)puVar10 + 2)" (identifier "uVar11") (= "=") (pointer_expression "*(ulong *)((long)puVar10 + 2)" (* "*") (cast_expression "(ulong *)((long)puVar10 + 2)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar10 + 2)" (( "(") (binary_expression "(long)puVar10 + 2" (cast_expression "(long)puVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar10")) (+ "+") (number_literal "2")) () ")"))))) (; ";")) (expression_statement "uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;" (assignment_expression "uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (identifier "uVar11") (= "=") (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                     (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                     (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                     (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" (identifier "uVar11") (>> ">>") (number_literal "0x38")) (| "|") (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" (( "(") (binary_expression "uVar11 & 0xff000000000000" (identifier "uVar11") (& "&") (number_literal "0xff000000000000")) () ")")) (>> ">>") (number_literal "0x28"))) (| "|") (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" (( "(") (binary_expression "uVar11 & 0xff0000000000" (identifier "uVar11") (& "&") (number_literal "0xff0000000000")) () ")")) (>> ">>") (number_literal "0x18"))) (| "|") (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" (( "(") (binary_expression "uVar11 & 0xff00000000" (identifier "uVar11") (& "&") (number_literal "0xff00000000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" (( "(") (binary_expression "uVar11 & 0xff000000" (identifier "uVar11") (& "&") (number_literal "0xff000000")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" (( "(") (binary_expression "uVar11 & 0xff0000" (identifier "uVar11") (& "&") (number_literal "0xff0000")) () ")")) (<< "<<") (number_literal "0x18"))) (| "|") (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" (( "(") (binary_expression "uVar11 & 0xff00" (identifier "uVar11") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "0x28"))) (| "|") (binary_expression "uVar11 << 0x38" (identifier "uVar11") (<< "<<") (number_literal "0x38")))) (; ";")) (} "}")))) (expression_statement "uVar9 = uVar11;" (assignment_expression "uVar9 = uVar11" (identifier "uVar9") (= "=") (identifier "uVar11")) (; ";")) (if_statement "if (*(int *)((long)param_1 + 0x2c) != 0) {\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }" (if "if") (parenthesized_expression "(*(int *)((long)param_1 + 0x2c) != 0)" (( "(") (binary_expression "*(int *)((long)param_1 + 0x2c) != 0" (pointer_expression "*(int *)((long)param_1 + 0x2c)" (* "*") (cast_expression "(int *)((long)param_1 + 0x2c)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x2c)" (( "(") (binary_expression "(long)param_1 + 0x2c" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x2c")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);\n            if (iVar4 == 0) {\n              return;\n            }\n            uVar9 = local_c8[0];\n            if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }\n            uVar13 = *(uint *)(param_1 + 0xc);\n            uVar17 = (ulong)uVar13;\n          }" ({ "{") (expression_statement "iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);" (assignment_expression "iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8)" (identifier "iVar4") (= "=") (call_expression "(**(code **)(*(long *)param_1[0x123] + 0x28))\n                              ((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8)" (parenthesized_expression "(**(code **)(*(long *)param_1[0x123] + 0x28))" (( "(") (pointer_expression "**(code **)(*(long *)param_1[0x123] + 0x28)" (* "*") (pointer_expression "*(code **)(*(long *)param_1[0x123] + 0x28)" (* "*") (cast_expression "(code **)(*(long *)param_1[0x123] + 0x28)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)param_1[0x123] + 0x28)" (( "(") (binary_expression "*(long *)param_1[0x123] + 0x28" (pointer_expression "*(long *)param_1[0x123]" (* "*") (cast_expression "(long *)param_1[0x123]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x123]" (identifier "param_1") ([ "[") (number_literal "0x123") (] "]")))) (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (argument_list "((long *)param_1[0x123],\n                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8)" (( "(") (cast_expression "(long *)param_1[0x123]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x123]" (identifier "param_1") ([ "[") (number_literal "0x123") (] "]"))) (, ",") (cast_expression "(undefined1 *)((long)puVar10 + (2 - (long)puVar15))" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar10 + (2 - (long)puVar15))" (( "(") (binary_expression "(long)puVar10 + (2 - (long)puVar15)" (cast_expression "(long)puVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar10")) (+ "+") (parenthesized_expression "(2 - (long)puVar15)" (( "(") (binary_expression "2 - (long)puVar15" (number_literal "2") (- "-") (cast_expression "(long)puVar15" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar15"))) () ")"))) () ")"))) (, ",") (identifier "local_c8") () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n              return;\n            }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              return;\n            }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "uVar9 = local_c8[0];" (assignment_expression "uVar9 = local_c8[0]" (identifier "uVar9") (= "=") (subscript_expression "local_c8[0]" (identifier "local_c8") ([ "[") (number_literal "0") (] "]"))) (; ";")) (if_statement "if ((int)param_1[6] == 9) {\n              uVar9 = local_c8[0] + uVar11;\n            }" (if "if") (parenthesized_expression "((int)param_1[6] == 9)" (( "(") (binary_expression "(int)param_1[6] == 9" (cast_expression "(int)param_1[6]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (== "==") (number_literal "9")) () ")")) (compound_statement "{\n              uVar9 = local_c8[0] + uVar11;\n            }" ({ "{") (expression_statement "uVar9 = local_c8[0] + uVar11;" (assignment_expression "uVar9 = local_c8[0] + uVar11" (identifier "uVar9") (= "=") (binary_expression "local_c8[0] + uVar11" (subscript_expression "local_c8[0]" (identifier "local_c8") ([ "[") (number_literal "0") (] "]")) (+ "+") (identifier "uVar11"))) (; ";")) (} "}"))) (expression_statement "uVar13 = *(uint *)(param_1 + 0xc);" (assignment_expression "uVar13 = *(uint *)(param_1 + 0xc)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)(param_1 + 0xc)" (* "*") (cast_expression "(uint *)(param_1 + 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0xc)" (( "(") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc")) () ")"))))) (; ";")) (expression_statement "uVar17 = (ulong)uVar13;" (assignment_expression "uVar17 = (ulong)uVar13" (identifier "uVar17") (= "=") (cast_expression "(ulong)uVar13" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar13"))) (; ";")) (} "}"))) (expression_statement "pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);" (assignment_expression "pbVar16 = (byte *)((long)puVar10 + uVar17 + 2)" (identifier "pbVar16") (= "=") (cast_expression "(byte *)((long)puVar10 + uVar17 + 2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar10 + uVar17 + 2)" (( "(") (binary_expression "(long)puVar10 + uVar17 + 2" (binary_expression "(long)puVar10 + uVar17" (cast_expression "(long)puVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar10")) (+ "+") (identifier "uVar17")) (+ "+") (number_literal "2")) () ")")))) (; ";")) (expression_statement "pbVar18 = pbVar16 + 1;" (assignment_expression "pbVar18 = pbVar16 + 1" (identifier "pbVar18") (= "=") (binary_expression "pbVar16 + 1" (identifier "pbVar16") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(uint *)((long)param_1 + 100) = (uint)*pbVar16;" (assignment_expression "*(uint *)((long)param_1 + 100) = (uint)*pbVar16" (pointer_expression "*(uint *)((long)param_1 + 100)" (* "*") (cast_expression "(uint *)((long)param_1 + 100)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 100)" (( "(") (binary_expression "(long)param_1 + 100" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "100")) () ")")))) (= "=") (binary_expression "(uint)*pbVar16" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "pbVar16"))) (; ";")) (if_statement "if ((char)param_1[1] == '\0') {\n            local_e0 = 0;\n            local_e8 = 0;\n          }\n          else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }" (if "if") (parenthesized_expression "((char)param_1[1] == '\0')" (( "(") (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n            local_e0 = 0;\n            local_e8 = 0;\n          }" ({ "{") (expression_statement "local_e0 = 0;" (assignment_expression "local_e0 = 0" (identifier "local_e0") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_e8 = 0;" (assignment_expression "local_e8 = 0" (identifier "local_e8") (= "=") (number_literal "0")) (; ";")) (} "}")) (else_clause "else {\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }" (else "else") (compound_statement "{\n            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;\n            uVar11 = *(ulong *)(pbVar16 + 1);\n            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }\n            pbVar18 = pbVar16 + uVar17 + 9;\n          }" ({ "{") (if_statement "if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;" (if "if") (parenthesized_expression "((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9)" (( "(") (binary_expression "(byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9" (cast_expression "(byte *)(param_1[0xb] + param_1[10] + param_1[8])" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0xb] + param_1[10] + param_1[8])" (( "(") (binary_expression "param_1[0xb] + param_1[10] + param_1[8]" (binary_expression "param_1[0xb] + param_1[10]" (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]")) (+ "+") (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]"))) (+ "+") (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]"))) () ")"))) (< "<") (binary_expression "pbVar16 + uVar17 + 9" (binary_expression "pbVar16 + uVar17" (identifier "pbVar16") (+ "+") (identifier "uVar17")) (+ "+") (number_literal "9"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar11 = *(ulong *)(pbVar16 + 1);" (assignment_expression "uVar11 = *(ulong *)(pbVar16 + 1)" (identifier "uVar11") (= "=") (pointer_expression "*(ulong *)(pbVar16 + 1)" (* "*") (cast_expression "(ulong *)(pbVar16 + 1)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pbVar16 + 1)" (( "(") (binary_expression "pbVar16 + 1" (identifier "pbVar16") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;" (assignment_expression "local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (identifier "local_e8") (= "=") (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                       (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                       (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                       (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" (identifier "uVar11") (>> ">>") (number_literal "0x38")) (| "|") (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" (( "(") (binary_expression "uVar11 & 0xff000000000000" (identifier "uVar11") (& "&") (number_literal "0xff000000000000")) () ")")) (>> ">>") (number_literal "0x28"))) (| "|") (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" (( "(") (binary_expression "uVar11 & 0xff0000000000" (identifier "uVar11") (& "&") (number_literal "0xff0000000000")) () ")")) (>> ">>") (number_literal "0x18"))) (| "|") (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" (( "(") (binary_expression "uVar11 & 0xff00000000" (identifier "uVar11") (& "&") (number_literal "0xff00000000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" (( "(") (binary_expression "uVar11 & 0xff000000" (identifier "uVar11") (& "&") (number_literal "0xff000000")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" (( "(") (binary_expression "uVar11 & 0xff0000" (identifier "uVar11") (& "&") (number_literal "0xff0000")) () ")")) (<< "<<") (number_literal "0x18"))) (| "|") (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" (( "(") (binary_expression "uVar11 & 0xff00" (identifier "uVar11") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "0x28"))) (| "|") (binary_expression "uVar11 << 0x38" (identifier "uVar11") (<< "<<") (number_literal "0x38")))) (; ";")) (if_statement "if (uVar13 == 4) {\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }\n            else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }" (if "if") (parenthesized_expression "(uVar13 == 4)" (( "(") (binary_expression "uVar13 == 4" (identifier "uVar13") (== "==") (number_literal "4")) () ")")) (compound_statement "{\n              uVar13 = *(uint *)(pbVar16 + 9);\n              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);\n            }" ({ "{") (expression_statement "uVar13 = *(uint *)(pbVar16 + 9);" (assignment_expression "uVar13 = *(uint *)(pbVar16 + 9)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)(pbVar16 + 9)" (* "*") (cast_expression "(uint *)(pbVar16 + 9)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pbVar16 + 9)" (( "(") (binary_expression "pbVar16 + 9" (identifier "pbVar16") (+ "+") (number_literal "9")) () ")"))))) (; ";")) (expression_statement "local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18);" (assignment_expression "local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" (identifier "local_e0") (= "=") (call_expression "(ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18)" (( "(") (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8\n                                | uVar13 << 0x18" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8" (binary_expression "uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8" (binary_expression "uVar13 >> 0x18" (identifier "uVar13") (>> ">>") (number_literal "0x18")) (| "|") (binary_expression "(uVar13 & 0xff0000) >> 8" (parenthesized_expression "(uVar13 & 0xff0000)" (( "(") (binary_expression "uVar13 & 0xff0000" (identifier "uVar13") (& "&") (number_literal "0xff0000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar13 & 0xff00) << 8" (parenthesized_expression "(uVar13 & 0xff00)" (( "(") (binary_expression "uVar13 & 0xff00" (identifier "uVar13") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "uVar13 << 0x18" (identifier "uVar13") (<< "<<") (number_literal "0x18"))) () ")")))) (; ";")) (} "}")) (else_clause "else {\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }" (else "else") (compound_statement "{\n              uVar11 = *(ulong *)(pbVar16 + 9);\n              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;\n            }" ({ "{") (expression_statement "uVar11 = *(ulong *)(pbVar16 + 9);" (assignment_expression "uVar11 = *(ulong *)(pbVar16 + 9)" (identifier "uVar11") (= "=") (pointer_expression "*(ulong *)(pbVar16 + 9)" (* "*") (cast_expression "(ulong *)(pbVar16 + 9)" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pbVar16 + 9)" (( "(") (binary_expression "pbVar16 + 9" (identifier "pbVar16") (+ "+") (number_literal "9")) () ")"))))) (; ";")) (expression_statement "local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;" (assignment_expression "local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (identifier "local_e0") (= "=") (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |\n                         (uVar11 & 0xff00) << 0x28" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |\n                         (uVar11 & 0xff000000) << 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |\n                         (uVar11 & 0xff0000000000) >> 0x18" (binary_expression "uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28" (binary_expression "uVar11 >> 0x38" (identifier "uVar11") (>> ">>") (number_literal "0x38")) (| "|") (binary_expression "(uVar11 & 0xff000000000000) >> 0x28" (parenthesized_expression "(uVar11 & 0xff000000000000)" (( "(") (binary_expression "uVar11 & 0xff000000000000" (identifier "uVar11") (& "&") (number_literal "0xff000000000000")) () ")")) (>> ">>") (number_literal "0x28"))) (| "|") (binary_expression "(uVar11 & 0xff0000000000) >> 0x18" (parenthesized_expression "(uVar11 & 0xff0000000000)" (( "(") (binary_expression "uVar11 & 0xff0000000000" (identifier "uVar11") (& "&") (number_literal "0xff0000000000")) () ")")) (>> ">>") (number_literal "0x18"))) (| "|") (binary_expression "(uVar11 & 0xff00000000) >> 8" (parenthesized_expression "(uVar11 & 0xff00000000)" (( "(") (binary_expression "uVar11 & 0xff00000000" (identifier "uVar11") (& "&") (number_literal "0xff00000000")) () ")")) (>> ">>") (number_literal "8"))) (| "|") (binary_expression "(uVar11 & 0xff000000) << 8" (parenthesized_expression "(uVar11 & 0xff000000)" (( "(") (binary_expression "uVar11 & 0xff000000" (identifier "uVar11") (& "&") (number_literal "0xff000000")) () ")")) (<< "<<") (number_literal "8"))) (| "|") (binary_expression "(uVar11 & 0xff0000) << 0x18" (parenthesized_expression "(uVar11 & 0xff0000)" (( "(") (binary_expression "uVar11 & 0xff0000" (identifier "uVar11") (& "&") (number_literal "0xff0000")) () ")")) (<< "<<") (number_literal "0x18"))) (| "|") (binary_expression "(uVar11 & 0xff00) << 0x28" (parenthesized_expression "(uVar11 & 0xff00)" (( "(") (binary_expression "uVar11 & 0xff00" (identifier "uVar11") (& "&") (number_literal "0xff00")) () ")")) (<< "<<") (number_literal "0x28"))) (| "|") (binary_expression "uVar11 << 0x38" (identifier "uVar11") (<< "<<") (number_literal "0x38")))) (; ";")) (} "}")))) (expression_statement "pbVar18 = pbVar16 + uVar17 + 9;" (assignment_expression "pbVar18 = pbVar16 + uVar17 + 9" (identifier "pbVar18") (= "=") (binary_expression "pbVar16 + uVar17 + 9" (binary_expression "pbVar16 + uVar17" (identifier "pbVar16") (+ "+") (identifier "uVar17")) (+ "+") (number_literal "9"))) (; ";")) (} "}")))) (if_statement "if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))\n          {\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }" (if "if") (parenthesized_expression "((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))" (( "(") (binary_expression "(((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf])" (parenthesized_expression "(((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe]))" (( "(") (binary_expression "((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])" (parenthesized_expression "((int)param_1[0xe] == 0)" (( "(") (binary_expression "(int)param_1[0xe] == 0" (cast_expression "(int)param_1[0xe]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]"))) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(iVar4 != (int)param_1[0xe])" (( "(") (binary_expression "iVar4 != (int)param_1[0xe]" (identifier "iVar4") (!= "!=") (cast_expression "(int)param_1[0xe]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")))) () ")"))) () ")")) (|| "||") (parenthesized_expression "(uVar9 != param_1[0xf])" (( "(") (binary_expression "uVar9 != param_1[0xf]" (identifier "uVar9") (!= "!=") (subscript_expression "param_1[0xf]" (identifier "param_1") ([ "[") (number_literal "0xf") (] "]"))) () ")"))) () ")")) (compound_statement "{\n            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);\n          }" ({ "{") (expression_statement "FUN_00302430(param_1 + 0xe,param_1[2],iVar4);" (call_expression "FUN_00302430(param_1 + 0xe,param_1[2],iVar4)" (identifier "FUN_00302430") (argument_list "(param_1 + 0xe,param_1[2],iVar4)" (( "(") (binary_expression "param_1 + 0xe" (identifier "param_1") (+ "+") (number_literal "0xe")) (, ",") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (, ",") (identifier "iVar4") () ")"))) (; ";")) (} "}"))) (expression_statement "FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);" (call_expression "FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0)" (identifier "FUN_00303d40") (argument_list "(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0)" (( "(") (identifier "local_c8") (, ",") (identifier "param_1") (, ",") (binary_expression "pbVar18 + (-param_1[10] - param_1[8])" (identifier "pbVar18") (+ "+") (parenthesized_expression "(-param_1[10] - param_1[8])" (( "(") (binary_expression "-param_1[10] - param_1[8]" (unary_expression "-param_1[10]" (- "-") (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]"))) (- "-") (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]"))) () ")"))) (, ",") (number_literal "0") () ")"))) (; ";")) (if_statement "if ((local_98 != (int *)0x0) && (*local_98 != 0)) {\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }" (if "if") (parenthesized_expression "((local_98 != (int *)0x0) && (*local_98 != 0))" (( "(") (binary_expression "(local_98 != (int *)0x0) && (*local_98 != 0)" (parenthesized_expression "(local_98 != (int *)0x0)" (( "(") (binary_expression "local_98 != (int *)0x0" (identifier "local_98") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(*local_98 != 0)" (( "(") (binary_expression "*local_98 != 0" (pointer_expression "*local_98" (* "*") (identifier "local_98")) (!= "!=") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n            if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }\n          }" ({ "{") (if_statement "if ((char)param_1[1] == '\0') {\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }\n            else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }" (if "if") (parenthesized_expression "((char)param_1[1] == '\0')" (( "(") (binary_expression "(char)param_1[1] == '\0'" (cast_expression "(char)param_1[1]" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n              pcVar2 = *(code **)(*param_1 + 0x10);\n              if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }\n            }" ({ "{") (expression_statement "pcVar2 = *(code **)(*param_1 + 0x10);" (assignment_expression "pcVar2 = *(code **)(*param_1 + 0x10)" (identifier "pcVar2") (= "=") (pointer_expression "*(code **)(*param_1 + 0x10)" (* "*") (cast_expression "(code **)(*param_1 + 0x10)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")"))))) (; ";")) (if_statement "if (pcVar2 != FUN_00301070) {\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }" (if "if") (parenthesized_expression "(pcVar2 != FUN_00301070)" (( "(") (binary_expression "pcVar2 != FUN_00301070" (identifier "pcVar2") (!= "!=") (identifier "FUN_00301070")) () ")")) (compound_statement "{\n                    \n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);\n              }" ({ "{") (expression_statement "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);" (call_expression "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8)" (parenthesized_expression "(*pcVar2)" (( "(") (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) () ")")) (argument_list "(param_1,param_1[10] + lVar6,lVar19,local_c8)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_1[10] + lVar6" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (+ "+") (identifier "lVar6")) (, ",") (identifier "lVar19") (, ",") (identifier "local_c8") () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }" (else "else") (compound_statement "{\n              pcVar2 = *(code **)(*param_1 + 0x18);\n              if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }\n            }" ({ "{") (expression_statement "pcVar2 = *(code **)(*param_1 + 0x18);" (assignment_expression "pcVar2 = *(code **)(*param_1 + 0x18)" (identifier "pcVar2") (= "=") (pointer_expression "*(code **)(*param_1 + 0x18)" (* "*") (cast_expression "(code **)(*param_1 + 0x18)" (( "(") (type_descriptor "code **" (type_identifier "code") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*param_1 + 0x18)" (( "(") (binary_expression "*param_1 + 0x18" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x18")) () ")"))))) (; ";")) (if_statement "if (pcVar2 != FUN_00301080) {\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }" (if "if") (parenthesized_expression "(pcVar2 != FUN_00301080)" (( "(") (binary_expression "pcVar2 != FUN_00301080" (identifier "pcVar2") (!= "!=") (identifier "FUN_00301080")) () ")")) (compound_statement "{\n                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);\n              }" ({ "{") (expression_statement "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);" (call_expression "(*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8)" (parenthesized_expression "(*pcVar2)" (( "(") (pointer_expression "*pcVar2" (* "*") (identifier "pcVar2")) () ")")) (argument_list "(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_1[10] + lVar6" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (+ "+") (identifier "lVar6")) (, ",") (identifier "lVar19") (, ",") (identifier "local_e0") (, ",") (identifier "local_e8") (, ",") (identifier "local_c8") () ")"))) (; ";")) (} "}"))) (} "}")))) (} "}"))) (if_statement "if (local_90 != 0) {\n            FUN_00338a40();\n          }" (if "if") (parenthesized_expression "(local_90 != 0)" (( "(") (binary_expression "local_90 != 0" (identifier "local_90") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            FUN_00338a40();\n          }" ({ "{") (expression_statement "FUN_00338a40();" (call_expression "FUN_00338a40()" (identifier "FUN_00338a40") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (if_statement "if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;" (if "if") (parenthesized_expression "((uint *)param_1[9] <= puVar14)" (( "(") (binary_expression "(uint *)param_1[9] <= puVar14" (cast_expression "(uint *)param_1[9]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]"))) (<= "<=") (identifier "puVar14")) () ")")) (goto_statement "goto LAB_00306aa8;" (goto "goto") (statement_identifier "LAB_00306aa8") (; ";"))) (expression_statement "puVar15 = (uint *)param_1[8];" (assignment_expression "puVar15 = (uint *)param_1[8]" (identifier "puVar15") (= "=") (cast_expression "(uint *)param_1[8]" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")))) (; ";")) (expression_statement "lVar19 = param_1[9] - (long)puVar14;" (assignment_expression "lVar19 = param_1[9] - (long)puVar14" (identifier "lVar19") (= "=") (binary_expression "param_1[9] - (long)puVar14" (subscript_expression "param_1[9]" (identifier "param_1") ([ "[") (number_literal "9") (] "]")) (- "-") (cast_expression "(long)puVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar14")))) (; ";")) (expression_statement "puVar10 = puVar14 + 1;" (assignment_expression "puVar10 = puVar14 + 1" (identifier "puVar10") (= "=") (binary_expression "puVar14 + 1" (identifier "puVar14") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_1[0xb] = lVar19;" (assignment_expression "param_1[0xb] = lVar19" (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]")) (= "=") (identifier "lVar19")) (; ";")) (expression_statement "lVar5 = (long)puVar14 - (long)puVar15;" (assignment_expression "lVar5 = (long)puVar14 - (long)puVar15" (identifier "lVar5") (= "=") (binary_expression "(long)puVar14 - (long)puVar15" (cast_expression "(long)puVar14" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar14")) (- "-") (cast_expression "(long)puVar15" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar15")))) (; ";")) (expression_statement "param_1[10] = lVar5;" (assignment_expression "param_1[10] = lVar5" (subscript_expression "param_1[10]" (identifier "param_1") ([ "[") (number_literal "10") (] "]")) (= "=") (identifier "lVar5")) (; ";")) (expression_statement "puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);" (assignment_expression "puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5)" (identifier "puVar8") (= "=") (cast_expression "(uint *)((long)puVar15 + lVar19 + lVar5)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)puVar15 + lVar19 + lVar5)" (( "(") (binary_expression "(long)puVar15 + lVar19 + lVar5" (binary_expression "(long)puVar15 + lVar19" (cast_expression "(long)puVar15" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "puVar15")) (+ "+") (identifier "lVar19")) (+ "+") (identifier "lVar5")) () ")")))) (; ";")) (expression_statement "puVar12 = puVar14;" (assignment_expression "puVar12 = puVar14" (identifier "puVar12") (= "=") (identifier "puVar14")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar10 <= puVar8)" (( "(") (binary_expression "puVar10 <= puVar8" (identifier "puVar10") (<= "<=") (identifier "puVar8")) () ")")) (; ";")) (} "}"))) (expression_statement "FUN_00301e60(param_1);" (call_expression "FUN_00301e60(param_1)" (identifier "FUN_00301e60") (argument_list "(param_1)" (( "(") (identifier "param_1") () ")"))) (; ";")) (} "}"))) (labeled_statement "LAB_00306aa8:\n    if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }" (statement_identifier "LAB_00306aa8") (: ":") (if_statement "if (local_d1 != '\0') {\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }" (if "if") (parenthesized_expression "(local_d1 != '\0')" (( "(") (binary_expression "local_d1 != '\0'" (identifier "local_d1") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }\n      param_1[8] = 0;\n    }" ({ "{") (if_statement "if (param_1[8] != 0) {\n        thunk_FUN_00338a40();\n      }" (if "if") (parenthesized_expression "(param_1[8] != 0)" (( "(") (binary_expression "param_1[8] != 0" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        thunk_FUN_00338a40();\n      }" ({ "{") (expression_statement "thunk_FUN_00338a40();" (call_expression "thunk_FUN_00338a40()" (identifier "thunk_FUN_00338a40") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "param_1[8] = 0;" (assignment_expression "param_1[8] = 0" (subscript_expression "param_1[8]" (identifier "param_1") ([ "[") (number_literal "8") (] "]")) (= "=") (number_literal "0")) (; ";")) (} "}")))) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void do_parse<true>(Dwarf_info_reader * this) */

void __thiscall var_29::type_8::do_parse<true>(type_8 *this)

{
  type_1 var_15;
  type_2 **pp_Var2;
  type_3 var_16;
  type_2 *var_23;
  type_4 uVar5;
  int iVar6;
  type_1 var_17;
  type_5 *var_2;
  type_6 extraout_var;
  type_7 *pEVar8;
  type_1 *var_6;
  type_8 *var_19;
  type_1 *var_7;
  type_8 *pDVar11;
  type_1 *var_9;
  type_1 var_8;
  type_1 *var_10;
  type_1 *var_5;
  long var_12;
  type_9 *var_18;
  type_3 var_13;
  type_9 *var_21;
  long var_11;
  type_3 local_e8;
  type_3 local_e0;
  bool var_31;
  type_10 var_3;
  type_11 root_die;
  
  var_2 = Object::var_1
                     (&this->object_->super_Object,this->shndx_,&var_3,&var_31,
                      (uint64_t *)0x0);
  this->buffer_ = var_2;
  if ((var_2 != (type_5 *)0x0) && (var_3 != 0)) {
    this->buffer_end_ = var_2 + var_3;
    iVar6 = (*(this->object_->super_Object)._vptr_Object[0x1a])(this->object_,(type_3)this->shndx_);
    pEVar8 = var_4(this->object_,this->symtab_,this->symtab_size_);
    pp_Var2 = pEVar8->_vptr_Elf_reloc_mapper;
    this->reloc_mapper_ = pEVar8;
    (*pp_Var2[2])(pEVar8,(type_3)this->reloc_shndx_,(type_3)this->reloc_type_);
    var_5 = (type_1 *)this->buffer_;
    var_6 = (type_1 *)this->buffer_end_;
    var_17 = this->abbrev_shndx_;
    if (var_5 < var_6) {
      var_7 = var_5 + 1;
      this->cu_offset_ = 0;
      this->cu_length_ = (long)var_6 - (long)var_5;
      if (var_7 <= var_6) {
        var_12 = 0;
        var_9 = var_5;
        do {
          var_8 = *var_9;
          var_8 = var_8 >> 0x18 | (var_8 & 0xff0000) >> 8 | (var_8 & 0xff00) << 8 |
                   var_8 << 0x18;
          if (var_8 == 0xffffffff) {
            var_7 = var_9 + 3;
            if (var_6 < var_7) break;
            uVar5 = *(type_4 *)(var_9 + 1);
            this->offset_size_ = 8;
            var_8 = (type_1)(type_9)((type_3)uVar5 >> 0x38) |
                     ((type_1)((type_3)uVar5 >> 0x20) & 0xff0000) >> 8 |
                     (type_1)((type_3)uVar5 >> 0x18) & 0xff0000 |
                     (type_1)((type_3)uVar5 >> 8) & 0xff000000;
          }
          else {
            this->offset_size_ = 4;
          }
          var_10 = (type_1 *)((type_3)var_8 + (long)var_7);
          if (var_6 < var_10) break;
          var_8 = this->offset_size_;
          var_13 = (type_3)var_8;
          var_11 = (long)var_10 - (long)var_9;
          this->cu_length_ = var_11;
          if ((type_12 *)(var_11 + var_12 + (long)var_5) <
              (type_12 *)((long)var_7 + var_13 + 3)) break;
          this->cu_version_ = (type_1)var_14((char)*var_7,*(type_12 *)((long)var_7 + 1));
          if (var_8 == 4) {
            var_15 = *(type_1 *)((long)var_7 + 2);
            pDVar11 = (type_8 *)
                      (type_3)(var_15 >> 0x18 | (var_15 & 0xff0000) >> 8 | (var_15 & 0xff00) << 8 |
                             var_15 << 0x18);
          }
          else {
            var_16 = *(type_3 *)((long)var_7 + 2);
            pDVar11 = (type_8 *)
                      (var_16 >> 0x38 | (var_16 & 0xff000000000000) >> 0x28 |
                       (var_16 & 0xff0000000000) >> 0x18 | (var_16 & 0xff00000000) >> 8 |
                       (var_16 & 0xff000000) << 8 | (var_16 & 0xff0000) << 0x18 |
                       (var_16 & 0xff00) << 0x28 | var_16 << 0x38);
          }
          var_19 = pDVar11;
          if (this->reloc_shndx_ != 0) {
            var_17 = (*this->reloc_mapper_->_vptr_Elf_reloc_mapper[5])
                                     (this->reloc_mapper_,
                                      (type_12 *)((long)var_7 + (2 - (long)var_5)),&root_die)
            ;
            if (var_17 == 0) {
              return;
            }
            var_19 = root_die.dwinfo_;
            if (this->reloc_type_ == 9) {
              var_19 =
                   (type_8 *)
                   ((long)&((root_die.dwinfo_)->abbrev_table_).high_abbrev_codes_._M_h._M_buckets +
                   (long)pDVar11[-1].abbrev_table_.low_abbrev_codes_);
            }
            var_8 = this->offset_size_;
            var_13 = (type_3)var_8;
          }
          var_18 = (type_9 *)((long)var_7 + var_13 + 2);
          var_21 = var_18 + 1;
          this->address_size_ = (type_1)*var_18;
          if (this->is_type_unit_ == false) {
            local_e0 = 0;
            local_e8 = 0;
          }
          else {
            if (this->buffer_ + this->cu_length_ + this->cu_offset_ < var_18 + var_13 + 9) break;
            var_16 = *(type_3 *)(var_18 + 1);
            local_e8 = var_16 >> 0x38 | (var_16 & 0xff000000000000) >> 0x28 |
                       (var_16 & 0xff0000000000) >> 0x18 | (var_16 & 0xff00000000) >> 8 |
                       (var_16 & 0xff000000) << 8 | (var_16 & 0xff0000) << 0x18 |
                       (var_16 & 0xff00) << 0x28 | var_16 << 0x38;
            if (var_8 == 4) {
              var_8 = *(type_1 *)(var_18 + 9);
              local_e0 = (type_3)(var_8 >> 0x18 | (var_8 & 0xff0000) >> 8 | (var_8 & 0xff00) << 8
                                | var_8 << 0x18);
            }
            else {
              var_16 = *(type_3 *)(var_18 + 9);
              local_e0 = var_16 >> 0x38 | (var_16 & 0xff000000000000) >> 0x28 |
                         (var_16 & 0xff0000000000) >> 0x18 | (var_16 & 0xff00000000) >> 8 |
                         (var_16 & 0xff000000) << 8 | (var_16 & 0xff0000) << 0x18 |
                         (var_16 & 0xff00) << 0x28 | var_16 << 0x38;
            }
            var_21 = var_18 + var_13 + 9;
          }
          var_8 = (this->abbrev_table_).abbrev_shndx_;
          if (((var_8 == 0) || (var_17 != var_8)) ||
             (var_19 != (type_8 *)(this->abbrev_table_).abbrev_offset_)) {
            Dwarf_abbrev_table::var_20
                      (&this->abbrev_table_,this->object_,var_17,(type_13)var_19);
          }
          Dwarf_die::type_11
                    (&root_die,this,(type_13)(var_21 + (-this->cu_offset_ - (long)this->buffer_)),
                     (type_11 *)0x0);
          if ((root_die.abbrev_code_ != (type_14 *)0x0) && ((root_die.abbrev_code_)->tag != 0))
          {
            var_12 = this->cu_offset_ + var_22(extraout_var,iVar6);
            if (this->is_type_unit_ == false) {
              var_23 = this->_vptr_Dwarf_info_reader[2];
              if (var_23 != var_24) {
                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */
                (*var_23)(this,var_12,var_11,&root_die);
              }
            }
            else {
              var_23 = this->_vptr_Dwarf_info_reader[3];
              if (var_23 != var_25) {
                (*var_23)(this,var_12,var_11,local_e0,local_e8,&root_die);
              }
            }
          }
          if (root_die.attributes_.
              super__Vector_base<var_29::type_11::var_26,_std::allocator<var_29::type_11::var_26>var_27>
              ._M_impl._M_start != (type_15)0x0) {
            var_28(root_die.attributes_.
                            super__Vector_base<var_29::type_11::var_26,_std::allocator<var_29::type_11::var_26>var_27>
                            ._M_impl._M_start);
          }
          if (this->buffer_end_ <= var_10) goto LAB_00306aa8;
          var_5 = (type_1 *)this->buffer_;
          var_11 = (long)this->buffer_end_ - (long)var_10;
          var_7 = var_10 + 1;
          this->cu_length_ = var_11;
          var_12 = (long)var_10 - (long)var_5;
          this->cu_offset_ = var_12;
          var_6 = (type_1 *)((long)var_5 + var_11 + var_12);
          var_9 = var_10;
        } while (var_7 <= var_6);
      }
      var_30(this);
    }
LAB_00306aa8:
    if (var_31 != false) {
      if (this->buffer_ != (type_5 *)0x0) {
        var_32(this->buffer_);
      }
      this->buffer_ = (type_5 *)0x0;
    }
  }
  return;
}


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

void MASKED(long *param_1)

{
  uint uVar1;
  code *pcVar2;
  undefined8 uVar3;
  int iVar4;
  long lVar5;
  long lVar6;
  long *plVar7;
  uint *puVar8;
  ulong uVar9;
  uint *puVar10;
  ulong uVar11;
  uint *puVar12;
  uint uVar13;
  uint *puVar14;
  uint *puVar15;
  byte *pbVar16;
  ulong uVar17;
  byte *pbVar18;
  long lVar19;
  ulong local_e8;
  ulong local_e0;
  char local_d1;
  long local_d0;
  ulong local_c8 [6];
  int *local_98;
  long local_90;
  
  lVar5 = FUN_0022a660(param_1[2],(int)param_1[5],&local_d0,&local_d1,0);
  param_1[8] = lVar5;
  if ((lVar5 != 0) && (local_d0 != 0)) {
    param_1[9] = lVar5 + local_d0;
    lVar6 = (**(code **)(*(long *)param_1[2] + 0xd0))((long *)param_1[2],(int)param_1[5]);
    plVar7 = (long *)FUN_00301200(param_1[2],param_1[3],param_1[4]);
    lVar5 = *plVar7;
    param_1[0x123] = (long)plVar7;
    (**(code **)(lVar5 + 0x10))(plVar7,*(undefined4 *)((long)param_1 + 0x2c),(int)param_1[6]);
    puVar15 = (uint *)param_1[8];
    puVar8 = (uint *)param_1[9];
    iVar4 = *(int *)((long)param_1 + 0x34);
    if (puVar15 < puVar8) {
      puVar10 = puVar15 + 1;
      param_1[10] = 0;
      param_1[0xb] = (long)puVar8 - (long)puVar15;
      if (puVar10 <= puVar8) {
        lVar5 = 0;
        puVar12 = puVar15;
        do {
          uVar13 = *puVar12;
          uVar13 = uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8 |
                   uVar13 << 0x18;
          if (uVar13 == 0xffffffff) {
            puVar10 = puVar12 + 3;
            if (puVar8 < puVar10) break;
            uVar3 = *(undefined8 *)(puVar12 + 1);
            *(undefined4 *)(param_1 + 0xc) = 8;
            uVar13 = (uint)(byte)((ulong)uVar3 >> 0x38) |
                     ((uint)((ulong)uVar3 >> 0x20) & 0xff0000) >> 8 |
                     (uint)((ulong)uVar3 >> 0x18) & 0xff0000 |
                     (uint)((ulong)uVar3 >> 8) & 0xff000000;
          }
          else {
            *(undefined4 *)(param_1 + 0xc) = 4;
          }
          puVar14 = (uint *)((ulong)uVar13 + (long)puVar10);
          if (puVar8 < puVar14) break;
          uVar13 = *(uint *)(param_1 + 0xc);
          uVar17 = (ulong)uVar13;
          lVar19 = (long)puVar14 - (long)puVar12;
          param_1[0xb] = lVar19;
          if ((undefined1 *)(lVar19 + lVar5 + (long)puVar15) <
              (undefined1 *)((long)puVar10 + uVar17 + 3)) break;
          *(uint *)(param_1 + 0xd) =
               (uint)CONCAT11((char)*puVar10,*(undefined1 *)((long)puVar10 + 1));
          if (uVar13 == 4) {
            uVar1 = *(uint *)((long)puVar10 + 2);
            uVar11 = (ulong)(uVar1 >> 0x18 | (uVar1 & 0xff0000) >> 8 | (uVar1 & 0xff00) << 8 |
                            uVar1 << 0x18);
          }
          else {
            uVar11 = *(ulong *)((long)puVar10 + 2);
            uVar11 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |
                     (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |
                     (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |
                     (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;
          }
          uVar9 = uVar11;
          if (*(int *)((long)param_1 + 0x2c) != 0) {
            iVar4 = (**(code **)(*(long *)param_1[0x123] + 0x28))
                              ((long *)param_1[0x123],
                               (undefined1 *)((long)puVar10 + (2 - (long)puVar15)),local_c8);
            if (iVar4 == 0) {
              return;
            }
            uVar9 = local_c8[0];
            if ((int)param_1[6] == 9) {
              uVar9 = local_c8[0] + uVar11;
            }
            uVar13 = *(uint *)(param_1 + 0xc);
            uVar17 = (ulong)uVar13;
          }
          pbVar16 = (byte *)((long)puVar10 + uVar17 + 2);
          pbVar18 = pbVar16 + 1;
          *(uint *)((long)param_1 + 100) = (uint)*pbVar16;
          if ((char)param_1[1] == '\0') {
            local_e0 = 0;
            local_e8 = 0;
          }
          else {
            if ((byte *)(param_1[0xb] + param_1[10] + param_1[8]) < pbVar16 + uVar17 + 9) break;
            uVar11 = *(ulong *)(pbVar16 + 1);
            local_e8 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |
                       (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |
                       (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |
                       (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;
            if (uVar13 == 4) {
              uVar13 = *(uint *)(pbVar16 + 9);
              local_e0 = (ulong)(uVar13 >> 0x18 | (uVar13 & 0xff0000) >> 8 | (uVar13 & 0xff00) << 8
                                | uVar13 << 0x18);
            }
            else {
              uVar11 = *(ulong *)(pbVar16 + 9);
              local_e0 = uVar11 >> 0x38 | (uVar11 & 0xff000000000000) >> 0x28 |
                         (uVar11 & 0xff0000000000) >> 0x18 | (uVar11 & 0xff00000000) >> 8 |
                         (uVar11 & 0xff000000) << 8 | (uVar11 & 0xff0000) << 0x18 |
                         (uVar11 & 0xff00) << 0x28 | uVar11 << 0x38;
            }
            pbVar18 = pbVar16 + uVar17 + 9;
          }
          if ((((int)param_1[0xe] == 0) || (iVar4 != (int)param_1[0xe])) || (uVar9 != param_1[0xf]))
          {
            FUN_00302430(param_1 + 0xe,param_1[2],iVar4);
          }
          FUN_00303d40(local_c8,param_1,pbVar18 + (-param_1[10] - param_1[8]),0);
          if ((local_98 != (int *)0x0) && (*local_98 != 0)) {
            if ((char)param_1[1] == '\0') {
              pcVar2 = *(code **)(*param_1 + 0x10);
              if (pcVar2 != FUN_00301070) {
                    /* try { // try from 00306b7d to 00306b9c has its CatchHandler @ 00306ba2 */
                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_c8);
              }
            }
            else {
              pcVar2 = *(code **)(*param_1 + 0x18);
              if (pcVar2 != FUN_00301080) {
                (*pcVar2)(param_1,param_1[10] + lVar6,lVar19,local_e0,local_e8,local_c8);
              }
            }
          }
          if (local_90 != 0) {
            FUN_00338a40();
          }
          if ((uint *)param_1[9] <= puVar14) goto LAB_00306aa8;
          puVar15 = (uint *)param_1[8];
          lVar19 = param_1[9] - (long)puVar14;
          puVar10 = puVar14 + 1;
          param_1[0xb] = lVar19;
          lVar5 = (long)puVar14 - (long)puVar15;
          param_1[10] = lVar5;
          puVar8 = (uint *)((long)puVar15 + lVar19 + lVar5);
          puVar12 = puVar14;
        } while (puVar10 <= puVar8);
      }
      FUN_00301e60(param_1);
    }
LAB_00306aa8:
    if (local_d1 != '\0') {
      if (param_1[8] != 0) {
        thunk_FUN_00338a40();
      }
      param_1[8] = 0;
    }
  }
  return;
}

