
/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

pos sel_spread_half(Terminal *term,pos p,int dir)

{
  int iVar1;
  termline *line;
  termchar *ptVar2;
  termchar *ptVar3;
  tree234 *ptVar4;
  code *pcVar5;
  int iVar6;
  int iVar7;
  termline *ptVar8;
  int in_v1;
  int extraout_v1;
  int extraout_v1_00;
  int iVar9;
  ulong uVar10;
  int in_a2;
  termchar *ptVar11;
  tree234 *in_a3;
  int iVar12;
  uint uVar13;
  termchar *ptVar14;
  uint uVar15;
  tree234 *ptVar16;
  code *pcVar17;
  pos pVar18;
  undefined8 uVar19;
  
  iVar1 = sblines((Terminal *)dir);
  pcVar17 = (code *)(PTR_DAT_000b55b4 + 0x71fc);
  line = lineptr((Terminal *)dir,in_a2,0x16af,0);
  iVar9 = *(int *)(dir + 0xe50);
  if (iVar9 == 1) {
    uVar10 = line->chars[(int)in_a3].chr;
    if ((0 < (int)in_a3) && (uVar10 == 0xdfff)) {
      uVar10 = (line->chars + (int)in_a3)[-1].chr;
    }
    iVar9 = wordtype((Terminal *)dir,uVar10);
    iVar9 = (int)(short)iVar9;
    if (p.y == 1) {
      iVar6 = *(int *)(dir + 300);
      uVar13 = (uint)line->lattr;
      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);
      iVar1 = iVar6 + -1;
      uVar15 = uVar13 & 0x20;
LAB_0004795c:
      iVar12 = iVar1;
      if (uVar15 == 0) goto LAB_00047968;
      while( true ) {
        iVar1 = iVar6 + -2;
LAB_00047968:
        ptVar16 = in_a3;
        if (iVar1 <= (int)in_a3) break;
        while( true ) {
          in_a3 = (tree234 *)((int)&ptVar16->root + 1);
          uVar10 = line->chars[(int)in_a3].chr;
          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {
            uVar10 = (line->chars + (int)in_a3)[-1].chr;
          }
          iVar1 = wordtype((Terminal *)dir,uVar10);
          if (iVar1 != iVar9) goto LAB_00047698;
          if (uVar15 != 0) break;
          ptVar16 = in_a3;
          if (iVar12 <= (int)in_a3) goto LAB_000479d0;
        }
      }
LAB_000479d0:
      iVar1 = in_a2 + 1;
      ptVar16 = in_a3;
      if ((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)) goto LAB_00047698;
      uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0);
      ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);
      in_v1 = (int)uVar19;
      iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr);
      if (iVar6 == iVar9) {
        in_a2 = iVar1;
        if (line->temporary == 0) {
          iVar6 = *(int *)(dir + 300);
          uVar13 = (uint)ptVar8->lattr;
          iVar1 = iVar6 + -1;
          uVar15 = uVar13 & 0x20;
          in_a3 = (tree234 *)0x0;
          line = ptVar8;
        }
        else {
          (*pcVar5)(line);
          in_a3 = (tree234 *)0x0;
          uVar13 = (uint)ptVar8->lattr;
          iVar6 = *(int *)(dir + 300);
          uVar15 = uVar13 & 0x20;
          iVar1 = iVar6 + -1;
          in_v1 = extraout_v1_00;
          line = ptVar8;
        }
        goto LAB_0004795c;
      }
      if (ptVar8->temporary != 0) {
                    /* WARNING: Subroutine does not return */
        freeline(ptVar8);
      }
    }
    else {
      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);
      ptVar8 = line;
      while( true ) {
        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;
            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {
          in_v1 = 1;
          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;
          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {
            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;
          }
          iVar6 = wordtype((Terminal *)dir,uVar10);
          if (iVar6 != iVar9) goto LAB_00047698;
          ptVar8 = line;
        }
        iVar6 = in_a2 + -1;
        if (in_a2 <= -iVar1) goto LAB_00047698;
        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);
        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);
        in_v1 = (int)uVar19;
        iVar12 = *(int *)(dir + 300);
        if ((ptVar8->lattr & 0x20) != 0) {
          iVar12 = iVar12 + -1;
        }
        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;
        uVar10 = ptVar8->chars[iVar12 + -1].chr;
        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {
          uVar10 = ptVar8->chars[iVar12 + -2].chr;
        }
        iVar7 = wordtype((Terminal *)dir,uVar10);
        if (iVar7 != iVar9) break;
        in_a3 = (tree234 *)(iVar12 + -1);
        in_a2 = iVar6;
        if (line->temporary != 0) {
          (*pcVar5)(line);
          in_v1 = extraout_v1;
        }
      }
      if (ptVar8->temporary != 0) {
                    /* WARNING: Subroutine does not return */
        freeline(ptVar8);
      }
    }
    goto LAB_00047698;
  }
  ptVar16 = in_a3;
  if (iVar9 != 0) {
    in_v1 = p.y;
    if ((iVar9 == 2) && (ptVar16 = (tree234 *)0x0, p.y != -1)) {
      in_v1 = *(int *)(dir + 300);
      ptVar16 = (tree234 *)(in_v1 + -1);
    }
    goto LAB_00047698;
  }
  if ((line->lattr & 0x10) != 0) goto LAB_00047698;
  ptVar11 = line->chars;
  ptVar14 = ptVar11 + *(int *)(dir + 300);
  ptVar3 = ptVar14;
  if (ptVar11 < ptVar14) {
    do {
      if (((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||
         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)) break;
      ptVar3 = ptVar2;
    } while (ptVar11 < ptVar2);
    if (ptVar3 == ptVar14) goto LAB_00047a9c;
  }
  else {
LAB_00047a9c:
    ptVar3 = ptVar14 + -1;
  }
  ptVar4 = (tree234 *)(((int)ptVar3 - (int)ptVar11 >> 2) * -0x55555555);
  if (((int)ptVar4 <= (int)in_a3) && (in_v1 = -1, ptVar16 = ptVar4, p.y != -1)) {
    ptVar16 = (tree234 *)(*(int *)(dir + 300) + -1);
  }
LAB_00047698:
  if (line->temporary != 0) {
                    /* WARNING: Subroutine does not return */
    freeline(line);
  }
  term->compatibility_level = in_a2;
  term->scrollback = ptVar16;
  pVar18.y = (int)term;
  pVar18.x = in_v1;
  return pVar18;
}



int * FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)

{
  int iVar1;
  ushort *puVar2;
  uint uVar3;
  int *piVar4;
  short sVar9;
  code *pcVar5;
  int iVar6;
  ushort *puVar7;
  uint uVar8;
  int iVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  code *pcVar16;
  
  iVar1 = FUN_00044420(param_2);
  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);
  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);
  iVar10 = *(int *)(param_2 + 0xe50);
  if (iVar10 == 1) {
    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);
    iVar10 = *piVar4;
    if ((0 < param_4) && (iVar10 == 0xdfff)) {
      iVar10 = piVar4[-3];
    }
    sVar9 = FUN_000442c4(param_2,iVar10);
    iVar10 = (int)sVar9;
    if (param_5 == 1) {
      iVar6 = *(int *)(param_2 + 300);
      uVar8 = (uint)*puVar2;
      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);
      iVar1 = iVar6 + -1;
      uVar13 = uVar8 & 0x20;
LAB_0004795c:
      iVar11 = iVar1;
      if (uVar13 == 0) goto LAB_00047968;
      while( true ) {
        iVar1 = iVar6 + -2;
LAB_00047968:
        iVar15 = param_4;
        if (iVar1 <= param_4) break;
        while( true ) {
          param_4 = iVar15 + 1;
          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);
          iVar1 = *piVar4;
          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {
            iVar1 = piVar4[-3];
          }
          iVar1 = FUN_000442c4(param_2,iVar1);
          if (iVar1 != iVar10) goto LAB_00047698;
          if (uVar13 != 0) break;
          iVar15 = param_4;
          if (iVar11 <= param_4) goto LAB_000479d0;
        }
      }
LAB_000479d0:
      iVar1 = param_3 + 1;
      iVar15 = param_4;
      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;
      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);
      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));
      if (iVar6 == iVar10) {
        param_3 = iVar1;
        if (*(int *)(puVar2 + 6) == 0) {
          iVar6 = *(int *)(param_2 + 300);
          uVar8 = (uint)*puVar7;
          iVar1 = iVar6 + -1;
          uVar13 = uVar8 & 0x20;
          param_4 = 0;
          puVar2 = puVar7;
        }
        else {
          (*pcVar5)(puVar2);
          param_4 = 0;
          uVar8 = (uint)*puVar7;
          iVar6 = *(int *)(param_2 + 300);
          uVar13 = uVar8 & 0x20;
          iVar1 = iVar6 + -1;
          puVar2 = puVar7;
        }
        goto LAB_0004795c;
      }
      if (*(int *)(puVar7 + 6) != 0) {
        FUN_000459d0(puVar7);
      }
    }
    else {
      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);
      puVar7 = puVar2;
      while( true ) {
        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {
          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;
          iVar11 = *(int *)(iVar6 + -0xc);
          if ((param_4 != 1) && (iVar11 == 0xdfff)) {
            iVar11 = *(int *)(iVar6 + -0x18);
          }
          iVar6 = FUN_000442c4(param_2,iVar11);
          if (iVar6 != iVar10) goto LAB_00047698;
          puVar7 = puVar2;
        }
        iVar6 = param_3 + -1;
        if (param_3 <= -iVar1) goto LAB_00047698;
        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);
        param_4 = *(int *)(param_2 + 300);
        if ((*puVar7 & 0x20) != 0) {
          param_4 = param_4 + -1;
        }
        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;
        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;
        iVar12 = *(int *)(iVar11 + -0xc);
        if ((1 < param_4) && (iVar12 == 0xdfff)) {
          iVar12 = *(int *)(iVar11 + -0x18);
        }
        iVar11 = FUN_000442c4(param_2,iVar12);
        if (iVar11 != iVar10) break;
        param_4 = param_4 + -1;
        param_3 = iVar6;
        if (*(int *)(puVar2 + 6) != 0) {
          (*pcVar5)(puVar2);
        }
      }
      if (*(int *)(puVar7 + 6) != 0) {
        FUN_000459d0(puVar7);
      }
    }
    goto LAB_00047698;
  }
  iVar15 = param_4;
  if (iVar10 != 0) {
    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {
      iVar15 = *(int *)(param_2 + 300) + -1;
    }
    goto LAB_00047698;
  }
  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;
  uVar13 = *(uint *)(puVar2 + 10);
  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;
  uVar8 = uVar14;
  if (uVar13 < uVar14) {
    do {
      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||
         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;
      uVar8 = uVar3;
    } while (uVar13 < uVar3);
    if (uVar8 == uVar14) goto LAB_00047a9c;
  }
  else {
LAB_00047a9c:
    uVar8 = uVar14 - 0xc;
  }
  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;
  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {
    iVar15 = *(int *)(param_2 + 300) + -1;
  }
LAB_00047698:
  if (*(int *)(puVar2 + 6) != 0) {
    FUN_000459d0(puVar2);
    *param_1 = param_3;
    param_1[1] = iVar15;
    return param_1;
  }
  *param_1 = param_3;
  param_1[1] = iVar15;
  return param_1;
}


