NormBuffer__GetLastChar

NTSTATUS __stdcall NormBuffer__GetLastChar(INT64 a1){
  INT64 v1; 
  unsigned __int16 *v2; 
  unsigned int v3; 
  INT64 v4; 
  NTSTATUS v5; 
  INT64 v6; 
  _RTL_NORMALIZATION *v7; 
  INT64 v8; 
  char v9; 
  char v10; 
  char v11; 

  v1 = a1;
  v2 = (unsigned __int16 *)(*(_QWORD *)(a1 + 40) - 2i64);
  if( *(unsigned __int16 **)(v1 + 64) != v2 )
  {
    v3 = *v2;
    *(_QWORD *)(v1 + 64) = v2;
    v4 = v3;
    *(_DWORD *)(v1 + 56) = v3;
    if( v3 > 0xDC00 && v3 <= 0xDFFF )
    {
      v4 = v3 + ((*(v2 - 1) - 55287) << 10);
      *(_DWORD *)(v1 + 56) = v4;
    }
    v5 = Normalization__PageLookup(*(_RTL_NORMALIZATION **)(v1 + 112), v4);
    v8 = (unsigned int)(v5 - 1);
    if( (unsigned __int8)(v5 - 1) > 0xF9u )
    {
      v10 = 0;
      v11 = 0;
    }
    else
    {
      LOBYTE(v8) = v5;
      v9 = Normalization__TableLookup(v7, v6, v8);
      v10 = v9 & 0xC0;
      v11 = v9 & 0x3F;
    }
    *(_BYTE *)(v1 + 72) = v11;
    *(_BYTE *)(v1 + 73) = v10;
  }
  return *(_DWORD *)(v1 + 56);
}

Referenced by:

Normalization__NormalizeCharacter