1164 lines
36 KiB
C
1164 lines
36 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x140111c08 FUN_140111c08
|
|
* Pseudocode, not original source. */
|
|
|
|
int FUN_140111c08(longlong *param_1,int param_2)
|
|
|
|
{
|
|
uint *puVar1;
|
|
char cVar2;
|
|
uint uVar3;
|
|
undefined8 uVar4;
|
|
char *pcVar5;
|
|
byte bVar6;
|
|
ushort uVar7;
|
|
uint uVar8;
|
|
uint uVar9;
|
|
ulonglong uVar10;
|
|
longlong lVar11;
|
|
uint uVar12;
|
|
ulonglong uVar13;
|
|
uint uVar14;
|
|
int iVar15;
|
|
uint *puVar16;
|
|
ulonglong uVar17;
|
|
undefined2 uVar18;
|
|
undefined1 *puVar19;
|
|
uint uVar20;
|
|
ulonglong uVar21;
|
|
int iVar22;
|
|
uint uVar23;
|
|
uint uVar24;
|
|
uint uVar25;
|
|
int local_res8;
|
|
uint local_res18;
|
|
uint local_res20;
|
|
undefined2 local_68;
|
|
undefined1 local_66;
|
|
undefined1 local_65;
|
|
undefined4 local_64;
|
|
uint local_60;
|
|
uint *local_58;
|
|
undefined1 *local_50;
|
|
|
|
if ((((param_1 == (longlong *)0x0) || (puVar1 = (uint *)param_1[5], puVar1 == (uint *)0x0)) ||
|
|
(param_1[2] == 0)) || ((*param_1 == 0 && ((int)param_1[1] != 0)))) {
|
|
return -2;
|
|
}
|
|
uVar25 = *puVar1;
|
|
uVar23 = puVar1[0x10];
|
|
uVar14 = puVar1[0x11];
|
|
local_res8 = 0;
|
|
if (uVar25 == 0xb) {
|
|
uVar25 = 0xc;
|
|
}
|
|
*puVar1 = uVar25;
|
|
local_res20 = *(uint *)(param_1 + 3);
|
|
uVar17 = (ulonglong)local_res20;
|
|
local_58 = (uint *)*param_1;
|
|
uVar25 = *(uint *)(param_1 + 1);
|
|
local_50 = (undefined1 *)param_1[2];
|
|
uVar13 = uVar17;
|
|
local_60 = uVar25;
|
|
LAB_140111c8e:
|
|
uVar21 = 0;
|
|
uVar10 = 0x10;
|
|
puVar16 = local_58;
|
|
LAB_140111c93:
|
|
local_res18 = (uint)uVar13;
|
|
puVar19 = local_50;
|
|
LAB_140111c9b:
|
|
uVar12 = 7;
|
|
LAB_140111ca0:
|
|
do {
|
|
uVar8 = (uint)uVar10;
|
|
uVar3 = *puVar1;
|
|
uVar20 = (uint)uVar21;
|
|
uVar24 = (uint)uVar13;
|
|
uVar9 = local_64;
|
|
if ((int)uVar3 < 0xf) {
|
|
if (uVar3 == 0xe) {
|
|
LAB_14011237c:
|
|
uVar3 = puVar1[0x12];
|
|
if (uVar3 != 0) {
|
|
if (uVar25 < uVar3) {
|
|
uVar3 = uVar25;
|
|
}
|
|
if (uVar24 < uVar3) {
|
|
uVar3 = uVar24;
|
|
}
|
|
uVar12 = uVar25;
|
|
if (uVar3 != 0) {
|
|
memcpy(puVar19,local_58,(ulonglong)uVar3);
|
|
local_58 = (uint *)((longlong)local_58 + (ulonglong)uVar3);
|
|
uVar25 = uVar25 - uVar3;
|
|
local_res18 = local_res18 - uVar3;
|
|
local_50 = local_50 + uVar3;
|
|
puVar1[0x12] = puVar1[0x12] - uVar3;
|
|
goto LAB_1401123d2;
|
|
}
|
|
goto LAB_1401120f6;
|
|
}
|
|
*puVar1 = 0xb;
|
|
puVar16 = local_58;
|
|
goto LAB_140111ca0;
|
|
}
|
|
if ((int)uVar3 <= (int)uVar12) {
|
|
if (uVar3 == uVar12) goto LAB_140112076;
|
|
if (uVar3 == 0) {
|
|
uVar3 = uVar23;
|
|
if (puVar1[2] != uVar20) goto LAB_140112182;
|
|
*puVar1 = 0xc;
|
|
goto LAB_140111c9b;
|
|
}
|
|
if (uVar3 == 1) goto LAB_140111d2b;
|
|
if (uVar3 == 2) goto LAB_140111dcb;
|
|
if (uVar3 == 3) goto LAB_140111e51;
|
|
if (uVar3 == 4) goto LAB_140111eaf;
|
|
if (uVar3 == 5) goto LAB_140111ecf;
|
|
if (uVar3 != 6) {
|
|
return -2;
|
|
}
|
|
goto LAB_140111fdd;
|
|
}
|
|
if (uVar3 == 8) goto LAB_1401122da;
|
|
if (uVar3 == 9) {
|
|
for (; uVar14 < 0x20; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
uVar23 = (uVar23 >> 8 & 0xff00) + ((uVar23 & 0xff00) + uVar23 * 0x10000) * 0x100 +
|
|
(uVar23 >> 0x18);
|
|
puVar1[6] = uVar23;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar23;
|
|
*puVar1 = 10;
|
|
uVar23 = uVar20;
|
|
uVar14 = uVar20;
|
|
LAB_14011243e:
|
|
if (puVar1[3] == uVar20) {
|
|
param_1[2] = (longlong)puVar19;
|
|
*(uint *)(param_1 + 3) = uVar24;
|
|
*param_1 = (longlong)puVar16;
|
|
*(uint *)(param_1 + 1) = uVar25;
|
|
puVar1[0x10] = uVar23;
|
|
puVar1[0x11] = uVar14;
|
|
return 2;
|
|
}
|
|
uVar12 = FUN_1401161bc(0,(byte *)0x0,0);
|
|
uVar17 = (ulonglong)local_res20;
|
|
uVar13 = (ulonglong)local_res18;
|
|
uVar21 = 0;
|
|
puVar1[6] = uVar12;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar12;
|
|
*puVar1 = 0xb;
|
|
uVar10 = 0x10;
|
|
puVar19 = local_50;
|
|
LAB_140112474:
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (param_2 == 5) goto LAB_1401120f6;
|
|
}
|
|
else {
|
|
if (uVar3 == 10) goto LAB_14011243e;
|
|
if (uVar3 == 0xb) goto LAB_140112474;
|
|
if (uVar3 != 0xc) {
|
|
if (uVar3 != 0xd) {
|
|
return -2;
|
|
}
|
|
uVar23 = uVar23 >> (sbyte)(uVar14 & 7);
|
|
for (uVar14 = uVar14 - (uVar14 & 7); uVar14 < 0x20; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
if ((uVar23 & 0xffff) == ~uVar23 >> 0x10) {
|
|
puVar1[0x12] = uVar23 & 0xffff;
|
|
*puVar1 = 0xe;
|
|
uVar12 = 7;
|
|
uVar23 = uVar20;
|
|
uVar14 = uVar20;
|
|
goto LAB_14011237c;
|
|
}
|
|
pcVar5 = "invalid stored block lengths";
|
|
goto LAB_1401122a0;
|
|
}
|
|
}
|
|
if (puVar1[1] != (uint)uVar21) {
|
|
uVar12 = 7;
|
|
*puVar1 = 0x18;
|
|
uVar23 = uVar23 >> (sbyte)(uVar14 & 7);
|
|
uVar14 = uVar14 - (uVar14 & 7);
|
|
goto LAB_140111ca0;
|
|
}
|
|
goto LAB_1401124be;
|
|
}
|
|
if (0x16 < (int)uVar3) {
|
|
uVar12 = uVar25;
|
|
if (uVar3 == 0x17) {
|
|
if (uVar24 == 0) goto LAB_1401120f6;
|
|
*puVar19 = (char)puVar1[0x12];
|
|
local_50 = puVar19 + 1;
|
|
uVar13 = (ulonglong)(uVar24 - 1);
|
|
*puVar1 = 0x12;
|
|
goto LAB_140111c93;
|
|
}
|
|
if (uVar3 == 0x18) {
|
|
uVar12 = uVar23;
|
|
uVar3 = uVar14;
|
|
if (puVar1[2] != uVar20) goto LAB_140112f90;
|
|
goto LAB_140113028;
|
|
}
|
|
if (uVar3 == 0x19) goto LAB_14011302e;
|
|
if (uVar3 == 0x1a) goto LAB_1401130d4;
|
|
if (uVar3 != 0x1b) {
|
|
if (uVar3 == 0x1c) {
|
|
return -4;
|
|
}
|
|
return -2;
|
|
}
|
|
local_res8 = -3;
|
|
goto LAB_1401120f6;
|
|
}
|
|
if (uVar3 == 0x16) goto LAB_140112e98;
|
|
if (uVar3 != 0xf) {
|
|
if (uVar3 == 0x10) goto LAB_14011268f;
|
|
if (uVar3 == 0x11) goto LAB_140112780;
|
|
uVar12 = (uint)uVar17;
|
|
if (uVar3 == 0x12) goto LAB_140112aa1;
|
|
if (uVar3 == 0x13) goto LAB_140112c76;
|
|
if (uVar3 == 0x14) goto LAB_140112cc4;
|
|
if (uVar3 != 0x15) {
|
|
return -2;
|
|
}
|
|
goto LAB_140112e30;
|
|
}
|
|
for (; uVar14 < 0xe; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
uVar14 = uVar14 - 0xe;
|
|
uVar24 = uVar23 >> 10;
|
|
uVar12 = (uVar23 & 0x1f) + 0x101;
|
|
uVar3 = (uVar23 >> 5 & 0x1f) + 1;
|
|
uVar23 = uVar23 >> 0xe;
|
|
puVar1[0x1d] = uVar12;
|
|
puVar1[0x1e] = uVar3;
|
|
puVar1[0x1c] = (uVar24 & 0xf) + 4;
|
|
if ((0x11e < uVar12) || (0x1e < uVar3)) {
|
|
pcVar5 = "too many length or distance symbols";
|
|
goto LAB_140112236;
|
|
}
|
|
puVar1[0x1f] = uVar20;
|
|
*puVar1 = 0x10;
|
|
LAB_14011268f:
|
|
while (uVar3 = uVar23, puVar1[0x1f] < puVar1[0x1c]) {
|
|
for (; uVar14 < 3; uVar14 = uVar14 + 8) {
|
|
uVar23 = uVar3;
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar23 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
bVar6 = (byte)uVar14;
|
|
uVar25 = uVar25 - 1;
|
|
uVar3 = uVar3 + ((uint)(byte)uVar23 << (bVar6 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
uVar23 = uVar3 >> 3;
|
|
*(ushort *)
|
|
((longlong)puVar1 +
|
|
(ulonglong)*(ushort *)(&DAT_140155f20 + (ulonglong)puVar1[0x1f] * 2) * 2 + 0x88) =
|
|
(ushort)uVar3 & 7;
|
|
puVar1[0x1f] = puVar1[0x1f] + 1;
|
|
uVar14 = uVar14 - 3;
|
|
}
|
|
while (puVar1[0x1f] < 0x13) {
|
|
*(short *)((longlong)puVar1 +
|
|
(ulonglong)*(ushort *)(&DAT_140155f20 + (ulonglong)puVar1[0x1f] * 2) * 2 + 0x88) =
|
|
(short)uVar21;
|
|
puVar1[0x1f] = puVar1[0x1f] + 1;
|
|
}
|
|
puVar1[0x1a] = 7;
|
|
*(uint **)(puVar1 + 0x20) = puVar1 + 0x152;
|
|
*(uint **)(puVar1 + 0x16) = puVar1 + 0x152;
|
|
uVar4 = FUN_140115d54(0,(ushort *)(puVar1 + 0x22),0x13,(longlong *)(puVar1 + 0x20),puVar1 + 0x1a
|
|
,(undefined *)(puVar1 + 0xc2));
|
|
uVar21 = 0;
|
|
local_res8 = (int)uVar4;
|
|
uVar10 = 0x10;
|
|
puVar19 = local_50;
|
|
if (local_res8 != 0) {
|
|
uVar17 = (ulonglong)local_res20;
|
|
uVar13 = (ulonglong)local_res18;
|
|
param_1[4] = (longlong)"invalid code lengths set";
|
|
*puVar1 = 0x1b;
|
|
goto LAB_140111c9b;
|
|
}
|
|
puVar1[0x1f] = 0;
|
|
*puVar1 = 0x11;
|
|
LAB_140112780:
|
|
if (puVar1[0x1f] < puVar1[0x1e] + puVar1[0x1d]) {
|
|
do {
|
|
for (; uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar23) * 4),
|
|
uVar14 < (uVar9 >> 8 & 0xff); uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
uVar7 = (ushort)(uVar9 >> 0x10);
|
|
local_64._1_1_ = (byte)(uVar9 >> 8);
|
|
local_64 = uVar9;
|
|
if (uVar7 < (ushort)uVar10) {
|
|
if (uVar14 < (uVar9 >> 8 & 0xff)) {
|
|
do {
|
|
uVar12 = 0;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
bVar6 = (byte)uVar14;
|
|
uVar14 = uVar14 + 8;
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << (bVar6 & 0x1f));
|
|
local_58 = puVar16;
|
|
} while (uVar14 < local_64._1_1_);
|
|
}
|
|
uVar23 = uVar23 >> (local_64._1_1_ & 0x1f);
|
|
uVar14 = uVar14 - local_64._1_1_;
|
|
*(ushort *)((longlong)puVar1 + (ulonglong)puVar1[0x1f] * 2 + 0x88) = uVar7;
|
|
puVar1[0x1f] = puVar1[0x1f] + 1;
|
|
}
|
|
else {
|
|
if (uVar7 == (ushort)uVar10) {
|
|
for (; uVar14 < local_64._1_1_ + 2; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
uVar14 = uVar14 - local_64._1_1_;
|
|
uVar23 = uVar23 >> (local_64._1_1_ & 0x1f);
|
|
if (puVar1[0x1f] == 0) {
|
|
param_1[4] = (longlong)"invalid bit length repeat";
|
|
*puVar1 = 0x1b;
|
|
goto LAB_1401121d1;
|
|
}
|
|
uVar18 = *(undefined2 *)((longlong)puVar1 + (ulonglong)(puVar1[0x1f] - 1) * 2 + 0x88);
|
|
iVar22 = (uVar23 & 3) + 3;
|
|
uVar14 = uVar14 - 2;
|
|
uVar23 = uVar23 >> 2;
|
|
}
|
|
else {
|
|
if (uVar7 == 0x11) {
|
|
for (; uVar14 < local_64._1_1_ + 3; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
iVar15 = -3;
|
|
uVar23 = uVar23 >> (local_64._1_1_ & 0x1f);
|
|
iVar22 = (uVar23 & 7) + 3;
|
|
uVar23 = uVar23 >> 3;
|
|
}
|
|
else {
|
|
for (; uVar14 < local_64._1_1_ + 7; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
iVar15 = -7;
|
|
uVar23 = uVar23 >> (local_64._1_1_ & 0x1f);
|
|
iVar22 = (uVar23 & 0x7f) + 0xb;
|
|
uVar23 = uVar23 >> 7;
|
|
}
|
|
uVar18 = (undefined2)uVar21;
|
|
uVar14 = uVar14 + (iVar15 - (uint)local_64._1_1_);
|
|
}
|
|
if (puVar1[0x1e] + puVar1[0x1d] < iVar22 + puVar1[0x1f]) {
|
|
param_1[4] = (longlong)"invalid bit length repeat";
|
|
*puVar1 = 0x1b;
|
|
break;
|
|
}
|
|
for (; iVar22 != 0; iVar22 = iVar22 + -1) {
|
|
*(undefined2 *)((longlong)puVar1 + (ulonglong)puVar1[0x1f] * 2 + 0x88) = uVar18;
|
|
puVar1[0x1f] = puVar1[0x1f] + 1;
|
|
}
|
|
uVar10 = 0x10;
|
|
}
|
|
} while (puVar1[0x1f] < puVar1[0x1e] + puVar1[0x1d]);
|
|
}
|
|
uVar17 = (ulonglong)local_res20;
|
|
uVar13 = (ulonglong)local_res18;
|
|
uVar10 = 0x10;
|
|
uVar12 = 7;
|
|
} while (*puVar1 == 0x1b);
|
|
*(uint **)(puVar1 + 0x20) = puVar1 + 0x152;
|
|
*(uint **)(puVar1 + 0x16) = puVar1 + 0x152;
|
|
puVar1[0x1a] = 9;
|
|
uVar4 = FUN_140115d54(1,(ushort *)(puVar1 + 0x22),puVar1[0x1d],(longlong *)(puVar1 + 0x20),
|
|
puVar1 + 0x1a,(undefined *)(puVar1 + 0xc2));
|
|
local_res8 = (int)uVar4;
|
|
if (local_res8 != 0) {
|
|
param_1[4] = (longlong)"invalid literal/lengths set";
|
|
*puVar1 = 0x1b;
|
|
puVar16 = local_58;
|
|
goto LAB_1401121cd;
|
|
}
|
|
*(undefined8 *)(puVar1 + 0x18) = *(undefined8 *)(puVar1 + 0x20);
|
|
puVar1[0x1b] = 6;
|
|
uVar4 = FUN_140115d54(2,(ushort *)((longlong)puVar1 + (ulonglong)puVar1[0x1d] * 2 + 0x88),
|
|
puVar1[0x1e],(longlong *)(puVar1 + 0x20),puVar1 + 0x1b,
|
|
(undefined *)(puVar1 + 0xc2));
|
|
uVar17 = (ulonglong)local_res20;
|
|
uVar13 = (ulonglong)local_res18;
|
|
uVar21 = 0;
|
|
local_res8 = (int)uVar4;
|
|
puVar19 = local_50;
|
|
puVar16 = local_58;
|
|
if (local_res8 != 0) {
|
|
pcVar5 = "invalid distances set";
|
|
goto LAB_140112236;
|
|
}
|
|
*puVar1 = 0x12;
|
|
uVar24 = local_res18;
|
|
uVar12 = local_res20;
|
|
LAB_140112aa1:
|
|
if ((5 < uVar25) && (0x101 < uVar24)) {
|
|
param_1[2] = (longlong)puVar19;
|
|
*(uint *)(param_1 + 3) = uVar24;
|
|
*param_1 = (longlong)puVar16;
|
|
*(uint *)(param_1 + 1) = uVar25;
|
|
puVar1[0x10] = uVar23;
|
|
puVar1[0x11] = uVar14;
|
|
FUN_1401158f4(param_1,uVar12);
|
|
local_58 = (uint *)*param_1;
|
|
local_50 = (undefined1 *)param_1[2];
|
|
local_res18 = *(uint *)(param_1 + 3);
|
|
uVar25 = *(uint *)(param_1 + 1);
|
|
uVar23 = puVar1[0x10];
|
|
uVar14 = puVar1[0x11];
|
|
LAB_1401123d2:
|
|
uVar13 = (ulonglong)local_res18;
|
|
uVar17 = (ulonglong)local_res20;
|
|
goto LAB_140111c8e;
|
|
}
|
|
uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar23) * 4);
|
|
for (; uVar14 < (uVar9 >> 8 & 0xff); uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar23) * 4);
|
|
local_58 = puVar16;
|
|
}
|
|
cVar2 = (char)uVar9;
|
|
uVar12 = uVar9;
|
|
if ((cVar2 != '\0') && ((uVar9 & 0xf0) == 0)) {
|
|
bVar6 = (byte)(uVar9 >> 8);
|
|
uVar12 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)
|
|
((((1 << (cVar2 + bVar6 & 0x1f)) - 1U & uVar23) >> (bVar6 & 0x1f)) +
|
|
(uVar9 >> 0x10)) * 4);
|
|
uVar3 = (uVar12 >> 8 & 0xff) + (uVar9 >> 8 & 0xff);
|
|
for (; uVar14 < uVar3; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar23 = uVar23 + ((uint)(byte)*puVar16 << ((byte)uVar14 & 0x1f));
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar12 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)
|
|
((((1 << (cVar2 + bVar6 & 0x1f)) - 1U & uVar23) >> (bVar6 & 0x1f)) +
|
|
(uVar9 >> 0x10)) * 4);
|
|
uVar3 = (uVar12 >> 8 & 0xff) + (uint)bVar6;
|
|
local_58 = puVar16;
|
|
}
|
|
uVar23 = uVar23 >> (bVar6 & 0x1f);
|
|
uVar14 = uVar14 - bVar6;
|
|
local_64 = uVar9;
|
|
}
|
|
uVar23 = uVar23 >> ((byte)(uVar12 >> 8) & 0x1f);
|
|
uVar14 = uVar14 - (uVar12 >> 8 & 0xff);
|
|
puVar1[0x12] = uVar12 >> 0x10;
|
|
if ((char)uVar12 == '\0') {
|
|
*puVar1 = 0x17;
|
|
goto LAB_1401121cd;
|
|
}
|
|
if ((uVar12 & 0x20) != 0) {
|
|
*puVar1 = 0xb;
|
|
goto LAB_1401121cd;
|
|
}
|
|
if ((uVar12 & 0x40) != 0) {
|
|
param_1[4] = (longlong)"invalid literal/length code";
|
|
*puVar1 = 0x1b;
|
|
goto LAB_1401121cd;
|
|
}
|
|
*puVar1 = 0x13;
|
|
puVar1[0x14] = uVar12 & 0xf;
|
|
LAB_140112c76:
|
|
uVar3 = puVar1[0x14];
|
|
if (uVar3 != 0) {
|
|
if (uVar14 < uVar3) {
|
|
do {
|
|
uVar12 = 0;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
bVar6 = (byte)uVar14;
|
|
uVar14 = uVar14 + 8;
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << (bVar6 & 0x1f));
|
|
local_58 = puVar16;
|
|
} while (uVar14 < puVar1[0x14]);
|
|
}
|
|
uVar12 = (1 << ((byte)uVar3 & 0x1f)) - 1U & uVar23;
|
|
uVar23 = uVar23 >> ((byte)uVar3 & 0x1f);
|
|
puVar1[0x12] = puVar1[0x12] + uVar12;
|
|
uVar14 = uVar14 - uVar3;
|
|
}
|
|
*puVar1 = 0x14;
|
|
LAB_140112cc4:
|
|
uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x18) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1b] & 0x1f)) - 1U & uVar23) * 4);
|
|
for (; uVar14 < (uVar9 >> 8 & 0xff); uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x18) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1b] & 0x1f)) - 1U & uVar23) * 4);
|
|
local_58 = puVar16;
|
|
}
|
|
uVar12 = uVar9;
|
|
if ((uVar9 & 0xf0) == 0) {
|
|
bVar6 = (byte)(uVar9 >> 8);
|
|
uVar12 = *(uint *)(*(longlong *)(puVar1 + 0x18) +
|
|
(ulonglong)
|
|
((((1 << ((char)uVar9 + bVar6 & 0x1f)) - 1U & uVar23) >> (bVar6 & 0x1f)) +
|
|
(uVar9 >> 0x10)) * 4);
|
|
uVar3 = (uVar12 >> 8 & 0xff) + (uVar9 >> 8 & 0xff);
|
|
for (; uVar14 < uVar3; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar23 = uVar23 + ((uint)(byte)*puVar16 << ((byte)uVar14 & 0x1f));
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar12 = *(uint *)(*(longlong *)(puVar1 + 0x18) +
|
|
(ulonglong)
|
|
((((1 << ((char)uVar9 + bVar6 & 0x1f)) - 1U & uVar23) >> (bVar6 & 0x1f)) +
|
|
(uVar9 >> 0x10)) * 4);
|
|
uVar3 = (uVar12 >> 8 & 0xff) + (uint)bVar6;
|
|
local_58 = puVar16;
|
|
}
|
|
uVar23 = uVar23 >> (bVar6 & 0x1f);
|
|
uVar14 = uVar14 - bVar6;
|
|
local_64 = uVar9;
|
|
}
|
|
uVar17 = (ulonglong)local_res20;
|
|
uVar13 = (ulonglong)local_res18;
|
|
uVar23 = uVar23 >> ((byte)(uVar12 >> 8) & 0x1f);
|
|
uVar14 = uVar14 - (uVar12 >> 8 & 0xff);
|
|
if ((uVar12 & 0x40) != 0) {
|
|
param_1[4] = (longlong)"invalid distance code";
|
|
*puVar1 = 0x1b;
|
|
goto LAB_1401125a8;
|
|
}
|
|
*puVar1 = 0x15;
|
|
puVar1[0x13] = uVar12 >> 0x10;
|
|
uVar21 = 0;
|
|
puVar1[0x14] = uVar12 & 0xf;
|
|
puVar19 = local_50;
|
|
LAB_140112e30:
|
|
uVar24 = (uint)uVar13;
|
|
uVar3 = puVar1[0x14];
|
|
if (uVar3 != 0) {
|
|
if (uVar14 < uVar3) {
|
|
do {
|
|
uVar12 = 0;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
bVar6 = (byte)uVar14;
|
|
uVar14 = uVar14 + 8;
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << (bVar6 & 0x1f));
|
|
local_58 = puVar16;
|
|
} while (uVar14 < puVar1[0x14]);
|
|
}
|
|
uVar12 = (1 << ((byte)uVar3 & 0x1f)) - 1U & uVar23;
|
|
uVar23 = uVar23 >> ((byte)uVar3 & 0x1f);
|
|
puVar1[0x13] = puVar1[0x13] + uVar12;
|
|
uVar14 = uVar14 - uVar3;
|
|
}
|
|
if ((puVar1[0xc] - uVar24) + (int)uVar17 < puVar1[0x13]) {
|
|
pcVar5 = "invalid distance too far back";
|
|
goto LAB_140112236;
|
|
}
|
|
*puVar1 = 0x16;
|
|
LAB_140112e98:
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar24 == 0) goto LAB_1401120f6;
|
|
uVar3 = puVar1[0x13];
|
|
uVar12 = (int)uVar17 - uVar24;
|
|
if (uVar12 < uVar3) {
|
|
uVar3 = uVar3 - uVar12;
|
|
uVar9 = puVar1[0xd];
|
|
if (uVar9 < uVar3) {
|
|
uVar3 = uVar3 - uVar9;
|
|
uVar9 = puVar1[0xb] - uVar3;
|
|
}
|
|
else {
|
|
uVar9 = uVar9 - uVar3;
|
|
}
|
|
uVar12 = puVar1[0x12];
|
|
lVar11 = (ulonglong)uVar9 + *(longlong *)(puVar1 + 0xe);
|
|
if (uVar3 <= uVar12) goto LAB_140112ee8;
|
|
}
|
|
else {
|
|
lVar11 = (longlong)puVar19 - (ulonglong)uVar3;
|
|
uVar12 = puVar1[0x12];
|
|
}
|
|
uVar3 = uVar12;
|
|
uVar12 = uVar3;
|
|
LAB_140112ee8:
|
|
if (uVar24 < uVar3) {
|
|
uVar3 = uVar24;
|
|
}
|
|
local_res18 = uVar24 - uVar3;
|
|
uVar13 = (ulonglong)local_res18;
|
|
lVar11 = lVar11 - (longlong)puVar19;
|
|
puVar1[0x12] = uVar12 - uVar3;
|
|
do {
|
|
uVar12 = uVar3;
|
|
*puVar19 = puVar19[lVar11];
|
|
puVar19 = puVar19 + 1;
|
|
uVar3 = uVar12 - 1;
|
|
} while (uVar12 - 1 != 0);
|
|
uVar10 = (ulonglong)(uVar12 + 0xf);
|
|
uVar12 = uVar12 + 6;
|
|
local_50 = puVar19;
|
|
if (puVar1[0x12] == (uint)uVar21) {
|
|
*puVar1 = 0x12;
|
|
}
|
|
goto LAB_140111ca0;
|
|
LAB_140112f90:
|
|
if (0x1f < uVar14) goto code_r0x000140112f95;
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
uVar14 = uVar14 + 8;
|
|
local_58 = puVar16;
|
|
goto LAB_140112f90;
|
|
code_r0x000140112f95:
|
|
uVar24 = (uint)uVar17 - uVar24;
|
|
*(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + uVar24;
|
|
puVar1[7] = puVar1[7] + uVar24;
|
|
if (uVar24 != 0) {
|
|
if (puVar1[4] == uVar20) {
|
|
uVar12 = FUN_1401161bc(puVar1[6],puVar19 + -(ulonglong)uVar24,uVar24);
|
|
}
|
|
else {
|
|
uVar12 = FUN_140116d48(puVar1[6],(uint *)(puVar19 + -(ulonglong)uVar24),uVar24);
|
|
}
|
|
uVar13 = (ulonglong)local_res18;
|
|
uVar21 = 0;
|
|
puVar1[6] = uVar12;
|
|
uVar10 = 0x10;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar12;
|
|
puVar19 = local_50;
|
|
}
|
|
local_res20 = (uint)uVar13;
|
|
uVar17 = uVar13 & 0xffffffff;
|
|
uVar12 = (uint)uVar21;
|
|
uVar9 = ((uVar23 & 0xff00) + uVar23 * 0x10000) * 0x100 + (uVar23 >> 8 & 0xff00) + (uVar23 >> 0x18)
|
|
;
|
|
if (puVar1[4] != uVar12) {
|
|
uVar9 = uVar23;
|
|
}
|
|
uVar3 = uVar12;
|
|
if (uVar9 == puVar1[6]) {
|
|
LAB_140113028:
|
|
uVar14 = uVar3;
|
|
uVar23 = uVar12;
|
|
*puVar1 = 0x19;
|
|
LAB_14011302e:
|
|
uVar24 = (uint)uVar21;
|
|
uVar12 = uVar23;
|
|
uVar3 = uVar14;
|
|
if ((puVar1[2] != uVar24) && (puVar1[4] != uVar24)) {
|
|
for (; uVar14 < 0x20; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
uVar12 = uVar24;
|
|
uVar3 = uVar24;
|
|
if (uVar23 != puVar1[7]) {
|
|
pcVar5 = "incorrect length check";
|
|
goto LAB_1401122a0;
|
|
}
|
|
}
|
|
uVar14 = uVar3;
|
|
uVar23 = uVar12;
|
|
*puVar1 = 0x1a;
|
|
LAB_1401130d4:
|
|
local_res8 = 1;
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
LAB_1401120f6:
|
|
local_64 = uVar9;
|
|
*(uint *)(param_1 + 1) = uVar12;
|
|
param_1[2] = (longlong)local_50;
|
|
*(uint *)(param_1 + 3) = local_res18;
|
|
*param_1 = (longlong)local_58;
|
|
puVar1[0x10] = uVar23;
|
|
iVar22 = 0;
|
|
puVar1[0x11] = uVar14;
|
|
if (((puVar1[0xb] != 0) || (((int)*puVar1 < 0x18 && (local_res20 != *(uint *)(param_1 + 3)))))
|
|
&& (uVar4 = FUN_140111af8((longlong)param_1,local_res20), (int)uVar4 != 0)) {
|
|
*puVar1 = 0x1c;
|
|
return -4;
|
|
}
|
|
local_res20 = local_res20 - (int)param_1[3];
|
|
iVar15 = local_60 - (int)param_1[1];
|
|
*(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + local_res20;
|
|
*(int *)((longlong)param_1 + 0xc) = *(int *)((longlong)param_1 + 0xc) + iVar15;
|
|
puVar1[7] = puVar1[7] + local_res20;
|
|
if ((puVar1[2] != 0) && (local_res20 != 0)) {
|
|
if (puVar1[4] == 0) {
|
|
uVar25 = FUN_1401161bc(puVar1[6],(byte *)(param_1[2] - (ulonglong)local_res20),local_res20);
|
|
}
|
|
else {
|
|
uVar25 = FUN_140116d48(puVar1[6],(uint *)(param_1[2] - (ulonglong)local_res20),local_res20);
|
|
}
|
|
puVar1[6] = uVar25;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar25;
|
|
}
|
|
if (*puVar1 == 0xb) {
|
|
iVar22 = 0x80;
|
|
}
|
|
*(uint *)(param_1 + 9) = (-(uint)(puVar1[1] != 0) & 0x40) + iVar22 + puVar1[0x11];
|
|
if (((iVar15 != 0) || (local_res20 != 0)) && (param_2 != 4)) {
|
|
return local_res8;
|
|
}
|
|
if (local_res8 == 0) {
|
|
return -5;
|
|
}
|
|
return local_res8;
|
|
}
|
|
pcVar5 = "incorrect data check";
|
|
goto LAB_1401122a0;
|
|
LAB_140112182:
|
|
uVar23 = uVar3;
|
|
if (uVar8 <= uVar14) goto code_r0x000140112186;
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar23 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar3 = uVar3 + ((uint)(byte)uVar23 << ((byte)uVar14 & 0x1f));
|
|
uVar14 = uVar14 + 8;
|
|
local_58 = puVar16;
|
|
goto LAB_140112182;
|
|
code_r0x000140112186:
|
|
if (((puVar1[2] & 2) != 0) && (uVar3 == 0x8b1f)) {
|
|
uVar23 = FUN_140116d48(0,(uint *)0x0,0);
|
|
puVar1[6] = uVar23;
|
|
local_68 = 0x8b1f;
|
|
uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,2);
|
|
*puVar1 = 1;
|
|
puVar1[6] = uVar23;
|
|
LAB_1401121c4:
|
|
uVar23 = 0;
|
|
uVar14 = uVar23;
|
|
LAB_1401121cd:
|
|
uVar21 = 0;
|
|
puVar19 = local_50;
|
|
LAB_1401121d1:
|
|
uVar17 = (ulonglong)local_res20;
|
|
uVar13 = (ulonglong)local_res18;
|
|
LAB_1401121d9:
|
|
uVar10 = 0x10;
|
|
goto LAB_140111c9b;
|
|
}
|
|
puVar1[4] = uVar20;
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(undefined4 *)(*(longlong *)(puVar1 + 8) + 0x40) = 0xffffffff;
|
|
}
|
|
if ((puVar1[2] & 1) != 0) {
|
|
uVar12 = (uVar3 & 0xff) * 0x100 + (uVar3 >> 8);
|
|
if (uVar12 == (uVar12 / 0x1f) * 0x1f) {
|
|
if (((byte)uVar3 & 0xf) == 8) {
|
|
uVar23 = uVar3 >> 4;
|
|
uVar14 = uVar14 - 4;
|
|
uVar12 = (uVar23 & 0xf) + 8;
|
|
if (uVar12 <= puVar1[10]) {
|
|
puVar1[5] = 1 << (sbyte)uVar12;
|
|
uVar23 = FUN_1401161bc(0,(byte *)0x0,0);
|
|
puVar1[6] = uVar23;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar23;
|
|
*puVar1 = ~(uVar3 >> 0xc) & 2 | 9;
|
|
goto LAB_1401121c4;
|
|
}
|
|
pcVar5 = "invalid window size";
|
|
}
|
|
else {
|
|
pcVar5 = "unknown compression method";
|
|
}
|
|
LAB_140112236:
|
|
param_1[4] = (longlong)pcVar5;
|
|
*puVar1 = 0x1b;
|
|
goto LAB_1401121d9;
|
|
}
|
|
uVar10 = 0x10;
|
|
}
|
|
pcVar5 = "incorrect header check";
|
|
goto LAB_1401122a0;
|
|
LAB_140111d2b:
|
|
if (uVar8 <= uVar14) goto code_r0x000140111d2f;
|
|
uVar12 = uVar25;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
uVar14 = uVar14 + 8;
|
|
local_58 = puVar16;
|
|
goto LAB_140111d2b;
|
|
code_r0x000140111d2f:
|
|
puVar1[4] = uVar23;
|
|
if ((char)uVar23 == '\b') {
|
|
if ((uVar23 & 0xe000) == 0) {
|
|
if (*(uint **)(puVar1 + 8) != (uint *)0x0) {
|
|
**(uint **)(puVar1 + 8) = uVar23 >> 8 & 1;
|
|
}
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar23;
|
|
uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,2);
|
|
uVar21 = 0;
|
|
puVar1[6] = uVar23;
|
|
}
|
|
uVar23 = (uint)uVar21;
|
|
*puVar1 = 2;
|
|
uVar14 = uVar23;
|
|
LAB_140111dcb:
|
|
do {
|
|
if (0x1f < uVar14) goto code_r0x000140111dd0;
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
uVar14 = uVar14 + 8;
|
|
local_58 = puVar16;
|
|
} while( true );
|
|
}
|
|
pcVar5 = "unknown header flags set";
|
|
}
|
|
else {
|
|
pcVar5 = "unknown compression method";
|
|
}
|
|
LAB_1401122a0:
|
|
param_1[4] = (longlong)pcVar5;
|
|
*puVar1 = 0x1b;
|
|
goto LAB_140111c9b;
|
|
code_r0x000140111dd0:
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 4) = uVar23;
|
|
}
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar23;
|
|
local_65 = (undefined1)(uVar23 >> 0x18);
|
|
local_66 = (undefined1)(uVar23 >> 0x10);
|
|
uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,4);
|
|
uVar21 = 0;
|
|
puVar1[6] = uVar23;
|
|
}
|
|
uVar23 = (uint)uVar21;
|
|
*puVar1 = 3;
|
|
uVar10 = 0x10;
|
|
uVar14 = uVar23;
|
|
LAB_140111e51:
|
|
do {
|
|
uVar8 = (uint)uVar10;
|
|
if (uVar8 <= uVar14) break;
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
uVar14 = uVar14 + 8;
|
|
local_58 = puVar16;
|
|
} while( true );
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 8) = uVar23 & 0xff;
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 0xc) = uVar23 >> 8;
|
|
}
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar23;
|
|
uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,2);
|
|
uVar21 = 0;
|
|
puVar1[6] = uVar23;
|
|
uVar8 = 0x10;
|
|
}
|
|
uVar23 = (uint)uVar21;
|
|
*puVar1 = 4;
|
|
uVar14 = uVar23;
|
|
LAB_140111eaf:
|
|
if ((puVar1[4] & 0x400) == 0) {
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(ulonglong *)(*(longlong *)(puVar1 + 8) + 0x10) = uVar21;
|
|
}
|
|
}
|
|
else {
|
|
for (; uVar14 < uVar8; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
puVar1[0x12] = uVar23;
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 0x18) = uVar23;
|
|
}
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar23;
|
|
uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,2);
|
|
uVar21 = 0;
|
|
puVar1[6] = uVar23;
|
|
}
|
|
uVar23 = (uint)uVar21;
|
|
uVar14 = uVar23;
|
|
}
|
|
*puVar1 = 5;
|
|
LAB_140111ecf:
|
|
if ((puVar1[4] & 0x400) != 0) {
|
|
uVar12 = puVar1[0x12];
|
|
if (uVar25 < puVar1[0x12]) {
|
|
uVar12 = uVar25;
|
|
}
|
|
if (uVar12 != 0) {
|
|
lVar11 = *(longlong *)(puVar1 + 8);
|
|
if ((lVar11 != 0) && (*(longlong *)(lVar11 + 0x10) != 0)) {
|
|
uVar9 = *(int *)(lVar11 + 0x18) - puVar1[0x12];
|
|
uVar3 = uVar12;
|
|
if (*(uint *)(lVar11 + 0x1c) < uVar12 + uVar9) {
|
|
uVar3 = *(uint *)(lVar11 + 0x1c) - uVar9;
|
|
}
|
|
memcpy((void *)((ulonglong)uVar9 + *(longlong *)(lVar11 + 0x10)),puVar16,(ulonglong)uVar3);
|
|
}
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
uVar3 = FUN_140116d48(puVar1[6],puVar16,uVar12);
|
|
puVar1[6] = uVar3;
|
|
}
|
|
puVar1[0x12] = puVar1[0x12] - uVar12;
|
|
uVar25 = uVar25 - uVar12;
|
|
puVar16 = (uint *)((longlong)puVar16 + (ulonglong)uVar12);
|
|
uVar21 = 0;
|
|
local_58 = puVar16;
|
|
}
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (puVar1[0x12] != (uint)uVar21) goto LAB_1401120f6;
|
|
}
|
|
puVar1[0x12] = (uint)uVar21;
|
|
*puVar1 = 6;
|
|
LAB_140111fdd:
|
|
if ((puVar1[4] & 0x800) == 0) {
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(ulonglong *)(*(longlong *)(puVar1 + 8) + 0x20) = uVar21;
|
|
}
|
|
}
|
|
else {
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar13 = uVar21 & 0xffffffff;
|
|
do {
|
|
lVar11 = *(longlong *)(puVar1 + 8);
|
|
bVar6 = (byte)*puVar16;
|
|
uVar12 = (int)uVar13 + 1;
|
|
uVar13 = (ulonglong)uVar12;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
if (((lVar11 != 0) && (*(longlong *)(lVar11 + 0x20) != 0)) &&
|
|
(puVar1[0x12] < *(uint *)(lVar11 + 0x28))) {
|
|
*(byte *)((ulonglong)puVar1[0x12] + *(longlong *)(lVar11 + 0x20)) = bVar6;
|
|
puVar1[0x12] = puVar1[0x12] + 1;
|
|
}
|
|
} while ((bVar6 != 0) && (uVar12 < uVar25));
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
uVar3 = FUN_140116d48(puVar1[6],local_58,uVar12);
|
|
uVar21 = 0;
|
|
puVar1[6] = uVar3;
|
|
}
|
|
uVar25 = uVar25 - uVar12;
|
|
puVar16 = (uint *)((longlong)local_58 + uVar13);
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
local_58 = puVar16;
|
|
if (bVar6 != 0) goto LAB_1401120f6;
|
|
}
|
|
puVar1[0x12] = (uint)uVar21;
|
|
*puVar1 = 7;
|
|
LAB_140112076:
|
|
if ((puVar1[4] & 0x1000) == 0) {
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(ulonglong *)(*(longlong *)(puVar1 + 8) + 0x30) = uVar21;
|
|
}
|
|
}
|
|
else {
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar13 = uVar21 & 0xffffffff;
|
|
do {
|
|
lVar11 = *(longlong *)(puVar1 + 8);
|
|
bVar6 = (byte)*puVar16;
|
|
uVar12 = (int)uVar13 + 1;
|
|
uVar13 = (ulonglong)uVar12;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
if (((lVar11 != 0) && (*(longlong *)(lVar11 + 0x30) != 0)) &&
|
|
(puVar1[0x12] < *(uint *)(lVar11 + 0x38))) {
|
|
*(byte *)((ulonglong)puVar1[0x12] + *(longlong *)(lVar11 + 0x30)) = bVar6;
|
|
puVar1[0x12] = puVar1[0x12] + 1;
|
|
}
|
|
} while ((bVar6 != 0) && (uVar12 < uVar25));
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
uVar3 = FUN_140116d48(puVar1[6],local_58,uVar12);
|
|
uVar21 = 0;
|
|
puVar1[6] = uVar3;
|
|
}
|
|
uVar25 = uVar25 - uVar12;
|
|
local_58 = (uint *)((longlong)local_58 + uVar13);
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (bVar6 != 0) goto LAB_1401120f6;
|
|
}
|
|
uVar17 = (ulonglong)local_res20;
|
|
uVar13 = (ulonglong)local_res18;
|
|
*puVar1 = 8;
|
|
uVar10 = 0x10;
|
|
puVar19 = local_50;
|
|
puVar16 = local_58;
|
|
LAB_1401122da:
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
for (; uVar14 < (uint)uVar10; uVar14 = uVar14 + 8) {
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
local_58 = puVar16;
|
|
}
|
|
if (uVar23 != (ushort)puVar1[6]) {
|
|
pcVar5 = "header crc mismatch";
|
|
goto LAB_1401122a0;
|
|
}
|
|
uVar23 = (uint)uVar21;
|
|
uVar14 = uVar23;
|
|
}
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 0x3c) = (int)puVar1[4] >> 9 & 1;
|
|
*(undefined4 *)(*(longlong *)(puVar1 + 8) + 0x40) = 1;
|
|
}
|
|
uVar12 = FUN_140116d48(0,(uint *)0x0,0);
|
|
puVar1[6] = uVar12;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar12;
|
|
*puVar1 = 0xb;
|
|
LAB_1401125a8:
|
|
uVar13 = (ulonglong)local_res18;
|
|
uVar17 = (ulonglong)local_res20;
|
|
uVar21 = 0;
|
|
puVar19 = local_50;
|
|
goto LAB_1401121d9;
|
|
LAB_1401124be:
|
|
if (2 < uVar14) goto code_r0x0001401124c3;
|
|
uVar12 = uVar25;
|
|
uVar9 = local_64;
|
|
if (uVar25 == 0) goto LAB_1401120f6;
|
|
uVar12 = *puVar16;
|
|
puVar16 = (uint *)((longlong)puVar16 + 1);
|
|
uVar25 = uVar25 - 1;
|
|
uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f));
|
|
uVar14 = uVar14 + 8;
|
|
local_58 = puVar16;
|
|
goto LAB_1401124be;
|
|
code_r0x0001401124c3:
|
|
puVar1[1] = uVar23 & 1;
|
|
uVar12 = uVar23 >> 1 & 3;
|
|
if (uVar12 == 0) {
|
|
*puVar1 = 0xd;
|
|
}
|
|
else if (uVar12 == 1) {
|
|
FUN_140111ac8((longlong)puVar1);
|
|
*puVar1 = 0x12;
|
|
}
|
|
else if (uVar12 == 2) {
|
|
*puVar1 = 0xf;
|
|
}
|
|
else if (uVar12 == 3) {
|
|
param_1[4] = (longlong)"invalid block type";
|
|
*puVar1 = 0x1b;
|
|
}
|
|
uVar23 = uVar23 >> 3;
|
|
uVar14 = uVar14 - 3;
|
|
goto LAB_140111c9b;
|
|
}
|
|
|