internal DynamicManifestTraceEventData(Action<TraceEvent> action, ProviderManifest manifest)
     : base(action, 0xFFFE, 0, "ManifestData", Guid.Empty, 0, null, manifest.Guid, manifest.Name)
 {
     this.manifest = manifest;
     payloadNames = new string[] { "Format", "MajorVersion", "MinorVersion", "Magic", "TotalChunks", "ChunkNumber" };
     payloadFetches = new PayloadFetch[] {
     new PayloadFetch(0, 1, typeof(byte)),
     new PayloadFetch(1, 1, typeof(byte)),
     new PayloadFetch(2, 1, typeof(byte)),
     new PayloadFetch(3, 1, typeof(byte)),
     new PayloadFetch(4, 2, typeof(ushort)),
     new PayloadFetch(6, 2, typeof(ushort)),
 };
     Action += action;
 }
 void IFastSerializable.FromStream(Deserializer deserializer)
 {
     eventID = (TraceEventID)deserializer.ReadInt();
     task = (TraceEventTask)deserializer.ReadInt();
     deserializer.Read(out taskName);
     deserializer.Read(out taskGuid);
     opcode = (TraceEventOpcode)deserializer.ReadInt();
     deserializer.Read(out opcodeName);
     deserializer.Read(out providerGuid);
     deserializer.Read(out providerName);
     deserializer.Read(out MessageFormat);
     deserializer.Read(out lookupAsWPP);
     int count;
     deserializer.Read(out count);
     payloadNames = new string[count];
     for (int i = 0; i < count; i++)
         deserializer.Read(out payloadNames[i]);
     deserializer.Read(out count);
     payloadFetches = new PayloadFetch[count];
     for (int i = 0; i < count; i++)
     {
         payloadFetches[i].offset = (ushort)deserializer.ReadInt16();
         payloadFetches[i].size = (ushort)deserializer.ReadInt16();
         var typeName = deserializer.ReadString();
         if (typeName != null)
             payloadFetches[i].type = Type.GetType(typeName);
         IFastSerializable dummy;
         deserializer.Read(out dummy);           // For map when we use it.  
     }
 }