RtlIpv6AddressToStringW

WCHAR *__stdcall RtlIpv6AddressToStringW(in6_addr *Addr, WCHAR *S, INT64 a3, INT64 a4){
  unsigned int v4; 
  WCHAR *v5; 
  WCHAR *v6; 
  int v8; 
  int v9; 
  int v10; 
  int v11; 
  __int64 i; 
  __int64 v13; 
  int v14; 
  __int64 v15; 
  int v16; 
  __int64 v17; 
  __int64 v18; 
  int v19; 
  int v21; 
  int v22; 
  int v23; 
  int v24; 
  USHORT v25; 
  USHORT v26; 
  int v27; 
  const char *v28; 
  int v29; 

  v4 = 8;
  v5 = S + 46;
  v6 = S;
  if( !*(_DWORD *)Addr->u.Byte && !Addr->u.Word[2] && !Addr->u.Word[3] && Addr->u.Word[6] )
  {
    v25 = Addr->u.Word[4];
    if( v25 )
    {
      if( v25 == 0xFFFF && !Addr->u.Word[5] )
      {
        v29 = swprintf_s(
                S,
                0x2Eui64,
                (WCHAR *)L"::ffff:0:%u.%u.%u.%u",
                Addr->u.Byte[12],
                Addr->u.Byte[13],
                Addr->u.Byte[14],
                Addr->u.Byte[15]);
        return &v6[v29];
      }
    }
    else
    {
      v26 = Addr->u.Word[5];
      if( ((v26 + 1) & 0xFFFE) == 0 )
      {
        v27 = Addr->u.Byte[14];
        v28 = &File;
        if( v26 )
          v28 = "ffff:";
        v29 = swprintf_s(
                S,
                0x2Eui64,
                (WCHAR *)L"::%hs%u.%u.%u.%u",
                v28,
                Addr->u.Byte[12],
                Addr->u.Byte[13],
                v27,
                Addr->u.Byte[15]);
        return &v6[v29];
      }
    }
  }
  v8 = 0;
  v9 = 0;
  v10 = 0;
  if( (Addr->u.Word[4] & 0xFFFD) == 0 && Addr->u.Word[5] == 0xFE5E )
    v4 = 6;
  v11 = 0;
  for( i = 0i64; i < v4; ++i )
  {
    v13 = (unsigned int)(v11 + 1);
    if( Addr->u.Word[i] )
    {
      v10 = v11 + 1;
    }
    else
    {
      v21 = v8 - v9;
      v22 = v11 - v10 + 1;
      v23 = v10;
      if( v22 <= v8 - v9 )
        v23 = v9;
      v9 = v23;
      v24 = v13;
      if( v22 <= v21 )
        v24 = v8;
      v8 = v24;
    }
    v11 = v13;
  }
  v14 = 0;
  if( v8 - v9 > 1 )
    v14 = v8;
  v15 = v14;
  v16 = 0;
  if( v8 - v9 > 1 )
    v16 = v9;
  v17 = 0i64;
  v18 = v16;
  do
  {
    if( v17 >= v15 || v18 > v17 )
    {
      if( v17 && v17 != v15 )
        v6 += (int)swprintf_s(v6, v5 - v6, (WCHAR *)L":", v13);
      v19 = swprintf_s(v6, v5 - v6, (WCHAR *)L"%x", (unsigned __int16)__ROR2__(Addr->u.Word[v17], 8));
    }
    else
    {
      v19 = swprintf_s(v6, v5 - v6, (WCHAR *)L"::", v13);
      v17 = v15 - 1;
    }
    ++v17;
    v6 += v19;
  }
  while( v17 < v4 );
  if( v4 < 8 )
    v6 += (int)swprintf_s(
                 v6,
                 v5 - v6,
                 (WCHAR *)L":%u.%u.%u.%u",
                 Addr->u.Byte[12],
                 Addr->u.Byte[13],
                 Addr->u.Byte[14],
                 Addr->u.Byte[15]);
  return v6;
}

Referenced by:

AdtpBuildIPv6Strings
RtlIpv6AddressToStringExW