mainSort
0x00299f60 · 5008 bytes · __regparm3
_ZL8mainSortPjPhPtS_iiPi
Decompiled
undefined (7 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* mainSort(unsigned int*, unsigned char*, unsigned short*, unsigned int*, int, int, int*) */
void __regparm3
mainSort(uint *param_1,uchar *param_2,ushort *param_3,uint *param_4,int param_5,int param_6,
int *param_7)
{
byte *pbVar1;
int *piVar2;
byte bVar3;
undefined4 uVar4;
char cVar5;
int iVar6;
uint uVar7;
uint uVar8;
int iVar9;
uint *puVar10;
int iVar11;
undefined4 *puVar12;
byte bVar13;
uint uVar14;
byte *pbVar15;
int iVar16;
int iVar17;
undefined2 uVar18;
uint uVar19;
ushort *puVar20;
int iVar21;
int *piVar22;
int iVar23;
int iVar24;
undefined4 *puVar25;
undefined4 *puVar26;
int *piVar27;
undefined4 *puVar28;
undefined1 *puVar29;
undefined4 uVar30;
undefined4 uVar31;
int in_GS_OFFSET;
bool bVar32;
bool bVar33;
uint local_1270;
int local_1200;
int *local_11f8;
int local_11f4;
int local_11e4;
uint local_11e0;
int local_d20 [768];
undefined1 auStack_120 [256];
undefined4 local_20;
puVar29 = &stack0xfffffffc;
piVar27 = (int *)&stack0xffffed94;
local_20 = *(undefined4 *)(in_GS_OFFSET + 0x14);
if (3 < param_6) {
fwrite(" main sort initialise ...\n",1,0x21,_stderr);
}
iVar6 = 0x10000;
do {
param_4[iVar6] = 0;
iVar6 = iVar6 + -1;
} while (iVar6 != -1);
uVar14 = param_5 - 1;
uVar7 = (uint)*param_2 << 8;
uVar8 = uVar14;
if (2 < (int)uVar14) {
pbVar15 = param_2 + param_5;
puVar20 = param_3 + param_5 + -2;
local_11e0 = uVar14;
do {
local_11e0 = local_11e0 - 4;
puVar20[1] = 0;
uVar8 = (uint)pbVar15[-1] << 8 | (int)uVar7 >> 8;
param_4[uVar8] = param_4[uVar8] + 1;
*puVar20 = 0;
uVar8 = (int)uVar8 >> 8 | (uint)pbVar15[-2] << 8;
param_4[uVar8] = param_4[uVar8] + 1;
puVar20[-1] = 0;
uVar8 = (int)uVar8 >> 8 | (uint)pbVar15[-3] << 8;
param_4[uVar8] = param_4[uVar8] + 1;
puVar20[-2] = 0;
uVar7 = (int)uVar8 >> 8 | (uint)pbVar15[-4] << 8;
param_4[uVar7] = param_4[uVar7] + 1;
pbVar15 = pbVar15 + -4;
puVar20 = puVar20 + -4;
} while (2 < (int)local_11e0);
uVar8 = (param_5 + -5) - (param_5 - 4U & 0xfffffffc);
}
pbVar15 = param_2 + param_5;
if (-1 < (int)uVar8) {
do {
param_3[uVar8] = 0;
pbVar1 = param_2 + uVar8;
uVar8 = uVar8 - 1;
uVar7 = (uint)*pbVar1 << 8 | (int)uVar7 >> 8;
param_4[uVar7] = param_4[uVar7] + 1;
} while (uVar8 != 0xffffffff);
}
iVar6 = 0;
do {
pbVar15[iVar6] = param_2[iVar6];
param_3[param_5 + iVar6] = 0;
iVar6 = iVar6 + 1;
} while (iVar6 != 0x22);
if (3 < param_6) {
fwrite(" bucket sorting ...\n",1,0x1b,_stderr);
}
iVar6 = 1;
do {
param_4[iVar6] = param_4[iVar6] + param_4[iVar6 + -1];
iVar6 = iVar6 + 1;
} while (iVar6 != 0x10001);
uVar8 = (uint)*param_2 << 8;
if (2 < (int)uVar14) {
do {
uVar7 = uVar8 >> 8 | (uint)pbVar15[-1] << 8;
uVar8 = param_4[uVar7] - 1;
param_4[uVar7] = uVar8;
param_1[uVar8] = uVar14;
uVar8 = (int)uVar7 >> 8 | (uint)pbVar15[-2] << 8;
uVar7 = param_4[uVar8] - 1;
param_4[uVar8] = uVar7;
param_1[uVar7] = uVar14 - 1;
uVar8 = (int)uVar8 >> 8 | (uint)pbVar15[-3] << 8;
uVar7 = param_4[uVar8] - 1;
param_4[uVar8] = uVar7;
param_1[uVar7] = uVar14 - 2;
uVar8 = (int)uVar8 >> 8 | (uint)pbVar15[-4] << 8;
uVar19 = param_4[uVar8] - 1;
param_4[uVar8] = uVar19;
uVar7 = uVar14 - 3;
uVar14 = uVar14 - 4;
param_1[uVar19] = uVar7;
pbVar15 = pbVar15 + -4;
} while (2 < (int)uVar14);
uVar14 = (param_5 + -5) - (param_5 - 4U & 0xfffffffc);
}
if (-1 < (int)uVar14) {
do {
uVar7 = uVar8 >> 8;
uVar8 = (uint)param_2[uVar14] << 8;
uVar19 = param_4[uVar7 | uVar8] - 1;
param_4[uVar7 | uVar8] = uVar19;
param_1[uVar19] = uVar14;
uVar14 = uVar14 - 1;
} while (uVar14 != 0xffffffff);
}
iVar6 = 0;
do {
auStack_120[iVar6] = 0;
local_d20[iVar6] = iVar6;
iVar6 = iVar6 + 1;
} while (iVar6 != 0x100);
iVar6 = 5;
local_1200 = 1;
do {
local_1200 = local_1200 * 3 + 1;
iVar6 = iVar6 + -1;
} while (iVar6 != 0);
do {
do {
local_1200 = local_1200 / 3;
} while (0xff < local_1200);
local_11f8 = local_d20;
local_11f4 = local_1200;
do {
iVar6 = local_11f8[local_1200];
uVar14 = param_4[iVar6 * 0x100];
uVar8 = param_4[(iVar6 + 1) * 0x100];
local_11e4 = local_11f4;
piVar22 = local_11f8;
do {
iVar9 = *piVar22;
iVar21 = local_11e4 - local_1200;
if (param_4[(iVar9 + 1) * 0x100] - param_4[iVar9 * 0x100] <= uVar8 - uVar14) break;
piVar22[local_1200] = iVar9;
piVar22 = piVar22 + -local_1200;
local_11e4 = iVar21;
} while (local_1200 <= iVar21);
local_11f4 = local_11f4 + 1;
local_11f8 = local_11f8 + 1;
local_d20[local_11e4] = iVar6;
} while (local_11f4 != 0x100);
} while (local_1200 != 1);
LAB_0029a3d8:
*(uchar **)(puVar29 + -0x1238) = param_2;
*(undefined4 *)(puVar29 + -0x1244) = 0;
iVar6 = **(int **)(puVar29 + -0x1240);
*(int *)(puVar29 + -0x1228) = iVar6;
iVar6 = iVar6 * 0x400 + *(int *)(puVar29 + -0x1224);
*(int *)(puVar29 + -0x124c) = iVar6;
*(int *)(puVar29 + -0x1234) = iVar6;
LAB_0029a40b:
if (*(int *)(puVar29 + -0x1244) != *(int *)(puVar29 + -0x1228)) {
uVar14 = **(uint **)(puVar29 + -0x1234);
if ((uVar14 & 0x200000) == 0) {
uVar8 = uVar14 & 0xffdfffff;
iVar6 = (*(uint *)(*(int *)(puVar29 + -0x1234) + 4) & 0xffdfffff) - 1;
if ((int)uVar8 < iVar6) {
iVar9 = (iVar6 - uVar8) + 1;
*(int *)(puVar29 + -0x1250) = iVar9;
if (3 < *(int *)(puVar29 + 0x10)) {
piVar27[5] = iVar9;
uVar30 = *(undefined4 *)(puVar29 + -0x1248);
piVar27[1] = (int)" qsort [0x%x, 0x%x] done %d this %d\n";
piVar27[4] = uVar30;
piVar27[3] = *(undefined4 *)(puVar29 + -0x1244);
piVar27[2] = *(undefined4 *)(puVar29 + -0x1228);
*piVar27 = (int)_stderr;
piVar27[-1] = 0x29a49c;
fprintf((FILE *)*piVar27,(char *)piVar27[1]);
}
*(uint *)(puVar29 + -0x11cc) = uVar8;
*(int *)(puVar29 + -0x103c) = iVar6;
*(undefined4 *)(puVar29 + -0xeac) = 2;
*(int *)(puVar29 + -0x120c) = iVar6;
*(uint *)(puVar29 + -0x1218) = uVar8;
*(undefined4 *)(puVar29 + -0x11e0) = 2;
*(undefined4 *)(puVar29 + -0x11f8) = 1;
do {
*(int *)(puVar29 + -0x1220) = *(int *)(puVar29 + -0x11f8) + -1;
if ((*(int *)(puVar29 + -0x120c) - *(int *)(puVar29 + -0x1218) < 0x14) ||
(0xe < *(int *)(puVar29 + -0x11e0))) {
*(undefined4 *)(puVar29 + -0x121c) = 0;
iVar9 = (*(int *)(puVar29 + -0x120c) - *(int *)(puVar29 + -0x1218)) + 1;
iVar6 = *(int *)(puVar29 + -0x121c);
if (1 < iVar9) {
do {
iVar21 = iVar6;
iVar6 = iVar21 + 1;
} while (*(int *)(incs + iVar6 * 4) < iVar9);
*(int *)(puVar29 + -0x121c) = iVar21;
iVar6 = *(int *)(puVar29 + -0x1238);
*(int *)(puVar29 + -0x1230) =
*(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x1218) * 4;
do {
iVar9 = *(int *)(incs + *(int *)(puVar29 + -0x121c) * 4);
iVar21 = *(int *)(puVar29 + -0x1218) + iVar9;
*(int *)(puVar29 + -0x11dc) = iVar9;
*(int *)(puVar29 + -0x11e8) = iVar21;
if (iVar21 <= *(int *)(puVar29 + -0x120c)) {
*(int *)(puVar29 + -0x11fc) = iVar21;
*(int *)(puVar29 + -0x11e4) = iVar9 * 4;
*(int *)(puVar29 + -0x11e4) = -*(int *)(puVar29 + -0x11e4);
*(int *)(puVar29 + -0x1200) = *(int *)(puVar29 + -0x1208) + iVar21 * 4;
*(undefined4 *)(puVar29 + -0x1204) = *(undefined4 *)(puVar29 + -0x1230);
do {
piVar22 = *(int **)(puVar29 + -0x1204);
iVar9 = **(int **)(puVar29 + -0x1200);
*(int *)(puVar29 + -0x1210) = iVar9;
iVar9 = iVar9 + *(int *)(puVar29 + -0x11e0);
*(int *)(puVar29 + -0x11f8) = iVar9;
*(int *)(puVar29 + -0x11f4) = iVar9 + iVar6;
*(undefined4 *)(puVar29 + -0x11ec) = *(undefined4 *)(puVar29 + -0x11fc);
while( true ) {
*(int **)(puVar29 + -0x11f0) = piVar22;
iVar9 = *(int *)(puVar29 + -0x11e0) + *piVar22;
iVar21 = *(int *)(puVar29 + -0x11ec) - *(int *)(puVar29 + -0x11dc);
bVar32 = *(byte *)(iVar6 + iVar9) < **(byte **)(puVar29 + -0x11f4);
bVar33 = false;
if (*(byte *)(iVar6 + iVar9) == **(byte **)(puVar29 + -0x11f4)) break;
LAB_0029a840:
puVar12 = piVar27;
if (bVar32 || bVar33) goto LAB_0029a990;
LAB_0029a84b:
piVar22[*(int *)(puVar29 + -0x11dc)] = *piVar22;
piVar22 = (int *)((int)piVar22 + *(int *)(puVar29 + -0x11e4));
if (iVar21 < *(int *)(puVar29 + -0x11e8)) goto LAB_0029a9a5;
*(int *)(puVar29 + -0x11ec) = iVar21;
}
bVar13 = *(byte *)(iVar6 + 1 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 1 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
bVar13 = *(byte *)(iVar6 + 2 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 2 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
bVar13 = *(byte *)(iVar6 + 3 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 3 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
bVar13 = *(byte *)(iVar6 + 4 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 4 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
bVar13 = *(byte *)(iVar6 + 5 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 5 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
bVar13 = *(byte *)(iVar6 + 6 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 6 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
bVar13 = *(byte *)(iVar6 + 7 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 7 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
bVar13 = *(byte *)(iVar6 + 8 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 8 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
bVar13 = *(byte *)(iVar6 + 9 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 9 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
bVar13 = *(byte *)(iVar6 + 10 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 10 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029a840;
uVar30 = *(undefined4 *)(puVar29 + 0xc);
piVar27[2] = *(undefined4 *)(puVar29 + -0x1214);
uVar31 = *(undefined4 *)(puVar29 + -0x122c);
piVar27[1] = uVar30;
uVar14 = *(uint *)(puVar29 + -0x11f8);
*piVar27 = uVar31;
puVar25 = piVar27 + -1;
piVar27[-1] = 0x29a987;
cVar5 = mainGtU(uVar14,piVar27[-1],(uchar *)*piVar27,(ushort *)piVar27[1],
piVar27[2],(int *)piVar27[3]);
piVar27 = piVar27 + -1;
puVar12 = puVar25;
if (cVar5 != '\0') goto LAB_0029a84b;
LAB_0029a990:
*(int *)(puVar29 + -0x11f0) =
*(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x11ec) * 4;
piVar27 = puVar12;
LAB_0029a9a5:
**(undefined4 **)(puVar29 + -0x11f0) = *(undefined4 *)(puVar29 + -0x1210);
*(int *)(puVar29 + -0x11ec) = *(int *)(puVar29 + -0x11fc) + 1;
if (*(int *)(puVar29 + -0x120c) < *(int *)(puVar29 + -0x11fc) + 1) break;
iVar9 = *(int *)(*(int *)(puVar29 + -0x1200) + 4);
*(int *)(puVar29 + -0x1210) = iVar9;
iVar9 = iVar9 + *(int *)(puVar29 + -0x11e0);
*(int *)(puVar29 + -0x11f8) = iVar9;
*(int *)(puVar29 + -0x11f4) = iVar9 + iVar6;
piVar22 = (int *)(*(int *)(puVar29 + -0x1204) + 4);
while( true ) {
*(int **)(puVar29 + -0x11f0) = piVar22;
iVar9 = *(int *)(puVar29 + -0x11e0) + *piVar22;
iVar21 = *(int *)(puVar29 + -0x11ec) - *(int *)(puVar29 + -0x11dc);
bVar32 = *(byte *)(iVar6 + iVar9) < **(byte **)(puVar29 + -0x11f4);
bVar33 = false;
if (*(byte *)(iVar6 + iVar9) == **(byte **)(puVar29 + -0x11f4)) break;
LAB_0029aa00:
puVar12 = piVar27;
if (bVar32 || bVar33) goto LAB_0029ab50;
LAB_0029aa0b:
piVar22[*(int *)(puVar29 + -0x11dc)] = *piVar22;
piVar22 = (int *)((int)piVar22 + *(int *)(puVar29 + -0x11e4));
if (iVar21 < *(int *)(puVar29 + -0x11e8)) goto LAB_0029ab65;
*(int *)(puVar29 + -0x11ec) = iVar21;
}
bVar13 = *(byte *)(iVar6 + 1 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 1 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
bVar13 = *(byte *)(iVar6 + 2 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 2 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
bVar13 = *(byte *)(iVar6 + 3 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 3 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
bVar13 = *(byte *)(iVar6 + 4 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 4 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
bVar13 = *(byte *)(iVar6 + 5 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 5 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
bVar13 = *(byte *)(iVar6 + 6 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 6 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
bVar13 = *(byte *)(iVar6 + 7 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 7 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
bVar13 = *(byte *)(iVar6 + 8 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 8 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
bVar13 = *(byte *)(iVar6 + 9 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 9 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
bVar13 = *(byte *)(iVar6 + 10 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 10 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029aa00;
uVar30 = *(undefined4 *)(puVar29 + 0xc);
piVar27[2] = *(undefined4 *)(puVar29 + -0x1214);
uVar31 = *(undefined4 *)(puVar29 + -0x122c);
piVar27[1] = uVar30;
*piVar27 = uVar31;
uVar14 = *(uint *)(puVar29 + -0x11f8);
puVar26 = piVar27 + -1;
piVar27[-1] = 0x29ab47;
cVar5 = mainGtU(uVar14,piVar27[-1],(uchar *)*piVar27,(ushort *)piVar27[1],
piVar27[2],(int *)piVar27[3]);
piVar27 = piVar27 + -1;
puVar12 = puVar26;
if (cVar5 != '\0') goto LAB_0029aa0b;
LAB_0029ab50:
*(int *)(puVar29 + -0x11f0) =
*(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x11ec) * 4;
piVar27 = puVar12;
LAB_0029ab65:
**(undefined4 **)(puVar29 + -0x11f0) = *(undefined4 *)(puVar29 + -0x1210);
*(int *)(puVar29 + -0x11ec) = *(int *)(puVar29 + -0x11fc) + 2;
if (*(int *)(puVar29 + -0x120c) < *(int *)(puVar29 + -0x11fc) + 2) break;
iVar9 = *(int *)(*(int *)(puVar29 + -0x1200) + 8);
*(int *)(puVar29 + -0x1210) = iVar9;
iVar9 = iVar9 + *(int *)(puVar29 + -0x11e0);
*(int *)(puVar29 + -0x11f8) = iVar9;
*(int *)(puVar29 + -0x11f4) = iVar9 + iVar6;
piVar22 = (int *)(*(int *)(puVar29 + -0x1204) + 8);
while( true ) {
*(int **)(puVar29 + -0x11f0) = piVar22;
iVar9 = *(int *)(puVar29 + -0x11e0) + *piVar22;
iVar21 = *(int *)(puVar29 + -0x11ec) - *(int *)(puVar29 + -0x11dc);
bVar32 = *(byte *)(iVar6 + iVar9) < **(byte **)(puVar29 + -0x11f4);
bVar33 = false;
if (*(byte *)(iVar6 + iVar9) == **(byte **)(puVar29 + -0x11f4)) break;
LAB_0029abc0:
puVar12 = piVar27;
if (bVar32 || bVar33) goto LAB_0029ad10;
LAB_0029abcb:
piVar22[*(int *)(puVar29 + -0x11dc)] = *piVar22;
piVar22 = (int *)((int)piVar22 + *(int *)(puVar29 + -0x11e4));
if (iVar21 < *(int *)(puVar29 + -0x11e8)) goto LAB_0029ad25;
*(int *)(puVar29 + -0x11ec) = iVar21;
}
bVar13 = *(byte *)(iVar6 + 1 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 1 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
bVar13 = *(byte *)(iVar6 + 2 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 2 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
bVar13 = *(byte *)(iVar6 + 3 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 3 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
bVar13 = *(byte *)(iVar6 + 4 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 4 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
bVar13 = *(byte *)(iVar6 + 5 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 5 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
bVar13 = *(byte *)(iVar6 + 6 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 6 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
bVar13 = *(byte *)(iVar6 + 7 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 7 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
bVar13 = *(byte *)(iVar6 + 8 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 8 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
bVar13 = *(byte *)(iVar6 + 9 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 9 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
bVar13 = *(byte *)(iVar6 + 10 + *(int *)(puVar29 + -0x11f8));
bVar3 = *(byte *)(iVar6 + 10 + iVar9);
bVar32 = bVar3 < bVar13;
bVar33 = bVar3 == bVar13;
if (!bVar33) goto LAB_0029abc0;
uVar30 = *(undefined4 *)(puVar29 + 0xc);
piVar27[2] = *(undefined4 *)(puVar29 + -0x1214);
uVar31 = *(undefined4 *)(puVar29 + -0x122c);
piVar27[1] = uVar30;
uVar14 = *(uint *)(puVar29 + -0x11f8);
*piVar27 = uVar31;
puVar28 = piVar27 + -1;
piVar27[-1] = 0x29ad07;
cVar5 = mainGtU(uVar14,piVar27[-1],(uchar *)*piVar27,(ushort *)piVar27[1],
piVar27[2],(int *)piVar27[3]);
piVar27 = piVar27 + -1;
puVar12 = puVar28;
if (cVar5 != '\0') goto LAB_0029abcb;
LAB_0029ad10:
*(int *)(puVar29 + -0x11f0) =
*(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x11ec) * 4;
piVar27 = puVar12;
LAB_0029ad25:
*(int *)(puVar29 + -0x11fc) = *(int *)(puVar29 + -0x11fc) + 3;
**(undefined4 **)(puVar29 + -0x11f0) = *(undefined4 *)(puVar29 + -0x1210);
if (**(int **)(puVar29 + -0x1214) < 0) goto LAB_0029b079;
*(int *)(puVar29 + -0x1200) = *(int *)(puVar29 + -0x1200) + 0xc;
*(int *)(puVar29 + -0x1204) = *(int *)(puVar29 + -0x1204) + 0xc;
} while (*(int *)(puVar29 + -0x11fc) <= *(int *)(puVar29 + -0x120c));
}
*(int *)(puVar29 + -0x121c) = *(int *)(puVar29 + -0x121c) + -1;
} while (*(int *)(puVar29 + -0x121c) != -1);
}
if (**(int **)(puVar29 + -0x1214) < 0) goto LAB_0029b079;
if (*(int *)(puVar29 + -0x1220) == 0) goto code_r0x0029ad9c;
}
else {
iVar6 = *(int *)(puVar29 + -0x1238);
puVar29[-0x11dc] =
*(undefined1 *)
(*(int *)(*(int *)(puVar29 + -0x1208) +
(*(int *)(puVar29 + -0x1218) + *(int *)(puVar29 + -0x120c) >> 1) * 4) +
iVar6 + *(int *)(puVar29 + -0x11e0));
bVar13 = *(byte *)(*(int *)(*(int *)(puVar29 + -0x1208) +
*(int *)(puVar29 + -0x120c) * 4) + iVar6 +
*(int *)(puVar29 + -0x11e0));
piVar22 = (int *)(*(int *)(puVar29 + -0x1208) + *(int *)(puVar29 + -0x1218) * 4);
*(int **)(puVar29 + -0x11fc) = piVar22;
bVar3 = *(byte *)(*piVar22 + iVar6 + *(int *)(puVar29 + -0x11e0));
uVar14 = (uint)bVar3;
uVar8 = (uint)bVar13;
if (bVar3 <= bVar13) {
uVar8 = (uint)bVar3;
uVar14 = (uint)bVar13;
}
if (((byte)puVar29[-0x11dc] < (byte)uVar14) &&
(uVar14 = (uint)(byte)puVar29[-0x11dc], (byte)puVar29[-0x11dc] <= (byte)uVar8)) {
uVar14 = uVar8;
}
*(uint *)(puVar29 + -0x11e4) = uVar14;
iVar6 = *(int *)(puVar29 + -0x120c);
*(int *)(puVar29 + -0x11f0) = *(int *)(puVar29 + -0x1218);
*(int *)(puVar29 + -0x11ec) = *(int *)(puVar29 + -0x1218) + 1;
*(int *)(puVar29 + -0x11e8) = *(int *)(puVar29 + -0x1238) + *(int *)(puVar29 + -0x11e0);
iVar9 = iVar6;
LAB_0029a622:
*(int *)(puVar29 + -0x11dc) = *(int *)(puVar29 + -0x11ec) + -1;
if (*(int *)(puVar29 + -0x11ec) + -1 <= iVar6) {
iVar21 = *(int *)(*(int *)(puVar29 + -0x1208) + -4 + *(int *)(puVar29 + -0x11ec) * 4);
uVar14 = (uint)*(byte *)(*(int *)(puVar29 + -0x11e8) + iVar21);
if (uVar14 == *(uint *)(puVar29 + -0x11e4)) {
*(int *)(puVar29 + -0x11dc) = iVar6;
iVar6 = *(int *)(puVar29 + -0x11f0);
*(int *)(puVar29 + -0x11f0) = *(int *)(puVar29 + -0x11f0) + 1;
piVar22 = (int *)(*(int *)(puVar29 + -0x1208) + iVar6 * 4);
*(int *)(*(int *)(puVar29 + -0x1208) + -4 + *(int *)(puVar29 + -0x11ec) * 4) =
*piVar22;
iVar6 = *(int *)(puVar29 + -0x11dc);
*piVar22 = iVar21;
}
else if (0 < (int)(uVar14 - *(uint *)(puVar29 + -0x11e4))) {
piVar22 = (int *)(*(int *)(puVar29 + -0x1208) + iVar6 * 4);
*(int **)(puVar29 + -0x11f4) = piVar22;
do {
iVar6 = iVar6 + -1;
iVar21 = *piVar22;
if ((uint)*(byte *)(*(int *)(puVar29 + -0x11e8) + iVar21) ==
*(uint *)(puVar29 + -0x11e4)) {
piVar2 = (int *)(*(int *)(puVar29 + -0x1208) + iVar9 * 4);
iVar9 = iVar9 + -1;
*piVar22 = *piVar2;
*piVar2 = iVar21;
}
else if ((int)((uint)*(byte *)(*(int *)(puVar29 + -0x11e8) + iVar21) -
*(uint *)(puVar29 + -0x11e4)) < 0) goto LAB_0029a720;
piVar22 = piVar22 + -1;
if (iVar6 < *(int *)(puVar29 + -0x11dc)) goto LAB_0029a635;
} while( true );
}
goto LAB_0029a61b;
}
LAB_0029a635:
if (iVar9 < *(int *)(puVar29 + -0x11f0)) {
*(int *)(puVar29 + *(int *)(puVar29 + -0x1220) * 4 + -0xeac) =
*(int *)(puVar29 + -0x11e0) + 1;
*(undefined4 *)(puVar29 + -0x1220) = *(undefined4 *)(puVar29 + -0x11f8);
}
else {
iVar21 = *(int *)(puVar29 + -0x11f0) - *(int *)(puVar29 + -0x1218);
iVar11 = *(int *)(puVar29 + -0x11dc) - *(int *)(puVar29 + -0x11f0);
if (iVar11 < iVar21) {
iVar21 = iVar11;
}
if (0 < iVar21) {
iVar11 = *(int *)(puVar29 + -0x1218);
*(int *)(puVar29 + -0x11e4) = iVar6;
iVar6 = *(int *)(puVar29 + -0x1208);
iVar23 = (*(int *)(puVar29 + -0x11dc) - iVar21) - iVar11;
puVar12 = *(undefined4 **)(puVar29 + -0x11fc);
do {
uVar30 = *puVar12;
*puVar12 = puVar12[iVar23];
puVar12[iVar23] = uVar30;
puVar12 = puVar12 + 1;
} while (puVar12 != (undefined4 *)(iVar6 + (iVar21 + iVar11) * 4));
iVar6 = *(int *)(puVar29 + -0x11e4);
}
iVar21 = *(int *)(puVar29 + -0x120c) - iVar9;
if (iVar9 - iVar6 < iVar21) {
iVar21 = iVar9 - iVar6;
}
*(int *)(puVar29 + -0x11e4) = *(int *)(puVar29 + -0x120c) - iVar21;
if (0 < iVar21) {
iVar11 = *(int *)(puVar29 + -0x11dc);
iVar23 = *(int *)(puVar29 + -0x1208);
puVar12 = (undefined4 *)(iVar23 + iVar11 * 4);
iVar24 = *(int *)(puVar29 + -0x11e4);
*(int *)(puVar29 + -0x11e4) = iVar6;
do {
uVar30 = *puVar12;
*puVar12 = puVar12[(iVar24 - iVar11) + 1];
puVar12[(iVar24 - iVar11) + 1] = uVar30;
puVar12 = puVar12 + 1;
} while (puVar12 != (undefined4 *)(iVar23 + (iVar21 + iVar11) * 4));
iVar6 = *(int *)(puVar29 + -0x11e4);
}
iVar21 = *(int *)(puVar29 + -0x120c);
iVar9 = (iVar6 - iVar9) + iVar21;
iVar24 = (*(int *)(puVar29 + -0x11dc) + *(int *)(puVar29 + -0x1218)) -
*(int *)(puVar29 + -0x11f0);
*(int *)(puVar29 + -0x11e4) = *(int *)(puVar29 + -0x11e0) + 1;
*(int *)(puVar29 + -0x11dc) = iVar24 + -1;
iVar6 = iVar9 + 1;
iVar16 = (iVar24 + -1) - *(int *)(puVar29 + -0x1218);
*(int *)(puVar29 + -0x11e8) = iVar16;
iVar17 = iVar21 - iVar6;
iVar23 = iVar6;
iVar11 = iVar17;
if (iVar16 < iVar17) {
iVar11 = *(int *)(puVar29 + -0x11e8);
*(int *)(puVar29 + -0x11e8) = iVar17;
uVar30 = *(undefined4 *)(puVar29 + -0x11dc);
*(int *)(puVar29 + -0x11dc) = iVar21;
*(undefined4 *)(puVar29 + -0x120c) = uVar30;
iVar23 = *(int *)(puVar29 + -0x1218);
*(int *)(puVar29 + -0x1218) = iVar6;
}
uVar30 = *(undefined4 *)(puVar29 + -0x11e0);
iVar21 = iVar23;
iVar6 = iVar9;
if (iVar11 < iVar9 - iVar24) {
uVar30 = *(undefined4 *)(puVar29 + -0x11e4);
*(undefined4 *)(puVar29 + -0x11e4) = *(undefined4 *)(puVar29 + -0x11e0);
iVar6 = *(int *)(puVar29 + -0x120c);
*(int *)(puVar29 + -0x120c) = iVar9;
iVar21 = iVar24;
iVar11 = iVar9 - iVar24;
iVar24 = iVar23;
}
iVar9 = iVar21;
uVar31 = uVar30;
if (iVar11 <= *(int *)(puVar29 + -0x11e8)) {
uVar31 = *(undefined4 *)(puVar29 + -0x11e0);
*(undefined4 *)(puVar29 + -0x11e0) = uVar30;
uVar30 = *(undefined4 *)(puVar29 + -0x11dc);
*(undefined4 *)(puVar29 + -0x11dc) = *(undefined4 *)(puVar29 + -0x120c);
iVar9 = *(int *)(puVar29 + -0x1218);
*(int *)(puVar29 + -0x1218) = iVar21;
*(undefined4 *)(puVar29 + -0x120c) = uVar30;
}
iVar21 = *(int *)(puVar29 + -0x1220);
uVar30 = *(undefined4 *)(puVar29 + -0x1218);
*(int *)(puVar29 + iVar21 * 4 + -0x11cc) = iVar9;
uVar4 = *(undefined4 *)(puVar29 + -0x120c);
*(undefined4 *)(puVar29 + iVar21 * 4 + -0xeac) = uVar31;
*(undefined4 *)(puVar29 + iVar21 * 4 + -0x103c) = uVar4;
iVar9 = *(int *)(puVar29 + -0x11f8);
uVar31 = *(undefined4 *)(puVar29 + -0x11dc);
*(undefined4 *)(puVar29 + iVar9 * 4 + -0x11cc) = uVar30;
uVar30 = *(undefined4 *)(puVar29 + -0x11e0);
*(undefined4 *)(puVar29 + iVar9 * 4 + -0x103c) = uVar31;
*(undefined4 *)(puVar29 + iVar9 * 4 + -0xeac) = uVar30;
iVar21 = iVar9 + 1;
*(int *)(puVar29 + iVar21 * 4 + -0x103c) = iVar6;
uVar30 = *(undefined4 *)(puVar29 + -0x11e4);
*(int *)(puVar29 + iVar21 * 4 + -0x11cc) = iVar24;
*(undefined4 *)(puVar29 + iVar21 * 4 + -0xeac) = uVar30;
*(int *)(puVar29 + -0x1220) = iVar9 + 2;
}
}
if (99 < *(int *)(puVar29 + -0x1220)) {
*piVar27 = 0x3e9;
piVar27[-1] = 0x29b0a4;
BZ2_bz__AssertH__fail(*piVar27);
}
*(int *)(puVar29 + -0x11f8) = *(int *)(puVar29 + -0x1220);
iVar6 = *(int *)(puVar29 + -0x1220) + -1;
*(undefined4 *)(puVar29 + -0x1218) = *(undefined4 *)(puVar29 + iVar6 * 4 + -0x11cc);
uVar30 = *(undefined4 *)(puVar29 + iVar6 * 4 + -0xeac);
*(undefined4 *)(puVar29 + -0x120c) = *(undefined4 *)(puVar29 + iVar6 * 4 + -0x103c);
*(undefined4 *)(puVar29 + -0x11e0) = uVar30;
} while( true );
}
}
goto LAB_0029adc0;
}
goto LAB_0029adcd;
code_r0x0029ad9c:
*(int *)(puVar29 + -0x1248) = *(int *)(puVar29 + -0x1248) + *(int *)(puVar29 + -0x1250);
if (**(int **)(puVar29 + -0x1214) < 0) goto LAB_0029b079;
uVar14 = **(uint **)(puVar29 + -0x1234);
LAB_0029adc0:
**(uint **)(puVar29 + -0x1234) = uVar14 | 0x200000;
LAB_0029adcd:
*(int *)(puVar29 + -0x1244) = *(int *)(puVar29 + -0x1244) + 1;
*(int *)(puVar29 + -0x1234) = *(int *)(puVar29 + -0x1234) + 4;
if (*(int *)(puVar29 + -0x1244) == 0x100) goto code_r0x0029adeb;
goto LAB_0029a40b;
LAB_0029a720:
*(int **)(puVar29 + -0x11f4) = piVar22;
uVar30 = *(undefined4 *)(*(int *)(puVar29 + -0x1208) + -4 + *(int *)(puVar29 + -0x11ec) * 4);
*(int *)(*(int *)(puVar29 + -0x1208) + -4 + *(int *)(puVar29 + -0x11ec) * 4) = iVar21;
**(undefined4 **)(puVar29 + -0x11f4) = uVar30;
LAB_0029a61b:
*(int *)(puVar29 + -0x11ec) = *(int *)(puVar29 + -0x11ec) + 1;
goto LAB_0029a622;
code_r0x0029adeb:
param_2 = *(uchar **)(puVar29 + -0x1238);
if (puVar29[*(int *)(puVar29 + -0x1228) + -0x11c] != '\0') {
*piVar27 = 0x3ee;
piVar27[-1] = 0x29ae0d;
BZ2_bz__AssertH__fail(*piVar27);
}
iVar6 = *(int *)(puVar29 + -0x1224);
iVar9 = 0;
do {
iVar21 = iVar9 * 0x100 + *(int *)(puVar29 + -0x1228);
*(uint *)(puVar29 + iVar9 * 4 + -0x91c) = *(uint *)(iVar6 + iVar21 * 4) & 0xffdfffff;
*(uint *)(puVar29 + iVar9 * 4 + -0x51c) = (*(uint *)(iVar6 + 4 + iVar21 * 4) & 0xffdfffff) - 1;
iVar9 = iVar9 + 1;
} while (iVar9 != 0x100);
uVar14 = **(uint **)(puVar29 + -0x124c) & 0xffdfffff;
iVar6 = *(int *)(puVar29 + *(int *)(puVar29 + -0x1228) * 4 + -0x91c);
if ((int)uVar14 < iVar6) {
do {
iVar9 = *(int *)(*(int *)(puVar29 + -0x1208) + uVar14 * 4);
*(int *)(puVar29 + -0x11dc) = iVar9;
iVar9 = iVar9 + -1;
if (iVar9 < 0) {
iVar9 = *(int *)(puVar29 + 0xc) + iVar9;
}
uVar8 = (uint)param_2[iVar9];
if (puVar29[uVar8 - 0x11c] == '\0') {
iVar6 = *(int *)(puVar29 + uVar8 * 4 + -0x91c);
*(int *)(puVar29 + uVar8 * 4 + -0x91c) = iVar6 + 1;
*(int *)(*(int *)(puVar29 + -0x1208) + iVar6 * 4) = iVar9;
iVar6 = *(int *)(puVar29 + *(int *)(puVar29 + -0x1228) * 4 + -0x91c);
}
uVar14 = uVar14 + 1;
} while ((int)uVar14 < iVar6);
}
iVar9 = *(int *)(puVar29 + *(int *)(puVar29 + -0x1228) * 4 + -0x51c);
puVar10 = (uint *)((*(int *)(puVar29 + -0x1228) + 1) * 0x400 + *(int *)(puVar29 + -0x1224));
uVar14 = *puVar10;
*(uint **)(puVar29 + -0x11dc) = puVar10;
iVar21 = (uVar14 & 0xffdfffff) - 1;
if (iVar9 < iVar21) {
*(int *)(puVar29 + -0x11e4) = iVar6;
do {
iVar6 = *(int *)(*(int *)(puVar29 + -0x1208) + iVar21 * 4);
*(int *)(puVar29 + -0x11e0) = iVar6;
iVar6 = iVar6 + -1;
if (iVar6 < 0) {
iVar6 = *(int *)(puVar29 + 0xc) + iVar6;
}
uVar14 = (uint)param_2[iVar6];
if (puVar29[uVar14 - 0x11c] == '\0') {
iVar9 = *(int *)(puVar29 + uVar14 * 4 + -0x51c);
*(int *)(puVar29 + uVar14 * 4 + -0x51c) = iVar9 + -1;
*(int *)(*(int *)(puVar29 + -0x1208) + iVar9 * 4) = iVar6;
iVar9 = *(int *)(puVar29 + *(int *)(puVar29 + -0x1228) * 4 + -0x51c);
}
iVar21 = iVar21 + -1;
} while (iVar9 < iVar21);
iVar6 = *(int *)(puVar29 + -0x11e4);
}
if ((iVar9 != iVar6 + -1) && ((iVar6 != 0 || (*(int *)(puVar29 + -0x123c) != iVar9)))) {
*piVar27 = 0x3ef;
piVar27[-1] = 0x29af78;
BZ2_bz__AssertH__fail(*piVar27);
}
iVar6 = *(int *)(puVar29 + -0x1224);
iVar9 = 0;
do {
iVar21 = iVar9 + 1;
puVar10 = (uint *)(iVar6 + (iVar9 * 0x100 + *(int *)(puVar29 + -0x1228)) * 4);
*puVar10 = *puVar10 | 0x200000;
iVar9 = iVar21;
} while (iVar21 != 0x100);
puVar29[*(int *)(puVar29 + -0x1228) + -0x11c] = 1;
if (*(undefined1 **)(puVar29 + -0x1240) == puVar29 + -0x920) goto LAB_0029b06f;
bVar13 = 0;
iVar6 = (**(uint **)(puVar29 + -0x11dc) & 0xffdfffff) -
(**(uint **)(puVar29 + -0x124c) & 0xffdfffff);
iVar9 = iVar6;
while (0xfffe < iVar9) {
bVar13 = bVar13 + 1;
iVar9 = iVar6 >> (bVar13 & 0x1f);
}
iVar6 = iVar6 + -1;
*(uint *)(puVar29 + -0x11dc) =
*(int *)(puVar29 + -0x1208) + (**(uint **)(puVar29 + -0x124c) & 0xffdfffff) * 4;
if (-1 < iVar6) {
*(int *)(puVar29 + -0x11e0) = iVar6;
do {
iVar9 = *(int *)(puVar29 + -0x122c);
iVar21 = *(int *)(*(int *)(puVar29 + -0x11dc) + iVar6 * 4);
uVar18 = (undefined2)(iVar6 >> (bVar13 & 0x1f));
*(undefined2 *)(iVar9 + iVar21 * 2) = uVar18;
if (iVar21 < 0x22) {
*(undefined2 *)(iVar9 + (iVar21 + *(int *)(puVar29 + 0xc)) * 2) = uVar18;
}
iVar6 = iVar6 + -1;
} while (iVar6 != -1);
iVar6 = *(int *)(puVar29 + -0x11e0);
}
if (0xffff < iVar6 >> (bVar13 & 0x1f)) {
*piVar27 = 0x3ea;
piVar27[-1] = 0x29b056;
BZ2_bz__AssertH__fail(*piVar27);
}
*(int *)(puVar29 + -0x1240) = *(int *)(puVar29 + -0x1240) + 4;
if (*(undefined1 **)(puVar29 + -0x1240) == puVar29 + -0x91c) {
LAB_0029b06f:
if (3 < *(int *)(puVar29 + 0x10)) {
iVar6 = *(int *)(puVar29 + -0x1248);
piVar27[1] = (int)" %d pointers, %d sorted, %d scanned\n";
iVar9 = *(int *)(puVar29 + 0xc);
piVar27[3] = iVar6;
piVar27[4] = iVar9 - iVar6;
piVar27[2] = *(int *)(puVar29 + 0xc);
*piVar27 = (int)_stderr;
piVar27[-1] = 0x29b30e;
fprintf((FILE *)*piVar27,(char *)piVar27[1]);
}
LAB_0029b079:
if (*(int *)(puVar29 + -0x1c) == *(int *)(in_GS_OFFSET + 0x14)) {
return;
}
/* WARNING: Subroutine does not return */
*(undefined4 *)((int)piVar27 + -4) = 0x29b2df;
__stack_chk_fail();
}
goto LAB_0029a3d8;
}
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.