int FUN_004174e8(int *param_1,int param_2)

{
  uint uVar1;
  int iVar2;
  int *piVar3;
  
  if (param_1 == (int *)0x0) {
    piVar3 = (int *)0x0;
  }
  else {
    piVar3 = (int *)0x0;
    if (param_2 != 0) {
      uVar1 = (*(code *)param_1[2])(param_2);
      if (param_1[1] == 0) {
        trap(0x1c00);
      }
      piVar3 = *(int **)(*param_1 + (uVar1 % (uint)param_1[1]) * 4);
      while ((piVar3 != (int *)0x0 && (iVar2 = (*(code *)param_1[3])(param_2,piVar3[2]), iVar2 == 0)
             )) {
        piVar3 = (int *)*piVar3;
      }
    }
  }
  return (int)piVar3;
}