BZ2_decompress
0x002966f0 · 9607 bytes · __cdecl
_Z14BZ2_decompressP6DState
Decompiled
undefined (1 param)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* BZ2_decompress(DState*) */
undefined4 BZ2_decompress(DState *param_1)
{
uint *puVar1;
ushort *puVar2;
byte bVar3;
DState DVar4;
ushort uVar5;
int *piVar6;
char cVar7;
DState DVar8;
uint uVar9;
uint uVar10;
undefined4 uVar11;
int iVar12;
uint uVar13;
DState *pDVar14;
int iVar15;
byte *pbVar16;
int iVar17;
DState *pDVar18;
int iVar19;
DState *pDVar20;
int in_GS_OFFSET;
DState local_8d;
DState *local_8c;
undefined4 local_88;
uint local_84;
int local_80;
int local_7c;
DState *local_78;
DState *local_74;
DState *local_70;
int local_6c;
int local_68;
int local_64;
uint local_60;
uint local_5c;
int local_58;
DState *local_54;
uint local_50;
uint local_4c;
uint local_48;
uint local_44;
uint local_40;
int local_3c;
DState *local_38;
uint local_34;
int local_30;
DState aDStack_27 [7];
int local_20;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
iVar17 = *(int *)param_1;
if (*(int *)(param_1 + 4) == 10) {
*(undefined4 *)(param_1 + 0xfa14) = 0;
pDVar20 = (DState *)0x0;
*(undefined4 *)(param_1 + 0xfa18) = 0;
*(undefined4 *)(param_1 + 0xfa1c) = 0;
*(undefined4 *)(param_1 + 0xfa20) = 0;
*(undefined4 *)(param_1 + 0xfa24) = 0;
*(undefined4 *)(param_1 + 0xfa28) = 0;
*(undefined4 *)(param_1 + 0xfa2c) = 0;
*(undefined4 *)(param_1 + 0xfa30) = 0;
*(undefined4 *)(param_1 + 0xfa34) = 0;
*(undefined4 *)(param_1 + 0xfa38) = 0;
*(undefined4 *)(param_1 + 0xfa3c) = 0;
*(undefined4 *)(param_1 + 0xfa40) = 0;
*(undefined4 *)(param_1 + 0xfa44) = 0;
*(undefined4 *)(param_1 + 0xfa48) = 0;
*(undefined4 *)(param_1 + 0xfa4c) = 0;
*(undefined4 *)(param_1 + 0xfa50) = 0;
*(undefined4 *)(param_1 + 0xfa54) = 0;
*(undefined4 *)(param_1 + 0xfa58) = 0;
*(undefined4 *)(param_1 + 0xfa5c) = 0;
*(undefined4 *)(param_1 + 0xfa60) = 0;
*(undefined4 *)(param_1 + 0xfa64) = 0;
*(undefined4 *)(param_1 + 0xfa68) = 0;
*(undefined4 *)(param_1 + 0xfa6c) = 0;
*(undefined4 *)(param_1 + 0xfa70) = 0;
local_78 = (DState *)0x0;
local_74 = (DState *)0x0;
local_70 = (DState *)0x0;
local_80 = 0;
local_84 = 0;
local_4c = 0;
local_34 = 0;
local_30 = 0;
local_88 = 0;
local_5c = 0;
local_7c = 0;
local_3c = 0;
local_38 = (DState *)0x0;
local_6c = 0;
local_44 = 0;
local_58 = 0;
local_68 = 0;
local_54 = (DState *)0x0;
local_50 = 0;
local_48 = 0;
local_64 = 0;
local_60 = 0;
local_40 = 0;
}
else {
local_88 = *(undefined4 *)(param_1 + 0xfa50);
local_78 = *(DState **)(param_1 + 0xfa70);
local_74 = *(DState **)(param_1 + 0xfa6c);
local_70 = *(DState **)(param_1 + 0xfa68);
local_80 = *(int *)(param_1 + 0xfa64);
local_84 = *(uint *)(param_1 + 0xfa60);
local_4c = *(uint *)(param_1 + 0xfa5c);
local_34 = *(uint *)(param_1 + 0xfa58);
local_30 = *(int *)(param_1 + 0xfa54);
local_5c = *(uint *)(param_1 + 0xfa4c);
local_7c = *(int *)(param_1 + 0xfa48);
local_3c = *(int *)(param_1 + 0xfa44);
local_38 = *(DState **)(param_1 + 0xfa40);
local_6c = *(int *)(param_1 + 0xfa3c);
local_44 = *(uint *)(param_1 + 0xfa38);
local_58 = *(int *)(param_1 + 0xfa34);
local_68 = *(int *)(param_1 + 0xfa30);
local_54 = *(DState **)(param_1 + 0xfa2c);
local_50 = *(uint *)(param_1 + 0xfa28);
local_48 = *(uint *)(param_1 + 0xfa24);
local_64 = *(int *)(param_1 + 0xfa20);
local_60 = *(uint *)(param_1 + 0xfa1c);
local_40 = *(uint *)(param_1 + 0xfa18);
pDVar20 = *(DState **)(param_1 + 0xfa14);
}
iVar15 = local_68;
iVar12 = local_3c;
switch(*(int *)(param_1 + 4)) {
case 10:
*(undefined4 *)(param_1 + 4) = 10;
while (iVar19 = *(int *)(param_1 + 0x20), iVar19 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar19 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
iVar19 = iVar19 + -8;
*(int *)(param_1 + 0x20) = iVar19;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar19 & 0x1f)) == 'B') goto LAB_00298168;
goto LAB_002985b8;
case 0xb:
iVar19 = *(int *)(param_1 + 0x20);
LAB_00298168:
*(undefined4 *)(param_1 + 4) = 0xb;
while (iVar19 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar19 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar19 = *(int *)(param_1 + 0x20);
}
iVar19 = iVar19 + -8;
*(int *)(param_1 + 0x20) = iVar19;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar19 & 0x1f)) == 'Z') goto LAB_00297ef3;
goto LAB_002985b8;
case 0xc:
iVar19 = *(int *)(param_1 + 0x20);
LAB_00297ef3:
*(undefined4 *)(param_1 + 4) = 0xc;
while (iVar19 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar19 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar19 = *(int *)(param_1 + 0x20);
}
iVar19 = iVar19 + -8;
*(int *)(param_1 + 0x20) = iVar19;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar19 & 0x1f)) == 'h') goto LAB_00297e04;
LAB_002985b8:
uVar11 = 0xfffffffb;
goto LAB_00297b98;
case 0xd:
iVar19 = *(int *)(param_1 + 0x20);
LAB_00297e04:
*(undefined4 *)(param_1 + 4) = 0xd;
while (iVar19 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar19 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar19 = *(int *)(param_1 + 0x20);
}
*(int *)(param_1 + 0x20) = iVar19 + -8;
uVar10 = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar19 + -8) & 0x1f) & 0xff;
if (8 < uVar10 - 0x31) {
*(uint *)(param_1 + 0x24) = uVar10;
uVar11 = 0xfffffffb;
goto LAB_00297b98;
}
iVar19 = uVar10 - 0x30;
*(int *)(param_1 + 0x24) = iVar19;
if (param_1[0x28] == (DState)0x0) {
iVar17 = (**(code **)(iVar17 + 0x24))(*(undefined4 *)(iVar17 + 0x2c),iVar19 * 400000,1);
*(int *)(param_1 + 0xc4c) = iVar17;
LAB_00297ed8:
if (iVar17 != 0) goto switchD_00296802_caseD_e;
}
else {
uVar11 = (**(code **)(iVar17 + 0x24))(*(undefined4 *)(iVar17 + 0x2c),iVar19 * 200000);
*(undefined4 *)(param_1 + 0xc50) = uVar11;
iVar17 = (**(code **)(iVar17 + 0x24))
(*(undefined4 *)(iVar17 + 0x2c),*(int *)(param_1 + 0x24) * 100000 >> 1,1);
*(int *)(param_1 + 0xc54) = iVar17;
if (*(int *)(param_1 + 0xc50) != 0) goto LAB_00297ed8;
}
uVar11 = 0xfffffffd;
goto LAB_00297b98;
case 0xe:
switchD_00296802_caseD_e:
*(undefined4 *)(param_1 + 4) = 0xe;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
cVar7 = (char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f));
if (cVar7 == '\x17') goto LAB_00297a2c;
if (cVar7 == '1') goto LAB_002979bc;
break;
case 0xf:
iVar17 = *(int *)(param_1 + 0x20);
LAB_002979bc:
*(undefined4 *)(param_1 + 4) = 0xf;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'A') goto LAB_00297948;
break;
case 0x10:
iVar17 = *(int *)(param_1 + 0x20);
LAB_00297948:
*(undefined4 *)(param_1 + 4) = 0x10;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'Y') goto LAB_0029785c;
break;
case 0x11:
iVar17 = *(int *)(param_1 + 0x20);
LAB_0029785c:
*(undefined4 *)(param_1 + 4) = 0x11;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == '&') goto LAB_002977e9;
break;
case 0x12:
iVar17 = *(int *)(param_1 + 0x20);
LAB_002977e9:
*(undefined4 *)(param_1 + 4) = 0x12;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'S') goto LAB_00297740;
break;
case 0x13:
iVar17 = *(int *)(param_1 + 0x20);
LAB_00297740:
*(undefined4 *)(param_1 + 4) = 0x13;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'Y') {
iVar19 = *(int *)(param_1 + 0x2c);
*(int *)(param_1 + 0x2c) = iVar19 + 1;
if (1 < *(int *)(param_1 + 0x30)) {
fprintf(_stderr,"\n [%d: huff+mtf ",iVar19 + 1);
iVar17 = *(int *)(param_1 + 0x20);
}
*(undefined4 *)(param_1 + 0xc58) = 0;
goto LAB_002976c0;
}
break;
case 0x14:
iVar17 = *(int *)(param_1 + 0x20);
LAB_002976c0:
*(undefined4 *)(param_1 + 4) = 0x14;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
*(uint *)(param_1 + 0xc58) =
*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc58) << 8;
goto LAB_00297a9c;
case 0x15:
iVar17 = *(int *)(param_1 + 0x20);
LAB_00297a9c:
*(undefined4 *)(param_1 + 4) = 0x15;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
*(uint *)(param_1 + 0xc58) =
*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc58) << 8;
LAB_002978cc:
*(undefined4 *)(param_1 + 4) = 0x16;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
*(uint *)(param_1 + 0xc58) =
*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc58) << 8;
LAB_00297641:
*(undefined4 *)(param_1 + 4) = 0x17;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
*(uint *)(param_1 + 0xc58) =
*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc58) << 8;
LAB_00296f26:
*(undefined4 *)(param_1 + 4) = 0x18;
while (iVar17 < 1) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -1;
*(undefined4 *)(param_1 + 0x34) = 0;
*(int *)(param_1 + 0x20) = iVar17;
param_1[0x10] = (DState)((byte)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) & 1);
LAB_00296f90:
*(undefined4 *)(param_1 + 4) = 0x19;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
*(uint *)(param_1 + 0x34) =
*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0x34) << 8;
LAB_00297002:
*(undefined4 *)(param_1 + 4) = 0x1a;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
*(uint *)(param_1 + 0x34) =
*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0x34) << 8;
LAB_00297072:
*(undefined4 *)(param_1 + 4) = 0x1b;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
uVar10 = iVar17 - 8;
*(uint *)(param_1 + 0x20) = uVar10;
uVar13 = *(uint *)(param_1 + 0x1c) >> ((byte)uVar10 & 0x1f) & 0xff |
*(int *)(param_1 + 0x34) << 8;
*(uint *)(param_1 + 0x34) = uVar13;
if ((-1 < (int)uVar13) && ((int)uVar13 <= *(int *)(param_1 + 0x24) * 100000 + 10)) {
pDVar20 = (DState *)0x0;
LAB_00297100:
do {
*(undefined4 *)(param_1 + 4) = 0x1c;
while ((int)uVar10 < 1) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(uint *)(param_1 + 0x20) = uVar10 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
uVar10 = *(uint *)(param_1 + 0x20);
}
uVar10 = uVar10 - 1;
*(uint *)(param_1 + 0x20) = uVar10;
if ((*(uint *)(param_1 + 0x1c) >> (uVar10 & 0x1f) & 1) == 0) {
param_1[(int)pDVar20 + 0xd6c] = (DState)0x0;
}
else {
param_1[(int)pDVar20 + 0xd6c] = (DState)0x1;
}
pDVar20 = (DState *)((int)pDVar20 + 1);
} while ((int)pDVar20 < 0x10);
iVar17 = 0;
do {
param_1[iVar17 + 0xc6c] = (DState)0x0;
iVar17 = iVar17 + 1;
} while (iVar17 != 0x100);
pDVar20 = (DState *)0x0;
do {
if (param_1[(int)pDVar20 + 0xd6c] != (DState)0x0) {
local_40 = 0;
switchD_00296802_caseD_1d:
uVar10 = *(uint *)(param_1 + 0x20);
do {
*(undefined4 *)(param_1 + 4) = 0x1d;
while ((int)uVar10 < 1) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(uint *)(param_1 + 0x20) = uVar10 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
uVar10 = *(uint *)(param_1 + 0x20);
}
uVar10 = uVar10 - 1;
*(uint *)(param_1 + 0x20) = uVar10;
if ((*(uint *)(param_1 + 0x1c) >> (uVar10 & 0x1f) & 1) != 0) {
param_1[local_40 + (int)pDVar20 * 0x10 + 0xc6c] = (DState)0x1;
}
local_40 = local_40 + 1;
} while ((int)local_40 < 0x10);
}
pDVar20 = (DState *)((int)pDVar20 + 1);
} while ((int)pDVar20 < 0x10);
*(undefined4 *)(param_1 + 0xc68) = 0;
iVar19 = 0;
iVar17 = 0;
do {
if (param_1[iVar17 + 0xc6c] != (DState)0x0) {
param_1[iVar19 + 0xd7c] = SUB41(iVar17,0);
iVar19 = iVar19 + 1;
*(int *)(param_1 + 0xc68) = iVar19;
}
iVar17 = iVar17 + 1;
} while (iVar17 != 0x100);
if (iVar19 != 0) {
local_64 = iVar19 + 2;
switchD_00296802_caseD_1e:
*(undefined4 *)(param_1 + 4) = 0x1e;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 3) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
iVar17 = iVar17 + -3;
*(int *)(param_1 + 0x20) = iVar17;
local_48 = *(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 7;
if (local_48 - 2 < 5) {
LAB_00297c8e:
*(undefined4 *)(param_1 + 4) = 0x1f;
while (iVar17 < 0xf) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
uVar10 = iVar17 - 0xf;
*(uint *)(param_1 + 0x20) = uVar10;
local_50 = *(uint *)(param_1 + 0x1c) >> ((byte)uVar10 & 0x1f) & 0x7fff;
if (local_50 != 0) {
local_40 = 0;
pDVar20 = (DState *)0x0;
LAB_00297b18:
while( true ) {
*(undefined4 *)(param_1 + 4) = 0x20;
while ((int)uVar10 < 1) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(uint *)(param_1 + 0x20) = uVar10 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
uVar10 = *(uint *)(param_1 + 0x20);
}
uVar10 = uVar10 - 1;
*(uint *)(param_1 + 0x20) = uVar10;
if ((*(uint *)(param_1 + 0x1c) >> (uVar10 & 0x1f) & 1) != 0) goto code_r0x00297b80;
param_1[(int)pDVar20 + 0x650e] = local_40._0_1_;
pDVar20 = (DState *)((int)pDVar20 + 1);
if ((int)local_50 <= (int)pDVar20) break;
local_40 = 0;
}
uVar10 = 0;
DVar8 = (DState)0x0;
if (0 < (int)local_48) {
do {
aDStack_27[uVar10 + 1] = DVar8;
DVar8 = (DState)((char)DVar8 + 1);
uVar10 = (uint)(byte)DVar8;
} while ((int)uVar10 < (int)local_48);
}
if ((int)local_50 < 1) {
pDVar20 = (DState *)0;
}
else {
pDVar18 = param_1 + 0x650e;
pDVar14 = pDVar18 + local_50;
do {
DVar8 = *pDVar18;
uVar10 = (uint)(byte)DVar8;
DVar4 = aDStack_27[uVar10 + 1];
if (DVar8 != (DState)0x0) {
while( true ) {
DVar8 = (DState)((char)DVar8 - 1);
aDStack_27[uVar10 + 1] = aDStack_27[uVar10];
if (DVar8 == (DState)0x0) break;
uVar10 = (uint)(byte)DVar8;
}
}
pDVar18[-0x4652] = DVar4;
pDVar18 = pDVar18 + 1;
aDStack_27[1] = DVar4;
pDVar20 = (DState *)local_50;
} while (pDVar18 != pDVar14);
}
for (local_60 = 0; (int)local_60 < (int)local_48; local_60 = local_60 + 1) {
switchD_00296802_caseD_21:
*(undefined4 *)(param_1 + 4) = 0x21;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 5) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
*(int *)(param_1 + 0x20) = iVar17 + -5;
local_5c = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -5) & 0x1f) & 0x1f;
for (pDVar20 = (DState *)0x0; (int)pDVar20 < local_64;
pDVar20 = (DState *)((int)pDVar20 + 1)) {
while( true ) {
if (0x13 < local_5c - 1) goto LAB_00297b8c;
switchD_00296802_caseD_22:
*(undefined4 *)(param_1 + 4) = 0x22;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 1) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
uVar10 = iVar17 - 1;
*(uint *)(param_1 + 0x20) = uVar10;
if ((*(uint *)(param_1 + 0x1c) >> (uVar10 & 0x1f) & 1) == 0) break;
LAB_00296b4e:
*(undefined4 *)(param_1 + 4) = 0x23;
while ((int)uVar10 < 1) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(uint *)(param_1 + 0x20) = uVar10 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
uVar10 = *(uint *)(param_1 + 0x20);
}
*(uint *)(param_1 + 0x20) = uVar10 - 1;
uVar13 = local_5c + 1;
local_5c = local_5c - 1;
if ((*(uint *)(param_1 + 0x1c) >> ((byte)(uVar10 - 1) & 0x1f) & 1) == 0) {
local_5c = uVar13;
}
}
param_1[(int)pDVar20 + 0xab60U + local_60 * 0x102] = local_5c._0_1_;
}
}
if ((int)local_48 < 1) {
local_60 = 0;
}
else {
local_38 = param_1 + 0xb16c;
local_54 = param_1;
pDVar20 = param_1 + 0xab60;
do {
if (local_64 < 1) {
uVar10 = 0;
uVar13 = 0x20;
}
else {
uVar10 = 0;
uVar13 = 0x20;
pDVar18 = pDVar20;
do {
uVar9 = (uint)(byte)*pDVar18;
if (uVar10 < uVar9) {
uVar10 = uVar9;
}
if (uVar9 < uVar13) {
uVar13 = uVar9;
}
pDVar18 = pDVar18 + 1;
} while (pDVar18 != pDVar20 + local_64);
}
pDVar18 = pDVar20 + 0x102;
BZ2_hbCreateDecodeTables
((int *)local_38,(int *)(local_38 + 0x1830),(int *)(local_38 + 0x3060),
(uchar *)pDVar20,uVar13,uVar10,local_64);
local_38 = local_38 + 0x408;
*(uint *)(local_54 + 0xf9fc) = uVar13;
pDVar20 = pDVar18;
local_54 = local_54 + 4;
} while (pDVar18 != param_1 + 0xab60 + local_48 * 0x102);
local_60 = local_48;
}
local_54 = (DState *)(*(int *)(param_1 + 0xc68) + 1);
local_6c = *(int *)(param_1 + 0x24) * 100000;
iVar17 = 0;
do {
*(undefined4 *)(param_1 + iVar17 * 4 + 0x40) = 0;
iVar17 = iVar17 + 1;
} while (iVar17 != 0x100);
iVar17 = 0xff0;
pDVar20 = param_1;
do {
iVar15 = 0xf;
do {
param_1[iVar15 + iVar17 + 0xe7c] = (DState)((char)iVar17 + (char)iVar15);
iVar15 = iVar15 + -1;
} while (iVar15 != -1);
*(int *)(pDVar20 + 0x1eb8) = iVar17;
iVar17 = iVar17 + -0x10;
pDVar20 = pDVar20 + -4;
} while (iVar17 != 0xef0);
if ((int)local_50 < 1) {
local_38 = (DState *)0x0;
pDVar20 = (DState *)0x100;
uVar11 = 0xfffffffc;
local_58 = 0;
local_68 = 0;
goto LAB_00297b98;
}
local_84 = (uint)(byte)param_1[0x1ebc];
local_38 = (DState *)0x0;
local_58 = 0x31;
local_68 = 0;
local_80 = *(int *)(param_1 + local_84 * 4 + 0xf9fc);
iVar17 = local_84 * 0x408;
local_70 = param_1 + iVar17 + 0xb16c;
local_78 = param_1 + iVar17 + 0xe1cc;
local_74 = param_1 + iVar17 + 0xc99c;
pDVar20 = (DState *)0x100;
local_30 = local_80;
goto switchD_00296802_caseD_24;
}
}
}
}
break;
case 0x16:
iVar17 = *(int *)(param_1 + 0x20);
goto LAB_002978cc;
case 0x17:
iVar17 = *(int *)(param_1 + 0x20);
goto LAB_00297641;
case 0x18:
iVar17 = *(int *)(param_1 + 0x20);
goto LAB_00296f26;
case 0x19:
iVar17 = *(int *)(param_1 + 0x20);
goto LAB_00296f90;
case 0x1a:
iVar17 = *(int *)(param_1 + 0x20);
goto LAB_00297002;
case 0x1b:
iVar17 = *(int *)(param_1 + 0x20);
goto LAB_00297072;
case 0x1c:
uVar10 = *(uint *)(param_1 + 0x20);
goto LAB_00297100;
case 0x1d:
goto switchD_00296802_caseD_1d;
case 0x1e:
goto switchD_00296802_caseD_1e;
case 0x1f:
iVar17 = *(int *)(param_1 + 0x20);
goto LAB_00297c8e;
case 0x20:
uVar10 = *(uint *)(param_1 + 0x20);
goto LAB_00297b18;
case 0x21:
goto switchD_00296802_caseD_21;
case 0x22:
goto switchD_00296802_caseD_22;
case 0x23:
uVar10 = *(uint *)(param_1 + 0x20);
goto LAB_00296b4e;
case 0x24:
switchD_00296802_caseD_24:
*(undefined4 *)(param_1 + 4) = 0x24;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < local_30) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
*(int *)(param_1 + 0x20) = iVar17 - local_30;
local_34 = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 - local_30) & 0x1f) &
(1 << ((byte)local_30 & 0x1f)) - 1U;
while (iVar15 = local_68, local_30 < 0x15) {
if ((int)local_34 <= *(int *)(local_70 + local_30 * 4)) goto LAB_00297369;
local_30 = local_30 + 1;
switchD_00296802_caseD_25:
*(undefined4 *)(param_1 + 4) = 0x25;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 1) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
*(int *)(param_1 + 0x20) = iVar17 + -1;
local_4c = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -1) & 0x1f) & 1;
local_34 = local_34 << 1 | local_4c;
}
break;
case 0x25:
goto switchD_00296802_caseD_25;
case 0x26:
goto switchD_00296802_caseD_26;
case 0x27:
goto switchD_00296802_caseD_27;
case 0x28:
goto switchD_00296802_caseD_28;
case 0x29:
goto switchD_00296802_caseD_29;
case 0x2a:
iVar17 = *(int *)(param_1 + 0x20);
LAB_00297a2c:
*(undefined4 *)(param_1 + 4) = 0x2a;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'r') goto LAB_00297d84;
break;
case 0x2b:
iVar17 = *(int *)(param_1 + 0x20);
LAB_00297d84:
*(undefined4 *)(param_1 + 4) = 0x2b;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'E') goto LAB_00297d13;
break;
case 0x2c:
iVar17 = *(int *)(param_1 + 0x20);
LAB_00297d13:
*(undefined4 *)(param_1 + 4) = 0x2c;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == '8') goto LAB_00297fde;
break;
case 0x2d:
iVar17 = *(int *)(param_1 + 0x20);
LAB_00297fde:
*(undefined4 *)(param_1 + 4) = 0x2d;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == 'P') goto LAB_00297f64;
break;
case 0x2e:
iVar17 = *(int *)(param_1 + 0x20);
LAB_00297f64:
*(undefined4 *)(param_1 + 4) = 0x2e;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
if ((char)(*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f)) == -0x70) {
*(undefined4 *)(param_1 + 0xc5c) = 0;
goto LAB_002982c8;
}
break;
case 0x2f:
iVar17 = *(int *)(param_1 + 0x20);
LAB_002982c8:
*(undefined4 *)(param_1 + 4) = 0x2f;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
*(uint *)(param_1 + 0xc5c) =
*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc5c) << 8;
goto LAB_0029824c;
case 0x30:
iVar17 = *(int *)(param_1 + 0x20);
LAB_0029824c:
*(undefined4 *)(param_1 + 4) = 0x30;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
*(uint *)(param_1 + 0xc5c) =
*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc5c) << 8;
LAB_002980da:
*(undefined4 *)(param_1 + 4) = 0x31;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
iVar17 = iVar17 + -8;
*(int *)(param_1 + 0x20) = iVar17;
*(uint *)(param_1 + 0xc5c) =
*(uint *)(param_1 + 0x1c) >> ((byte)iVar17 & 0x1f) & 0xff | *(int *)(param_1 + 0xc5c) << 8;
LAB_00298054:
*(undefined4 *)(param_1 + 4) = 0x32;
while (iVar17 < 8) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
iVar17 = *(int *)(param_1 + 0x20);
}
*(undefined4 *)(param_1 + 4) = 1;
*(int *)(param_1 + 0x20) = iVar17 + -8;
*(uint *)(param_1 + 0xc5c) =
*(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -8) & 0x1f) & 0xff |
*(int *)(param_1 + 0xc5c) << 8;
uVar11 = 4;
goto LAB_00297b98;
case 0x31:
iVar17 = *(int *)(param_1 + 0x20);
goto LAB_002980da;
case 0x32:
iVar17 = *(int *)(param_1 + 0x20);
goto LAB_00298054;
default:
BZ2_bz__AssertH__fail(0xfa1);
BZ2_bz__AssertH__fail(0xfa2);
uVar11 = 0;
goto LAB_00297b98;
}
LAB_00297b8c:
local_3c = iVar12;
local_68 = iVar15;
uVar11 = 0xfffffffc;
LAB_00297b98:
*(DState **)(param_1 + 0xfa14) = pDVar20;
*(uint *)(param_1 + 0xfa18) = local_40;
*(uint *)(param_1 + 0xfa1c) = local_60;
*(int *)(param_1 + 0xfa20) = local_64;
*(uint *)(param_1 + 0xfa24) = local_48;
*(uint *)(param_1 + 0xfa28) = local_50;
*(DState **)(param_1 + 0xfa2c) = local_54;
*(int *)(param_1 + 0xfa30) = local_68;
*(int *)(param_1 + 0xfa34) = local_58;
*(uint *)(param_1 + 0xfa38) = local_44;
*(int *)(param_1 + 0xfa3c) = local_6c;
*(DState **)(param_1 + 0xfa40) = local_38;
*(int *)(param_1 + 0xfa44) = local_3c;
*(int *)(param_1 + 0xfa48) = local_7c;
*(uint *)(param_1 + 0xfa4c) = local_5c;
*(undefined4 *)(param_1 + 0xfa50) = local_88;
*(int *)(param_1 + 0xfa54) = local_30;
*(uint *)(param_1 + 0xfa58) = local_34;
*(uint *)(param_1 + 0xfa5c) = local_4c;
*(uint *)(param_1 + 0xfa60) = local_84;
*(int *)(param_1 + 0xfa64) = local_80;
*(DState **)(param_1 + 0xfa68) = local_70;
*(DState **)(param_1 + 0xfa6c) = local_74;
*(DState **)(param_1 + 0xfa70) = local_78;
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return uVar11;
}
/* WARNING: Subroutine does not return */
__stack_chk_fail();
code_r0x00297b80:
local_40 = local_40 + 1;
if ((int)local_48 <= (int)local_40) goto LAB_00297b8c;
goto LAB_00297b18;
LAB_00297369:
iVar15 = local_68;
iVar12 = local_3c;
if (0x101 < local_34 - *(int *)(local_74 + local_30 * 4)) goto LAB_00297b8c;
local_44 = *(uint *)(local_78 + (local_34 - *(int *)(local_74 + local_30 * 4)) * 4);
while( true ) {
local_3c = iVar12;
iVar15 = local_68;
iVar12 = local_3c;
if ((DState *)local_44 == local_54) {
local_54 = (DState *)local_44;
if ((-1 < *(int *)(param_1 + 0x34)) && (*(int *)(param_1 + 0x34) < (int)local_38)) {
*(undefined4 *)(param_1 + 0xc) = 0;
param_1[8] = (DState)0x0;
*(undefined4 *)(param_1 + 0xc60) = 0xffffffff;
*(undefined4 *)(param_1 + 4) = 2;
if (1 < *(int *)(param_1 + 0x30)) {
fwrite("rt+rld",1,6,_stderr);
}
*(undefined4 *)(param_1 + 0x444) = 0;
iVar17 = 1;
do {
*(undefined4 *)(param_1 + iVar17 * 4 + 0x444) =
*(undefined4 *)(param_1 + iVar17 * 4 + 0x3c);
iVar17 = iVar17 + 1;
} while (iVar17 != 0x101);
iVar17 = 1;
do {
*(int *)(param_1 + iVar17 * 4 + 0x444) =
*(int *)(param_1 + iVar17 * 4 + 0x444) + *(int *)(param_1 + iVar17 * 4 + 0x440);
iVar17 = iVar17 + 1;
} while (iVar17 != 0x101);
if (param_1[0x28] == (DState)0x0) {
iVar17 = 0;
do {
uVar10 = iVar17 << 8;
bVar3 = *(byte *)(*(int *)(param_1 + 0xc4c) + iVar17 * 4);
iVar17 = iVar17 + 1;
puVar1 = (uint *)(*(int *)(param_1 + 0xc4c) +
*(int *)(param_1 + (uint)bVar3 * 4 + 0x444) * 4);
*puVar1 = *puVar1 | uVar10;
*(int *)(param_1 + (uint)bVar3 * 4 + 0x444) =
*(int *)(param_1 + (uint)bVar3 * 4 + 0x444) + 1;
} while (iVar17 < (int)local_38);
iVar17 = *(int *)(param_1 + 0xc4c);
pDVar20 = (DState *)1;
if (0 < (int)local_38) {
pDVar20 = local_38;
}
uVar10 = *(uint *)(iVar17 + *(int *)(param_1 + 0x34) * 4);
*(undefined4 *)(param_1 + 0x440) = 0;
uVar10 = uVar10 >> 8;
*(uint *)(param_1 + 0x38) = uVar10;
if (param_1[0x10] == (DState)0x0) {
uVar10 = *(uint *)(iVar17 + uVar10 * 4);
*(undefined4 *)(param_1 + 0x440) = 1;
*(uint *)(param_1 + 0x38) = uVar10 >> 8;
*(uint *)(param_1 + 0x3c) = uVar10 & 0xff;
uVar11 = 0;
}
else {
*(undefined4 *)(param_1 + 0x14) = 0;
*(undefined4 *)(param_1 + 0x18) = 0;
uVar10 = *(uint *)(iVar17 + uVar10 * 4);
*(undefined4 *)(param_1 + 0x440) = 1;
*(uint *)(param_1 + 0x38) = uVar10 >> 8;
iVar17 = BZ2_rNums;
*(undefined4 *)(param_1 + 0x18) = 1;
*(int *)(param_1 + 0x14) = iVar17 + -1;
*(uint *)(param_1 + 0x3c) = uVar10 & 0xff ^ (uint)(iVar17 + -1 == 1);
uVar11 = 0;
}
}
else {
iVar17 = 0;
do {
*(undefined4 *)(param_1 + iVar17 * 4 + 0x848) =
*(undefined4 *)(param_1 + iVar17 * 4 + 0x444);
iVar17 = iVar17 + 1;
} while (iVar17 != 0x101);
uVar10 = 0;
do {
pbVar16 = (byte *)(*(int *)(param_1 + 0xc50) + uVar10 * 2);
bVar3 = *pbVar16;
*(short *)pbVar16 = (short)*(undefined4 *)(param_1 + (uint)bVar3 * 4 + 0x848);
pbVar16 = (byte *)(((int)uVar10 >> 1) + *(int *)(param_1 + 0xc54));
if ((uVar10 & 1) == 0) {
*pbVar16 = *pbVar16 & 0xf0 | (byte)param_1[(uint)bVar3 * 4 + 0x84a];
}
else {
*pbVar16 = *pbVar16 & 0xf |
(byte)((int)*(short *)(param_1 + (uint)bVar3 * 4 + 0x84a) << 4);
}
*(int *)(param_1 + (uint)bVar3 * 4 + 0x848) =
*(int *)(param_1 + (uint)bVar3 * 4 + 0x848) + 1;
uVar10 = uVar10 + 1;
} while ((int)uVar10 < (int)local_38);
uVar10 = *(uint *)(param_1 + 0x34);
iVar17 = *(int *)(param_1 + 0xc54);
iVar15 = *(int *)(param_1 + 0xc50);
pDVar20 = (DState *)
((*(byte *)(iVar17 + ((int)uVar10 >> 1)) >> ((char)uVar10 * '\x04' & 4U) & 0xf)
<< 0x10 | (uint)*(ushort *)(iVar15 + uVar10 * 2));
while( true ) {
puVar2 = (ushort *)(iVar15 + (int)pDVar20 * 2);
local_40 = (*(byte *)(iVar17 + ((int)pDVar20 >> 1)) >> ((char)pDVar20 * '\x04' & 4U) &
0xf) << 0x10 | (uint)*puVar2;
*puVar2 = (ushort)uVar10;
pbVar16 = (byte *)(((int)pDVar20 >> 1) + *(int *)(param_1 + 0xc54));
if (((uint)pDVar20 & 1) == 0) {
*pbVar16 = *pbVar16 & 0xf0 | (byte)(uVar10 >> 0x10);
}
else {
*pbVar16 = *pbVar16 & 0xf | (byte)(((int)uVar10 >> 0x10) << 4);
}
if (pDVar20 == (DState *)*(uint *)(param_1 + 0x34)) break;
iVar15 = *(int *)(param_1 + 0xc50);
iVar17 = *(int *)(param_1 + 0xc54);
uVar10 = (uint)pDVar20;
pDVar20 = (DState *)local_40;
}
*(DState **)(param_1 + 0x38) = pDVar20;
*(undefined4 *)(param_1 + 0x440) = 0;
if (param_1[0x10] == (DState)0x0) {
uVar11 = BZ2_indexIntoF((int)pDVar20,(int *)(param_1 + 0x444));
uVar10 = *(uint *)(param_1 + 0x38);
*(undefined4 *)(param_1 + 0x3c) = uVar11;
bVar3 = *(byte *)(*(int *)(param_1 + 0xc54) + (uVar10 >> 1));
uVar5 = *(ushort *)(*(int *)(param_1 + 0xc50) + uVar10 * 2);
*(int *)(param_1 + 0x440) = *(int *)(param_1 + 0x440) + 1;
*(uint *)(param_1 + 0x38) =
(bVar3 >> ((char)uVar10 * '\x04' & 4U) & 0xf) << 0x10 | (uint)uVar5;
uVar11 = 0;
}
else {
*(undefined4 *)(param_1 + 0x14) = 0;
*(undefined4 *)(param_1 + 0x18) = 0;
uVar13 = BZ2_indexIntoF((int)pDVar20,(int *)(param_1 + 0x444));
uVar10 = *(uint *)(param_1 + 0x38);
*(uint *)(param_1 + 0x3c) = uVar13;
bVar3 = *(byte *)(*(int *)(param_1 + 0xc54) + (uVar10 >> 1));
uVar5 = *(ushort *)(*(int *)(param_1 + 0xc50) + uVar10 * 2);
*(int *)(param_1 + 0x440) = *(int *)(param_1 + 0x440) + 1;
*(uint *)(param_1 + 0x38) =
(bVar3 >> ((char)uVar10 * '\x04' & 4U) & 0xf) << 0x10 | (uint)uVar5;
iVar17 = *(int *)(param_1 + 0x14);
if (iVar17 == 0) {
iVar17 = (&BZ2_rNums)[*(int *)(param_1 + 0x18)];
iVar15 = *(int *)(param_1 + 0x18) + 1;
*(int *)(param_1 + 0x18) = iVar15;
*(int *)(param_1 + 0x14) = iVar17;
if (iVar15 == 0x200) {
*(undefined4 *)(param_1 + 0x18) = 0;
}
}
*(int *)(param_1 + 0x14) = iVar17 + -1;
*(uint *)(param_1 + 0x3c) = iVar17 + -1 == 1 ^ uVar13;
uVar11 = 0;
}
}
goto LAB_00297b98;
}
goto LAB_00297b8c;
}
if (1 < local_44) break;
iVar17 = 2;
local_7c = 1;
local_3c = -1;
while( true ) {
if (local_44 == 0) {
iVar15 = local_3c + local_7c;
}
else {
iVar15 = local_3c + iVar17;
if (local_44 != 1) {
iVar15 = local_3c;
}
}
local_3c = iVar15;
local_7c = iVar17;
if (local_58 == 0) {
iVar17 = local_68 + 1;
if ((int)local_50 <= iVar17) {
uVar11 = 0xfffffffc;
local_68 = iVar17;
goto LAB_00297b98;
}
local_84 = (uint)(byte)param_1[local_68 + 0x1ebd];
local_58 = 0x31;
local_30 = *(int *)(param_1 + local_84 * 4 + 0xf9fc);
iVar15 = local_84 * 0x408;
local_70 = param_1 + iVar15 + 0xb16c;
local_78 = param_1 + iVar15 + 0xe1cc;
local_74 = param_1 + iVar15 + 0xc99c;
local_68 = iVar17;
}
else {
local_58 = local_58 + -1;
local_30 = local_80;
}
local_80 = local_30;
switchD_00296802_caseD_26:
*(undefined4 *)(param_1 + 4) = 0x26;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < local_30) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
*(int *)(param_1 + 0x20) = iVar17 - local_30;
local_34 = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 - local_30) & 0x1f) &
(1 << ((byte)local_30 & 0x1f)) - 1U;
while( true ) {
iVar15 = local_68;
iVar12 = local_3c;
if (0x14 < local_30) goto LAB_00297b8c;
if ((int)local_34 <= *(int *)(local_70 + local_30 * 4)) break;
local_30 = local_30 + 1;
switchD_00296802_caseD_27:
*(undefined4 *)(param_1 + 4) = 0x27;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 1) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
*(int *)(param_1 + 0x20) = iVar17 + -1;
local_4c = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -1) & 0x1f) & 1;
local_34 = local_34 << 1 | local_4c;
}
if (0x101 < local_34 - *(int *)(local_74 + local_30 * 4)) goto LAB_00297b8c;
local_44 = *(uint *)(local_78 + (local_34 - *(int *)(local_74 + local_30 * 4)) * 4);
if (1 < local_44) break;
iVar17 = local_7c * 2;
}
iVar12 = local_3c + 1;
DVar8 = param_1[(byte)param_1[*(int *)(param_1 + 0x1e7c) + 0xe7c] + 0xd7c];
*(int *)(param_1 + (uint)(byte)DVar8 * 4 + 0x40) =
*(int *)(param_1 + (uint)(byte)DVar8 * 4 + 0x40) + iVar12;
if (param_1[0x28] == (DState)0x0) {
if (0 < iVar12) {
if (local_6c <= (int)local_38) goto LAB_00297b8c;
iVar17 = (int)local_38 * 4;
iVar19 = (int)local_38 + 1;
while( true ) {
local_38 = (DState *)((int)local_38 + 1);
iVar12 = iVar12 + -1;
*(uint *)(*(int *)(param_1 + 0xc4c) + iVar17) = (uint)(byte)DVar8;
if (iVar12 == 0) break;
iVar17 = iVar17 + 4;
if (iVar12 == (iVar19 + local_3c) - local_6c) goto LAB_00297b8c;
}
}
}
else if (0 < iVar12) {
if (local_6c <= (int)local_38) goto LAB_00297b8c;
iVar19 = (int)local_38 * 2;
iVar17 = (int)local_38 + 1;
while( true ) {
local_38 = (DState *)((int)local_38 + 1);
iVar12 = iVar12 + -1;
*(ushort *)(*(int *)(param_1 + 0xc50) + iVar19) = (ushort)(byte)DVar8;
if (iVar12 == 0) break;
iVar19 = iVar19 + 2;
if (iVar12 == (iVar17 + local_3c) - local_6c) goto LAB_00297b8c;
}
}
}
if (local_6c <= (int)local_38) goto LAB_00297b8c;
uVar10 = local_44 - 1;
if (uVar10 < 0x10) {
iVar17 = *(int *)(param_1 + 0x1e7c);
local_8d = param_1[iVar17 + 0xe7c + uVar10];
if (3 < uVar10) {
iVar15 = (local_44 - 1) + iVar17;
uVar10 = local_44 - 5 >> 2;
do {
param_1[iVar15 + 0xe7c] = param_1[iVar15 + 0xe7b];
param_1[iVar15 + 0xe7b] = param_1[iVar15 + 0xe7a];
param_1[iVar15 + 0xe7a] = param_1[iVar15 + 0xe79];
param_1[iVar15 + 0xe79] = param_1[iVar15 + 0xe78];
iVar15 = iVar15 + -4;
} while (iVar15 != (local_44 - 5) + iVar17 + uVar10 * -4);
uVar10 = (local_44 - 5) + uVar10 * -4;
}
for (; uVar10 != 0; uVar10 = uVar10 - 1) {
param_1[uVar10 + iVar17 + 0xe7c] = param_1[uVar10 + iVar17 + 0xe7b];
}
param_1[iVar17 + 0xe7c] = local_8d;
}
else {
uVar13 = uVar10 >> 4;
iVar17 = *(int *)(param_1 + uVar13 * 4 + 0x1e7c);
iVar15 = (uVar10 & 0xf) + iVar17;
local_8d = param_1[iVar15 + 0xe7c];
if (iVar17 < iVar15) {
pDVar18 = param_1 + iVar15 + 0xe7b;
do {
pDVar14 = pDVar18 + -1;
pDVar18[1] = *pDVar18;
pDVar18 = pDVar14;
} while (pDVar14 != param_1 + iVar17 + 0xe7b);
}
*(int *)(param_1 + uVar13 * 4 + 0x1e7c) = iVar17 + 1;
iVar17 = iVar17 + 1;
local_8c = param_1 + uVar13 * 4 + 0x1e7c;
do {
pDVar18 = local_8c + -4;
iVar15 = *(int *)(local_8c + -4);
*(int *)local_8c = iVar17 + -1;
param_1[iVar17 + 0xe7b] = param_1[iVar15 + 0xe8b];
iVar17 = iVar15;
local_8c = pDVar18;
} while (pDVar18 != param_1 + 0x1e7c);
iVar17 = *(int *)(param_1 + 0x1e7c);
iVar15 = iVar17 + -1;
*(int *)(param_1 + 0x1e7c) = iVar15;
param_1[iVar17 + 0xe7b] = local_8d;
if (iVar15 == 0) {
iVar17 = 0xfff;
local_8c = param_1;
do {
iVar15 = *(int *)(local_8c + 0x1eb8);
pDVar18 = param_1 + iVar15 + 0xe8b;
do {
pDVar14 = pDVar18 + -1;
pDVar18[iVar17 + (-0xf - iVar15)] = *pDVar18;
pDVar18 = pDVar14;
} while (pDVar14 != param_1 + iVar15 + 0xe7b);
iVar15 = iVar17 + -0xf;
iVar17 = iVar17 + -0x10;
*(int *)(local_8c + 0x1eb8) = iVar15;
local_8c = local_8c + -4;
} while (iVar17 != 0xeff);
}
}
DVar8 = param_1[(byte)local_8d + 0xd7c];
*(int *)(param_1 + (uint)(byte)DVar8 * 4 + 0x40) =
*(int *)(param_1 + (uint)(byte)DVar8 * 4 + 0x40) + 1;
if (param_1[0x28] == (DState)0x0) {
*(uint *)(*(int *)(param_1 + 0xc4c) + (int)local_38 * 4) = (uint)(byte)DVar8;
}
else {
*(ushort *)(*(int *)(param_1 + 0xc50) + (int)local_38 * 2) = (ushort)(byte)DVar8;
}
local_38 = (DState *)((int)local_38 + 1);
if (local_58 == 0) {
iVar15 = local_68 + 1;
if ((int)local_50 <= iVar15) goto LAB_00297b8c;
local_84 = (uint)(byte)param_1[local_68 + 0x1ebd];
local_58 = 0x31;
local_30 = *(int *)(param_1 + local_84 * 4 + 0xf9fc);
iVar17 = local_84 * 0x408;
local_70 = param_1 + iVar17 + 0xb16c;
local_78 = param_1 + iVar17 + 0xe1cc;
local_74 = param_1 + iVar17 + 0xc99c;
local_68 = iVar15;
}
else {
local_58 = local_58 + -1;
local_30 = local_80;
}
local_80 = local_30;
switchD_00296802_caseD_28:
*(undefined4 *)(param_1 + 4) = 0x28;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < local_30) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
*(int *)(param_1 + 0x20) = iVar17 - local_30;
local_34 = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 - local_30) & 0x1f) &
(1 << ((byte)local_30 & 0x1f)) - 1U;
while( true ) {
iVar15 = local_68;
iVar12 = local_3c;
if (0x14 < local_30) goto LAB_00297b8c;
if ((int)local_34 <= *(int *)(local_70 + local_30 * 4)) break;
local_30 = local_30 + 1;
switchD_00296802_caseD_29:
*(undefined4 *)(param_1 + 4) = 0x29;
while (iVar17 = *(int *)(param_1 + 0x20), iVar17 < 1) {
piVar6 = *(int **)param_1;
if (piVar6[1] == 0) goto LAB_00298348;
bVar3 = *(byte *)*piVar6;
*(int *)(param_1 + 0x20) = iVar17 + 8;
*(uint *)(param_1 + 0x1c) = (uint)bVar3 | *(int *)(param_1 + 0x1c) << 8;
*piVar6 = *piVar6 + 1;
*(int *)(*(int *)param_1 + 4) = *(int *)(*(int *)param_1 + 4) + -1;
*(int *)(*(int *)param_1 + 8) = *(int *)(*(int *)param_1 + 8) + 1;
if (*(int *)(*(int *)param_1 + 8) == 0) {
piVar6 = (int *)(*(int *)param_1 + 0xc);
*piVar6 = *piVar6 + 1;
}
}
*(int *)(param_1 + 0x20) = iVar17 + -1;
local_4c = *(uint *)(param_1 + 0x1c) >> ((byte)(iVar17 + -1) & 0x1f) & 1;
local_34 = local_34 << 1 | local_4c;
}
goto LAB_00297369;
LAB_00298348:
uVar11 = 0;
goto LAB_00297b98;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.