int * FUN_0047d6f4(int param_1,int *param_2,int param_3)
{
undefined4 uVar1;
undefined4 uVar2;
uint uVar3;
uint uVar4;
int iVar5;
uint uVar6;
int iVar7;
uint local_38;
uint local_34;
uint *local_30;
uVar6 = *(uint *)(param_1 + 0x10) >> 3 & 0xff;
uVar1 = FUN_0047cd74(uVar6,param_1);
iVar7 = 0;
local_30 = &local_38;
do {
if (*param_2 == 0) {
return (int *)0x0;
}
if (param_2[1] != 0) {
if (((*(uint *)(param_1 + 0x10) & 4) != 0) &&
(iVar5 = (int)param_2 + (4 - param_2[1]), iVar5 != iVar7)) {
uVar6 = FUN_0047cfb8(iVar5);
uVar1 = FUN_0047cd74(uVar6 & 0xff,param_1);
iVar7 = iVar5;
}
if (uVar6 == 0) {
local_38 = param_2[2];
local_34 = param_2[3];
uVar3 = local_38;
}
else {
uVar2 = FUN_0047ce1c(uVar6 & 0xff,uVar1,param_2 + 2,local_30);
FUN_0047ce1c(uVar6 & 0xf,0,uVar2,&local_34);
uVar3 = FUN_0047ccf0(uVar6 & 0xff);
uVar4 = 0xffffffff;
if (uVar3 < 4) {
uVar4 = (1 << ((uVar3 & 3) << 3)) - 1;
}
uVar3 = uVar4 & local_38;
}
if ((uVar3 != 0) && (param_3 - local_38 < local_34)) {
return param_2;
}
}
param_2 = (int *)((int)param_2 + *param_2 + 4);
} while( true );
}