internal static ActivityState DeserializeFromStream(Stream stream)
{
ActivityState activity = null;
var reader = new BinaryReader(stream);
activity = new ActivityState();
activity.EventCount = reader.ReadInt32();
activity.SessionCount = reader.ReadInt32();
activity.SubSessionCount = reader.ReadInt32();
activity.SessionLenght = Util.DeserializeTimeSpanFromLong(reader.ReadInt64());
activity.TimeSpent = Util.DeserializeTimeSpanFromLong(reader.ReadInt64());
activity.LastActivity = Util.DeserializeDateTimeFromLong(reader.ReadInt64());
activity.CreatedAt = Util.DeserializeDateTimeFromLong(reader.ReadInt64());
activity.LastInterval = Util.DeserializeTimeSpanFromLong(reader.ReadInt64());
// create Uuid for migrating devices
activity.Uuid = Util.TryRead(() => Guid.Parse(reader.ReadString()), () => Guid.NewGuid());
// default value of IsEnabled for migrating devices
activity.Enabled = Util.TryRead(() => reader.ReadBoolean(), () => true);
// default value for AskingAttribution for migrating devices
activity.AskingAttribution = Util.TryRead(() => reader.ReadBoolean(), () => false);
return activity;
}