public static ushort CheckSum(Stream s)
{
int sum = 0;
var position = (int)s.Position;
var first = s.ReadByte();
while (first != -1)
{
var second = s.ReadByte();
if (second != -1)
{
sum += (first << 8) +second;
first = s.ReadByte();
}
else
{
sum += first;
first = -1;
}
}
s.Position = position;
sum = (sum >> 16) + (sum & 0xFFFF);
sum += (sum >> 16);
return (ushort) ~sum;
}