
/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention */

block_state deflate_slow(deflate_state *s,int flush)

{
  uint uVar1;
  byte bVar2;
  Posf *pPVar3;
  uInt uVar4;
  uInt uVar5;
  uInt uVar6;
  int iVar7;
  uint uVar8;
  uInt uVar9;
  uint uVar10;
  Bytef *pBVar11;
  uint uVar12;
  uInt uVar13;
  short sVar14;
  ushort uVar15;
  uint uVar16;
  
  uVar16 = s->lookahead;
LAB_00012c70:
  if (uVar16 < 0x106) goto LAB_00012d9a;
LAB_00012c7c:
  uVar10 = s->strstart;
  uVar16 = s->match_length;
  uVar9 = s->match_start;
LAB_00012c85:
  uVar8 = ((uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f)) & s->hash_mask;
  pPVar3 = s->head;
  s->ins_h = uVar8;
  uVar15 = pPVar3[uVar8];
  uVar12 = (uint)uVar15;
  s->prev[s->w_mask & uVar10] = uVar15;
  pPVar3[uVar8] = (ushort)uVar10;
  s->prev_length = uVar16;
  s->prev_match = uVar9;
  s->match_length = 2;
  if (((uVar12 != 0) && (uVar16 < s->max_lazy_match)) && (uVar10 - uVar12 <= s->w_size - 0x106)) {
    uVar9 = longest_match(s,uVar12);
    s->match_length = uVar9;
    if (uVar9 < 6) {
      uVar10 = s->strstart;
      uVar16 = s->prev_length;
      if ((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))) {
        s->match_length = 2;
        if (uVar16 < 3) goto LAB_00012cfe;
LAB_00012e20:
        uVar9 = s->lookahead;
        uVar13 = s->last_lit;
        sVar14 = (short)uVar10 - (short)s->prev_match;
        uVar15 = sVar14 - 2;
        s->d_buf[uVar13] = sVar14 - 1;
        s->last_lit = uVar13 + 1;
        s->l_buf[uVar13] = (uchf)(uVar16 - 3);
        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =
             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;
        if (uVar15 < 0x100) {
          bVar2 = (&_dist_code)[uVar15];
        }
        else {
          bVar2 = (&DAT_00022640)[uVar15 >> 7];
        }
        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;
        uVar4 = s->last_lit;
        uVar5 = s->lit_bufsize;
        uVar6 = s->prev_length;
        uVar16 = (s->lookahead + 1) - uVar6;
        uVar13 = uVar6 - 2;
        uVar8 = s->strstart;
        s->lookahead = uVar16;
        s->prev_length = uVar13;
        uVar12 = uVar8;
        do {
          uVar1 = uVar12 + 1;
          s->strstart = uVar1;
          if (uVar1 <= (uVar10 - 3) + uVar9) {
            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &
                     s->hash_mask;
            pPVar3 = s->head;
            s->ins_h = uVar12;
            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];
            pPVar3[uVar12] = (Posf)uVar1;
          }
          uVar13 = uVar13 - 1;
          s->prev_length = uVar13;
          uVar12 = uVar1;
        } while (uVar13 != 0);
        s->match_available = 0;
        uVar9 = (uVar6 - 1) + uVar8;
        s->match_length = 2;
        s->strstart = uVar9;
        if (uVar4 == uVar5 - 1) {
          iVar7 = s->block_start;
          pBVar11 = (Bytef *)0x0;
          if (-1 < iVar7) {
            pBVar11 = s->window + iVar7;
          }
          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);
          s->block_start = s->strstart;
          flush_pending(s->strm);
          if (s->strm->avail_out == 0) {
            return need_more;
          }
          uVar16 = s->lookahead;
        }
        goto LAB_00012c70;
      }
    }
    else {
      uVar16 = s->prev_length;
      uVar10 = s->strstart;
    }
  }
  while( true ) {
    if ((2 < uVar16) && (s->match_length <= uVar16)) goto LAB_00012e20;
LAB_00012cfe:
    if (s->match_available != 0) {
      uVar9 = s->last_lit;
      bVar2 = s->window[uVar10 - 1];
      s->d_buf[uVar9] = 0;
      s->last_lit = uVar9 + 1;
      s->l_buf[uVar9] = bVar2;
      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;
      if (s->last_lit == s->lit_bufsize - 1) {
        iVar7 = s->block_start;
        pBVar11 = (Bytef *)0x0;
        if (-1 < iVar7) {
          pBVar11 = s->window + iVar7;
        }
        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);
        s->block_start = s->strstart;
        flush_pending(s->strm);
      }
      s->strstart = s->strstart + 1;
      uVar16 = s->lookahead - 1;
      s->lookahead = uVar16;
      if (s->strm->avail_out == 0) {
        return need_more;
      }
      goto LAB_00012c70;
    }
    s->match_available = 1;
    s->strstart = uVar10 + 1;
    uVar16 = s->lookahead - 1;
    s->lookahead = uVar16;
    if (0x105 < uVar16) goto LAB_00012c7c;
LAB_00012d9a:
    fill_window(s);
    uVar8 = s->lookahead;
    if (0x105 < uVar8) goto LAB_00012c7c;
    if (flush == 0) {
      return need_more;
    }
    if (uVar8 == 0) {
      uVar16 = s->strstart;
      if (s->match_available != 0) {
        bVar2 = s->window[uVar16 - 1];
        uVar9 = s->last_lit;
        s->d_buf[uVar9] = 0;
        s->last_lit = uVar9 + 1;
        s->l_buf[uVar9] = bVar2;
        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;
        uVar16 = s->strstart;
        s->match_available = 0;
      }
      uVar10 = 2;
      if (uVar16 < 3) {
        uVar10 = uVar16;
      }
      s->insert = uVar10;
      if (flush == 4) {
        iVar7 = s->block_start;
        pBVar11 = (Bytef *)0x0;
        if (-1 < iVar7) {
          pBVar11 = s->window + iVar7;
        }
        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);
        s->block_start = s->strstart;
        flush_pending(s->strm);
        return (s->strm->avail_out != 0) + finish_started;
      }
      if (s->last_lit != 0) {
        iVar7 = s->block_start;
        pBVar11 = (Bytef *)0x0;
        if (-1 < iVar7) {
          pBVar11 = s->window + iVar7;
        }
        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);
        s->block_start = s->strstart;
        flush_pending(s->strm);
        return (uint)(s->strm->avail_out != 0);
      }
      return block_done;
    }
    uVar10 = s->strstart;
    uVar16 = s->match_length;
    uVar9 = s->match_start;
    if (2 < uVar8) break;
    s->prev_length = uVar16;
    s->prev_match = uVar9;
    s->match_length = 2;
  }
  goto LAB_00012c85;
}



/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

bool FUN_00012c40(int *param_1,int param_2)

{
  uint uVar1;
  ushort *puVar2;
  undefined2 *puVar3;
  byte bVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  short sVar12;
  ushort uVar13;
  uint uVar14;
  int iVar15;
  
  uVar14 = param_1[0x1d];
LAB_00012c70:
  if (uVar14 < 0x106) goto LAB_00012d9a;
LAB_00012c7c:
  uVar8 = param_1[0x1b];
  uVar14 = param_1[0x18];
  iVar15 = param_1[0x1c];
LAB_00012c85:
  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)
          ) & param_1[0x15];
  param_1[0x12] = uVar7;
  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);
  uVar13 = *puVar2;
  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;
  *puVar2 = (ushort)uVar8;
  param_1[0x1e] = uVar14;
  param_1[0x19] = iVar15;
  param_1[0x18] = 2;
  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)
     ) {
    uVar7 = FUN_00012660();
    param_1[0x18] = uVar7;
    if (uVar7 < 6) {
      uVar8 = param_1[0x1b];
      uVar14 = param_1[0x1e];
      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {
        param_1[0x18] = 2;
        if (uVar14 < 3) goto LAB_00012cfe;
LAB_00012e20:
        iVar15 = param_1[0x1d];
        iVar11 = param_1[0x5a8];
        sVar12 = (short)uVar8 - (short)param_1[0x19];
        uVar13 = sVar12 - 2;
        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;
        param_1[0x5a8] = iVar11 + 1;
        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);
        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =
             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;
        if (uVar13 < 0x100) {
          bVar4 = (&DAT_00022540)[uVar13];
        }
        else {
          bVar4 = (&DAT_00022640)[uVar13 >> 7];
        }
        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;
        iVar10 = param_1[0x5a8];
        iVar5 = param_1[0x5a7];
        iVar6 = param_1[0x1e];
        uVar14 = (param_1[0x1d] + 1) - iVar6;
        iVar11 = iVar6 + -2;
        uVar7 = param_1[0x1b];
        param_1[0x1d] = uVar14;
        param_1[0x1e] = iVar11;
        uVar9 = uVar7;
        do {
          uVar1 = uVar9 + 1;
          param_1[0x1b] = uVar1;
          if (uVar1 <= (uVar8 - 3) + iVar15) {
            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^
                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];
            param_1[0x12] = uVar9;
            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);
            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;
            *puVar3 = (short)uVar1;
          }
          iVar11 = iVar11 + -1;
          param_1[0x1e] = iVar11;
          uVar9 = uVar1;
        } while (iVar11 != 0);
        param_1[0x1a] = 0;
        iVar15 = iVar6 + -1 + uVar7;
        param_1[0x18] = 2;
        param_1[0x1b] = iVar15;
        if (iVar10 == iVar5 + -1) {
          iVar11 = param_1[0x17];
          iVar10 = 0;
          if (-1 < iVar11) {
            iVar10 = iVar11 + param_1[0xe];
          }
          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);
          param_1[0x17] = param_1[0x1b];
          FUN_00012bc0();
          if (*(int *)(*param_1 + 0x10) == 0) {
            return false;
          }
          uVar14 = param_1[0x1d];
        }
        goto LAB_00012c70;
      }
    }
    else {
      uVar14 = param_1[0x1e];
      uVar8 = param_1[0x1b];
    }
  }
  while( true ) {
    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;
LAB_00012cfe:
    if (param_1[0x1a] != 0) {
      iVar15 = param_1[0x5a8];
      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);
      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;
      param_1[0x5a8] = iVar15 + 1;
      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;
      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;
      if (param_1[0x5a8] == param_1[0x5a7] + -1) {
        iVar15 = param_1[0x17];
        iVar11 = 0;
        if (-1 < iVar15) {
          iVar11 = iVar15 + param_1[0xe];
        }
        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);
        param_1[0x17] = param_1[0x1b];
        FUN_00012bc0();
      }
      param_1[0x1b] = param_1[0x1b] + 1;
      uVar14 = param_1[0x1d] - 1;
      param_1[0x1d] = uVar14;
      if (*(int *)(*param_1 + 0x10) == 0) {
        return false;
      }
      goto LAB_00012c70;
    }
    iVar15 = param_1[0x1d];
    param_1[0x1a] = 1;
    param_1[0x1b] = uVar8 + 1;
    param_1[0x1d] = iVar15 - 1U;
    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;
LAB_00012d9a:
    FUN_00012970();
    uVar7 = param_1[0x1d];
    if (0x105 < uVar7) goto LAB_00012c7c;
    if (param_2 == 0) {
      return false;
    }
    if (uVar7 == 0) {
      uVar14 = param_1[0x1b];
      if (param_1[0x1a] != 0) {
        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);
        iVar15 = param_1[0x5a8];
        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;
        param_1[0x5a8] = iVar15 + 1;
        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;
        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;
        uVar14 = param_1[0x1b];
        param_1[0x1a] = 0;
      }
      uVar8 = 2;
      if (uVar14 < 3) {
        uVar8 = uVar14;
      }
      param_1[0x5ad] = uVar8;
      if (param_2 == 4) {
        iVar15 = param_1[0x17];
        iVar11 = 0;
        if (-1 < iVar15) {
          iVar11 = iVar15 + param_1[0xe];
        }
        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);
        param_1[0x17] = param_1[0x1b];
        FUN_00012bc0();
        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');
      }
      if (param_1[0x5a8] != 0) {
        iVar15 = param_1[0x17];
        iVar11 = 0;
        if (-1 < iVar15) {
          iVar11 = iVar15 + param_1[0xe];
        }
        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);
        param_1[0x17] = param_1[0x1b];
        FUN_00012bc0();
        return *(int *)(*param_1 + 0x10) != 0;
      }
      return true;
    }
    uVar8 = param_1[0x1b];
    uVar14 = param_1[0x18];
    iVar15 = param_1[0x1c];
    if (2 < uVar7) break;
    param_1[0x1e] = uVar14;
    param_1[0x19] = iVar15;
    param_1[0x18] = 2;
  }
  goto LAB_00012c85;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x000125ff
