uint FUN_004385f0(undefined4 *param_1,uint *param_2,uint *param_3,uint *param_4,int param_5)
{
byte bVar1;
uint uVar2;
uint uVar3;
int iVar4;
int iVar5;
byte *pbVar6;
uint uVar7;
byte *pbVar8;
uint uVar9;
pbVar6 = (byte *)*param_1;
if (param_5 != 0) {
uVar7 = (uint)*pbVar6;
uVar3 = uVar7 & 0x1f;
iVar5 = param_5 + -1;
pbVar8 = pbVar6;
if (uVar3 == 0x1f) {
iVar5 = param_5 + -1;
if (iVar5 != 0) {
uVar3 = 0;
while( true ) {
pbVar8 = pbVar8 + 1;
bVar1 = *pbVar8;
if (-1 < (char)bVar1) break;
uVar3 = uVar3 << 7 | bVar1 & 0x7f;
iVar5 = iVar5 + -1;
if ((iVar5 == 0) || (0xffffff < (int)uVar3)) goto LAB_004386e0;
}
iVar5 = iVar5 + -1;
if (iVar5 != 0) {
uVar3 = bVar1 & 0x7f | uVar3 << 7;
goto LAB_00438640;
}
}
}
else if (iVar5 != 0) {
LAB_00438640:
*param_3 = uVar3;
*param_4 = uVar7 & 0xc0;
if (0 < iVar5) {
bVar1 = pbVar8[1];
if (bVar1 == 0x80) {
pbVar8 = pbVar8 + 2;
uVar9 = 1;
uVar3 = 0;
}
else {
pbVar8 = pbVar8 + 2;
uVar3 = bVar1 & 0x7f;
if ((char)bVar1 < '\0') {
if ((4 < uVar3) || (iVar4 = iVar5 + -2, iVar5 == 1)) goto LAB_004386e0;
uVar2 = 0;
uVar9 = uVar3;
while (uVar3 = uVar2, uVar9 != 0) {
bVar1 = *pbVar8;
uVar9 = uVar9 - 1;
pbVar8 = pbVar8 + 1;
uVar2 = uVar2 << 8 | (uint)bVar1;
if (iVar4 == 0) goto LAB_004386e0;
iVar4 = iVar4 + -1;
}
}
if ((int)uVar3 < 0) goto LAB_004386e0;
uVar9 = 0;
}
*param_2 = uVar3;
if ((int)uVar3 <= (int)(pbVar6 + (param_5 - (int)pbVar8))) {
*param_1 = pbVar8;
return uVar7 & 0x20 | uVar9;
}
FUN_00433604(0xd,0x72,0x9b,"asn1_lib.c",0x8e);
*param_1 = pbVar8;
return uVar7 & 0x20 | 0x80 | uVar9;
}
}
}
LAB_004386e0:
FUN_00433604(0xd,0x72,0x7b,"asn1_lib.c",0x96);
return 0x80;
}