int * FUN_00462370(int *param_1,undefined4 *param_2,int param_3)

{
  char cVar1;
  undefined1 *puVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  char *pcVar6;
  char *pcVar7;
  int *piVar8;
  int iVar9;
  char *pcVar10;
  
  if ((param_1 == (int *)0x0) || (piVar8 = (int *)*param_1, piVar8 == (int *)0x0)) {
    piVar8 = (int *)FUN_00438550(2);
    if (piVar8 == (int *)0x0) {
      return (int *)0x0;
    }
    piVar8[1] = 2;
  }
  pcVar10 = (char *)*param_2;
  puVar2 = (undefined1 *)FUN_0043a36c(param_3 + 1,"a_int.c",199);
  if (puVar2 == (undefined1 *)0x0) {
    FUN_00433604(0xd,0xc2,0x41,"a_int.c",0x103);
    if ((param_1 != (int *)0x0) && ((int *)*param_1 == piVar8)) {
      return (int *)0x0;
    }
    FUN_004384e0(piVar8);
    return (int *)0x0;
  }
  iVar9 = param_3;
  if (param_3 == 0) {
    piVar8[1] = 2;
    goto LAB_004623f8;
  }
  if (-1 < *pcVar10) {
    piVar8[1] = 2;
    pcVar7 = pcVar10;
    iVar3 = param_3;
    if (*pcVar10 == '\0') {
      if (param_3 == 1) {
        iVar3 = 1;
      }
      else {
        pcVar7 = pcVar10 + 1;
        iVar3 = param_3 + -1;
        iVar9 = param_3 + -1;
      }
    }
    FUN_00483c90(puVar2,pcVar7,iVar3);
    goto LAB_004623f8;
  }
  piVar8[1] = 0x102;
  iVar4 = param_3 + -1;
  pcVar7 = pcVar10;
  iVar3 = param_3;
  if (*pcVar10 == -1) {
    if (param_3 == 1) {
      iVar4 = 0;
      iVar3 = 1;
    }
    else {
      iVar4 = param_3 + -2;
      pcVar7 = pcVar10 + 1;
      iVar3 = param_3 + -1;
      iVar9 = param_3 + -1;
    }
  }
  pcVar7 = pcVar7 + iVar4;
  cVar1 = *pcVar7;
  pcVar6 = puVar2 + iVar4;
  iVar4 = iVar9;
  if (cVar1 == '\0') {
    if (iVar9 != 0) {
      *pcVar6 = '\0';
      while( true ) {
        pcVar7 = pcVar7 + -1;
        cVar1 = *pcVar7;
        iVar4 = iVar4 + -1;
        pcVar6 = pcVar6 + -1;
        if (cVar1 != '\0') break;
        if (iVar4 == 0) goto LAB_00462590;
        *pcVar6 = '\0';
      }
      goto LAB_0046254c;
    }
  }
  else {
LAB_0046254c:
    if (iVar4 != 0) {
      *pcVar6 = -cVar1;
      if (1 < iVar4) {
        iVar3 = 0;
        do {
          iVar5 = iVar3 + -1;
          pcVar6[iVar3 + -1] = ~pcVar7[iVar3 + -1];
          iVar3 = iVar5;
        } while (iVar5 != 1 - iVar4);
      }
      goto LAB_004623f8;
    }
  }
LAB_00462590:
  *puVar2 = 1;
  iVar9 = iVar9 + 1;
  puVar2[iVar3] = 0;
LAB_004623f8:
  if (piVar8[2] != 0) {
    FUN_0043a484();
  }
  piVar8[2] = (int)puVar2;
  *piVar8 = iVar9;
  if (param_1 != (int *)0x0) {
    *param_1 = (int)piVar8;
  }
  *param_2 = pcVar10 + param_3;
  return piVar8;
}