uint FUN_0041ced4(undefined4 param_1,int param_2,int param_3,int param_4,undefined4 *param_5)

{
  ushort uVar1;
  int iVar2;
  undefined4 uVar3;
  int iVar4;
  uint local_20 [2];
  
  uVar1 = *(ushort *)(param_3 + 2);
  if (param_2 != 2) {
    local_20[0] = (uint)*(ushort *)(param_3 + 2);
    if (0x40 < local_20[0]) {
      return 0xffffffff;
    }
    FUN_00483c90(param_4,*(undefined4 *)(param_3 + 8),local_20[0]);
    *(undefined1 *)(param_4 + local_20[0]) = 0;
    local_20[0] = FUN_00483e50(param_4);
    if (local_20[0] == 0x40) {
      iVar4 = FUN_0041ce28(param_4,local_20);
      if (iVar4 == 0) {
        return 0xffffffff;
      }
      *param_5 = 2;
      return local_20[0];
    }
    if (0x3f < local_20[0]) {
      return local_20[0];
    }
    *param_5 = 1;
    return local_20[0];
  }
  if (uVar1 == 0xd) {
LAB_0041cf80:
    FUN_00483c90(param_4,*(undefined4 *)(param_3 + 8));
    *(undefined1 *)(param_4 + (uint)*(ushort *)(param_3 + 2)) = 0;
    uVar1 = *(ushort *)(param_3 + 2);
    uVar3 = 1;
  }
  else {
    if (uVar1 < 0xe) {
      if (uVar1 == 5) goto LAB_0041cf80;
      if (uVar1 != 10) {
        if (uVar1 == 0) {
          return 0;
        }
        return 0xffffffff;
      }
    }
    else if ((uVar1 != 0x1a) && (uVar1 != 0x20)) {
      if (uVar1 != 0x10) {
        return 0xffffffff;
      }
      goto LAB_0041cf80;
    }
    iVar4 = *(int *)(param_3 + 8);
    local_20[0] = 0;
    while( true ) {
      if (*(ushort *)(param_3 + 2) <= local_20[0]) break;
      FUN_00480800(param_4 + local_20[0] * 2,&DAT_0048bd6c,*(undefined1 *)(iVar4 + local_20[0]));
      local_20[0] = local_20[0] + 1;
    }
    iVar2 = FUN_0041ce28(param_4,local_20);
    if (iVar2 == 0) {
      return 0xffffffff;
    }
    FUN_00483c90(param_4,iVar4,*(undefined2 *)(param_3 + 2));
    *(undefined1 *)(param_4 + (uint)*(ushort *)(param_3 + 2)) = 0;
    uVar1 = *(ushort *)(param_3 + 2);
    uVar3 = 2;
  }
  *param_5 = uVar3;
  return (uint)uVar1;
}