Normalization__CanCombinableCharactersCombine

NTSTATUS __stdcall Normalization__CanCombinableCharactersCombine(
        _RTL_NORMALIZATION *pNormalization,
        INT64 cFirst,
        INT64 cSecond){
  unsigned int v3; 
  _RTL_NORMALIZATION v5; 
  __int64 v6; 
  __int64 v7; 
  unsigned __int16 v8; 
  unsigned __int16 v9; 
  __int64 v10; 
  unsigned int v11; 

  v3 = cSecond;
  if( ((cFirst & 0x1F0000) == 0) != ((cSecond & 0x1F0000) == 0) )
    return 0;
  v5 = pNormalization[22];
  if( !v5 )
    return 0;
  v6 = *((_QWORD *)pNormalization + 12);
  v7 = (unsigned __int16)((int)(cFirst + 12541 * v3) % v5);
  v8 = *(_WORD *)(v6 + 2 * v7);
  v9 = *(_WORD *)(v6 + 2 * v7 + 2);
  if( v8 >= v9 )
    return 0;
  v10 = *((_QWORD *)pNormalization + 13);
  while( 1 )
  {
    v11 = *(unsigned __int16 *)(v10 + 2i64 * v8);
    if( __PAIR64__(v3, cFirst) == __PAIR64__(*(unsigned __int16 *)(v10 + 2i64 * v8 + 2), v11) )
      return *(unsigned __int16 *)(v10 + 2i64 * v8 + 4);
    if( (unsigned __int16)(v11 + 10240) <= 0x7FFu )
      break;
LABEL_13:
    v8 += 3;
    if( v8 >= v9 )
      return 0;
  }
  if( (int)cFirst <= 0xFFFF
    || (_WORD)v11 != (unsigned __int16)(((int)cFirst - 0x10000) / 1024) - 10240
    || *(_DWORD *)(v10 + 2i64 * v8 + 2) != __PAIR32__(
                                             (int)(v3 - 0x10000) / 1024 - 10240,
                                             ((int)cFirst - 0x10000) % 1024 - 9216)
    || *(_WORD *)(v10 + 2i64 * v8 + 6) != (unsigned __int16)((int)(v3 - 0x10000) % 1024) - 9216 )
  {
    v8 += 3;
    goto LABEL_13;
  }
  return *(unsigned __int16 *)(v10 + 2i64 * v8 + 10) + ((*(unsigned __int16 *)(v10 + 2i64 * v8 + 8) - 55287) << 10);
}

Referenced by:

NormBuffer__LastStartBasePair
NormBuffer__RecheckStartCombinations
Normalization__CanCombineWithStartBase
Normalization__CanCombineWithStartFirstPair
Normalization__IsNormalized
Normalization__NormalizeCharacter