lui gp,0x7
addiu gp,gp,0x5c00
addu gp,gp,t9
lw t9,-0x7c1c(gp)
addiu sp,sp,-0x50
addiu t9,t9,0x4420
sw gp,0x10(sp)
sw ra,0x4c(sp)
sw s7,0x44(sp)
or s7,a3,zero
sw s6,0x40(sp)
sw s5,0x3c(sp)
or s5,a0,zero
sw s2,0x30(sp)
or a0,a1,zero
sw s1,0x2c(sp)
or s1,a2,zero
sw s0,0x28(sp)
or s0,a1,zero
sw a2,0x58(sp)
sw a3,0x5c(sp)
sw s8,0x48(sp)
sw s4,0x38(sp)
bal 0x00044420
_sw s3,0x34(sp)
or a3,zero,zero
lw gp,0x10(sp)
li a2,0x16af
or a1,s1,zero
or a0,s0,zero
or s6,v0,zero
lw s2,-0x7c1c(gp)
addiu t9,s2,0x71fc
bal 0x000471fc
_sw t9,0x1c(sp)
li a1,0x1
lw a0,0xe50(s0)
or s2,v0,zero
beq a0,a1,0x000477d8
_lw gp,0x10(sp)
beq a0,zero,0x00047728
_nop
li v0,0x2
bne a0,v0,0x00047698
_lw v1,0x60(sp)
li v0,-0x1
beq v1,v0,0x00047698
_or s7,zero,zero
lw v1,0x12c(s0)
addiu s7,v1,-0x1
lw v0,0xc(s2)
bne v0,zero,0x000476dc
_lw ra,0x4c(sp)
or v0,s5,zero
lw s8,0x48(sp)
lw s6,0x40(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s0,0x28(sp)
sw s1,0x0(s5)
sw s7,0x4(s5)
lw s1,0x2c(sp)
lw s7,0x44(sp)
lw s5,0x3c(sp)
jr ra
_addiu sp,sp,0x50
lw t9,-0x7c1c(gp)
addiu t9,t9,0x59d0
bal 0x000459d0
_or a0,s2,zero
or v0,s5,zero
lw ra,0x4c(sp)
lw s8,0x48(sp)
lw s6,0x40(sp)
lw s4,0x38(sp)
lw s3,0x34(sp)
lw s2,0x30(sp)
lw s0,0x28(sp)
sw s1,0x0(s5)
sw s7,0x4(s5)
lw s1,0x2c(sp)
lw s7,0x44(sp)
lw s5,0x3c(sp)
jr ra
_addiu sp,sp,0x50
lhu v0,0x0(v0)
andi v0,v0,0x10
bne v0,zero,0x00047698
_nop
lw t4,0x12c(s0)
lw a2,0x14(s2)
sll t2,t4,0x1
addu t2,t2,t4
sll t2,t2,0x2
addu t2,a2,t2
sltu a0,a2,t2
beq a0,zero,0x00047a9c
_or v0,t2,zero
li t1,0x20
li a3,-0x301
b 0x00047778
_ori t3,zero,0xd820
sltu a0,a2,v0
beq a0,zero,0x0004779c
_nop
lw a0,-0xc(v0)
beq a0,t1,0x0004778c
_and a1,a0,a3
bne a1,t3,0x0004779c
_nop
lw a0,-0x4(v0)
beq a0,zero,0x0004776c
_addiu v0,v0,-0xc
addiu v0,v0,0xc
beq v0,t2,0x00047a9c
_nop
subu v0,v0,a2
lui a0,0xaaaa
sra v0,v0,0x2
ori a0,a0,0xaaab
mul v0,v0,a0
slt a0,s7,v0
bne a0,zero,0x00047698
_lw a0,0x60(sp)
li v1,-0x1
beq a0,v1,0x00047a94
_nop
b 0x00047698
_addiu s7,t4,-0x1
sll v0,s7,0x1
lw a0,0x14(s2)
addu v0,v0,s7
sll v0,v0,0x2
addu v0,a0,v0
blez s7,0x00047804
_lw a1,0x0(v0)
ori a0,zero,0xdfff
bne a1,a0,0x00047808
_lw s3,-0x7c1c(gp)
lw a1,-0xc(v0)
lw s3,-0x7c1c(gp)
addiu s3,s3,0x42c4
or t9,s3,zero
bal 0x000442c4
_or a0,s0,zero
li a0,0x1
seh s4,v0
lw v0,0x60(sp)
beq v0,a0,0x00047940
_lw gp,0x10(sp)
subu v0,zero,s6
sw v0,0x20(sp)
lw v0,-0x7c1c(gp)
addiu v0,v0,0x59d0
sw v0,0x24(sp)
blez s7,0x0004789c
_lw v0,0x20(sp)
sll v0,s7,0x1
lw a0,0x14(s2)
li v1,0x1
addu v0,v0,s7
sll v0,v0,0x2
addu v0,a0,v0
beq s7,v1,0x00047878
_lw a1,-0xc(v0)
ori v1,zero,0xdfff
bne a1,v1,0x0004787c
_or t9,s3,zero
lw a1,-0x18(v0)
or t9,s3,zero
bal 0x000442c4
_or a0,s0,zero
bne v0,s4,0x00047698
_lw gp,0x10(sp)
addiu s7,s7,-0x1
bgtz s7,0x0004784c
_sll v0,s7,0x1
lw v0,0x20(sp)
slt v0,v0,s1
beq v0,zero,0x00047698
_addiu s6,s1,-0x1
lw t9,0x1c(sp)
or a3,zero,zero
li a2,0x16f0
or a0,s0,zero
jalr t9
_or a1,s6,zero
or s8,v0,zero
lhu v0,0x0(v0)
lw gp,0x10(sp)
andi a0,v0,0x20
beq a0,zero,0x000478dc
_lw t1,0x12c(s0)
addiu t1,t1,-0x1
andi v0,v0,0x10
beq v0,zero,0x00047698
_sll v0,t1,0x1
lw a0,0x14(s8)
slti a3,t1,0x2
addu v0,v0,t1
sll v0,v0,0x2
addu v0,a0,v0
bne a3,zero,0x00047914
_lw a1,-0xc(v0)
ori v1,zero,0xdfff
bne a1,v1,0x00047918
_or t9,s3,zero
lw a1,-0x18(v0)
or t9,s3,zero
bal 0x000442c4
_or a0,s0,zero
bne v0,s4,0x00047aa4
_lw gp,0x10(sp)
lw v0,0xc(s2)
bne v0,zero,0x00047a48
_addiu s7,t1,-0x1
or s1,s6,zero
b 0x00047840
_or s2,s8,zero
lw v0,-0x7c1c(gp)
lw t2,0x12c(s0)
lhu t1,0x0(s2)
addiu v0,v0,0x59d0
addiu t3,t2,-0x1
andi t4,t1,0x20
sw v0,0x20(sp)
beq t4,zero,0x00047968
_or v0,t3,zero
addiu v0,t2,-0x2
slt v0,s7,v0
beq v0,zero,0x000479d0
_nop
addiu t5,s7,0x1
lw a0,0x14(s2)
sll v0,t5,0x1
addu v0,v0,t5
sll v0,v0,0x2
addu v0,a0,v0
bltz s7,0x000479a4
_lw a1,0x0(v0)
ori v1,zero,0xdfff
bne a1,v1,0x000479a8
_or t9,s3,zero
lw a1,-0xc(v0)
or t9,s3,zero
bal 0x000442c4
_or a0,s0,zero
bne v0,s4,0x00047698
_lw gp,0x10(sp)
or s7,t5,zero
bne t4,zero,0x00047964
_or v0,t3,zero
slt v0,s7,v0
bne v0,zero,0x00047974
_nop
lw v0,0x128(s0)
addiu s8,s1,0x1
slt v0,s8,v0
beq v0,zero,0x00047698
_andi t1,t1,0x10
beq t1,zero,0x00047698
_lw t9,0x1c(sp)
or a3,zero,zero
li a2,0x16d5
or a1,s8,zero
jalr t9
_or a0,s0,zero
or a0,s0,zero
or s6,v0,zero
lw v0,0x14(v0)
or t9,s3,zero
bal 0x000442c4
_lw a1,0x0(v0)
bne v0,s4,0x00047ac4
_lw gp,0x10(sp)
lw s7,0xc(s2)
bne s7,zero,0x00047a64
_nop
lw t2,0x12c(s0)
or s1,s8,zero
lhu t1,0x0(s6)
or s2,s6,zero
addiu t3,t2,-0x1
b 0x0004795c
_andi t4,t1,0x20
lw t9,0x24(sp)
or a0,s2,zero
or s1,s6,zero
jalr t9
_or s2,s8,zero
b 0x00047840
_lw gp,0x10(sp)
lw t9,0x20(sp)
or a0,s2,zero
or s1,s8,zero
jalr t9
_or s2,s6,zero
or s7,zero,zero
lhu t1,0x0(s6)
lw t2,0x12c(s0)
lw gp,0x10(sp)
andi t4,t1,0x20
b 0x0004795c
_addiu t3,t2,-0x1
b 0x00047698
_or s7,v0,zero
b 0x000477a4
_addiu v0,t2,-0xc
lw v0,0xc(s8)
beq v0,zero,0x00047698
_lw t9,-0x7c1c(gp)
addiu t9,t9,0x59d0
bal 0x000459d0
_or a0,s8,zero
b 0x00047698
_lw gp,0x10(sp)
lw v0,0xc(s6)
beq v0,zero,0x00047698
_lw t9,-0x7c1c(gp)
addiu t9,t9,0x59d0
bal 0x000459d0
_or a0,s6,zero
b 0x00047698
_lw gp,0x10(sp)
(translation_unit "int * FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)\n\n{\n  int iVar1;\n  ushort *puVar2;\n  uint uVar3;\n  int *piVar4;\n  short sVar9;\n  code *pcVar5;\n  int iVar6;\n  ushort *puVar7;\n  uint uVar8;\n  int iVar10;\n  int iVar11;\n  int iVar12;\n  uint uVar13;\n  uint uVar14;\n  int iVar15;\n  code *pcVar16;\n  \n  iVar1 = FUN_00044420(param_2);\n  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);\n  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);\n  iVar10 = *(int *)(param_2 + 0xe50);\n  if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }\n  iVar15 = param_4;\n  if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }\n  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;\n  uVar13 = *(uint *)(puVar2 + 10);\n  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;\n  uVar8 = uVar14;\n  if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }\n  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;\n  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }\nLAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }\n  *param_1 = param_3;\n  param_1[1] = iVar15;\n  return param_1;\n}\n\n" (function_definition "int * FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)\n\n{\n  int iVar1;\n  ushort *puVar2;\n  uint uVar3;\n  int *piVar4;\n  short sVar9;\n  code *pcVar5;\n  int iVar6;\n  ushort *puVar7;\n  uint uVar8;\n  int iVar10;\n  int iVar11;\n  int iVar12;\n  uint uVar13;\n  uint uVar14;\n  int iVar15;\n  code *pcVar16;\n  \n  iVar1 = FUN_00044420(param_2);\n  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);\n  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);\n  iVar10 = *(int *)(param_2 + 0xe50);\n  if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }\n  iVar15 = param_4;\n  if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }\n  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;\n  uVar13 = *(uint *)(puVar2 + 10);\n  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;\n  uVar8 = uVar14;\n  if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }\n  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;\n  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }\nLAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }\n  *param_1 = param_3;\n  param_1[1] = iVar15;\n  return param_1;\n}" primitive_type (pointer_declarator "* FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)" * (function_declarator "FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)" identifier (parameter_list "(int *param_1,int param_2,int param_3,int param_4,int param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) )))) (compound_statement "{\n  int iVar1;\n  ushort *puVar2;\n  uint uVar3;\n  int *piVar4;\n  short sVar9;\n  code *pcVar5;\n  int iVar6;\n  ushort *puVar7;\n  uint uVar8;\n  int iVar10;\n  int iVar11;\n  int iVar12;\n  uint uVar13;\n  uint uVar14;\n  int iVar15;\n  code *pcVar16;\n  \n  iVar1 = FUN_00044420(param_2);\n  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);\n  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);\n  iVar10 = *(int *)(param_2 + 0xe50);\n  if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }\n  iVar15 = param_4;\n  if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }\n  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;\n  uVar13 = *(uint *)(puVar2 + 10);\n  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;\n  uVar8 = uVar14;\n  if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }\n  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;\n  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }\nLAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }\n  *param_1 = param_3;\n  param_1[1] = iVar15;\n  return param_1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "ushort *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "short sVar9;" (sized_type_specifier "short" short) identifier ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "ushort *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "code *pcVar16;" type_identifier (pointer_declarator "*pcVar16" * identifier) ;) (expression_statement "iVar1 = FUN_00044420(param_2);" (assignment_expression "iVar1 = FUN_00044420(param_2)" identifier = (call_expression "FUN_00044420(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);" (assignment_expression "pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc)" identifier = (cast_expression "(code *)(PTR_LAB_000b55b4 + 0x71fc)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b55b4 + 0x71fc)" ( (binary_expression "PTR_LAB_000b55b4 + 0x71fc" identifier + number_literal) )))) ;) (expression_statement "puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);" (assignment_expression "puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0)" identifier = (cast_expression "(ushort *)FUN_000471fc(param_2,param_3,0x16af,0)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000471fc(param_2,param_3,0x16af,0)" identifier (argument_list "(param_2,param_3,0x16af,0)" ( identifier , identifier , number_literal , number_literal ))))) ;) (expression_statement "iVar10 = *(int *)(param_2 + 0xe50);" (assignment_expression "iVar10 = *(int *)(param_2 + 0xe50)" identifier = (pointer_expression "*(int *)(param_2 + 0xe50)" * (cast_expression "(int *)(param_2 + 0xe50)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe50)" ( (binary_expression "param_2 + 0xe50" identifier + number_literal) ))))) ;) (if_statement "if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }" if (parenthesized_expression "(iVar10 == 1)" ( (binary_expression "iVar10 == 1" identifier == number_literal) )) (compound_statement "{\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }" { (expression_statement "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);" (assignment_expression "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" identifier = (cast_expression "(int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(puVar2 + 10) + param_4 * 0xc)" ( (binary_expression "*(int *)(puVar2 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar2 + 10)" * (cast_expression "(int *)(puVar2 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 10)" ( (binary_expression "puVar2 + 10" identifier + number_literal) )))) + (binary_expression "param_4 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "iVar10 = *piVar4;" (assignment_expression "iVar10 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (if_statement "if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }" if (parenthesized_expression "((0 < param_4) && (iVar10 == 0xdfff))" ( (binary_expression "(0 < param_4) && (iVar10 == 0xdfff)" (parenthesized_expression "(0 < param_4)" ( (binary_expression "0 < param_4" number_literal < identifier) )) && (parenthesized_expression "(iVar10 == 0xdfff)" ( (binary_expression "iVar10 == 0xdfff" identifier == number_literal) ))) )) (compound_statement "{\n      iVar10 = piVar4[-3];\n    }" { (expression_statement "iVar10 = piVar4[-3];" (assignment_expression "iVar10 = piVar4[-3]" identifier = (subscript_expression "piVar4[-3]" identifier [ number_literal ])) ;) })) (expression_statement "sVar9 = FUN_000442c4(param_2,iVar10);" (assignment_expression "sVar9 = FUN_000442c4(param_2,iVar10)" identifier = (call_expression "FUN_000442c4(param_2,iVar10)" identifier (argument_list "(param_2,iVar10)" ( identifier , identifier )))) ;) (expression_statement "iVar10 = (int)sVar9;" (assignment_expression "iVar10 = (int)sVar9" identifier = (cast_expression "(int)sVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" if (parenthesized_expression "(param_5 == 1)" ( (binary_expression "param_5 == 1" identifier == number_literal) )) (compound_statement "{\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" { (expression_statement "iVar6 = *(int *)(param_2 + 300);" (assignment_expression "iVar6 = *(int *)(param_2 + 300)" identifier = (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) ))))) ;) (expression_statement "uVar8 = (uint)*puVar2;" (assignment_expression "uVar8 = (uint)*puVar2" identifier = (binary_expression "(uint)*puVar2" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0)" identifier = (cast_expression "(code *)(PTR_LAB_000b55b4 + 0x59d0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b55b4 + 0x59d0)" ( (binary_expression "PTR_LAB_000b55b4 + 0x59d0" identifier + number_literal) )))) ;) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar8 & 0x20;" (assignment_expression "uVar13 = uVar8 & 0x20" identifier = (binary_expression "uVar8 & 0x20" identifier & number_literal)) ;) (labeled_statement "LAB_0004795c:\n      iVar11 = iVar1;" statement_identifier : (expression_statement "iVar11 = iVar1;" (assignment_expression "iVar11 = iVar1" identifier = identifier) ;)) (if_statement "if (uVar13 == 0) goto LAB_00047968;" if (parenthesized_expression "(uVar13 == 0)" ( (binary_expression "uVar13 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00047968;" goto statement_identifier ;)) (while_statement "while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }" { (expression_statement "iVar1 = iVar6 + -2;" (assignment_expression "iVar1 = iVar6 + -2" identifier = (binary_expression "iVar6 + -2" identifier + number_literal)) ;) (labeled_statement "LAB_00047968:\n        iVar15 = param_4;" statement_identifier : (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" identifier = identifier) ;)) (if_statement "if (iVar1 <= param_4) break;" if (parenthesized_expression "(iVar1 <= param_4)" ( (binary_expression "iVar1 <= param_4" identifier <= identifier) )) (break_statement "break;" break ;)) (while_statement "while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }" { (expression_statement "param_4 = iVar15 + 1;" (assignment_expression "param_4 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);" (assignment_expression "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" identifier = (cast_expression "(int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(puVar2 + 10) + param_4 * 0xc)" ( (binary_expression "*(int *)(puVar2 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar2 + 10)" * (cast_expression "(int *)(puVar2 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 10)" ( (binary_expression "puVar2 + 10" identifier + number_literal) )))) + (binary_expression "param_4 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "iVar1 = *piVar4;" (assignment_expression "iVar1 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (if_statement "if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }" if (parenthesized_expression "((-1 < iVar15) && (iVar1 == 0xdfff))" ( (binary_expression "(-1 < iVar15) && (iVar1 == 0xdfff)" (parenthesized_expression "(-1 < iVar15)" ( (binary_expression "-1 < iVar15" number_literal < identifier) )) && (parenthesized_expression "(iVar1 == 0xdfff)" ( (binary_expression "iVar1 == 0xdfff" identifier == number_literal) ))) )) (compound_statement "{\n            iVar1 = piVar4[-3];\n          }" { (expression_statement "iVar1 = piVar4[-3];" (assignment_expression "iVar1 = piVar4[-3]" identifier = (subscript_expression "piVar4[-3]" identifier [ number_literal ])) ;) })) (expression_statement "iVar1 = FUN_000442c4(param_2,iVar1);" (assignment_expression "iVar1 = FUN_000442c4(param_2,iVar1)" identifier = (call_expression "FUN_000442c4(param_2,iVar1)" identifier (argument_list "(param_2,iVar1)" ( identifier , identifier )))) ;) (if_statement "if (iVar1 != iVar10) goto LAB_00047698;" if (parenthesized_expression "(iVar1 != iVar10)" ( (binary_expression "iVar1 != iVar10" identifier != identifier) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (if_statement "if (uVar13 != 0) break;" if (parenthesized_expression "(uVar13 != 0)" ( (binary_expression "uVar13 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" identifier = identifier) ;) (if_statement "if (iVar11 <= param_4) goto LAB_000479d0;" if (parenthesized_expression "(iVar11 <= param_4)" ( (binary_expression "iVar11 <= param_4" identifier <= identifier) )) (goto_statement "goto LAB_000479d0;" goto statement_identifier ;)) })) })) (labeled_statement "LAB_000479d0:\n      iVar1 = param_3 + 1;" statement_identifier : (expression_statement "iVar1 = param_3 + 1;" (assignment_expression "iVar1 = param_3 + 1" identifier = (binary_expression "param_3 + 1" identifier + number_literal)) ;)) (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" identifier = identifier) ;) (if_statement "if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;" if (parenthesized_expression "((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0))" ( (binary_expression "(*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)" (parenthesized_expression "(*(int *)(param_2 + 0x128) <= iVar1)" ( (binary_expression "*(int *)(param_2 + 0x128) <= iVar1" (pointer_expression "*(int *)(param_2 + 0x128)" * (cast_expression "(int *)(param_2 + 0x128)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x128)" ( (binary_expression "param_2 + 0x128" identifier + number_literal) )))) <= identifier) )) || (parenthesized_expression "((uVar8 & 0x10) == 0)" ( (binary_expression "(uVar8 & 0x10) == 0" (parenthesized_expression "(uVar8 & 0x10)" ( (binary_expression "uVar8 & 0x10" identifier & number_literal) )) == number_literal) ))) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);" (assignment_expression "puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0)" identifier = (cast_expression "(ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*pcVar16)(param_2,iVar1,0x16d5,0)" (parenthesized_expression "(*pcVar16)" ( (pointer_expression "*pcVar16" * identifier) )) (argument_list "(param_2,iVar1,0x16d5,0)" ( identifier , identifier , number_literal , number_literal ))))) ;) (expression_statement "iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));" (assignment_expression "iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10))" identifier = (call_expression "FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10))" identifier (argument_list "(param_2,**(undefined4 **)(puVar7 + 10))" ( identifier , (pointer_expression "**(undefined4 **)(puVar7 + 10)" * (pointer_expression "*(undefined4 **)(puVar7 + 10)" * (cast_expression "(undefined4 **)(puVar7 + 10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + 10)" ( (binary_expression "puVar7 + 10" identifier + number_literal) ))))) )))) ;) (if_statement "if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }" if (parenthesized_expression "(iVar6 == iVar10)" ( (binary_expression "iVar6 == iVar10" identifier == identifier) )) (compound_statement "{\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }" { (expression_statement "param_3 = iVar1;" (assignment_expression "param_3 = iVar1" identifier = identifier) ;) (if_statement "if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }" if (parenthesized_expression "(*(int *)(puVar2 + 6) == 0)" ( (binary_expression "*(int *)(puVar2 + 6) == 0" (pointer_expression "*(int *)(puVar2 + 6)" * (cast_expression "(int *)(puVar2 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 6)" ( (binary_expression "puVar2 + 6" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }" { (expression_statement "iVar6 = *(int *)(param_2 + 300);" (assignment_expression "iVar6 = *(int *)(param_2 + 300)" identifier = (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) ))))) ;) (expression_statement "uVar8 = (uint)*puVar7;" (assignment_expression "uVar8 = (uint)*puVar7" identifier = (binary_expression "(uint)*puVar7" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar8 & 0x20;" (assignment_expression "uVar13 = uVar8 & 0x20" identifier = (binary_expression "uVar8 & 0x20" identifier & number_literal)) ;) (expression_statement "param_4 = 0;" (assignment_expression "param_4 = 0" identifier = number_literal) ;) (expression_statement "puVar2 = puVar7;" (assignment_expression "puVar2 = puVar7" identifier = identifier) ;) }) (else_clause "else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }" else (compound_statement "{\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }" { (expression_statement "(*pcVar5)(puVar2);" (call_expression "(*pcVar5)(puVar2)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "param_4 = 0;" (assignment_expression "param_4 = 0" identifier = number_literal) ;) (expression_statement "uVar8 = (uint)*puVar7;" (assignment_expression "uVar8 = (uint)*puVar7" identifier = (binary_expression "(uint)*puVar7" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "iVar6 = *(int *)(param_2 + 300);" (assignment_expression "iVar6 = *(int *)(param_2 + 300)" identifier = (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) ))))) ;) (expression_statement "uVar13 = uVar8 & 0x20;" (assignment_expression "uVar13 = uVar8 & 0x20" identifier = (binary_expression "uVar8 & 0x20" identifier & number_literal)) ;) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar7;" (assignment_expression "puVar2 = puVar7" identifier = identifier) ;) }))) (goto_statement "goto LAB_0004795c;" goto statement_identifier ;) })) (if_statement "if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }" if (parenthesized_expression "(*(int *)(puVar7 + 6) != 0)" ( (binary_expression "*(int *)(puVar7 + 6) != 0" (pointer_expression "*(int *)(puVar7 + 6)" * (cast_expression "(int *)(puVar7 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 6)" ( (binary_expression "puVar7 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_000459d0(puVar7);\n      }" { (expression_statement "FUN_000459d0(puVar7);" (call_expression "FUN_000459d0(puVar7)" identifier (argument_list "(puVar7)" ( identifier ))) ;) })) }) (else_clause "else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" else (compound_statement "{\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" { (expression_statement "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0)" identifier = (cast_expression "(code *)(PTR_LAB_000b55b4 + 0x59d0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b55b4 + 0x59d0)" ( (binary_expression "PTR_LAB_000b55b4 + 0x59d0" identifier + number_literal) )))) ;) (expression_statement "puVar7 = puVar2;" (assignment_expression "puVar7 = puVar2" identifier = identifier) ;) (while_statement "while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }" { (for_statement "for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }" for ( ; (comma_expression "puVar2 = puVar7, iVar15 = param_4, 0 < param_4" (assignment_expression "puVar2 = puVar7" identifier = identifier) , (comma_expression "iVar15 = param_4, 0 < param_4" (assignment_expression "iVar15 = param_4" identifier = identifier) , (binary_expression "0 < param_4" number_literal < identifier))) ; (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ) (compound_statement "{\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }" { (expression_statement "iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;" (assignment_expression "iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc" identifier = (binary_expression "*(int *)(puVar2 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar2 + 10)" * (cast_expression "(int *)(puVar2 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 10)" ( (binary_expression "puVar2 + 10" identifier + number_literal) )))) + (binary_expression "param_4 * 0xc" identifier * number_literal))) ;) (expression_statement "iVar11 = *(int *)(iVar6 + -0xc);" (assignment_expression "iVar11 = *(int *)(iVar6 + -0xc)" identifier = (pointer_expression "*(int *)(iVar6 + -0xc)" * (cast_expression "(int *)(iVar6 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + -0xc)" ( (binary_expression "iVar6 + -0xc" identifier + number_literal) ))))) ;) (if_statement "if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }" if (parenthesized_expression "((param_4 != 1) && (iVar11 == 0xdfff))" ( (binary_expression "(param_4 != 1) && (iVar11 == 0xdfff)" (parenthesized_expression "(param_4 != 1)" ( (binary_expression "param_4 != 1" identifier != number_literal) )) && (parenthesized_expression "(iVar11 == 0xdfff)" ( (binary_expression "iVar11 == 0xdfff" identifier == number_literal) ))) )) (compound_statement "{\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }" { (expression_statement "iVar11 = *(int *)(iVar6 + -0x18);" (assignment_expression "iVar11 = *(int *)(iVar6 + -0x18)" identifier = (pointer_expression "*(int *)(iVar6 + -0x18)" * (cast_expression "(int *)(iVar6 + -0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + -0x18)" ( (binary_expression "iVar6 + -0x18" identifier + number_literal) ))))) ;) })) (expression_statement "iVar6 = FUN_000442c4(param_2,iVar11);" (assignment_expression "iVar6 = FUN_000442c4(param_2,iVar11)" identifier = (call_expression "FUN_000442c4(param_2,iVar11)" identifier (argument_list "(param_2,iVar11)" ( identifier , identifier )))) ;) (if_statement "if (iVar6 != iVar10) goto LAB_00047698;" if (parenthesized_expression "(iVar6 != iVar10)" ( (binary_expression "iVar6 != iVar10" identifier != identifier) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "puVar7 = puVar2;" (assignment_expression "puVar7 = puVar2" identifier = identifier) ;) })) (expression_statement "iVar6 = param_3 + -1;" (assignment_expression "iVar6 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) (if_statement "if (param_3 <= -iVar1) goto LAB_00047698;" if (parenthesized_expression "(param_3 <= -iVar1)" ( (binary_expression "param_3 <= -iVar1" identifier <= (unary_expression "-iVar1" - identifier)) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);" (assignment_expression "puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0)" identifier = (cast_expression "(ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*pcVar16)(param_2,iVar6,0x16f0,0)" (parenthesized_expression "(*pcVar16)" ( (pointer_expression "*pcVar16" * identifier) )) (argument_list "(param_2,iVar6,0x16f0,0)" ( identifier , identifier , number_literal , number_literal ))))) ;) (expression_statement "param_4 = *(int *)(param_2 + 300);" (assignment_expression "param_4 = *(int *)(param_2 + 300)" identifier = (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) ))))) ;) (if_statement "if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }" if (parenthesized_expression "((*puVar7 & 0x20) != 0)" ( (binary_expression "(*puVar7 & 0x20) != 0" (parenthesized_expression "(*puVar7 & 0x20)" ( (binary_expression "*puVar7 & 0x20" (pointer_expression "*puVar7" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          param_4 = param_4 + -1;\n        }" { (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ;) })) (if_statement "if ((*puVar7 & 0x10) == 0) goto LAB_00047698;" if (parenthesized_expression "((*puVar7 & 0x10) == 0)" ( (binary_expression "(*puVar7 & 0x10) == 0" (parenthesized_expression "(*puVar7 & 0x10)" ( (binary_expression "*puVar7 & 0x10" (pointer_expression "*puVar7" * identifier) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;" (assignment_expression "iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc" identifier = (binary_expression "*(int *)(puVar7 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar7 + 10)" * (cast_expression "(int *)(puVar7 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 10)" ( (binary_expression "puVar7 + 10" identifier + number_literal) )))) + (binary_expression "param_4 * 0xc" identifier * number_literal))) ;) (expression_statement "iVar12 = *(int *)(iVar11 + -0xc);" (assignment_expression "iVar12 = *(int *)(iVar11 + -0xc)" identifier = (pointer_expression "*(int *)(iVar11 + -0xc)" * (cast_expression "(int *)(iVar11 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + -0xc)" ( (binary_expression "iVar11 + -0xc" identifier + number_literal) ))))) ;) (if_statement "if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }" if (parenthesized_expression "((1 < param_4) && (iVar12 == 0xdfff))" ( (binary_expression "(1 < param_4) && (iVar12 == 0xdfff)" (parenthesized_expression "(1 < param_4)" ( (binary_expression "1 < param_4" number_literal < identifier) )) && (parenthesized_expression "(iVar12 == 0xdfff)" ( (binary_expression "iVar12 == 0xdfff" identifier == number_literal) ))) )) (compound_statement "{\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }" { (expression_statement "iVar12 = *(int *)(iVar11 + -0x18);" (assignment_expression "iVar12 = *(int *)(iVar11 + -0x18)" identifier = (pointer_expression "*(int *)(iVar11 + -0x18)" * (cast_expression "(int *)(iVar11 + -0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + -0x18)" ( (binary_expression "iVar11 + -0x18" identifier + number_literal) ))))) ;) })) (expression_statement "iVar11 = FUN_000442c4(param_2,iVar12);" (assignment_expression "iVar11 = FUN_000442c4(param_2,iVar12)" identifier = (call_expression "FUN_000442c4(param_2,iVar12)" identifier (argument_list "(param_2,iVar12)" ( identifier , identifier )))) ;) (if_statement "if (iVar11 != iVar10) break;" if (parenthesized_expression "(iVar11 != iVar10)" ( (binary_expression "iVar11 != iVar10" identifier != identifier) )) (break_statement "break;" break ;)) (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ;) (expression_statement "param_3 = iVar6;" (assignment_expression "param_3 = iVar6" identifier = identifier) ;) (if_statement "if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }" if (parenthesized_expression "(*(int *)(puVar2 + 6) != 0)" ( (binary_expression "*(int *)(puVar2 + 6) != 0" (pointer_expression "*(int *)(puVar2 + 6)" * (cast_expression "(int *)(puVar2 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 6)" ( (binary_expression "puVar2 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n          (*pcVar5)(puVar2);\n        }" { (expression_statement "(*pcVar5)(puVar2);" (call_expression "(*pcVar5)(puVar2)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(puVar2)" ( identifier ))) ;) })) })) (if_statement "if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }" if (parenthesized_expression "(*(int *)(puVar7 + 6) != 0)" ( (binary_expression "*(int *)(puVar7 + 6) != 0" (pointer_expression "*(int *)(puVar7 + 6)" * (cast_expression "(int *)(puVar7 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 6)" ( (binary_expression "puVar7 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_000459d0(puVar7);\n      }" { (expression_statement "FUN_000459d0(puVar7);" (call_expression "FUN_000459d0(puVar7)" identifier (argument_list "(puVar7)" ( identifier ))) ;) })) }))) (goto_statement "goto LAB_00047698;" goto statement_identifier ;) })) (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" identifier = identifier) ;) (if_statement "if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }" if (parenthesized_expression "(iVar10 != 0)" ( (binary_expression "iVar10 != 0" identifier != number_literal) )) (compound_statement "{\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }" { (if_statement "if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }" if (parenthesized_expression "((iVar10 == 2) && (iVar15 = 0, param_5 != -1))" ( (binary_expression "(iVar10 == 2) && (iVar15 = 0, param_5 != -1)" (parenthesized_expression "(iVar10 == 2)" ( (binary_expression "iVar10 == 2" identifier == number_literal) )) && (parenthesized_expression "(iVar15 = 0, param_5 != -1)" ( (comma_expression "iVar15 = 0, param_5 != -1" (assignment_expression "iVar15 = 0" identifier = number_literal) , (binary_expression "param_5 != -1" identifier != number_literal)) ))) )) (compound_statement "{\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }" { (expression_statement "iVar15 = *(int *)(param_2 + 300) + -1;" (assignment_expression "iVar15 = *(int *)(param_2 + 300) + -1" identifier = (binary_expression "*(int *)(param_2 + 300) + -1" (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) )))) + number_literal)) ;) })) (goto_statement "goto LAB_00047698;" goto statement_identifier ;) })) (if_statement "if ((*puVar2 & 0x10) != 0) goto LAB_00047698;" if (parenthesized_expression "((*puVar2 & 0x10) != 0)" ( (binary_expression "(*puVar2 & 0x10) != 0" (parenthesized_expression "(*puVar2 & 0x10)" ( (binary_expression "*puVar2 & 0x10" (pointer_expression "*puVar2" * identifier) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "uVar13 = *(uint *)(puVar2 + 10);" (assignment_expression "uVar13 = *(uint *)(puVar2 + 10)" identifier = (pointer_expression "*(uint *)(puVar2 + 10)" * (cast_expression "(uint *)(puVar2 + 10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 10)" ( (binary_expression "puVar2 + 10" identifier + number_literal) ))))) ;) (expression_statement "uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;" (assignment_expression "uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc" identifier = (binary_expression "uVar13 + *(int *)(param_2 + 300) * 0xc" identifier + (binary_expression "*(int *)(param_2 + 300) * 0xc" (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) )))) * number_literal))) ;) (expression_statement "uVar8 = uVar14;" (assignment_expression "uVar8 = uVar14" identifier = identifier) ;) (if_statement "if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }" if (parenthesized_expression "(uVar13 < uVar14)" ( (binary_expression "uVar13 < uVar14" identifier < identifier) )) (compound_statement "{\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }" { (do_statement "do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);" do (compound_statement "{\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    }" { (if_statement "if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;" if (parenthesized_expression "(((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0))" ( (binary_expression "((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)" (parenthesized_expression "((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820))" ( (binary_expression "(*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)" (parenthesized_expression "(*(uint *)(uVar8 - 0xc) != 0x20)" ( (binary_expression "*(uint *)(uVar8 - 0xc) != 0x20" (pointer_expression "*(uint *)(uVar8 - 0xc)" * (cast_expression "(uint *)(uVar8 - 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar8 - 0xc)" ( (binary_expression "uVar8 - 0xc" identifier - number_literal) )))) != number_literal) )) && (parenthesized_expression "((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)" ( (binary_expression "(*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820" (parenthesized_expression "(*(uint *)(uVar8 - 0xc) & 0xfffffcff)" ( (binary_expression "*(uint *)(uVar8 - 0xc) & 0xfffffcff" (pointer_expression "*(uint *)(uVar8 - 0xc)" * (cast_expression "(uint *)(uVar8 - 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar8 - 0xc)" ( (binary_expression "uVar8 - 0xc" identifier - number_literal) )))) & number_literal) )) != number_literal) ))) )) || (parenthesized_expression "(uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)" ( (comma_expression "uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0" (assignment_expression "uVar3 = uVar8 - 0xc" identifier = (binary_expression "uVar8 - 0xc" identifier - number_literal)) , (binary_expression "*(int *)(uVar8 - 4) != 0" (pointer_expression "*(int *)(uVar8 - 4)" * (cast_expression "(int *)(uVar8 - 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar8 - 4)" ( (binary_expression "uVar8 - 4" identifier - number_literal) )))) != number_literal)) ))) )) (break_statement "break;" break ;)) (expression_statement "uVar8 = uVar3;" (assignment_expression "uVar8 = uVar3" identifier = identifier) ;) }) while (parenthesized_expression "(uVar13 < uVar3)" ( (binary_expression "uVar13 < uVar3" identifier < identifier) )) ;) (if_statement "if (uVar8 == uVar14) goto LAB_00047a9c;" if (parenthesized_expression "(uVar8 == uVar14)" ( (binary_expression "uVar8 == uVar14" identifier == identifier) )) (goto_statement "goto LAB_00047a9c;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }" else (compound_statement "{\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }" { (labeled_statement "LAB_00047a9c:\n    uVar8 = uVar14 - 0xc;" statement_identifier : (expression_statement "uVar8 = uVar14 - 0xc;" (assignment_expression "uVar8 = uVar14 - 0xc" identifier = (binary_expression "uVar14 - 0xc" identifier - number_literal)) ;)) }))) (expression_statement "iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;" (assignment_expression "iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555" identifier = (binary_expression "((int)(uVar8 - uVar13) >> 2) * -0x55555555" (parenthesized_expression "((int)(uVar8 - uVar13) >> 2)" ( (binary_expression "(int)(uVar8 - uVar13) >> 2" (cast_expression "(int)(uVar8 - uVar13)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar8 - uVar13)" ( (binary_expression "uVar8 - uVar13" identifier - identifier) ))) >> number_literal) )) * number_literal)) ;) (if_statement "if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }" if (parenthesized_expression "((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1))" ( (binary_expression "(iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)" (parenthesized_expression "(iVar1 <= param_4)" ( (binary_expression "iVar1 <= param_4" identifier <= identifier) )) && (parenthesized_expression "(iVar15 = iVar1, param_5 != -1)" ( (comma_expression "iVar15 = iVar1, param_5 != -1" (assignment_expression "iVar15 = iVar1" identifier = identifier) , (binary_expression "param_5 != -1" identifier != number_literal)) ))) )) (compound_statement "{\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }" { (expression_statement "iVar15 = *(int *)(param_2 + 300) + -1;" (assignment_expression "iVar15 = *(int *)(param_2 + 300) + -1" identifier = (binary_expression "*(int *)(param_2 + 300) + -1" (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) )))) + number_literal)) ;) })) (labeled_statement "LAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }" statement_identifier : (if_statement "if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }" if (parenthesized_expression "(*(int *)(puVar2 + 6) != 0)" ( (binary_expression "*(int *)(puVar2 + 6) != 0" (pointer_expression "*(int *)(puVar2 + 6)" * (cast_expression "(int *)(puVar2 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 6)" ( (binary_expression "puVar2 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }" { (expression_statement "FUN_000459d0(puVar2);" (call_expression "FUN_000459d0(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "*param_1 = param_3;" (assignment_expression "*param_1 = param_3" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[1] = iVar15;" (assignment_expression "param_1[1] = iVar15" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return param_1;" return identifier ;) }))) (expression_statement "*param_1 = param_3;" (assignment_expression "*param_1 = param_3" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[1] = iVar15;" (assignment_expression "param_1[1] = iVar15" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return param_1;" return identifier ;) })))
(translation_unit "/* WARNING: Enum "anon_enum_32": Some values do not have unique names */\n\npos sel_spread_half(Terminal *term,pos p,int dir)\n\n{\n  int iVar1;\n  termline *line;\n  termchar *ptVar2;\n  termchar *ptVar3;\n  tree234 *ptVar4;\n  code *pcVar5;\n  int iVar6;\n  int iVar7;\n  termline *ptVar8;\n  int in_v1;\n  int extraout_v1;\n  int extraout_v1_00;\n  int iVar9;\n  ulong uVar10;\n  int in_a2;\n  termchar *ptVar11;\n  tree234 *in_a3;\n  int iVar12;\n  uint uVar13;\n  termchar *ptVar14;\n  uint uVar15;\n  tree234 *ptVar16;\n  code *pcVar17;\n  pos pVar18;\n  undefined8 uVar19;\n  \n  iVar1 = sblines((Terminal *)dir);\n  pcVar17 = (code *)(PTR_DAT_000b55b4 + 0x71fc);\n  line = lineptr((Terminal *)dir,in_a2,0x16af,0);\n  iVar9 = *(int *)(dir + 0xe50);\n  if (iVar9 == 1) {\n    uVar10 = line->chars[(int)in_a3].chr;\n    if ((0 < (int)in_a3) && (uVar10 == 0xdfff)) {\n      uVar10 = (line->chars + (int)in_a3)[-1].chr;\n    }\n    iVar9 = wordtype((Terminal *)dir,uVar10);\n    iVar9 = (int)(short)iVar9;\n    if (p.y == 1) {\n      iVar6 = *(int *)(dir + 300);\n      uVar13 = (uint)line->lattr;\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar15 = uVar13 & 0x20;\nLAB_0004795c:\n      iVar12 = iVar1;\n      if (uVar15 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        ptVar16 = in_a3;\n        if (iVar1 <= (int)in_a3) break;\n        while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = in_a2 + 1;\n      ptVar16 = in_a3;\n      if ((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)) goto LAB_00047698;\n      uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0);\n      ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n      in_v1 = (int)uVar19;\n      iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr);\n      if (iVar6 == iVar9) {\n        in_a2 = iVar1;\n        if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }\n        goto LAB_0004795c;\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      ptVar8 = line;\n      while( true ) {\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    goto LAB_00047698;\n  }\n  ptVar16 = in_a3;\n  if (iVar9 != 0) {\n    in_v1 = p.y;\n    if ((iVar9 == 2) && (ptVar16 = (tree234 *)0x0, p.y != -1)) {\n      in_v1 = *(int *)(dir + 300);\n      ptVar16 = (tree234 *)(in_v1 + -1);\n    }\n    goto LAB_00047698;\n  }\n  if ((line->lattr & 0x10) != 0) goto LAB_00047698;\n  ptVar11 = line->chars;\n  ptVar14 = ptVar11 + *(int *)(dir + 300);\n  ptVar3 = ptVar14;\n  if (ptVar11 < ptVar14) {\n    do {\n      if (((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)) break;\n      ptVar3 = ptVar2;\n    } while (ptVar11 < ptVar2);\n    if (ptVar3 == ptVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    ptVar3 = ptVar14 + -1;\n  }\n  ptVar4 = (tree234 *)(((int)ptVar3 - (int)ptVar11 >> 2) * -0x55555555);\n  if (((int)ptVar4 <= (int)in_a3) && (in_v1 = -1, ptVar16 = ptVar4, p.y != -1)) {\n    ptVar16 = (tree234 *)(*(int *)(dir + 300) + -1);\n  }\nLAB_00047698:\n  if (line->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n    freeline(line);\n  }\n  term->compatibility_level = in_a2;\n  term->scrollback = ptVar16;\n  pVar18.y = (int)term;\n  pVar18.x = in_v1;\n  return pVar18;\n}\n\n" comment (function_definition "pos sel_spread_half(Terminal *term,pos p,int dir)\n\n{\n  int iVar1;\n  termline *line;\n  termchar *ptVar2;\n  termchar *ptVar3;\n  tree234 *ptVar4;\n  code *pcVar5;\n  int iVar6;\n  int iVar7;\n  termline *ptVar8;\n  int in_v1;\n  int extraout_v1;\n  int extraout_v1_00;\n  int iVar9;\n  ulong uVar10;\n  int in_a2;\n  termchar *ptVar11;\n  tree234 *in_a3;\n  int iVar12;\n  uint uVar13;\n  termchar *ptVar14;\n  uint uVar15;\n  tree234 *ptVar16;\n  code *pcVar17;\n  pos pVar18;\n  undefined8 uVar19;\n  \n  iVar1 = sblines((Terminal *)dir);\n  pcVar17 = (code *)(PTR_DAT_000b55b4 + 0x71fc);\n  line = lineptr((Terminal *)dir,in_a2,0x16af,0);\n  iVar9 = *(int *)(dir + 0xe50);\n  if (iVar9 == 1) {\n    uVar10 = line->chars[(int)in_a3].chr;\n    if ((0 < (int)in_a3) && (uVar10 == 0xdfff)) {\n      uVar10 = (line->chars + (int)in_a3)[-1].chr;\n    }\n    iVar9 = wordtype((Terminal *)dir,uVar10);\n    iVar9 = (int)(short)iVar9;\n    if (p.y == 1) {\n      iVar6 = *(int *)(dir + 300);\n      uVar13 = (uint)line->lattr;\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar15 = uVar13 & 0x20;\nLAB_0004795c:\n      iVar12 = iVar1;\n      if (uVar15 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        ptVar16 = in_a3;\n        if (iVar1 <= (int)in_a3) break;\n        while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = in_a2 + 1;\n      ptVar16 = in_a3;\n      if ((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)) goto LAB_00047698;\n      uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0);\n      ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n      in_v1 = (int)uVar19;\n      iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr);\n      if (iVar6 == iVar9) {\n        in_a2 = iVar1;\n        if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }\n        goto LAB_0004795c;\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      ptVar8 = line;\n      while( true ) {\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    goto LAB_00047698;\n  }\n  ptVar16 = in_a3;\n  if (iVar9 != 0) {\n    in_v1 = p.y;\n    if ((iVar9 == 2) && (ptVar16 = (tree234 *)0x0, p.y != -1)) {\n      in_v1 = *(int *)(dir + 300);\n      ptVar16 = (tree234 *)(in_v1 + -1);\n    }\n    goto LAB_00047698;\n  }\n  if ((line->lattr & 0x10) != 0) goto LAB_00047698;\n  ptVar11 = line->chars;\n  ptVar14 = ptVar11 + *(int *)(dir + 300);\n  ptVar3 = ptVar14;\n  if (ptVar11 < ptVar14) {\n    do {\n      if (((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)) break;\n      ptVar3 = ptVar2;\n    } while (ptVar11 < ptVar2);\n    if (ptVar3 == ptVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    ptVar3 = ptVar14 + -1;\n  }\n  ptVar4 = (tree234 *)(((int)ptVar3 - (int)ptVar11 >> 2) * -0x55555555);\n  if (((int)ptVar4 <= (int)in_a3) && (in_v1 = -1, ptVar16 = ptVar4, p.y != -1)) {\n    ptVar16 = (tree234 *)(*(int *)(dir + 300) + -1);\n  }\nLAB_00047698:\n  if (line->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n    freeline(line);\n  }\n  term->compatibility_level = in_a2;\n  term->scrollback = ptVar16;\n  pVar18.y = (int)term;\n  pVar18.x = in_v1;\n  return pVar18;\n}" type_identifier (function_declarator "sel_spread_half(Terminal *term,pos p,int dir)" identifier (parameter_list "(Terminal *term,pos p,int dir)" ( (parameter_declaration "Terminal *term" type_identifier (pointer_declarator "*term" * identifier)) , (parameter_declaration "pos p" type_identifier identifier) , (parameter_declaration "int dir" primitive_type identifier) ))) (compound_statement "{\n  int iVar1;\n  termline *line;\n  termchar *ptVar2;\n  termchar *ptVar3;\n  tree234 *ptVar4;\n  code *pcVar5;\n  int iVar6;\n  int iVar7;\n  termline *ptVar8;\n  int in_v1;\n  int extraout_v1;\n  int extraout_v1_00;\n  int iVar9;\n  ulong uVar10;\n  int in_a2;\n  termchar *ptVar11;\n  tree234 *in_a3;\n  int iVar12;\n  uint uVar13;\n  termchar *ptVar14;\n  uint uVar15;\n  tree234 *ptVar16;\n  code *pcVar17;\n  pos pVar18;\n  undefined8 uVar19;\n  \n  iVar1 = sblines((Terminal *)dir);\n  pcVar17 = (code *)(PTR_DAT_000b55b4 + 0x71fc);\n  line = lineptr((Terminal *)dir,in_a2,0x16af,0);\n  iVar9 = *(int *)(dir + 0xe50);\n  if (iVar9 == 1) {\n    uVar10 = line->chars[(int)in_a3].chr;\n    if ((0 < (int)in_a3) && (uVar10 == 0xdfff)) {\n      uVar10 = (line->chars + (int)in_a3)[-1].chr;\n    }\n    iVar9 = wordtype((Terminal *)dir,uVar10);\n    iVar9 = (int)(short)iVar9;\n    if (p.y == 1) {\n      iVar6 = *(int *)(dir + 300);\n      uVar13 = (uint)line->lattr;\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar15 = uVar13 & 0x20;\nLAB_0004795c:\n      iVar12 = iVar1;\n      if (uVar15 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        ptVar16 = in_a3;\n        if (iVar1 <= (int)in_a3) break;\n        while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = in_a2 + 1;\n      ptVar16 = in_a3;\n      if ((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)) goto LAB_00047698;\n      uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0);\n      ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n      in_v1 = (int)uVar19;\n      iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr);\n      if (iVar6 == iVar9) {\n        in_a2 = iVar1;\n        if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }\n        goto LAB_0004795c;\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      ptVar8 = line;\n      while( true ) {\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    goto LAB_00047698;\n  }\n  ptVar16 = in_a3;\n  if (iVar9 != 0) {\n    in_v1 = p.y;\n    if ((iVar9 == 2) && (ptVar16 = (tree234 *)0x0, p.y != -1)) {\n      in_v1 = *(int *)(dir + 300);\n      ptVar16 = (tree234 *)(in_v1 + -1);\n    }\n    goto LAB_00047698;\n  }\n  if ((line->lattr & 0x10) != 0) goto LAB_00047698;\n  ptVar11 = line->chars;\n  ptVar14 = ptVar11 + *(int *)(dir + 300);\n  ptVar3 = ptVar14;\n  if (ptVar11 < ptVar14) {\n    do {\n      if (((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)) break;\n      ptVar3 = ptVar2;\n    } while (ptVar11 < ptVar2);\n    if (ptVar3 == ptVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    ptVar3 = ptVar14 + -1;\n  }\n  ptVar4 = (tree234 *)(((int)ptVar3 - (int)ptVar11 >> 2) * -0x55555555);\n  if (((int)ptVar4 <= (int)in_a3) && (in_v1 = -1, ptVar16 = ptVar4, p.y != -1)) {\n    ptVar16 = (tree234 *)(*(int *)(dir + 300) + -1);\n  }\nLAB_00047698:\n  if (line->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n    freeline(line);\n  }\n  term->compatibility_level = in_a2;\n  term->scrollback = ptVar16;\n  pVar18.y = (int)term;\n  pVar18.x = in_v1;\n  return pVar18;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "termline *line;" type_identifier (pointer_declarator "*line" * identifier) ;) (declaration "termchar *ptVar2;" type_identifier (pointer_declarator "*ptVar2" * identifier) ;) (declaration "termchar *ptVar3;" type_identifier (pointer_declarator "*ptVar3" * identifier) ;) (declaration "tree234 *ptVar4;" type_identifier (pointer_declarator "*ptVar4" * identifier) ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "termline *ptVar8;" type_identifier (pointer_declarator "*ptVar8" * identifier) ;) (declaration "int in_v1;" primitive_type identifier ;) (declaration "int extraout_v1;" primitive_type identifier ;) (declaration "int extraout_v1_00;" primitive_type identifier ;) (declaration "int iVar9;" primitive_type identifier ;) (declaration "ulong uVar10;" type_identifier identifier ;) (declaration "int in_a2;" primitive_type identifier ;) (declaration "termchar *ptVar11;" type_identifier (pointer_declarator "*ptVar11" * identifier) ;) (declaration "tree234 *in_a3;" type_identifier (pointer_declarator "*in_a3" * identifier) ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "termchar *ptVar14;" type_identifier (pointer_declarator "*ptVar14" * identifier) ;) (declaration "uint uVar15;" type_identifier identifier ;) (declaration "tree234 *ptVar16;" type_identifier (pointer_declarator "*ptVar16" * identifier) ;) (declaration "code *pcVar17;" type_identifier (pointer_declarator "*pcVar17" * identifier) ;) (declaration "pos pVar18;" type_identifier identifier ;) (declaration "undefined8 uVar19;" type_identifier identifier ;) (expression_statement "iVar1 = sblines((Terminal *)dir);" (assignment_expression "iVar1 = sblines((Terminal *)dir)" identifier = (call_expression "sblines((Terminal *)dir)" identifier (argument_list "((Terminal *)dir)" ( (cast_expression "(Terminal *)dir" ( (type_descriptor "Terminal *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (expression_statement "pcVar17 = (code *)(PTR_DAT_000b55b4 + 0x71fc);" (assignment_expression "pcVar17 = (code *)(PTR_DAT_000b55b4 + 0x71fc)" identifier = (cast_expression "(code *)(PTR_DAT_000b55b4 + 0x71fc)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000b55b4 + 0x71fc)" ( (binary_expression "PTR_DAT_000b55b4 + 0x71fc" identifier + number_literal) )))) ;) (expression_statement "line = lineptr((Terminal *)dir,in_a2,0x16af,0);" (assignment_expression "line = lineptr((Terminal *)dir,in_a2,0x16af,0)" identifier = (call_expression "lineptr((Terminal *)dir,in_a2,0x16af,0)" identifier (argument_list "((Terminal *)dir,in_a2,0x16af,0)" ( (cast_expression "(Terminal *)dir" ( (type_descriptor "Terminal *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier , number_literal , number_literal )))) ;) (expression_statement "iVar9 = *(int *)(dir + 0xe50);" (assignment_expression "iVar9 = *(int *)(dir + 0xe50)" identifier = (pointer_expression "*(int *)(dir + 0xe50)" * (cast_expression "(int *)(dir + 0xe50)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(dir + 0xe50)" ( (binary_expression "dir + 0xe50" identifier + number_literal) ))))) ;) (if_statement "if (iVar9 == 1) {\n    uVar10 = line->chars[(int)in_a3].chr;\n    if ((0 < (int)in_a3) && (uVar10 == 0xdfff)) {\n      uVar10 = (line->chars + (int)in_a3)[-1].chr;\n    }\n    iVar9 = wordtype((Terminal *)dir,uVar10);\n    iVar9 = (int)(short)iVar9;\n    if (p.y == 1) {\n      iVar6 = *(int *)(dir + 300);\n      uVar13 = (uint)line->lattr;\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar15 = uVar13 & 0x20;\nLAB_0004795c:\n      iVar12 = iVar1;\n      if (uVar15 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        ptVar16 = in_a3;\n        if (iVar1 <= (int)in_a3) break;\n        while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = in_a2 + 1;\n      ptVar16 = in_a3;\n      if ((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)) goto LAB_00047698;\n      uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0);\n      ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n      in_v1 = (int)uVar19;\n      iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr);\n      if (iVar6 == iVar9) {\n        in_a2 = iVar1;\n        if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }\n        goto LAB_0004795c;\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      ptVar8 = line;\n      while( true ) {\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    goto LAB_00047698;\n  }" if (parenthesized_expression "(iVar9 == 1)" ( (binary_expression "iVar9 == 1" identifier == number_literal) )) (compound_statement "{\n    uVar10 = line->chars[(int)in_a3].chr;\n    if ((0 < (int)in_a3) && (uVar10 == 0xdfff)) {\n      uVar10 = (line->chars + (int)in_a3)[-1].chr;\n    }\n    iVar9 = wordtype((Terminal *)dir,uVar10);\n    iVar9 = (int)(short)iVar9;\n    if (p.y == 1) {\n      iVar6 = *(int *)(dir + 300);\n      uVar13 = (uint)line->lattr;\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar15 = uVar13 & 0x20;\nLAB_0004795c:\n      iVar12 = iVar1;\n      if (uVar15 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        ptVar16 = in_a3;\n        if (iVar1 <= (int)in_a3) break;\n        while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = in_a2 + 1;\n      ptVar16 = in_a3;\n      if ((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)) goto LAB_00047698;\n      uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0);\n      ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n      in_v1 = (int)uVar19;\n      iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr);\n      if (iVar6 == iVar9) {\n        in_a2 = iVar1;\n        if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }\n        goto LAB_0004795c;\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      ptVar8 = line;\n      while( true ) {\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    goto LAB_00047698;\n  }" { (expression_statement "uVar10 = line->chars[(int)in_a3].chr;" (assignment_expression "uVar10 = line->chars[(int)in_a3].chr" identifier = (field_expression "line->chars[(int)in_a3].chr" (subscript_expression "line->chars[(int)in_a3]" (field_expression "line->chars" identifier -> field_identifier) [ (cast_expression "(int)in_a3" ( (type_descriptor "int" primitive_type) ) identifier) ]) . field_identifier)) ;) (if_statement "if ((0 < (int)in_a3) && (uVar10 == 0xdfff)) {\n      uVar10 = (line->chars + (int)in_a3)[-1].chr;\n    }" if (parenthesized_expression "((0 < (int)in_a3) && (uVar10 == 0xdfff))" ( (binary_expression "(0 < (int)in_a3) && (uVar10 == 0xdfff)" (parenthesized_expression "(0 < (int)in_a3)" ( (binary_expression "0 < (int)in_a3" number_literal < (cast_expression "(int)in_a3" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(uVar10 == 0xdfff)" ( (binary_expression "uVar10 == 0xdfff" identifier == number_literal) ))) )) (compound_statement "{\n      uVar10 = (line->chars + (int)in_a3)[-1].chr;\n    }" { (expression_statement "uVar10 = (line->chars + (int)in_a3)[-1].chr;" (assignment_expression "uVar10 = (line->chars + (int)in_a3)[-1].chr" identifier = (field_expression "(line->chars + (int)in_a3)[-1].chr" (subscript_expression "(line->chars + (int)in_a3)[-1]" (parenthesized_expression "(line->chars + (int)in_a3)" ( (binary_expression "line->chars + (int)in_a3" (field_expression "line->chars" identifier -> field_identifier) + (cast_expression "(int)in_a3" ( (type_descriptor "int" primitive_type) ) identifier)) )) [ number_literal ]) . field_identifier)) ;) })) (expression_statement "iVar9 = wordtype((Terminal *)dir,uVar10);" (assignment_expression "iVar9 = wordtype((Terminal *)dir,uVar10)" identifier = (call_expression "wordtype((Terminal *)dir,uVar10)" identifier (argument_list "((Terminal *)dir,uVar10)" ( (cast_expression "(Terminal *)dir" ( (type_descriptor "Terminal *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (expression_statement "iVar9 = (int)(short)iVar9;" (assignment_expression "iVar9 = (int)(short)iVar9" identifier = (cast_expression "(int)(short)iVar9" ( (type_descriptor "int" primitive_type) ) (cast_expression "(short)iVar9" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier))) ;) (if_statement "if (p.y == 1) {\n      iVar6 = *(int *)(dir + 300);\n      uVar13 = (uint)line->lattr;\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar15 = uVar13 & 0x20;\nLAB_0004795c:\n      iVar12 = iVar1;\n      if (uVar15 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        ptVar16 = in_a3;\n        if (iVar1 <= (int)in_a3) break;\n        while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = in_a2 + 1;\n      ptVar16 = in_a3;\n      if ((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)) goto LAB_00047698;\n      uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0);\n      ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n      in_v1 = (int)uVar19;\n      iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr);\n      if (iVar6 == iVar9) {\n        in_a2 = iVar1;\n        if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }\n        goto LAB_0004795c;\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      ptVar8 = line;\n      while( true ) {\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }" if (parenthesized_expression "(p.y == 1)" ( (binary_expression "p.y == 1" (field_expression "p.y" identifier . field_identifier) == number_literal) )) (compound_statement "{\n      iVar6 = *(int *)(dir + 300);\n      uVar13 = (uint)line->lattr;\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar15 = uVar13 & 0x20;\nLAB_0004795c:\n      iVar12 = iVar1;\n      if (uVar15 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        ptVar16 = in_a3;\n        if (iVar1 <= (int)in_a3) break;\n        while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = in_a2 + 1;\n      ptVar16 = in_a3;\n      if ((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)) goto LAB_00047698;\n      uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0);\n      ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n      in_v1 = (int)uVar19;\n      iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr);\n      if (iVar6 == iVar9) {\n        in_a2 = iVar1;\n        if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }\n        goto LAB_0004795c;\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }" { (expression_statement "iVar6 = *(int *)(dir + 300);" (assignment_expression "iVar6 = *(int *)(dir + 300)" identifier = (pointer_expression "*(int *)(dir + 300)" * (cast_expression "(int *)(dir + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(dir + 300)" ( (binary_expression "dir + 300" identifier + number_literal) ))))) ;) (expression_statement "uVar13 = (uint)line->lattr;" (assignment_expression "uVar13 = (uint)line->lattr" identifier = (cast_expression "(uint)line->lattr" ( (type_descriptor "uint" type_identifier) ) (field_expression "line->lattr" identifier -> field_identifier))) ;) (expression_statement "pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);" (assignment_expression "pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0)" identifier = (cast_expression "(code *)(PTR_DAT_000b55b4 + 0x59d0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000b55b4 + 0x59d0)" ( (binary_expression "PTR_DAT_000b55b4 + 0x59d0" identifier + number_literal) )))) ;) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar13 & 0x20;" (assignment_expression "uVar15 = uVar13 & 0x20" identifier = (binary_expression "uVar13 & 0x20" identifier & number_literal)) ;) (labeled_statement "LAB_0004795c:\n      iVar12 = iVar1;" statement_identifier : (expression_statement "iVar12 = iVar1;" (assignment_expression "iVar12 = iVar1" identifier = identifier) ;)) (if_statement "if (uVar15 == 0) goto LAB_00047968;" if (parenthesized_expression "(uVar15 == 0)" ( (binary_expression "uVar15 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00047968;" goto statement_identifier ;)) (while_statement "while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        ptVar16 = in_a3;\n        if (iVar1 <= (int)in_a3) break;\n        while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        ptVar16 = in_a3;\n        if (iVar1 <= (int)in_a3) break;\n        while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }\n      }" { (expression_statement "iVar1 = iVar6 + -2;" (assignment_expression "iVar1 = iVar6 + -2" identifier = (binary_expression "iVar6 + -2" identifier + number_literal)) ;) (labeled_statement "LAB_00047968:\n        ptVar16 = in_a3;" statement_identifier : (expression_statement "ptVar16 = in_a3;" (assignment_expression "ptVar16 = in_a3" identifier = identifier) ;)) (if_statement "if (iVar1 <= (int)in_a3) break;" if (parenthesized_expression "(iVar1 <= (int)in_a3)" ( (binary_expression "iVar1 <= (int)in_a3" identifier <= (cast_expression "(int)in_a3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (break_statement "break;" break ;)) (while_statement "while( true ) {\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          in_a3 = (tree234 *)((int)&ptVar16->root + 1);\n          uVar10 = line->chars[(int)in_a3].chr;\n          if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }\n          iVar1 = wordtype((Terminal *)dir,uVar10);\n          if (iVar1 != iVar9) goto LAB_00047698;\n          if (uVar15 != 0) break;\n          ptVar16 = in_a3;\n          if (iVar12 <= (int)in_a3) goto LAB_000479d0;\n        }" { (expression_statement "in_a3 = (tree234 *)((int)&ptVar16->root + 1);" (assignment_expression "in_a3 = (tree234 *)((int)&ptVar16->root + 1)" identifier = (cast_expression "(tree234 *)((int)&ptVar16->root + 1)" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&ptVar16->root + 1)" ( (binary_expression "(int)&ptVar16->root + 1" (cast_expression "(int)&ptVar16->root" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&ptVar16->root" & (field_expression "ptVar16->root" identifier -> field_identifier))) + number_literal) )))) ;) (expression_statement "uVar10 = line->chars[(int)in_a3].chr;" (assignment_expression "uVar10 = line->chars[(int)in_a3].chr" identifier = (field_expression "line->chars[(int)in_a3].chr" (subscript_expression "line->chars[(int)in_a3]" (field_expression "line->chars" identifier -> field_identifier) [ (cast_expression "(int)in_a3" ( (type_descriptor "int" primitive_type) ) identifier) ]) . field_identifier)) ;) (if_statement "if ((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }" if (parenthesized_expression "((-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff))" ( (binary_expression "(-1 < (int)ptVar16) && (in_v1 = 0xdfff, uVar10 == 0xdfff)" (parenthesized_expression "(-1 < (int)ptVar16)" ( (binary_expression "-1 < (int)ptVar16" number_literal < (cast_expression "(int)ptVar16" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(in_v1 = 0xdfff, uVar10 == 0xdfff)" ( (comma_expression "in_v1 = 0xdfff, uVar10 == 0xdfff" (assignment_expression "in_v1 = 0xdfff" identifier = number_literal) , (binary_expression "uVar10 == 0xdfff" identifier == number_literal)) ))) )) (compound_statement "{\n            uVar10 = (line->chars + (int)in_a3)[-1].chr;\n          }" { (expression_statement "uVar10 = (line->chars + (int)in_a3)[-1].chr;" (assignment_expression "uVar10 = (line->chars + (int)in_a3)[-1].chr" identifier = (field_expression "(line->chars + (int)in_a3)[-1].chr" (subscript_expression "(line->chars + (int)in_a3)[-1]" (parenthesized_expression "(line->chars + (int)in_a3)" ( (binary_expression "line->chars + (int)in_a3" (field_expression "line->chars" identifier -> field_identifier) + (cast_expression "(int)in_a3" ( (type_descriptor "int" primitive_type) ) identifier)) )) [ number_literal ]) . field_identifier)) ;) })) (expression_statement "iVar1 = wordtype((Terminal *)dir,uVar10);" (assignment_expression "iVar1 = wordtype((Terminal *)dir,uVar10)" identifier = (call_expression "wordtype((Terminal *)dir,uVar10)" identifier (argument_list "((Terminal *)dir,uVar10)" ( (cast_expression "(Terminal *)dir" ( (type_descriptor "Terminal *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar1 != iVar9) goto LAB_00047698;" if (parenthesized_expression "(iVar1 != iVar9)" ( (binary_expression "iVar1 != iVar9" identifier != identifier) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (if_statement "if (uVar15 != 0) break;" if (parenthesized_expression "(uVar15 != 0)" ( (binary_expression "uVar15 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "ptVar16 = in_a3;" (assignment_expression "ptVar16 = in_a3" identifier = identifier) ;) (if_statement "if (iVar12 <= (int)in_a3) goto LAB_000479d0;" if (parenthesized_expression "(iVar12 <= (int)in_a3)" ( (binary_expression "iVar12 <= (int)in_a3" identifier <= (cast_expression "(int)in_a3" ( (type_descriptor "int" primitive_type) ) identifier)) )) (goto_statement "goto LAB_000479d0;" goto statement_identifier ;)) })) })) (labeled_statement "LAB_000479d0:\n      iVar1 = in_a2 + 1;" statement_identifier : (expression_statement "iVar1 = in_a2 + 1;" (assignment_expression "iVar1 = in_a2 + 1" identifier = (binary_expression "in_a2 + 1" identifier + number_literal)) ;)) (expression_statement "ptVar16 = in_a3;" (assignment_expression "ptVar16 = in_a3" identifier = identifier) ;) (if_statement "if ((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)) goto LAB_00047698;" if (parenthesized_expression "((*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0))" ( (binary_expression "(*(int *)(dir + 0x128) <= iVar1) || ((uVar13 & 0x10) == 0)" (parenthesized_expression "(*(int *)(dir + 0x128) <= iVar1)" ( (binary_expression "*(int *)(dir + 0x128) <= iVar1" (pointer_expression "*(int *)(dir + 0x128)" * (cast_expression "(int *)(dir + 0x128)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(dir + 0x128)" ( (binary_expression "dir + 0x128" identifier + number_literal) )))) <= identifier) )) || (parenthesized_expression "((uVar13 & 0x10) == 0)" ( (binary_expression "(uVar13 & 0x10) == 0" (parenthesized_expression "(uVar13 & 0x10)" ( (binary_expression "uVar13 & 0x10" identifier & number_literal) )) == number_literal) ))) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0);" (assignment_expression "uVar19 = (*pcVar17)(dir,iVar1,0x16d5,0)" identifier = (call_expression "(*pcVar17)(dir,iVar1,0x16d5,0)" (parenthesized_expression "(*pcVar17)" ( (pointer_expression "*pcVar17" * identifier) )) (argument_list "(dir,iVar1,0x16d5,0)" ( identifier , identifier , number_literal , number_literal )))) ;) (expression_statement "ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);" (assignment_expression "ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20)" identifier = (cast_expression "(termline *)((ulonglong)uVar19 >> 0x20)" ( (type_descriptor "termline *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulonglong)uVar19 >> 0x20)" ( (binary_expression "(ulonglong)uVar19 >> 0x20" (cast_expression "(ulonglong)uVar19" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "in_v1 = (int)uVar19;" (assignment_expression "in_v1 = (int)uVar19" identifier = (cast_expression "(int)uVar19" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr);" (assignment_expression "iVar6 = wordtype((Terminal *)dir,ptVar8->chars->chr)" identifier = (call_expression "wordtype((Terminal *)dir,ptVar8->chars->chr)" identifier (argument_list "((Terminal *)dir,ptVar8->chars->chr)" ( (cast_expression "(Terminal *)dir" ( (type_descriptor "Terminal *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (field_expression "ptVar8->chars->chr" (field_expression "ptVar8->chars" identifier -> field_identifier) -> field_identifier) )))) ;) (if_statement "if (iVar6 == iVar9) {\n        in_a2 = iVar1;\n        if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }\n        goto LAB_0004795c;\n      }" if (parenthesized_expression "(iVar6 == iVar9)" ( (binary_expression "iVar6 == iVar9" identifier == identifier) )) (compound_statement "{\n        in_a2 = iVar1;\n        if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }\n        goto LAB_0004795c;\n      }" { (expression_statement "in_a2 = iVar1;" (assignment_expression "in_a2 = iVar1" identifier = identifier) ;) (if_statement "if (line->temporary == 0) {\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }\n        else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }" if (parenthesized_expression "(line->temporary == 0)" ( (binary_expression "line->temporary == 0" (field_expression "line->temporary" identifier -> field_identifier) == number_literal) )) (compound_statement "{\n          iVar6 = *(int *)(dir + 300);\n          uVar13 = (uint)ptVar8->lattr;\n          iVar1 = iVar6 + -1;\n          uVar15 = uVar13 & 0x20;\n          in_a3 = (tree234 *)0x0;\n          line = ptVar8;\n        }" { (expression_statement "iVar6 = *(int *)(dir + 300);" (assignment_expression "iVar6 = *(int *)(dir + 300)" identifier = (pointer_expression "*(int *)(dir + 300)" * (cast_expression "(int *)(dir + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(dir + 300)" ( (binary_expression "dir + 300" identifier + number_literal) ))))) ;) (expression_statement "uVar13 = (uint)ptVar8->lattr;" (assignment_expression "uVar13 = (uint)ptVar8->lattr" identifier = (cast_expression "(uint)ptVar8->lattr" ( (type_descriptor "uint" type_identifier) ) (field_expression "ptVar8->lattr" identifier -> field_identifier))) ;) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar15 = uVar13 & 0x20;" (assignment_expression "uVar15 = uVar13 & 0x20" identifier = (binary_expression "uVar13 & 0x20" identifier & number_literal)) ;) (expression_statement "in_a3 = (tree234 *)0x0;" (assignment_expression "in_a3 = (tree234 *)0x0" identifier = (cast_expression "(tree234 *)0x0" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "line = ptVar8;" (assignment_expression "line = ptVar8" identifier = identifier) ;) }) (else_clause "else {\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }" else (compound_statement "{\n          (*pcVar5)(line);\n          in_a3 = (tree234 *)0x0;\n          uVar13 = (uint)ptVar8->lattr;\n          iVar6 = *(int *)(dir + 300);\n          uVar15 = uVar13 & 0x20;\n          iVar1 = iVar6 + -1;\n          in_v1 = extraout_v1_00;\n          line = ptVar8;\n        }" { (expression_statement "(*pcVar5)(line);" (call_expression "(*pcVar5)(line)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(line)" ( identifier ))) ;) (expression_statement "in_a3 = (tree234 *)0x0;" (assignment_expression "in_a3 = (tree234 *)0x0" identifier = (cast_expression "(tree234 *)0x0" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar13 = (uint)ptVar8->lattr;" (assignment_expression "uVar13 = (uint)ptVar8->lattr" identifier = (cast_expression "(uint)ptVar8->lattr" ( (type_descriptor "uint" type_identifier) ) (field_expression "ptVar8->lattr" identifier -> field_identifier))) ;) (expression_statement "iVar6 = *(int *)(dir + 300);" (assignment_expression "iVar6 = *(int *)(dir + 300)" identifier = (pointer_expression "*(int *)(dir + 300)" * (cast_expression "(int *)(dir + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(dir + 300)" ( (binary_expression "dir + 300" identifier + number_literal) ))))) ;) (expression_statement "uVar15 = uVar13 & 0x20;" (assignment_expression "uVar15 = uVar13 & 0x20" identifier = (binary_expression "uVar13 & 0x20" identifier & number_literal)) ;) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "in_v1 = extraout_v1_00;" (assignment_expression "in_v1 = extraout_v1_00" identifier = identifier) ;) (expression_statement "line = ptVar8;" (assignment_expression "line = ptVar8" identifier = identifier) ;) }))) (goto_statement "goto LAB_0004795c;" goto statement_identifier ;) })) (if_statement "if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }" if (parenthesized_expression "(ptVar8->temporary != 0)" ( (binary_expression "ptVar8->temporary != 0" (field_expression "ptVar8->temporary" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }" { comment (expression_statement "freeline(ptVar8);" (call_expression "freeline(ptVar8)" identifier (argument_list "(ptVar8)" ( identifier ))) ;) })) }) (else_clause "else {\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      ptVar8 = line;\n      while( true ) {\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }" else (compound_statement "{\n      pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);\n      ptVar8 = line;\n      while( true ) {\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }\n      if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }\n    }" { (expression_statement "pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0);" (assignment_expression "pcVar5 = (code *)(PTR_DAT_000b55b4 + 0x59d0)" identifier = (cast_expression "(code *)(PTR_DAT_000b55b4 + 0x59d0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_000b55b4 + 0x59d0)" ( (binary_expression "PTR_DAT_000b55b4 + 0x59d0" identifier + number_literal) )))) ;) (expression_statement "ptVar8 = line;" (assignment_expression "ptVar8 = line" identifier = identifier) ;) (while_statement "while( true ) {\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }\n        iVar6 = in_a2 + -1;\n        if (in_a2 <= -iVar1) goto LAB_00047698;\n        uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);\n        ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);\n        in_v1 = (int)uVar19;\n        iVar12 = *(int *)(dir + 300);\n        if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }\n        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;\n        uVar10 = ptVar8->chars[iVar12 + -1].chr;\n        if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }\n        iVar7 = wordtype((Terminal *)dir,uVar10);\n        if (iVar7 != iVar9) break;\n        in_a3 = (tree234 *)(iVar12 + -1);\n        in_a2 = iVar6;\n        if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }\n      }" { (for_statement "for (; line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3;\n            in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)) {\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }" for ( ; (comma_expression "line = ptVar8, ptVar16 = in_a3, 0 < (int)in_a3" (assignment_expression "line = ptVar8" identifier = identifier) , (comma_expression "ptVar16 = in_a3, 0 < (int)in_a3" (assignment_expression "ptVar16 = in_a3" identifier = identifier) , (binary_expression "0 < (int)in_a3" number_literal < (cast_expression "(int)in_a3" ( (type_descriptor "int" primitive_type) ) identifier)))) ; (assignment_expression "in_a3 = (tree234 *)((int)&in_a3[-1].cmp + 3)" identifier = (cast_expression "(tree234 *)((int)&in_a3[-1].cmp + 3)" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&in_a3[-1].cmp + 3)" ( (binary_expression "(int)&in_a3[-1].cmp + 3" (cast_expression "(int)&in_a3[-1].cmp" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&in_a3[-1].cmp" & (field_expression "in_a3[-1].cmp" (subscript_expression "in_a3[-1]" identifier [ number_literal ]) . field_identifier))) + number_literal) )))) ) (compound_statement "{\n          in_v1 = 1;\n          uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;\n          if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }\n          iVar6 = wordtype((Terminal *)dir,uVar10);\n          if (iVar6 != iVar9) goto LAB_00047698;\n          ptVar8 = line;\n        }" { (expression_statement "in_v1 = 1;" (assignment_expression "in_v1 = 1" identifier = number_literal) ;) (expression_statement "uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr;" (assignment_expression "uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr" identifier = (field_expression "line->chars[(int)((int)&in_a3[-1].cmp + 3)].chr" (subscript_expression "line->chars[(int)((int)&in_a3[-1].cmp + 3)]" (field_expression "line->chars" identifier -> field_identifier) [ (cast_expression "(int)((int)&in_a3[-1].cmp + 3)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((int)&in_a3[-1].cmp + 3)" ( (binary_expression "(int)&in_a3[-1].cmp + 3" (cast_expression "(int)&in_a3[-1].cmp" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&in_a3[-1].cmp" & (field_expression "in_a3[-1].cmp" (subscript_expression "in_a3[-1]" identifier [ number_literal ]) . field_identifier))) + number_literal) ))) ]) . field_identifier)) ;) (if_statement "if ((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }" if (parenthesized_expression "((in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff))" ( (binary_expression "(in_a3 != (tree234 *)0x1) && (in_v1 = 0xdfff, uVar10 == 0xdfff)" (parenthesized_expression "(in_a3 != (tree234 *)0x1)" ( (binary_expression "in_a3 != (tree234 *)0x1" identifier != (cast_expression "(tree234 *)0x1" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(in_v1 = 0xdfff, uVar10 == 0xdfff)" ( (comma_expression "in_v1 = 0xdfff, uVar10 == 0xdfff" (assignment_expression "in_v1 = 0xdfff" identifier = number_literal) , (binary_expression "uVar10 == 0xdfff" identifier == number_literal)) ))) )) (compound_statement "{\n            uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;\n          }" { (expression_statement "uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr;" (assignment_expression "uVar10 = line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr" identifier = (field_expression "line->chars[(int)((int)&in_a3[-1].cmp + 2)].chr" (subscript_expression "line->chars[(int)((int)&in_a3[-1].cmp + 2)]" (field_expression "line->chars" identifier -> field_identifier) [ (cast_expression "(int)((int)&in_a3[-1].cmp + 2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((int)&in_a3[-1].cmp + 2)" ( (binary_expression "(int)&in_a3[-1].cmp + 2" (cast_expression "(int)&in_a3[-1].cmp" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&in_a3[-1].cmp" & (field_expression "in_a3[-1].cmp" (subscript_expression "in_a3[-1]" identifier [ number_literal ]) . field_identifier))) + number_literal) ))) ]) . field_identifier)) ;) })) (expression_statement "iVar6 = wordtype((Terminal *)dir,uVar10);" (assignment_expression "iVar6 = wordtype((Terminal *)dir,uVar10)" identifier = (call_expression "wordtype((Terminal *)dir,uVar10)" identifier (argument_list "((Terminal *)dir,uVar10)" ( (cast_expression "(Terminal *)dir" ( (type_descriptor "Terminal *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar6 != iVar9) goto LAB_00047698;" if (parenthesized_expression "(iVar6 != iVar9)" ( (binary_expression "iVar6 != iVar9" identifier != identifier) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "ptVar8 = line;" (assignment_expression "ptVar8 = line" identifier = identifier) ;) })) (expression_statement "iVar6 = in_a2 + -1;" (assignment_expression "iVar6 = in_a2 + -1" identifier = (binary_expression "in_a2 + -1" identifier + number_literal)) ;) (if_statement "if (in_a2 <= -iVar1) goto LAB_00047698;" if (parenthesized_expression "(in_a2 <= -iVar1)" ( (binary_expression "in_a2 <= -iVar1" identifier <= (unary_expression "-iVar1" - identifier)) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0);" (assignment_expression "uVar19 = (*pcVar17)(dir,iVar6,0x16f0,0)" identifier = (call_expression "(*pcVar17)(dir,iVar6,0x16f0,0)" (parenthesized_expression "(*pcVar17)" ( (pointer_expression "*pcVar17" * identifier) )) (argument_list "(dir,iVar6,0x16f0,0)" ( identifier , identifier , number_literal , number_literal )))) ;) (expression_statement "ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20);" (assignment_expression "ptVar8 = (termline *)((ulonglong)uVar19 >> 0x20)" identifier = (cast_expression "(termline *)((ulonglong)uVar19 >> 0x20)" ( (type_descriptor "termline *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulonglong)uVar19 >> 0x20)" ( (binary_expression "(ulonglong)uVar19 >> 0x20" (cast_expression "(ulonglong)uVar19" ( (type_descriptor "ulonglong" type_identifier) ) identifier) >> number_literal) )))) ;) (expression_statement "in_v1 = (int)uVar19;" (assignment_expression "in_v1 = (int)uVar19" identifier = (cast_expression "(int)uVar19" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar12 = *(int *)(dir + 300);" (assignment_expression "iVar12 = *(int *)(dir + 300)" identifier = (pointer_expression "*(int *)(dir + 300)" * (cast_expression "(int *)(dir + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(dir + 300)" ( (binary_expression "dir + 300" identifier + number_literal) ))))) ;) (if_statement "if ((ptVar8->lattr & 0x20) != 0) {\n          iVar12 = iVar12 + -1;\n        }" if (parenthesized_expression "((ptVar8->lattr & 0x20) != 0)" ( (binary_expression "(ptVar8->lattr & 0x20) != 0" (parenthesized_expression "(ptVar8->lattr & 0x20)" ( (binary_expression "ptVar8->lattr & 0x20" (field_expression "ptVar8->lattr" identifier -> field_identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          iVar12 = iVar12 + -1;\n        }" { (expression_statement "iVar12 = iVar12 + -1;" (assignment_expression "iVar12 = iVar12 + -1" identifier = (binary_expression "iVar12 + -1" identifier + number_literal)) ;) })) (if_statement "if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;" if (parenthesized_expression "((ptVar8->lattr & 0x10) == 0)" ( (binary_expression "(ptVar8->lattr & 0x10) == 0" (parenthesized_expression "(ptVar8->lattr & 0x10)" ( (binary_expression "ptVar8->lattr & 0x10" (field_expression "ptVar8->lattr" identifier -> field_identifier) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "uVar10 = ptVar8->chars[iVar12 + -1].chr;" (assignment_expression "uVar10 = ptVar8->chars[iVar12 + -1].chr" identifier = (field_expression "ptVar8->chars[iVar12 + -1].chr" (subscript_expression "ptVar8->chars[iVar12 + -1]" (field_expression "ptVar8->chars" identifier -> field_identifier) [ (binary_expression "iVar12 + -1" identifier + number_literal) ]) . field_identifier)) ;) (if_statement "if ((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)) {\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }" if (parenthesized_expression "((1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff))" ( (binary_expression "(1 < iVar12) && (in_v1 = 0xdfff, uVar10 == 0xdfff)" (parenthesized_expression "(1 < iVar12)" ( (binary_expression "1 < iVar12" number_literal < identifier) )) && (parenthesized_expression "(in_v1 = 0xdfff, uVar10 == 0xdfff)" ( (comma_expression "in_v1 = 0xdfff, uVar10 == 0xdfff" (assignment_expression "in_v1 = 0xdfff" identifier = number_literal) , (binary_expression "uVar10 == 0xdfff" identifier == number_literal)) ))) )) (compound_statement "{\n          uVar10 = ptVar8->chars[iVar12 + -2].chr;\n        }" { (expression_statement "uVar10 = ptVar8->chars[iVar12 + -2].chr;" (assignment_expression "uVar10 = ptVar8->chars[iVar12 + -2].chr" identifier = (field_expression "ptVar8->chars[iVar12 + -2].chr" (subscript_expression "ptVar8->chars[iVar12 + -2]" (field_expression "ptVar8->chars" identifier -> field_identifier) [ (binary_expression "iVar12 + -2" identifier + number_literal) ]) . field_identifier)) ;) })) (expression_statement "iVar7 = wordtype((Terminal *)dir,uVar10);" (assignment_expression "iVar7 = wordtype((Terminal *)dir,uVar10)" identifier = (call_expression "wordtype((Terminal *)dir,uVar10)" identifier (argument_list "((Terminal *)dir,uVar10)" ( (cast_expression "(Terminal *)dir" ( (type_descriptor "Terminal *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , identifier )))) ;) (if_statement "if (iVar7 != iVar9) break;" if (parenthesized_expression "(iVar7 != iVar9)" ( (binary_expression "iVar7 != iVar9" identifier != identifier) )) (break_statement "break;" break ;)) (expression_statement "in_a3 = (tree234 *)(iVar12 + -1);" (assignment_expression "in_a3 = (tree234 *)(iVar12 + -1)" identifier = (cast_expression "(tree234 *)(iVar12 + -1)" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar12 + -1)" ( (binary_expression "iVar12 + -1" identifier + number_literal) )))) ;) (expression_statement "in_a2 = iVar6;" (assignment_expression "in_a2 = iVar6" identifier = identifier) ;) (if_statement "if (line->temporary != 0) {\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }" if (parenthesized_expression "(line->temporary != 0)" ( (binary_expression "line->temporary != 0" (field_expression "line->temporary" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n          (*pcVar5)(line);\n          in_v1 = extraout_v1;\n        }" { (expression_statement "(*pcVar5)(line);" (call_expression "(*pcVar5)(line)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(line)" ( identifier ))) ;) (expression_statement "in_v1 = extraout_v1;" (assignment_expression "in_v1 = extraout_v1" identifier = identifier) ;) })) })) (if_statement "if (ptVar8->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }" if (parenthesized_expression "(ptVar8->temporary != 0)" ( (binary_expression "ptVar8->temporary != 0" (field_expression "ptVar8->temporary" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n        freeline(ptVar8);\n      }" { comment (expression_statement "freeline(ptVar8);" (call_expression "freeline(ptVar8)" identifier (argument_list "(ptVar8)" ( identifier ))) ;) })) }))) (goto_statement "goto LAB_00047698;" goto statement_identifier ;) })) (expression_statement "ptVar16 = in_a3;" (assignment_expression "ptVar16 = in_a3" identifier = identifier) ;) (if_statement "if (iVar9 != 0) {\n    in_v1 = p.y;\n    if ((iVar9 == 2) && (ptVar16 = (tree234 *)0x0, p.y != -1)) {\n      in_v1 = *(int *)(dir + 300);\n      ptVar16 = (tree234 *)(in_v1 + -1);\n    }\n    goto LAB_00047698;\n  }" if (parenthesized_expression "(iVar9 != 0)" ( (binary_expression "iVar9 != 0" identifier != number_literal) )) (compound_statement "{\n    in_v1 = p.y;\n    if ((iVar9 == 2) && (ptVar16 = (tree234 *)0x0, p.y != -1)) {\n      in_v1 = *(int *)(dir + 300);\n      ptVar16 = (tree234 *)(in_v1 + -1);\n    }\n    goto LAB_00047698;\n  }" { (expression_statement "in_v1 = p.y;" (assignment_expression "in_v1 = p.y" identifier = (field_expression "p.y" identifier . field_identifier)) ;) (if_statement "if ((iVar9 == 2) && (ptVar16 = (tree234 *)0x0, p.y != -1)) {\n      in_v1 = *(int *)(dir + 300);\n      ptVar16 = (tree234 *)(in_v1 + -1);\n    }" if (parenthesized_expression "((iVar9 == 2) && (ptVar16 = (tree234 *)0x0, p.y != -1))" ( (binary_expression "(iVar9 == 2) && (ptVar16 = (tree234 *)0x0, p.y != -1)" (parenthesized_expression "(iVar9 == 2)" ( (binary_expression "iVar9 == 2" identifier == number_literal) )) && (parenthesized_expression "(ptVar16 = (tree234 *)0x0, p.y != -1)" ( (comma_expression "ptVar16 = (tree234 *)0x0, p.y != -1" (assignment_expression "ptVar16 = (tree234 *)0x0" identifier = (cast_expression "(tree234 *)0x0" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) , (binary_expression "p.y != -1" (field_expression "p.y" identifier . field_identifier) != number_literal)) ))) )) (compound_statement "{\n      in_v1 = *(int *)(dir + 300);\n      ptVar16 = (tree234 *)(in_v1 + -1);\n    }" { (expression_statement "in_v1 = *(int *)(dir + 300);" (assignment_expression "in_v1 = *(int *)(dir + 300)" identifier = (pointer_expression "*(int *)(dir + 300)" * (cast_expression "(int *)(dir + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(dir + 300)" ( (binary_expression "dir + 300" identifier + number_literal) ))))) ;) (expression_statement "ptVar16 = (tree234 *)(in_v1 + -1);" (assignment_expression "ptVar16 = (tree234 *)(in_v1 + -1)" identifier = (cast_expression "(tree234 *)(in_v1 + -1)" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_v1 + -1)" ( (binary_expression "in_v1 + -1" identifier + number_literal) )))) ;) })) (goto_statement "goto LAB_00047698;" goto statement_identifier ;) })) (if_statement "if ((line->lattr & 0x10) != 0) goto LAB_00047698;" if (parenthesized_expression "((line->lattr & 0x10) != 0)" ( (binary_expression "(line->lattr & 0x10) != 0" (parenthesized_expression "(line->lattr & 0x10)" ( (binary_expression "line->lattr & 0x10" (field_expression "line->lattr" identifier -> field_identifier) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "ptVar11 = line->chars;" (assignment_expression "ptVar11 = line->chars" identifier = (field_expression "line->chars" identifier -> field_identifier)) ;) (expression_statement "ptVar14 = ptVar11 + *(int *)(dir + 300);" (assignment_expression "ptVar14 = ptVar11 + *(int *)(dir + 300)" identifier = (binary_expression "ptVar11 + *(int *)(dir + 300)" identifier + (pointer_expression "*(int *)(dir + 300)" * (cast_expression "(int *)(dir + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(dir + 300)" ( (binary_expression "dir + 300" identifier + number_literal) )))))) ;) (expression_statement "ptVar3 = ptVar14;" (assignment_expression "ptVar3 = ptVar14" identifier = identifier) ;) (if_statement "if (ptVar11 < ptVar14) {\n    do {\n      if (((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)) break;\n      ptVar3 = ptVar2;\n    } while (ptVar11 < ptVar2);\n    if (ptVar3 == ptVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    ptVar3 = ptVar14 + -1;\n  }" if (parenthesized_expression "(ptVar11 < ptVar14)" ( (binary_expression "ptVar11 < ptVar14" identifier < identifier) )) (compound_statement "{\n    do {\n      if (((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)) break;\n      ptVar3 = ptVar2;\n    } while (ptVar11 < ptVar2);\n    if (ptVar3 == ptVar14) goto LAB_00047a9c;\n  }" { (do_statement "do {\n      if (((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)) break;\n      ptVar3 = ptVar2;\n    } while (ptVar11 < ptVar2);" do (compound_statement "{\n      if (((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)) break;\n      ptVar3 = ptVar2;\n    }" { (if_statement "if (((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)) break;" if (parenthesized_expression "(((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0))" ( (binary_expression "((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)) ||\n         (ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)" (parenthesized_expression "((ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820))" ( (binary_expression "(ptVar3[-1].chr != 0x20) && ((ptVar3[-1].chr & 0xfffffcff) != 0xd820)" (parenthesized_expression "(ptVar3[-1].chr != 0x20)" ( (binary_expression "ptVar3[-1].chr != 0x20" (field_expression "ptVar3[-1].chr" (subscript_expression "ptVar3[-1]" identifier [ number_literal ]) . field_identifier) != number_literal) )) && (parenthesized_expression "((ptVar3[-1].chr & 0xfffffcff) != 0xd820)" ( (binary_expression "(ptVar3[-1].chr & 0xfffffcff) != 0xd820" (parenthesized_expression "(ptVar3[-1].chr & 0xfffffcff)" ( (binary_expression "ptVar3[-1].chr & 0xfffffcff" (field_expression "ptVar3[-1].chr" (subscript_expression "ptVar3[-1]" identifier [ number_literal ]) . field_identifier) & number_literal) )) != number_literal) ))) )) || (parenthesized_expression "(ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0)" ( (comma_expression "ptVar2 = ptVar3 + -1, ptVar3[-1].cc_next != 0" (assignment_expression "ptVar2 = ptVar3 + -1" identifier = (binary_expression "ptVar3 + -1" identifier + number_literal)) , (binary_expression "ptVar3[-1].cc_next != 0" (field_expression "ptVar3[-1].cc_next" (subscript_expression "ptVar3[-1]" identifier [ number_literal ]) . field_identifier) != number_literal)) ))) )) (break_statement "break;" break ;)) (expression_statement "ptVar3 = ptVar2;" (assignment_expression "ptVar3 = ptVar2" identifier = identifier) ;) }) while (parenthesized_expression "(ptVar11 < ptVar2)" ( (binary_expression "ptVar11 < ptVar2" identifier < identifier) )) ;) (if_statement "if (ptVar3 == ptVar14) goto LAB_00047a9c;" if (parenthesized_expression "(ptVar3 == ptVar14)" ( (binary_expression "ptVar3 == ptVar14" identifier == identifier) )) (goto_statement "goto LAB_00047a9c;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_00047a9c:\n    ptVar3 = ptVar14 + -1;\n  }" else (compound_statement "{\nLAB_00047a9c:\n    ptVar3 = ptVar14 + -1;\n  }" { (labeled_statement "LAB_00047a9c:\n    ptVar3 = ptVar14 + -1;" statement_identifier : (expression_statement "ptVar3 = ptVar14 + -1;" (assignment_expression "ptVar3 = ptVar14 + -1" identifier = (binary_expression "ptVar14 + -1" identifier + number_literal)) ;)) }))) (expression_statement "ptVar4 = (tree234 *)(((int)ptVar3 - (int)ptVar11 >> 2) * -0x55555555);" (assignment_expression "ptVar4 = (tree234 *)(((int)ptVar3 - (int)ptVar11 >> 2) * -0x55555555)" identifier = (cast_expression "(tree234 *)(((int)ptVar3 - (int)ptVar11 >> 2) * -0x55555555)" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(((int)ptVar3 - (int)ptVar11 >> 2) * -0x55555555)" ( (binary_expression "((int)ptVar3 - (int)ptVar11 >> 2) * -0x55555555" (parenthesized_expression "((int)ptVar3 - (int)ptVar11 >> 2)" ( (binary_expression "(int)ptVar3 - (int)ptVar11 >> 2" (binary_expression "(int)ptVar3 - (int)ptVar11" (cast_expression "(int)ptVar3" ( (type_descriptor "int" primitive_type) ) identifier) - (cast_expression "(int)ptVar11" ( (type_descriptor "int" primitive_type) ) identifier)) >> number_literal) )) * number_literal) )))) ;) (if_statement "if (((int)ptVar4 <= (int)in_a3) && (in_v1 = -1, ptVar16 = ptVar4, p.y != -1)) {\n    ptVar16 = (tree234 *)(*(int *)(dir + 300) + -1);\n  }" if (parenthesized_expression "(((int)ptVar4 <= (int)in_a3) && (in_v1 = -1, ptVar16 = ptVar4, p.y != -1))" ( (binary_expression "((int)ptVar4 <= (int)in_a3) && (in_v1 = -1, ptVar16 = ptVar4, p.y != -1)" (parenthesized_expression "((int)ptVar4 <= (int)in_a3)" ( (binary_expression "(int)ptVar4 <= (int)in_a3" (cast_expression "(int)ptVar4" ( (type_descriptor "int" primitive_type) ) identifier) <= (cast_expression "(int)in_a3" ( (type_descriptor "int" primitive_type) ) identifier)) )) && (parenthesized_expression "(in_v1 = -1, ptVar16 = ptVar4, p.y != -1)" ( (comma_expression "in_v1 = -1, ptVar16 = ptVar4, p.y != -1" (assignment_expression "in_v1 = -1" identifier = number_literal) , (comma_expression "ptVar16 = ptVar4, p.y != -1" (assignment_expression "ptVar16 = ptVar4" identifier = identifier) , (binary_expression "p.y != -1" (field_expression "p.y" identifier . field_identifier) != number_literal))) ))) )) (compound_statement "{\n    ptVar16 = (tree234 *)(*(int *)(dir + 300) + -1);\n  }" { (expression_statement "ptVar16 = (tree234 *)(*(int *)(dir + 300) + -1);" (assignment_expression "ptVar16 = (tree234 *)(*(int *)(dir + 300) + -1)" identifier = (cast_expression "(tree234 *)(*(int *)(dir + 300) + -1)" ( (type_descriptor "tree234 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(dir + 300) + -1)" ( (binary_expression "*(int *)(dir + 300) + -1" (pointer_expression "*(int *)(dir + 300)" * (cast_expression "(int *)(dir + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(dir + 300)" ( (binary_expression "dir + 300" identifier + number_literal) )))) + number_literal) )))) ;) })) (labeled_statement "LAB_00047698:\n  if (line->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n    freeline(line);\n  }" statement_identifier : (if_statement "if (line->temporary != 0) {\n                    /* WARNING: Subroutine does not return */\n    freeline(line);\n  }" if (parenthesized_expression "(line->temporary != 0)" ( (binary_expression "line->temporary != 0" (field_expression "line->temporary" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    freeline(line);\n  }" { comment (expression_statement "freeline(line);" (call_expression "freeline(line)" identifier (argument_list "(line)" ( identifier ))) ;) }))) (expression_statement "term->compatibility_level = in_a2;" (assignment_expression "term->compatibility_level = in_a2" (field_expression "term->compatibility_level" identifier -> field_identifier) = identifier) ;) (expression_statement "term->scrollback = ptVar16;" (assignment_expression "term->scrollback = ptVar16" (field_expression "term->scrollback" identifier -> field_identifier) = identifier) ;) (expression_statement "pVar18.y = (int)term;" (assignment_expression "pVar18.y = (int)term" (field_expression "pVar18.y" identifier . field_identifier) = (cast_expression "(int)term" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "pVar18.x = in_v1;" (assignment_expression "pVar18.x = in_v1" (field_expression "pVar18.x" identifier . field_identifier) = identifier) ;) (return_statement "return pVar18;" return identifier ;) })))
(translation_unit "int * FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)\n\n{\n  int iVar1;\n  ushort *puVar2;\n  uint uVar3;\n  int *piVar4;\n  short sVar9;\n  code *pcVar5;\n  int iVar6;\n  ushort *puVar7;\n  uint uVar8;\n  int iVar10;\n  int iVar11;\n  int iVar12;\n  uint uVar13;\n  uint uVar14;\n  int iVar15;\n  code *pcVar16;\n  \n  iVar1 = FUN_00044420(param_2);\n  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);\n  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);\n  iVar10 = *(int *)(param_2 + 0xe50);\n  if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }\n  iVar15 = param_4;\n  if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }\n  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;\n  uVar13 = *(uint *)(puVar2 + 10);\n  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;\n  uVar8 = uVar14;\n  if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }\n  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;\n  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }\nLAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }\n  *param_1 = param_3;\n  param_1[1] = iVar15;\n  return param_1;\n}\n\n" (function_definition "int * FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)\n\n{\n  int iVar1;\n  ushort *puVar2;\n  uint uVar3;\n  int *piVar4;\n  short sVar9;\n  code *pcVar5;\n  int iVar6;\n  ushort *puVar7;\n  uint uVar8;\n  int iVar10;\n  int iVar11;\n  int iVar12;\n  uint uVar13;\n  uint uVar14;\n  int iVar15;\n  code *pcVar16;\n  \n  iVar1 = FUN_00044420(param_2);\n  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);\n  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);\n  iVar10 = *(int *)(param_2 + 0xe50);\n  if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }\n  iVar15 = param_4;\n  if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }\n  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;\n  uVar13 = *(uint *)(puVar2 + 10);\n  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;\n  uVar8 = uVar14;\n  if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }\n  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;\n  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }\nLAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }\n  *param_1 = param_3;\n  param_1[1] = iVar15;\n  return param_1;\n}" primitive_type (pointer_declarator "* FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)" * (function_declarator "FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)" identifier (parameter_list "(int *param_1,int param_2,int param_3,int param_4,int param_5)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) , (parameter_declaration "int param_3" primitive_type identifier) , (parameter_declaration "int param_4" primitive_type identifier) , (parameter_declaration "int param_5" primitive_type identifier) )))) (compound_statement "{\n  int iVar1;\n  ushort *puVar2;\n  uint uVar3;\n  int *piVar4;\n  short sVar9;\n  code *pcVar5;\n  int iVar6;\n  ushort *puVar7;\n  uint uVar8;\n  int iVar10;\n  int iVar11;\n  int iVar12;\n  uint uVar13;\n  uint uVar14;\n  int iVar15;\n  code *pcVar16;\n  \n  iVar1 = FUN_00044420(param_2);\n  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);\n  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);\n  iVar10 = *(int *)(param_2 + 0xe50);\n  if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }\n  iVar15 = param_4;\n  if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }\n  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;\n  uVar13 = *(uint *)(puVar2 + 10);\n  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;\n  uVar8 = uVar14;\n  if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }\n  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;\n  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }\nLAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }\n  *param_1 = param_3;\n  param_1[1] = iVar15;\n  return param_1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "ushort *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "int *piVar4;" primitive_type (pointer_declarator "*piVar4" * identifier) ;) (declaration "short sVar9;" (sized_type_specifier "short" short) identifier ;) (declaration "code *pcVar5;" type_identifier (pointer_declarator "*pcVar5" * identifier) ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "ushort *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "int iVar12;" primitive_type identifier ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (declaration "code *pcVar16;" type_identifier (pointer_declarator "*pcVar16" * identifier) ;) (expression_statement "iVar1 = FUN_00044420(param_2);" (assignment_expression "iVar1 = FUN_00044420(param_2)" identifier = (call_expression "FUN_00044420(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (expression_statement "pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);" (assignment_expression "pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc)" identifier = (cast_expression "(code *)(PTR_LAB_000b55b4 + 0x71fc)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b55b4 + 0x71fc)" ( (binary_expression "PTR_LAB_000b55b4 + 0x71fc" identifier + number_literal) )))) ;) (expression_statement "puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);" (assignment_expression "puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0)" identifier = (cast_expression "(ushort *)FUN_000471fc(param_2,param_3,0x16af,0)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_000471fc(param_2,param_3,0x16af,0)" identifier (argument_list "(param_2,param_3,0x16af,0)" ( identifier , identifier , number_literal , number_literal ))))) ;) (expression_statement "iVar10 = *(int *)(param_2 + 0xe50);" (assignment_expression "iVar10 = *(int *)(param_2 + 0xe50)" identifier = (pointer_expression "*(int *)(param_2 + 0xe50)" * (cast_expression "(int *)(param_2 + 0xe50)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0xe50)" ( (binary_expression "param_2 + 0xe50" identifier + number_literal) ))))) ;) (if_statement "if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }" if (parenthesized_expression "(iVar10 == 1)" ( (binary_expression "iVar10 == 1" identifier == number_literal) )) (compound_statement "{\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }" { (expression_statement "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);" (assignment_expression "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" identifier = (cast_expression "(int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(puVar2 + 10) + param_4 * 0xc)" ( (binary_expression "*(int *)(puVar2 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar2 + 10)" * (cast_expression "(int *)(puVar2 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 10)" ( (binary_expression "puVar2 + 10" identifier + number_literal) )))) + (binary_expression "param_4 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "iVar10 = *piVar4;" (assignment_expression "iVar10 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (if_statement "if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }" if (parenthesized_expression "((0 < param_4) && (iVar10 == 0xdfff))" ( (binary_expression "(0 < param_4) && (iVar10 == 0xdfff)" (parenthesized_expression "(0 < param_4)" ( (binary_expression "0 < param_4" number_literal < identifier) )) && (parenthesized_expression "(iVar10 == 0xdfff)" ( (binary_expression "iVar10 == 0xdfff" identifier == number_literal) ))) )) (compound_statement "{\n      iVar10 = piVar4[-3];\n    }" { (expression_statement "iVar10 = piVar4[-3];" (assignment_expression "iVar10 = piVar4[-3]" identifier = (subscript_expression "piVar4[-3]" identifier [ number_literal ])) ;) })) (expression_statement "sVar9 = FUN_000442c4(param_2,iVar10);" (assignment_expression "sVar9 = FUN_000442c4(param_2,iVar10)" identifier = (call_expression "FUN_000442c4(param_2,iVar10)" identifier (argument_list "(param_2,iVar10)" ( identifier , identifier )))) ;) (expression_statement "iVar10 = (int)sVar9;" (assignment_expression "iVar10 = (int)sVar9" identifier = (cast_expression "(int)sVar9" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (if_statement "if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" if (parenthesized_expression "(param_5 == 1)" ( (binary_expression "param_5 == 1" identifier == number_literal) )) (compound_statement "{\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" { (expression_statement "iVar6 = *(int *)(param_2 + 300);" (assignment_expression "iVar6 = *(int *)(param_2 + 300)" identifier = (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) ))))) ;) (expression_statement "uVar8 = (uint)*puVar2;" (assignment_expression "uVar8 = (uint)*puVar2" identifier = (binary_expression "(uint)*puVar2" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0)" identifier = (cast_expression "(code *)(PTR_LAB_000b55b4 + 0x59d0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b55b4 + 0x59d0)" ( (binary_expression "PTR_LAB_000b55b4 + 0x59d0" identifier + number_literal) )))) ;) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar8 & 0x20;" (assignment_expression "uVar13 = uVar8 & 0x20" identifier = (binary_expression "uVar8 & 0x20" identifier & number_literal)) ;) (labeled_statement "LAB_0004795c:\n      iVar11 = iVar1;" statement_identifier : (expression_statement "iVar11 = iVar1;" (assignment_expression "iVar11 = iVar1" identifier = identifier) ;)) (if_statement "if (uVar13 == 0) goto LAB_00047968;" if (parenthesized_expression "(uVar13 == 0)" ( (binary_expression "uVar13 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00047968;" goto statement_identifier ;)) (while_statement "while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }" { (expression_statement "iVar1 = iVar6 + -2;" (assignment_expression "iVar1 = iVar6 + -2" identifier = (binary_expression "iVar6 + -2" identifier + number_literal)) ;) (labeled_statement "LAB_00047968:\n        iVar15 = param_4;" statement_identifier : (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" identifier = identifier) ;)) (if_statement "if (iVar1 <= param_4) break;" if (parenthesized_expression "(iVar1 <= param_4)" ( (binary_expression "iVar1 <= param_4" identifier <= identifier) )) (break_statement "break;" break ;)) (while_statement "while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }" { (expression_statement "param_4 = iVar15 + 1;" (assignment_expression "param_4 = iVar15 + 1" identifier = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);" (assignment_expression "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" identifier = (cast_expression "(int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(int *)(puVar2 + 10) + param_4 * 0xc)" ( (binary_expression "*(int *)(puVar2 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar2 + 10)" * (cast_expression "(int *)(puVar2 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 10)" ( (binary_expression "puVar2 + 10" identifier + number_literal) )))) + (binary_expression "param_4 * 0xc" identifier * number_literal)) )))) ;) (expression_statement "iVar1 = *piVar4;" (assignment_expression "iVar1 = *piVar4" identifier = (pointer_expression "*piVar4" * identifier)) ;) (if_statement "if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }" if (parenthesized_expression "((-1 < iVar15) && (iVar1 == 0xdfff))" ( (binary_expression "(-1 < iVar15) && (iVar1 == 0xdfff)" (parenthesized_expression "(-1 < iVar15)" ( (binary_expression "-1 < iVar15" number_literal < identifier) )) && (parenthesized_expression "(iVar1 == 0xdfff)" ( (binary_expression "iVar1 == 0xdfff" identifier == number_literal) ))) )) (compound_statement "{\n            iVar1 = piVar4[-3];\n          }" { (expression_statement "iVar1 = piVar4[-3];" (assignment_expression "iVar1 = piVar4[-3]" identifier = (subscript_expression "piVar4[-3]" identifier [ number_literal ])) ;) })) (expression_statement "iVar1 = FUN_000442c4(param_2,iVar1);" (assignment_expression "iVar1 = FUN_000442c4(param_2,iVar1)" identifier = (call_expression "FUN_000442c4(param_2,iVar1)" identifier (argument_list "(param_2,iVar1)" ( identifier , identifier )))) ;) (if_statement "if (iVar1 != iVar10) goto LAB_00047698;" if (parenthesized_expression "(iVar1 != iVar10)" ( (binary_expression "iVar1 != iVar10" identifier != identifier) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (if_statement "if (uVar13 != 0) break;" if (parenthesized_expression "(uVar13 != 0)" ( (binary_expression "uVar13 != 0" identifier != number_literal) )) (break_statement "break;" break ;)) (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" identifier = identifier) ;) (if_statement "if (iVar11 <= param_4) goto LAB_000479d0;" if (parenthesized_expression "(iVar11 <= param_4)" ( (binary_expression "iVar11 <= param_4" identifier <= identifier) )) (goto_statement "goto LAB_000479d0;" goto statement_identifier ;)) })) })) (labeled_statement "LAB_000479d0:\n      iVar1 = param_3 + 1;" statement_identifier : (expression_statement "iVar1 = param_3 + 1;" (assignment_expression "iVar1 = param_3 + 1" identifier = (binary_expression "param_3 + 1" identifier + number_literal)) ;)) (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" identifier = identifier) ;) (if_statement "if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;" if (parenthesized_expression "((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0))" ( (binary_expression "(*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)" (parenthesized_expression "(*(int *)(param_2 + 0x128) <= iVar1)" ( (binary_expression "*(int *)(param_2 + 0x128) <= iVar1" (pointer_expression "*(int *)(param_2 + 0x128)" * (cast_expression "(int *)(param_2 + 0x128)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 0x128)" ( (binary_expression "param_2 + 0x128" identifier + number_literal) )))) <= identifier) )) || (parenthesized_expression "((uVar8 & 0x10) == 0)" ( (binary_expression "(uVar8 & 0x10) == 0" (parenthesized_expression "(uVar8 & 0x10)" ( (binary_expression "uVar8 & 0x10" identifier & number_literal) )) == number_literal) ))) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);" (assignment_expression "puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0)" identifier = (cast_expression "(ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*pcVar16)(param_2,iVar1,0x16d5,0)" (parenthesized_expression "(*pcVar16)" ( (pointer_expression "*pcVar16" * identifier) )) (argument_list "(param_2,iVar1,0x16d5,0)" ( identifier , identifier , number_literal , number_literal ))))) ;) (expression_statement "iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));" (assignment_expression "iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10))" identifier = (call_expression "FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10))" identifier (argument_list "(param_2,**(undefined4 **)(puVar7 + 10))" ( identifier , (pointer_expression "**(undefined4 **)(puVar7 + 10)" * (pointer_expression "*(undefined4 **)(puVar7 + 10)" * (cast_expression "(undefined4 **)(puVar7 + 10)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar7 + 10)" ( (binary_expression "puVar7 + 10" identifier + number_literal) ))))) )))) ;) (if_statement "if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }" if (parenthesized_expression "(iVar6 == iVar10)" ( (binary_expression "iVar6 == iVar10" identifier == identifier) )) (compound_statement "{\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }" { (expression_statement "param_3 = iVar1;" (assignment_expression "param_3 = iVar1" identifier = identifier) ;) (if_statement "if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }" if (parenthesized_expression "(*(int *)(puVar2 + 6) == 0)" ( (binary_expression "*(int *)(puVar2 + 6) == 0" (pointer_expression "*(int *)(puVar2 + 6)" * (cast_expression "(int *)(puVar2 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 6)" ( (binary_expression "puVar2 + 6" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }" { (expression_statement "iVar6 = *(int *)(param_2 + 300);" (assignment_expression "iVar6 = *(int *)(param_2 + 300)" identifier = (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) ))))) ;) (expression_statement "uVar8 = (uint)*puVar7;" (assignment_expression "uVar8 = (uint)*puVar7" identifier = (binary_expression "(uint)*puVar7" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "uVar13 = uVar8 & 0x20;" (assignment_expression "uVar13 = uVar8 & 0x20" identifier = (binary_expression "uVar8 & 0x20" identifier & number_literal)) ;) (expression_statement "param_4 = 0;" (assignment_expression "param_4 = 0" identifier = number_literal) ;) (expression_statement "puVar2 = puVar7;" (assignment_expression "puVar2 = puVar7" identifier = identifier) ;) }) (else_clause "else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }" else (compound_statement "{\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }" { (expression_statement "(*pcVar5)(puVar2);" (call_expression "(*pcVar5)(puVar2)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "param_4 = 0;" (assignment_expression "param_4 = 0" identifier = number_literal) ;) (expression_statement "uVar8 = (uint)*puVar7;" (assignment_expression "uVar8 = (uint)*puVar7" identifier = (binary_expression "(uint)*puVar7" (parenthesized_expression "(uint)" ( identifier )) * identifier)) ;) (expression_statement "iVar6 = *(int *)(param_2 + 300);" (assignment_expression "iVar6 = *(int *)(param_2 + 300)" identifier = (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) ))))) ;) (expression_statement "uVar13 = uVar8 & 0x20;" (assignment_expression "uVar13 = uVar8 & 0x20" identifier = (binary_expression "uVar8 & 0x20" identifier & number_literal)) ;) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" identifier = (binary_expression "iVar6 + -1" identifier + number_literal)) ;) (expression_statement "puVar2 = puVar7;" (assignment_expression "puVar2 = puVar7" identifier = identifier) ;) }))) (goto_statement "goto LAB_0004795c;" goto statement_identifier ;) })) (if_statement "if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }" if (parenthesized_expression "(*(int *)(puVar7 + 6) != 0)" ( (binary_expression "*(int *)(puVar7 + 6) != 0" (pointer_expression "*(int *)(puVar7 + 6)" * (cast_expression "(int *)(puVar7 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 6)" ( (binary_expression "puVar7 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_000459d0(puVar7);\n      }" { (expression_statement "FUN_000459d0(puVar7);" (call_expression "FUN_000459d0(puVar7)" identifier (argument_list "(puVar7)" ( identifier ))) ;) })) }) (else_clause "else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" else (compound_statement "{\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" { (expression_statement "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0)" identifier = (cast_expression "(code *)(PTR_LAB_000b55b4 + 0x59d0)" ( (type_descriptor "code *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_LAB_000b55b4 + 0x59d0)" ( (binary_expression "PTR_LAB_000b55b4 + 0x59d0" identifier + number_literal) )))) ;) (expression_statement "puVar7 = puVar2;" (assignment_expression "puVar7 = puVar2" identifier = identifier) ;) (while_statement "while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }" { (for_statement "for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }" for ( ; (comma_expression "puVar2 = puVar7, iVar15 = param_4, 0 < param_4" (assignment_expression "puVar2 = puVar7" identifier = identifier) , (comma_expression "iVar15 = param_4, 0 < param_4" (assignment_expression "iVar15 = param_4" identifier = identifier) , (binary_expression "0 < param_4" number_literal < identifier))) ; (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ) (compound_statement "{\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }" { (expression_statement "iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;" (assignment_expression "iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc" identifier = (binary_expression "*(int *)(puVar2 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar2 + 10)" * (cast_expression "(int *)(puVar2 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 10)" ( (binary_expression "puVar2 + 10" identifier + number_literal) )))) + (binary_expression "param_4 * 0xc" identifier * number_literal))) ;) (expression_statement "iVar11 = *(int *)(iVar6 + -0xc);" (assignment_expression "iVar11 = *(int *)(iVar6 + -0xc)" identifier = (pointer_expression "*(int *)(iVar6 + -0xc)" * (cast_expression "(int *)(iVar6 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + -0xc)" ( (binary_expression "iVar6 + -0xc" identifier + number_literal) ))))) ;) (if_statement "if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }" if (parenthesized_expression "((param_4 != 1) && (iVar11 == 0xdfff))" ( (binary_expression "(param_4 != 1) && (iVar11 == 0xdfff)" (parenthesized_expression "(param_4 != 1)" ( (binary_expression "param_4 != 1" identifier != number_literal) )) && (parenthesized_expression "(iVar11 == 0xdfff)" ( (binary_expression "iVar11 == 0xdfff" identifier == number_literal) ))) )) (compound_statement "{\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }" { (expression_statement "iVar11 = *(int *)(iVar6 + -0x18);" (assignment_expression "iVar11 = *(int *)(iVar6 + -0x18)" identifier = (pointer_expression "*(int *)(iVar6 + -0x18)" * (cast_expression "(int *)(iVar6 + -0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar6 + -0x18)" ( (binary_expression "iVar6 + -0x18" identifier + number_literal) ))))) ;) })) (expression_statement "iVar6 = FUN_000442c4(param_2,iVar11);" (assignment_expression "iVar6 = FUN_000442c4(param_2,iVar11)" identifier = (call_expression "FUN_000442c4(param_2,iVar11)" identifier (argument_list "(param_2,iVar11)" ( identifier , identifier )))) ;) (if_statement "if (iVar6 != iVar10) goto LAB_00047698;" if (parenthesized_expression "(iVar6 != iVar10)" ( (binary_expression "iVar6 != iVar10" identifier != identifier) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "puVar7 = puVar2;" (assignment_expression "puVar7 = puVar2" identifier = identifier) ;) })) (expression_statement "iVar6 = param_3 + -1;" (assignment_expression "iVar6 = param_3 + -1" identifier = (binary_expression "param_3 + -1" identifier + number_literal)) ;) (if_statement "if (param_3 <= -iVar1) goto LAB_00047698;" if (parenthesized_expression "(param_3 <= -iVar1)" ( (binary_expression "param_3 <= -iVar1" identifier <= (unary_expression "-iVar1" - identifier)) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);" (assignment_expression "puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0)" identifier = (cast_expression "(ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "(*pcVar16)(param_2,iVar6,0x16f0,0)" (parenthesized_expression "(*pcVar16)" ( (pointer_expression "*pcVar16" * identifier) )) (argument_list "(param_2,iVar6,0x16f0,0)" ( identifier , identifier , number_literal , number_literal ))))) ;) (expression_statement "param_4 = *(int *)(param_2 + 300);" (assignment_expression "param_4 = *(int *)(param_2 + 300)" identifier = (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) ))))) ;) (if_statement "if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }" if (parenthesized_expression "((*puVar7 & 0x20) != 0)" ( (binary_expression "(*puVar7 & 0x20) != 0" (parenthesized_expression "(*puVar7 & 0x20)" ( (binary_expression "*puVar7 & 0x20" (pointer_expression "*puVar7" * identifier) & number_literal) )) != number_literal) )) (compound_statement "{\n          param_4 = param_4 + -1;\n        }" { (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ;) })) (if_statement "if ((*puVar7 & 0x10) == 0) goto LAB_00047698;" if (parenthesized_expression "((*puVar7 & 0x10) == 0)" ( (binary_expression "(*puVar7 & 0x10) == 0" (parenthesized_expression "(*puVar7 & 0x10)" ( (binary_expression "*puVar7 & 0x10" (pointer_expression "*puVar7" * identifier) & number_literal) )) == number_literal) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;" (assignment_expression "iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc" identifier = (binary_expression "*(int *)(puVar7 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar7 + 10)" * (cast_expression "(int *)(puVar7 + 10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 10)" ( (binary_expression "puVar7 + 10" identifier + number_literal) )))) + (binary_expression "param_4 * 0xc" identifier * number_literal))) ;) (expression_statement "iVar12 = *(int *)(iVar11 + -0xc);" (assignment_expression "iVar12 = *(int *)(iVar11 + -0xc)" identifier = (pointer_expression "*(int *)(iVar11 + -0xc)" * (cast_expression "(int *)(iVar11 + -0xc)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + -0xc)" ( (binary_expression "iVar11 + -0xc" identifier + number_literal) ))))) ;) (if_statement "if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }" if (parenthesized_expression "((1 < param_4) && (iVar12 == 0xdfff))" ( (binary_expression "(1 < param_4) && (iVar12 == 0xdfff)" (parenthesized_expression "(1 < param_4)" ( (binary_expression "1 < param_4" number_literal < identifier) )) && (parenthesized_expression "(iVar12 == 0xdfff)" ( (binary_expression "iVar12 == 0xdfff" identifier == number_literal) ))) )) (compound_statement "{\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }" { (expression_statement "iVar12 = *(int *)(iVar11 + -0x18);" (assignment_expression "iVar12 = *(int *)(iVar11 + -0x18)" identifier = (pointer_expression "*(int *)(iVar11 + -0x18)" * (cast_expression "(int *)(iVar11 + -0x18)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(iVar11 + -0x18)" ( (binary_expression "iVar11 + -0x18" identifier + number_literal) ))))) ;) })) (expression_statement "iVar11 = FUN_000442c4(param_2,iVar12);" (assignment_expression "iVar11 = FUN_000442c4(param_2,iVar12)" identifier = (call_expression "FUN_000442c4(param_2,iVar12)" identifier (argument_list "(param_2,iVar12)" ( identifier , identifier )))) ;) (if_statement "if (iVar11 != iVar10) break;" if (parenthesized_expression "(iVar11 != iVar10)" ( (binary_expression "iVar11 != iVar10" identifier != identifier) )) (break_statement "break;" break ;)) (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" identifier = (binary_expression "param_4 + -1" identifier + number_literal)) ;) (expression_statement "param_3 = iVar6;" (assignment_expression "param_3 = iVar6" identifier = identifier) ;) (if_statement "if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }" if (parenthesized_expression "(*(int *)(puVar2 + 6) != 0)" ( (binary_expression "*(int *)(puVar2 + 6) != 0" (pointer_expression "*(int *)(puVar2 + 6)" * (cast_expression "(int *)(puVar2 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 6)" ( (binary_expression "puVar2 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n          (*pcVar5)(puVar2);\n        }" { (expression_statement "(*pcVar5)(puVar2);" (call_expression "(*pcVar5)(puVar2)" (parenthesized_expression "(*pcVar5)" ( (pointer_expression "*pcVar5" * identifier) )) (argument_list "(puVar2)" ( identifier ))) ;) })) })) (if_statement "if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }" if (parenthesized_expression "(*(int *)(puVar7 + 6) != 0)" ( (binary_expression "*(int *)(puVar7 + 6) != 0" (pointer_expression "*(int *)(puVar7 + 6)" * (cast_expression "(int *)(puVar7 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar7 + 6)" ( (binary_expression "puVar7 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n        FUN_000459d0(puVar7);\n      }" { (expression_statement "FUN_000459d0(puVar7);" (call_expression "FUN_000459d0(puVar7)" identifier (argument_list "(puVar7)" ( identifier ))) ;) })) }))) (goto_statement "goto LAB_00047698;" goto statement_identifier ;) })) (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" identifier = identifier) ;) (if_statement "if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }" if (parenthesized_expression "(iVar10 != 0)" ( (binary_expression "iVar10 != 0" identifier != number_literal) )) (compound_statement "{\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }" { (if_statement "if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }" if (parenthesized_expression "((iVar10 == 2) && (iVar15 = 0, param_5 != -1))" ( (binary_expression "(iVar10 == 2) && (iVar15 = 0, param_5 != -1)" (parenthesized_expression "(iVar10 == 2)" ( (binary_expression "iVar10 == 2" identifier == number_literal) )) && (parenthesized_expression "(iVar15 = 0, param_5 != -1)" ( (comma_expression "iVar15 = 0, param_5 != -1" (assignment_expression "iVar15 = 0" identifier = number_literal) , (binary_expression "param_5 != -1" identifier != number_literal)) ))) )) (compound_statement "{\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }" { (expression_statement "iVar15 = *(int *)(param_2 + 300) + -1;" (assignment_expression "iVar15 = *(int *)(param_2 + 300) + -1" identifier = (binary_expression "*(int *)(param_2 + 300) + -1" (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) )))) + number_literal)) ;) })) (goto_statement "goto LAB_00047698;" goto statement_identifier ;) })) (if_statement "if ((*puVar2 & 0x10) != 0) goto LAB_00047698;" if (parenthesized_expression "((*puVar2 & 0x10) != 0)" ( (binary_expression "(*puVar2 & 0x10) != 0" (parenthesized_expression "(*puVar2 & 0x10)" ( (binary_expression "*puVar2 & 0x10" (pointer_expression "*puVar2" * identifier) & number_literal) )) != number_literal) )) (goto_statement "goto LAB_00047698;" goto statement_identifier ;)) (expression_statement "uVar13 = *(uint *)(puVar2 + 10);" (assignment_expression "uVar13 = *(uint *)(puVar2 + 10)" identifier = (pointer_expression "*(uint *)(puVar2 + 10)" * (cast_expression "(uint *)(puVar2 + 10)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 10)" ( (binary_expression "puVar2 + 10" identifier + number_literal) ))))) ;) (expression_statement "uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;" (assignment_expression "uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc" identifier = (binary_expression "uVar13 + *(int *)(param_2 + 300) * 0xc" identifier + (binary_expression "*(int *)(param_2 + 300) * 0xc" (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) )))) * number_literal))) ;) (expression_statement "uVar8 = uVar14;" (assignment_expression "uVar8 = uVar14" identifier = identifier) ;) (if_statement "if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }" if (parenthesized_expression "(uVar13 < uVar14)" ( (binary_expression "uVar13 < uVar14" identifier < identifier) )) (compound_statement "{\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }" { (do_statement "do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);" do (compound_statement "{\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    }" { (if_statement "if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;" if (parenthesized_expression "(((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0))" ( (binary_expression "((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)" (parenthesized_expression "((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820))" ( (binary_expression "(*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)" (parenthesized_expression "(*(uint *)(uVar8 - 0xc) != 0x20)" ( (binary_expression "*(uint *)(uVar8 - 0xc) != 0x20" (pointer_expression "*(uint *)(uVar8 - 0xc)" * (cast_expression "(uint *)(uVar8 - 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar8 - 0xc)" ( (binary_expression "uVar8 - 0xc" identifier - number_literal) )))) != number_literal) )) && (parenthesized_expression "((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)" ( (binary_expression "(*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820" (parenthesized_expression "(*(uint *)(uVar8 - 0xc) & 0xfffffcff)" ( (binary_expression "*(uint *)(uVar8 - 0xc) & 0xfffffcff" (pointer_expression "*(uint *)(uVar8 - 0xc)" * (cast_expression "(uint *)(uVar8 - 0xc)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar8 - 0xc)" ( (binary_expression "uVar8 - 0xc" identifier - number_literal) )))) & number_literal) )) != number_literal) ))) )) || (parenthesized_expression "(uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)" ( (comma_expression "uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0" (assignment_expression "uVar3 = uVar8 - 0xc" identifier = (binary_expression "uVar8 - 0xc" identifier - number_literal)) , (binary_expression "*(int *)(uVar8 - 4) != 0" (pointer_expression "*(int *)(uVar8 - 4)" * (cast_expression "(int *)(uVar8 - 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar8 - 4)" ( (binary_expression "uVar8 - 4" identifier - number_literal) )))) != number_literal)) ))) )) (break_statement "break;" break ;)) (expression_statement "uVar8 = uVar3;" (assignment_expression "uVar8 = uVar3" identifier = identifier) ;) }) while (parenthesized_expression "(uVar13 < uVar3)" ( (binary_expression "uVar13 < uVar3" identifier < identifier) )) ;) (if_statement "if (uVar8 == uVar14) goto LAB_00047a9c;" if (parenthesized_expression "(uVar8 == uVar14)" ( (binary_expression "uVar8 == uVar14" identifier == identifier) )) (goto_statement "goto LAB_00047a9c;" goto statement_identifier ;)) }) (else_clause "else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }" else (compound_statement "{\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }" { (labeled_statement "LAB_00047a9c:\n    uVar8 = uVar14 - 0xc;" statement_identifier : (expression_statement "uVar8 = uVar14 - 0xc;" (assignment_expression "uVar8 = uVar14 - 0xc" identifier = (binary_expression "uVar14 - 0xc" identifier - number_literal)) ;)) }))) (expression_statement "iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;" (assignment_expression "iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555" identifier = (binary_expression "((int)(uVar8 - uVar13) >> 2) * -0x55555555" (parenthesized_expression "((int)(uVar8 - uVar13) >> 2)" ( (binary_expression "(int)(uVar8 - uVar13) >> 2" (cast_expression "(int)(uVar8 - uVar13)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar8 - uVar13)" ( (binary_expression "uVar8 - uVar13" identifier - identifier) ))) >> number_literal) )) * number_literal)) ;) (if_statement "if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }" if (parenthesized_expression "((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1))" ( (binary_expression "(iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)" (parenthesized_expression "(iVar1 <= param_4)" ( (binary_expression "iVar1 <= param_4" identifier <= identifier) )) && (parenthesized_expression "(iVar15 = iVar1, param_5 != -1)" ( (comma_expression "iVar15 = iVar1, param_5 != -1" (assignment_expression "iVar15 = iVar1" identifier = identifier) , (binary_expression "param_5 != -1" identifier != number_literal)) ))) )) (compound_statement "{\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }" { (expression_statement "iVar15 = *(int *)(param_2 + 300) + -1;" (assignment_expression "iVar15 = *(int *)(param_2 + 300) + -1" identifier = (binary_expression "*(int *)(param_2 + 300) + -1" (pointer_expression "*(int *)(param_2 + 300)" * (cast_expression "(int *)(param_2 + 300)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 300)" ( (binary_expression "param_2 + 300" identifier + number_literal) )))) + number_literal)) ;) })) (labeled_statement "LAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }" statement_identifier : (if_statement "if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }" if (parenthesized_expression "(*(int *)(puVar2 + 6) != 0)" ( (binary_expression "*(int *)(puVar2 + 6) != 0" (pointer_expression "*(int *)(puVar2 + 6)" * (cast_expression "(int *)(puVar2 + 6)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(puVar2 + 6)" ( (binary_expression "puVar2 + 6" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }" { (expression_statement "FUN_000459d0(puVar2);" (call_expression "FUN_000459d0(puVar2)" identifier (argument_list "(puVar2)" ( identifier ))) ;) (expression_statement "*param_1 = param_3;" (assignment_expression "*param_1 = param_3" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[1] = iVar15;" (assignment_expression "param_1[1] = iVar15" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return param_1;" return identifier ;) }))) (expression_statement "*param_1 = param_3;" (assignment_expression "*param_1 = param_3" (pointer_expression "*param_1" * identifier) = identifier) ;) (expression_statement "param_1[1] = iVar15;" (assignment_expression "param_1[1] = iVar15" (subscript_expression "param_1[1]" identifier [ number_literal ]) = identifier) ;) (return_statement "return param_1;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier short) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , LIT , LIT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (break_statement break ;)) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) })) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) <= IDENT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , LIT , LIT ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (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 IDENT + LIT) )))) == 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 = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (for_statement for ( ; (comma_expression (assignment_expression IDENT = IDENT) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression LIT < IDENT))) ; (assignment_expression IDENT = (binary_expression IDENT + LIT)) ) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (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 IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (unary_expression - IDENT)) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT , IDENT , LIT , LIT ))))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (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 IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (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 IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression (parenthesized_expression ( (pointer_expression * IDENT) )) (argument_list ( IDENT ))) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) })) }))) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = LIT) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) })) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) )) != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT - LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT - LIT) )))) & LIT) )) != LIT) ))) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT - LIT)) , (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT - LIT) )))) != LIT)) ))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;)) }))) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - IDENT) ))) >> LIT) )) * LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT != LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + LIT)) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return IDENT ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (return_statement return IDENT ;) })))
(function_definition "int * FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)\n\n{\n  int iVar1;\n  ushort *puVar2;\n  uint uVar3;\n  int *piVar4;\n  short sVar9;\n  code *pcVar5;\n  int iVar6;\n  ushort *puVar7;\n  uint uVar8;\n  int iVar10;\n  int iVar11;\n  int iVar12;\n  uint uVar13;\n  uint uVar14;\n  int iVar15;\n  code *pcVar16;\n  \n  iVar1 = FUN_00044420(param_2);\n  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);\n  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);\n  iVar10 = *(int *)(param_2 + 0xe50);\n  if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }\n  iVar15 = param_4;\n  if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }\n  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;\n  uVar13 = *(uint *)(puVar2 + 10);\n  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;\n  uVar8 = uVar14;\n  if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }\n  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;\n  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }\nLAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }\n  *param_1 = param_3;\n  param_1[1] = iVar15;\n  return param_1;\n}" (primitive_type "int") (pointer_declarator "* FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)" (* "*") (function_declarator "FUN_000475d0(int *param_1,int param_2,int param_3,int param_4,int param_5)" (identifier "FUN_000475d0") (parameter_list "(int *param_1,int param_2,int param_3,int param_4,int param_5)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) (, ",") (parameter_declaration "int param_3" (primitive_type "int") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) () ")")))) (compound_statement "{\n  int iVar1;\n  ushort *puVar2;\n  uint uVar3;\n  int *piVar4;\n  short sVar9;\n  code *pcVar5;\n  int iVar6;\n  ushort *puVar7;\n  uint uVar8;\n  int iVar10;\n  int iVar11;\n  int iVar12;\n  uint uVar13;\n  uint uVar14;\n  int iVar15;\n  code *pcVar16;\n  \n  iVar1 = FUN_00044420(param_2);\n  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);\n  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);\n  iVar10 = *(int *)(param_2 + 0xe50);\n  if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }\n  iVar15 = param_4;\n  if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }\n  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;\n  uVar13 = *(uint *)(puVar2 + 10);\n  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;\n  uVar8 = uVar14;\n  if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }\n  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;\n  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }\nLAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }\n  *param_1 = param_3;\n  param_1[1] = iVar15;\n  return param_1;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "ushort *puVar2;" (type_identifier "ushort") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "int *piVar4;" (primitive_type "int") (pointer_declarator "*piVar4" (* "*") (identifier "piVar4")) (; ";")) (declaration "short sVar9;" (sized_type_specifier "short" (short "short")) (identifier "sVar9") (; ";")) (declaration "code *pcVar5;" (type_identifier "code") (pointer_declarator "*pcVar5" (* "*") (identifier "pcVar5")) (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "ushort *puVar7;" (type_identifier "ushort") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "int iVar10;" (primitive_type "int") (identifier "iVar10") (; ";")) (declaration "int iVar11;" (primitive_type "int") (identifier "iVar11") (; ";")) (declaration "int iVar12;" (primitive_type "int") (identifier "iVar12") (; ";")) (declaration "uint uVar13;" (type_identifier "uint") (identifier "uVar13") (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "int iVar15;" (primitive_type "int") (identifier "iVar15") (; ";")) (declaration "code *pcVar16;" (type_identifier "code") (pointer_declarator "*pcVar16" (* "*") (identifier "pcVar16")) (; ";")) (expression_statement "iVar1 = FUN_00044420(param_2);" (assignment_expression "iVar1 = FUN_00044420(param_2)" (identifier "iVar1") (= "=") (call_expression "FUN_00044420(param_2)" (identifier "FUN_00044420") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (expression_statement "pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);" (assignment_expression "pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc)" (identifier "pcVar16") (= "=") (cast_expression "(code *)(PTR_LAB_000b55b4 + 0x71fc)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000b55b4 + 0x71fc)" (( "(") (binary_expression "PTR_LAB_000b55b4 + 0x71fc" (identifier "PTR_LAB_000b55b4") (+ "+") (number_literal "0x71fc")) () ")")))) (; ";")) (expression_statement "puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);" (assignment_expression "puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0)" (identifier "puVar2") (= "=") (cast_expression "(ushort *)FUN_000471fc(param_2,param_3,0x16af,0)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_000471fc(param_2,param_3,0x16af,0)" (identifier "FUN_000471fc") (argument_list "(param_2,param_3,0x16af,0)" (( "(") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (number_literal "0x16af") (, ",") (number_literal "0") () ")"))))) (; ";")) (expression_statement "iVar10 = *(int *)(param_2 + 0xe50);" (assignment_expression "iVar10 = *(int *)(param_2 + 0xe50)" (identifier "iVar10") (= "=") (pointer_expression "*(int *)(param_2 + 0xe50)" (* "*") (cast_expression "(int *)(param_2 + 0xe50)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0xe50)" (( "(") (binary_expression "param_2 + 0xe50" (identifier "param_2") (+ "+") (number_literal "0xe50")) () ")"))))) (; ";")) (if_statement "if (iVar10 == 1) {\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }" (if "if") (parenthesized_expression "(iVar10 == 1)" (( "(") (binary_expression "iVar10 == 1" (identifier "iVar10") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n    iVar10 = *piVar4;\n    if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }\n    sVar9 = FUN_000442c4(param_2,iVar10);\n    iVar10 = (int)sVar9;\n    if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    goto LAB_00047698;\n  }" ({ "{") (expression_statement "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);" (assignment_expression "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" (identifier "piVar4") (= "=") (cast_expression "(int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(puVar2 + 10) + param_4 * 0xc)" (( "(") (binary_expression "*(int *)(puVar2 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar2 + 10)" (* "*") (cast_expression "(int *)(puVar2 + 10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 10)" (( "(") (binary_expression "puVar2 + 10" (identifier "puVar2") (+ "+") (number_literal "10")) () ")")))) (+ "+") (binary_expression "param_4 * 0xc" (identifier "param_4") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "iVar10 = *piVar4;" (assignment_expression "iVar10 = *piVar4" (identifier "iVar10") (= "=") (pointer_expression "*piVar4" (* "*") (identifier "piVar4"))) (; ";")) (if_statement "if ((0 < param_4) && (iVar10 == 0xdfff)) {\n      iVar10 = piVar4[-3];\n    }" (if "if") (parenthesized_expression "((0 < param_4) && (iVar10 == 0xdfff))" (( "(") (binary_expression "(0 < param_4) && (iVar10 == 0xdfff)" (parenthesized_expression "(0 < param_4)" (( "(") (binary_expression "0 < param_4" (number_literal "0") (< "<") (identifier "param_4")) () ")")) (&& "&&") (parenthesized_expression "(iVar10 == 0xdfff)" (( "(") (binary_expression "iVar10 == 0xdfff" (identifier "iVar10") (== "==") (number_literal "0xdfff")) () ")"))) () ")")) (compound_statement "{\n      iVar10 = piVar4[-3];\n    }" ({ "{") (expression_statement "iVar10 = piVar4[-3];" (assignment_expression "iVar10 = piVar4[-3]" (identifier "iVar10") (= "=") (subscript_expression "piVar4[-3]" (identifier "piVar4") ([ "[") (number_literal "-3") (] "]"))) (; ";")) (} "}"))) (expression_statement "sVar9 = FUN_000442c4(param_2,iVar10);" (assignment_expression "sVar9 = FUN_000442c4(param_2,iVar10)" (identifier "sVar9") (= "=") (call_expression "FUN_000442c4(param_2,iVar10)" (identifier "FUN_000442c4") (argument_list "(param_2,iVar10)" (( "(") (identifier "param_2") (, ",") (identifier "iVar10") () ")")))) (; ";")) (expression_statement "iVar10 = (int)sVar9;" (assignment_expression "iVar10 = (int)sVar9" (identifier "iVar10") (= "=") (cast_expression "(int)sVar9" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "sVar9"))) (; ";")) (if_statement "if (param_5 == 1) {\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }\n    else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" (if "if") (parenthesized_expression "(param_5 == 1)" (( "(") (binary_expression "param_5 == 1" (identifier "param_5") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n      iVar6 = *(int *)(param_2 + 300);\n      uVar8 = (uint)*puVar2;\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      iVar1 = iVar6 + -1;\n      uVar13 = uVar8 & 0x20;\nLAB_0004795c:\n      iVar11 = iVar1;\n      if (uVar13 == 0) goto LAB_00047968;\n      while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }\nLAB_000479d0:\n      iVar1 = param_3 + 1;\n      iVar15 = param_4;\n      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;\n      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);\n      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));\n      if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" ({ "{") (expression_statement "iVar6 = *(int *)(param_2 + 300);" (assignment_expression "iVar6 = *(int *)(param_2 + 300)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(param_2 + 300)" (* "*") (cast_expression "(int *)(param_2 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 300)" (( "(") (binary_expression "param_2 + 300" (identifier "param_2") (+ "+") (number_literal "300")) () ")"))))) (; ";")) (expression_statement "uVar8 = (uint)*puVar2;" (assignment_expression "uVar8 = (uint)*puVar2" (identifier "uVar8") (= "=") (binary_expression "(uint)*puVar2" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "puVar2"))) (; ";")) (expression_statement "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0)" (identifier "pcVar5") (= "=") (cast_expression "(code *)(PTR_LAB_000b55b4 + 0x59d0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000b55b4 + 0x59d0)" (( "(") (binary_expression "PTR_LAB_000b55b4 + 0x59d0" (identifier "PTR_LAB_000b55b4") (+ "+") (number_literal "0x59d0")) () ")")))) (; ";")) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar13 = uVar8 & 0x20;" (assignment_expression "uVar13 = uVar8 & 0x20" (identifier "uVar13") (= "=") (binary_expression "uVar8 & 0x20" (identifier "uVar8") (& "&") (number_literal "0x20"))) (; ";")) (labeled_statement "LAB_0004795c:\n      iVar11 = iVar1;" (statement_identifier "LAB_0004795c") (: ":") (expression_statement "iVar11 = iVar1;" (assignment_expression "iVar11 = iVar1" (identifier "iVar11") (= "=") (identifier "iVar1")) (; ";"))) (if_statement "if (uVar13 == 0) goto LAB_00047968;" (if "if") (parenthesized_expression "(uVar13 == 0)" (( "(") (binary_expression "uVar13 == 0" (identifier "uVar13") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00047968;" (goto "goto") (statement_identifier "LAB_00047968") (; ";"))) (while_statement "while( true ) {\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        iVar1 = iVar6 + -2;\nLAB_00047968:\n        iVar15 = param_4;\n        if (iVar1 <= param_4) break;\n        while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }\n      }" ({ "{") (expression_statement "iVar1 = iVar6 + -2;" (assignment_expression "iVar1 = iVar6 + -2" (identifier "iVar1") (= "=") (binary_expression "iVar6 + -2" (identifier "iVar6") (+ "+") (number_literal "-2"))) (; ";")) (labeled_statement "LAB_00047968:\n        iVar15 = param_4;" (statement_identifier "LAB_00047968") (: ":") (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" (identifier "iVar15") (= "=") (identifier "param_4")) (; ";"))) (if_statement "if (iVar1 <= param_4) break;" (if "if") (parenthesized_expression "(iVar1 <= param_4)" (( "(") (binary_expression "iVar1 <= param_4" (identifier "iVar1") (<= "<=") (identifier "param_4")) () ")")) (break_statement "break;" (break "break") (; ";"))) (while_statement "while( true ) {\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n          param_4 = iVar15 + 1;\n          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);\n          iVar1 = *piVar4;\n          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }\n          iVar1 = FUN_000442c4(param_2,iVar1);\n          if (iVar1 != iVar10) goto LAB_00047698;\n          if (uVar13 != 0) break;\n          iVar15 = param_4;\n          if (iVar11 <= param_4) goto LAB_000479d0;\n        }" ({ "{") (expression_statement "param_4 = iVar15 + 1;" (assignment_expression "param_4 = iVar15 + 1" (identifier "param_4") (= "=") (binary_expression "iVar15 + 1" (identifier "iVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);" (assignment_expression "piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" (identifier "piVar4") (= "=") (cast_expression "(int *)(*(int *)(puVar2 + 10) + param_4 * 0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(int *)(puVar2 + 10) + param_4 * 0xc)" (( "(") (binary_expression "*(int *)(puVar2 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar2 + 10)" (* "*") (cast_expression "(int *)(puVar2 + 10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 10)" (( "(") (binary_expression "puVar2 + 10" (identifier "puVar2") (+ "+") (number_literal "10")) () ")")))) (+ "+") (binary_expression "param_4 * 0xc" (identifier "param_4") (* "*") (number_literal "0xc"))) () ")")))) (; ";")) (expression_statement "iVar1 = *piVar4;" (assignment_expression "iVar1 = *piVar4" (identifier "iVar1") (= "=") (pointer_expression "*piVar4" (* "*") (identifier "piVar4"))) (; ";")) (if_statement "if ((-1 < iVar15) && (iVar1 == 0xdfff)) {\n            iVar1 = piVar4[-3];\n          }" (if "if") (parenthesized_expression "((-1 < iVar15) && (iVar1 == 0xdfff))" (( "(") (binary_expression "(-1 < iVar15) && (iVar1 == 0xdfff)" (parenthesized_expression "(-1 < iVar15)" (( "(") (binary_expression "-1 < iVar15" (number_literal "-1") (< "<") (identifier "iVar15")) () ")")) (&& "&&") (parenthesized_expression "(iVar1 == 0xdfff)" (( "(") (binary_expression "iVar1 == 0xdfff" (identifier "iVar1") (== "==") (number_literal "0xdfff")) () ")"))) () ")")) (compound_statement "{\n            iVar1 = piVar4[-3];\n          }" ({ "{") (expression_statement "iVar1 = piVar4[-3];" (assignment_expression "iVar1 = piVar4[-3]" (identifier "iVar1") (= "=") (subscript_expression "piVar4[-3]" (identifier "piVar4") ([ "[") (number_literal "-3") (] "]"))) (; ";")) (} "}"))) (expression_statement "iVar1 = FUN_000442c4(param_2,iVar1);" (assignment_expression "iVar1 = FUN_000442c4(param_2,iVar1)" (identifier "iVar1") (= "=") (call_expression "FUN_000442c4(param_2,iVar1)" (identifier "FUN_000442c4") (argument_list "(param_2,iVar1)" (( "(") (identifier "param_2") (, ",") (identifier "iVar1") () ")")))) (; ";")) (if_statement "if (iVar1 != iVar10) goto LAB_00047698;" (if "if") (parenthesized_expression "(iVar1 != iVar10)" (( "(") (binary_expression "iVar1 != iVar10" (identifier "iVar1") (!= "!=") (identifier "iVar10")) () ")")) (goto_statement "goto LAB_00047698;" (goto "goto") (statement_identifier "LAB_00047698") (; ";"))) (if_statement "if (uVar13 != 0) break;" (if "if") (parenthesized_expression "(uVar13 != 0)" (( "(") (binary_expression "uVar13 != 0" (identifier "uVar13") (!= "!=") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" (identifier "iVar15") (= "=") (identifier "param_4")) (; ";")) (if_statement "if (iVar11 <= param_4) goto LAB_000479d0;" (if "if") (parenthesized_expression "(iVar11 <= param_4)" (( "(") (binary_expression "iVar11 <= param_4" (identifier "iVar11") (<= "<=") (identifier "param_4")) () ")")) (goto_statement "goto LAB_000479d0;" (goto "goto") (statement_identifier "LAB_000479d0") (; ";"))) (} "}"))) (} "}"))) (labeled_statement "LAB_000479d0:\n      iVar1 = param_3 + 1;" (statement_identifier "LAB_000479d0") (: ":") (expression_statement "iVar1 = param_3 + 1;" (assignment_expression "iVar1 = param_3 + 1" (identifier "iVar1") (= "=") (binary_expression "param_3 + 1" (identifier "param_3") (+ "+") (number_literal "1"))) (; ";"))) (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" (identifier "iVar15") (= "=") (identifier "param_4")) (; ";")) (if_statement "if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;" (if "if") (parenthesized_expression "((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0))" (( "(") (binary_expression "(*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)" (parenthesized_expression "(*(int *)(param_2 + 0x128) <= iVar1)" (( "(") (binary_expression "*(int *)(param_2 + 0x128) <= iVar1" (pointer_expression "*(int *)(param_2 + 0x128)" (* "*") (cast_expression "(int *)(param_2 + 0x128)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 0x128)" (( "(") (binary_expression "param_2 + 0x128" (identifier "param_2") (+ "+") (number_literal "0x128")) () ")")))) (<= "<=") (identifier "iVar1")) () ")")) (|| "||") (parenthesized_expression "((uVar8 & 0x10) == 0)" (( "(") (binary_expression "(uVar8 & 0x10) == 0" (parenthesized_expression "(uVar8 & 0x10)" (( "(") (binary_expression "uVar8 & 0x10" (identifier "uVar8") (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (goto_statement "goto LAB_00047698;" (goto "goto") (statement_identifier "LAB_00047698") (; ";"))) (expression_statement "puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);" (assignment_expression "puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0)" (identifier "puVar7") (= "=") (cast_expression "(ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*pcVar16)(param_2,iVar1,0x16d5,0)" (parenthesized_expression "(*pcVar16)" (( "(") (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) () ")")) (argument_list "(param_2,iVar1,0x16d5,0)" (( "(") (identifier "param_2") (, ",") (identifier "iVar1") (, ",") (number_literal "0x16d5") (, ",") (number_literal "0") () ")"))))) (; ";")) (expression_statement "iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));" (assignment_expression "iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10))" (identifier "iVar6") (= "=") (call_expression "FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10))" (identifier "FUN_000442c4") (argument_list "(param_2,**(undefined4 **)(puVar7 + 10))" (( "(") (identifier "param_2") (, ",") (pointer_expression "**(undefined4 **)(puVar7 + 10)" (* "*") (pointer_expression "*(undefined4 **)(puVar7 + 10)" (* "*") (cast_expression "(undefined4 **)(puVar7 + 10)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar7 + 10)" (( "(") (binary_expression "puVar7 + 10" (identifier "puVar7") (+ "+") (number_literal "10")) () ")"))))) () ")")))) (; ";")) (if_statement "if (iVar6 == iVar10) {\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }" (if "if") (parenthesized_expression "(iVar6 == iVar10)" (( "(") (binary_expression "iVar6 == iVar10" (identifier "iVar6") (== "==") (identifier "iVar10")) () ")")) (compound_statement "{\n        param_3 = iVar1;\n        if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }\n        goto LAB_0004795c;\n      }" ({ "{") (expression_statement "param_3 = iVar1;" (assignment_expression "param_3 = iVar1" (identifier "param_3") (= "=") (identifier "iVar1")) (; ";")) (if_statement "if (*(int *)(puVar2 + 6) == 0) {\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }\n        else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }" (if "if") (parenthesized_expression "(*(int *)(puVar2 + 6) == 0)" (( "(") (binary_expression "*(int *)(puVar2 + 6) == 0" (pointer_expression "*(int *)(puVar2 + 6)" (* "*") (cast_expression "(int *)(puVar2 + 6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 6)" (( "(") (binary_expression "puVar2 + 6" (identifier "puVar2") (+ "+") (number_literal "6")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          iVar6 = *(int *)(param_2 + 300);\n          uVar8 = (uint)*puVar7;\n          iVar1 = iVar6 + -1;\n          uVar13 = uVar8 & 0x20;\n          param_4 = 0;\n          puVar2 = puVar7;\n        }" ({ "{") (expression_statement "iVar6 = *(int *)(param_2 + 300);" (assignment_expression "iVar6 = *(int *)(param_2 + 300)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(param_2 + 300)" (* "*") (cast_expression "(int *)(param_2 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 300)" (( "(") (binary_expression "param_2 + 300" (identifier "param_2") (+ "+") (number_literal "300")) () ")"))))) (; ";")) (expression_statement "uVar8 = (uint)*puVar7;" (assignment_expression "uVar8 = (uint)*puVar7" (identifier "uVar8") (= "=") (binary_expression "(uint)*puVar7" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "puVar7"))) (; ";")) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "uVar13 = uVar8 & 0x20;" (assignment_expression "uVar13 = uVar8 & 0x20" (identifier "uVar13") (= "=") (binary_expression "uVar8 & 0x20" (identifier "uVar8") (& "&") (number_literal "0x20"))) (; ";")) (expression_statement "param_4 = 0;" (assignment_expression "param_4 = 0" (identifier "param_4") (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar2 = puVar7;" (assignment_expression "puVar2 = puVar7" (identifier "puVar2") (= "=") (identifier "puVar7")) (; ";")) (} "}")) (else_clause "else {\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }" (else "else") (compound_statement "{\n          (*pcVar5)(puVar2);\n          param_4 = 0;\n          uVar8 = (uint)*puVar7;\n          iVar6 = *(int *)(param_2 + 300);\n          uVar13 = uVar8 & 0x20;\n          iVar1 = iVar6 + -1;\n          puVar2 = puVar7;\n        }" ({ "{") (expression_statement "(*pcVar5)(puVar2);" (call_expression "(*pcVar5)(puVar2)" (parenthesized_expression "(*pcVar5)" (( "(") (pointer_expression "*pcVar5" (* "*") (identifier "pcVar5")) () ")")) (argument_list "(puVar2)" (( "(") (identifier "puVar2") () ")"))) (; ";")) (expression_statement "param_4 = 0;" (assignment_expression "param_4 = 0" (identifier "param_4") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar8 = (uint)*puVar7;" (assignment_expression "uVar8 = (uint)*puVar7" (identifier "uVar8") (= "=") (binary_expression "(uint)*puVar7" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (identifier "puVar7"))) (; ";")) (expression_statement "iVar6 = *(int *)(param_2 + 300);" (assignment_expression "iVar6 = *(int *)(param_2 + 300)" (identifier "iVar6") (= "=") (pointer_expression "*(int *)(param_2 + 300)" (* "*") (cast_expression "(int *)(param_2 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 300)" (( "(") (binary_expression "param_2 + 300" (identifier "param_2") (+ "+") (number_literal "300")) () ")"))))) (; ";")) (expression_statement "uVar13 = uVar8 & 0x20;" (assignment_expression "uVar13 = uVar8 & 0x20" (identifier "uVar13") (= "=") (binary_expression "uVar8 & 0x20" (identifier "uVar8") (& "&") (number_literal "0x20"))) (; ";")) (expression_statement "iVar1 = iVar6 + -1;" (assignment_expression "iVar1 = iVar6 + -1" (identifier "iVar1") (= "=") (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "puVar2 = puVar7;" (assignment_expression "puVar2 = puVar7" (identifier "puVar2") (= "=") (identifier "puVar7")) (; ";")) (} "}")))) (goto_statement "goto LAB_0004795c;" (goto "goto") (statement_identifier "LAB_0004795c") (; ";")) (} "}"))) (if_statement "if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }" (if "if") (parenthesized_expression "(*(int *)(puVar7 + 6) != 0)" (( "(") (binary_expression "*(int *)(puVar7 + 6) != 0" (pointer_expression "*(int *)(puVar7 + 6)" (* "*") (cast_expression "(int *)(puVar7 + 6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + 6)" (( "(") (binary_expression "puVar7 + 6" (identifier "puVar7") (+ "+") (number_literal "6")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_000459d0(puVar7);\n      }" ({ "{") (expression_statement "FUN_000459d0(puVar7);" (call_expression "FUN_000459d0(puVar7)" (identifier "FUN_000459d0") (argument_list "(puVar7)" (( "(") (identifier "puVar7") () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" (else "else") (compound_statement "{\n      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);\n      puVar7 = puVar2;\n      while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }\n      if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }\n    }" ({ "{") (expression_statement "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);" (assignment_expression "pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0)" (identifier "pcVar5") (= "=") (cast_expression "(code *)(PTR_LAB_000b55b4 + 0x59d0)" (( "(") (type_descriptor "code *" (type_identifier "code") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_LAB_000b55b4 + 0x59d0)" (( "(") (binary_expression "PTR_LAB_000b55b4 + 0x59d0" (identifier "PTR_LAB_000b55b4") (+ "+") (number_literal "0x59d0")) () ")")))) (; ";")) (expression_statement "puVar7 = puVar2;" (assignment_expression "puVar7 = puVar2" (identifier "puVar7") (= "=") (identifier "puVar2")) (; ";")) (while_statement "while( true ) {\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }\n        iVar6 = param_3 + -1;\n        if (param_3 <= -iVar1) goto LAB_00047698;\n        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);\n        param_4 = *(int *)(param_2 + 300);\n        if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }\n        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;\n        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;\n        iVar12 = *(int *)(iVar11 + -0xc);\n        if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }\n        iVar11 = FUN_000442c4(param_2,iVar12);\n        if (iVar11 != iVar10) break;\n        param_4 = param_4 + -1;\n        param_3 = iVar6;\n        if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }\n      }" ({ "{") (for_statement "for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }" (for "for") (( "(") (; ";") (comma_expression "puVar2 = puVar7, iVar15 = param_4, 0 < param_4" (assignment_expression "puVar2 = puVar7" (identifier "puVar2") (= "=") (identifier "puVar7")) (, ",") (comma_expression "iVar15 = param_4, 0 < param_4" (assignment_expression "iVar15 = param_4" (identifier "iVar15") (= "=") (identifier "param_4")) (, ",") (binary_expression "0 < param_4" (number_literal "0") (< "<") (identifier "param_4")))) (; ";") (assignment_expression "param_4 = param_4 + -1" (identifier "param_4") (= "=") (binary_expression "param_4 + -1" (identifier "param_4") (+ "+") (number_literal "-1"))) () ")") (compound_statement "{\n          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;\n          iVar11 = *(int *)(iVar6 + -0xc);\n          if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }\n          iVar6 = FUN_000442c4(param_2,iVar11);\n          if (iVar6 != iVar10) goto LAB_00047698;\n          puVar7 = puVar2;\n        }" ({ "{") (expression_statement "iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;" (assignment_expression "iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc" (identifier "iVar6") (= "=") (binary_expression "*(int *)(puVar2 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar2 + 10)" (* "*") (cast_expression "(int *)(puVar2 + 10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 10)" (( "(") (binary_expression "puVar2 + 10" (identifier "puVar2") (+ "+") (number_literal "10")) () ")")))) (+ "+") (binary_expression "param_4 * 0xc" (identifier "param_4") (* "*") (number_literal "0xc")))) (; ";")) (expression_statement "iVar11 = *(int *)(iVar6 + -0xc);" (assignment_expression "iVar11 = *(int *)(iVar6 + -0xc)" (identifier "iVar11") (= "=") (pointer_expression "*(int *)(iVar6 + -0xc)" (* "*") (cast_expression "(int *)(iVar6 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + -0xc)" (( "(") (binary_expression "iVar6 + -0xc" (identifier "iVar6") (+ "+") (number_literal "-0xc")) () ")"))))) (; ";")) (if_statement "if ((param_4 != 1) && (iVar11 == 0xdfff)) {\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }" (if "if") (parenthesized_expression "((param_4 != 1) && (iVar11 == 0xdfff))" (( "(") (binary_expression "(param_4 != 1) && (iVar11 == 0xdfff)" (parenthesized_expression "(param_4 != 1)" (( "(") (binary_expression "param_4 != 1" (identifier "param_4") (!= "!=") (number_literal "1")) () ")")) (&& "&&") (parenthesized_expression "(iVar11 == 0xdfff)" (( "(") (binary_expression "iVar11 == 0xdfff" (identifier "iVar11") (== "==") (number_literal "0xdfff")) () ")"))) () ")")) (compound_statement "{\n            iVar11 = *(int *)(iVar6 + -0x18);\n          }" ({ "{") (expression_statement "iVar11 = *(int *)(iVar6 + -0x18);" (assignment_expression "iVar11 = *(int *)(iVar6 + -0x18)" (identifier "iVar11") (= "=") (pointer_expression "*(int *)(iVar6 + -0x18)" (* "*") (cast_expression "(int *)(iVar6 + -0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar6 + -0x18)" (( "(") (binary_expression "iVar6 + -0x18" (identifier "iVar6") (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (} "}"))) (expression_statement "iVar6 = FUN_000442c4(param_2,iVar11);" (assignment_expression "iVar6 = FUN_000442c4(param_2,iVar11)" (identifier "iVar6") (= "=") (call_expression "FUN_000442c4(param_2,iVar11)" (identifier "FUN_000442c4") (argument_list "(param_2,iVar11)" (( "(") (identifier "param_2") (, ",") (identifier "iVar11") () ")")))) (; ";")) (if_statement "if (iVar6 != iVar10) goto LAB_00047698;" (if "if") (parenthesized_expression "(iVar6 != iVar10)" (( "(") (binary_expression "iVar6 != iVar10" (identifier "iVar6") (!= "!=") (identifier "iVar10")) () ")")) (goto_statement "goto LAB_00047698;" (goto "goto") (statement_identifier "LAB_00047698") (; ";"))) (expression_statement "puVar7 = puVar2;" (assignment_expression "puVar7 = puVar2" (identifier "puVar7") (= "=") (identifier "puVar2")) (; ";")) (} "}"))) (expression_statement "iVar6 = param_3 + -1;" (assignment_expression "iVar6 = param_3 + -1" (identifier "iVar6") (= "=") (binary_expression "param_3 + -1" (identifier "param_3") (+ "+") (number_literal "-1"))) (; ";")) (if_statement "if (param_3 <= -iVar1) goto LAB_00047698;" (if "if") (parenthesized_expression "(param_3 <= -iVar1)" (( "(") (binary_expression "param_3 <= -iVar1" (identifier "param_3") (<= "<=") (unary_expression "-iVar1" (- "-") (identifier "iVar1"))) () ")")) (goto_statement "goto LAB_00047698;" (goto "goto") (statement_identifier "LAB_00047698") (; ";"))) (expression_statement "puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);" (assignment_expression "puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0)" (identifier "puVar7") (= "=") (cast_expression "(ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "(*pcVar16)(param_2,iVar6,0x16f0,0)" (parenthesized_expression "(*pcVar16)" (( "(") (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) () ")")) (argument_list "(param_2,iVar6,0x16f0,0)" (( "(") (identifier "param_2") (, ",") (identifier "iVar6") (, ",") (number_literal "0x16f0") (, ",") (number_literal "0") () ")"))))) (; ";")) (expression_statement "param_4 = *(int *)(param_2 + 300);" (assignment_expression "param_4 = *(int *)(param_2 + 300)" (identifier "param_4") (= "=") (pointer_expression "*(int *)(param_2 + 300)" (* "*") (cast_expression "(int *)(param_2 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 300)" (( "(") (binary_expression "param_2 + 300" (identifier "param_2") (+ "+") (number_literal "300")) () ")"))))) (; ";")) (if_statement "if ((*puVar7 & 0x20) != 0) {\n          param_4 = param_4 + -1;\n        }" (if "if") (parenthesized_expression "((*puVar7 & 0x20) != 0)" (( "(") (binary_expression "(*puVar7 & 0x20) != 0" (parenthesized_expression "(*puVar7 & 0x20)" (( "(") (binary_expression "*puVar7 & 0x20" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (& "&") (number_literal "0x20")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          param_4 = param_4 + -1;\n        }" ({ "{") (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" (identifier "param_4") (= "=") (binary_expression "param_4 + -1" (identifier "param_4") (+ "+") (number_literal "-1"))) (; ";")) (} "}"))) (if_statement "if ((*puVar7 & 0x10) == 0) goto LAB_00047698;" (if "if") (parenthesized_expression "((*puVar7 & 0x10) == 0)" (( "(") (binary_expression "(*puVar7 & 0x10) == 0" (parenthesized_expression "(*puVar7 & 0x10)" (( "(") (binary_expression "*puVar7 & 0x10" (pointer_expression "*puVar7" (* "*") (identifier "puVar7")) (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00047698;" (goto "goto") (statement_identifier "LAB_00047698") (; ";"))) (expression_statement "iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;" (assignment_expression "iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc" (identifier "iVar11") (= "=") (binary_expression "*(int *)(puVar7 + 10) + param_4 * 0xc" (pointer_expression "*(int *)(puVar7 + 10)" (* "*") (cast_expression "(int *)(puVar7 + 10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + 10)" (( "(") (binary_expression "puVar7 + 10" (identifier "puVar7") (+ "+") (number_literal "10")) () ")")))) (+ "+") (binary_expression "param_4 * 0xc" (identifier "param_4") (* "*") (number_literal "0xc")))) (; ";")) (expression_statement "iVar12 = *(int *)(iVar11 + -0xc);" (assignment_expression "iVar12 = *(int *)(iVar11 + -0xc)" (identifier "iVar12") (= "=") (pointer_expression "*(int *)(iVar11 + -0xc)" (* "*") (cast_expression "(int *)(iVar11 + -0xc)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + -0xc)" (( "(") (binary_expression "iVar11 + -0xc" (identifier "iVar11") (+ "+") (number_literal "-0xc")) () ")"))))) (; ";")) (if_statement "if ((1 < param_4) && (iVar12 == 0xdfff)) {\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }" (if "if") (parenthesized_expression "((1 < param_4) && (iVar12 == 0xdfff))" (( "(") (binary_expression "(1 < param_4) && (iVar12 == 0xdfff)" (parenthesized_expression "(1 < param_4)" (( "(") (binary_expression "1 < param_4" (number_literal "1") (< "<") (identifier "param_4")) () ")")) (&& "&&") (parenthesized_expression "(iVar12 == 0xdfff)" (( "(") (binary_expression "iVar12 == 0xdfff" (identifier "iVar12") (== "==") (number_literal "0xdfff")) () ")"))) () ")")) (compound_statement "{\n          iVar12 = *(int *)(iVar11 + -0x18);\n        }" ({ "{") (expression_statement "iVar12 = *(int *)(iVar11 + -0x18);" (assignment_expression "iVar12 = *(int *)(iVar11 + -0x18)" (identifier "iVar12") (= "=") (pointer_expression "*(int *)(iVar11 + -0x18)" (* "*") (cast_expression "(int *)(iVar11 + -0x18)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(iVar11 + -0x18)" (( "(") (binary_expression "iVar11 + -0x18" (identifier "iVar11") (+ "+") (number_literal "-0x18")) () ")"))))) (; ";")) (} "}"))) (expression_statement "iVar11 = FUN_000442c4(param_2,iVar12);" (assignment_expression "iVar11 = FUN_000442c4(param_2,iVar12)" (identifier "iVar11") (= "=") (call_expression "FUN_000442c4(param_2,iVar12)" (identifier "FUN_000442c4") (argument_list "(param_2,iVar12)" (( "(") (identifier "param_2") (, ",") (identifier "iVar12") () ")")))) (; ";")) (if_statement "if (iVar11 != iVar10) break;" (if "if") (parenthesized_expression "(iVar11 != iVar10)" (( "(") (binary_expression "iVar11 != iVar10" (identifier "iVar11") (!= "!=") (identifier "iVar10")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "param_4 = param_4 + -1;" (assignment_expression "param_4 = param_4 + -1" (identifier "param_4") (= "=") (binary_expression "param_4 + -1" (identifier "param_4") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "param_3 = iVar6;" (assignment_expression "param_3 = iVar6" (identifier "param_3") (= "=") (identifier "iVar6")) (; ";")) (if_statement "if (*(int *)(puVar2 + 6) != 0) {\n          (*pcVar5)(puVar2);\n        }" (if "if") (parenthesized_expression "(*(int *)(puVar2 + 6) != 0)" (( "(") (binary_expression "*(int *)(puVar2 + 6) != 0" (pointer_expression "*(int *)(puVar2 + 6)" (* "*") (cast_expression "(int *)(puVar2 + 6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 6)" (( "(") (binary_expression "puVar2 + 6" (identifier "puVar2") (+ "+") (number_literal "6")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          (*pcVar5)(puVar2);\n        }" ({ "{") (expression_statement "(*pcVar5)(puVar2);" (call_expression "(*pcVar5)(puVar2)" (parenthesized_expression "(*pcVar5)" (( "(") (pointer_expression "*pcVar5" (* "*") (identifier "pcVar5")) () ")")) (argument_list "(puVar2)" (( "(") (identifier "puVar2") () ")"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (*(int *)(puVar7 + 6) != 0) {\n        FUN_000459d0(puVar7);\n      }" (if "if") (parenthesized_expression "(*(int *)(puVar7 + 6) != 0)" (( "(") (binary_expression "*(int *)(puVar7 + 6) != 0" (pointer_expression "*(int *)(puVar7 + 6)" (* "*") (cast_expression "(int *)(puVar7 + 6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar7 + 6)" (( "(") (binary_expression "puVar7 + 6" (identifier "puVar7") (+ "+") (number_literal "6")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_000459d0(puVar7);\n      }" ({ "{") (expression_statement "FUN_000459d0(puVar7);" (call_expression "FUN_000459d0(puVar7)" (identifier "FUN_000459d0") (argument_list "(puVar7)" (( "(") (identifier "puVar7") () ")"))) (; ";")) (} "}"))) (} "}")))) (goto_statement "goto LAB_00047698;" (goto "goto") (statement_identifier "LAB_00047698") (; ";")) (} "}"))) (expression_statement "iVar15 = param_4;" (assignment_expression "iVar15 = param_4" (identifier "iVar15") (= "=") (identifier "param_4")) (; ";")) (if_statement "if (iVar10 != 0) {\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }" (if "if") (parenthesized_expression "(iVar10 != 0)" (( "(") (binary_expression "iVar10 != 0" (identifier "iVar10") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }\n    goto LAB_00047698;\n  }" ({ "{") (if_statement "if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }" (if "if") (parenthesized_expression "((iVar10 == 2) && (iVar15 = 0, param_5 != -1))" (( "(") (binary_expression "(iVar10 == 2) && (iVar15 = 0, param_5 != -1)" (parenthesized_expression "(iVar10 == 2)" (( "(") (binary_expression "iVar10 == 2" (identifier "iVar10") (== "==") (number_literal "2")) () ")")) (&& "&&") (parenthesized_expression "(iVar15 = 0, param_5 != -1)" (( "(") (comma_expression "iVar15 = 0, param_5 != -1" (assignment_expression "iVar15 = 0" (identifier "iVar15") (= "=") (number_literal "0")) (, ",") (binary_expression "param_5 != -1" (identifier "param_5") (!= "!=") (number_literal "-1"))) () ")"))) () ")")) (compound_statement "{\n      iVar15 = *(int *)(param_2 + 300) + -1;\n    }" ({ "{") (expression_statement "iVar15 = *(int *)(param_2 + 300) + -1;" (assignment_expression "iVar15 = *(int *)(param_2 + 300) + -1" (identifier "iVar15") (= "=") (binary_expression "*(int *)(param_2 + 300) + -1" (pointer_expression "*(int *)(param_2 + 300)" (* "*") (cast_expression "(int *)(param_2 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 300)" (( "(") (binary_expression "param_2 + 300" (identifier "param_2") (+ "+") (number_literal "300")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (} "}"))) (goto_statement "goto LAB_00047698;" (goto "goto") (statement_identifier "LAB_00047698") (; ";")) (} "}"))) (if_statement "if ((*puVar2 & 0x10) != 0) goto LAB_00047698;" (if "if") (parenthesized_expression "((*puVar2 & 0x10) != 0)" (( "(") (binary_expression "(*puVar2 & 0x10) != 0" (parenthesized_expression "(*puVar2 & 0x10)" (( "(") (binary_expression "*puVar2 & 0x10" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (& "&") (number_literal "0x10")) () ")")) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00047698;" (goto "goto") (statement_identifier "LAB_00047698") (; ";"))) (expression_statement "uVar13 = *(uint *)(puVar2 + 10);" (assignment_expression "uVar13 = *(uint *)(puVar2 + 10)" (identifier "uVar13") (= "=") (pointer_expression "*(uint *)(puVar2 + 10)" (* "*") (cast_expression "(uint *)(puVar2 + 10)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 10)" (( "(") (binary_expression "puVar2 + 10" (identifier "puVar2") (+ "+") (number_literal "10")) () ")"))))) (; ";")) (expression_statement "uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;" (assignment_expression "uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc" (identifier "uVar14") (= "=") (binary_expression "uVar13 + *(int *)(param_2 + 300) * 0xc" (identifier "uVar13") (+ "+") (binary_expression "*(int *)(param_2 + 300) * 0xc" (pointer_expression "*(int *)(param_2 + 300)" (* "*") (cast_expression "(int *)(param_2 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 300)" (( "(") (binary_expression "param_2 + 300" (identifier "param_2") (+ "+") (number_literal "300")) () ")")))) (* "*") (number_literal "0xc")))) (; ";")) (expression_statement "uVar8 = uVar14;" (assignment_expression "uVar8 = uVar14" (identifier "uVar8") (= "=") (identifier "uVar14")) (; ";")) (if_statement "if (uVar13 < uVar14) {\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }\n  else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }" (if "if") (parenthesized_expression "(uVar13 < uVar14)" (( "(") (binary_expression "uVar13 < uVar14" (identifier "uVar13") (< "<") (identifier "uVar14")) () ")")) (compound_statement "{\n    do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);\n    if (uVar8 == uVar14) goto LAB_00047a9c;\n  }" ({ "{") (do_statement "do {\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    } while (uVar13 < uVar3);" (do "do") (compound_statement "{\n      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;\n      uVar8 = uVar3;\n    }" ({ "{") (if_statement "if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;" (if "if") (parenthesized_expression "(((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0))" (( "(") (binary_expression "((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||\n         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)" (parenthesized_expression "((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820))" (( "(") (binary_expression "(*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)" (parenthesized_expression "(*(uint *)(uVar8 - 0xc) != 0x20)" (( "(") (binary_expression "*(uint *)(uVar8 - 0xc) != 0x20" (pointer_expression "*(uint *)(uVar8 - 0xc)" (* "*") (cast_expression "(uint *)(uVar8 - 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar8 - 0xc)" (( "(") (binary_expression "uVar8 - 0xc" (identifier "uVar8") (- "-") (number_literal "0xc")) () ")")))) (!= "!=") (number_literal "0x20")) () ")")) (&& "&&") (parenthesized_expression "((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)" (( "(") (binary_expression "(*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820" (parenthesized_expression "(*(uint *)(uVar8 - 0xc) & 0xfffffcff)" (( "(") (binary_expression "*(uint *)(uVar8 - 0xc) & 0xfffffcff" (pointer_expression "*(uint *)(uVar8 - 0xc)" (* "*") (cast_expression "(uint *)(uVar8 - 0xc)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar8 - 0xc)" (( "(") (binary_expression "uVar8 - 0xc" (identifier "uVar8") (- "-") (number_literal "0xc")) () ")")))) (& "&") (number_literal "0xfffffcff")) () ")")) (!= "!=") (number_literal "0xd820")) () ")"))) () ")")) (|| "||") (parenthesized_expression "(uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)" (( "(") (comma_expression "uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0" (assignment_expression "uVar3 = uVar8 - 0xc" (identifier "uVar3") (= "=") (binary_expression "uVar8 - 0xc" (identifier "uVar8") (- "-") (number_literal "0xc"))) (, ",") (binary_expression "*(int *)(uVar8 - 4) != 0" (pointer_expression "*(int *)(uVar8 - 4)" (* "*") (cast_expression "(int *)(uVar8 - 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar8 - 4)" (( "(") (binary_expression "uVar8 - 4" (identifier "uVar8") (- "-") (number_literal "4")) () ")")))) (!= "!=") (number_literal "0"))) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar8 = uVar3;" (assignment_expression "uVar8 = uVar3" (identifier "uVar8") (= "=") (identifier "uVar3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar13 < uVar3)" (( "(") (binary_expression "uVar13 < uVar3" (identifier "uVar13") (< "<") (identifier "uVar3")) () ")")) (; ";")) (if_statement "if (uVar8 == uVar14) goto LAB_00047a9c;" (if "if") (parenthesized_expression "(uVar8 == uVar14)" (( "(") (binary_expression "uVar8 == uVar14" (identifier "uVar8") (== "==") (identifier "uVar14")) () ")")) (goto_statement "goto LAB_00047a9c;" (goto "goto") (statement_identifier "LAB_00047a9c") (; ";"))) (} "}")) (else_clause "else {\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }" (else "else") (compound_statement "{\nLAB_00047a9c:\n    uVar8 = uVar14 - 0xc;\n  }" ({ "{") (labeled_statement "LAB_00047a9c:\n    uVar8 = uVar14 - 0xc;" (statement_identifier "LAB_00047a9c") (: ":") (expression_statement "uVar8 = uVar14 - 0xc;" (assignment_expression "uVar8 = uVar14 - 0xc" (identifier "uVar8") (= "=") (binary_expression "uVar14 - 0xc" (identifier "uVar14") (- "-") (number_literal "0xc"))) (; ";"))) (} "}")))) (expression_statement "iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;" (assignment_expression "iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555" (identifier "iVar1") (= "=") (binary_expression "((int)(uVar8 - uVar13) >> 2) * -0x55555555" (parenthesized_expression "((int)(uVar8 - uVar13) >> 2)" (( "(") (binary_expression "(int)(uVar8 - uVar13) >> 2" (cast_expression "(int)(uVar8 - uVar13)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar8 - uVar13)" (( "(") (binary_expression "uVar8 - uVar13" (identifier "uVar8") (- "-") (identifier "uVar13")) () ")"))) (>> ">>") (number_literal "2")) () ")")) (* "*") (number_literal "-0x55555555"))) (; ";")) (if_statement "if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }" (if "if") (parenthesized_expression "((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1))" (( "(") (binary_expression "(iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)" (parenthesized_expression "(iVar1 <= param_4)" (( "(") (binary_expression "iVar1 <= param_4" (identifier "iVar1") (<= "<=") (identifier "param_4")) () ")")) (&& "&&") (parenthesized_expression "(iVar15 = iVar1, param_5 != -1)" (( "(") (comma_expression "iVar15 = iVar1, param_5 != -1" (assignment_expression "iVar15 = iVar1" (identifier "iVar15") (= "=") (identifier "iVar1")) (, ",") (binary_expression "param_5 != -1" (identifier "param_5") (!= "!=") (number_literal "-1"))) () ")"))) () ")")) (compound_statement "{\n    iVar15 = *(int *)(param_2 + 300) + -1;\n  }" ({ "{") (expression_statement "iVar15 = *(int *)(param_2 + 300) + -1;" (assignment_expression "iVar15 = *(int *)(param_2 + 300) + -1" (identifier "iVar15") (= "=") (binary_expression "*(int *)(param_2 + 300) + -1" (pointer_expression "*(int *)(param_2 + 300)" (* "*") (cast_expression "(int *)(param_2 + 300)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 300)" (( "(") (binary_expression "param_2 + 300" (identifier "param_2") (+ "+") (number_literal "300")) () ")")))) (+ "+") (number_literal "-1"))) (; ";")) (} "}"))) (labeled_statement "LAB_00047698:\n  if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }" (statement_identifier "LAB_00047698") (: ":") (if_statement "if (*(int *)(puVar2 + 6) != 0) {\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }" (if "if") (parenthesized_expression "(*(int *)(puVar2 + 6) != 0)" (( "(") (binary_expression "*(int *)(puVar2 + 6) != 0" (pointer_expression "*(int *)(puVar2 + 6)" (* "*") (cast_expression "(int *)(puVar2 + 6)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(puVar2 + 6)" (( "(") (binary_expression "puVar2 + 6" (identifier "puVar2") (+ "+") (number_literal "6")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_000459d0(puVar2);\n    *param_1 = param_3;\n    param_1[1] = iVar15;\n    return param_1;\n  }" ({ "{") (expression_statement "FUN_000459d0(puVar2);" (call_expression "FUN_000459d0(puVar2)" (identifier "FUN_000459d0") (argument_list "(puVar2)" (( "(") (identifier "puVar2") () ")"))) (; ";")) (expression_statement "*param_1 = param_3;" (assignment_expression "*param_1 = param_3" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "param_1[1] = iVar15;" (assignment_expression "param_1[1] = iVar15" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar15")) (; ";")) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))) (expression_statement "*param_1 = param_3;" (assignment_expression "*param_1 = param_3" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "param_1[1] = iVar15;" (assignment_expression "param_1[1] = iVar15" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "iVar15")) (; ";")) (return_statement "return param_1;" (return "return") (identifier "param_1") (; ";")) (} "}")))

/* WARNING: Enum "anon_enum_32": Some values do not have unique names */

type_1 function_1(type_2 *term,type_1 p,int var_4)

{
  int var_11;
  type_3 *line;
  type_4 *var_21;
  type_4 *var_20;
  type_5 *ptVar4;
  type_6 *pcVar5;
  int var_8;
  int var_16;
  type_3 *ptVar8;
  int var_17;
  int extraout_v1;
  int extraout_v1_00;
  int var_5;
  type_7 var_6;
  int var_13;
  type_4 *var_18;
  type_5 *var_15;
  int var_12;
  type_8 var_9;
  type_4 *var_19;
  type_8 var_10;
  type_5 *ptVar16;
  type_6 *pcVar17;
  type_1 pVar18;
  type_9 uVar19;
  
  var_11 = var_1((type_2 *)var_4);
  pcVar17 = (type_6 *)(var_2 + 0x71fc);
  line = var_3((type_2 *)var_4,var_13,0x16af,0);
  var_5 = *(int *)(var_4 + 0xe50);
  if (var_5 == 1) {
    var_6 = line->chars[(int)var_15].chr;
    if ((0 < (int)var_15) && (var_6 == 0xdfff)) {
      var_6 = (line->chars + (int)var_15)[-1].chr;
    }
    var_5 = var_7((type_2 *)var_4,var_6);
    var_5 = (int)(short)var_5;
    if (p.y == 1) {
      var_8 = *(int *)(var_4 + 300);
      var_9 = (type_8)line->lattr;
      pcVar5 = (type_6 *)(var_2 + 0x59d0);
      var_11 = var_8 + -1;
      var_10 = var_9 & 0x20;
LAB_0004795c:
      var_12 = var_11;
      if (var_10 == 0) goto LAB_00047968;
      while( true ) {
        var_11 = var_8 + -2;
LAB_00047968:
        ptVar16 = var_15;
        if (var_11 <= (int)var_15) break;
        while( true ) {
          var_15 = (type_5 *)((int)&ptVar16->root + 1);
          var_6 = line->chars[(int)var_15].chr;
          if ((-1 < (int)ptVar16) && (var_17 = 0xdfff, var_6 == 0xdfff)) {
            var_6 = (line->chars + (int)var_15)[-1].chr;
          }
          var_11 = var_7((type_2 *)var_4,var_6);
          if (var_11 != var_5) goto LAB_00047698;
          if (var_10 != 0) break;
          ptVar16 = var_15;
          if (var_12 <= (int)var_15) goto LAB_000479d0;
        }
      }
LAB_000479d0:
      var_11 = var_13 + 1;
      ptVar16 = var_15;
      if ((*(int *)(var_4 + 0x128) <= var_11) || ((var_9 & 0x10) == 0)) goto LAB_00047698;
      uVar19 = (*pcVar17)(var_4,var_11,0x16d5,0);
      ptVar8 = (type_3 *)((type_10)uVar19 >> 0x20);
      var_17 = (int)uVar19;
      var_8 = var_7((type_2 *)var_4,ptVar8->chars->chr);
      if (var_8 == var_5) {
        var_13 = var_11;
        if (line->temporary == 0) {
          var_8 = *(int *)(var_4 + 300);
          var_9 = (type_8)ptVar8->lattr;
          var_11 = var_8 + -1;
          var_10 = var_9 & 0x20;
          var_15 = (type_5 *)0x0;
          line = ptVar8;
        }
        else {
          (*pcVar5)(line);
          var_15 = (type_5 *)0x0;
          var_9 = (type_8)ptVar8->lattr;
          var_8 = *(int *)(var_4 + 300);
          var_10 = var_9 & 0x20;
          var_11 = var_8 + -1;
          var_17 = extraout_v1_00;
          line = ptVar8;
        }
        goto LAB_0004795c;
      }
      if (ptVar8->temporary != 0) {
                    /* WARNING: Subroutine does not return */
        var_14(ptVar8);
      }
    }
    else {
      pcVar5 = (type_6 *)(var_2 + 0x59d0);
      ptVar8 = line;
      while( true ) {
        for (; line = ptVar8, ptVar16 = var_15, 0 < (int)var_15;
            var_15 = (type_5 *)((int)&var_15[-1].cmp + 3)) {
          var_17 = 1;
          var_6 = line->chars[(int)((int)&var_15[-1].cmp + 3)].chr;
          if ((var_15 != (type_5 *)0x1) && (var_17 = 0xdfff, var_6 == 0xdfff)) {
            var_6 = line->chars[(int)((int)&var_15[-1].cmp + 2)].chr;
          }
          var_8 = var_7((type_2 *)var_4,var_6);
          if (var_8 != var_5) goto LAB_00047698;
          ptVar8 = line;
        }
        var_8 = var_13 + -1;
        if (var_13 <= -var_11) goto LAB_00047698;
        uVar19 = (*pcVar17)(var_4,var_8,0x16f0,0);
        ptVar8 = (type_3 *)((type_10)uVar19 >> 0x20);
        var_17 = (int)uVar19;
        var_12 = *(int *)(var_4 + 300);
        if ((ptVar8->lattr & 0x20) != 0) {
          var_12 = var_12 + -1;
        }
        if ((ptVar8->lattr & 0x10) == 0) goto LAB_00047698;
        var_6 = ptVar8->chars[var_12 + -1].chr;
        if ((1 < var_12) && (var_17 = 0xdfff, var_6 == 0xdfff)) {
          var_6 = ptVar8->chars[var_12 + -2].chr;
        }
        var_16 = var_7((type_2 *)var_4,var_6);
        if (var_16 != var_5) break;
        var_15 = (type_5 *)(var_12 + -1);
        var_13 = var_8;
        if (line->temporary != 0) {
          (*pcVar5)(line);
          var_17 = extraout_v1;
        }
      }
      if (ptVar8->temporary != 0) {
                    /* WARNING: Subroutine does not return */
        var_14(ptVar8);
      }
    }
    goto LAB_00047698;
  }
  ptVar16 = var_15;
  if (var_5 != 0) {
    var_17 = p.y;
    if ((var_5 == 2) && (ptVar16 = (type_5 *)0x0, p.y != -1)) {
      var_17 = *(int *)(var_4 + 300);
      ptVar16 = (type_5 *)(var_17 + -1);
    }
    goto LAB_00047698;
  }
  if ((line->lattr & 0x10) != 0) goto LAB_00047698;
  var_18 = line->chars;
  var_19 = var_18 + *(int *)(var_4 + 300);
  var_20 = var_19;
  if (var_18 < var_19) {
    do {
      if (((var_20[-1].chr != 0x20) && ((var_20[-1].chr & 0xfffffcff) != 0xd820)) ||
         (var_21 = var_20 + -1, var_20[-1].cc_next != 0)) break;
      var_20 = var_21;
    } while (var_18 < var_21);
    if (var_20 == var_19) goto LAB_00047a9c;
  }
  else {
LAB_00047a9c:
    var_20 = var_19 + -1;
  }
  ptVar4 = (type_5 *)(((int)var_20 - (int)var_18 >> 2) * -0x55555555);
  if (((int)ptVar4 <= (int)var_15) && (var_17 = -1, ptVar16 = ptVar4, p.y != -1)) {
    ptVar16 = (type_5 *)(*(int *)(var_4 + 300) + -1);
  }
LAB_00047698:
  if (line->temporary != 0) {
                    /* WARNING: Subroutine does not return */
    var_14(line);
  }
  term->compatibility_level = var_13;
  term->scrollback = ptVar16;
  pVar18.y = (int)term;
  pVar18.x = var_17;
  return pVar18;
}


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

int * MASKED(int *param_1,int param_2,int param_3,int param_4,int param_5)

{
  int iVar1;
  ushort *puVar2;
  uint uVar3;
  int *piVar4;
  short sVar9;
  code *pcVar5;
  int iVar6;
  ushort *puVar7;
  uint uVar8;
  int iVar10;
  int iVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  int iVar15;
  code *pcVar16;
  
  iVar1 = FUN_00044420(param_2);
  pcVar16 = (code *)(PTR_LAB_000b55b4 + 0x71fc);
  puVar2 = (ushort *)FUN_000471fc(param_2,param_3,0x16af,0);
  iVar10 = *(int *)(param_2 + 0xe50);
  if (iVar10 == 1) {
    piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);
    iVar10 = *piVar4;
    if ((0 < param_4) && (iVar10 == 0xdfff)) {
      iVar10 = piVar4[-3];
    }
    sVar9 = FUN_000442c4(param_2,iVar10);
    iVar10 = (int)sVar9;
    if (param_5 == 1) {
      iVar6 = *(int *)(param_2 + 300);
      uVar8 = (uint)*puVar2;
      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);
      iVar1 = iVar6 + -1;
      uVar13 = uVar8 & 0x20;
LAB_0004795c:
      iVar11 = iVar1;
      if (uVar13 == 0) goto LAB_00047968;
      while( true ) {
        iVar1 = iVar6 + -2;
LAB_00047968:
        iVar15 = param_4;
        if (iVar1 <= param_4) break;
        while( true ) {
          param_4 = iVar15 + 1;
          piVar4 = (int *)(*(int *)(puVar2 + 10) + param_4 * 0xc);
          iVar1 = *piVar4;
          if ((-1 < iVar15) && (iVar1 == 0xdfff)) {
            iVar1 = piVar4[-3];
          }
          iVar1 = FUN_000442c4(param_2,iVar1);
          if (iVar1 != iVar10) goto LAB_00047698;
          if (uVar13 != 0) break;
          iVar15 = param_4;
          if (iVar11 <= param_4) goto LAB_000479d0;
        }
      }
LAB_000479d0:
      iVar1 = param_3 + 1;
      iVar15 = param_4;
      if ((*(int *)(param_2 + 0x128) <= iVar1) || ((uVar8 & 0x10) == 0)) goto LAB_00047698;
      puVar7 = (ushort *)(*pcVar16)(param_2,iVar1,0x16d5,0);
      iVar6 = FUN_000442c4(param_2,**(undefined4 **)(puVar7 + 10));
      if (iVar6 == iVar10) {
        param_3 = iVar1;
        if (*(int *)(puVar2 + 6) == 0) {
          iVar6 = *(int *)(param_2 + 300);
          uVar8 = (uint)*puVar7;
          iVar1 = iVar6 + -1;
          uVar13 = uVar8 & 0x20;
          param_4 = 0;
          puVar2 = puVar7;
        }
        else {
          (*pcVar5)(puVar2);
          param_4 = 0;
          uVar8 = (uint)*puVar7;
          iVar6 = *(int *)(param_2 + 300);
          uVar13 = uVar8 & 0x20;
          iVar1 = iVar6 + -1;
          puVar2 = puVar7;
        }
        goto LAB_0004795c;
      }
      if (*(int *)(puVar7 + 6) != 0) {
        FUN_000459d0(puVar7);
      }
    }
    else {
      pcVar5 = (code *)(PTR_LAB_000b55b4 + 0x59d0);
      puVar7 = puVar2;
      while( true ) {
        for (; puVar2 = puVar7, iVar15 = param_4, 0 < param_4; param_4 = param_4 + -1) {
          iVar6 = *(int *)(puVar2 + 10) + param_4 * 0xc;
          iVar11 = *(int *)(iVar6 + -0xc);
          if ((param_4 != 1) && (iVar11 == 0xdfff)) {
            iVar11 = *(int *)(iVar6 + -0x18);
          }
          iVar6 = FUN_000442c4(param_2,iVar11);
          if (iVar6 != iVar10) goto LAB_00047698;
          puVar7 = puVar2;
        }
        iVar6 = param_3 + -1;
        if (param_3 <= -iVar1) goto LAB_00047698;
        puVar7 = (ushort *)(*pcVar16)(param_2,iVar6,0x16f0,0);
        param_4 = *(int *)(param_2 + 300);
        if ((*puVar7 & 0x20) != 0) {
          param_4 = param_4 + -1;
        }
        if ((*puVar7 & 0x10) == 0) goto LAB_00047698;
        iVar11 = *(int *)(puVar7 + 10) + param_4 * 0xc;
        iVar12 = *(int *)(iVar11 + -0xc);
        if ((1 < param_4) && (iVar12 == 0xdfff)) {
          iVar12 = *(int *)(iVar11 + -0x18);
        }
        iVar11 = FUN_000442c4(param_2,iVar12);
        if (iVar11 != iVar10) break;
        param_4 = param_4 + -1;
        param_3 = iVar6;
        if (*(int *)(puVar2 + 6) != 0) {
          (*pcVar5)(puVar2);
        }
      }
      if (*(int *)(puVar7 + 6) != 0) {
        FUN_000459d0(puVar7);
      }
    }
    goto LAB_00047698;
  }
  iVar15 = param_4;
  if (iVar10 != 0) {
    if ((iVar10 == 2) && (iVar15 = 0, param_5 != -1)) {
      iVar15 = *(int *)(param_2 + 300) + -1;
    }
    goto LAB_00047698;
  }
  if ((*puVar2 & 0x10) != 0) goto LAB_00047698;
  uVar13 = *(uint *)(puVar2 + 10);
  uVar14 = uVar13 + *(int *)(param_2 + 300) * 0xc;
  uVar8 = uVar14;
  if (uVar13 < uVar14) {
    do {
      if (((*(uint *)(uVar8 - 0xc) != 0x20) && ((*(uint *)(uVar8 - 0xc) & 0xfffffcff) != 0xd820)) ||
         (uVar3 = uVar8 - 0xc, *(int *)(uVar8 - 4) != 0)) break;
      uVar8 = uVar3;
    } while (uVar13 < uVar3);
    if (uVar8 == uVar14) goto LAB_00047a9c;
  }
  else {
LAB_00047a9c:
    uVar8 = uVar14 - 0xc;
  }
  iVar1 = ((int)(uVar8 - uVar13) >> 2) * -0x55555555;
  if ((iVar1 <= param_4) && (iVar15 = iVar1, param_5 != -1)) {
    iVar15 = *(int *)(param_2 + 300) + -1;
  }
LAB_00047698:
  if (*(int *)(puVar2 + 6) != 0) {
    FUN_000459d0(puVar2);
    *param_1 = param_3;
    param_1[1] = iVar15;
    return param_1;
  }
  *param_1 = param_3;
  param_1[1] = iVar15;
  return param_1;
}