ADD EAX,0x153b7
SUB ESP,0x2c
MOV EBP,dword ptr [ESP + 0x40]
MOV dword ptr [ESP + 0x18],EAX
LEA EAX,[EAX + 0xffffa540]
MOV dword ptr [ESP + 0x1c],EAX
MOV ESI,dword ptr [EBP + 0x74]
LEA ESI,[ESI]
LEA EDI,[EDI]
CMP ESI,0x105
JBE 0x00012d9a
MOV EBX,dword ptr [EBP + 0x6c]
MOV ESI,dword ptr [EBP + 0x60]
MOV EDI,dword ptr [EBP + 0x70]
MOV EAX,dword ptr [EBP + 0x38]
MOV ECX,dword ptr [EBP + 0x58]
MOV EDX,dword ptr [EBP + 0x48]
MOVZX EAX,byte ptr [EAX + EBX*0x1 + 0x2]
SHL EDX,CL
MOV ECX,dword ptr [EBP + 0x34]
XOR EAX,EDX
AND EAX,dword ptr [EBP + 0x54]
MOV EDX,dword ptr [EBP + 0x44]
AND ECX,EBX
MOV dword ptr [EBP + 0x48],EAX
LEA EAX,[EDX + EAX*0x2]
MOVZX EDX,word ptr [EAX]
MOV dword ptr [ESP],EAX
MOV EAX,dword ptr [EBP + 0x40]
MOV word ptr [EAX + ECX*0x2],DX
MOV EAX,dword ptr [ESP]
TEST EDX,EDX
MOV word ptr [EAX],BX
MOV dword ptr [EBP + 0x78],ESI
MOV dword ptr [EBP + 0x64],EDI
MOV dword ptr [EBP + 0x60],0x2
JZ 0x00012cf0
CMP dword ptr [EBP + 0x80],ESI
JBE 0x00012cf0
MOV EAX,dword ptr [EBP + 0x2c]
MOV ECX,EBX
SUB ECX,EDX
SUB EAX,0x106
CMP ECX,EAX
JBE 0x00012fe0
NOP
LEA ESI,[ESI]
CMP ESI,0x2
JBE 0x00012cfe
CMP dword ptr [EBP + 0x60],ESI
JBE 0x00012e20
MOV ESI,dword ptr [EBP + 0x68]
TEST ESI,ESI
JZ 0x00012d78
MOV EAX,dword ptr [EBP + 0x38]
MOV EDX,dword ptr [EBP + 0x16a0]
MOV ECX,dword ptr [EBP + 0x16a4]
MOVZX EAX,byte ptr [EAX + EBX*0x1 + -0x1]
XOR EBX,EBX
MOV word ptr [ECX + EDX*0x2],BX
MOV ECX,dword ptr [EBP + 0x1698]
LEA EBX,[EDX + 0x1]
MOV dword ptr [EBP + 0x16a0],EBX
MOV byte ptr [ECX + EDX*0x1],AL
ADD word ptr [EBP + EAX*0x4 + 0x94],0x1
MOV EAX,dword ptr [EBP + 0x169c]
SUB EAX,0x1
CMP dword ptr [EBP + 0x16a0],EAX
JZ 0x00012f90
MOV EAX,dword ptr [EBP + 0x74]
ADD dword ptr [EBP + 0x6c],0x1
LEA ESI,[EAX + -0x1]
MOV EAX,dword ptr [EBP]
MOV dword ptr [EBP + 0x74],ESI
MOV EAX,dword ptr [EAX + 0x10]
TEST EAX,EAX
JNZ 0x00012c70
XOR EAX,EAX
ADD ESP,0x2c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [EBP + 0x74]
ADD EBX,0x1
MOV dword ptr [EBP + 0x68],0x1
MOV dword ptr [EBP + 0x6c],EBX
LEA ESI,[EAX + -0x1]
CMP ESI,0x105
MOV dword ptr [EBP + 0x74],ESI
JA 0x00012c7c
MOV EAX,EBP
CALL 0x00012970
MOV EAX,dword ptr [EBP + 0x74]
CMP EAX,0x105
JA 0x00012c7c
MOV EDX,dword ptr [ESP + 0x44]
TEST EDX,EDX
JZ 0x00012d6a
TEST EAX,EAX
JZ 0x00013000
CMP EAX,0x2
MOV EBX,dword ptr [EBP + 0x6c]
MOV ESI,dword ptr [EBP + 0x60]
MOV EDI,dword ptr [EBP + 0x70]
JA 0x00012c85
MOV dword ptr [EBP + 0x78],ESI
MOV dword ptr [EBP + 0x64],EDI
MOV dword ptr [EBP + 0x60],0x2
JMP 0x00012cf0
CMP dword ptr [EBP + 0x88],0x1
MOV EBX,dword ptr [EBP + 0x6c]
MOV ESI,dword ptr [EBP + 0x78]
JZ 0x00012e10
CMP EAX,0x3
JNZ 0x00012cf0
MOV EAX,EBX
SUB EAX,dword ptr [EBP + 0x70]
CMP EAX,0x1000
JBE 0x00012cf0
CMP ESI,0x2
MOV dword ptr [EBP + 0x60],0x2
JBE 0x00012cfe
MOV EAX,dword ptr [EBP + 0x74]
MOV EDX,dword ptr [EBP + 0x16a0]
MOV ECX,dword ptr [EBP + 0x16a4]
LEA EAX,[EBX + EAX*0x1 + -0x3]
SUB BX,word ptr [EBP + 0x64]
MOV dword ptr [ESP],EAX
LEA EAX,[ESI + -0x3]
LEA ESI,[EBX + -0x1]
SUB EBX,0x2
MOV word ptr [ECX + EDX*0x2],SI
MOV ECX,dword ptr [EBP + 0x1698]
LEA ESI,[EDX + 0x1]
MOV dword ptr [EBP + 0x16a0],ESI
MOVZX ESI,AL
MOV byte ptr [ECX + EDX*0x1],AL
MOV EAX,dword ptr [ESP + 0x18]
MOVZX EAX,byte ptr [EAX + ESI*0x1 + 0xffffa440]
ADD word ptr [EBP + EAX*0x4 + 0x498],0x1
CMP BX,0xff
JA 0x00012fc8
MOV EAX,dword ptr [ESP + 0x1c]
MOVZX EBX,BX
MOVZX EAX,byte ptr [EAX + EBX*0x1]
ADD word ptr [EBP + EAX*0x4 + 0x988],0x1
MOV EAX,dword ptr [EBP + 0x16a0]
MOV EDI,dword ptr [EBP + 0x74]
MOV dword ptr [ESP + 0x4],EAX
LEA ESI,[EDI + 0x1]
MOV EAX,dword ptr [EBP + 0x169c]
SUB EAX,0x1
MOV dword ptr [ESP + 0x8],EAX
MOV EAX,dword ptr [EBP + 0x78]
SUB ESI,EAX
LEA EDX,[EAX + -0x2]
MOV dword ptr [ESP + 0xc],EAX
MOV EAX,dword ptr [EBP + 0x6c]
MOV dword ptr [EBP + 0x74],ESI
MOV dword ptr [EBP + 0x78],EDX
MOV dword ptr [ESP + 0x14],ESI
MOV dword ptr [ESP + 0x10],EAX
MOV ECX,EAX
LEA ESI,[ESI]
LEA EAX,[ECX + 0x1]
CMP EAX,dword ptr [ESP]
MOV dword ptr [EBP + 0x6c],EAX
JA 0x00012f0d
MOV EBX,dword ptr [EBP + 0x38]
MOV EDI,dword ptr [EBP + 0x48]
MOVZX EBX,byte ptr [EBX + ECX*0x1 + 0x3]
MOV ECX,dword ptr [EBP + 0x58]
SHL EDI,CL
MOV ECX,EDI
MOV EDI,dword ptr [EBP + 0x34]
XOR ECX,EBX
AND ECX,dword ptr [EBP + 0x54]
MOV EBX,dword ptr [EBP + 0x44]
AND EDI,EAX
MOV dword ptr [EBP + 0x48],ECX
LEA ECX,[EBX + ECX*0x2]
MOV EBX,dword ptr [EBP + 0x40]
MOVZX ESI,word ptr [ECX]
MOV word ptr [EBX + EDI*0x2],SI
MOV word ptr [ECX],AX
SUB EDX,0x1
MOV ECX,EAX
TEST EDX,EDX
MOV dword ptr [EBP + 0x78],EDX
JNZ 0x00012ed0
MOV EAX,dword ptr [ESP + 0xc]
MOV EDI,dword ptr [ESP + 0x10]
MOV EBX,dword ptr [ESP + 0x8]
CMP dword ptr [ESP + 0x4],EBX
MOV ESI,dword ptr [ESP + 0x14]
MOV dword ptr [EBP + 0x68],0x0
LEA EAX,[EAX + EDI*0x1 + -0x1]
MOV dword ptr [EBP + 0x60],0x2
MOV dword ptr [EBP + 0x6c],EAX
JNZ 0x00012c70
MOV EDX,dword ptr [EBP + 0x5c]
XOR ECX,ECX
SUB EAX,EDX
TEST EDX,EDX
JS 0x00012f58
ADD EDX,dword ptr [EBP + 0x38]
MOV ECX,EDX
PUSH 0x0
PUSH EAX
PUSH ECX
PUSH EBP
CALL 0x0001bd40
MOV EAX,dword ptr [EBP + 0x6c]
MOV dword ptr [EBP + 0x5c],EAX
MOV EAX,dword ptr [EBP]
CALL 0x00012bc0
MOV EAX,dword ptr [EBP]
ADD ESP,0x10
MOV EDI,dword ptr [EAX + 0x10]
TEST EDI,EDI
JZ 0x00012d6a
MOV ESI,dword ptr [EBP + 0x74]
JMP 0x00012c70
MOV EDX,dword ptr [EBP + 0x5c]
MOV EAX,dword ptr [EBP + 0x6c]
XOR ECX,ECX
SUB EAX,EDX
TEST EDX,EDX
JS 0x00012fa3
ADD EDX,dword ptr [EBP + 0x38]
MOV ECX,EDX
PUSH 0x0
PUSH EAX
PUSH ECX
PUSH EBP
CALL 0x0001bd40
MOV EAX,dword ptr [EBP + 0x6c]
MOV dword ptr [EBP + 0x5c],EAX
MOV EAX,dword ptr [EBP]
CALL 0x00012bc0
ADD ESP,0x10
JMP 0x00012d4f
MOV EAX,dword ptr [ESP + 0x1c]
SHR BX,0x7
MOVZX EBX,BX
MOVZX EAX,byte ptr [EBX + EAX*0x1 + 0x100]
JMP 0x00012e87
MOV EAX,EBP
CALL 0x00012660
CMP EAX,0x5
MOV dword ptr [EBP + 0x60],EAX
JBE 0x00012de8
MOV ESI,dword ptr [EBP + 0x78]
MOV EBX,dword ptr [EBP + 0x6c]
JMP 0x00012cf0
MOV EDI,dword ptr [EBP + 0x68]
MOV EDX,dword ptr [EBP + 0x6c]
TEST EDI,EDI
JNZ 0x0001307a
CMP EDX,0x2
MOV EAX,0x2
CMOVBE EAX,EDX
CMP dword ptr [ESP + 0x44],0x4
MOV dword ptr [EBP + 0x16b4],EAX
JZ 0x000130be
MOV ECX,dword ptr [EBP + 0x16a0]
MOV EAX,0x1
TEST ECX,ECX
JZ 0x00012d6c
MOV EAX,dword ptr [EBP + 0x5c]
XOR ECX,ECX
SUB EDX,EAX
TEST EAX,EAX
JS 0x00013049
ADD EAX,dword ptr [EBP + 0x38]
MOV ECX,EAX
PUSH 0x0
PUSH EDX
PUSH ECX
PUSH EBP
CALL 0x0001bd40
MOV EAX,dword ptr [EBP + 0x6c]
MOV dword ptr [EBP + 0x5c],EAX
MOV EAX,dword ptr [EBP]
CALL 0x00012bc0
MOV EAX,dword ptr [EBP]
ADD ESP,0x10
MOV EAX,dword ptr [EAX + 0x10]
TEST EAX,EAX
SETNZ AL
ADD ESP,0x2c
POP EBX
MOVZX EAX,AL
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [EBP + 0x38]
MOV ECX,dword ptr [EBP + 0x16a4]
XOR ESI,ESI
MOVZX EAX,byte ptr [EAX + EDX*0x1 + -0x1]
MOV EDX,dword ptr [EBP + 0x16a0]
MOV word ptr [ECX + EDX*0x2],SI
MOV ECX,dword ptr [EBP + 0x1698]
LEA EBX,[EDX + 0x1]
MOV dword ptr [EBP + 0x16a0],EBX
MOV byte ptr [ECX + EDX*0x1],AL
ADD word ptr [EBP + EAX*0x4 + 0x94],0x1
MOV EDX,dword ptr [EBP + 0x6c]
MOV dword ptr [EBP + 0x68],0x0
JMP 0x0001300a
MOV EAX,dword ptr [EBP + 0x5c]
XOR ECX,ECX
SUB EDX,EAX
TEST EAX,EAX
JS 0x000130ce
ADD EAX,dword ptr [EBP + 0x38]
MOV ECX,EAX
PUSH 0x1
PUSH EDX
PUSH ECX
PUSH EBP
CALL 0x0001bd40
MOV EAX,dword ptr [EBP + 0x6c]
MOV dword ptr [EBP + 0x5c],EAX
MOV EAX,dword ptr [EBP]
CALL 0x00012bc0
MOV EAX,dword ptr [EBP]
ADD ESP,0x10
MOV EBX,dword ptr [EAX + 0x10]
XOR EAX,EAX
TEST EBX,EBX
SETNZ AL
ADD ESP,0x2c
POP EBX
ADD EAX,0x2
POP ESI
POP EDI
POP EBP
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n\nbool FUN_00012c40(int *param_1,int param_2)\n\n{\n  uint uVar1;\n  ushort *puVar2;\n  undefined2 *puVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int iVar11;\n  short sVar12;\n  ushort uVar13;\n  uint uVar14;\n  int iVar15;\n  \n  uVar14 = param_1[0x1d];\nLAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar8 = param_1[0x1b];\n  uVar14 = param_1[0x18];\n  iVar15 = param_1[0x1c];\nLAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];\n  param_1[0x12] = uVar7;\n  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);\n  uVar13 = *puVar2;\n  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;\n  *puVar2 = (ushort)uVar8;\n  param_1[0x1e] = uVar14;\n  param_1[0x19] = iVar15;\n  param_1[0x18] = 2;\n  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }\n  while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }\n  goto LAB_00012c85;\n}\n\n" comment (function_definition "bool FUN_00012c40(int *param_1,int param_2)\n\n{\n  uint uVar1;\n  ushort *puVar2;\n  undefined2 *puVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int iVar11;\n  short sVar12;\n  ushort uVar13;\n  uint uVar14;\n  int iVar15;\n  \n  uVar14 = param_1[0x1d];\nLAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar8 = param_1[0x1b];\n  uVar14 = param_1[0x18];\n  iVar15 = param_1[0x1c];\nLAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];\n  param_1[0x12] = uVar7;\n  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);\n  uVar13 = *puVar2;\n  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;\n  *puVar2 = (ushort)uVar8;\n  param_1[0x1e] = uVar14;\n  param_1[0x19] = iVar15;\n  param_1[0x18] = 2;\n  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }\n  while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }\n  goto LAB_00012c85;\n}" primitive_type (function_declarator "FUN_00012c40(int *param_1,int param_2)" identifier (parameter_list "(int *param_1,int param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  ushort *puVar2;\n  undefined2 *puVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int iVar11;\n  short sVar12;\n  ushort uVar13;\n  uint uVar14;\n  int iVar15;\n  \n  uVar14 = param_1[0x1d];\nLAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar8 = param_1[0x1b];\n  uVar14 = param_1[0x18];\n  iVar15 = param_1[0x1c];\nLAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];\n  param_1[0x12] = uVar7;\n  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);\n  uVar13 = *puVar2;\n  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;\n  *puVar2 = (ushort)uVar8;\n  param_1[0x1e] = uVar14;\n  param_1[0x19] = iVar15;\n  param_1[0x18] = 2;\n  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }\n  while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }\n  goto LAB_00012c85;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ushort *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined2 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "short sVar12;" (sized_type_specifier "short" short) identifier ;) (declaration "ushort uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (expression_statement "uVar14 = param_1[0x1d];" (assignment_expression "uVar14 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) (labeled_statement "LAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;" statement_identifier : (if_statement "if (uVar14 < 0x106) goto LAB_00012d9a;" if (parenthesized_expression "(uVar14 < 0x106)" ( (binary_expression "uVar14 < 0x106" identifier < number_literal) )) (goto_statement "goto LAB_00012d9a;" goto statement_identifier ;))) (labeled_statement "LAB_00012c7c:\n  uVar8 = param_1[0x1b];" statement_identifier : (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;)) (expression_statement "uVar14 = param_1[0x18];" (assignment_expression "uVar14 = param_1[0x18]" identifier = (subscript_expression "param_1[0x18]" identifier [ number_literal ])) ;) (expression_statement "iVar15 = param_1[0x1c];" (assignment_expression "iVar15 = param_1[0x1c]" identifier = (subscript_expression "param_1[0x1c]" identifier [ number_literal ])) ;) (labeled_statement "LAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];" statement_identifier : (expression_statement "uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];" (assignment_expression "uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15]" identifier = (binary_expression "((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15]" (parenthesized_expression "((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          )" ( (binary_expression "(uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)" (binary_expression "(uint)*(byte *)(param_1[0xe] + 2 + uVar8)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_1[0xe] + 2 + uVar8)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + 2 + uVar8)" ( (binary_expression "param_1[0xe] + 2 + uVar8" (binary_expression "param_1[0xe] + 2" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + number_literal) + identifier) )))) ^ (binary_expression "param_1[0x12] << ((byte)param_1[0x16] & 0x1f)" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) << (parenthesized_expression "((byte)param_1[0x16] & 0x1f)" ( (binary_expression "(byte)param_1[0x16] & 0x1f" (cast_expression "(byte)param_1[0x16]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[0x16]" identifier [ number_literal ])) & number_literal) )))) )) & (subscript_expression "param_1[0x15]" identifier [ number_literal ]))) ;)) (expression_statement "param_1[0x12] = uVar7;" (assignment_expression "param_1[0x12] = uVar7" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);" (assignment_expression "puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2)" identifier = (cast_expression "(ushort *)(param_1[0x11] + uVar7 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x11] + uVar7 * 2)" ( (binary_expression "param_1[0x11] + uVar7 * 2" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) + (binary_expression "uVar7 * 2" identifier * number_literal)) )))) ;) (expression_statement "uVar13 = *puVar2;" (assignment_expression "uVar13 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "*(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;" (assignment_expression "*(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13" (pointer_expression "*(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2)" * (cast_expression "(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x10] + (param_1[0xd] & uVar8) * 2)" ( (binary_expression "param_1[0x10] + (param_1[0xd] & uVar8) * 2" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) + (binary_expression "(param_1[0xd] & uVar8) * 2" (parenthesized_expression "(param_1[0xd] & uVar8)" ( (binary_expression "param_1[0xd] & uVar8" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) & identifier) )) * number_literal)) )))) = identifier) ;) (expression_statement "*puVar2 = (ushort)uVar8;" (assignment_expression "*puVar2 = (ushort)uVar8" (pointer_expression "*puVar2" * identifier) = (cast_expression "(ushort)uVar8" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (expression_statement "param_1[0x1e] = uVar14;" (assignment_expression "param_1[0x1e] = uVar14" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x19] = iVar15;" (assignment_expression "param_1[0x19] = iVar15" (subscript_expression "param_1[0x19]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }" if (parenthesized_expression "(((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     )" ( (binary_expression "((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)" (parenthesized_expression "((uVar13 != 0) && (uVar14 < (uint)param_1[0x20]))" ( (binary_expression "(uVar13 != 0) && (uVar14 < (uint)param_1[0x20])" (parenthesized_expression "(uVar13 != 0)" ( (binary_expression "uVar13 != 0" identifier != number_literal) )) && (parenthesized_expression "(uVar14 < (uint)param_1[0x20])" ( (binary_expression "uVar14 < (uint)param_1[0x20]" identifier < (cast_expression "(uint)param_1[0x20]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x20]" identifier [ number_literal ]))) ))) )) && (parenthesized_expression "(uVar8 - uVar13 <= param_1[0xb] - 0x106U)" ( (binary_expression "uVar8 - uVar13 <= param_1[0xb] - 0x106U" (binary_expression "uVar8 - uVar13" identifier - identifier) <= (binary_expression "param_1[0xb] - 0x106U" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) - number_literal)) ))) )) (compound_statement "{\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }" { (expression_statement "uVar7 = FUN_00012660();" (assignment_expression "uVar7 = FUN_00012660()" identifier = (call_expression "FUN_00012660()" identifier (argument_list "()" ( )))) ;) (expression_statement "param_1[0x18] = uVar7;" (assignment_expression "param_1[0x18] = uVar7" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }" if (parenthesized_expression "(uVar7 < 6)" ( (binary_expression "uVar7 < 6" identifier < number_literal) )) (compound_statement "{\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }" { (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "uVar14 = param_1[0x1e];" (assignment_expression "uVar14 = param_1[0x1e]" identifier = (subscript_expression "param_1[0x1e]" identifier [ number_literal ])) ;) (if_statement "if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }" if (parenthesized_expression "((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c]))))" ( (binary_expression "(param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))" (parenthesized_expression "(param_1[0x22] == 1)" ( (binary_expression "param_1[0x22] == 1" (subscript_expression "param_1[0x22]" identifier [ number_literal ]) == number_literal) )) || (parenthesized_expression "((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))" ( (parenthesized_expression "(uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c]))" ( (binary_expression "uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])" (binary_expression "uVar7 == 3" identifier == number_literal) && (parenthesized_expression "(0x1000 < uVar8 - param_1[0x1c])" ( (binary_expression "0x1000 < uVar8 - param_1[0x1c]" number_literal < (binary_expression "uVar8 - param_1[0x1c]" identifier - (subscript_expression "param_1[0x1c]" identifier [ number_literal ]))) ))) )) ))) )) (compound_statement "{\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }" { (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (uVar14 < 3) goto LAB_00012cfe;" if (parenthesized_expression "(uVar14 < 3)" ( (binary_expression "uVar14 < 3" identifier < number_literal) )) (goto_statement "goto LAB_00012cfe;" goto statement_identifier ;)) (labeled_statement "LAB_00012e20:\n        iVar15 = param_1[0x1d];" statement_identifier : (expression_statement "iVar15 = param_1[0x1d];" (assignment_expression "iVar15 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;)) (expression_statement "iVar11 = param_1[0x5a8];" (assignment_expression "iVar11 = param_1[0x5a8]" identifier = (subscript_expression "param_1[0x5a8]" identifier [ number_literal ])) ;) (expression_statement "sVar12 = (short)uVar8 - (short)param_1[0x19];" (assignment_expression "sVar12 = (short)uVar8 - (short)param_1[0x19]" identifier = (binary_expression "(short)uVar8 - (short)param_1[0x19]" (cast_expression "(short)uVar8" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) - (cast_expression "(short)param_1[0x19]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[0x19]" identifier [ number_literal ])))) ;) (expression_statement "uVar13 = sVar12 - 2;" (assignment_expression "uVar13 = sVar12 - 2" identifier = (binary_expression "sVar12 - 2" identifier - number_literal)) ;) (expression_statement "*(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;" (assignment_expression "*(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1" (pointer_expression "*(short *)(param_1[0x5a9] + iVar11 * 2)" * (cast_expression "(short *)(param_1[0x5a9] + iVar11 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a9] + iVar11 * 2)" ( (binary_expression "param_1[0x5a9] + iVar11 * 2" (subscript_expression "param_1[0x5a9]" identifier [ number_literal ]) + (binary_expression "iVar11 * 2" identifier * number_literal)) )))) = (binary_expression "sVar12 + -1" identifier + number_literal)) ;) (expression_statement "param_1[0x5a8] = iVar11 + 1;" (assignment_expression "param_1[0x5a8] = iVar11 + 1" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);" (assignment_expression "*(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3)" (pointer_expression "*(char *)(param_1[0x5a6] + iVar11)" * (cast_expression "(char *)(param_1[0x5a6] + iVar11)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a6] + iVar11)" ( (binary_expression "param_1[0x5a6] + iVar11" (subscript_expression "param_1[0x5a6]" identifier [ number_literal ]) + identifier) )))) = (cast_expression "(char)(uVar14 - 3)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar14 - 3)" ( (binary_expression "uVar14 - 3" identifier - number_literal) )))) ;) (expression_statement "*(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;" (assignment_expression "*(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1" (pointer_expression "*(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126)" * (cast_expression "(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126)" ( (binary_expression "param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126" (binary_expression "param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff]" identifier + (subscript_expression "(byte)(&DAT_00022440)[uVar14 - 3 & 0xff]" (call_expression "(byte)(&DAT_00022440)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&DAT_00022440)" ( (pointer_expression "&DAT_00022440" & identifier) ))) [ (binary_expression "uVar14 - 3 & 0xff" (binary_expression "uVar14 - 3" identifier - number_literal) & number_literal) ])) + number_literal) )))) = (binary_expression "(short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1" (cast_expression "(short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126]" identifier [ (binary_expression "(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126" (subscript_expression "(byte)(&DAT_00022440)[uVar14 - 3 & 0xff]" (call_expression "(byte)(&DAT_00022440)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&DAT_00022440)" ( (pointer_expression "&DAT_00022440" & identifier) ))) [ (binary_expression "uVar14 - 3 & 0xff" (binary_expression "uVar14 - 3" identifier - number_literal) & number_literal) ]) + number_literal) ])) + number_literal)) ;) (if_statement "if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }" if (parenthesized_expression "(uVar13 < 0x100)" ( (binary_expression "uVar13 < 0x100" identifier < number_literal) )) (compound_statement "{\n          bVar4 = (&DAT_00022540)[uVar13];\n        }" { (expression_statement "bVar4 = (&DAT_00022540)[uVar13];" (assignment_expression "bVar4 = (&DAT_00022540)[uVar13]" identifier = (subscript_expression "(&DAT_00022540)[uVar13]" (parenthesized_expression "(&DAT_00022540)" ( (pointer_expression "&DAT_00022540" & identifier) )) [ identifier ])) ;) }) (else_clause "else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }" else (compound_statement "{\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }" { (expression_statement "bVar4 = (&DAT_00022640)[uVar13 >> 7];" (assignment_expression "bVar4 = (&DAT_00022640)[uVar13 >> 7]" identifier = (subscript_expression "(&DAT_00022640)[uVar13 >> 7]" (parenthesized_expression "(&DAT_00022640)" ( (pointer_expression "&DAT_00022640" & identifier) )) [ (binary_expression "uVar13 >> 7" identifier >> number_literal) ])) ;) }))) (expression_statement "*(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;" (assignment_expression "*(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1" (pointer_expression "*(short *)(param_1 + bVar4 + 0x262)" * (cast_expression "(short *)(param_1 + bVar4 + 0x262)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + bVar4 + 0x262)" ( (binary_expression "param_1 + bVar4 + 0x262" (binary_expression "param_1 + bVar4" identifier + identifier) + number_literal) )))) = (binary_expression "(short)param_1[bVar4 + 0x262] + 1" (cast_expression "(short)param_1[bVar4 + 0x262]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[bVar4 + 0x262]" identifier [ (binary_expression "bVar4 + 0x262" identifier + number_literal) ])) + number_literal)) ;) (expression_statement "iVar10 = param_1[0x5a8];" (assignment_expression "iVar10 = param_1[0x5a8]" identifier = (subscript_expression "param_1[0x5a8]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = param_1[0x5a7];" (assignment_expression "iVar5 = param_1[0x5a7]" identifier = (subscript_expression "param_1[0x5a7]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = param_1[0x1e];" (assignment_expression "iVar6 = param_1[0x1e]" identifier = (subscript_expression "param_1[0x1e]" identifier [ number_literal ])) ;) (expression_statement "uVar14 = (param_1[0x1d] + 1) - iVar6;" (assignment_expression "uVar14 = (param_1[0x1d] + 1) - iVar6" identifier = (binary_expression "(param_1[0x1d] + 1) - iVar6" (parenthesized_expression "(param_1[0x1d] + 1)" ( (binary_expression "param_1[0x1d] + 1" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) + number_literal) )) - identifier)) ;) (expression_statement "iVar11 = iVar6 + -2;" (assignment_expression "iVar11 = iVar6 + -2" identifier = (binary_expression "iVar6 + -2" identifier + number_literal)) ;) (expression_statement "uVar7 = param_1[0x1b];" (assignment_expression "uVar7 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x1d] = uVar14;" (assignment_expression "param_1[0x1d] = uVar14" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1e] = iVar11;" (assignment_expression "param_1[0x1e] = iVar11" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar9 = uVar7;" (assignment_expression "uVar9 = uVar7" identifier = identifier) ;) (do_statement "do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);" do (compound_statement "{\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        }" { (expression_statement "uVar1 = uVar9 + 1;" (assignment_expression "uVar1 = uVar9 + 1" identifier = (binary_expression "uVar9 + 1" identifier + number_literal)) ;) (expression_statement "param_1[0x1b] = uVar1;" (assignment_expression "param_1[0x1b] = uVar1" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }" if (parenthesized_expression "(uVar1 <= (uVar8 - 3) + iVar15)" ( (binary_expression "uVar1 <= (uVar8 - 3) + iVar15" identifier <= (binary_expression "(uVar8 - 3) + iVar15" (parenthesized_expression "(uVar8 - 3)" ( (binary_expression "uVar8 - 3" identifier - number_literal) )) + identifier)) )) (compound_statement "{\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }" { (expression_statement "uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];" (assignment_expression "uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15]" identifier = (binary_expression "(param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15]" (parenthesized_expression "(param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9))" ( (binary_expression "param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)" (binary_expression "param_1[0x12] << ((byte)param_1[0x16] & 0x1f)" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) << (parenthesized_expression "((byte)param_1[0x16] & 0x1f)" ( (binary_expression "(byte)param_1[0x16] & 0x1f" (cast_expression "(byte)param_1[0x16]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[0x16]" identifier [ number_literal ])) & number_literal) ))) ^ (binary_expression "(uint)*(byte *)(param_1[0xe] + 3 + uVar9)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_1[0xe] + 3 + uVar9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + 3 + uVar9)" ( (binary_expression "param_1[0xe] + 3 + uVar9" (binary_expression "param_1[0xe] + 3" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + number_literal) + identifier) ))))) )) & (subscript_expression "param_1[0x15]" identifier [ number_literal ]))) ;) (expression_statement "param_1[0x12] = uVar9;" (assignment_expression "param_1[0x12] = uVar9" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);" (assignment_expression "puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2)" identifier = (cast_expression "(undefined2 *)(param_1[0x11] + uVar9 * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x11] + uVar9 * 2)" ( (binary_expression "param_1[0x11] + uVar9 * 2" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) + (binary_expression "uVar9 * 2" identifier * number_literal)) )))) ;) (expression_statement "*(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;" (assignment_expression "*(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3" (pointer_expression "*(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2)" * (cast_expression "(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x10] + (param_1[0xd] & uVar1) * 2)" ( (binary_expression "param_1[0x10] + (param_1[0xd] & uVar1) * 2" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) + (binary_expression "(param_1[0xd] & uVar1) * 2" (parenthesized_expression "(param_1[0xd] & uVar1)" ( (binary_expression "param_1[0xd] & uVar1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) & identifier) )) * number_literal)) )))) = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "*puVar3 = (short)uVar1;" (assignment_expression "*puVar3 = (short)uVar1" (pointer_expression "*puVar3" * identifier) = (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) })) (expression_statement "iVar11 = iVar11 + -1;" (assignment_expression "iVar11 = iVar11 + -1" identifier = (binary_expression "iVar11 + -1" identifier + number_literal)) ;) (expression_statement "param_1[0x1e] = iVar11;" (assignment_expression "param_1[0x1e] = iVar11" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar9 = uVar1;" (assignment_expression "uVar9 = uVar1" identifier = identifier) ;) }) while (parenthesized_expression "(iVar11 != 0)" ( (binary_expression "iVar11 != 0" identifier != number_literal) )) ;) (expression_statement "param_1[0x1a] = 0;" (assignment_expression "param_1[0x1a] = 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar15 = iVar6 + -1 + uVar7;" (assignment_expression "iVar15 = iVar6 + -1 + uVar7" identifier = (binary_expression "iVar6 + -1 + uVar7" (binary_expression "iVar6 + -1" identifier + number_literal) + identifier)) ;) (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x1b] = iVar15;" (assignment_expression "param_1[0x1b] = iVar15" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }" if (parenthesized_expression "(iVar10 == iVar5 + -1)" ( (binary_expression "iVar10 == iVar5 + -1" identifier == (binary_expression "iVar5 + -1" identifier + number_literal)) )) (compound_statement "{\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }" { (expression_statement "iVar11 = param_1[0x17];" (assignment_expression "iVar11 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "iVar10 = 0;" (assignment_expression "iVar10 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }" if (parenthesized_expression "(-1 < iVar11)" ( (binary_expression "-1 < iVar11" number_literal < identifier) )) (compound_statement "{\n            iVar10 = iVar11 + param_1[0xe];\n          }" { (expression_statement "iVar10 = iVar11 + param_1[0xe];" (assignment_expression "iVar10 = iVar11 + param_1[0xe]" identifier = (binary_expression "iVar11 + param_1[0xe]" identifier + (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);" (call_expression "FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0)" identifier (argument_list "(param_1,iVar10,iVar15 - iVar11,0)" ( identifier , identifier , (binary_expression "iVar15 - iVar11" identifier - identifier) , number_literal ))) ;) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" identifier (argument_list "()" ( ))) ;) (if_statement "if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }" if (parenthesized_expression "(*(int *)(*param_1 + 0x10) == 0)" ( (binary_expression "*(int *)(*param_1 + 0x10) == 0" (pointer_expression "*(int *)(*param_1 + 0x10)" * (cast_expression "(int *)(*param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n            return false;\n          }" { (return_statement "return false;" return false ;) })) (expression_statement "uVar14 = param_1[0x1d];" (assignment_expression "uVar14 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) })) (goto_statement "goto LAB_00012c70;" goto statement_identifier ;) })) }) (else_clause "else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }" else (compound_statement "{\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }" { (expression_statement "uVar14 = param_1[0x1e];" (assignment_expression "uVar14 = param_1[0x1e]" identifier = (subscript_expression "param_1[0x1e]" identifier [ number_literal ])) ;) (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) }))) })) (while_statement "while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }" { (if_statement "if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;" if (parenthesized_expression "((2 < uVar14) && ((uint)param_1[0x18] <= uVar14))" ( (binary_expression "(2 < uVar14) && ((uint)param_1[0x18] <= uVar14)" (parenthesized_expression "(2 < uVar14)" ( (binary_expression "2 < uVar14" number_literal < identifier) )) && (parenthesized_expression "((uint)param_1[0x18] <= uVar14)" ( (binary_expression "(uint)param_1[0x18] <= uVar14" (cast_expression "(uint)param_1[0x18]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x18]" identifier [ number_literal ])) <= identifier) ))) )) (goto_statement "goto LAB_00012e20;" goto statement_identifier ;)) (labeled_statement "LAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }" statement_identifier : (if_statement "if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }" if (parenthesized_expression "(param_1[0x1a] != 0)" ( (binary_expression "param_1[0x1a] != 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }" { (expression_statement "iVar15 = param_1[0x5a8];" (assignment_expression "iVar15 = param_1[0x5a8]" identifier = (subscript_expression "param_1[0x5a8]" identifier [ number_literal ])) ;) (expression_statement "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);" (assignment_expression "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8)" identifier = (pointer_expression "*(byte *)(param_1[0xe] + -1 + uVar8)" * (cast_expression "(byte *)(param_1[0xe] + -1 + uVar8)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + -1 + uVar8)" ( (binary_expression "param_1[0xe] + -1 + uVar8" (binary_expression "param_1[0xe] + -1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + number_literal) + identifier) ))))) ;) (expression_statement "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;" (assignment_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0" (pointer_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" * (cast_expression "(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a9] + iVar15 * 2)" ( (binary_expression "param_1[0x5a9] + iVar15 * 2" (subscript_expression "param_1[0x5a9]" identifier [ number_literal ]) + (binary_expression "iVar15 * 2" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "param_1[0x5a8] = iVar15 + 1;" (assignment_expression "param_1[0x5a8] = iVar15 + 1" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "*(byte *)(param_1[0x5a6] + iVar15) = bVar4;" (assignment_expression "*(byte *)(param_1[0x5a6] + iVar15) = bVar4" (pointer_expression "*(byte *)(param_1[0x5a6] + iVar15)" * (cast_expression "(byte *)(param_1[0x5a6] + iVar15)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a6] + iVar15)" ( (binary_expression "param_1[0x5a6] + iVar15" (subscript_expression "param_1[0x5a6]" identifier [ number_literal ]) + identifier) )))) = identifier) ;) (expression_statement "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;" (assignment_expression "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1" (pointer_expression "*(short *)(param_1 + bVar4 + 0x25)" * (cast_expression "(short *)(param_1 + bVar4 + 0x25)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + bVar4 + 0x25)" ( (binary_expression "param_1 + bVar4 + 0x25" (binary_expression "param_1 + bVar4" identifier + identifier) + number_literal) )))) = (binary_expression "(short)param_1[bVar4 + 0x25] + 1" (cast_expression "(short)param_1[bVar4 + 0x25]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[bVar4 + 0x25]" identifier [ (binary_expression "bVar4 + 0x25" identifier + number_literal) ])) + number_literal)) ;) (if_statement "if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }" if (parenthesized_expression "(param_1[0x5a8] == param_1[0x5a7] + -1)" ( (binary_expression "param_1[0x5a8] == param_1[0x5a7] + -1" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) == (binary_expression "param_1[0x5a7] + -1" (subscript_expression "param_1[0x5a7]" identifier [ number_literal ]) + number_literal)) )) (compound_statement "{\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }" { (expression_statement "iVar15 = param_1[0x17];" (assignment_expression "iVar15 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }" if (parenthesized_expression "(-1 < iVar15)" ( (binary_expression "-1 < iVar15" number_literal < identifier) )) (compound_statement "{\n          iVar11 = iVar15 + param_1[0xe];\n        }" { (expression_statement "iVar11 = iVar15 + param_1[0xe];" (assignment_expression "iVar11 = iVar15 + param_1[0xe]" identifier = (binary_expression "iVar15 + param_1[0xe]" identifier + (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);" (call_expression "FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0)" identifier (argument_list "(param_1,iVar11,param_1[0x1b] - iVar15,0)" ( identifier , identifier , (binary_expression "param_1[0x1b] - iVar15" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) - identifier) , number_literal ))) ;) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "param_1[0x1b] = param_1[0x1b] + 1;" (assignment_expression "param_1[0x1b] = param_1[0x1b] + 1" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = (binary_expression "param_1[0x1b] + 1" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "uVar14 = param_1[0x1d] - 1;" (assignment_expression "uVar14 = param_1[0x1d] - 1" identifier = (binary_expression "param_1[0x1d] - 1" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) - number_literal)) ;) (expression_statement "param_1[0x1d] = uVar14;" (assignment_expression "param_1[0x1d] = uVar14" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }" if (parenthesized_expression "(*(int *)(*param_1 + 0x10) == 0)" ( (binary_expression "*(int *)(*param_1 + 0x10) == 0" (pointer_expression "*(int *)(*param_1 + 0x10)" * (cast_expression "(int *)(*param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (goto_statement "goto LAB_00012c70;" goto statement_identifier ;) }))) (expression_statement "iVar15 = param_1[0x1d];" (assignment_expression "iVar15 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x1a] = 1;" (assignment_expression "param_1[0x1a] = 1" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x1b] = uVar8 + 1;" (assignment_expression "param_1[0x1b] = uVar8 + 1" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) (expression_statement "param_1[0x1d] = iVar15 - 1U;" (assignment_expression "param_1[0x1d] = iVar15 - 1U" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = (binary_expression "iVar15 - 1U" identifier - number_literal)) ;) (if_statement "if (0x105 < iVar15 - 1U) goto LAB_00012c7c;" if (parenthesized_expression "(0x105 < iVar15 - 1U)" ( (binary_expression "0x105 < iVar15 - 1U" number_literal < (binary_expression "iVar15 - 1U" identifier - number_literal)) )) (goto_statement "goto LAB_00012c7c;" goto statement_identifier ;)) (labeled_statement "LAB_00012d9a:\n    FUN_00012970();" statement_identifier : (expression_statement "FUN_00012970();" (call_expression "FUN_00012970()" identifier (argument_list "()" ( ))) ;)) (expression_statement "uVar7 = param_1[0x1d];" (assignment_expression "uVar7 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) (if_statement "if (0x105 < uVar7) goto LAB_00012c7c;" if (parenthesized_expression "(0x105 < uVar7)" ( (binary_expression "0x105 < uVar7" number_literal < identifier) )) (goto_statement "goto LAB_00012c7c;" goto statement_identifier ;)) (if_statement "if (param_2 == 0) {\n      return false;\n    }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }" { (expression_statement "uVar14 = param_1[0x1b];" (assignment_expression "uVar14 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (if_statement "if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }" if (parenthesized_expression "(param_1[0x1a] != 0)" ( (binary_expression "param_1[0x1a] != 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }" { (expression_statement "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);" (assignment_expression "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14)" identifier = (pointer_expression "*(byte *)(param_1[0xe] + -1 + uVar14)" * (cast_expression "(byte *)(param_1[0xe] + -1 + uVar14)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + -1 + uVar14)" ( (binary_expression "param_1[0xe] + -1 + uVar14" (binary_expression "param_1[0xe] + -1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + number_literal) + identifier) ))))) ;) (expression_statement "iVar15 = param_1[0x5a8];" (assignment_expression "iVar15 = param_1[0x5a8]" identifier = (subscript_expression "param_1[0x5a8]" identifier [ number_literal ])) ;) (expression_statement "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;" (assignment_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0" (pointer_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" * (cast_expression "(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a9] + iVar15 * 2)" ( (binary_expression "param_1[0x5a9] + iVar15 * 2" (subscript_expression "param_1[0x5a9]" identifier [ number_literal ]) + (binary_expression "iVar15 * 2" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "param_1[0x5a8] = iVar15 + 1;" (assignment_expression "param_1[0x5a8] = iVar15 + 1" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "*(byte *)(param_1[0x5a6] + iVar15) = bVar4;" (assignment_expression "*(byte *)(param_1[0x5a6] + iVar15) = bVar4" (pointer_expression "*(byte *)(param_1[0x5a6] + iVar15)" * (cast_expression "(byte *)(param_1[0x5a6] + iVar15)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a6] + iVar15)" ( (binary_expression "param_1[0x5a6] + iVar15" (subscript_expression "param_1[0x5a6]" identifier [ number_literal ]) + identifier) )))) = identifier) ;) (expression_statement "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;" (assignment_expression "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1" (pointer_expression "*(short *)(param_1 + bVar4 + 0x25)" * (cast_expression "(short *)(param_1 + bVar4 + 0x25)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + bVar4 + 0x25)" ( (binary_expression "param_1 + bVar4 + 0x25" (binary_expression "param_1 + bVar4" identifier + identifier) + number_literal) )))) = (binary_expression "(short)param_1[bVar4 + 0x25] + 1" (cast_expression "(short)param_1[bVar4 + 0x25]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[bVar4 + 0x25]" identifier [ (binary_expression "bVar4 + 0x25" identifier + number_literal) ])) + number_literal)) ;) (expression_statement "uVar14 = param_1[0x1b];" (assignment_expression "uVar14 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x1a] = 0;" (assignment_expression "param_1[0x1a] = 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = number_literal) ;) })) (expression_statement "uVar8 = 2;" (assignment_expression "uVar8 = 2" identifier = number_literal) ;) (if_statement "if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }" if (parenthesized_expression "(uVar14 < 3)" ( (binary_expression "uVar14 < 3" identifier < number_literal) )) (compound_statement "{\n        uVar8 = uVar14;\n      }" { (expression_statement "uVar8 = uVar14;" (assignment_expression "uVar8 = uVar14" identifier = identifier) ;) })) (expression_statement "param_1[0x5ad] = uVar8;" (assignment_expression "param_1[0x5ad] = uVar8" (subscript_expression "param_1[0x5ad]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }" if (parenthesized_expression "(param_2 == 4)" ( (binary_expression "param_2 == 4" identifier == number_literal) )) (compound_statement "{\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }" { (expression_statement "iVar15 = param_1[0x17];" (assignment_expression "iVar15 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }" if (parenthesized_expression "(-1 < iVar15)" ( (binary_expression "-1 < iVar15" number_literal < identifier) )) (compound_statement "{\n          iVar11 = iVar15 + param_1[0xe];\n        }" { (expression_statement "iVar11 = iVar15 + param_1[0xe];" (assignment_expression "iVar11 = iVar15 + param_1[0xe]" identifier = (binary_expression "iVar15 + param_1[0xe]" identifier + (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);" (call_expression "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1)" identifier (argument_list "(param_1,iVar11,uVar14 - iVar15,1)" ( identifier , identifier , (binary_expression "uVar14 - iVar15" identifier - identifier) , number_literal ))) ;) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" identifier (argument_list "()" ( ))) ;) (return_statement "return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');" return (cast_expression "(bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02')" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "((*(int *)(*param_1 + 0x10) != 0) + '\x02')" ( (binary_expression "(*(int *)(*param_1 + 0x10) != 0) + '\x02'" (parenthesized_expression "(*(int *)(*param_1 + 0x10) != 0)" ( (binary_expression "*(int *)(*param_1 + 0x10) != 0" (pointer_expression "*(int *)(*param_1 + 0x10)" * (cast_expression "(int *)(*param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) != number_literal) )) + (char_literal "'\x02'" ' escape_sequence ')) ))) ;) })) (if_statement "if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }" if (parenthesized_expression "(param_1[0x5a8] != 0)" ( (binary_expression "param_1[0x5a8] != 0" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }" { (expression_statement "iVar15 = param_1[0x17];" (assignment_expression "iVar15 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }" if (parenthesized_expression "(-1 < iVar15)" ( (binary_expression "-1 < iVar15" number_literal < identifier) )) (compound_statement "{\n          iVar11 = iVar15 + param_1[0xe];\n        }" { (expression_statement "iVar11 = iVar15 + param_1[0xe];" (assignment_expression "iVar11 = iVar15 + param_1[0xe]" identifier = (binary_expression "iVar15 + param_1[0xe]" identifier + (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);" (call_expression "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0)" identifier (argument_list "(param_1,iVar11,uVar14 - iVar15,0)" ( identifier , identifier , (binary_expression "uVar14 - iVar15" identifier - identifier) , number_literal ))) ;) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" identifier (argument_list "()" ( ))) ;) (return_statement "return *(int *)(*param_1 + 0x10) != 0;" return (binary_expression "*(int *)(*param_1 + 0x10) != 0" (pointer_expression "*(int *)(*param_1 + 0x10)" * (cast_expression "(int *)(*param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) != number_literal) ;) })) (return_statement "return true;" return true ;) })) (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "uVar14 = param_1[0x18];" (assignment_expression "uVar14 = param_1[0x18]" identifier = (subscript_expression "param_1[0x18]" identifier [ number_literal ])) ;) (expression_statement "iVar15 = param_1[0x1c];" (assignment_expression "iVar15 = param_1[0x1c]" identifier = (subscript_expression "param_1[0x1c]" identifier [ number_literal ])) ;) (if_statement "if (2 < uVar7) break;" if (parenthesized_expression "(2 < uVar7)" ( (binary_expression "2 < uVar7" number_literal < identifier) )) (break_statement "break;" break ;)) (expression_statement "param_1[0x1e] = uVar14;" (assignment_expression "param_1[0x1e] = uVar14" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x19] = iVar15;" (assignment_expression "param_1[0x19] = iVar15" (subscript_expression "param_1[0x19]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = number_literal) ;) })) (goto_statement "goto LAB_00012c85;" goto statement_identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */\n/* WARNING: Unknown calling convention */\n\nblock_state deflate_slow(deflate_state *s,int flush)\n\n{\n  uint uVar1;\n  byte bVar2;\n  Posf *pPVar3;\n  uInt uVar4;\n  uInt uVar5;\n  uInt uVar6;\n  int iVar7;\n  uint uVar8;\n  uInt uVar9;\n  uint uVar10;\n  Bytef *pBVar11;\n  uint uVar12;\n  uInt uVar13;\n  short sVar14;\n  ushort uVar15;\n  uint uVar16;\n  \n  uVar16 = s->lookahead;\nLAB_00012c70:\n  if (uVar16 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar10 = s->strstart;\n  uVar16 = s->match_length;\n  uVar9 = s->match_start;\nLAB_00012c85:\n  uVar8 = ((uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f)) & s->hash_mask;\n  pPVar3 = s->head;\n  s->ins_h = uVar8;\n  uVar15 = pPVar3[uVar8];\n  uVar12 = (uint)uVar15;\n  s->prev[s->w_mask & uVar10] = uVar15;\n  pPVar3[uVar8] = (ushort)uVar10;\n  s->prev_length = uVar16;\n  s->prev_match = uVar9;\n  s->match_length = 2;\n  if (((uVar12 != 0) && (uVar16 < s->max_lazy_match)) && (uVar10 - uVar12 <= s->w_size - 0x106)) {\n    uVar9 = longest_match(s,uVar12);\n    s->match_length = uVar9;\n    if (uVar9 < 6) {\n      uVar10 = s->strstart;\n      uVar16 = s->prev_length;\n      if ((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))) {\n        s->match_length = 2;\n        if (uVar16 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        uVar9 = s->lookahead;\n        uVar13 = s->last_lit;\n        sVar14 = (short)uVar10 - (short)s->prev_match;\n        uVar15 = sVar14 - 2;\n        s->d_buf[uVar13] = sVar14 - 1;\n        s->last_lit = uVar13 + 1;\n        s->l_buf[uVar13] = (uchf)(uVar16 - 3);\n        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;\n        if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }\n        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;\n        uVar4 = s->last_lit;\n        uVar5 = s->lit_bufsize;\n        uVar6 = s->prev_length;\n        uVar16 = (s->lookahead + 1) - uVar6;\n        uVar13 = uVar6 - 2;\n        uVar8 = s->strstart;\n        s->lookahead = uVar16;\n        s->prev_length = uVar13;\n        uVar12 = uVar8;\n        do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);\n        s->match_available = 0;\n        uVar9 = (uVar6 - 1) + uVar8;\n        s->match_length = 2;\n        s->strstart = uVar9;\n        if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar16 = s->prev_length;\n      uVar10 = s->strstart;\n    }\n  }\n  while( true ) {\n    if ((2 < uVar16) && (s->match_length <= uVar16)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (s->match_available != 0) {\n      uVar9 = s->last_lit;\n      bVar2 = s->window[uVar10 - 1];\n      s->d_buf[uVar9] = 0;\n      s->last_lit = uVar9 + 1;\n      s->l_buf[uVar9] = bVar2;\n      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n      if (s->last_lit == s->lit_bufsize - 1) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }\n      s->strstart = s->strstart + 1;\n      uVar16 = s->lookahead - 1;\n      s->lookahead = uVar16;\n      if (s->strm->avail_out == 0) {\n        return need_more;\n      }\n      goto LAB_00012c70;\n    }\n    s->match_available = 1;\n    s->strstart = uVar10 + 1;\n    uVar16 = s->lookahead - 1;\n    s->lookahead = uVar16;\n    if (0x105 < uVar16) goto LAB_00012c7c;\nLAB_00012d9a:\n    fill_window(s);\n    uVar8 = s->lookahead;\n    if (0x105 < uVar8) goto LAB_00012c7c;\n    if (flush == 0) {\n      return need_more;\n    }\n    if (uVar8 == 0) {\n      uVar16 = s->strstart;\n      if (s->match_available != 0) {\n        bVar2 = s->window[uVar16 - 1];\n        uVar9 = s->last_lit;\n        s->d_buf[uVar9] = 0;\n        s->last_lit = uVar9 + 1;\n        s->l_buf[uVar9] = bVar2;\n        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n        uVar16 = s->strstart;\n        s->match_available = 0;\n      }\n      uVar10 = 2;\n      if (uVar16 < 3) {\n        uVar10 = uVar16;\n      }\n      s->insert = uVar10;\n      if (flush == 4) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (s->strm->avail_out != 0) + finish_started;\n      }\n      if (s->last_lit != 0) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (uint)(s->strm->avail_out != 0);\n      }\n      return block_done;\n    }\n    uVar10 = s->strstart;\n    uVar16 = s->match_length;\n    uVar9 = s->match_start;\n    if (2 < uVar8) break;\n    s->prev_length = uVar16;\n    s->prev_match = uVar9;\n    s->match_length = 2;\n  }\n  goto LAB_00012c85;\n}\n\n" comment comment (function_definition "block_state deflate_slow(deflate_state *s,int flush)\n\n{\n  uint uVar1;\n  byte bVar2;\n  Posf *pPVar3;\n  uInt uVar4;\n  uInt uVar5;\n  uInt uVar6;\n  int iVar7;\n  uint uVar8;\n  uInt uVar9;\n  uint uVar10;\n  Bytef *pBVar11;\n  uint uVar12;\n  uInt uVar13;\n  short sVar14;\n  ushort uVar15;\n  uint uVar16;\n  \n  uVar16 = s->lookahead;\nLAB_00012c70:\n  if (uVar16 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar10 = s->strstart;\n  uVar16 = s->match_length;\n  uVar9 = s->match_start;\nLAB_00012c85:\n  uVar8 = ((uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f)) & s->hash_mask;\n  pPVar3 = s->head;\n  s->ins_h = uVar8;\n  uVar15 = pPVar3[uVar8];\n  uVar12 = (uint)uVar15;\n  s->prev[s->w_mask & uVar10] = uVar15;\n  pPVar3[uVar8] = (ushort)uVar10;\n  s->prev_length = uVar16;\n  s->prev_match = uVar9;\n  s->match_length = 2;\n  if (((uVar12 != 0) && (uVar16 < s->max_lazy_match)) && (uVar10 - uVar12 <= s->w_size - 0x106)) {\n    uVar9 = longest_match(s,uVar12);\n    s->match_length = uVar9;\n    if (uVar9 < 6) {\n      uVar10 = s->strstart;\n      uVar16 = s->prev_length;\n      if ((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))) {\n        s->match_length = 2;\n        if (uVar16 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        uVar9 = s->lookahead;\n        uVar13 = s->last_lit;\n        sVar14 = (short)uVar10 - (short)s->prev_match;\n        uVar15 = sVar14 - 2;\n        s->d_buf[uVar13] = sVar14 - 1;\n        s->last_lit = uVar13 + 1;\n        s->l_buf[uVar13] = (uchf)(uVar16 - 3);\n        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;\n        if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }\n        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;\n        uVar4 = s->last_lit;\n        uVar5 = s->lit_bufsize;\n        uVar6 = s->prev_length;\n        uVar16 = (s->lookahead + 1) - uVar6;\n        uVar13 = uVar6 - 2;\n        uVar8 = s->strstart;\n        s->lookahead = uVar16;\n        s->prev_length = uVar13;\n        uVar12 = uVar8;\n        do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);\n        s->match_available = 0;\n        uVar9 = (uVar6 - 1) + uVar8;\n        s->match_length = 2;\n        s->strstart = uVar9;\n        if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar16 = s->prev_length;\n      uVar10 = s->strstart;\n    }\n  }\n  while( true ) {\n    if ((2 < uVar16) && (s->match_length <= uVar16)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (s->match_available != 0) {\n      uVar9 = s->last_lit;\n      bVar2 = s->window[uVar10 - 1];\n      s->d_buf[uVar9] = 0;\n      s->last_lit = uVar9 + 1;\n      s->l_buf[uVar9] = bVar2;\n      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n      if (s->last_lit == s->lit_bufsize - 1) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }\n      s->strstart = s->strstart + 1;\n      uVar16 = s->lookahead - 1;\n      s->lookahead = uVar16;\n      if (s->strm->avail_out == 0) {\n        return need_more;\n      }\n      goto LAB_00012c70;\n    }\n    s->match_available = 1;\n    s->strstart = uVar10 + 1;\n    uVar16 = s->lookahead - 1;\n    s->lookahead = uVar16;\n    if (0x105 < uVar16) goto LAB_00012c7c;\nLAB_00012d9a:\n    fill_window(s);\n    uVar8 = s->lookahead;\n    if (0x105 < uVar8) goto LAB_00012c7c;\n    if (flush == 0) {\n      return need_more;\n    }\n    if (uVar8 == 0) {\n      uVar16 = s->strstart;\n      if (s->match_available != 0) {\n        bVar2 = s->window[uVar16 - 1];\n        uVar9 = s->last_lit;\n        s->d_buf[uVar9] = 0;\n        s->last_lit = uVar9 + 1;\n        s->l_buf[uVar9] = bVar2;\n        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n        uVar16 = s->strstart;\n        s->match_available = 0;\n      }\n      uVar10 = 2;\n      if (uVar16 < 3) {\n        uVar10 = uVar16;\n      }\n      s->insert = uVar10;\n      if (flush == 4) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (s->strm->avail_out != 0) + finish_started;\n      }\n      if (s->last_lit != 0) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (uint)(s->strm->avail_out != 0);\n      }\n      return block_done;\n    }\n    uVar10 = s->strstart;\n    uVar16 = s->match_length;\n    uVar9 = s->match_start;\n    if (2 < uVar8) break;\n    s->prev_length = uVar16;\n    s->prev_match = uVar9;\n    s->match_length = 2;\n  }\n  goto LAB_00012c85;\n}" type_identifier (function_declarator "deflate_slow(deflate_state *s,int flush)" identifier (parameter_list "(deflate_state *s,int flush)" ( (parameter_declaration "deflate_state *s" type_identifier (pointer_declarator "*s" * identifier)) , (parameter_declaration "int flush" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  byte bVar2;\n  Posf *pPVar3;\n  uInt uVar4;\n  uInt uVar5;\n  uInt uVar6;\n  int iVar7;\n  uint uVar8;\n  uInt uVar9;\n  uint uVar10;\n  Bytef *pBVar11;\n  uint uVar12;\n  uInt uVar13;\n  short sVar14;\n  ushort uVar15;\n  uint uVar16;\n  \n  uVar16 = s->lookahead;\nLAB_00012c70:\n  if (uVar16 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar10 = s->strstart;\n  uVar16 = s->match_length;\n  uVar9 = s->match_start;\nLAB_00012c85:\n  uVar8 = ((uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f)) & s->hash_mask;\n  pPVar3 = s->head;\n  s->ins_h = uVar8;\n  uVar15 = pPVar3[uVar8];\n  uVar12 = (uint)uVar15;\n  s->prev[s->w_mask & uVar10] = uVar15;\n  pPVar3[uVar8] = (ushort)uVar10;\n  s->prev_length = uVar16;\n  s->prev_match = uVar9;\n  s->match_length = 2;\n  if (((uVar12 != 0) && (uVar16 < s->max_lazy_match)) && (uVar10 - uVar12 <= s->w_size - 0x106)) {\n    uVar9 = longest_match(s,uVar12);\n    s->match_length = uVar9;\n    if (uVar9 < 6) {\n      uVar10 = s->strstart;\n      uVar16 = s->prev_length;\n      if ((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))) {\n        s->match_length = 2;\n        if (uVar16 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        uVar9 = s->lookahead;\n        uVar13 = s->last_lit;\n        sVar14 = (short)uVar10 - (short)s->prev_match;\n        uVar15 = sVar14 - 2;\n        s->d_buf[uVar13] = sVar14 - 1;\n        s->last_lit = uVar13 + 1;\n        s->l_buf[uVar13] = (uchf)(uVar16 - 3);\n        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;\n        if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }\n        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;\n        uVar4 = s->last_lit;\n        uVar5 = s->lit_bufsize;\n        uVar6 = s->prev_length;\n        uVar16 = (s->lookahead + 1) - uVar6;\n        uVar13 = uVar6 - 2;\n        uVar8 = s->strstart;\n        s->lookahead = uVar16;\n        s->prev_length = uVar13;\n        uVar12 = uVar8;\n        do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);\n        s->match_available = 0;\n        uVar9 = (uVar6 - 1) + uVar8;\n        s->match_length = 2;\n        s->strstart = uVar9;\n        if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar16 = s->prev_length;\n      uVar10 = s->strstart;\n    }\n  }\n  while( true ) {\n    if ((2 < uVar16) && (s->match_length <= uVar16)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (s->match_available != 0) {\n      uVar9 = s->last_lit;\n      bVar2 = s->window[uVar10 - 1];\n      s->d_buf[uVar9] = 0;\n      s->last_lit = uVar9 + 1;\n      s->l_buf[uVar9] = bVar2;\n      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n      if (s->last_lit == s->lit_bufsize - 1) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }\n      s->strstart = s->strstart + 1;\n      uVar16 = s->lookahead - 1;\n      s->lookahead = uVar16;\n      if (s->strm->avail_out == 0) {\n        return need_more;\n      }\n      goto LAB_00012c70;\n    }\n    s->match_available = 1;\n    s->strstart = uVar10 + 1;\n    uVar16 = s->lookahead - 1;\n    s->lookahead = uVar16;\n    if (0x105 < uVar16) goto LAB_00012c7c;\nLAB_00012d9a:\n    fill_window(s);\n    uVar8 = s->lookahead;\n    if (0x105 < uVar8) goto LAB_00012c7c;\n    if (flush == 0) {\n      return need_more;\n    }\n    if (uVar8 == 0) {\n      uVar16 = s->strstart;\n      if (s->match_available != 0) {\n        bVar2 = s->window[uVar16 - 1];\n        uVar9 = s->last_lit;\n        s->d_buf[uVar9] = 0;\n        s->last_lit = uVar9 + 1;\n        s->l_buf[uVar9] = bVar2;\n        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n        uVar16 = s->strstart;\n        s->match_available = 0;\n      }\n      uVar10 = 2;\n      if (uVar16 < 3) {\n        uVar10 = uVar16;\n      }\n      s->insert = uVar10;\n      if (flush == 4) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (s->strm->avail_out != 0) + finish_started;\n      }\n      if (s->last_lit != 0) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (uint)(s->strm->avail_out != 0);\n      }\n      return block_done;\n    }\n    uVar10 = s->strstart;\n    uVar16 = s->match_length;\n    uVar9 = s->match_start;\n    if (2 < uVar8) break;\n    s->prev_length = uVar16;\n    s->prev_match = uVar9;\n    s->match_length = 2;\n  }\n  goto LAB_00012c85;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "byte bVar2;" type_identifier identifier ;) (declaration "Posf *pPVar3;" type_identifier (pointer_declarator "*pPVar3" * identifier) ;) (declaration "uInt uVar4;" type_identifier identifier ;) (declaration "uInt uVar5;" type_identifier identifier ;) (declaration "uInt uVar6;" type_identifier identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uInt uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "Bytef *pBVar11;" type_identifier (pointer_declarator "*pBVar11" * identifier) ;) (declaration "uint uVar12;" type_identifier identifier ;) (declaration "uInt uVar13;" type_identifier identifier ;) (declaration "short sVar14;" (sized_type_specifier "short" short) identifier ;) (declaration "ushort uVar15;" type_identifier identifier ;) (declaration "uint uVar16;" type_identifier identifier ;) (expression_statement "uVar16 = s->lookahead;" (assignment_expression "uVar16 = s->lookahead" identifier = (field_expression "s->lookahead" identifier -> field_identifier)) ;) (labeled_statement "LAB_00012c70:\n  if (uVar16 < 0x106) goto LAB_00012d9a;" statement_identifier : (if_statement "if (uVar16 < 0x106) goto LAB_00012d9a;" if (parenthesized_expression "(uVar16 < 0x106)" ( (binary_expression "uVar16 < 0x106" identifier < number_literal) )) (goto_statement "goto LAB_00012d9a;" goto statement_identifier ;))) (labeled_statement "LAB_00012c7c:\n  uVar10 = s->strstart;" statement_identifier : (expression_statement "uVar10 = s->strstart;" (assignment_expression "uVar10 = s->strstart" identifier = (field_expression "s->strstart" identifier -> field_identifier)) ;)) (expression_statement "uVar16 = s->match_length;" (assignment_expression "uVar16 = s->match_length" identifier = (field_expression "s->match_length" identifier -> field_identifier)) ;) (expression_statement "uVar9 = s->match_start;" (assignment_expression "uVar9 = s->match_start" identifier = (field_expression "s->match_start" identifier -> field_identifier)) ;) (labeled_statement "LAB_00012c85:\n  uVar8 = ((uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f)) & s->hash_mask;" statement_identifier : (expression_statement "uVar8 = ((uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f)) & s->hash_mask;" (assignment_expression "uVar8 = ((uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f)) & s->hash_mask" identifier = (binary_expression "((uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f)) & s->hash_mask" (parenthesized_expression "((uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f))" ( (binary_expression "(uint)s->window[uVar10 + 2] ^ s->ins_h << ((byte)s->hash_shift & 0x1f)" (cast_expression "(uint)s->window[uVar10 + 2]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "s->window[uVar10 + 2]" (field_expression "s->window" identifier -> field_identifier) [ (binary_expression "uVar10 + 2" identifier + number_literal) ])) ^ (binary_expression "s->ins_h << ((byte)s->hash_shift & 0x1f)" (field_expression "s->ins_h" identifier -> field_identifier) << (parenthesized_expression "((byte)s->hash_shift & 0x1f)" ( (binary_expression "(byte)s->hash_shift & 0x1f" (cast_expression "(byte)s->hash_shift" ( (type_descriptor "byte" type_identifier) ) (field_expression "s->hash_shift" identifier -> field_identifier)) & number_literal) )))) )) & (field_expression "s->hash_mask" identifier -> field_identifier))) ;)) (expression_statement "pPVar3 = s->head;" (assignment_expression "pPVar3 = s->head" identifier = (field_expression "s->head" identifier -> field_identifier)) ;) (expression_statement "s->ins_h = uVar8;" (assignment_expression "s->ins_h = uVar8" (field_expression "s->ins_h" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar15 = pPVar3[uVar8];" (assignment_expression "uVar15 = pPVar3[uVar8]" identifier = (subscript_expression "pPVar3[uVar8]" identifier [ identifier ])) ;) (expression_statement "uVar12 = (uint)uVar15;" (assignment_expression "uVar12 = (uint)uVar15" identifier = (cast_expression "(uint)uVar15" ( (type_descriptor "uint" type_identifier) ) identifier)) ;) (expression_statement "s->prev[s->w_mask & uVar10] = uVar15;" (assignment_expression "s->prev[s->w_mask & uVar10] = uVar15" (subscript_expression "s->prev[s->w_mask & uVar10]" (field_expression "s->prev" identifier -> field_identifier) [ (binary_expression "s->w_mask & uVar10" (field_expression "s->w_mask" identifier -> field_identifier) & identifier) ]) = identifier) ;) (expression_statement "pPVar3[uVar8] = (ushort)uVar10;" (assignment_expression "pPVar3[uVar8] = (ushort)uVar10" (subscript_expression "pPVar3[uVar8]" identifier [ identifier ]) = (cast_expression "(ushort)uVar10" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (expression_statement "s->prev_length = uVar16;" (assignment_expression "s->prev_length = uVar16" (field_expression "s->prev_length" identifier -> field_identifier) = identifier) ;) (expression_statement "s->prev_match = uVar9;" (assignment_expression "s->prev_match = uVar9" (field_expression "s->prev_match" identifier -> field_identifier) = identifier) ;) (expression_statement "s->match_length = 2;" (assignment_expression "s->match_length = 2" (field_expression "s->match_length" identifier -> field_identifier) = number_literal) ;) (if_statement "if (((uVar12 != 0) && (uVar16 < s->max_lazy_match)) && (uVar10 - uVar12 <= s->w_size - 0x106)) {\n    uVar9 = longest_match(s,uVar12);\n    s->match_length = uVar9;\n    if (uVar9 < 6) {\n      uVar10 = s->strstart;\n      uVar16 = s->prev_length;\n      if ((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))) {\n        s->match_length = 2;\n        if (uVar16 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        uVar9 = s->lookahead;\n        uVar13 = s->last_lit;\n        sVar14 = (short)uVar10 - (short)s->prev_match;\n        uVar15 = sVar14 - 2;\n        s->d_buf[uVar13] = sVar14 - 1;\n        s->last_lit = uVar13 + 1;\n        s->l_buf[uVar13] = (uchf)(uVar16 - 3);\n        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;\n        if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }\n        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;\n        uVar4 = s->last_lit;\n        uVar5 = s->lit_bufsize;\n        uVar6 = s->prev_length;\n        uVar16 = (s->lookahead + 1) - uVar6;\n        uVar13 = uVar6 - 2;\n        uVar8 = s->strstart;\n        s->lookahead = uVar16;\n        s->prev_length = uVar13;\n        uVar12 = uVar8;\n        do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);\n        s->match_available = 0;\n        uVar9 = (uVar6 - 1) + uVar8;\n        s->match_length = 2;\n        s->strstart = uVar9;\n        if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar16 = s->prev_length;\n      uVar10 = s->strstart;\n    }\n  }" if (parenthesized_expression "(((uVar12 != 0) && (uVar16 < s->max_lazy_match)) && (uVar10 - uVar12 <= s->w_size - 0x106))" ( (binary_expression "((uVar12 != 0) && (uVar16 < s->max_lazy_match)) && (uVar10 - uVar12 <= s->w_size - 0x106)" (parenthesized_expression "((uVar12 != 0) && (uVar16 < s->max_lazy_match))" ( (binary_expression "(uVar12 != 0) && (uVar16 < s->max_lazy_match)" (parenthesized_expression "(uVar12 != 0)" ( (binary_expression "uVar12 != 0" identifier != number_literal) )) && (parenthesized_expression "(uVar16 < s->max_lazy_match)" ( (binary_expression "uVar16 < s->max_lazy_match" identifier < (field_expression "s->max_lazy_match" identifier -> field_identifier)) ))) )) && (parenthesized_expression "(uVar10 - uVar12 <= s->w_size - 0x106)" ( (binary_expression "uVar10 - uVar12 <= s->w_size - 0x106" (binary_expression "uVar10 - uVar12" identifier - identifier) <= (binary_expression "s->w_size - 0x106" (field_expression "s->w_size" identifier -> field_identifier) - number_literal)) ))) )) (compound_statement "{\n    uVar9 = longest_match(s,uVar12);\n    s->match_length = uVar9;\n    if (uVar9 < 6) {\n      uVar10 = s->strstart;\n      uVar16 = s->prev_length;\n      if ((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))) {\n        s->match_length = 2;\n        if (uVar16 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        uVar9 = s->lookahead;\n        uVar13 = s->last_lit;\n        sVar14 = (short)uVar10 - (short)s->prev_match;\n        uVar15 = sVar14 - 2;\n        s->d_buf[uVar13] = sVar14 - 1;\n        s->last_lit = uVar13 + 1;\n        s->l_buf[uVar13] = (uchf)(uVar16 - 3);\n        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;\n        if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }\n        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;\n        uVar4 = s->last_lit;\n        uVar5 = s->lit_bufsize;\n        uVar6 = s->prev_length;\n        uVar16 = (s->lookahead + 1) - uVar6;\n        uVar13 = uVar6 - 2;\n        uVar8 = s->strstart;\n        s->lookahead = uVar16;\n        s->prev_length = uVar13;\n        uVar12 = uVar8;\n        do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);\n        s->match_available = 0;\n        uVar9 = (uVar6 - 1) + uVar8;\n        s->match_length = 2;\n        s->strstart = uVar9;\n        if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar16 = s->prev_length;\n      uVar10 = s->strstart;\n    }\n  }" { (expression_statement "uVar9 = longest_match(s,uVar12);" (assignment_expression "uVar9 = longest_match(s,uVar12)" identifier = (call_expression "longest_match(s,uVar12)" identifier (argument_list "(s,uVar12)" ( identifier , identifier )))) ;) (expression_statement "s->match_length = uVar9;" (assignment_expression "s->match_length = uVar9" (field_expression "s->match_length" identifier -> field_identifier) = identifier) ;) (if_statement "if (uVar9 < 6) {\n      uVar10 = s->strstart;\n      uVar16 = s->prev_length;\n      if ((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))) {\n        s->match_length = 2;\n        if (uVar16 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        uVar9 = s->lookahead;\n        uVar13 = s->last_lit;\n        sVar14 = (short)uVar10 - (short)s->prev_match;\n        uVar15 = sVar14 - 2;\n        s->d_buf[uVar13] = sVar14 - 1;\n        s->last_lit = uVar13 + 1;\n        s->l_buf[uVar13] = (uchf)(uVar16 - 3);\n        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;\n        if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }\n        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;\n        uVar4 = s->last_lit;\n        uVar5 = s->lit_bufsize;\n        uVar6 = s->prev_length;\n        uVar16 = (s->lookahead + 1) - uVar6;\n        uVar13 = uVar6 - 2;\n        uVar8 = s->strstart;\n        s->lookahead = uVar16;\n        s->prev_length = uVar13;\n        uVar12 = uVar8;\n        do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);\n        s->match_available = 0;\n        uVar9 = (uVar6 - 1) + uVar8;\n        s->match_length = 2;\n        s->strstart = uVar9;\n        if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar16 = s->prev_length;\n      uVar10 = s->strstart;\n    }" if (parenthesized_expression "(uVar9 < 6)" ( (binary_expression "uVar9 < 6" identifier < number_literal) )) (compound_statement "{\n      uVar10 = s->strstart;\n      uVar16 = s->prev_length;\n      if ((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))) {\n        s->match_length = 2;\n        if (uVar16 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        uVar9 = s->lookahead;\n        uVar13 = s->last_lit;\n        sVar14 = (short)uVar10 - (short)s->prev_match;\n        uVar15 = sVar14 - 2;\n        s->d_buf[uVar13] = sVar14 - 1;\n        s->last_lit = uVar13 + 1;\n        s->l_buf[uVar13] = (uchf)(uVar16 - 3);\n        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;\n        if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }\n        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;\n        uVar4 = s->last_lit;\n        uVar5 = s->lit_bufsize;\n        uVar6 = s->prev_length;\n        uVar16 = (s->lookahead + 1) - uVar6;\n        uVar13 = uVar6 - 2;\n        uVar8 = s->strstart;\n        s->lookahead = uVar16;\n        s->prev_length = uVar13;\n        uVar12 = uVar8;\n        do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);\n        s->match_available = 0;\n        uVar9 = (uVar6 - 1) + uVar8;\n        s->match_length = 2;\n        s->strstart = uVar9;\n        if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }\n        goto LAB_00012c70;\n      }\n    }" { (expression_statement "uVar10 = s->strstart;" (assignment_expression "uVar10 = s->strstart" identifier = (field_expression "s->strstart" identifier -> field_identifier)) ;) (expression_statement "uVar16 = s->prev_length;" (assignment_expression "uVar16 = s->prev_length" identifier = (field_expression "s->prev_length" identifier -> field_identifier)) ;) (if_statement "if ((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))) {\n        s->match_length = 2;\n        if (uVar16 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        uVar9 = s->lookahead;\n        uVar13 = s->last_lit;\n        sVar14 = (short)uVar10 - (short)s->prev_match;\n        uVar15 = sVar14 - 2;\n        s->d_buf[uVar13] = sVar14 - 1;\n        s->last_lit = uVar13 + 1;\n        s->l_buf[uVar13] = (uchf)(uVar16 - 3);\n        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;\n        if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }\n        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;\n        uVar4 = s->last_lit;\n        uVar5 = s->lit_bufsize;\n        uVar6 = s->prev_length;\n        uVar16 = (s->lookahead + 1) - uVar6;\n        uVar13 = uVar6 - 2;\n        uVar8 = s->strstart;\n        s->lookahead = uVar16;\n        s->prev_length = uVar13;\n        uVar12 = uVar8;\n        do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);\n        s->match_available = 0;\n        uVar9 = (uVar6 - 1) + uVar8;\n        s->match_length = 2;\n        s->strstart = uVar9;\n        if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }\n        goto LAB_00012c70;\n      }" if (parenthesized_expression "((s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start))))" ( (binary_expression "(s->strategy == 1) || ((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))" (parenthesized_expression "(s->strategy == 1)" ( (binary_expression "s->strategy == 1" (field_expression "s->strategy" identifier -> field_identifier) == number_literal) )) || (parenthesized_expression "((uVar9 == 3 && (0x1000 < uVar10 - s->match_start)))" ( (parenthesized_expression "(uVar9 == 3 && (0x1000 < uVar10 - s->match_start))" ( (binary_expression "uVar9 == 3 && (0x1000 < uVar10 - s->match_start)" (binary_expression "uVar9 == 3" identifier == number_literal) && (parenthesized_expression "(0x1000 < uVar10 - s->match_start)" ( (binary_expression "0x1000 < uVar10 - s->match_start" number_literal < (binary_expression "uVar10 - s->match_start" identifier - (field_expression "s->match_start" identifier -> field_identifier))) ))) )) ))) )) (compound_statement "{\n        s->match_length = 2;\n        if (uVar16 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        uVar9 = s->lookahead;\n        uVar13 = s->last_lit;\n        sVar14 = (short)uVar10 - (short)s->prev_match;\n        uVar15 = sVar14 - 2;\n        s->d_buf[uVar13] = sVar14 - 1;\n        s->last_lit = uVar13 + 1;\n        s->l_buf[uVar13] = (uchf)(uVar16 - 3);\n        s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;\n        if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }\n        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;\n        uVar4 = s->last_lit;\n        uVar5 = s->lit_bufsize;\n        uVar6 = s->prev_length;\n        uVar16 = (s->lookahead + 1) - uVar6;\n        uVar13 = uVar6 - 2;\n        uVar8 = s->strstart;\n        s->lookahead = uVar16;\n        s->prev_length = uVar13;\n        uVar12 = uVar8;\n        do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);\n        s->match_available = 0;\n        uVar9 = (uVar6 - 1) + uVar8;\n        s->match_length = 2;\n        s->strstart = uVar9;\n        if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }\n        goto LAB_00012c70;\n      }" { (expression_statement "s->match_length = 2;" (assignment_expression "s->match_length = 2" (field_expression "s->match_length" identifier -> field_identifier) = number_literal) ;) (if_statement "if (uVar16 < 3) goto LAB_00012cfe;" if (parenthesized_expression "(uVar16 < 3)" ( (binary_expression "uVar16 < 3" identifier < number_literal) )) (goto_statement "goto LAB_00012cfe;" goto statement_identifier ;)) (labeled_statement "LAB_00012e20:\n        uVar9 = s->lookahead;" statement_identifier : (expression_statement "uVar9 = s->lookahead;" (assignment_expression "uVar9 = s->lookahead" identifier = (field_expression "s->lookahead" identifier -> field_identifier)) ;)) (expression_statement "uVar13 = s->last_lit;" (assignment_expression "uVar13 = s->last_lit" identifier = (field_expression "s->last_lit" identifier -> field_identifier)) ;) (expression_statement "sVar14 = (short)uVar10 - (short)s->prev_match;" (assignment_expression "sVar14 = (short)uVar10 - (short)s->prev_match" identifier = (binary_expression "(short)uVar10 - (short)s->prev_match" (cast_expression "(short)uVar10" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) - (cast_expression "(short)s->prev_match" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (field_expression "s->prev_match" identifier -> field_identifier)))) ;) (expression_statement "uVar15 = sVar14 - 2;" (assignment_expression "uVar15 = sVar14 - 2" identifier = (binary_expression "sVar14 - 2" identifier - number_literal)) ;) (expression_statement "s->d_buf[uVar13] = sVar14 - 1;" (assignment_expression "s->d_buf[uVar13] = sVar14 - 1" (subscript_expression "s->d_buf[uVar13]" (field_expression "s->d_buf" identifier -> field_identifier) [ identifier ]) = (binary_expression "sVar14 - 1" identifier - number_literal)) ;) (expression_statement "s->last_lit = uVar13 + 1;" (assignment_expression "s->last_lit = uVar13 + 1" (field_expression "s->last_lit" identifier -> field_identifier) = (binary_expression "uVar13 + 1" identifier + number_literal)) ;) (expression_statement "s->l_buf[uVar13] = (uchf)(uVar16 - 3);" (assignment_expression "s->l_buf[uVar13] = (uchf)(uVar16 - 3)" (subscript_expression "s->l_buf[uVar13]" (field_expression "s->l_buf" identifier -> field_identifier) [ identifier ]) = (call_expression "(uchf)(uVar16 - 3)" (parenthesized_expression "(uchf)" ( identifier )) (argument_list "(uVar16 - 3)" ( (binary_expression "uVar16 - 3" identifier - number_literal) )))) ;) (expression_statement "s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1;" (assignment_expression "s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq =\n             s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1" (field_expression "s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq" (field_expression "s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc" (subscript_expression "s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ (binary_expression "(byte)_length_code[uVar16 - 3 & 0xff] + 0x101" (cast_expression "(byte)_length_code[uVar16 - 3 & 0xff]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "_length_code[uVar16 - 3 & 0xff]" identifier [ (binary_expression "uVar16 - 3 & 0xff" (binary_expression "uVar16 - 3" identifier - number_literal) & number_literal) ])) + number_literal) ]) . field_identifier) . field_identifier) = (binary_expression "s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq + 1" (field_expression "s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc.freq" (field_expression "s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101].fc" (subscript_expression "s->dyn_ltree[(byte)_length_code[uVar16 - 3 & 0xff] + 0x101]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ (binary_expression "(byte)_length_code[uVar16 - 3 & 0xff] + 0x101" (cast_expression "(byte)_length_code[uVar16 - 3 & 0xff]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "_length_code[uVar16 - 3 & 0xff]" identifier [ (binary_expression "uVar16 - 3 & 0xff" (binary_expression "uVar16 - 3" identifier - number_literal) & number_literal) ])) + number_literal) ]) . field_identifier) . field_identifier) + number_literal)) ;) (if_statement "if (uVar15 < 0x100) {\n          bVar2 = (&_dist_code)[uVar15];\n        }\n        else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }" if (parenthesized_expression "(uVar15 < 0x100)" ( (binary_expression "uVar15 < 0x100" identifier < number_literal) )) (compound_statement "{\n          bVar2 = (&_dist_code)[uVar15];\n        }" { (expression_statement "bVar2 = (&_dist_code)[uVar15];" (assignment_expression "bVar2 = (&_dist_code)[uVar15]" identifier = (subscript_expression "(&_dist_code)[uVar15]" (parenthesized_expression "(&_dist_code)" ( (pointer_expression "&_dist_code" & identifier) )) [ identifier ])) ;) }) (else_clause "else {\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }" else (compound_statement "{\n          bVar2 = (&DAT_00022640)[uVar15 >> 7];\n        }" { (expression_statement "bVar2 = (&DAT_00022640)[uVar15 >> 7];" (assignment_expression "bVar2 = (&DAT_00022640)[uVar15 >> 7]" identifier = (subscript_expression "(&DAT_00022640)[uVar15 >> 7]" (parenthesized_expression "(&DAT_00022640)" ( (pointer_expression "&DAT_00022640" & identifier) )) [ (binary_expression "uVar15 >> 7" identifier >> number_literal) ])) ;) }))) (expression_statement "s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;" (assignment_expression "s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1" (field_expression "s->dyn_dtree[bVar2].fc.freq" (field_expression "s->dyn_dtree[bVar2].fc" (subscript_expression "s->dyn_dtree[bVar2]" (field_expression "s->dyn_dtree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) = (binary_expression "s->dyn_dtree[bVar2].fc.freq + 1" (field_expression "s->dyn_dtree[bVar2].fc.freq" (field_expression "s->dyn_dtree[bVar2].fc" (subscript_expression "s->dyn_dtree[bVar2]" (field_expression "s->dyn_dtree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) + number_literal)) ;) (expression_statement "uVar4 = s->last_lit;" (assignment_expression "uVar4 = s->last_lit" identifier = (field_expression "s->last_lit" identifier -> field_identifier)) ;) (expression_statement "uVar5 = s->lit_bufsize;" (assignment_expression "uVar5 = s->lit_bufsize" identifier = (field_expression "s->lit_bufsize" identifier -> field_identifier)) ;) (expression_statement "uVar6 = s->prev_length;" (assignment_expression "uVar6 = s->prev_length" identifier = (field_expression "s->prev_length" identifier -> field_identifier)) ;) (expression_statement "uVar16 = (s->lookahead + 1) - uVar6;" (assignment_expression "uVar16 = (s->lookahead + 1) - uVar6" identifier = (binary_expression "(s->lookahead + 1) - uVar6" (parenthesized_expression "(s->lookahead + 1)" ( (binary_expression "s->lookahead + 1" (field_expression "s->lookahead" identifier -> field_identifier) + number_literal) )) - identifier)) ;) (expression_statement "uVar13 = uVar6 - 2;" (assignment_expression "uVar13 = uVar6 - 2" identifier = (binary_expression "uVar6 - 2" identifier - number_literal)) ;) (expression_statement "uVar8 = s->strstart;" (assignment_expression "uVar8 = s->strstart" identifier = (field_expression "s->strstart" identifier -> field_identifier)) ;) (expression_statement "s->lookahead = uVar16;" (assignment_expression "s->lookahead = uVar16" (field_expression "s->lookahead" identifier -> field_identifier) = identifier) ;) (expression_statement "s->prev_length = uVar13;" (assignment_expression "s->prev_length = uVar13" (field_expression "s->prev_length" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar12 = uVar8;" (assignment_expression "uVar12 = uVar8" identifier = identifier) ;) (do_statement "do {\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        } while (uVar13 != 0);" do (compound_statement "{\n          uVar1 = uVar12 + 1;\n          s->strstart = uVar1;\n          if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }\n          uVar13 = uVar13 - 1;\n          s->prev_length = uVar13;\n          uVar12 = uVar1;\n        }" { (expression_statement "uVar1 = uVar12 + 1;" (assignment_expression "uVar1 = uVar12 + 1" identifier = (binary_expression "uVar12 + 1" identifier + number_literal)) ;) (expression_statement "s->strstart = uVar1;" (assignment_expression "s->strstart = uVar1" (field_expression "s->strstart" identifier -> field_identifier) = identifier) ;) (if_statement "if (uVar1 <= (uVar10 - 3) + uVar9) {\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }" if (parenthesized_expression "(uVar1 <= (uVar10 - 3) + uVar9)" ( (binary_expression "uVar1 <= (uVar10 - 3) + uVar9" identifier <= (binary_expression "(uVar10 - 3) + uVar9" (parenthesized_expression "(uVar10 - 3)" ( (binary_expression "uVar10 - 3" identifier - number_literal) )) + identifier)) )) (compound_statement "{\n            uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;\n            pPVar3 = s->head;\n            s->ins_h = uVar12;\n            s->prev[s->w_mask & uVar1] = pPVar3[uVar12];\n            pPVar3[uVar12] = (Posf)uVar1;\n          }" { (expression_statement "uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask;" (assignment_expression "uVar12 = (s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask" identifier = (binary_expression "(s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]) &\n                     s->hash_mask" (parenthesized_expression "(s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3])" ( (binary_expression "s->ins_h << ((byte)s->hash_shift & 0x1f) ^ (uint)s->window[uVar12 + 3]" (binary_expression "s->ins_h << ((byte)s->hash_shift & 0x1f)" (field_expression "s->ins_h" identifier -> field_identifier) << (parenthesized_expression "((byte)s->hash_shift & 0x1f)" ( (binary_expression "(byte)s->hash_shift & 0x1f" (cast_expression "(byte)s->hash_shift" ( (type_descriptor "byte" type_identifier) ) (field_expression "s->hash_shift" identifier -> field_identifier)) & number_literal) ))) ^ (cast_expression "(uint)s->window[uVar12 + 3]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "s->window[uVar12 + 3]" (field_expression "s->window" identifier -> field_identifier) [ (binary_expression "uVar12 + 3" identifier + number_literal) ]))) )) & (field_expression "s->hash_mask" identifier -> field_identifier))) ;) (expression_statement "pPVar3 = s->head;" (assignment_expression "pPVar3 = s->head" identifier = (field_expression "s->head" identifier -> field_identifier)) ;) (expression_statement "s->ins_h = uVar12;" (assignment_expression "s->ins_h = uVar12" (field_expression "s->ins_h" identifier -> field_identifier) = identifier) ;) (expression_statement "s->prev[s->w_mask & uVar1] = pPVar3[uVar12];" (assignment_expression "s->prev[s->w_mask & uVar1] = pPVar3[uVar12]" (subscript_expression "s->prev[s->w_mask & uVar1]" (field_expression "s->prev" identifier -> field_identifier) [ (binary_expression "s->w_mask & uVar1" (field_expression "s->w_mask" identifier -> field_identifier) & identifier) ]) = (subscript_expression "pPVar3[uVar12]" identifier [ identifier ])) ;) (expression_statement "pPVar3[uVar12] = (Posf)uVar1;" (assignment_expression "pPVar3[uVar12] = (Posf)uVar1" (subscript_expression "pPVar3[uVar12]" identifier [ identifier ]) = (cast_expression "(Posf)uVar1" ( (type_descriptor "Posf" type_identifier) ) identifier)) ;) })) (expression_statement "uVar13 = uVar13 - 1;" (assignment_expression "uVar13 = uVar13 - 1" identifier = (binary_expression "uVar13 - 1" identifier - number_literal)) ;) (expression_statement "s->prev_length = uVar13;" (assignment_expression "s->prev_length = uVar13" (field_expression "s->prev_length" identifier -> field_identifier) = identifier) ;) (expression_statement "uVar12 = uVar1;" (assignment_expression "uVar12 = uVar1" identifier = identifier) ;) }) while (parenthesized_expression "(uVar13 != 0)" ( (binary_expression "uVar13 != 0" identifier != number_literal) )) ;) (expression_statement "s->match_available = 0;" (assignment_expression "s->match_available = 0" (field_expression "s->match_available" identifier -> field_identifier) = number_literal) ;) (expression_statement "uVar9 = (uVar6 - 1) + uVar8;" (assignment_expression "uVar9 = (uVar6 - 1) + uVar8" identifier = (binary_expression "(uVar6 - 1) + uVar8" (parenthesized_expression "(uVar6 - 1)" ( (binary_expression "uVar6 - 1" identifier - number_literal) )) + identifier)) ;) (expression_statement "s->match_length = 2;" (assignment_expression "s->match_length = 2" (field_expression "s->match_length" identifier -> field_identifier) = number_literal) ;) (expression_statement "s->strstart = uVar9;" (assignment_expression "s->strstart = uVar9" (field_expression "s->strstart" identifier -> field_identifier) = identifier) ;) (if_statement "if (uVar4 == uVar5 - 1) {\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }" if (parenthesized_expression "(uVar4 == uVar5 - 1)" ( (binary_expression "uVar4 == uVar5 - 1" identifier == (binary_expression "uVar5 - 1" identifier - number_literal)) )) (compound_statement "{\n          iVar7 = s->block_start;\n          pBVar11 = (Bytef *)0x0;\n          if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }\n          _tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);\n          s->block_start = s->strstart;\n          flush_pending(s->strm);\n          if (s->strm->avail_out == 0) {\n            return need_more;\n          }\n          uVar16 = s->lookahead;\n        }" { (expression_statement "iVar7 = s->block_start;" (assignment_expression "iVar7 = s->block_start" identifier = (field_expression "s->block_start" identifier -> field_identifier)) ;) (expression_statement "pBVar11 = (Bytef *)0x0;" (assignment_expression "pBVar11 = (Bytef *)0x0" identifier = (cast_expression "(Bytef *)0x0" ( (type_descriptor "Bytef *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (-1 < iVar7) {\n            pBVar11 = s->window + iVar7;\n          }" if (parenthesized_expression "(-1 < iVar7)" ( (binary_expression "-1 < iVar7" number_literal < identifier) )) (compound_statement "{\n            pBVar11 = s->window + iVar7;\n          }" { (expression_statement "pBVar11 = s->window + iVar7;" (assignment_expression "pBVar11 = s->window + iVar7" identifier = (binary_expression "s->window + iVar7" (field_expression "s->window" identifier -> field_identifier) + identifier)) ;) })) (expression_statement "_tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0);" (call_expression "_tr_flush_block(s,(charf *)pBVar11,uVar9 - iVar7,0)" identifier (argument_list "(s,(charf *)pBVar11,uVar9 - iVar7,0)" ( identifier , (cast_expression "(charf *)pBVar11" ( (type_descriptor "charf *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "uVar9 - iVar7" identifier - identifier) , number_literal ))) ;) (expression_statement "s->block_start = s->strstart;" (assignment_expression "s->block_start = s->strstart" (field_expression "s->block_start" identifier -> field_identifier) = (field_expression "s->strstart" identifier -> field_identifier)) ;) (expression_statement "flush_pending(s->strm);" (call_expression "flush_pending(s->strm)" identifier (argument_list "(s->strm)" ( (field_expression "s->strm" identifier -> field_identifier) ))) ;) (if_statement "if (s->strm->avail_out == 0) {\n            return need_more;\n          }" if (parenthesized_expression "(s->strm->avail_out == 0)" ( (binary_expression "s->strm->avail_out == 0" (field_expression "s->strm->avail_out" (field_expression "s->strm" identifier -> field_identifier) -> field_identifier) == number_literal) )) (compound_statement "{\n            return need_more;\n          }" { (return_statement "return need_more;" return identifier ;) })) (expression_statement "uVar16 = s->lookahead;" (assignment_expression "uVar16 = s->lookahead" identifier = (field_expression "s->lookahead" identifier -> field_identifier)) ;) })) (goto_statement "goto LAB_00012c70;" goto statement_identifier ;) })) }) (else_clause "else {\n      uVar16 = s->prev_length;\n      uVar10 = s->strstart;\n    }" else (compound_statement "{\n      uVar16 = s->prev_length;\n      uVar10 = s->strstart;\n    }" { (expression_statement "uVar16 = s->prev_length;" (assignment_expression "uVar16 = s->prev_length" identifier = (field_expression "s->prev_length" identifier -> field_identifier)) ;) (expression_statement "uVar10 = s->strstart;" (assignment_expression "uVar10 = s->strstart" identifier = (field_expression "s->strstart" identifier -> field_identifier)) ;) }))) })) (while_statement "while( true ) {\n    if ((2 < uVar16) && (s->match_length <= uVar16)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (s->match_available != 0) {\n      uVar9 = s->last_lit;\n      bVar2 = s->window[uVar10 - 1];\n      s->d_buf[uVar9] = 0;\n      s->last_lit = uVar9 + 1;\n      s->l_buf[uVar9] = bVar2;\n      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n      if (s->last_lit == s->lit_bufsize - 1) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }\n      s->strstart = s->strstart + 1;\n      uVar16 = s->lookahead - 1;\n      s->lookahead = uVar16;\n      if (s->strm->avail_out == 0) {\n        return need_more;\n      }\n      goto LAB_00012c70;\n    }\n    s->match_available = 1;\n    s->strstart = uVar10 + 1;\n    uVar16 = s->lookahead - 1;\n    s->lookahead = uVar16;\n    if (0x105 < uVar16) goto LAB_00012c7c;\nLAB_00012d9a:\n    fill_window(s);\n    uVar8 = s->lookahead;\n    if (0x105 < uVar8) goto LAB_00012c7c;\n    if (flush == 0) {\n      return need_more;\n    }\n    if (uVar8 == 0) {\n      uVar16 = s->strstart;\n      if (s->match_available != 0) {\n        bVar2 = s->window[uVar16 - 1];\n        uVar9 = s->last_lit;\n        s->d_buf[uVar9] = 0;\n        s->last_lit = uVar9 + 1;\n        s->l_buf[uVar9] = bVar2;\n        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n        uVar16 = s->strstart;\n        s->match_available = 0;\n      }\n      uVar10 = 2;\n      if (uVar16 < 3) {\n        uVar10 = uVar16;\n      }\n      s->insert = uVar10;\n      if (flush == 4) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (s->strm->avail_out != 0) + finish_started;\n      }\n      if (s->last_lit != 0) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (uint)(s->strm->avail_out != 0);\n      }\n      return block_done;\n    }\n    uVar10 = s->strstart;\n    uVar16 = s->match_length;\n    uVar9 = s->match_start;\n    if (2 < uVar8) break;\n    s->prev_length = uVar16;\n    s->prev_match = uVar9;\n    s->match_length = 2;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    if ((2 < uVar16) && (s->match_length <= uVar16)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (s->match_available != 0) {\n      uVar9 = s->last_lit;\n      bVar2 = s->window[uVar10 - 1];\n      s->d_buf[uVar9] = 0;\n      s->last_lit = uVar9 + 1;\n      s->l_buf[uVar9] = bVar2;\n      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n      if (s->last_lit == s->lit_bufsize - 1) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }\n      s->strstart = s->strstart + 1;\n      uVar16 = s->lookahead - 1;\n      s->lookahead = uVar16;\n      if (s->strm->avail_out == 0) {\n        return need_more;\n      }\n      goto LAB_00012c70;\n    }\n    s->match_available = 1;\n    s->strstart = uVar10 + 1;\n    uVar16 = s->lookahead - 1;\n    s->lookahead = uVar16;\n    if (0x105 < uVar16) goto LAB_00012c7c;\nLAB_00012d9a:\n    fill_window(s);\n    uVar8 = s->lookahead;\n    if (0x105 < uVar8) goto LAB_00012c7c;\n    if (flush == 0) {\n      return need_more;\n    }\n    if (uVar8 == 0) {\n      uVar16 = s->strstart;\n      if (s->match_available != 0) {\n        bVar2 = s->window[uVar16 - 1];\n        uVar9 = s->last_lit;\n        s->d_buf[uVar9] = 0;\n        s->last_lit = uVar9 + 1;\n        s->l_buf[uVar9] = bVar2;\n        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n        uVar16 = s->strstart;\n        s->match_available = 0;\n      }\n      uVar10 = 2;\n      if (uVar16 < 3) {\n        uVar10 = uVar16;\n      }\n      s->insert = uVar10;\n      if (flush == 4) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (s->strm->avail_out != 0) + finish_started;\n      }\n      if (s->last_lit != 0) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (uint)(s->strm->avail_out != 0);\n      }\n      return block_done;\n    }\n    uVar10 = s->strstart;\n    uVar16 = s->match_length;\n    uVar9 = s->match_start;\n    if (2 < uVar8) break;\n    s->prev_length = uVar16;\n    s->prev_match = uVar9;\n    s->match_length = 2;\n  }" { (if_statement "if ((2 < uVar16) && (s->match_length <= uVar16)) goto LAB_00012e20;" if (parenthesized_expression "((2 < uVar16) && (s->match_length <= uVar16))" ( (binary_expression "(2 < uVar16) && (s->match_length <= uVar16)" (parenthesized_expression "(2 < uVar16)" ( (binary_expression "2 < uVar16" number_literal < identifier) )) && (parenthesized_expression "(s->match_length <= uVar16)" ( (binary_expression "s->match_length <= uVar16" (field_expression "s->match_length" identifier -> field_identifier) <= identifier) ))) )) (goto_statement "goto LAB_00012e20;" goto statement_identifier ;)) (labeled_statement "LAB_00012cfe:\n    if (s->match_available != 0) {\n      uVar9 = s->last_lit;\n      bVar2 = s->window[uVar10 - 1];\n      s->d_buf[uVar9] = 0;\n      s->last_lit = uVar9 + 1;\n      s->l_buf[uVar9] = bVar2;\n      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n      if (s->last_lit == s->lit_bufsize - 1) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }\n      s->strstart = s->strstart + 1;\n      uVar16 = s->lookahead - 1;\n      s->lookahead = uVar16;\n      if (s->strm->avail_out == 0) {\n        return need_more;\n      }\n      goto LAB_00012c70;\n    }" statement_identifier : (if_statement "if (s->match_available != 0) {\n      uVar9 = s->last_lit;\n      bVar2 = s->window[uVar10 - 1];\n      s->d_buf[uVar9] = 0;\n      s->last_lit = uVar9 + 1;\n      s->l_buf[uVar9] = bVar2;\n      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n      if (s->last_lit == s->lit_bufsize - 1) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }\n      s->strstart = s->strstart + 1;\n      uVar16 = s->lookahead - 1;\n      s->lookahead = uVar16;\n      if (s->strm->avail_out == 0) {\n        return need_more;\n      }\n      goto LAB_00012c70;\n    }" if (parenthesized_expression "(s->match_available != 0)" ( (binary_expression "s->match_available != 0" (field_expression "s->match_available" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n      uVar9 = s->last_lit;\n      bVar2 = s->window[uVar10 - 1];\n      s->d_buf[uVar9] = 0;\n      s->last_lit = uVar9 + 1;\n      s->l_buf[uVar9] = bVar2;\n      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n      if (s->last_lit == s->lit_bufsize - 1) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }\n      s->strstart = s->strstart + 1;\n      uVar16 = s->lookahead - 1;\n      s->lookahead = uVar16;\n      if (s->strm->avail_out == 0) {\n        return need_more;\n      }\n      goto LAB_00012c70;\n    }" { (expression_statement "uVar9 = s->last_lit;" (assignment_expression "uVar9 = s->last_lit" identifier = (field_expression "s->last_lit" identifier -> field_identifier)) ;) (expression_statement "bVar2 = s->window[uVar10 - 1];" (assignment_expression "bVar2 = s->window[uVar10 - 1]" identifier = (subscript_expression "s->window[uVar10 - 1]" (field_expression "s->window" identifier -> field_identifier) [ (binary_expression "uVar10 - 1" identifier - number_literal) ])) ;) (expression_statement "s->d_buf[uVar9] = 0;" (assignment_expression "s->d_buf[uVar9] = 0" (subscript_expression "s->d_buf[uVar9]" (field_expression "s->d_buf" identifier -> field_identifier) [ identifier ]) = number_literal) ;) (expression_statement "s->last_lit = uVar9 + 1;" (assignment_expression "s->last_lit = uVar9 + 1" (field_expression "s->last_lit" identifier -> field_identifier) = (binary_expression "uVar9 + 1" identifier + number_literal)) ;) (expression_statement "s->l_buf[uVar9] = bVar2;" (assignment_expression "s->l_buf[uVar9] = bVar2" (subscript_expression "s->l_buf[uVar9]" (field_expression "s->l_buf" identifier -> field_identifier) [ identifier ]) = identifier) ;) (expression_statement "s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;" (assignment_expression "s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1" (field_expression "s->dyn_ltree[bVar2].fc.freq" (field_expression "s->dyn_ltree[bVar2].fc" (subscript_expression "s->dyn_ltree[bVar2]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) = (binary_expression "s->dyn_ltree[bVar2].fc.freq + 1" (field_expression "s->dyn_ltree[bVar2].fc.freq" (field_expression "s->dyn_ltree[bVar2].fc" (subscript_expression "s->dyn_ltree[bVar2]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) + number_literal)) ;) (if_statement "if (s->last_lit == s->lit_bufsize - 1) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }" if (parenthesized_expression "(s->last_lit == s->lit_bufsize - 1)" ( (binary_expression "s->last_lit == s->lit_bufsize - 1" (field_expression "s->last_lit" identifier -> field_identifier) == (binary_expression "s->lit_bufsize - 1" (field_expression "s->lit_bufsize" identifier -> field_identifier) - number_literal)) )) (compound_statement "{\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n      }" { (expression_statement "iVar7 = s->block_start;" (assignment_expression "iVar7 = s->block_start" identifier = (field_expression "s->block_start" identifier -> field_identifier)) ;) (expression_statement "pBVar11 = (Bytef *)0x0;" (assignment_expression "pBVar11 = (Bytef *)0x0" identifier = (cast_expression "(Bytef *)0x0" ( (type_descriptor "Bytef *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }" if (parenthesized_expression "(-1 < iVar7)" ( (binary_expression "-1 < iVar7" number_literal < identifier) )) (compound_statement "{\n          pBVar11 = s->window + iVar7;\n        }" { (expression_statement "pBVar11 = s->window + iVar7;" (assignment_expression "pBVar11 = s->window + iVar7" identifier = (binary_expression "s->window + iVar7" (field_expression "s->window" identifier -> field_identifier) + identifier)) ;) })) (expression_statement "_tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0);" (call_expression "_tr_flush_block(s,(charf *)pBVar11,s->strstart - iVar7,0)" identifier (argument_list "(s,(charf *)pBVar11,s->strstart - iVar7,0)" ( identifier , (cast_expression "(charf *)pBVar11" ( (type_descriptor "charf *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "s->strstart - iVar7" (field_expression "s->strstart" identifier -> field_identifier) - identifier) , number_literal ))) ;) (expression_statement "s->block_start = s->strstart;" (assignment_expression "s->block_start = s->strstart" (field_expression "s->block_start" identifier -> field_identifier) = (field_expression "s->strstart" identifier -> field_identifier)) ;) (expression_statement "flush_pending(s->strm);" (call_expression "flush_pending(s->strm)" identifier (argument_list "(s->strm)" ( (field_expression "s->strm" identifier -> field_identifier) ))) ;) })) (expression_statement "s->strstart = s->strstart + 1;" (assignment_expression "s->strstart = s->strstart + 1" (field_expression "s->strstart" identifier -> field_identifier) = (binary_expression "s->strstart + 1" (field_expression "s->strstart" identifier -> field_identifier) + number_literal)) ;) (expression_statement "uVar16 = s->lookahead - 1;" (assignment_expression "uVar16 = s->lookahead - 1" identifier = (binary_expression "s->lookahead - 1" (field_expression "s->lookahead" identifier -> field_identifier) - number_literal)) ;) (expression_statement "s->lookahead = uVar16;" (assignment_expression "s->lookahead = uVar16" (field_expression "s->lookahead" identifier -> field_identifier) = identifier) ;) (if_statement "if (s->strm->avail_out == 0) {\n        return need_more;\n      }" if (parenthesized_expression "(s->strm->avail_out == 0)" ( (binary_expression "s->strm->avail_out == 0" (field_expression "s->strm->avail_out" (field_expression "s->strm" identifier -> field_identifier) -> field_identifier) == number_literal) )) (compound_statement "{\n        return need_more;\n      }" { (return_statement "return need_more;" return identifier ;) })) (goto_statement "goto LAB_00012c70;" goto statement_identifier ;) }))) (expression_statement "s->match_available = 1;" (assignment_expression "s->match_available = 1" (field_expression "s->match_available" identifier -> field_identifier) = number_literal) ;) (expression_statement "s->strstart = uVar10 + 1;" (assignment_expression "s->strstart = uVar10 + 1" (field_expression "s->strstart" identifier -> field_identifier) = (binary_expression "uVar10 + 1" identifier + number_literal)) ;) (expression_statement "uVar16 = s->lookahead - 1;" (assignment_expression "uVar16 = s->lookahead - 1" identifier = (binary_expression "s->lookahead - 1" (field_expression "s->lookahead" identifier -> field_identifier) - number_literal)) ;) (expression_statement "s->lookahead = uVar16;" (assignment_expression "s->lookahead = uVar16" (field_expression "s->lookahead" identifier -> field_identifier) = identifier) ;) (if_statement "if (0x105 < uVar16) goto LAB_00012c7c;" if (parenthesized_expression "(0x105 < uVar16)" ( (binary_expression "0x105 < uVar16" number_literal < identifier) )) (goto_statement "goto LAB_00012c7c;" goto statement_identifier ;)) (labeled_statement "LAB_00012d9a:\n    fill_window(s);" statement_identifier : (expression_statement "fill_window(s);" (call_expression "fill_window(s)" identifier (argument_list "(s)" ( identifier ))) ;)) (expression_statement "uVar8 = s->lookahead;" (assignment_expression "uVar8 = s->lookahead" identifier = (field_expression "s->lookahead" identifier -> field_identifier)) ;) (if_statement "if (0x105 < uVar8) goto LAB_00012c7c;" if (parenthesized_expression "(0x105 < uVar8)" ( (binary_expression "0x105 < uVar8" number_literal < identifier) )) (goto_statement "goto LAB_00012c7c;" goto statement_identifier ;)) (if_statement "if (flush == 0) {\n      return need_more;\n    }" if (parenthesized_expression "(flush == 0)" ( (binary_expression "flush == 0" identifier == number_literal) )) (compound_statement "{\n      return need_more;\n    }" { (return_statement "return need_more;" return identifier ;) })) (if_statement "if (uVar8 == 0) {\n      uVar16 = s->strstart;\n      if (s->match_available != 0) {\n        bVar2 = s->window[uVar16 - 1];\n        uVar9 = s->last_lit;\n        s->d_buf[uVar9] = 0;\n        s->last_lit = uVar9 + 1;\n        s->l_buf[uVar9] = bVar2;\n        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n        uVar16 = s->strstart;\n        s->match_available = 0;\n      }\n      uVar10 = 2;\n      if (uVar16 < 3) {\n        uVar10 = uVar16;\n      }\n      s->insert = uVar10;\n      if (flush == 4) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (s->strm->avail_out != 0) + finish_started;\n      }\n      if (s->last_lit != 0) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (uint)(s->strm->avail_out != 0);\n      }\n      return block_done;\n    }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar16 = s->strstart;\n      if (s->match_available != 0) {\n        bVar2 = s->window[uVar16 - 1];\n        uVar9 = s->last_lit;\n        s->d_buf[uVar9] = 0;\n        s->last_lit = uVar9 + 1;\n        s->l_buf[uVar9] = bVar2;\n        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n        uVar16 = s->strstart;\n        s->match_available = 0;\n      }\n      uVar10 = 2;\n      if (uVar16 < 3) {\n        uVar10 = uVar16;\n      }\n      s->insert = uVar10;\n      if (flush == 4) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (s->strm->avail_out != 0) + finish_started;\n      }\n      if (s->last_lit != 0) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (uint)(s->strm->avail_out != 0);\n      }\n      return block_done;\n    }" { (expression_statement "uVar16 = s->strstart;" (assignment_expression "uVar16 = s->strstart" identifier = (field_expression "s->strstart" identifier -> field_identifier)) ;) (if_statement "if (s->match_available != 0) {\n        bVar2 = s->window[uVar16 - 1];\n        uVar9 = s->last_lit;\n        s->d_buf[uVar9] = 0;\n        s->last_lit = uVar9 + 1;\n        s->l_buf[uVar9] = bVar2;\n        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n        uVar16 = s->strstart;\n        s->match_available = 0;\n      }" if (parenthesized_expression "(s->match_available != 0)" ( (binary_expression "s->match_available != 0" (field_expression "s->match_available" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n        bVar2 = s->window[uVar16 - 1];\n        uVar9 = s->last_lit;\n        s->d_buf[uVar9] = 0;\n        s->last_lit = uVar9 + 1;\n        s->l_buf[uVar9] = bVar2;\n        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;\n        uVar16 = s->strstart;\n        s->match_available = 0;\n      }" { (expression_statement "bVar2 = s->window[uVar16 - 1];" (assignment_expression "bVar2 = s->window[uVar16 - 1]" identifier = (subscript_expression "s->window[uVar16 - 1]" (field_expression "s->window" identifier -> field_identifier) [ (binary_expression "uVar16 - 1" identifier - number_literal) ])) ;) (expression_statement "uVar9 = s->last_lit;" (assignment_expression "uVar9 = s->last_lit" identifier = (field_expression "s->last_lit" identifier -> field_identifier)) ;) (expression_statement "s->d_buf[uVar9] = 0;" (assignment_expression "s->d_buf[uVar9] = 0" (subscript_expression "s->d_buf[uVar9]" (field_expression "s->d_buf" identifier -> field_identifier) [ identifier ]) = number_literal) ;) (expression_statement "s->last_lit = uVar9 + 1;" (assignment_expression "s->last_lit = uVar9 + 1" (field_expression "s->last_lit" identifier -> field_identifier) = (binary_expression "uVar9 + 1" identifier + number_literal)) ;) (expression_statement "s->l_buf[uVar9] = bVar2;" (assignment_expression "s->l_buf[uVar9] = bVar2" (subscript_expression "s->l_buf[uVar9]" (field_expression "s->l_buf" identifier -> field_identifier) [ identifier ]) = identifier) ;) (expression_statement "s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;" (assignment_expression "s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1" (field_expression "s->dyn_ltree[bVar2].fc.freq" (field_expression "s->dyn_ltree[bVar2].fc" (subscript_expression "s->dyn_ltree[bVar2]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) = (binary_expression "s->dyn_ltree[bVar2].fc.freq + 1" (field_expression "s->dyn_ltree[bVar2].fc.freq" (field_expression "s->dyn_ltree[bVar2].fc" (subscript_expression "s->dyn_ltree[bVar2]" (field_expression "s->dyn_ltree" identifier -> field_identifier) [ identifier ]) . field_identifier) . field_identifier) + number_literal)) ;) (expression_statement "uVar16 = s->strstart;" (assignment_expression "uVar16 = s->strstart" identifier = (field_expression "s->strstart" identifier -> field_identifier)) ;) (expression_statement "s->match_available = 0;" (assignment_expression "s->match_available = 0" (field_expression "s->match_available" identifier -> field_identifier) = number_literal) ;) })) (expression_statement "uVar10 = 2;" (assignment_expression "uVar10 = 2" identifier = number_literal) ;) (if_statement "if (uVar16 < 3) {\n        uVar10 = uVar16;\n      }" if (parenthesized_expression "(uVar16 < 3)" ( (binary_expression "uVar16 < 3" identifier < number_literal) )) (compound_statement "{\n        uVar10 = uVar16;\n      }" { (expression_statement "uVar10 = uVar16;" (assignment_expression "uVar10 = uVar16" identifier = identifier) ;) })) (expression_statement "s->insert = uVar10;" (assignment_expression "s->insert = uVar10" (field_expression "s->insert" identifier -> field_identifier) = identifier) ;) (if_statement "if (flush == 4) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (s->strm->avail_out != 0) + finish_started;\n      }" if (parenthesized_expression "(flush == 4)" ( (binary_expression "flush == 4" identifier == number_literal) )) (compound_statement "{\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (s->strm->avail_out != 0) + finish_started;\n      }" { (expression_statement "iVar7 = s->block_start;" (assignment_expression "iVar7 = s->block_start" identifier = (field_expression "s->block_start" identifier -> field_identifier)) ;) (expression_statement "pBVar11 = (Bytef *)0x0;" (assignment_expression "pBVar11 = (Bytef *)0x0" identifier = (cast_expression "(Bytef *)0x0" ( (type_descriptor "Bytef *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }" if (parenthesized_expression "(-1 < iVar7)" ( (binary_expression "-1 < iVar7" number_literal < identifier) )) (compound_statement "{\n          pBVar11 = s->window + iVar7;\n        }" { (expression_statement "pBVar11 = s->window + iVar7;" (assignment_expression "pBVar11 = s->window + iVar7" identifier = (binary_expression "s->window + iVar7" (field_expression "s->window" identifier -> field_identifier) + identifier)) ;) })) (expression_statement "_tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1);" (call_expression "_tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,1)" identifier (argument_list "(s,(charf *)pBVar11,uVar16 - iVar7,1)" ( identifier , (cast_expression "(charf *)pBVar11" ( (type_descriptor "charf *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "uVar16 - iVar7" identifier - identifier) , number_literal ))) ;) (expression_statement "s->block_start = s->strstart;" (assignment_expression "s->block_start = s->strstart" (field_expression "s->block_start" identifier -> field_identifier) = (field_expression "s->strstart" identifier -> field_identifier)) ;) (expression_statement "flush_pending(s->strm);" (call_expression "flush_pending(s->strm)" identifier (argument_list "(s->strm)" ( (field_expression "s->strm" identifier -> field_identifier) ))) ;) (return_statement "return (s->strm->avail_out != 0) + finish_started;" return (binary_expression "(s->strm->avail_out != 0) + finish_started" (parenthesized_expression "(s->strm->avail_out != 0)" ( (binary_expression "s->strm->avail_out != 0" (field_expression "s->strm->avail_out" (field_expression "s->strm" identifier -> field_identifier) -> field_identifier) != number_literal) )) + identifier) ;) })) (if_statement "if (s->last_lit != 0) {\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (uint)(s->strm->avail_out != 0);\n      }" if (parenthesized_expression "(s->last_lit != 0)" ( (binary_expression "s->last_lit != 0" (field_expression "s->last_lit" identifier -> field_identifier) != number_literal) )) (compound_statement "{\n        iVar7 = s->block_start;\n        pBVar11 = (Bytef *)0x0;\n        if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }\n        _tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);\n        s->block_start = s->strstart;\n        flush_pending(s->strm);\n        return (uint)(s->strm->avail_out != 0);\n      }" { (expression_statement "iVar7 = s->block_start;" (assignment_expression "iVar7 = s->block_start" identifier = (field_expression "s->block_start" identifier -> field_identifier)) ;) (expression_statement "pBVar11 = (Bytef *)0x0;" (assignment_expression "pBVar11 = (Bytef *)0x0" identifier = (cast_expression "(Bytef *)0x0" ( (type_descriptor "Bytef *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (if_statement "if (-1 < iVar7) {\n          pBVar11 = s->window + iVar7;\n        }" if (parenthesized_expression "(-1 < iVar7)" ( (binary_expression "-1 < iVar7" number_literal < identifier) )) (compound_statement "{\n          pBVar11 = s->window + iVar7;\n        }" { (expression_statement "pBVar11 = s->window + iVar7;" (assignment_expression "pBVar11 = s->window + iVar7" identifier = (binary_expression "s->window + iVar7" (field_expression "s->window" identifier -> field_identifier) + identifier)) ;) })) (expression_statement "_tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0);" (call_expression "_tr_flush_block(s,(charf *)pBVar11,uVar16 - iVar7,0)" identifier (argument_list "(s,(charf *)pBVar11,uVar16 - iVar7,0)" ( identifier , (cast_expression "(charf *)pBVar11" ( (type_descriptor "charf *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) , (binary_expression "uVar16 - iVar7" identifier - identifier) , number_literal ))) ;) (expression_statement "s->block_start = s->strstart;" (assignment_expression "s->block_start = s->strstart" (field_expression "s->block_start" identifier -> field_identifier) = (field_expression "s->strstart" identifier -> field_identifier)) ;) (expression_statement "flush_pending(s->strm);" (call_expression "flush_pending(s->strm)" identifier (argument_list "(s->strm)" ( (field_expression "s->strm" identifier -> field_identifier) ))) ;) (return_statement "return (uint)(s->strm->avail_out != 0);" return (call_expression "(uint)(s->strm->avail_out != 0)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(s->strm->avail_out != 0)" ( (binary_expression "s->strm->avail_out != 0" (field_expression "s->strm->avail_out" (field_expression "s->strm" identifier -> field_identifier) -> field_identifier) != number_literal) ))) ;) })) (return_statement "return block_done;" return identifier ;) })) (expression_statement "uVar10 = s->strstart;" (assignment_expression "uVar10 = s->strstart" identifier = (field_expression "s->strstart" identifier -> field_identifier)) ;) (expression_statement "uVar16 = s->match_length;" (assignment_expression "uVar16 = s->match_length" identifier = (field_expression "s->match_length" identifier -> field_identifier)) ;) (expression_statement "uVar9 = s->match_start;" (assignment_expression "uVar9 = s->match_start" identifier = (field_expression "s->match_start" identifier -> field_identifier)) ;) (if_statement "if (2 < uVar8) break;" if (parenthesized_expression "(2 < uVar8)" ( (binary_expression "2 < uVar8" number_literal < identifier) )) (break_statement "break;" break ;)) (expression_statement "s->prev_length = uVar16;" (assignment_expression "s->prev_length = uVar16" (field_expression "s->prev_length" identifier -> field_identifier) = identifier) ;) (expression_statement "s->prev_match = uVar9;" (assignment_expression "s->prev_match = uVar9" (field_expression "s->prev_match" identifier -> field_identifier) = identifier) ;) (expression_statement "s->match_length = 2;" (assignment_expression "s->match_length = 2" (field_expression "s->match_length" identifier -> field_identifier) = number_literal) ;) })) (goto_statement "goto LAB_00012c85;" goto statement_identifier ;) })))
(translation_unit "bool FUN_00012c40(int *param_1,int param_2)\n\n{\n  uint uVar1;\n  ushort *puVar2;\n  undefined2 *puVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int iVar11;\n  short sVar12;\n  ushort uVar13;\n  uint uVar14;\n  int iVar15;\n  \n  uVar14 = param_1[0x1d];\nLAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar8 = param_1[0x1b];\n  uVar14 = param_1[0x18];\n  iVar15 = param_1[0x1c];\nLAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];\n  param_1[0x12] = uVar7;\n  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);\n  uVar13 = *puVar2;\n  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;\n  *puVar2 = (ushort)uVar8;\n  param_1[0x1e] = uVar14;\n  param_1[0x19] = iVar15;\n  param_1[0x18] = 2;\n  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }\n  while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }\n  goto LAB_00012c85;\n}\n\n" (function_definition "bool FUN_00012c40(int *param_1,int param_2)\n\n{\n  uint uVar1;\n  ushort *puVar2;\n  undefined2 *puVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int iVar11;\n  short sVar12;\n  ushort uVar13;\n  uint uVar14;\n  int iVar15;\n  \n  uVar14 = param_1[0x1d];\nLAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar8 = param_1[0x1b];\n  uVar14 = param_1[0x18];\n  iVar15 = param_1[0x1c];\nLAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];\n  param_1[0x12] = uVar7;\n  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);\n  uVar13 = *puVar2;\n  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;\n  *puVar2 = (ushort)uVar8;\n  param_1[0x1e] = uVar14;\n  param_1[0x19] = iVar15;\n  param_1[0x18] = 2;\n  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }\n  while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }\n  goto LAB_00012c85;\n}" primitive_type (function_declarator "FUN_00012c40(int *param_1,int param_2)" identifier (parameter_list "(int *param_1,int param_2)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) ))) (compound_statement "{\n  uint uVar1;\n  ushort *puVar2;\n  undefined2 *puVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int iVar11;\n  short sVar12;\n  ushort uVar13;\n  uint uVar14;\n  int iVar15;\n  \n  uVar14 = param_1[0x1d];\nLAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar8 = param_1[0x1b];\n  uVar14 = param_1[0x18];\n  iVar15 = param_1[0x1c];\nLAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];\n  param_1[0x12] = uVar7;\n  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);\n  uVar13 = *puVar2;\n  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;\n  *puVar2 = (ushort)uVar8;\n  param_1[0x1e] = uVar14;\n  param_1[0x19] = iVar15;\n  param_1[0x18] = 2;\n  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }\n  while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }\n  goto LAB_00012c85;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "ushort *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "undefined2 *puVar3;" type_identifier (pointer_declarator "*puVar3" * identifier) ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "int iVar10;" primitive_type identifier ;) (declaration "int iVar11;" primitive_type identifier ;) (declaration "short sVar12;" (sized_type_specifier "short" short) identifier ;) (declaration "ushort uVar13;" type_identifier identifier ;) (declaration "uint uVar14;" type_identifier identifier ;) (declaration "int iVar15;" primitive_type identifier ;) (expression_statement "uVar14 = param_1[0x1d];" (assignment_expression "uVar14 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) (labeled_statement "LAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;" statement_identifier : (if_statement "if (uVar14 < 0x106) goto LAB_00012d9a;" if (parenthesized_expression "(uVar14 < 0x106)" ( (binary_expression "uVar14 < 0x106" identifier < number_literal) )) (goto_statement "goto LAB_00012d9a;" goto statement_identifier ;))) (labeled_statement "LAB_00012c7c:\n  uVar8 = param_1[0x1b];" statement_identifier : (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;)) (expression_statement "uVar14 = param_1[0x18];" (assignment_expression "uVar14 = param_1[0x18]" identifier = (subscript_expression "param_1[0x18]" identifier [ number_literal ])) ;) (expression_statement "iVar15 = param_1[0x1c];" (assignment_expression "iVar15 = param_1[0x1c]" identifier = (subscript_expression "param_1[0x1c]" identifier [ number_literal ])) ;) (labeled_statement "LAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];" statement_identifier : (expression_statement "uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];" (assignment_expression "uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15]" identifier = (binary_expression "((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15]" (parenthesized_expression "((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          )" ( (binary_expression "(uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)" (binary_expression "(uint)*(byte *)(param_1[0xe] + 2 + uVar8)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_1[0xe] + 2 + uVar8)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + 2 + uVar8)" ( (binary_expression "param_1[0xe] + 2 + uVar8" (binary_expression "param_1[0xe] + 2" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + number_literal) + identifier) )))) ^ (binary_expression "param_1[0x12] << ((byte)param_1[0x16] & 0x1f)" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) << (parenthesized_expression "((byte)param_1[0x16] & 0x1f)" ( (binary_expression "(byte)param_1[0x16] & 0x1f" (cast_expression "(byte)param_1[0x16]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[0x16]" identifier [ number_literal ])) & number_literal) )))) )) & (subscript_expression "param_1[0x15]" identifier [ number_literal ]))) ;)) (expression_statement "param_1[0x12] = uVar7;" (assignment_expression "param_1[0x12] = uVar7" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);" (assignment_expression "puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2)" identifier = (cast_expression "(ushort *)(param_1[0x11] + uVar7 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x11] + uVar7 * 2)" ( (binary_expression "param_1[0x11] + uVar7 * 2" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) + (binary_expression "uVar7 * 2" identifier * number_literal)) )))) ;) (expression_statement "uVar13 = *puVar2;" (assignment_expression "uVar13 = *puVar2" identifier = (pointer_expression "*puVar2" * identifier)) ;) (expression_statement "*(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;" (assignment_expression "*(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13" (pointer_expression "*(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2)" * (cast_expression "(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x10] + (param_1[0xd] & uVar8) * 2)" ( (binary_expression "param_1[0x10] + (param_1[0xd] & uVar8) * 2" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) + (binary_expression "(param_1[0xd] & uVar8) * 2" (parenthesized_expression "(param_1[0xd] & uVar8)" ( (binary_expression "param_1[0xd] & uVar8" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) & identifier) )) * number_literal)) )))) = identifier) ;) (expression_statement "*puVar2 = (ushort)uVar8;" (assignment_expression "*puVar2 = (ushort)uVar8" (pointer_expression "*puVar2" * identifier) = (cast_expression "(ushort)uVar8" ( (type_descriptor "ushort" type_identifier) ) identifier)) ;) (expression_statement "param_1[0x1e] = uVar14;" (assignment_expression "param_1[0x1e] = uVar14" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x19] = iVar15;" (assignment_expression "param_1[0x19] = iVar15" (subscript_expression "param_1[0x19]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }" if (parenthesized_expression "(((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     )" ( (binary_expression "((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)" (parenthesized_expression "((uVar13 != 0) && (uVar14 < (uint)param_1[0x20]))" ( (binary_expression "(uVar13 != 0) && (uVar14 < (uint)param_1[0x20])" (parenthesized_expression "(uVar13 != 0)" ( (binary_expression "uVar13 != 0" identifier != number_literal) )) && (parenthesized_expression "(uVar14 < (uint)param_1[0x20])" ( (binary_expression "uVar14 < (uint)param_1[0x20]" identifier < (cast_expression "(uint)param_1[0x20]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x20]" identifier [ number_literal ]))) ))) )) && (parenthesized_expression "(uVar8 - uVar13 <= param_1[0xb] - 0x106U)" ( (binary_expression "uVar8 - uVar13 <= param_1[0xb] - 0x106U" (binary_expression "uVar8 - uVar13" identifier - identifier) <= (binary_expression "param_1[0xb] - 0x106U" (subscript_expression "param_1[0xb]" identifier [ number_literal ]) - number_literal)) ))) )) (compound_statement "{\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }" { (expression_statement "uVar7 = FUN_00012660();" (assignment_expression "uVar7 = FUN_00012660()" identifier = (call_expression "FUN_00012660()" identifier (argument_list "()" ( )))) ;) (expression_statement "param_1[0x18] = uVar7;" (assignment_expression "param_1[0x18] = uVar7" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }" if (parenthesized_expression "(uVar7 < 6)" ( (binary_expression "uVar7 < 6" identifier < number_literal) )) (compound_statement "{\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }" { (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "uVar14 = param_1[0x1e];" (assignment_expression "uVar14 = param_1[0x1e]" identifier = (subscript_expression "param_1[0x1e]" identifier [ number_literal ])) ;) (if_statement "if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }" if (parenthesized_expression "((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c]))))" ( (binary_expression "(param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))" (parenthesized_expression "(param_1[0x22] == 1)" ( (binary_expression "param_1[0x22] == 1" (subscript_expression "param_1[0x22]" identifier [ number_literal ]) == number_literal) )) || (parenthesized_expression "((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))" ( (parenthesized_expression "(uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c]))" ( (binary_expression "uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])" (binary_expression "uVar7 == 3" identifier == number_literal) && (parenthesized_expression "(0x1000 < uVar8 - param_1[0x1c])" ( (binary_expression "0x1000 < uVar8 - param_1[0x1c]" number_literal < (binary_expression "uVar8 - param_1[0x1c]" identifier - (subscript_expression "param_1[0x1c]" identifier [ number_literal ]))) ))) )) ))) )) (compound_statement "{\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }" { (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = number_literal) ;) (if_statement "if (uVar14 < 3) goto LAB_00012cfe;" if (parenthesized_expression "(uVar14 < 3)" ( (binary_expression "uVar14 < 3" identifier < number_literal) )) (goto_statement "goto LAB_00012cfe;" goto statement_identifier ;)) (labeled_statement "LAB_00012e20:\n        iVar15 = param_1[0x1d];" statement_identifier : (expression_statement "iVar15 = param_1[0x1d];" (assignment_expression "iVar15 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;)) (expression_statement "iVar11 = param_1[0x5a8];" (assignment_expression "iVar11 = param_1[0x5a8]" identifier = (subscript_expression "param_1[0x5a8]" identifier [ number_literal ])) ;) (expression_statement "sVar12 = (short)uVar8 - (short)param_1[0x19];" (assignment_expression "sVar12 = (short)uVar8 - (short)param_1[0x19]" identifier = (binary_expression "(short)uVar8 - (short)param_1[0x19]" (cast_expression "(short)uVar8" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier) - (cast_expression "(short)param_1[0x19]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[0x19]" identifier [ number_literal ])))) ;) (expression_statement "uVar13 = sVar12 - 2;" (assignment_expression "uVar13 = sVar12 - 2" identifier = (binary_expression "sVar12 - 2" identifier - number_literal)) ;) (expression_statement "*(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;" (assignment_expression "*(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1" (pointer_expression "*(short *)(param_1[0x5a9] + iVar11 * 2)" * (cast_expression "(short *)(param_1[0x5a9] + iVar11 * 2)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a9] + iVar11 * 2)" ( (binary_expression "param_1[0x5a9] + iVar11 * 2" (subscript_expression "param_1[0x5a9]" identifier [ number_literal ]) + (binary_expression "iVar11 * 2" identifier * number_literal)) )))) = (binary_expression "sVar12 + -1" identifier + number_literal)) ;) (expression_statement "param_1[0x5a8] = iVar11 + 1;" (assignment_expression "param_1[0x5a8] = iVar11 + 1" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) = (binary_expression "iVar11 + 1" identifier + number_literal)) ;) (expression_statement "*(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);" (assignment_expression "*(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3)" (pointer_expression "*(char *)(param_1[0x5a6] + iVar11)" * (cast_expression "(char *)(param_1[0x5a6] + iVar11)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a6] + iVar11)" ( (binary_expression "param_1[0x5a6] + iVar11" (subscript_expression "param_1[0x5a6]" identifier [ number_literal ]) + identifier) )))) = (cast_expression "(char)(uVar14 - 3)" ( (type_descriptor "char" primitive_type) ) (parenthesized_expression "(uVar14 - 3)" ( (binary_expression "uVar14 - 3" identifier - number_literal) )))) ;) (expression_statement "*(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;" (assignment_expression "*(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1" (pointer_expression "*(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126)" * (cast_expression "(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126)" ( (binary_expression "param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126" (binary_expression "param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff]" identifier + (subscript_expression "(byte)(&DAT_00022440)[uVar14 - 3 & 0xff]" (call_expression "(byte)(&DAT_00022440)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&DAT_00022440)" ( (pointer_expression "&DAT_00022440" & identifier) ))) [ (binary_expression "uVar14 - 3 & 0xff" (binary_expression "uVar14 - 3" identifier - number_literal) & number_literal) ])) + number_literal) )))) = (binary_expression "(short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1" (cast_expression "(short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126]" identifier [ (binary_expression "(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126" (subscript_expression "(byte)(&DAT_00022440)[uVar14 - 3 & 0xff]" (call_expression "(byte)(&DAT_00022440)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(&DAT_00022440)" ( (pointer_expression "&DAT_00022440" & identifier) ))) [ (binary_expression "uVar14 - 3 & 0xff" (binary_expression "uVar14 - 3" identifier - number_literal) & number_literal) ]) + number_literal) ])) + number_literal)) ;) (if_statement "if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }" if (parenthesized_expression "(uVar13 < 0x100)" ( (binary_expression "uVar13 < 0x100" identifier < number_literal) )) (compound_statement "{\n          bVar4 = (&DAT_00022540)[uVar13];\n        }" { (expression_statement "bVar4 = (&DAT_00022540)[uVar13];" (assignment_expression "bVar4 = (&DAT_00022540)[uVar13]" identifier = (subscript_expression "(&DAT_00022540)[uVar13]" (parenthesized_expression "(&DAT_00022540)" ( (pointer_expression "&DAT_00022540" & identifier) )) [ identifier ])) ;) }) (else_clause "else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }" else (compound_statement "{\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }" { (expression_statement "bVar4 = (&DAT_00022640)[uVar13 >> 7];" (assignment_expression "bVar4 = (&DAT_00022640)[uVar13 >> 7]" identifier = (subscript_expression "(&DAT_00022640)[uVar13 >> 7]" (parenthesized_expression "(&DAT_00022640)" ( (pointer_expression "&DAT_00022640" & identifier) )) [ (binary_expression "uVar13 >> 7" identifier >> number_literal) ])) ;) }))) (expression_statement "*(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;" (assignment_expression "*(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1" (pointer_expression "*(short *)(param_1 + bVar4 + 0x262)" * (cast_expression "(short *)(param_1 + bVar4 + 0x262)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + bVar4 + 0x262)" ( (binary_expression "param_1 + bVar4 + 0x262" (binary_expression "param_1 + bVar4" identifier + identifier) + number_literal) )))) = (binary_expression "(short)param_1[bVar4 + 0x262] + 1" (cast_expression "(short)param_1[bVar4 + 0x262]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[bVar4 + 0x262]" identifier [ (binary_expression "bVar4 + 0x262" identifier + number_literal) ])) + number_literal)) ;) (expression_statement "iVar10 = param_1[0x5a8];" (assignment_expression "iVar10 = param_1[0x5a8]" identifier = (subscript_expression "param_1[0x5a8]" identifier [ number_literal ])) ;) (expression_statement "iVar5 = param_1[0x5a7];" (assignment_expression "iVar5 = param_1[0x5a7]" identifier = (subscript_expression "param_1[0x5a7]" identifier [ number_literal ])) ;) (expression_statement "iVar6 = param_1[0x1e];" (assignment_expression "iVar6 = param_1[0x1e]" identifier = (subscript_expression "param_1[0x1e]" identifier [ number_literal ])) ;) (expression_statement "uVar14 = (param_1[0x1d] + 1) - iVar6;" (assignment_expression "uVar14 = (param_1[0x1d] + 1) - iVar6" identifier = (binary_expression "(param_1[0x1d] + 1) - iVar6" (parenthesized_expression "(param_1[0x1d] + 1)" ( (binary_expression "param_1[0x1d] + 1" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) + number_literal) )) - identifier)) ;) (expression_statement "iVar11 = iVar6 + -2;" (assignment_expression "iVar11 = iVar6 + -2" identifier = (binary_expression "iVar6 + -2" identifier + number_literal)) ;) (expression_statement "uVar7 = param_1[0x1b];" (assignment_expression "uVar7 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x1d] = uVar14;" (assignment_expression "param_1[0x1d] = uVar14" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x1e] = iVar11;" (assignment_expression "param_1[0x1e] = iVar11" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar9 = uVar7;" (assignment_expression "uVar9 = uVar7" identifier = identifier) ;) (do_statement "do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);" do (compound_statement "{\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        }" { (expression_statement "uVar1 = uVar9 + 1;" (assignment_expression "uVar1 = uVar9 + 1" identifier = (binary_expression "uVar9 + 1" identifier + number_literal)) ;) (expression_statement "param_1[0x1b] = uVar1;" (assignment_expression "param_1[0x1b] = uVar1" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }" if (parenthesized_expression "(uVar1 <= (uVar8 - 3) + iVar15)" ( (binary_expression "uVar1 <= (uVar8 - 3) + iVar15" identifier <= (binary_expression "(uVar8 - 3) + iVar15" (parenthesized_expression "(uVar8 - 3)" ( (binary_expression "uVar8 - 3" identifier - number_literal) )) + identifier)) )) (compound_statement "{\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }" { (expression_statement "uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];" (assignment_expression "uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15]" identifier = (binary_expression "(param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15]" (parenthesized_expression "(param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9))" ( (binary_expression "param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)" (binary_expression "param_1[0x12] << ((byte)param_1[0x16] & 0x1f)" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) << (parenthesized_expression "((byte)param_1[0x16] & 0x1f)" ( (binary_expression "(byte)param_1[0x16] & 0x1f" (cast_expression "(byte)param_1[0x16]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "param_1[0x16]" identifier [ number_literal ])) & number_literal) ))) ^ (binary_expression "(uint)*(byte *)(param_1[0xe] + 3 + uVar9)" (parenthesized_expression "(uint)" ( identifier )) * (cast_expression "(byte *)(param_1[0xe] + 3 + uVar9)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + 3 + uVar9)" ( (binary_expression "param_1[0xe] + 3 + uVar9" (binary_expression "param_1[0xe] + 3" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + number_literal) + identifier) ))))) )) & (subscript_expression "param_1[0x15]" identifier [ number_literal ]))) ;) (expression_statement "param_1[0x12] = uVar9;" (assignment_expression "param_1[0x12] = uVar9" (subscript_expression "param_1[0x12]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);" (assignment_expression "puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2)" identifier = (cast_expression "(undefined2 *)(param_1[0x11] + uVar9 * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x11] + uVar9 * 2)" ( (binary_expression "param_1[0x11] + uVar9 * 2" (subscript_expression "param_1[0x11]" identifier [ number_literal ]) + (binary_expression "uVar9 * 2" identifier * number_literal)) )))) ;) (expression_statement "*(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;" (assignment_expression "*(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3" (pointer_expression "*(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2)" * (cast_expression "(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x10] + (param_1[0xd] & uVar1) * 2)" ( (binary_expression "param_1[0x10] + (param_1[0xd] & uVar1) * 2" (subscript_expression "param_1[0x10]" identifier [ number_literal ]) + (binary_expression "(param_1[0xd] & uVar1) * 2" (parenthesized_expression "(param_1[0xd] & uVar1)" ( (binary_expression "param_1[0xd] & uVar1" (subscript_expression "param_1[0xd]" identifier [ number_literal ]) & identifier) )) * number_literal)) )))) = (pointer_expression "*puVar3" * identifier)) ;) (expression_statement "*puVar3 = (short)uVar1;" (assignment_expression "*puVar3 = (short)uVar1" (pointer_expression "*puVar3" * identifier) = (cast_expression "(short)uVar1" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) identifier)) ;) })) (expression_statement "iVar11 = iVar11 + -1;" (assignment_expression "iVar11 = iVar11 + -1" identifier = (binary_expression "iVar11 + -1" identifier + number_literal)) ;) (expression_statement "param_1[0x1e] = iVar11;" (assignment_expression "param_1[0x1e] = iVar11" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "uVar9 = uVar1;" (assignment_expression "uVar9 = uVar1" identifier = identifier) ;) }) while (parenthesized_expression "(iVar11 != 0)" ( (binary_expression "iVar11 != 0" identifier != number_literal) )) ;) (expression_statement "param_1[0x1a] = 0;" (assignment_expression "param_1[0x1a] = 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "iVar15 = iVar6 + -1 + uVar7;" (assignment_expression "iVar15 = iVar6 + -1 + uVar7" identifier = (binary_expression "iVar6 + -1 + uVar7" (binary_expression "iVar6 + -1" identifier + number_literal) + identifier)) ;) (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x1b] = iVar15;" (assignment_expression "param_1[0x1b] = iVar15" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }" if (parenthesized_expression "(iVar10 == iVar5 + -1)" ( (binary_expression "iVar10 == iVar5 + -1" identifier == (binary_expression "iVar5 + -1" identifier + number_literal)) )) (compound_statement "{\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }" { (expression_statement "iVar11 = param_1[0x17];" (assignment_expression "iVar11 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "iVar10 = 0;" (assignment_expression "iVar10 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }" if (parenthesized_expression "(-1 < iVar11)" ( (binary_expression "-1 < iVar11" number_literal < identifier) )) (compound_statement "{\n            iVar10 = iVar11 + param_1[0xe];\n          }" { (expression_statement "iVar10 = iVar11 + param_1[0xe];" (assignment_expression "iVar10 = iVar11 + param_1[0xe]" identifier = (binary_expression "iVar11 + param_1[0xe]" identifier + (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);" (call_expression "FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0)" identifier (argument_list "(param_1,iVar10,iVar15 - iVar11,0)" ( identifier , identifier , (binary_expression "iVar15 - iVar11" identifier - identifier) , number_literal ))) ;) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" identifier (argument_list "()" ( ))) ;) (if_statement "if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }" if (parenthesized_expression "(*(int *)(*param_1 + 0x10) == 0)" ( (binary_expression "*(int *)(*param_1 + 0x10) == 0" (pointer_expression "*(int *)(*param_1 + 0x10)" * (cast_expression "(int *)(*param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n            return false;\n          }" { (return_statement "return false;" return false ;) })) (expression_statement "uVar14 = param_1[0x1d];" (assignment_expression "uVar14 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) })) (goto_statement "goto LAB_00012c70;" goto statement_identifier ;) })) }) (else_clause "else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }" else (compound_statement "{\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }" { (expression_statement "uVar14 = param_1[0x1e];" (assignment_expression "uVar14 = param_1[0x1e]" identifier = (subscript_expression "param_1[0x1e]" identifier [ number_literal ])) ;) (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) }))) })) (while_statement "while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }" { (if_statement "if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;" if (parenthesized_expression "((2 < uVar14) && ((uint)param_1[0x18] <= uVar14))" ( (binary_expression "(2 < uVar14) && ((uint)param_1[0x18] <= uVar14)" (parenthesized_expression "(2 < uVar14)" ( (binary_expression "2 < uVar14" number_literal < identifier) )) && (parenthesized_expression "((uint)param_1[0x18] <= uVar14)" ( (binary_expression "(uint)param_1[0x18] <= uVar14" (cast_expression "(uint)param_1[0x18]" ( (type_descriptor "uint" type_identifier) ) (subscript_expression "param_1[0x18]" identifier [ number_literal ])) <= identifier) ))) )) (goto_statement "goto LAB_00012e20;" goto statement_identifier ;)) (labeled_statement "LAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }" statement_identifier : (if_statement "if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }" if (parenthesized_expression "(param_1[0x1a] != 0)" ( (binary_expression "param_1[0x1a] != 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }" { (expression_statement "iVar15 = param_1[0x5a8];" (assignment_expression "iVar15 = param_1[0x5a8]" identifier = (subscript_expression "param_1[0x5a8]" identifier [ number_literal ])) ;) (expression_statement "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);" (assignment_expression "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8)" identifier = (pointer_expression "*(byte *)(param_1[0xe] + -1 + uVar8)" * (cast_expression "(byte *)(param_1[0xe] + -1 + uVar8)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + -1 + uVar8)" ( (binary_expression "param_1[0xe] + -1 + uVar8" (binary_expression "param_1[0xe] + -1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + number_literal) + identifier) ))))) ;) (expression_statement "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;" (assignment_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0" (pointer_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" * (cast_expression "(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a9] + iVar15 * 2)" ( (binary_expression "param_1[0x5a9] + iVar15 * 2" (subscript_expression "param_1[0x5a9]" identifier [ number_literal ]) + (binary_expression "iVar15 * 2" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "param_1[0x5a8] = iVar15 + 1;" (assignment_expression "param_1[0x5a8] = iVar15 + 1" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "*(byte *)(param_1[0x5a6] + iVar15) = bVar4;" (assignment_expression "*(byte *)(param_1[0x5a6] + iVar15) = bVar4" (pointer_expression "*(byte *)(param_1[0x5a6] + iVar15)" * (cast_expression "(byte *)(param_1[0x5a6] + iVar15)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a6] + iVar15)" ( (binary_expression "param_1[0x5a6] + iVar15" (subscript_expression "param_1[0x5a6]" identifier [ number_literal ]) + identifier) )))) = identifier) ;) (expression_statement "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;" (assignment_expression "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1" (pointer_expression "*(short *)(param_1 + bVar4 + 0x25)" * (cast_expression "(short *)(param_1 + bVar4 + 0x25)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + bVar4 + 0x25)" ( (binary_expression "param_1 + bVar4 + 0x25" (binary_expression "param_1 + bVar4" identifier + identifier) + number_literal) )))) = (binary_expression "(short)param_1[bVar4 + 0x25] + 1" (cast_expression "(short)param_1[bVar4 + 0x25]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[bVar4 + 0x25]" identifier [ (binary_expression "bVar4 + 0x25" identifier + number_literal) ])) + number_literal)) ;) (if_statement "if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }" if (parenthesized_expression "(param_1[0x5a8] == param_1[0x5a7] + -1)" ( (binary_expression "param_1[0x5a8] == param_1[0x5a7] + -1" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) == (binary_expression "param_1[0x5a7] + -1" (subscript_expression "param_1[0x5a7]" identifier [ number_literal ]) + number_literal)) )) (compound_statement "{\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }" { (expression_statement "iVar15 = param_1[0x17];" (assignment_expression "iVar15 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }" if (parenthesized_expression "(-1 < iVar15)" ( (binary_expression "-1 < iVar15" number_literal < identifier) )) (compound_statement "{\n          iVar11 = iVar15 + param_1[0xe];\n        }" { (expression_statement "iVar11 = iVar15 + param_1[0xe];" (assignment_expression "iVar11 = iVar15 + param_1[0xe]" identifier = (binary_expression "iVar15 + param_1[0xe]" identifier + (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);" (call_expression "FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0)" identifier (argument_list "(param_1,iVar11,param_1[0x1b] - iVar15,0)" ( identifier , identifier , (binary_expression "param_1[0x1b] - iVar15" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) - identifier) , number_literal ))) ;) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "param_1[0x1b] = param_1[0x1b] + 1;" (assignment_expression "param_1[0x1b] = param_1[0x1b] + 1" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = (binary_expression "param_1[0x1b] + 1" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) + number_literal)) ;) (expression_statement "uVar14 = param_1[0x1d] - 1;" (assignment_expression "uVar14 = param_1[0x1d] - 1" identifier = (binary_expression "param_1[0x1d] - 1" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) - number_literal)) ;) (expression_statement "param_1[0x1d] = uVar14;" (assignment_expression "param_1[0x1d] = uVar14" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }" if (parenthesized_expression "(*(int *)(*param_1 + 0x10) == 0)" ( (binary_expression "*(int *)(*param_1 + 0x10) == 0" (pointer_expression "*(int *)(*param_1 + 0x10)" * (cast_expression "(int *)(*param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (goto_statement "goto LAB_00012c70;" goto statement_identifier ;) }))) (expression_statement "iVar15 = param_1[0x1d];" (assignment_expression "iVar15 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x1a] = 1;" (assignment_expression "param_1[0x1a] = 1" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "param_1[0x1b] = uVar8 + 1;" (assignment_expression "param_1[0x1b] = uVar8 + 1" (subscript_expression "param_1[0x1b]" identifier [ number_literal ]) = (binary_expression "uVar8 + 1" identifier + number_literal)) ;) (expression_statement "param_1[0x1d] = iVar15 - 1U;" (assignment_expression "param_1[0x1d] = iVar15 - 1U" (subscript_expression "param_1[0x1d]" identifier [ number_literal ]) = (binary_expression "iVar15 - 1U" identifier - number_literal)) ;) (if_statement "if (0x105 < iVar15 - 1U) goto LAB_00012c7c;" if (parenthesized_expression "(0x105 < iVar15 - 1U)" ( (binary_expression "0x105 < iVar15 - 1U" number_literal < (binary_expression "iVar15 - 1U" identifier - number_literal)) )) (goto_statement "goto LAB_00012c7c;" goto statement_identifier ;)) (labeled_statement "LAB_00012d9a:\n    FUN_00012970();" statement_identifier : (expression_statement "FUN_00012970();" (call_expression "FUN_00012970()" identifier (argument_list "()" ( ))) ;)) (expression_statement "uVar7 = param_1[0x1d];" (assignment_expression "uVar7 = param_1[0x1d]" identifier = (subscript_expression "param_1[0x1d]" identifier [ number_literal ])) ;) (if_statement "if (0x105 < uVar7) goto LAB_00012c7c;" if (parenthesized_expression "(0x105 < uVar7)" ( (binary_expression "0x105 < uVar7" number_literal < identifier) )) (goto_statement "goto LAB_00012c7c;" goto statement_identifier ;)) (if_statement "if (param_2 == 0) {\n      return false;\n    }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (compound_statement "{\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }" { (expression_statement "uVar14 = param_1[0x1b];" (assignment_expression "uVar14 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (if_statement "if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }" if (parenthesized_expression "(param_1[0x1a] != 0)" ( (binary_expression "param_1[0x1a] != 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }" { (expression_statement "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);" (assignment_expression "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14)" identifier = (pointer_expression "*(byte *)(param_1[0xe] + -1 + uVar14)" * (cast_expression "(byte *)(param_1[0xe] + -1 + uVar14)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0xe] + -1 + uVar14)" ( (binary_expression "param_1[0xe] + -1 + uVar14" (binary_expression "param_1[0xe] + -1" (subscript_expression "param_1[0xe]" identifier [ number_literal ]) + number_literal) + identifier) ))))) ;) (expression_statement "iVar15 = param_1[0x5a8];" (assignment_expression "iVar15 = param_1[0x5a8]" identifier = (subscript_expression "param_1[0x5a8]" identifier [ number_literal ])) ;) (expression_statement "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;" (assignment_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0" (pointer_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" * (cast_expression "(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a9] + iVar15 * 2)" ( (binary_expression "param_1[0x5a9] + iVar15 * 2" (subscript_expression "param_1[0x5a9]" identifier [ number_literal ]) + (binary_expression "iVar15 * 2" identifier * number_literal)) )))) = number_literal) ;) (expression_statement "param_1[0x5a8] = iVar15 + 1;" (assignment_expression "param_1[0x5a8] = iVar15 + 1" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) = (binary_expression "iVar15 + 1" identifier + number_literal)) ;) (expression_statement "*(byte *)(param_1[0x5a6] + iVar15) = bVar4;" (assignment_expression "*(byte *)(param_1[0x5a6] + iVar15) = bVar4" (pointer_expression "*(byte *)(param_1[0x5a6] + iVar15)" * (cast_expression "(byte *)(param_1[0x5a6] + iVar15)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1[0x5a6] + iVar15)" ( (binary_expression "param_1[0x5a6] + iVar15" (subscript_expression "param_1[0x5a6]" identifier [ number_literal ]) + identifier) )))) = identifier) ;) (expression_statement "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;" (assignment_expression "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1" (pointer_expression "*(short *)(param_1 + bVar4 + 0x25)" * (cast_expression "(short *)(param_1 + bVar4 + 0x25)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + bVar4 + 0x25)" ( (binary_expression "param_1 + bVar4 + 0x25" (binary_expression "param_1 + bVar4" identifier + identifier) + number_literal) )))) = (binary_expression "(short)param_1[bVar4 + 0x25] + 1" (cast_expression "(short)param_1[bVar4 + 0x25]" ( (type_descriptor "short" (sized_type_specifier "short" short)) ) (subscript_expression "param_1[bVar4 + 0x25]" identifier [ (binary_expression "bVar4 + 0x25" identifier + number_literal) ])) + number_literal)) ;) (expression_statement "uVar14 = param_1[0x1b];" (assignment_expression "uVar14 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x1a] = 0;" (assignment_expression "param_1[0x1a] = 0" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = number_literal) ;) })) (expression_statement "uVar8 = 2;" (assignment_expression "uVar8 = 2" identifier = number_literal) ;) (if_statement "if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }" if (parenthesized_expression "(uVar14 < 3)" ( (binary_expression "uVar14 < 3" identifier < number_literal) )) (compound_statement "{\n        uVar8 = uVar14;\n      }" { (expression_statement "uVar8 = uVar14;" (assignment_expression "uVar8 = uVar14" identifier = identifier) ;) })) (expression_statement "param_1[0x5ad] = uVar8;" (assignment_expression "param_1[0x5ad] = uVar8" (subscript_expression "param_1[0x5ad]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }" if (parenthesized_expression "(param_2 == 4)" ( (binary_expression "param_2 == 4" identifier == number_literal) )) (compound_statement "{\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }" { (expression_statement "iVar15 = param_1[0x17];" (assignment_expression "iVar15 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }" if (parenthesized_expression "(-1 < iVar15)" ( (binary_expression "-1 < iVar15" number_literal < identifier) )) (compound_statement "{\n          iVar11 = iVar15 + param_1[0xe];\n        }" { (expression_statement "iVar11 = iVar15 + param_1[0xe];" (assignment_expression "iVar11 = iVar15 + param_1[0xe]" identifier = (binary_expression "iVar15 + param_1[0xe]" identifier + (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);" (call_expression "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1)" identifier (argument_list "(param_1,iVar11,uVar14 - iVar15,1)" ( identifier , identifier , (binary_expression "uVar14 - iVar15" identifier - identifier) , number_literal ))) ;) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" identifier (argument_list "()" ( ))) ;) (return_statement "return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');" return (cast_expression "(bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02')" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "((*(int *)(*param_1 + 0x10) != 0) + '\x02')" ( (binary_expression "(*(int *)(*param_1 + 0x10) != 0) + '\x02'" (parenthesized_expression "(*(int *)(*param_1 + 0x10) != 0)" ( (binary_expression "*(int *)(*param_1 + 0x10) != 0" (pointer_expression "*(int *)(*param_1 + 0x10)" * (cast_expression "(int *)(*param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) != number_literal) )) + (char_literal "'\x02'" ' escape_sequence ')) ))) ;) })) (if_statement "if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }" if (parenthesized_expression "(param_1[0x5a8] != 0)" ( (binary_expression "param_1[0x5a8] != 0" (subscript_expression "param_1[0x5a8]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }" { (expression_statement "iVar15 = param_1[0x17];" (assignment_expression "iVar15 = param_1[0x17]" identifier = (subscript_expression "param_1[0x17]" identifier [ number_literal ])) ;) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" identifier = number_literal) ;) (if_statement "if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }" if (parenthesized_expression "(-1 < iVar15)" ( (binary_expression "-1 < iVar15" number_literal < identifier) )) (compound_statement "{\n          iVar11 = iVar15 + param_1[0xe];\n        }" { (expression_statement "iVar11 = iVar15 + param_1[0xe];" (assignment_expression "iVar11 = iVar15 + param_1[0xe]" identifier = (binary_expression "iVar15 + param_1[0xe]" identifier + (subscript_expression "param_1[0xe]" identifier [ number_literal ]))) ;) })) (expression_statement "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);" (call_expression "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0)" identifier (argument_list "(param_1,iVar11,uVar14 - iVar15,0)" ( identifier , identifier , (binary_expression "uVar14 - iVar15" identifier - identifier) , number_literal ))) ;) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" identifier [ number_literal ]) = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" identifier (argument_list "()" ( ))) ;) (return_statement "return *(int *)(*param_1 + 0x10) != 0;" return (binary_expression "*(int *)(*param_1 + 0x10) != 0" (pointer_expression "*(int *)(*param_1 + 0x10)" * (cast_expression "(int *)(*param_1 + 0x10)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_1 + 0x10)" ( (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" * identifier) + number_literal) )))) != number_literal) ;) })) (return_statement "return true;" return true ;) })) (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" identifier = (subscript_expression "param_1[0x1b]" identifier [ number_literal ])) ;) (expression_statement "uVar14 = param_1[0x18];" (assignment_expression "uVar14 = param_1[0x18]" identifier = (subscript_expression "param_1[0x18]" identifier [ number_literal ])) ;) (expression_statement "iVar15 = param_1[0x1c];" (assignment_expression "iVar15 = param_1[0x1c]" identifier = (subscript_expression "param_1[0x1c]" identifier [ number_literal ])) ;) (if_statement "if (2 < uVar7) break;" if (parenthesized_expression "(2 < uVar7)" ( (binary_expression "2 < uVar7" number_literal < identifier) )) (break_statement "break;" break ;)) (expression_statement "param_1[0x1e] = uVar14;" (assignment_expression "param_1[0x1e] = uVar14" (subscript_expression "param_1[0x1e]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x19] = iVar15;" (assignment_expression "param_1[0x19] = iVar15" (subscript_expression "param_1[0x19]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" identifier [ number_literal ]) = number_literal) ;) })) (goto_statement "goto LAB_00012c85;" goto statement_identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * 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 IDENT ;) (declaration (sized_type_specifier short) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;))) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + IDENT) )))) ^ (binary_expression (subscript_expression IDENT [ LIT ]) << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) & LIT) )))) )) & (subscript_expression IDENT [ LIT ]))) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & IDENT) )) * LIT)) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ))) )) && (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) <= (binary_expression (subscript_expression IDENT [ LIT ]) - LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) )) || (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT == LIT) && (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - (subscript_expression IDENT [ LIT ]))) ))) )) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (subscript_expression IDENT [ LIT ])))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) = (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT - LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + (subscript_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (pointer_expression & IDENT) ))) [ (binary_expression (binary_expression IDENT - LIT) & LIT) ])) + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (subscript_expression IDENT [ (binary_expression (subscript_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (pointer_expression & IDENT) ))) [ (binary_expression (binary_expression IDENT - LIT) & LIT) ]) + LIT) ])) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ IDENT ])) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression IDENT >> LIT) ])) ;) }))) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (subscript_expression IDENT [ (binary_expression IDENT + LIT) ])) + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) )) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (binary_expression (parenthesized_expression ( (binary_expression IDENT - LIT) )) + IDENT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) << (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) & LIT) ))) ^ (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + IDENT) ))))) )) & (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & IDENT) )) * LIT)) )))) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier short)) ) IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + LIT) + IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (binary_expression IDENT + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT - IDENT) , LIT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) })) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) })) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT < IDENT) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= IDENT) ))) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + IDENT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (subscript_expression IDENT [ (binary_expression IDENT + LIT) ])) + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (subscript_expression IDENT [ LIT ]) - IDENT) , LIT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (subscript_expression IDENT [ LIT ]) + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) - LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (goto_statement goto statement_identifier ;) }))) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - LIT)) )) (goto_statement goto statement_identifier ;)) (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return BOOL ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_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 (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) + IDENT) ))))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) )))) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) + LIT) )))) = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier short)) ) (subscript_expression IDENT [ (binary_expression IDENT + LIT) ])) + LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT - IDENT) , LIT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) != LIT) )) + (char_literal ' escape_sequence ')) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression IDENT [ LIT ]))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT - IDENT) , LIT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (call_expression IDENT (argument_list ( ))) ;) (return_statement return (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + LIT) )))) != LIT) ;) })) (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (break_statement break ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) })) (goto_statement goto statement_identifier ;) })))
(function_definition "bool FUN_00012c40(int *param_1,int param_2)\n\n{\n  uint uVar1;\n  ushort *puVar2;\n  undefined2 *puVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int iVar11;\n  short sVar12;\n  ushort uVar13;\n  uint uVar14;\n  int iVar15;\n  \n  uVar14 = param_1[0x1d];\nLAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar8 = param_1[0x1b];\n  uVar14 = param_1[0x18];\n  iVar15 = param_1[0x1c];\nLAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];\n  param_1[0x12] = uVar7;\n  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);\n  uVar13 = *puVar2;\n  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;\n  *puVar2 = (ushort)uVar8;\n  param_1[0x1e] = uVar14;\n  param_1[0x19] = iVar15;\n  param_1[0x18] = 2;\n  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }\n  while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }\n  goto LAB_00012c85;\n}" (primitive_type "bool") (function_declarator "FUN_00012c40(int *param_1,int param_2)" (identifier "FUN_00012c40") (parameter_list "(int *param_1,int param_2)" (( "(") (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")) () ")"))) (compound_statement "{\n  uint uVar1;\n  ushort *puVar2;\n  undefined2 *puVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  int iVar10;\n  int iVar11;\n  short sVar12;\n  ushort uVar13;\n  uint uVar14;\n  int iVar15;\n  \n  uVar14 = param_1[0x1d];\nLAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;\nLAB_00012c7c:\n  uVar8 = param_1[0x1b];\n  uVar14 = param_1[0x18];\n  iVar15 = param_1[0x1c];\nLAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];\n  param_1[0x12] = uVar7;\n  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);\n  uVar13 = *puVar2;\n  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;\n  *puVar2 = (ushort)uVar8;\n  param_1[0x1e] = uVar14;\n  param_1[0x19] = iVar15;\n  param_1[0x18] = 2;\n  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }\n  while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }\n  goto LAB_00012c85;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "ushort *puVar2;" (type_identifier "ushort") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "undefined2 *puVar3;" (type_identifier "undefined2") (pointer_declarator "*puVar3" (* "*") (identifier "puVar3")) (; ";")) (declaration "byte bVar4;" (type_identifier "byte") (identifier "bVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "int iVar10;" (primitive_type "int") (identifier "iVar10") (; ";")) (declaration "int iVar11;" (primitive_type "int") (identifier "iVar11") (; ";")) (declaration "short sVar12;" (sized_type_specifier "short" (short "short")) (identifier "sVar12") (; ";")) (declaration "ushort uVar13;" (type_identifier "ushort") (identifier "uVar13") (; ";")) (declaration "uint uVar14;" (type_identifier "uint") (identifier "uVar14") (; ";")) (declaration "int iVar15;" (primitive_type "int") (identifier "iVar15") (; ";")) (expression_statement "uVar14 = param_1[0x1d];" (assignment_expression "uVar14 = param_1[0x1d]" (identifier "uVar14") (= "=") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]"))) (; ";")) (labeled_statement "LAB_00012c70:\n  if (uVar14 < 0x106) goto LAB_00012d9a;" (statement_identifier "LAB_00012c70") (: ":") (if_statement "if (uVar14 < 0x106) goto LAB_00012d9a;" (if "if") (parenthesized_expression "(uVar14 < 0x106)" (( "(") (binary_expression "uVar14 < 0x106" (identifier "uVar14") (< "<") (number_literal "0x106")) () ")")) (goto_statement "goto LAB_00012d9a;" (goto "goto") (statement_identifier "LAB_00012d9a") (; ";")))) (labeled_statement "LAB_00012c7c:\n  uVar8 = param_1[0x1b];" (statement_identifier "LAB_00012c7c") (: ":") (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" (identifier "uVar8") (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";"))) (expression_statement "uVar14 = param_1[0x18];" (assignment_expression "uVar14 = param_1[0x18]" (identifier "uVar14") (= "=") (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]"))) (; ";")) (expression_statement "iVar15 = param_1[0x1c];" (assignment_expression "iVar15 = param_1[0x1c]" (identifier "iVar15") (= "=") (subscript_expression "param_1[0x1c]" (identifier "param_1") ([ "[") (number_literal "0x1c") (] "]"))) (; ";")) (labeled_statement "LAB_00012c85:\n  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];" (statement_identifier "LAB_00012c85") (: ":") (expression_statement "uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15];" (assignment_expression "uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15]" (identifier "uVar7") (= "=") (binary_expression "((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          ) & param_1[0x15]" (parenthesized_expression "((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)\n          )" (( "(") (binary_expression "(uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)" (binary_expression "(uint)*(byte *)(param_1[0xe] + 2 + uVar8)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(byte *)(param_1[0xe] + 2 + uVar8)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0xe] + 2 + uVar8)" (( "(") (binary_expression "param_1[0xe] + 2 + uVar8" (binary_expression "param_1[0xe] + 2" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (number_literal "2")) (+ "+") (identifier "uVar8")) () ")")))) (^ "^") (binary_expression "param_1[0x12] << ((byte)param_1[0x16] & 0x1f)" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (<< "<<") (parenthesized_expression "((byte)param_1[0x16] & 0x1f)" (( "(") (binary_expression "(byte)param_1[0x16] & 0x1f" (cast_expression "(byte)param_1[0x16]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]"))) (& "&") (number_literal "0x1f")) () ")")))) () ")")) (& "&") (subscript_expression "param_1[0x15]" (identifier "param_1") ([ "[") (number_literal "0x15") (] "]")))) (; ";"))) (expression_statement "param_1[0x12] = uVar7;" (assignment_expression "param_1[0x12] = uVar7" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (= "=") (identifier "uVar7")) (; ";")) (expression_statement "puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);" (assignment_expression "puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2)" (identifier "puVar2") (= "=") (cast_expression "(ushort *)(param_1[0x11] + uVar7 * 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x11] + uVar7 * 2)" (( "(") (binary_expression "param_1[0x11] + uVar7 * 2" (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]")) (+ "+") (binary_expression "uVar7 * 2" (identifier "uVar7") (* "*") (number_literal "2"))) () ")")))) (; ";")) (expression_statement "uVar13 = *puVar2;" (assignment_expression "uVar13 = *puVar2" (identifier "uVar13") (= "=") (pointer_expression "*puVar2" (* "*") (identifier "puVar2"))) (; ";")) (expression_statement "*(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;" (assignment_expression "*(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13" (pointer_expression "*(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2)" (* "*") (cast_expression "(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x10] + (param_1[0xd] & uVar8) * 2)" (( "(") (binary_expression "param_1[0x10] + (param_1[0xd] & uVar8) * 2" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) (+ "+") (binary_expression "(param_1[0xd] & uVar8) * 2" (parenthesized_expression "(param_1[0xd] & uVar8)" (( "(") (binary_expression "param_1[0xd] & uVar8" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (& "&") (identifier "uVar8")) () ")")) (* "*") (number_literal "2"))) () ")")))) (= "=") (identifier "uVar13")) (; ";")) (expression_statement "*puVar2 = (ushort)uVar8;" (assignment_expression "*puVar2 = (ushort)uVar8" (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) (= "=") (cast_expression "(ushort)uVar8" (( "(") (type_descriptor "ushort" (type_identifier "ushort")) () ")") (identifier "uVar8"))) (; ";")) (expression_statement "param_1[0x1e] = uVar14;" (assignment_expression "param_1[0x1e] = uVar14" (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]")) (= "=") (identifier "uVar14")) (; ";")) (expression_statement "param_1[0x19] = iVar15;" (assignment_expression "param_1[0x19] = iVar15" (subscript_expression "param_1[0x19]" (identifier "param_1") ([ "[") (number_literal "0x19") (] "]")) (= "=") (identifier "iVar15")) (; ";")) (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (= "=") (number_literal "2")) (; ";")) (if_statement "if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     ) {\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }" (if "if") (parenthesized_expression "(((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)\n     )" (( "(") (binary_expression "((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)" (parenthesized_expression "((uVar13 != 0) && (uVar14 < (uint)param_1[0x20]))" (( "(") (binary_expression "(uVar13 != 0) && (uVar14 < (uint)param_1[0x20])" (parenthesized_expression "(uVar13 != 0)" (( "(") (binary_expression "uVar13 != 0" (identifier "uVar13") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(uVar14 < (uint)param_1[0x20])" (( "(") (binary_expression "uVar14 < (uint)param_1[0x20]" (identifier "uVar14") (< "<") (cast_expression "(uint)param_1[0x20]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[0x20]" (identifier "param_1") ([ "[") (number_literal "0x20") (] "]")))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(uVar8 - uVar13 <= param_1[0xb] - 0x106U)" (( "(") (binary_expression "uVar8 - uVar13 <= param_1[0xb] - 0x106U" (binary_expression "uVar8 - uVar13" (identifier "uVar8") (- "-") (identifier "uVar13")) (<= "<=") (binary_expression "param_1[0xb] - 0x106U" (subscript_expression "param_1[0xb]" (identifier "param_1") ([ "[") (number_literal "0xb") (] "]")) (- "-") (number_literal "0x106U"))) () ")"))) () ")")) (compound_statement "{\n    uVar7 = FUN_00012660();\n    param_1[0x18] = uVar7;\n    if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }\n  }" ({ "{") (expression_statement "uVar7 = FUN_00012660();" (assignment_expression "uVar7 = FUN_00012660()" (identifier "uVar7") (= "=") (call_expression "FUN_00012660()" (identifier "FUN_00012660") (argument_list "()" (( "(") () ")")))) (; ";")) (expression_statement "param_1[0x18] = uVar7;" (assignment_expression "param_1[0x18] = uVar7" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (= "=") (identifier "uVar7")) (; ";")) (if_statement "if (uVar7 < 6) {\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }\n    else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }" (if "if") (parenthesized_expression "(uVar7 < 6)" (( "(") (binary_expression "uVar7 < 6" (identifier "uVar7") (< "<") (number_literal "6")) () ")")) (compound_statement "{\n      uVar8 = param_1[0x1b];\n      uVar14 = param_1[0x1e];\n      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }\n    }" ({ "{") (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" (identifier "uVar8") (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (expression_statement "uVar14 = param_1[0x1e];" (assignment_expression "uVar14 = param_1[0x1e]" (identifier "uVar14") (= "=") (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]"))) (; ";")) (if_statement "if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }" (if "if") (parenthesized_expression "((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c]))))" (( "(") (binary_expression "(param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))" (parenthesized_expression "(param_1[0x22] == 1)" (( "(") (binary_expression "param_1[0x22] == 1" (subscript_expression "param_1[0x22]" (identifier "param_1") ([ "[") (number_literal "0x22") (] "]")) (== "==") (number_literal "1")) () ")")) (|| "||") (parenthesized_expression "((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))" (( "(") (parenthesized_expression "(uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c]))" (( "(") (binary_expression "uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])" (binary_expression "uVar7 == 3" (identifier "uVar7") (== "==") (number_literal "3")) (&& "&&") (parenthesized_expression "(0x1000 < uVar8 - param_1[0x1c])" (( "(") (binary_expression "0x1000 < uVar8 - param_1[0x1c]" (number_literal "0x1000") (< "<") (binary_expression "uVar8 - param_1[0x1c]" (identifier "uVar8") (- "-") (subscript_expression "param_1[0x1c]" (identifier "param_1") ([ "[") (number_literal "0x1c") (] "]")))) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n        param_1[0x18] = 2;\n        if (uVar14 < 3) goto LAB_00012cfe;\nLAB_00012e20:\n        iVar15 = param_1[0x1d];\n        iVar11 = param_1[0x5a8];\n        sVar12 = (short)uVar8 - (short)param_1[0x19];\n        uVar13 = sVar12 - 2;\n        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;\n        param_1[0x5a8] = iVar11 + 1;\n        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);\n        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;\n        if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }\n        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;\n        iVar10 = param_1[0x5a8];\n        iVar5 = param_1[0x5a7];\n        iVar6 = param_1[0x1e];\n        uVar14 = (param_1[0x1d] + 1) - iVar6;\n        iVar11 = iVar6 + -2;\n        uVar7 = param_1[0x1b];\n        param_1[0x1d] = uVar14;\n        param_1[0x1e] = iVar11;\n        uVar9 = uVar7;\n        do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);\n        param_1[0x1a] = 0;\n        iVar15 = iVar6 + -1 + uVar7;\n        param_1[0x18] = 2;\n        param_1[0x1b] = iVar15;\n        if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }\n        goto LAB_00012c70;\n      }" ({ "{") (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (= "=") (number_literal "2")) (; ";")) (if_statement "if (uVar14 < 3) goto LAB_00012cfe;" (if "if") (parenthesized_expression "(uVar14 < 3)" (( "(") (binary_expression "uVar14 < 3" (identifier "uVar14") (< "<") (number_literal "3")) () ")")) (goto_statement "goto LAB_00012cfe;" (goto "goto") (statement_identifier "LAB_00012cfe") (; ";"))) (labeled_statement "LAB_00012e20:\n        iVar15 = param_1[0x1d];" (statement_identifier "LAB_00012e20") (: ":") (expression_statement "iVar15 = param_1[0x1d];" (assignment_expression "iVar15 = param_1[0x1d]" (identifier "iVar15") (= "=") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]"))) (; ";"))) (expression_statement "iVar11 = param_1[0x5a8];" (assignment_expression "iVar11 = param_1[0x5a8]" (identifier "iVar11") (= "=") (subscript_expression "param_1[0x5a8]" (identifier "param_1") ([ "[") (number_literal "0x5a8") (] "]"))) (; ";")) (expression_statement "sVar12 = (short)uVar8 - (short)param_1[0x19];" (assignment_expression "sVar12 = (short)uVar8 - (short)param_1[0x19]" (identifier "sVar12") (= "=") (binary_expression "(short)uVar8 - (short)param_1[0x19]" (cast_expression "(short)uVar8" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar8")) (- "-") (cast_expression "(short)param_1[0x19]" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (subscript_expression "param_1[0x19]" (identifier "param_1") ([ "[") (number_literal "0x19") (] "]"))))) (; ";")) (expression_statement "uVar13 = sVar12 - 2;" (assignment_expression "uVar13 = sVar12 - 2" (identifier "uVar13") (= "=") (binary_expression "sVar12 - 2" (identifier "sVar12") (- "-") (number_literal "2"))) (; ";")) (expression_statement "*(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;" (assignment_expression "*(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1" (pointer_expression "*(short *)(param_1[0x5a9] + iVar11 * 2)" (* "*") (cast_expression "(short *)(param_1[0x5a9] + iVar11 * 2)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x5a9] + iVar11 * 2)" (( "(") (binary_expression "param_1[0x5a9] + iVar11 * 2" (subscript_expression "param_1[0x5a9]" (identifier "param_1") ([ "[") (number_literal "0x5a9") (] "]")) (+ "+") (binary_expression "iVar11 * 2" (identifier "iVar11") (* "*") (number_literal "2"))) () ")")))) (= "=") (binary_expression "sVar12 + -1" (identifier "sVar12") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "param_1[0x5a8] = iVar11 + 1;" (assignment_expression "param_1[0x5a8] = iVar11 + 1" (subscript_expression "param_1[0x5a8]" (identifier "param_1") ([ "[") (number_literal "0x5a8") (] "]")) (= "=") (binary_expression "iVar11 + 1" (identifier "iVar11") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);" (assignment_expression "*(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3)" (pointer_expression "*(char *)(param_1[0x5a6] + iVar11)" (* "*") (cast_expression "(char *)(param_1[0x5a6] + iVar11)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x5a6] + iVar11)" (( "(") (binary_expression "param_1[0x5a6] + iVar11" (subscript_expression "param_1[0x5a6]" (identifier "param_1") ([ "[") (number_literal "0x5a6") (] "]")) (+ "+") (identifier "iVar11")) () ")")))) (= "=") (cast_expression "(char)(uVar14 - 3)" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (parenthesized_expression "(uVar14 - 3)" (( "(") (binary_expression "uVar14 - 3" (identifier "uVar14") (- "-") (number_literal "3")) () ")")))) (; ";")) (expression_statement "*(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;" (assignment_expression "*(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =\n             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1" (pointer_expression "*(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126)" (* "*") (cast_expression "(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126)" (( "(") (binary_expression "param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126" (binary_expression "param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff]" (identifier "param_1") (+ "+") (subscript_expression "(byte)(&DAT_00022440)[uVar14 - 3 & 0xff]" (call_expression "(byte)(&DAT_00022440)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(&DAT_00022440)" (( "(") (pointer_expression "&DAT_00022440" (& "&") (identifier "DAT_00022440")) () ")"))) ([ "[") (binary_expression "uVar14 - 3 & 0xff" (binary_expression "uVar14 - 3" (identifier "uVar14") (- "-") (number_literal "3")) (& "&") (number_literal "0xff")) (] "]"))) (+ "+") (number_literal "0x126")) () ")")))) (= "=") (binary_expression "(short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1" (cast_expression "(short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126]" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (subscript_expression "param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126]" (identifier "param_1") ([ "[") (binary_expression "(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126" (subscript_expression "(byte)(&DAT_00022440)[uVar14 - 3 & 0xff]" (call_expression "(byte)(&DAT_00022440)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(&DAT_00022440)" (( "(") (pointer_expression "&DAT_00022440" (& "&") (identifier "DAT_00022440")) () ")"))) ([ "[") (binary_expression "uVar14 - 3 & 0xff" (binary_expression "uVar14 - 3" (identifier "uVar14") (- "-") (number_literal "3")) (& "&") (number_literal "0xff")) (] "]")) (+ "+") (number_literal "0x126")) (] "]"))) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (uVar13 < 0x100) {\n          bVar4 = (&DAT_00022540)[uVar13];\n        }\n        else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }" (if "if") (parenthesized_expression "(uVar13 < 0x100)" (( "(") (binary_expression "uVar13 < 0x100" (identifier "uVar13") (< "<") (number_literal "0x100")) () ")")) (compound_statement "{\n          bVar4 = (&DAT_00022540)[uVar13];\n        }" ({ "{") (expression_statement "bVar4 = (&DAT_00022540)[uVar13];" (assignment_expression "bVar4 = (&DAT_00022540)[uVar13]" (identifier "bVar4") (= "=") (subscript_expression "(&DAT_00022540)[uVar13]" (parenthesized_expression "(&DAT_00022540)" (( "(") (pointer_expression "&DAT_00022540" (& "&") (identifier "DAT_00022540")) () ")")) ([ "[") (identifier "uVar13") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }" (else "else") (compound_statement "{\n          bVar4 = (&DAT_00022640)[uVar13 >> 7];\n        }" ({ "{") (expression_statement "bVar4 = (&DAT_00022640)[uVar13 >> 7];" (assignment_expression "bVar4 = (&DAT_00022640)[uVar13 >> 7]" (identifier "bVar4") (= "=") (subscript_expression "(&DAT_00022640)[uVar13 >> 7]" (parenthesized_expression "(&DAT_00022640)" (( "(") (pointer_expression "&DAT_00022640" (& "&") (identifier "DAT_00022640")) () ")")) ([ "[") (binary_expression "uVar13 >> 7" (identifier "uVar13") (>> ">>") (number_literal "7")) (] "]"))) (; ";")) (} "}")))) (expression_statement "*(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;" (assignment_expression "*(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1" (pointer_expression "*(short *)(param_1 + bVar4 + 0x262)" (* "*") (cast_expression "(short *)(param_1 + bVar4 + 0x262)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + bVar4 + 0x262)" (( "(") (binary_expression "param_1 + bVar4 + 0x262" (binary_expression "param_1 + bVar4" (identifier "param_1") (+ "+") (identifier "bVar4")) (+ "+") (number_literal "0x262")) () ")")))) (= "=") (binary_expression "(short)param_1[bVar4 + 0x262] + 1" (cast_expression "(short)param_1[bVar4 + 0x262]" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (subscript_expression "param_1[bVar4 + 0x262]" (identifier "param_1") ([ "[") (binary_expression "bVar4 + 0x262" (identifier "bVar4") (+ "+") (number_literal "0x262")) (] "]"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "iVar10 = param_1[0x5a8];" (assignment_expression "iVar10 = param_1[0x5a8]" (identifier "iVar10") (= "=") (subscript_expression "param_1[0x5a8]" (identifier "param_1") ([ "[") (number_literal "0x5a8") (] "]"))) (; ";")) (expression_statement "iVar5 = param_1[0x5a7];" (assignment_expression "iVar5 = param_1[0x5a7]" (identifier "iVar5") (= "=") (subscript_expression "param_1[0x5a7]" (identifier "param_1") ([ "[") (number_literal "0x5a7") (] "]"))) (; ";")) (expression_statement "iVar6 = param_1[0x1e];" (assignment_expression "iVar6 = param_1[0x1e]" (identifier "iVar6") (= "=") (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]"))) (; ";")) (expression_statement "uVar14 = (param_1[0x1d] + 1) - iVar6;" (assignment_expression "uVar14 = (param_1[0x1d] + 1) - iVar6" (identifier "uVar14") (= "=") (binary_expression "(param_1[0x1d] + 1) - iVar6" (parenthesized_expression "(param_1[0x1d] + 1)" (( "(") (binary_expression "param_1[0x1d] + 1" (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")) (+ "+") (number_literal "1")) () ")")) (- "-") (identifier "iVar6"))) (; ";")) (expression_statement "iVar11 = iVar6 + -2;" (assignment_expression "iVar11 = iVar6 + -2" (identifier "iVar11") (= "=") (binary_expression "iVar6 + -2" (identifier "iVar6") (+ "+") (number_literal "-2"))) (; ";")) (expression_statement "uVar7 = param_1[0x1b];" (assignment_expression "uVar7 = param_1[0x1b]" (identifier "uVar7") (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (expression_statement "param_1[0x1d] = uVar14;" (assignment_expression "param_1[0x1d] = uVar14" (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")) (= "=") (identifier "uVar14")) (; ";")) (expression_statement "param_1[0x1e] = iVar11;" (assignment_expression "param_1[0x1e] = iVar11" (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]")) (= "=") (identifier "iVar11")) (; ";")) (expression_statement "uVar9 = uVar7;" (assignment_expression "uVar9 = uVar7" (identifier "uVar9") (= "=") (identifier "uVar7")) (; ";")) (do_statement "do {\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        } while (iVar11 != 0);" (do "do") (compound_statement "{\n          uVar1 = uVar9 + 1;\n          param_1[0x1b] = uVar1;\n          if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }\n          iVar11 = iVar11 + -1;\n          param_1[0x1e] = iVar11;\n          uVar9 = uVar1;\n        }" ({ "{") (expression_statement "uVar1 = uVar9 + 1;" (assignment_expression "uVar1 = uVar9 + 1" (identifier "uVar1") (= "=") (binary_expression "uVar9 + 1" (identifier "uVar9") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_1[0x1b] = uVar1;" (assignment_expression "param_1[0x1b] = uVar1" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (identifier "uVar1")) (; ";")) (if_statement "if (uVar1 <= (uVar8 - 3) + iVar15) {\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }" (if "if") (parenthesized_expression "(uVar1 <= (uVar8 - 3) + iVar15)" (( "(") (binary_expression "uVar1 <= (uVar8 - 3) + iVar15" (identifier "uVar1") (<= "<=") (binary_expression "(uVar8 - 3) + iVar15" (parenthesized_expression "(uVar8 - 3)" (( "(") (binary_expression "uVar8 - 3" (identifier "uVar8") (- "-") (number_literal "3")) () ")")) (+ "+") (identifier "iVar15"))) () ")")) (compound_statement "{\n            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];\n            param_1[0x12] = uVar9;\n            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);\n            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;\n            *puVar3 = (short)uVar1;\n          }" ({ "{") (expression_statement "uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];" (assignment_expression "uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15]" (identifier "uVar9") (= "=") (binary_expression "(param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15]" (parenthesized_expression "(param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9))" (( "(") (binary_expression "param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^\n                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)" (binary_expression "param_1[0x12] << ((byte)param_1[0x16] & 0x1f)" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (<< "<<") (parenthesized_expression "((byte)param_1[0x16] & 0x1f)" (( "(") (binary_expression "(byte)param_1[0x16] & 0x1f" (cast_expression "(byte)param_1[0x16]" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]"))) (& "&") (number_literal "0x1f")) () ")"))) (^ "^") (binary_expression "(uint)*(byte *)(param_1[0xe] + 3 + uVar9)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (* "*") (cast_expression "(byte *)(param_1[0xe] + 3 + uVar9)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0xe] + 3 + uVar9)" (( "(") (binary_expression "param_1[0xe] + 3 + uVar9" (binary_expression "param_1[0xe] + 3" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (number_literal "3")) (+ "+") (identifier "uVar9")) () ")"))))) () ")")) (& "&") (subscript_expression "param_1[0x15]" (identifier "param_1") ([ "[") (number_literal "0x15") (] "]")))) (; ";")) (expression_statement "param_1[0x12] = uVar9;" (assignment_expression "param_1[0x12] = uVar9" (subscript_expression "param_1[0x12]" (identifier "param_1") ([ "[") (number_literal "0x12") (] "]")) (= "=") (identifier "uVar9")) (; ";")) (expression_statement "puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);" (assignment_expression "puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2)" (identifier "puVar3") (= "=") (cast_expression "(undefined2 *)(param_1[0x11] + uVar9 * 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x11] + uVar9 * 2)" (( "(") (binary_expression "param_1[0x11] + uVar9 * 2" (subscript_expression "param_1[0x11]" (identifier "param_1") ([ "[") (number_literal "0x11") (] "]")) (+ "+") (binary_expression "uVar9 * 2" (identifier "uVar9") (* "*") (number_literal "2"))) () ")")))) (; ";")) (expression_statement "*(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;" (assignment_expression "*(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3" (pointer_expression "*(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2)" (* "*") (cast_expression "(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x10] + (param_1[0xd] & uVar1) * 2)" (( "(") (binary_expression "param_1[0x10] + (param_1[0xd] & uVar1) * 2" (subscript_expression "param_1[0x10]" (identifier "param_1") ([ "[") (number_literal "0x10") (] "]")) (+ "+") (binary_expression "(param_1[0xd] & uVar1) * 2" (parenthesized_expression "(param_1[0xd] & uVar1)" (( "(") (binary_expression "param_1[0xd] & uVar1" (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")) (& "&") (identifier "uVar1")) () ")")) (* "*") (number_literal "2"))) () ")")))) (= "=") (pointer_expression "*puVar3" (* "*") (identifier "puVar3"))) (; ";")) (expression_statement "*puVar3 = (short)uVar1;" (assignment_expression "*puVar3 = (short)uVar1" (pointer_expression "*puVar3" (* "*") (identifier "puVar3")) (= "=") (cast_expression "(short)uVar1" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (identifier "uVar1"))) (; ";")) (} "}"))) (expression_statement "iVar11 = iVar11 + -1;" (assignment_expression "iVar11 = iVar11 + -1" (identifier "iVar11") (= "=") (binary_expression "iVar11 + -1" (identifier "iVar11") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "param_1[0x1e] = iVar11;" (assignment_expression "param_1[0x1e] = iVar11" (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]")) (= "=") (identifier "iVar11")) (; ";")) (expression_statement "uVar9 = uVar1;" (assignment_expression "uVar9 = uVar1" (identifier "uVar9") (= "=") (identifier "uVar1")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar11 != 0)" (( "(") (binary_expression "iVar11 != 0" (identifier "iVar11") (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "param_1[0x1a] = 0;" (assignment_expression "param_1[0x1a] = 0" (subscript_expression "param_1[0x1a]" (identifier "param_1") ([ "[") (number_literal "0x1a") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar15 = iVar6 + -1 + uVar7;" (assignment_expression "iVar15 = iVar6 + -1 + uVar7" (identifier "iVar15") (= "=") (binary_expression "iVar6 + -1 + uVar7" (binary_expression "iVar6 + -1" (identifier "iVar6") (+ "+") (number_literal "-1")) (+ "+") (identifier "uVar7"))) (; ";")) (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (= "=") (number_literal "2")) (; ";")) (expression_statement "param_1[0x1b] = iVar15;" (assignment_expression "param_1[0x1b] = iVar15" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (identifier "iVar15")) (; ";")) (if_statement "if (iVar10 == iVar5 + -1) {\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }" (if "if") (parenthesized_expression "(iVar10 == iVar5 + -1)" (( "(") (binary_expression "iVar10 == iVar5 + -1" (identifier "iVar10") (== "==") (binary_expression "iVar5 + -1" (identifier "iVar5") (+ "+") (number_literal "-1"))) () ")")) (compound_statement "{\n          iVar11 = param_1[0x17];\n          iVar10 = 0;\n          if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }\n          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);\n          param_1[0x17] = param_1[0x1b];\n          FUN_00012bc0();\n          if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }\n          uVar14 = param_1[0x1d];\n        }" ({ "{") (expression_statement "iVar11 = param_1[0x17];" (assignment_expression "iVar11 = param_1[0x17]" (identifier "iVar11") (= "=") (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (expression_statement "iVar10 = 0;" (assignment_expression "iVar10 = 0" (identifier "iVar10") (= "=") (number_literal "0")) (; ";")) (if_statement "if (-1 < iVar11) {\n            iVar10 = iVar11 + param_1[0xe];\n          }" (if "if") (parenthesized_expression "(-1 < iVar11)" (( "(") (binary_expression "-1 < iVar11" (number_literal "-1") (< "<") (identifier "iVar11")) () ")")) (compound_statement "{\n            iVar10 = iVar11 + param_1[0xe];\n          }" ({ "{") (expression_statement "iVar10 = iVar11 + param_1[0xe];" (assignment_expression "iVar10 = iVar11 + param_1[0xe]" (identifier "iVar10") (= "=") (binary_expression "iVar11 + param_1[0xe]" (identifier "iVar11") (+ "+") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")))) (; ";")) (} "}"))) (expression_statement "FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);" (call_expression "FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0)" (identifier "FUN_0001bd40") (argument_list "(param_1,iVar10,iVar15 - iVar11,0)" (( "(") (identifier "param_1") (, ",") (identifier "iVar10") (, ",") (binary_expression "iVar15 - iVar11" (identifier "iVar15") (- "-") (identifier "iVar11")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" (identifier "FUN_00012bc0") (argument_list "()" (( "(") () ")"))) (; ";")) (if_statement "if (*(int *)(*param_1 + 0x10) == 0) {\n            return false;\n          }" (if "if") (parenthesized_expression "(*(int *)(*param_1 + 0x10) == 0)" (( "(") (binary_expression "*(int *)(*param_1 + 0x10) == 0" (pointer_expression "*(int *)(*param_1 + 0x10)" (* "*") (cast_expression "(int *)(*param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n            return false;\n          }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (expression_statement "uVar14 = param_1[0x1d];" (assignment_expression "uVar14 = param_1[0x1d]" (identifier "uVar14") (= "=") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]"))) (; ";")) (} "}"))) (goto_statement "goto LAB_00012c70;" (goto "goto") (statement_identifier "LAB_00012c70") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }" (else "else") (compound_statement "{\n      uVar14 = param_1[0x1e];\n      uVar8 = param_1[0x1b];\n    }" ({ "{") (expression_statement "uVar14 = param_1[0x1e];" (assignment_expression "uVar14 = param_1[0x1e]" (identifier "uVar14") (= "=") (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]"))) (; ";")) (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" (identifier "uVar8") (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (} "}")))) (} "}"))) (while_statement "while( true ) {\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;\nLAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }\n    iVar15 = param_1[0x1d];\n    param_1[0x1a] = 1;\n    param_1[0x1b] = uVar8 + 1;\n    param_1[0x1d] = iVar15 - 1U;\n    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;\nLAB_00012d9a:\n    FUN_00012970();\n    uVar7 = param_1[0x1d];\n    if (0x105 < uVar7) goto LAB_00012c7c;\n    if (param_2 == 0) {\n      return false;\n    }\n    if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }\n    uVar8 = param_1[0x1b];\n    uVar14 = param_1[0x18];\n    iVar15 = param_1[0x1c];\n    if (2 < uVar7) break;\n    param_1[0x1e] = uVar14;\n    param_1[0x19] = iVar15;\n    param_1[0x18] = 2;\n  }" ({ "{") (if_statement "if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;" (if "if") (parenthesized_expression "((2 < uVar14) && ((uint)param_1[0x18] <= uVar14))" (( "(") (binary_expression "(2 < uVar14) && ((uint)param_1[0x18] <= uVar14)" (parenthesized_expression "(2 < uVar14)" (( "(") (binary_expression "2 < uVar14" (number_literal "2") (< "<") (identifier "uVar14")) () ")")) (&& "&&") (parenthesized_expression "((uint)param_1[0x18] <= uVar14)" (( "(") (binary_expression "(uint)param_1[0x18] <= uVar14" (cast_expression "(uint)param_1[0x18]" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]"))) (<= "<=") (identifier "uVar14")) () ")"))) () ")")) (goto_statement "goto LAB_00012e20;" (goto "goto") (statement_identifier "LAB_00012e20") (; ";"))) (labeled_statement "LAB_00012cfe:\n    if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }" (statement_identifier "LAB_00012cfe") (: ":") (if_statement "if (param_1[0x1a] != 0) {\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }" (if "if") (parenthesized_expression "(param_1[0x1a] != 0)" (( "(") (binary_expression "param_1[0x1a] != 0" (subscript_expression "param_1[0x1a]" (identifier "param_1") ([ "[") (number_literal "0x1a") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      iVar15 = param_1[0x5a8];\n      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);\n      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n      param_1[0x5a8] = iVar15 + 1;\n      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n      if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }\n      param_1[0x1b] = param_1[0x1b] + 1;\n      uVar14 = param_1[0x1d] - 1;\n      param_1[0x1d] = uVar14;\n      if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }\n      goto LAB_00012c70;\n    }" ({ "{") (expression_statement "iVar15 = param_1[0x5a8];" (assignment_expression "iVar15 = param_1[0x5a8]" (identifier "iVar15") (= "=") (subscript_expression "param_1[0x5a8]" (identifier "param_1") ([ "[") (number_literal "0x5a8") (] "]"))) (; ";")) (expression_statement "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);" (assignment_expression "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8)" (identifier "bVar4") (= "=") (pointer_expression "*(byte *)(param_1[0xe] + -1 + uVar8)" (* "*") (cast_expression "(byte *)(param_1[0xe] + -1 + uVar8)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0xe] + -1 + uVar8)" (( "(") (binary_expression "param_1[0xe] + -1 + uVar8" (binary_expression "param_1[0xe] + -1" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (number_literal "-1")) (+ "+") (identifier "uVar8")) () ")"))))) (; ";")) (expression_statement "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;" (assignment_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0" (pointer_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" (* "*") (cast_expression "(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x5a9] + iVar15 * 2)" (( "(") (binary_expression "param_1[0x5a9] + iVar15 * 2" (subscript_expression "param_1[0x5a9]" (identifier "param_1") ([ "[") (number_literal "0x5a9") (] "]")) (+ "+") (binary_expression "iVar15 * 2" (identifier "iVar15") (* "*") (number_literal "2"))) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0x5a8] = iVar15 + 1;" (assignment_expression "param_1[0x5a8] = iVar15 + 1" (subscript_expression "param_1[0x5a8]" (identifier "param_1") ([ "[") (number_literal "0x5a8") (] "]")) (= "=") (binary_expression "iVar15 + 1" (identifier "iVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(byte *)(param_1[0x5a6] + iVar15) = bVar4;" (assignment_expression "*(byte *)(param_1[0x5a6] + iVar15) = bVar4" (pointer_expression "*(byte *)(param_1[0x5a6] + iVar15)" (* "*") (cast_expression "(byte *)(param_1[0x5a6] + iVar15)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x5a6] + iVar15)" (( "(") (binary_expression "param_1[0x5a6] + iVar15" (subscript_expression "param_1[0x5a6]" (identifier "param_1") ([ "[") (number_literal "0x5a6") (] "]")) (+ "+") (identifier "iVar15")) () ")")))) (= "=") (identifier "bVar4")) (; ";")) (expression_statement "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;" (assignment_expression "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1" (pointer_expression "*(short *)(param_1 + bVar4 + 0x25)" (* "*") (cast_expression "(short *)(param_1 + bVar4 + 0x25)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + bVar4 + 0x25)" (( "(") (binary_expression "param_1 + bVar4 + 0x25" (binary_expression "param_1 + bVar4" (identifier "param_1") (+ "+") (identifier "bVar4")) (+ "+") (number_literal "0x25")) () ")")))) (= "=") (binary_expression "(short)param_1[bVar4 + 0x25] + 1" (cast_expression "(short)param_1[bVar4 + 0x25]" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (subscript_expression "param_1[bVar4 + 0x25]" (identifier "param_1") ([ "[") (binary_expression "bVar4 + 0x25" (identifier "bVar4") (+ "+") (number_literal "0x25")) (] "]"))) (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (param_1[0x5a8] == param_1[0x5a7] + -1) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }" (if "if") (parenthesized_expression "(param_1[0x5a8] == param_1[0x5a7] + -1)" (( "(") (binary_expression "param_1[0x5a8] == param_1[0x5a7] + -1" (subscript_expression "param_1[0x5a8]" (identifier "param_1") ([ "[") (number_literal "0x5a8") (] "]")) (== "==") (binary_expression "param_1[0x5a7] + -1" (subscript_expression "param_1[0x5a7]" (identifier "param_1") ([ "[") (number_literal "0x5a7") (] "]")) (+ "+") (number_literal "-1"))) () ")")) (compound_statement "{\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n      }" ({ "{") (expression_statement "iVar15 = param_1[0x17];" (assignment_expression "iVar15 = param_1[0x17]" (identifier "iVar15") (= "=") (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" (identifier "iVar11") (= "=") (number_literal "0")) (; ";")) (if_statement "if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }" (if "if") (parenthesized_expression "(-1 < iVar15)" (( "(") (binary_expression "-1 < iVar15" (number_literal "-1") (< "<") (identifier "iVar15")) () ")")) (compound_statement "{\n          iVar11 = iVar15 + param_1[0xe];\n        }" ({ "{") (expression_statement "iVar11 = iVar15 + param_1[0xe];" (assignment_expression "iVar11 = iVar15 + param_1[0xe]" (identifier "iVar11") (= "=") (binary_expression "iVar15 + param_1[0xe]" (identifier "iVar15") (+ "+") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")))) (; ";")) (} "}"))) (expression_statement "FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);" (call_expression "FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0)" (identifier "FUN_0001bd40") (argument_list "(param_1,iVar11,param_1[0x1b] - iVar15,0)" (( "(") (identifier "param_1") (, ",") (identifier "iVar11") (, ",") (binary_expression "param_1[0x1b] - iVar15" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (- "-") (identifier "iVar15")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" (identifier "FUN_00012bc0") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "param_1[0x1b] = param_1[0x1b] + 1;" (assignment_expression "param_1[0x1b] = param_1[0x1b] + 1" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (binary_expression "param_1[0x1b] + 1" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar14 = param_1[0x1d] - 1;" (assignment_expression "uVar14 = param_1[0x1d] - 1" (identifier "uVar14") (= "=") (binary_expression "param_1[0x1d] - 1" (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")) (- "-") (number_literal "1"))) (; ";")) (expression_statement "param_1[0x1d] = uVar14;" (assignment_expression "param_1[0x1d] = uVar14" (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")) (= "=") (identifier "uVar14")) (; ";")) (if_statement "if (*(int *)(*param_1 + 0x10) == 0) {\n        return false;\n      }" (if "if") (parenthesized_expression "(*(int *)(*param_1 + 0x10) == 0)" (( "(") (binary_expression "*(int *)(*param_1 + 0x10) == 0" (pointer_expression "*(int *)(*param_1 + 0x10)" (* "*") (cast_expression "(int *)(*param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        return false;\n      }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (goto_statement "goto LAB_00012c70;" (goto "goto") (statement_identifier "LAB_00012c70") (; ";")) (} "}")))) (expression_statement "iVar15 = param_1[0x1d];" (assignment_expression "iVar15 = param_1[0x1d]" (identifier "iVar15") (= "=") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]"))) (; ";")) (expression_statement "param_1[0x1a] = 1;" (assignment_expression "param_1[0x1a] = 1" (subscript_expression "param_1[0x1a]" (identifier "param_1") ([ "[") (number_literal "0x1a") (] "]")) (= "=") (number_literal "1")) (; ";")) (expression_statement "param_1[0x1b] = uVar8 + 1;" (assignment_expression "param_1[0x1b] = uVar8 + 1" (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (binary_expression "uVar8 + 1" (identifier "uVar8") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "param_1[0x1d] = iVar15 - 1U;" (assignment_expression "param_1[0x1d] = iVar15 - 1U" (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]")) (= "=") (binary_expression "iVar15 - 1U" (identifier "iVar15") (- "-") (number_literal "1U"))) (; ";")) (if_statement "if (0x105 < iVar15 - 1U) goto LAB_00012c7c;" (if "if") (parenthesized_expression "(0x105 < iVar15 - 1U)" (( "(") (binary_expression "0x105 < iVar15 - 1U" (number_literal "0x105") (< "<") (binary_expression "iVar15 - 1U" (identifier "iVar15") (- "-") (number_literal "1U"))) () ")")) (goto_statement "goto LAB_00012c7c;" (goto "goto") (statement_identifier "LAB_00012c7c") (; ";"))) (labeled_statement "LAB_00012d9a:\n    FUN_00012970();" (statement_identifier "LAB_00012d9a") (: ":") (expression_statement "FUN_00012970();" (call_expression "FUN_00012970()" (identifier "FUN_00012970") (argument_list "()" (( "(") () ")"))) (; ";"))) (expression_statement "uVar7 = param_1[0x1d];" (assignment_expression "uVar7 = param_1[0x1d]" (identifier "uVar7") (= "=") (subscript_expression "param_1[0x1d]" (identifier "param_1") ([ "[") (number_literal "0x1d") (] "]"))) (; ";")) (if_statement "if (0x105 < uVar7) goto LAB_00012c7c;" (if "if") (parenthesized_expression "(0x105 < uVar7)" (( "(") (binary_expression "0x105 < uVar7" (number_literal "0x105") (< "<") (identifier "uVar7")) () ")")) (goto_statement "goto LAB_00012c7c;" (goto "goto") (statement_identifier "LAB_00012c7c") (; ";"))) (if_statement "if (param_2 == 0) {\n      return false;\n    }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return false;\n    }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (if_statement "if (uVar7 == 0) {\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }" (if "if") (parenthesized_expression "(uVar7 == 0)" (( "(") (binary_expression "uVar7 == 0" (identifier "uVar7") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar14 = param_1[0x1b];\n      if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }\n      uVar8 = 2;\n      if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }\n      param_1[0x5ad] = uVar8;\n      if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }\n      if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }\n      return true;\n    }" ({ "{") (expression_statement "uVar14 = param_1[0x1b];" (assignment_expression "uVar14 = param_1[0x1b]" (identifier "uVar14") (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (if_statement "if (param_1[0x1a] != 0) {\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }" (if "if") (parenthesized_expression "(param_1[0x1a] != 0)" (( "(") (binary_expression "param_1[0x1a] != 0" (subscript_expression "param_1[0x1a]" (identifier "param_1") ([ "[") (number_literal "0x1a") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);\n        iVar15 = param_1[0x5a8];\n        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;\n        param_1[0x5a8] = iVar15 + 1;\n        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;\n        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;\n        uVar14 = param_1[0x1b];\n        param_1[0x1a] = 0;\n      }" ({ "{") (expression_statement "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);" (assignment_expression "bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14)" (identifier "bVar4") (= "=") (pointer_expression "*(byte *)(param_1[0xe] + -1 + uVar14)" (* "*") (cast_expression "(byte *)(param_1[0xe] + -1 + uVar14)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0xe] + -1 + uVar14)" (( "(") (binary_expression "param_1[0xe] + -1 + uVar14" (binary_expression "param_1[0xe] + -1" (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")) (+ "+") (number_literal "-1")) (+ "+") (identifier "uVar14")) () ")"))))) (; ";")) (expression_statement "iVar15 = param_1[0x5a8];" (assignment_expression "iVar15 = param_1[0x5a8]" (identifier "iVar15") (= "=") (subscript_expression "param_1[0x5a8]" (identifier "param_1") ([ "[") (number_literal "0x5a8") (] "]"))) (; ";")) (expression_statement "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;" (assignment_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0" (pointer_expression "*(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" (* "*") (cast_expression "(undefined2 *)(param_1[0x5a9] + iVar15 * 2)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x5a9] + iVar15 * 2)" (( "(") (binary_expression "param_1[0x5a9] + iVar15 * 2" (subscript_expression "param_1[0x5a9]" (identifier "param_1") ([ "[") (number_literal "0x5a9") (] "]")) (+ "+") (binary_expression "iVar15 * 2" (identifier "iVar15") (* "*") (number_literal "2"))) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "param_1[0x5a8] = iVar15 + 1;" (assignment_expression "param_1[0x5a8] = iVar15 + 1" (subscript_expression "param_1[0x5a8]" (identifier "param_1") ([ "[") (number_literal "0x5a8") (] "]")) (= "=") (binary_expression "iVar15 + 1" (identifier "iVar15") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(byte *)(param_1[0x5a6] + iVar15) = bVar4;" (assignment_expression "*(byte *)(param_1[0x5a6] + iVar15) = bVar4" (pointer_expression "*(byte *)(param_1[0x5a6] + iVar15)" (* "*") (cast_expression "(byte *)(param_1[0x5a6] + iVar15)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1[0x5a6] + iVar15)" (( "(") (binary_expression "param_1[0x5a6] + iVar15" (subscript_expression "param_1[0x5a6]" (identifier "param_1") ([ "[") (number_literal "0x5a6") (] "]")) (+ "+") (identifier "iVar15")) () ")")))) (= "=") (identifier "bVar4")) (; ";")) (expression_statement "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;" (assignment_expression "*(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1" (pointer_expression "*(short *)(param_1 + bVar4 + 0x25)" (* "*") (cast_expression "(short *)(param_1 + bVar4 + 0x25)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + bVar4 + 0x25)" (( "(") (binary_expression "param_1 + bVar4 + 0x25" (binary_expression "param_1 + bVar4" (identifier "param_1") (+ "+") (identifier "bVar4")) (+ "+") (number_literal "0x25")) () ")")))) (= "=") (binary_expression "(short)param_1[bVar4 + 0x25] + 1" (cast_expression "(short)param_1[bVar4 + 0x25]" (( "(") (type_descriptor "short" (sized_type_specifier "short" (short "short"))) () ")") (subscript_expression "param_1[bVar4 + 0x25]" (identifier "param_1") ([ "[") (binary_expression "bVar4 + 0x25" (identifier "bVar4") (+ "+") (number_literal "0x25")) (] "]"))) (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar14 = param_1[0x1b];" (assignment_expression "uVar14 = param_1[0x1b]" (identifier "uVar14") (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (expression_statement "param_1[0x1a] = 0;" (assignment_expression "param_1[0x1a] = 0" (subscript_expression "param_1[0x1a]" (identifier "param_1") ([ "[") (number_literal "0x1a") (] "]")) (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "uVar8 = 2;" (assignment_expression "uVar8 = 2" (identifier "uVar8") (= "=") (number_literal "2")) (; ";")) (if_statement "if (uVar14 < 3) {\n        uVar8 = uVar14;\n      }" (if "if") (parenthesized_expression "(uVar14 < 3)" (( "(") (binary_expression "uVar14 < 3" (identifier "uVar14") (< "<") (number_literal "3")) () ")")) (compound_statement "{\n        uVar8 = uVar14;\n      }" ({ "{") (expression_statement "uVar8 = uVar14;" (assignment_expression "uVar8 = uVar14" (identifier "uVar8") (= "=") (identifier "uVar14")) (; ";")) (} "}"))) (expression_statement "param_1[0x5ad] = uVar8;" (assignment_expression "param_1[0x5ad] = uVar8" (subscript_expression "param_1[0x5ad]" (identifier "param_1") ([ "[") (number_literal "0x5ad") (] "]")) (= "=") (identifier "uVar8")) (; ";")) (if_statement "if (param_2 == 4) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }" (if "if") (parenthesized_expression "(param_2 == 4)" (( "(") (binary_expression "param_2 == 4" (identifier "param_2") (== "==") (number_literal "4")) () ")")) (compound_statement "{\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');\n      }" ({ "{") (expression_statement "iVar15 = param_1[0x17];" (assignment_expression "iVar15 = param_1[0x17]" (identifier "iVar15") (= "=") (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" (identifier "iVar11") (= "=") (number_literal "0")) (; ";")) (if_statement "if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }" (if "if") (parenthesized_expression "(-1 < iVar15)" (( "(") (binary_expression "-1 < iVar15" (number_literal "-1") (< "<") (identifier "iVar15")) () ")")) (compound_statement "{\n          iVar11 = iVar15 + param_1[0xe];\n        }" ({ "{") (expression_statement "iVar11 = iVar15 + param_1[0xe];" (assignment_expression "iVar11 = iVar15 + param_1[0xe]" (identifier "iVar11") (= "=") (binary_expression "iVar15 + param_1[0xe]" (identifier "iVar15") (+ "+") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")))) (; ";")) (} "}"))) (expression_statement "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);" (call_expression "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1)" (identifier "FUN_0001bd40") (argument_list "(param_1,iVar11,uVar14 - iVar15,1)" (( "(") (identifier "param_1") (, ",") (identifier "iVar11") (, ",") (binary_expression "uVar14 - iVar15" (identifier "uVar14") (- "-") (identifier "iVar15")) (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" (identifier "FUN_00012bc0") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');" (return "return") (cast_expression "(bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02')" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (parenthesized_expression "((*(int *)(*param_1 + 0x10) != 0) + '\x02')" (( "(") (binary_expression "(*(int *)(*param_1 + 0x10) != 0) + '\x02'" (parenthesized_expression "(*(int *)(*param_1 + 0x10) != 0)" (( "(") (binary_expression "*(int *)(*param_1 + 0x10) != 0" (pointer_expression "*(int *)(*param_1 + 0x10)" (* "*") (cast_expression "(int *)(*param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (+ "+") (char_literal "'\x02'" (' "'") (escape_sequence "\x02") (' "'"))) () ")"))) (; ";")) (} "}"))) (if_statement "if (param_1[0x5a8] != 0) {\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }" (if "if") (parenthesized_expression "(param_1[0x5a8] != 0)" (( "(") (binary_expression "param_1[0x5a8] != 0" (subscript_expression "param_1[0x5a8]" (identifier "param_1") ([ "[") (number_literal "0x5a8") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        iVar15 = param_1[0x17];\n        iVar11 = 0;\n        if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }\n        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);\n        param_1[0x17] = param_1[0x1b];\n        FUN_00012bc0();\n        return *(int *)(*param_1 + 0x10) != 0;\n      }" ({ "{") (expression_statement "iVar15 = param_1[0x17];" (assignment_expression "iVar15 = param_1[0x17]" (identifier "iVar15") (= "=") (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]"))) (; ";")) (expression_statement "iVar11 = 0;" (assignment_expression "iVar11 = 0" (identifier "iVar11") (= "=") (number_literal "0")) (; ";")) (if_statement "if (-1 < iVar15) {\n          iVar11 = iVar15 + param_1[0xe];\n        }" (if "if") (parenthesized_expression "(-1 < iVar15)" (( "(") (binary_expression "-1 < iVar15" (number_literal "-1") (< "<") (identifier "iVar15")) () ")")) (compound_statement "{\n          iVar11 = iVar15 + param_1[0xe];\n        }" ({ "{") (expression_statement "iVar11 = iVar15 + param_1[0xe];" (assignment_expression "iVar11 = iVar15 + param_1[0xe]" (identifier "iVar11") (= "=") (binary_expression "iVar15 + param_1[0xe]" (identifier "iVar15") (+ "+") (subscript_expression "param_1[0xe]" (identifier "param_1") ([ "[") (number_literal "0xe") (] "]")))) (; ";")) (} "}"))) (expression_statement "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);" (call_expression "FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0)" (identifier "FUN_0001bd40") (argument_list "(param_1,iVar11,uVar14 - iVar15,0)" (( "(") (identifier "param_1") (, ",") (identifier "iVar11") (, ",") (binary_expression "uVar14 - iVar15" (identifier "uVar14") (- "-") (identifier "iVar15")) (, ",") (number_literal "0") () ")"))) (; ";")) (expression_statement "param_1[0x17] = param_1[0x1b];" (assignment_expression "param_1[0x17] = param_1[0x1b]" (subscript_expression "param_1[0x17]" (identifier "param_1") ([ "[") (number_literal "0x17") (] "]")) (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (expression_statement "FUN_00012bc0();" (call_expression "FUN_00012bc0()" (identifier "FUN_00012bc0") (argument_list "()" (( "(") () ")"))) (; ";")) (return_statement "return *(int *)(*param_1 + 0x10) != 0;" (return "return") (binary_expression "*(int *)(*param_1 + 0x10) != 0" (pointer_expression "*(int *)(*param_1 + 0x10)" (* "*") (cast_expression "(int *)(*param_1 + 0x10)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_1 + 0x10)" (( "(") (binary_expression "*param_1 + 0x10" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) (; ";")) (} "}"))) (return_statement "return true;" (return "return") (true "true") (; ";")) (} "}"))) (expression_statement "uVar8 = param_1[0x1b];" (assignment_expression "uVar8 = param_1[0x1b]" (identifier "uVar8") (= "=") (subscript_expression "param_1[0x1b]" (identifier "param_1") ([ "[") (number_literal "0x1b") (] "]"))) (; ";")) (expression_statement "uVar14 = param_1[0x18];" (assignment_expression "uVar14 = param_1[0x18]" (identifier "uVar14") (= "=") (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]"))) (; ";")) (expression_statement "iVar15 = param_1[0x1c];" (assignment_expression "iVar15 = param_1[0x1c]" (identifier "iVar15") (= "=") (subscript_expression "param_1[0x1c]" (identifier "param_1") ([ "[") (number_literal "0x1c") (] "]"))) (; ";")) (if_statement "if (2 < uVar7) break;" (if "if") (parenthesized_expression "(2 < uVar7)" (( "(") (binary_expression "2 < uVar7" (number_literal "2") (< "<") (identifier "uVar7")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "param_1[0x1e] = uVar14;" (assignment_expression "param_1[0x1e] = uVar14" (subscript_expression "param_1[0x1e]" (identifier "param_1") ([ "[") (number_literal "0x1e") (] "]")) (= "=") (identifier "uVar14")) (; ";")) (expression_statement "param_1[0x19] = iVar15;" (assignment_expression "param_1[0x19] = iVar15" (subscript_expression "param_1[0x19]" (identifier "param_1") ([ "[") (number_literal "0x19") (] "]")) (= "=") (identifier "iVar15")) (; ";")) (expression_statement "param_1[0x18] = 2;" (assignment_expression "param_1[0x18] = 2" (subscript_expression "param_1[0x18]" (identifier "param_1") ([ "[") (number_literal "0x18") (] "]")) (= "=") (number_literal "2")) (; ";")) (} "}"))) (goto_statement "goto LAB_00012c85;" (goto "goto") (statement_identifier "LAB_00012c85") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */
/* WARNING: Unknown calling convention */

type_1 function_1(type_2 *s,int var_18)

{
  type_3 var_10;
  type_4 bVar2;
  type_5 *pPVar3;
  type_6 var_12;
  type_6 var_13;
  type_6 var_9;
  int var_14;
  type_3 var_11;
  type_6 var_5;
  type_3 var_2;
  type_7 *pBVar11;
  type_3 var_3;
  type_6 var_7;
  short var_6;
  type_8 var_8;
  type_3 var_1;
  
  var_1 = s->lookahead;
LAB_00012c70:
  if (var_1 < 0x106) goto LAB_00012d9a;
LAB_00012c7c:
  var_2 = s->strstart;
  var_1 = s->match_length;
  var_5 = s->match_start;
LAB_00012c85:
  var_11 = ((type_3)s->window[var_2 + 2] ^ s->ins_h << ((type_4)s->hash_shift & 0x1f)) & s->hash_mask;
  pPVar3 = s->head;
  s->ins_h = var_11;
  var_8 = pPVar3[var_11];
  var_3 = (type_3)var_8;
  s->prev[s->w_mask & var_2] = var_8;
  pPVar3[var_11] = (type_8)var_2;
  s->prev_length = var_1;
  s->prev_match = var_5;
  s->match_length = 2;
  if (((var_3 != 0) && (var_1 < s->max_lazy_match)) && (var_2 - var_3 <= s->w_size - 0x106)) {
    var_5 = var_4(s,var_3);
    s->match_length = var_5;
    if (var_5 < 6) {
      var_2 = s->strstart;
      var_1 = s->prev_length;
      if ((s->strategy == 1) || ((var_5 == 3 && (0x1000 < var_2 - s->match_start)))) {
        s->match_length = 2;
        if (var_1 < 3) goto LAB_00012cfe;
LAB_00012e20:
        var_5 = s->lookahead;
        var_7 = s->last_lit;
        var_6 = (short)var_2 - (short)s->prev_match;
        var_8 = var_6 - 2;
        s->d_buf[var_7] = var_6 - 1;
        s->last_lit = var_7 + 1;
        s->l_buf[var_7] = (uchf)(var_1 - 3);
        s->dyn_ltree[(type_4)_length_code[var_1 - 3 & 0xff] + 0x101].fc.freq =
             s->dyn_ltree[(type_4)_length_code[var_1 - 3 & 0xff] + 0x101].fc.freq + 1;
        if (var_8 < 0x100) {
          bVar2 = (&_dist_code)[var_8];
        }
        else {
          bVar2 = (&DAT_00022640)[var_8 >> 7];
        }
        s->dyn_dtree[bVar2].fc.freq = s->dyn_dtree[bVar2].fc.freq + 1;
        var_12 = s->last_lit;
        var_13 = s->lit_bufsize;
        var_9 = s->prev_length;
        var_1 = (s->lookahead + 1) - var_9;
        var_7 = var_9 - 2;
        var_11 = s->strstart;
        s->lookahead = var_1;
        s->prev_length = var_7;
        var_3 = var_11;
        do {
          var_10 = var_3 + 1;
          s->strstart = var_10;
          if (var_10 <= (var_2 - 3) + var_5) {
            var_3 = (s->ins_h << ((type_4)s->hash_shift & 0x1f) ^ (type_3)s->window[var_3 + 3]) &
                     s->hash_mask;
            pPVar3 = s->head;
            s->ins_h = var_3;
            s->prev[s->w_mask & var_10] = pPVar3[var_3];
            pPVar3[var_3] = (type_5)var_10;
          }
          var_7 = var_7 - 1;
          s->prev_length = var_7;
          var_3 = var_10;
        } while (var_7 != 0);
        s->match_available = 0;
        var_5 = (var_9 - 1) + var_11;
        s->match_length = 2;
        s->strstart = var_5;
        if (var_12 == var_13 - 1) {
          var_14 = s->block_start;
          pBVar11 = (type_7 *)0x0;
          if (-1 < var_14) {
            pBVar11 = s->window + var_14;
          }
          var_15(s,(type_9 *)pBVar11,var_5 - var_14,0);
          s->block_start = s->strstart;
          var_16(s->strm);
          if (s->strm->avail_out == 0) {
            return need_more;
          }
          var_1 = s->lookahead;
        }
        goto LAB_00012c70;
      }
    }
    else {
      var_1 = s->prev_length;
      var_2 = s->strstart;
    }
  }
  while( true ) {
    if ((2 < var_1) && (s->match_length <= var_1)) goto LAB_00012e20;
LAB_00012cfe:
    if (s->match_available != 0) {
      var_5 = s->last_lit;
      bVar2 = s->window[var_2 - 1];
      s->d_buf[var_5] = 0;
      s->last_lit = var_5 + 1;
      s->l_buf[var_5] = bVar2;
      s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;
      if (s->last_lit == s->lit_bufsize - 1) {
        var_14 = s->block_start;
        pBVar11 = (type_7 *)0x0;
        if (-1 < var_14) {
          pBVar11 = s->window + var_14;
        }
        var_15(s,(type_9 *)pBVar11,s->strstart - var_14,0);
        s->block_start = s->strstart;
        var_16(s->strm);
      }
      s->strstart = s->strstart + 1;
      var_1 = s->lookahead - 1;
      s->lookahead = var_1;
      if (s->strm->avail_out == 0) {
        return need_more;
      }
      goto LAB_00012c70;
    }
    s->match_available = 1;
    s->strstart = var_2 + 1;
    var_1 = s->lookahead - 1;
    s->lookahead = var_1;
    if (0x105 < var_1) goto LAB_00012c7c;
LAB_00012d9a:
    var_17(s);
    var_11 = s->lookahead;
    if (0x105 < var_11) goto LAB_00012c7c;
    if (var_18 == 0) {
      return need_more;
    }
    if (var_11 == 0) {
      var_1 = s->strstart;
      if (s->match_available != 0) {
        bVar2 = s->window[var_1 - 1];
        var_5 = s->last_lit;
        s->d_buf[var_5] = 0;
        s->last_lit = var_5 + 1;
        s->l_buf[var_5] = bVar2;
        s->dyn_ltree[bVar2].fc.freq = s->dyn_ltree[bVar2].fc.freq + 1;
        var_1 = s->strstart;
        s->match_available = 0;
      }
      var_2 = 2;
      if (var_1 < 3) {
        var_2 = var_1;
      }
      s->insert = var_2;
      if (var_18 == 4) {
        var_14 = s->block_start;
        pBVar11 = (type_7 *)0x0;
        if (-1 < var_14) {
          pBVar11 = s->window + var_14;
        }
        var_15(s,(type_9 *)pBVar11,var_1 - var_14,1);
        s->block_start = s->strstart;
        var_16(s->strm);
        return (s->strm->avail_out != 0) + var_19;
      }
      if (s->last_lit != 0) {
        var_14 = s->block_start;
        pBVar11 = (type_7 *)0x0;
        if (-1 < var_14) {
          pBVar11 = s->window + var_14;
        }
        var_15(s,(type_9 *)pBVar11,var_1 - var_14,0);
        s->block_start = s->strstart;
        var_16(s->strm);
        return (type_3)(s->strm->avail_out != 0);
      }
      return block_done;
    }
    var_2 = s->strstart;
    var_1 = s->match_length;
    var_5 = s->match_start;
    if (2 < var_11) break;
    s->prev_length = var_1;
    s->prev_match = var_5;
    s->match_length = 2;
  }
  goto LAB_00012c85;
}


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

/* WARNING: Function: __i686.get_pc_thunk.ax replaced with injection: get_pc_thunk_ax */

bool MASKED(int *param_1,int param_2)

{
  uint uVar1;
  ushort *puVar2;
  undefined2 *puVar3;
  byte bVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  int iVar11;
  short sVar12;
  ushort uVar13;
  uint uVar14;
  int iVar15;
  
  uVar14 = param_1[0x1d];
LAB_00012c70:
  if (uVar14 < 0x106) goto LAB_00012d9a;
LAB_00012c7c:
  uVar8 = param_1[0x1b];
  uVar14 = param_1[0x18];
  iVar15 = param_1[0x1c];
LAB_00012c85:
  uVar7 = ((uint)*(byte *)(param_1[0xe] + 2 + uVar8) ^ param_1[0x12] << ((byte)param_1[0x16] & 0x1f)
          ) & param_1[0x15];
  param_1[0x12] = uVar7;
  puVar2 = (ushort *)(param_1[0x11] + uVar7 * 2);
  uVar13 = *puVar2;
  *(ushort *)(param_1[0x10] + (param_1[0xd] & uVar8) * 2) = uVar13;
  *puVar2 = (ushort)uVar8;
  param_1[0x1e] = uVar14;
  param_1[0x19] = iVar15;
  param_1[0x18] = 2;
  if (((uVar13 != 0) && (uVar14 < (uint)param_1[0x20])) && (uVar8 - uVar13 <= param_1[0xb] - 0x106U)
     ) {
    uVar7 = FUN_00012660();
    param_1[0x18] = uVar7;
    if (uVar7 < 6) {
      uVar8 = param_1[0x1b];
      uVar14 = param_1[0x1e];
      if ((param_1[0x22] == 1) || ((uVar7 == 3 && (0x1000 < uVar8 - param_1[0x1c])))) {
        param_1[0x18] = 2;
        if (uVar14 < 3) goto LAB_00012cfe;
LAB_00012e20:
        iVar15 = param_1[0x1d];
        iVar11 = param_1[0x5a8];
        sVar12 = (short)uVar8 - (short)param_1[0x19];
        uVar13 = sVar12 - 2;
        *(short *)(param_1[0x5a9] + iVar11 * 2) = sVar12 + -1;
        param_1[0x5a8] = iVar11 + 1;
        *(char *)(param_1[0x5a6] + iVar11) = (char)(uVar14 - 3);
        *(short *)(param_1 + (byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126) =
             (short)param_1[(byte)(&DAT_00022440)[uVar14 - 3 & 0xff] + 0x126] + 1;
        if (uVar13 < 0x100) {
          bVar4 = (&DAT_00022540)[uVar13];
        }
        else {
          bVar4 = (&DAT_00022640)[uVar13 >> 7];
        }
        *(short *)(param_1 + bVar4 + 0x262) = (short)param_1[bVar4 + 0x262] + 1;
        iVar10 = param_1[0x5a8];
        iVar5 = param_1[0x5a7];
        iVar6 = param_1[0x1e];
        uVar14 = (param_1[0x1d] + 1) - iVar6;
        iVar11 = iVar6 + -2;
        uVar7 = param_1[0x1b];
        param_1[0x1d] = uVar14;
        param_1[0x1e] = iVar11;
        uVar9 = uVar7;
        do {
          uVar1 = uVar9 + 1;
          param_1[0x1b] = uVar1;
          if (uVar1 <= (uVar8 - 3) + iVar15) {
            uVar9 = (param_1[0x12] << ((byte)param_1[0x16] & 0x1f) ^
                    (uint)*(byte *)(param_1[0xe] + 3 + uVar9)) & param_1[0x15];
            param_1[0x12] = uVar9;
            puVar3 = (undefined2 *)(param_1[0x11] + uVar9 * 2);
            *(undefined2 *)(param_1[0x10] + (param_1[0xd] & uVar1) * 2) = *puVar3;
            *puVar3 = (short)uVar1;
          }
          iVar11 = iVar11 + -1;
          param_1[0x1e] = iVar11;
          uVar9 = uVar1;
        } while (iVar11 != 0);
        param_1[0x1a] = 0;
        iVar15 = iVar6 + -1 + uVar7;
        param_1[0x18] = 2;
        param_1[0x1b] = iVar15;
        if (iVar10 == iVar5 + -1) {
          iVar11 = param_1[0x17];
          iVar10 = 0;
          if (-1 < iVar11) {
            iVar10 = iVar11 + param_1[0xe];
          }
          FUN_0001bd40(param_1,iVar10,iVar15 - iVar11,0);
          param_1[0x17] = param_1[0x1b];
          FUN_00012bc0();
          if (*(int *)(*param_1 + 0x10) == 0) {
            return false;
          }
          uVar14 = param_1[0x1d];
        }
        goto LAB_00012c70;
      }
    }
    else {
      uVar14 = param_1[0x1e];
      uVar8 = param_1[0x1b];
    }
  }
  while( true ) {
    if ((2 < uVar14) && ((uint)param_1[0x18] <= uVar14)) goto LAB_00012e20;
LAB_00012cfe:
    if (param_1[0x1a] != 0) {
      iVar15 = param_1[0x5a8];
      bVar4 = *(byte *)(param_1[0xe] + -1 + uVar8);
      *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;
      param_1[0x5a8] = iVar15 + 1;
      *(byte *)(param_1[0x5a6] + iVar15) = bVar4;
      *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;
      if (param_1[0x5a8] == param_1[0x5a7] + -1) {
        iVar15 = param_1[0x17];
        iVar11 = 0;
        if (-1 < iVar15) {
          iVar11 = iVar15 + param_1[0xe];
        }
        FUN_0001bd40(param_1,iVar11,param_1[0x1b] - iVar15,0);
        param_1[0x17] = param_1[0x1b];
        FUN_00012bc0();
      }
      param_1[0x1b] = param_1[0x1b] + 1;
      uVar14 = param_1[0x1d] - 1;
      param_1[0x1d] = uVar14;
      if (*(int *)(*param_1 + 0x10) == 0) {
        return false;
      }
      goto LAB_00012c70;
    }
    iVar15 = param_1[0x1d];
    param_1[0x1a] = 1;
    param_1[0x1b] = uVar8 + 1;
    param_1[0x1d] = iVar15 - 1U;
    if (0x105 < iVar15 - 1U) goto LAB_00012c7c;
LAB_00012d9a:
    FUN_00012970();
    uVar7 = param_1[0x1d];
    if (0x105 < uVar7) goto LAB_00012c7c;
    if (param_2 == 0) {
      return false;
    }
    if (uVar7 == 0) {
      uVar14 = param_1[0x1b];
      if (param_1[0x1a] != 0) {
        bVar4 = *(byte *)(param_1[0xe] + -1 + uVar14);
        iVar15 = param_1[0x5a8];
        *(undefined2 *)(param_1[0x5a9] + iVar15 * 2) = 0;
        param_1[0x5a8] = iVar15 + 1;
        *(byte *)(param_1[0x5a6] + iVar15) = bVar4;
        *(short *)(param_1 + bVar4 + 0x25) = (short)param_1[bVar4 + 0x25] + 1;
        uVar14 = param_1[0x1b];
        param_1[0x1a] = 0;
      }
      uVar8 = 2;
      if (uVar14 < 3) {
        uVar8 = uVar14;
      }
      param_1[0x5ad] = uVar8;
      if (param_2 == 4) {
        iVar15 = param_1[0x17];
        iVar11 = 0;
        if (-1 < iVar15) {
          iVar11 = iVar15 + param_1[0xe];
        }
        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,1);
        param_1[0x17] = param_1[0x1b];
        FUN_00012bc0();
        return (bool)((*(int *)(*param_1 + 0x10) != 0) + '\x02');
      }
      if (param_1[0x5a8] != 0) {
        iVar15 = param_1[0x17];
        iVar11 = 0;
        if (-1 < iVar15) {
          iVar11 = iVar15 + param_1[0xe];
        }
        FUN_0001bd40(param_1,iVar11,uVar14 - iVar15,0);
        param_1[0x17] = param_1[0x1b];
        FUN_00012bc0();
        return *(int *)(*param_1 + 0x10) != 0;
      }
      return true;
    }
    uVar8 = param_1[0x1b];
    uVar14 = param_1[0x18];
    iVar15 = param_1[0x1c];
    if (2 < uVar7) break;
    param_1[0x1e] = uVar14;
    param_1[0x19] = iVar15;
    param_1[0x18] = 2;
  }
  goto LAB_00012c85;
}

