undefined4 FUN_00476c3c(int param_1)

{
  int *piVar1;
  int iVar2;
  char *pcVar3;
  undefined4 uVar4;
  undefined4 *puVar5;
  int iVar6;
  
  pcVar3 = *(char **)(param_1 + 0xc);
  if (*pcVar3 == 'L') {
    *(char **)(param_1 + 0xc) = pcVar3 + 1;
    if (pcVar3[1] == '_') {
      *(char **)(param_1 + 0xc) = pcVar3 + 2;
      uVar4 = 0;
      if (pcVar3[2] == 'Z') {
        *(char **)(param_1 + 0xc) = pcVar3 + 3;
        uVar4 = FUN_004763b0(param_1,0);
      }
    }
    else {
      piVar1 = (int *)FUN_004754f4();
      if (piVar1 == (int *)0x0) {
        return 0;
      }
      if ((*piVar1 == 0x22) && (*(int *)(piVar1[1] + 0x10) != 0)) {
        *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) - *(int *)(piVar1[1] + 4);
      }
      uVar4 = 0x32;
      if (**(char **)(param_1 + 0xc) == 'n') {
        *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
        uVar4 = 0x33;
      }
      iVar6 = *(int *)(param_1 + 0xc);
      while( true ) {
        pcVar3 = *(char **)(param_1 + 0xc);
        if (*pcVar3 == 'E') break;
        if (*pcVar3 == '\0') {
          return 0;
        }
        *(char **)(param_1 + 0xc) = pcVar3 + 1;
      }
      iVar2 = *(int *)(param_1 + 0x14);
      puVar5 = (undefined4 *)0x0;
      if (iVar2 < *(int *)(param_1 + 0x18)) {
        puVar5 = (undefined4 *)(*(int *)(param_1 + 0x10) + iVar2 * 0xc);
        *(int *)(param_1 + 0x14) = iVar2 + 1;
        if (((puVar5 == (undefined4 *)0x0) || (iVar6 == 0)) || ((int)pcVar3 - iVar6 == 0)) {
          puVar5 = (undefined4 *)0x0;
        }
        else {
          puVar5[1] = iVar6;
          puVar5[2] = (int)pcVar3 - iVar6;
          *puVar5 = 0;
        }
      }
      uVar4 = FUN_00473000(param_1,uVar4,piVar1,puVar5);
    }
    if (**(char **)(param_1 + 0xc) == 'E') {
      *(char **)(param_1 + 0xc) = *(char **)(param_1 + 0xc) + 1;
      return uVar4;
    }
  }
  return 0;
}