FilterEvalImpliedAnd

__int64 __fastcall FilterEvalImpliedAnd(
        __int64 (__fastcall *a1)(__int64, __int64, unsigned int *, unsigned int *, wchar_t **),
        __int64 a2,
        unsigned int a3,
        __int64 a4,
        int *a5){
  int *v5; 
  unsigned int v6; 
  unsigned int v7; 
  int v10; 
  __int64(__fastcall *v12)(__int64, __int64, unsigned int *, unsigned int *, wchar_t **); 
  WCHAR **v13; 
  unsigned int v14; 
  UINT64 PropertyType; 
  UINT64 ContainsArraySize; 
  UINT64 v18; 
  UINT8 *v19; 
  UINT64 v21; 
  v5 = a5;
  v6 = 0;
  LODWORD(v18) = 0;
  v7 = 0;
  v19 = 0i64;
  LODWORD(v21) = 0;
  *a5 = 0;
  v10 = 1;
  v12 = a1;
  if( a3 )
  {
    v13 = (WCHAR **)(a4 + 48);
    while( (*(_DWORD *)(v13 - 6) & 0xFF00000) == 0 )
    {
      v14 = v12(a2, 56i64 * v7 + a4 + 8, (unsigned int *)&v18, (unsigned int *)&v21, (wchar_t **)&v19);
      v6 = v14;
      if( v14 == -1073741275 )
      {
        v6 = 0;
        v10 = 0;
      }
      else
      {
        if( v14 )
          goto LABEL_10;
        LODWORD(ContainsArraySize) = *((_DWORD *)v13 - 1);
        LODWORD(PropertyType) = *((_DWORD *)v13 - 2);
        PropertyEval(
          (unsigned int)v18,
          v19,
          (unsigned int)v21,
          *((unsigned int *)v13 - 12),
          PropertyType,
          *v13,
          ContainsArraySize,
          (INT64 *)v5);
        if( *v5 == v6 )
          return 0i64;
      }
      v12 = a1;
      ++v7;
      v13 += 7;
      if( v7 >= a3 )
        goto LABEL_10;
    }
    v6 = -1073741811;
LABEL_10:
    if( !v10 && !v6 )
      return(unsigned int)-1073741823;
  }
  return v6;
}

Referenced by:

FilterEval