input_s

__int64 __fastcall input_s(FILE *File, __int64 a2, __int64 a3){
  int v3; 
  _BYTE **v4; 
  int v5; 
  unsigned __int8 *v6; 
  FILE *v7; 
  unsigned __int8 v8; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned int v11; 
  unsigned __int64 v12; 
  int v13; 
  char v14; 
  char v15; 
  char v16; 
  int v17; 
  int v18; 
  char v19; 
  __int64 v20; 
  char v21; 
  __int64 v22; 
  _BYTE *v23; 
  unsigned int v24; 
  int v25; 
  int v26; 
  _DWORD *v27; 
  unsigned int v28; 
  int v29; 
  int v30; 
  int v31; 
  FILE *v32; 
  __int64 v33; 
  int v34; 
  __int64 v35; 
  unsigned __int16 v36; 
  int v37; 
  int v38; 
  __int64 v39; 
  int v40; 
  unsigned __int16 v41; 
  int v42; 
  int v43; 
  int v44; 
  int v45; 
  unsigned int v46; 
  int String; 
  int v48; 
  bool v49; 
  int v50; 
  PVOID *pointer; 
  char v53; 
  char v54; 
  char v55; 
  unsigned int v56; 
  INT64 v57; 
  INT64 v58; 
  int v59; 
  int v60; 
  unsigned int v61; 
  int v62; 
  int v63; 
  __int64 v64; 
  int v65; 
  _DWORD stream[3]; 
  INT64 pCharCount; 
  _BYTE *v68; 
  UINT8 *v70; 
  _BYTE **v71; 
  char v72; 
  v71 = (_BYTE **)a3;
  v3 = 0;
  v4 = (_BYTE **)a3;
  v64 = 0i64;
  v5 = 0;
  HIDWORD(v58) = 0;
  v6 = (unsigned __int8 *)a2;
  HIDWORD(v57) = 0;
  v7 = File;
  v63 = 0;
  *(_QWORD *)&stream[1] = 0i64;
  if( !a2 || !File )
  {
    v10 = -1;
LABEL_220:
    xHalTimerWatchdogStop(0i64, 0i64);
    return v10;
  }
  v8 = *(_BYTE *)a2;
  v9 = 0;
  v54 = 0;
  v10 = 0;
  LODWORD(v58) = 0;
  LODWORD(v57) = 0;
  v56 = 0;
  stream[0] = 0;
  if( !v8 )
    return v10;
  v11 = -1;
  while( 1 )
  {
    v12 = v8;
    if( (pctype[v8] & 8) == 0 )
      break;
    --v9;
    while( 1 )
    {
      LODWORD(v58) = ++v9;
      LODWORD(v57) = v9;
      v13 = inc(v7, a2);
      v11 = -1;
      if( v13 == -1 )
        break;
      if( (pctype[(unsigned __int8)v13] & 8) == 0 )
      {
        ungetc_nolock(v13, v7);
        v11 = -1;
        goto LABEL_10;
      }
    }
    do
LABEL_10:
      ++v6;
    while( (pctype[*v6] & 8) != 0 );
LABEL_195:
    v8 = *v6;
    v3 = 0;
    if( !*v6 )
      goto LABEL_206;
  }
  if( v8 != 37 )
    goto LABEL_191;
  if( v6[1] == 37 )
  {
    ++v6;
LABEL_191:
    LODWORD(v58) = ++v9;
    LODWORD(v57) = v9;
    v5 = inc(v7, a2);
    HIDWORD(v58) = v5;
    HIDWORD(v57) = v5;
    v48 = *v6++;
    if( v48 == v5 )
      goto LABEL_192;
    v11 = -1;
    if( v5 == -1 )
      goto LABEL_215;
    ungetc_nolock(v5, v7);
    v50 = v63;
    v11 = -1;
    goto LABEL_212;
  }
  v14 = 0;
  v61 = 0;
  v55 = 0;
  v15 = 0;
  v72 = 0;
  v16 = 0;
  v17 = 0;
  v65 = 0;
  v18 = 0;
  v19 = 1;
  do
  {
    v70 = ++v6;
    v20 = *v6;
    if( (pctype[v20] & 4) != 0 )
    {
      ++v18;
      v3 = v20 + 2 * (5 * v3 - 24);
      goto LABEL_44;
    }
    if( (unsigned int)v20 > 0x68 )
    {
      if( (_DWORD)v20 == 106 )
        goto LABEL_29;
      if( (_DWORD)v20 == 108 )
      {
        if( v6[1] != 108 )
        {
          ++v19;
LABEL_51:
          ++v16;
          goto LABEL_44;
        }
        v70 = ++v6;
        goto LABEL_29;
      }
      if( (_DWORD)v20 != 116 )
      {
        if( (_DWORD)v20 == 119 )
          goto LABEL_51;
        if( (_DWORD)v20 != 122 )
          goto LABEL_43;
      }
      goto LABEL_40;
    }
    if( (_DWORD)v20 == 104 )
    {
      --v19;
      --v16;
      goto LABEL_44;
    }
    if( (_DWORD)v20 == 42 )
    {
      v21 = ++v72;
      continue;
    }
    if( (_DWORD)v20 != 70 )
    {
      if( (_DWORD)v20 != 73 )
      {
        if( (_DWORD)v20 == 76 )
        {
          ++v19;
        }
        else if( (_DWORD)v20 != 78 )
        {
          goto LABEL_43;
        }
        goto LABEL_44;
      }
      LOBYTE(a2) = v6[1];
      if( (_BYTE)a2 == 54 )
      {
        v12 = (unsigned __int64)(v6 + 2);
        if( v6[2] == 52 )
        {
          v6 += 2;
          v70 = (UINT8 *)v12;
LABEL_29:
          ++v17;
          v64 = 0i64;
          goto LABEL_44;
        }
      }
      if( (_BYTE)a2 == 51 )
      {
        v12 = (unsigned __int64)(v6 + 2);
        if( v6[2] == 50 )
        {
          v6 += 2;
          v70 = (UINT8 *)v12;
          goto LABEL_44;
        }
      }
LABEL_40:
      LOBYTE(v12) = v6[1] - 88;
      if( (unsigned __int8)v12 > 0x20u || (v22 = 0x120821001i64, !_bittest64(&v22, v12)) )
      {
        ++v17;
        v64 = 0i64;
LABEL_43:
        ++v15;
        goto LABEL_44;
      }
      goto LABEL_29;
    }
LABEL_44:
    v21 = v72;
  }
  while( !v15 );
  v53 = v19;
  v5 = HIDWORD(v58);
  v60 = v18;
  v9 = v58;
  v62 = v17;
  v59 = v3;
  if( v21 )
  {
    v23 = 0i64;
    v68 = 0i64;
  }
  else
  {
    *(_QWORD *)&stream[1] = v4;
    v71 = v4 + 1;
    v23 = *v4;
    v68 = v23;
  }
  pCharCount = (INT64)v23;
  if( !v16 )
    v16 = ((*v6 - 67) & 0xEF) != 0 ? -1 : 1;
  v24 = *v6 | 0x20;
  if( v24 == 110 )
  {
LABEL_64:
    v26 = v60;
    if( v60 && !v3 )
    {
      if( v5 == -1 )
        goto LABEL_215;
      ungetc_nolock(v5, File);
      v11 = -1;
LABEL_210:
      v50 = v63;
LABEL_211:
      v10 = v56;
      goto LABEL_212;
    }
    if( !v21 && (v24 == 99 || v24 == 115 || v24 == 123) )
    {
      v27 = (_DWORD *)(*(_QWORD *)&stream[1] + 8i64);
      *(_QWORD *)&stream[1] = v27;
      v23 = (_BYTE *)*((_QWORD *)v27 - 1);
      pCharCount = (INT64)v23;
      v71 = (_BYTE **)(v27 + 2);
      a2 = (unsigned int)*v27;
      if( !*v27 )
      {
        v10 = v56;
        v49 = v16 <= 0;
        v50 = 0;
        if( v49 )
          *v23 = 0;
        else
          *(_WORD *)v23 = 0;
        goto LABEL_212;
      }
    }
    else
    {
      v27 = *(_DWORD **)&stream[1];
      a2 = 0i64;
    }
    if( v24 > 0x70 )
    {
      switch( v24 )
      {
        case 's':
          v30 = 32;
          break;
        case 'u':
          goto LABEL_93;
        case 'x':
          goto LABEL_85;
        case '{':
          v30 = 64;
          break;
        default:
          goto LABEL_99;
      }
    }
    else
    {
      if( v24 == 112 )
      {
        ++v62;
        v53 = 1;
        v64 = 0i64;
        goto LABEL_93;
      }
      if( v24 != 99 )
      {
        if( v24 != 100 )
        {
          if( v24 != 105 )
          {
            if( v24 == 110 )
            {
              v28 = v9;
              if( v72 )
                goto LABEL_81;
              goto LABEL_172;
            }
            if( v24 != 111 )
            {
              v21 = v72;
LABEL_99:
              if( *v6 == v5 )
              {
                --v54;
                if( !v21 )
                {
                  v4 = (_BYTE **)v27;
                  v71 = (_BYTE **)v27;
                  goto LABEL_82;
                }
LABEL_81:
                v4 = v71;
LABEL_82:
                v10 = v56;
LABEL_83:
                ++v54;
                v7 = File;
                ++v6;
LABEL_192:
                v11 = -1;
                if( v5 == -1 && (*v6 != 37 || v6[1] != 110) )
                  goto LABEL_215;
                goto LABEL_195;
              }
              if( v5 != -1 )
              {
                ungetc_nolock(v5, File);
                v11 = -1;
              }
              v50 = 1;
              goto LABEL_211;
            }
            goto LABEL_93;
          }
          v24 = 100;
LABEL_85:
          if( v5 == 45 )
          {
            v55 = 1;
          }
          else if( v5 != 43 )
          {
            goto LABEL_107;
          }
          v59 = v3 - 1;
          if( v3 != 1 || !v60 )
          {
            v32 = File;
            LODWORD(v58) = ++v9;
            LODWORD(v57) = v9;
            v5 = inc(File, a2);
            HIDWORD(v58) = v5;
            HIDWORD(v57) = v5;
LABEL_108:
            if( v5 == 48 )
            {
              LODWORD(v58) = ++v9;
              LODWORD(v57) = v9;
              v5 = inc(v32, a2);
              HIDWORD(v58) = v5;
              HIDWORD(v57) = v5;
              if( (((_BYTE)v5 - 88) & 0xDF) != 0 )
              {
                v65 = 1;
                if( v24 == 120 )
                {
                  LODWORD(v58) = --v9;
                  LODWORD(v57) = v9;
                  if( v5 != -1 )
                    ungetc_nolock(v5, File);
                  v26 = v60;
                  v5 = 48;
                  HIDWORD(v58) = 48;
                  HIDWORD(v57) = 48;
                }
                else
                {
                  v26 = v60;
                  if( v60 )
                  {
                    if( !--v59 )
                      ++v14;
                  }
                  v24 = 111;
                }
              }
              else
              {
                LODWORD(v58) = ++v9;
                LODWORD(v57) = v9;
                v34 = inc(v32, v33);
                v26 = v60;
                HIDWORD(v58) = v34;
                v5 = v34;
                HIDWORD(v57) = v34;
                if( v60 )
                {
                  v59 -= 2;
                  if( v59 < 1 )
                    ++v14;
                }
                v24 = 120;
              }
              goto LABEL_129;
            }
            goto LABEL_128;
          }
          v14 = 1;
LABEL_107:
          v32 = File;
          goto LABEL_108;
        }
LABEL_93:
        if( v5 == 45 )
        {
          v55 = 1;
        }
        else if( v5 != 43 )
        {
LABEL_129:
          if( v62 )
          {
            if( !v14 )
            {
              while( 1 )
              {
                if( ((v24 - 112) & 0xFFFFFFF7) != 0 )
                {
                  if( (pctype[(unsigned __int8)v5] & 4) == 0 )
                    goto LABEL_144;
                  if( v24 == 111 )
                  {
                    if( v5 >= 56 )
                      goto LABEL_144;
                    v35 = 8 * v64;
                  }
                  else
                  {
                    v35 = 10 * v64;
                  }
                }
                else
                {
                  v36 = pctype[(unsigned __int8)v5];
                  if( (v36 & 0x80u) == 0 )
                  {
LABEL_144:
                    LODWORD(v58) = --v9;
                    LODWORD(v57) = v9;
                    if( v5 != -1 )
                      ungetc_nolock(v5, File);
                    break;
                  }
                  v37 = (char)v5;
                  v35 = 16 * v64;
                  v5 = ((char)v5 & 0xFFFFFFDF) - 7;
                  if( (v36 & 4) != 0 )
                    v5 = v37;
                  HIDWORD(v58) = v5;
                  HIDWORD(v57) = v5;
                }
                ++v65;
                a2 = v5 - 48 + v35;
                v64 = a2;
                if( v26 )
                {
                  if( !--v59 )
                    goto LABEL_147;
                }
                LODWORD(v58) = ++v9;
                LODWORD(v57) = v9;
                v38 = inc(File, a2);
                v26 = v60;
                v5 = v38;
                HIDWORD(v58) = v38;
                HIDWORD(v57) = v38;
              }
            }
            a2 = v64;
LABEL_147:
            v39 = -a2;
            if( !v55 )
              v39 = a2;
            v64 = v39;
          }
          else
          {
            if( !v14 )
            {
              while( 1 )
              {
                if( ((v24 - 112) & 0xFFFFFFF7) != 0 )
                {
                  if( (pctype[(unsigned __int8)v5] & 4) == 0 )
                    goto LABEL_164;
                  if( v24 == 111 )
                  {
                    if( v5 >= 56 )
                      goto LABEL_164;
                    v40 = 8 * v61;
                  }
                  else
                  {
                    v40 = 10 * v61;
                  }
                }
                else
                {
                  v41 = pctype[(unsigned __int8)v5];
                  if( (v41 & 0x80u) == 0 )
                  {
LABEL_164:
                    LODWORD(v58) = --v9;
                    LODWORD(v57) = v9;
                    if( v5 != -1 )
                      ungetc_nolock(v5, File);
                    break;
                  }
                  v42 = (char)v5;
                  v40 = 16 * v61;
                  v5 = ((char)v5 & 0xFFFFFFDF) - 7;
                  if( (v41 & 4) != 0 )
                    v5 = v42;
                  HIDWORD(v58) = v5;
                  HIDWORD(v57) = v5;
                }
                ++v65;
                a2 = (unsigned int)(v5 + v40 - 48);
                v61 = a2;
                if( v26 )
                {
                  if( !--v59 )
                    goto LABEL_167;
                }
                LODWORD(v58) = ++v9;
                LODWORD(v57) = v9;
                v43 = inc(File, a2);
                v26 = v60;
                v5 = v43;
                HIDWORD(v58) = v43;
                HIDWORD(v57) = v43;
              }
            }
            a2 = v61;
LABEL_167:
            if( v55 )
            {
              a2 = (unsigned int)-(int)a2;
              v61 = a2;
            }
          }
          if( !v65 )
          {
            v11 = -1;
            goto LABEL_210;
          }
          if( v72 )
            goto LABEL_81;
          stream[0] = ++v56;
          v28 = v61;
LABEL_172:
          if( v62 )
          {
            *(_QWORD *)v23 = v64;
            goto LABEL_81;
          }
          v10 = v56;
          if( v53 )
            *(_DWORD *)v23 = v28;
          else
            *(_WORD *)v23 = v28;
LABEL_177:
          v4 = v71;
          goto LABEL_83;
        }
        v59 = v3 - 1;
        if( v3 == 1 && v60 )
        {
          v14 = 1;
          goto LABEL_129;
        }
        LODWORD(v58) = ++v9;
        LODWORD(v57) = v9;
        v5 = inc(File, a2);
        HIDWORD(v58) = v5;
        HIDWORD(v57) = v5;
LABEL_128:
        v26 = v60;
        goto LABEL_129;
      }
      v29 = v3 + 1;
      v30 = 16;
      if( v60 )
        v29 = v3;
      v3 = v29;
      v31 = 1;
      if( v60 )
        v31 = v60;
      v26 = v31;
    }
    v44 = v30 | 1;
    if( !v26 )
      v44 = v30;
    v45 = v44 | 2;
    if( v16 <= 0 )
      v45 = v44;
    v46 = v45 | 4;
    if( !v72 )
      v46 = v45;
    LODWORD(pointer) = v3;
    if( v24 == 123 )
    {
      String = ReadStringDelimited(
                 v46,
                 &v70,
                 (INT64)&v57 + 4,
                 (INT64)&v57,
                 (INT64)&pCharCount,
                 pointer,
                 File,
                 a2,
                 (INT64)stream);
      v6 = v70;
    }
    else
    {
      String = ReadString(
                 v46,
                 0i64,
                 (INT64)&v57 + 4,
                 (INT64)&v57,
                 (PVOID *)&pCharCount,
                 (INT64)pointer,
                 File,
                 a2,
                 (INT64)stream);
    }
    v10 = stream[0];
    v5 = HIDWORD(v57);
    v56 = stream[0];
    if( !String )
    {
      v9 = v57;
      v58 = v57;
      goto LABEL_177;
    }
    v11 = -1;
LABEL_206:
    v50 = 0;
LABEL_212:
    if( v5 == -1 )
      goto LABEL_215;
    if( v50 != 1 )
      return v10;
    goto LABEL_220;
  }
  if( v24 == 99 || v24 == 123 )
  {
    v9 = v58 + 1;
    LODWORD(v58) = v9;
    LODWORD(v57) = v9;
    v5 = inc(File, a2);
    HIDWORD(v58) = v5;
    HIDWORD(v57) = v5;
    v11 = -1;
  }
  else
  {
    do
    {
      LODWORD(v57) = ++v9;
      v25 = inc(File, a2);
      v11 = -1;
      v5 = v25;
      HIDWORD(v58) = v25;
    }
    while( v25 != -1 && (pctype[(unsigned __int8)v25] & 8) != 0 );
    v23 = v68;
    LODWORD(v58) = v9;
    HIDWORD(v57) = v25;
  }
  if( v5 != -1 )
  {
    v3 = v59;
    v21 = v72;
    goto LABEL_64;
  }
LABEL_215:
  if( v56 || v54 )
    return v56;
  return v11;
}

Referenced by:

sinput_s