1196 lines
38 KiB
C
1196 lines
38 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401c4220 FUN_1401c4220
|
|
* Pseudocode, not original source. */
|
|
|
|
int FUN_1401c4220(longlong *param_1,int param_2)
|
|
|
|
{
|
|
byte bVar1;
|
|
uint *puVar2;
|
|
uint uVar3;
|
|
char cVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
uint uVar7;
|
|
uint uVar8;
|
|
byte bVar9;
|
|
ushort uVar10;
|
|
uint uVar11;
|
|
uint uVar12;
|
|
uint uVar13;
|
|
longlong lVar14;
|
|
uint uVar15;
|
|
uint uVar16;
|
|
byte *pbVar17;
|
|
ulonglong uVar18;
|
|
undefined1 *puVar19;
|
|
undefined1 *puVar20;
|
|
byte *_Src;
|
|
uint uVar21;
|
|
ulonglong uVar22;
|
|
int local_res18;
|
|
uint local_res20;
|
|
undefined2 local_68;
|
|
undefined1 local_66;
|
|
undefined1 local_65;
|
|
undefined4 local_64;
|
|
uint local_60;
|
|
uint local_5c;
|
|
undefined1 *local_58;
|
|
|
|
if ((((param_1 == (longlong *)0x0) || (puVar2 = (uint *)param_1[5], puVar2 == (uint *)0x0)) ||
|
|
(param_1[2] == 0)) || ((*param_1 == 0 && ((int)param_1[1] != 0)))) {
|
|
return -2;
|
|
}
|
|
uVar16 = *puVar2;
|
|
uVar7 = puVar2[0x11];
|
|
uVar8 = puVar2[0x10];
|
|
if (uVar16 == 0xb) {
|
|
uVar16 = 0xc;
|
|
}
|
|
*puVar2 = uVar16;
|
|
uVar11 = *(uint *)(param_1 + 3);
|
|
puVar19 = (undefined1 *)param_1[2];
|
|
uVar15 = *(uint *)(param_1 + 1);
|
|
_Src = (byte *)*param_1;
|
|
local_res18 = 0;
|
|
local_res20 = uVar11;
|
|
local_60 = uVar11;
|
|
local_58 = puVar19;
|
|
local_5c = uVar15;
|
|
do {
|
|
if (0x1e < uVar16) {
|
|
return -2;
|
|
}
|
|
uVar22 = 0;
|
|
uVar21 = 0;
|
|
uVar13 = uVar15;
|
|
uVar12 = local_64;
|
|
switch(uVar16) {
|
|
case 0:
|
|
if (puVar2[2] == 0) {
|
|
*puVar2 = 0xc;
|
|
}
|
|
else {
|
|
for (; uVar7 < 0x10; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
if (((puVar2[2] & 2) == 0) || (uVar8 != 0x8b1f)) {
|
|
puVar2[4] = 0;
|
|
if (*(longlong *)(puVar2 + 8) != 0) {
|
|
*(undefined4 *)(*(longlong *)(puVar2 + 8) + 0x40) = 0xffffffff;
|
|
}
|
|
if (((puVar2[2] & 1) == 0) ||
|
|
(uVar16 = (uVar8 & 0xff) * 0x100 + (uVar8 >> 8), uVar16 != (uVar16 / 0x1f) * 0x1f)) {
|
|
param_1[4] = (longlong)"incorrect header check";
|
|
*puVar2 = 0x1d;
|
|
}
|
|
else {
|
|
if (((byte)uVar8 & 0xf) != 8) goto LAB_1401c43bf;
|
|
uVar7 = uVar7 - 4;
|
|
uVar16 = (uVar8 >> 4 & 0xf) + 8;
|
|
if (puVar2[10] == 0) {
|
|
puVar2[10] = uVar16;
|
|
}
|
|
else if (puVar2[10] < uVar16) {
|
|
param_1[4] = (longlong)"invalid window size";
|
|
*puVar2 = 0x1d;
|
|
uVar8 = uVar8 >> 4;
|
|
break;
|
|
}
|
|
puVar2[5] = 1 << (sbyte)uVar16;
|
|
uVar16 = FUN_1401e5880(0,0,0);
|
|
puVar2[6] = uVar16;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar16;
|
|
uVar7 = 0;
|
|
*puVar2 = ~(uVar8 >> 0xc) & 2 | 9;
|
|
uVar8 = 0;
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
}
|
|
}
|
|
else {
|
|
uVar16 = FUN_1401c4210(0,0,0);
|
|
puVar2[6] = uVar16;
|
|
local_68 = 0x8b1f;
|
|
uVar16 = FUN_1401c3ef0(uVar16,&local_68,2);
|
|
uVar8 = 0;
|
|
uVar7 = 0;
|
|
puVar2[6] = uVar16;
|
|
*puVar2 = 1;
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
for (; uVar7 < 0x10; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
puVar2[4] = uVar8;
|
|
if ((char)uVar8 == '\b') {
|
|
if ((uVar8 & 0xe000) == 0) {
|
|
if (*(uint **)(puVar2 + 8) != (uint *)0x0) {
|
|
**(uint **)(puVar2 + 8) = uVar8 >> 8 & 1;
|
|
}
|
|
if ((puVar2[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar8;
|
|
uVar16 = FUN_1401c3ef0(puVar2[6],&local_68);
|
|
puVar2[6] = uVar16;
|
|
}
|
|
*puVar2 = 2;
|
|
uVar7 = uVar21;
|
|
uVar8 = uVar21;
|
|
do {
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar16 = uVar7 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
joined_r0x0001401c4506:
|
|
uVar7 = uVar16;
|
|
} while (uVar16 < 0x20);
|
|
if (*(longlong *)(puVar2 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar2 + 8) + 4) = uVar8;
|
|
}
|
|
if ((puVar2[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar8;
|
|
local_65 = (undefined1)(uVar8 >> 0x18);
|
|
local_66 = (undefined1)(uVar8 >> 0x10);
|
|
uVar16 = FUN_1401c3ef0(puVar2[6],&local_68);
|
|
puVar2[6] = uVar16;
|
|
}
|
|
*puVar2 = 3;
|
|
uVar7 = uVar21;
|
|
uVar8 = uVar21;
|
|
do {
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar16 = uVar7 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
joined_r0x0001401c4587:
|
|
uVar7 = uVar16;
|
|
} while (uVar16 < 0x10);
|
|
if (*(longlong *)(puVar2 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar2 + 8) + 8) = uVar8 & 0xff;
|
|
*(uint *)(*(longlong *)(puVar2 + 8) + 0xc) = uVar8 >> 8;
|
|
}
|
|
if ((puVar2[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar8;
|
|
uVar16 = FUN_1401c3ef0(puVar2[6],&local_68);
|
|
puVar2[6] = uVar16;
|
|
}
|
|
*puVar2 = 4;
|
|
uVar7 = uVar21;
|
|
uVar8 = uVar21;
|
|
goto switchD_1401c42e1_caseD_4;
|
|
}
|
|
param_1[4] = (longlong)"unknown header flags set";
|
|
*puVar2 = 0x1d;
|
|
}
|
|
else {
|
|
LAB_1401c43bf:
|
|
param_1[4] = (longlong)"unknown compression method";
|
|
*puVar2 = 0x1d;
|
|
}
|
|
break;
|
|
case 2:
|
|
uVar16 = uVar7;
|
|
goto joined_r0x0001401c4506;
|
|
case 3:
|
|
uVar16 = uVar7;
|
|
goto joined_r0x0001401c4587;
|
|
case 4:
|
|
switchD_1401c42e1_caseD_4:
|
|
if ((puVar2[4] & 0x400) == 0) {
|
|
uVar16 = uVar8;
|
|
if (*(longlong *)(puVar2 + 8) != 0) {
|
|
*(undefined8 *)(*(longlong *)(puVar2 + 8) + 0x10) = 0;
|
|
}
|
|
}
|
|
else {
|
|
for (; uVar7 < 0x10; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
puVar2[0x12] = uVar8;
|
|
if (*(longlong *)(puVar2 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar2 + 8) + 0x18) = uVar8;
|
|
}
|
|
uVar7 = uVar21;
|
|
uVar16 = uVar21;
|
|
if ((puVar2[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar8;
|
|
uVar8 = FUN_1401c3ef0(puVar2[6],&local_68);
|
|
puVar2[6] = uVar8;
|
|
}
|
|
}
|
|
uVar8 = uVar16;
|
|
*puVar2 = 5;
|
|
case 5:
|
|
if ((puVar2[4] & 0x400) == 0) {
|
|
LAB_1401c4723:
|
|
puVar2[0x12] = 0;
|
|
*puVar2 = 6;
|
|
switchD_1401c42e1_caseD_6:
|
|
if ((puVar2[4] & 0x800) == 0) {
|
|
if (*(longlong *)(puVar2 + 8) != 0) {
|
|
*(undefined8 *)(*(longlong *)(puVar2 + 8) + 0x20) = 0;
|
|
}
|
|
LAB_1401c47ce:
|
|
puVar2[0x12] = 0;
|
|
*puVar2 = 7;
|
|
switchD_1401c42e1_caseD_7:
|
|
uVar22 = 0;
|
|
if ((puVar2[4] & 0x1000) == 0) {
|
|
if (*(longlong *)(puVar2 + 8) != 0) {
|
|
*(undefined8 *)(*(longlong *)(puVar2 + 8) + 0x30) = 0;
|
|
}
|
|
LAB_1401c486e:
|
|
*puVar2 = 8;
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
switchD_1401c42e1_caseD_8:
|
|
if ((puVar2[4] & 0x200) != 0) {
|
|
for (; uVar7 < 0x10; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
if (uVar8 != (ushort)puVar2[6]) {
|
|
param_1[4] = (longlong)"header crc mismatch";
|
|
*puVar2 = 0x1d;
|
|
break;
|
|
}
|
|
uVar7 = 0;
|
|
uVar8 = uVar7;
|
|
}
|
|
if (*(longlong *)(puVar2 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar2 + 8) + 0x3c) = (int)puVar2[4] >> 9 & 1;
|
|
*(undefined4 *)(*(longlong *)(puVar2 + 8) + 0x40) = 1;
|
|
}
|
|
uVar16 = FUN_1401c4210(0,0,0);
|
|
puVar2[6] = uVar16;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar16;
|
|
LAB_1401c4909:
|
|
*puVar2 = 0xb;
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
break;
|
|
}
|
|
pbVar17 = _Src;
|
|
uVar13 = uVar15;
|
|
uVar12 = local_64;
|
|
if (uVar15 != 0) {
|
|
do {
|
|
lVar14 = *(longlong *)(puVar2 + 8);
|
|
bVar1 = *pbVar17;
|
|
uVar16 = (int)uVar22 + 1;
|
|
uVar22 = (ulonglong)uVar16;
|
|
if (((lVar14 != 0) && (*(longlong *)(lVar14 + 0x30) != 0)) &&
|
|
(puVar2[0x12] < *(uint *)(lVar14 + 0x38))) {
|
|
*(byte *)((ulonglong)puVar2[0x12] + *(longlong *)(lVar14 + 0x30)) = bVar1;
|
|
puVar2[0x12] = puVar2[0x12] + 1;
|
|
}
|
|
} while ((bVar1 != 0) && (pbVar17 = pbVar17 + 1, uVar16 < uVar15));
|
|
if ((puVar2[4] & 0x200) != 0) {
|
|
if (_Src == (byte *)0x0) {
|
|
uVar11 = 0;
|
|
}
|
|
else {
|
|
uVar11 = FUN_1401c3ef0(puVar2[6],_Src);
|
|
}
|
|
puVar2[6] = uVar11;
|
|
}
|
|
uVar15 = uVar15 - uVar16;
|
|
_Src = _Src + uVar22;
|
|
uVar13 = uVar15;
|
|
uVar12 = local_64;
|
|
if (bVar1 == 0) goto LAB_1401c486e;
|
|
}
|
|
}
|
|
else {
|
|
pbVar17 = _Src;
|
|
uVar13 = uVar15;
|
|
uVar12 = local_64;
|
|
if (uVar15 != 0) {
|
|
do {
|
|
lVar14 = *(longlong *)(puVar2 + 8);
|
|
bVar1 = *pbVar17;
|
|
uVar13 = (int)uVar22 + 1;
|
|
uVar22 = (ulonglong)uVar13;
|
|
if (((lVar14 != 0) && (*(longlong *)(lVar14 + 0x20) != 0)) &&
|
|
(puVar2[0x12] < *(uint *)(lVar14 + 0x28))) {
|
|
*(byte *)((ulonglong)puVar2[0x12] + *(longlong *)(lVar14 + 0x20)) = bVar1;
|
|
puVar2[0x12] = puVar2[0x12] + 1;
|
|
}
|
|
} while ((bVar1 != 0) && (pbVar17 = pbVar17 + 1, uVar13 < uVar15));
|
|
if ((puVar2[4] & 0x200) != 0) {
|
|
if (_Src == (byte *)0x0) {
|
|
uVar16 = 0;
|
|
}
|
|
else {
|
|
uVar16 = FUN_1401c3ef0(puVar2[6],_Src);
|
|
}
|
|
puVar2[6] = uVar16;
|
|
}
|
|
uVar13 = uVar15 - uVar13;
|
|
_Src = _Src + uVar22;
|
|
uVar15 = uVar13;
|
|
uVar12 = local_64;
|
|
if (bVar1 == 0) goto LAB_1401c47ce;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
uVar16 = puVar2[0x12];
|
|
uVar11 = uVar16;
|
|
if (uVar15 < uVar16) {
|
|
uVar11 = uVar15;
|
|
}
|
|
uVar13 = uVar15;
|
|
if (uVar11 != 0) {
|
|
lVar14 = *(longlong *)(puVar2 + 8);
|
|
if ((lVar14 != 0) && (*(longlong *)(lVar14 + 0x10) != 0)) {
|
|
uVar16 = *(int *)(lVar14 + 0x18) - uVar16;
|
|
uVar12 = uVar11;
|
|
if (*(uint *)(lVar14 + 0x1c) < uVar11 + uVar16) {
|
|
uVar12 = *(uint *)(lVar14 + 0x1c) - uVar16;
|
|
}
|
|
memcpy((void *)((ulonglong)uVar16 + *(longlong *)(lVar14 + 0x10)),_Src,(ulonglong)uVar12
|
|
);
|
|
}
|
|
if ((puVar2[4] & 0x200) != 0) {
|
|
if (_Src != (byte *)0x0) {
|
|
uVar21 = FUN_1401c3ef0(puVar2[6],_Src);
|
|
}
|
|
puVar2[6] = uVar21;
|
|
}
|
|
uVar13 = uVar15 - uVar11;
|
|
_Src = _Src + uVar11;
|
|
puVar2[0x12] = puVar2[0x12] - uVar11;
|
|
}
|
|
uVar15 = uVar13;
|
|
uVar12 = local_64;
|
|
if (puVar2[0x12] == 0) goto LAB_1401c4723;
|
|
}
|
|
LAB_1401c4abe:
|
|
local_64 = uVar12;
|
|
uVar16 = local_60;
|
|
param_1[2] = (longlong)local_58;
|
|
*param_1 = (longlong)_Src;
|
|
*(uint *)(param_1 + 3) = local_res20;
|
|
*(uint *)(param_1 + 1) = uVar13;
|
|
puVar2[0x11] = uVar7;
|
|
puVar2[0x10] = uVar8;
|
|
if (((puVar2[0xb] == 0) && ((0x19 < (int)*puVar2 || (local_60 == *(uint *)(param_1 + 3))))) ||
|
|
(iVar5 = FUN_1401c3d90(param_1,local_60), iVar5 == 0)) {
|
|
uVar16 = uVar16 - (int)param_1[3];
|
|
local_5c = local_5c - (int)param_1[1];
|
|
*(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + uVar16;
|
|
*(int *)((longlong)param_1 + 0xc) = *(int *)((longlong)param_1 + 0xc) + local_5c;
|
|
puVar2[7] = puVar2[7] + uVar16;
|
|
if ((puVar2[2] != 0) && (uVar16 != 0)) {
|
|
if (puVar2[4] == 0) {
|
|
uVar8 = FUN_1401e5880(puVar2[6],param_1[2] - (ulonglong)uVar16);
|
|
}
|
|
else if (param_1[2] == (ulonglong)uVar16) {
|
|
uVar8 = 0;
|
|
}
|
|
else {
|
|
uVar8 = FUN_1401c3ef0();
|
|
}
|
|
puVar2[6] = uVar8;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar8;
|
|
}
|
|
uVar8 = *puVar2;
|
|
if ((uVar8 == 0x13) || (uVar8 == 0xe)) {
|
|
iVar5 = 0x100;
|
|
}
|
|
else {
|
|
iVar5 = 0;
|
|
}
|
|
iVar6 = 0;
|
|
if (uVar8 == 0xb) {
|
|
iVar6 = 0x80;
|
|
}
|
|
*(uint *)(param_1 + 9) = iVar6 + iVar5 + (-(uint)(puVar2[1] != 0) & 0x40) + puVar2[0x11];
|
|
if (((local_5c != 0) || (uVar16 != 0)) && (param_2 != 4)) {
|
|
return local_res18;
|
|
}
|
|
if (local_res18 != 0) {
|
|
return local_res18;
|
|
}
|
|
return -5;
|
|
}
|
|
*puVar2 = 0x1e;
|
|
LAB_1401c4b19:
|
|
return -4;
|
|
case 6:
|
|
goto switchD_1401c42e1_caseD_6;
|
|
case 7:
|
|
goto switchD_1401c42e1_caseD_7;
|
|
case 8:
|
|
goto switchD_1401c42e1_caseD_8;
|
|
case 9:
|
|
for (; uVar7 < 0x20; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
uVar16 = (uVar8 >> 8 & 0xff00) + ((uVar8 & 0xff00) + uVar8 * 0x10000) * 0x100 +
|
|
(uVar8 >> 0x18);
|
|
puVar2[6] = uVar16;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar16;
|
|
*puVar2 = 10;
|
|
uVar7 = uVar21;
|
|
uVar8 = uVar21;
|
|
case 10:
|
|
if (puVar2[3] == 0) {
|
|
param_1[2] = (longlong)puVar19;
|
|
*(uint *)(param_1 + 3) = uVar11;
|
|
*param_1 = (longlong)_Src;
|
|
*(uint *)(param_1 + 1) = uVar15;
|
|
puVar2[0x10] = uVar8;
|
|
puVar2[0x11] = uVar7;
|
|
return 2;
|
|
}
|
|
uVar16 = FUN_1401e5880(0,0);
|
|
puVar2[6] = uVar16;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar16;
|
|
*puVar2 = 0xb;
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
switchD_1401c42e1_caseD_b:
|
|
uVar13 = uVar15;
|
|
uVar12 = local_64;
|
|
if ((param_2 != 5) && (param_2 != 6)) {
|
|
switchD_1401c42e1_caseD_c:
|
|
if (puVar2[1] == 0) {
|
|
for (; uVar12 = local_64, uVar7 < 3; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
puVar2[1] = uVar8 & 1;
|
|
uVar16 = uVar8 >> 1 & 3;
|
|
if (uVar16 == 0) {
|
|
*puVar2 = 0xd;
|
|
}
|
|
else {
|
|
if (uVar16 != 1) {
|
|
if (uVar16 == 2) {
|
|
*puVar2 = 0x10;
|
|
uVar7 = uVar7 - 3;
|
|
uVar8 = uVar8 >> 3;
|
|
}
|
|
else {
|
|
if (uVar16 != 3) goto LAB_1401c4b45;
|
|
uVar7 = uVar7 - 3;
|
|
param_1[4] = (longlong)"invalid block type";
|
|
*puVar2 = 0x1d;
|
|
uVar8 = uVar8 >> 3;
|
|
}
|
|
break;
|
|
}
|
|
puVar2[0x1a] = 9;
|
|
puVar2[0x1b] = 5;
|
|
*(undefined **)(puVar2 + 0x16) = &DAT_14028a700;
|
|
*puVar2 = 0x13;
|
|
*(undefined **)(puVar2 + 0x18) = &DAT_14028af00;
|
|
if (param_2 == 6) {
|
|
uVar8 = uVar8 >> 3;
|
|
uVar7 = uVar7 - 3;
|
|
uVar13 = uVar15;
|
|
goto LAB_1401c4abe;
|
|
}
|
|
}
|
|
LAB_1401c4b45:
|
|
uVar7 = uVar7 - 3;
|
|
uVar8 = uVar8 >> 3;
|
|
}
|
|
else {
|
|
*puVar2 = 0x1a;
|
|
uVar16 = uVar7 & 7;
|
|
uVar7 = uVar7 - uVar16;
|
|
uVar8 = uVar8 >> (sbyte)uVar16;
|
|
}
|
|
break;
|
|
}
|
|
goto LAB_1401c4abe;
|
|
case 0xb:
|
|
goto switchD_1401c42e1_caseD_b;
|
|
case 0xc:
|
|
goto switchD_1401c42e1_caseD_c;
|
|
case 0xd:
|
|
uVar8 = uVar8 >> (sbyte)(uVar7 & 7);
|
|
for (uVar7 = uVar7 - (uVar7 & 7); uVar7 < 0x20; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
if ((uVar8 & 0xffff) == ~uVar8 >> 0x10) {
|
|
puVar2[0x12] = uVar8 & 0xffff;
|
|
*puVar2 = 0xe;
|
|
uVar7 = uVar21;
|
|
uVar8 = uVar21;
|
|
uVar13 = uVar15;
|
|
if (param_2 != 6) goto switchD_1401c42e1_caseD_e;
|
|
goto LAB_1401c4abe;
|
|
}
|
|
param_1[4] = (longlong)"invalid stored block lengths";
|
|
*puVar2 = 0x1d;
|
|
break;
|
|
case 0xe:
|
|
switchD_1401c42e1_caseD_e:
|
|
*puVar2 = 0xf;
|
|
case 0xf:
|
|
uVar16 = puVar2[0x12];
|
|
if (uVar16 == 0) {
|
|
*puVar2 = 0xb;
|
|
break;
|
|
}
|
|
if (uVar15 < uVar16) {
|
|
uVar16 = uVar15;
|
|
}
|
|
if (uVar11 < uVar16) {
|
|
uVar16 = uVar11;
|
|
}
|
|
uVar22 = (ulonglong)uVar16;
|
|
uVar13 = uVar15;
|
|
if (uVar16 != 0) {
|
|
memcpy(puVar19,_Src,uVar22);
|
|
local_res20 = local_res20 - uVar16;
|
|
_Src = _Src + uVar22;
|
|
local_58 = local_58 + uVar22;
|
|
uVar15 = uVar15 - uVar16;
|
|
puVar2[0x12] = puVar2[0x12] - uVar16;
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
break;
|
|
}
|
|
goto LAB_1401c4abe;
|
|
case 0x10:
|
|
for (; uVar7 < 0xe; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
uVar7 = uVar7 - 0xe;
|
|
uVar21 = uVar8 >> 10;
|
|
uVar16 = (uVar8 & 0x1f) + 0x101;
|
|
uVar13 = (uVar8 >> 5 & 0x1f) + 1;
|
|
uVar8 = uVar8 >> 0xe;
|
|
puVar2[0x1d] = uVar16;
|
|
puVar2[0x1e] = uVar13;
|
|
puVar2[0x1c] = (uVar21 & 0xf) + 4;
|
|
if ((uVar16 < 0x11f) && (uVar13 < 0x1f)) {
|
|
puVar2[0x1f] = 0;
|
|
*puVar2 = 0x11;
|
|
goto switchD_1401c42e1_caseD_11;
|
|
}
|
|
param_1[4] = (longlong)"too many length or distance symbols";
|
|
*puVar2 = 0x1d;
|
|
break;
|
|
case 0x11:
|
|
switchD_1401c42e1_caseD_11:
|
|
if (puVar2[0x1f] < puVar2[0x1c]) {
|
|
do {
|
|
for (; uVar7 < 3; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
uVar7 = uVar7 - 3;
|
|
uVar10 = (ushort)uVar8;
|
|
uVar8 = uVar8 >> 3;
|
|
*(ushort *)
|
|
((longlong)puVar2 +
|
|
(ulonglong)*(ushort *)(&DAT_14028af80 + (ulonglong)puVar2[0x1f] * 2) * 2 + 0x88) =
|
|
uVar10 & 7;
|
|
puVar2[0x1f] = puVar2[0x1f] + 1;
|
|
} while (puVar2[0x1f] < puVar2[0x1c]);
|
|
}
|
|
uVar16 = puVar2[0x1f];
|
|
while (uVar16 < 0x13) {
|
|
*(undefined2 *)
|
|
((longlong)puVar2 +
|
|
(ulonglong)*(ushort *)(&DAT_14028af80 + (ulonglong)puVar2[0x1f] * 2) * 2 + 0x88) = 0;
|
|
puVar2[0x1f] = puVar2[0x1f] + 1;
|
|
uVar16 = puVar2[0x1f];
|
|
}
|
|
*(uint **)(puVar2 + 0x20) = puVar2 + 0x152;
|
|
*(uint **)(puVar2 + 0x16) = puVar2 + 0x152;
|
|
puVar2[0x1a] = 7;
|
|
local_res18 = FUN_1401e97b0(0,puVar2 + 0x22,0x13,puVar2 + 0x20,puVar2 + 0x1a,puVar2 + 0xc2);
|
|
if (local_res18 == 0) {
|
|
puVar2[0x1f] = 0;
|
|
*puVar2 = 0x12;
|
|
uVar11 = local_res20;
|
|
goto switchD_1401c42e1_caseD_12;
|
|
}
|
|
param_1[4] = (longlong)"invalid code lengths set";
|
|
*puVar2 = 0x1d;
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
break;
|
|
case 0x12:
|
|
switchD_1401c42e1_caseD_12:
|
|
puVar19 = local_58;
|
|
if (puVar2[0x1f] < puVar2[0x1e] + puVar2[0x1d]) {
|
|
do {
|
|
uVar12 = *(uint *)(*(longlong *)(puVar2 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar2[0x1a] & 0x1f)) - 1U & uVar8) * 4);
|
|
uVar16 = uVar7;
|
|
local_64 = uVar12;
|
|
if (uVar7 < (uVar12 >> 8 & 0xff)) {
|
|
do {
|
|
uVar7 = uVar16;
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
uVar7 = uVar16 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
uVar8 = uVar8 + ((uint)*_Src << ((byte)uVar16 & 0x1f));
|
|
_Src = _Src + 1;
|
|
uVar12 = *(uint *)(*(longlong *)(puVar2 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar2[0x1a] & 0x1f)) - 1U & uVar8) * 4);
|
|
uVar16 = uVar7;
|
|
local_64 = uVar12;
|
|
} while (uVar7 < (uVar12 >> 8 & 0xff));
|
|
}
|
|
uVar10 = (ushort)(uVar12 >> 0x10);
|
|
local_64._1_1_ = (byte)(uVar12 >> 8);
|
|
local_64 = uVar12;
|
|
if (0xf < uVar10) {
|
|
if (uVar10 == 0x10) {
|
|
for (; uVar7 < local_64._1_1_ + 2; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
uVar7 = uVar7 - local_64._1_1_;
|
|
uVar8 = uVar8 >> (local_64._1_1_ & 0x1f);
|
|
if (puVar2[0x1f] != 0) {
|
|
iVar5 = (uVar8 & 3) + 3;
|
|
uVar7 = uVar7 - 2;
|
|
uVar18 = (ulonglong)
|
|
*(ushort *)((longlong)puVar2 + (ulonglong)(puVar2[0x1f] - 1) * 2 + 0x88);
|
|
uVar8 = uVar8 >> 2;
|
|
goto LAB_1401c4fc0;
|
|
}
|
|
}
|
|
else {
|
|
if (uVar10 == 0x11) {
|
|
for (; uVar7 < local_64._1_1_ + 3; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
iVar6 = -3;
|
|
uVar8 = uVar8 >> (local_64._1_1_ & 0x1f);
|
|
iVar5 = (uVar8 & 7) + 3;
|
|
uVar8 = uVar8 >> 3;
|
|
}
|
|
else {
|
|
for (; uVar7 < local_64._1_1_ + 7; uVar7 = uVar7 + 8) {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
}
|
|
iVar6 = -7;
|
|
uVar8 = uVar8 >> (local_64._1_1_ & 0x1f);
|
|
iVar5 = (uVar8 & 0x7f) + 0xb;
|
|
uVar8 = uVar8 >> 7;
|
|
}
|
|
uVar7 = uVar7 + (iVar6 - (uint)local_64._1_1_);
|
|
uVar18 = uVar22;
|
|
LAB_1401c4fc0:
|
|
if (iVar5 + puVar2[0x1f] <= puVar2[0x1e] + puVar2[0x1d]) {
|
|
for (; iVar5 != 0; iVar5 = iVar5 + -1) {
|
|
*(short *)((longlong)puVar2 + (ulonglong)puVar2[0x1f] * 2 + 0x88) = (short)uVar18;
|
|
puVar2[0x1f] = puVar2[0x1f] + 1;
|
|
}
|
|
goto LAB_1401c4ff5;
|
|
}
|
|
}
|
|
param_1[4] = (longlong)"invalid bit length repeat";
|
|
*puVar2 = 0x1d;
|
|
goto LAB_1401c4918;
|
|
}
|
|
uVar16 = uVar7;
|
|
if (uVar7 < (uVar12 >> 8 & 0xff)) {
|
|
do {
|
|
uVar7 = uVar16;
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar7 = uVar16 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar16 & 0x1f));
|
|
uVar16 = uVar7;
|
|
} while (uVar7 < local_64._1_1_);
|
|
}
|
|
uVar8 = uVar8 >> (local_64._1_1_ & 0x1f);
|
|
uVar7 = uVar7 - local_64._1_1_;
|
|
*(ushort *)((longlong)puVar2 + (ulonglong)puVar2[0x1f] * 2 + 0x88) = uVar10;
|
|
puVar2[0x1f] = puVar2[0x1f] + 1;
|
|
LAB_1401c4ff5:
|
|
} while (puVar2[0x1f] < puVar2[0x1e] + puVar2[0x1d]);
|
|
}
|
|
if (*puVar2 != 0x1d) {
|
|
if ((short)puVar2[0xa2] == 0) {
|
|
param_1[4] = (longlong)"invalid code -- missing end-of-block";
|
|
*puVar2 = 0x1d;
|
|
}
|
|
else {
|
|
*(uint **)(puVar2 + 0x20) = puVar2 + 0x152;
|
|
*(uint **)(puVar2 + 0x16) = puVar2 + 0x152;
|
|
puVar2[0x1a] = 9;
|
|
local_res18 = FUN_1401e97b0(1,puVar2 + 0x22,puVar2[0x1d],puVar2 + 0x20,puVar2 + 0x1a,
|
|
puVar2 + 0xc2);
|
|
if (local_res18 == 0) {
|
|
*(undefined8 *)(puVar2 + 0x18) = *(undefined8 *)(puVar2 + 0x20);
|
|
puVar2[0x1b] = 6;
|
|
local_res18 = FUN_1401e97b0(2,(longlong)puVar2 + (ulonglong)puVar2[0x1d] * 2 + 0x88,
|
|
puVar2[0x1e],puVar2 + 0x20,puVar2 + 0x1b,puVar2 + 0xc2);
|
|
puVar19 = local_58;
|
|
if (local_res18 == 0) {
|
|
*puVar2 = 0x13;
|
|
uVar11 = local_res20;
|
|
uVar13 = uVar15;
|
|
uVar12 = local_64;
|
|
if (param_2 != 6) goto switchD_1401c42e1_caseD_13;
|
|
goto LAB_1401c4abe;
|
|
}
|
|
param_1[4] = (longlong)"invalid distances set";
|
|
*puVar2 = 0x1d;
|
|
uVar11 = local_res20;
|
|
}
|
|
else {
|
|
param_1[4] = (longlong)"invalid literal/lengths set";
|
|
*puVar2 = 0x1d;
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 0x13:
|
|
switchD_1401c42e1_caseD_13:
|
|
*puVar2 = 0x14;
|
|
case 0x14:
|
|
if ((5 < uVar15) && (0x101 < uVar11)) {
|
|
param_1[2] = (longlong)puVar19;
|
|
*(uint *)(param_1 + 3) = uVar11;
|
|
*param_1 = (longlong)_Src;
|
|
*(uint *)(param_1 + 1) = uVar15;
|
|
puVar2[0x10] = uVar8;
|
|
puVar2[0x11] = uVar7;
|
|
FUN_1401e7fd0(param_1,local_60);
|
|
local_58 = (undefined1 *)param_1[2];
|
|
local_res20 = *(uint *)(param_1 + 3);
|
|
_Src = (byte *)*param_1;
|
|
uVar15 = *(uint *)(param_1 + 1);
|
|
uVar7 = puVar2[0x11];
|
|
puVar19 = local_58;
|
|
uVar8 = puVar2[0x10];
|
|
uVar11 = local_res20;
|
|
if (*puVar2 == 0xb) {
|
|
puVar2[0x6f7] = 0xffffffff;
|
|
}
|
|
break;
|
|
}
|
|
puVar2[0x6f7] = 0;
|
|
uVar12 = *(uint *)(*(longlong *)(puVar2 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar2[0x1a] & 0x1f)) - 1U & uVar8) * 4);
|
|
uVar16 = uVar7;
|
|
if (uVar7 < (uVar12 >> 8 & 0xff)) {
|
|
do {
|
|
uVar7 = uVar16;
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
uVar7 = uVar16 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
uVar8 = uVar8 + ((uint)*_Src << ((byte)uVar16 & 0x1f));
|
|
_Src = _Src + 1;
|
|
uVar12 = *(uint *)(*(longlong *)(puVar2 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar2[0x1a] & 0x1f)) - 1U & uVar8) * 4);
|
|
uVar16 = uVar7;
|
|
} while (uVar7 < (uVar12 >> 8 & 0xff));
|
|
}
|
|
cVar4 = (char)uVar12;
|
|
uVar16 = uVar12;
|
|
if ((cVar4 != '\0') && ((uVar12 & 0xf0) == 0)) {
|
|
bVar1 = (byte)(uVar12 >> 8);
|
|
uVar16 = *(uint *)(*(longlong *)(puVar2 + 0x16) +
|
|
(ulonglong)
|
|
((((1 << (cVar4 + bVar1 & 0x1f)) - 1U & uVar8) >> (bVar1 & 0x1f)) +
|
|
(uVar12 >> 0x10)) * 4);
|
|
if (uVar7 < (uVar16 >> 8 & 0xff) + (uVar12 >> 8 & 0xff)) {
|
|
do {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
uVar8 = uVar8 + ((uint)*_Src << ((byte)uVar7 & 0x1f));
|
|
uVar7 = uVar7 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar16 = *(uint *)(*(longlong *)(puVar2 + 0x16) +
|
|
(ulonglong)
|
|
((((1 << (cVar4 + bVar1 & 0x1f)) - 1U & uVar8) >> (bVar1 & 0x1f)) +
|
|
(uVar12 >> 0x10)) * 4);
|
|
} while (uVar7 < (uVar16 >> 8 & 0xff) + (uint)bVar1);
|
|
}
|
|
uVar8 = uVar8 >> (bVar1 & 0x1f);
|
|
uVar7 = uVar7 - bVar1;
|
|
puVar2[0x6f7] = (uint)bVar1;
|
|
local_64 = uVar12;
|
|
}
|
|
uVar11 = uVar16 >> 8 & 0xff;
|
|
puVar2[0x6f7] = puVar2[0x6f7] + uVar11;
|
|
uVar8 = uVar8 >> ((byte)(uVar16 >> 8) & 0x1f);
|
|
uVar7 = uVar7 - uVar11;
|
|
puVar2[0x12] = uVar16 >> 0x10;
|
|
puVar19 = local_58;
|
|
if ((char)uVar16 == '\0') {
|
|
*puVar2 = 0x19;
|
|
uVar11 = local_res20;
|
|
break;
|
|
}
|
|
if ((uVar16 & 0x20) != 0) {
|
|
puVar2[0x6f7] = 0xffffffff;
|
|
goto LAB_1401c4909;
|
|
}
|
|
if ((uVar16 & 0x40) != 0) {
|
|
param_1[4] = (longlong)"invalid literal/length code";
|
|
*puVar2 = 0x1d;
|
|
uVar11 = local_res20;
|
|
break;
|
|
}
|
|
*puVar2 = 0x15;
|
|
puVar2[0x14] = uVar16 & 0xf;
|
|
switchD_1401c42e1_caseD_15:
|
|
uVar16 = puVar2[0x14];
|
|
if (uVar16 != 0) {
|
|
uVar11 = uVar7;
|
|
if (uVar7 < uVar16) {
|
|
do {
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar11 = uVar7 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar7 & 0x1f));
|
|
uVar7 = uVar11;
|
|
} while (uVar11 < puVar2[0x14]);
|
|
}
|
|
uVar7 = uVar11 - uVar16;
|
|
uVar11 = (1 << ((byte)uVar16 & 0x1f)) - 1U & uVar8;
|
|
uVar8 = uVar8 >> ((byte)uVar16 & 0x1f);
|
|
puVar2[0x12] = puVar2[0x12] + uVar11;
|
|
puVar2[0x6f7] = puVar2[0x6f7] + uVar16;
|
|
}
|
|
*puVar2 = 0x16;
|
|
puVar2[0x6f8] = puVar2[0x12];
|
|
switchD_1401c42e1_caseD_16:
|
|
uVar12 = *(uint *)(*(longlong *)(puVar2 + 0x18) +
|
|
(ulonglong)((1 << ((byte)puVar2[0x1b] & 0x1f)) - 1U & uVar8) * 4);
|
|
uVar16 = uVar7;
|
|
if (uVar7 < (uVar12 >> 8 & 0xff)) {
|
|
do {
|
|
uVar7 = uVar16;
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
uVar7 = uVar16 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
uVar8 = uVar8 + ((uint)*_Src << ((byte)uVar16 & 0x1f));
|
|
_Src = _Src + 1;
|
|
uVar12 = *(uint *)(*(longlong *)(puVar2 + 0x18) +
|
|
(ulonglong)((1 << ((byte)puVar2[0x1b] & 0x1f)) - 1U & uVar8) * 4);
|
|
uVar16 = uVar7;
|
|
} while (uVar7 < (uVar12 >> 8 & 0xff));
|
|
}
|
|
uVar16 = uVar12;
|
|
if ((uVar12 & 0xf0) == 0) {
|
|
bVar1 = (byte)(uVar12 >> 8);
|
|
uVar16 = *(uint *)(*(longlong *)(puVar2 + 0x18) +
|
|
(ulonglong)
|
|
((((1 << ((char)uVar12 + bVar1 & 0x1f)) - 1U & uVar8) >> (bVar1 & 0x1f)) +
|
|
(uVar12 >> 0x10)) * 4);
|
|
if (uVar7 < (uVar16 >> 8 & 0xff) + (uVar12 >> 8 & 0xff)) {
|
|
do {
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
uVar8 = uVar8 + ((uint)*_Src << ((byte)uVar7 & 0x1f));
|
|
uVar7 = uVar7 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar16 = *(uint *)(*(longlong *)(puVar2 + 0x18) +
|
|
(ulonglong)
|
|
((((1 << ((char)uVar12 + bVar1 & 0x1f)) - 1U & uVar8) >>
|
|
(bVar1 & 0x1f)) + (uVar12 >> 0x10)) * 4);
|
|
} while (uVar7 < (uVar16 >> 8 & 0xff) + (uint)bVar1);
|
|
}
|
|
uVar8 = uVar8 >> (bVar1 & 0x1f);
|
|
uVar7 = uVar7 - bVar1;
|
|
puVar2[0x6f7] = puVar2[0x6f7] + (uint)bVar1;
|
|
local_64 = uVar12;
|
|
}
|
|
uVar11 = uVar16 >> 8 & 0xff;
|
|
puVar2[0x6f7] = puVar2[0x6f7] + uVar11;
|
|
uVar8 = uVar8 >> ((byte)(uVar16 >> 8) & 0x1f);
|
|
uVar7 = uVar7 - uVar11;
|
|
puVar19 = local_58;
|
|
if ((uVar16 & 0x40) != 0) {
|
|
param_1[4] = (longlong)"invalid distance code";
|
|
*puVar2 = 0x1d;
|
|
uVar11 = local_res20;
|
|
break;
|
|
}
|
|
*puVar2 = 0x17;
|
|
puVar2[0x13] = uVar16 >> 0x10;
|
|
puVar2[0x14] = uVar16 & 0xf;
|
|
uVar11 = local_res20;
|
|
switchD_1401c42e1_caseD_17:
|
|
uVar16 = puVar2[0x14];
|
|
if (uVar16 != 0) {
|
|
uVar21 = uVar7;
|
|
if (uVar7 < uVar16) {
|
|
do {
|
|
uVar7 = uVar21;
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
uVar7 = uVar21 + 8;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar8 = uVar8 + ((uint)bVar1 << ((byte)uVar21 & 0x1f));
|
|
uVar21 = uVar7;
|
|
} while (uVar7 < puVar2[0x14]);
|
|
}
|
|
uVar7 = uVar7 - uVar16;
|
|
uVar12 = (1 << ((byte)uVar16 & 0x1f)) - 1U & uVar8;
|
|
uVar8 = uVar8 >> ((byte)uVar16 & 0x1f);
|
|
puVar2[0x13] = puVar2[0x13] + uVar12;
|
|
puVar2[0x6f7] = puVar2[0x6f7] + uVar16;
|
|
}
|
|
*puVar2 = 0x18;
|
|
switchD_1401c42e1_caseD_18:
|
|
uVar13 = uVar15;
|
|
uVar12 = local_64;
|
|
if (uVar11 != 0) {
|
|
uVar16 = puVar2[0x13];
|
|
if (local_60 - uVar11 < uVar16) {
|
|
uVar16 = uVar16 - (local_60 - uVar11);
|
|
if ((puVar2[0xc] < uVar16) && (puVar2[0x6f6] != 0)) {
|
|
param_1[4] = (longlong)"invalid distance too far back";
|
|
*puVar2 = 0x1d;
|
|
break;
|
|
}
|
|
uVar13 = puVar2[0xd];
|
|
if (uVar13 < uVar16) {
|
|
uVar16 = uVar16 - uVar13;
|
|
uVar13 = puVar2[0xb] - uVar16;
|
|
}
|
|
else {
|
|
uVar13 = uVar13 - uVar16;
|
|
}
|
|
uVar12 = puVar2[0x12];
|
|
lVar14 = (ulonglong)uVar13 + *(longlong *)(puVar2 + 0xe);
|
|
if (uVar12 < uVar16) goto LAB_1401c5615;
|
|
}
|
|
else {
|
|
lVar14 = (longlong)puVar19 - (ulonglong)uVar16;
|
|
uVar12 = puVar2[0x12];
|
|
LAB_1401c5615:
|
|
uVar16 = uVar12;
|
|
uVar12 = uVar16;
|
|
}
|
|
if (uVar11 < uVar16) {
|
|
uVar16 = uVar11;
|
|
}
|
|
local_res20 = uVar11 - uVar16;
|
|
puVar2[0x12] = uVar12 - uVar16;
|
|
puVar20 = puVar19;
|
|
do {
|
|
local_58 = puVar20 + 1;
|
|
uVar16 = uVar16 - 1;
|
|
*puVar20 = puVar20[lVar14 - (longlong)puVar19];
|
|
puVar20 = local_58;
|
|
} while (uVar16 != 0);
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
if (puVar2[0x12] == 0) {
|
|
*puVar2 = 0x14;
|
|
}
|
|
break;
|
|
}
|
|
goto LAB_1401c4abe;
|
|
case 0x15:
|
|
goto switchD_1401c42e1_caseD_15;
|
|
case 0x16:
|
|
goto switchD_1401c42e1_caseD_16;
|
|
case 0x17:
|
|
goto switchD_1401c42e1_caseD_17;
|
|
case 0x18:
|
|
goto switchD_1401c42e1_caseD_18;
|
|
case 0x19:
|
|
if (uVar11 == 0) goto LAB_1401c4abe;
|
|
local_58 = puVar19 + 1;
|
|
local_res20 = uVar11 - 1;
|
|
*puVar19 = (char)puVar2[0x12];
|
|
*puVar2 = 0x14;
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
break;
|
|
case 0x1a:
|
|
uVar16 = uVar7;
|
|
uVar3 = uVar8;
|
|
if (puVar2[2] != 0) {
|
|
for (; uVar16 < 0x20; uVar16 = uVar16 + 8) {
|
|
uVar7 = uVar16;
|
|
uVar8 = uVar3;
|
|
uVar13 = 0;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
bVar9 = (byte)uVar16;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar3 = uVar3 + ((uint)bVar1 << (bVar9 & 0x1f));
|
|
}
|
|
uVar8 = local_60 - uVar11;
|
|
*(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + uVar8;
|
|
puVar2[7] = puVar2[7] + uVar8;
|
|
if (uVar8 != 0) {
|
|
if (puVar2[4] == 0) {
|
|
uVar7 = FUN_1401e5880(puVar2[6],(longlong)puVar19 - (longlong)(ulonglong)uVar8);
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
}
|
|
else {
|
|
uVar7 = uVar21;
|
|
if (puVar19 != (undefined1 *)(ulonglong)uVar8) {
|
|
uVar7 = FUN_1401c3ef0(puVar2[6]);
|
|
puVar19 = local_58;
|
|
uVar11 = local_res20;
|
|
}
|
|
}
|
|
puVar2[6] = uVar7;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar7;
|
|
}
|
|
uVar12 = uVar3;
|
|
if (puVar2[4] == 0) {
|
|
uVar12 = ((uVar3 & 0xff00) + uVar3 * 0x10000) * 0x100 + (uVar3 >> 8 & 0xff00) +
|
|
(uVar3 >> 0x18);
|
|
}
|
|
uVar7 = uVar21;
|
|
uVar8 = uVar21;
|
|
local_60 = uVar11;
|
|
if (uVar12 != puVar2[6]) {
|
|
param_1[4] = (longlong)"incorrect data check";
|
|
*puVar2 = 0x1d;
|
|
uVar7 = uVar16;
|
|
uVar8 = uVar3;
|
|
break;
|
|
}
|
|
}
|
|
*puVar2 = 0x1b;
|
|
case 0x1b:
|
|
if ((puVar2[2] != 0) && (uVar16 = uVar7, uVar3 = uVar8, puVar2[4] != 0)) {
|
|
for (; uVar16 < 0x20; uVar16 = uVar16 + 8) {
|
|
uVar7 = uVar16;
|
|
uVar8 = uVar3;
|
|
uVar13 = 0;
|
|
uVar12 = local_64;
|
|
if (uVar15 == 0) goto LAB_1401c4abe;
|
|
bVar1 = *_Src;
|
|
bVar9 = (byte)uVar16;
|
|
uVar15 = uVar15 - 1;
|
|
_Src = _Src + 1;
|
|
uVar3 = uVar3 + ((uint)bVar1 << (bVar9 & 0x1f));
|
|
}
|
|
uVar7 = uVar21;
|
|
uVar8 = uVar21;
|
|
if (uVar3 != puVar2[7]) {
|
|
param_1[4] = (longlong)"incorrect length check";
|
|
*puVar2 = 0x1d;
|
|
uVar7 = uVar16;
|
|
uVar8 = uVar3;
|
|
break;
|
|
}
|
|
}
|
|
*puVar2 = 0x1c;
|
|
switchD_1401c42e1_caseD_1c:
|
|
local_res18 = 1;
|
|
uVar13 = uVar15;
|
|
uVar12 = local_64;
|
|
goto LAB_1401c4abe;
|
|
case 0x1c:
|
|
goto switchD_1401c42e1_caseD_1c;
|
|
case 0x1d:
|
|
local_res18 = -3;
|
|
goto LAB_1401c4abe;
|
|
case 0x1e:
|
|
goto LAB_1401c4b19;
|
|
}
|
|
LAB_1401c4918:
|
|
uVar16 = *puVar2;
|
|
} while( true );
|
|
}
|
|
|