// Token: 0x060007B0 RID: 1968 RVA: 0x00036FC0 File Offset: 0x000351C0
        internal static bool IsSelfForwardedEvent(MeetingMessage mtgMessage, MailboxSession session)
        {
            if (mtgMessage == null || mtgMessage.IsExternalMessage)
            {
                return(false);
            }
            Participant participant = null;

            if (OldMessageDeletion.IsSenderSame(mtgMessage.Sender, session, out participant))
            {
                string text = (string)Utils.SafeGetProperty(mtgMessage, MessageItemSchema.ReceivedRepresentingEmailAddress, string.Empty);
                if (text.Equals(session.MailboxOwner.LegacyDn, StringComparison.OrdinalIgnoreCase))
                {
                    return(true);
                }
            }
            return(false);
        }
        // Token: 0x060007AC RID: 1964 RVA: 0x00036880 File Offset: 0x00034A80
        public void PerformCleanUp(MailboxSession itemStore, StoreObject item, CalendarConfiguration mailboxConfig, CalendarItemBase originalCalItem, IEnumerable <VersionedId> duplicates)
        {
            bool flag = false;

            if (mailboxConfig.RemoveOldMeetingMessages && !(item is MeetingForwardNotification))
            {
                this.DeleteOldMessages(itemStore, (MeetingMessage)item, originalCalItem, out flag);
            }
            if (item is MeetingMessage)
            {
                bool           flag2          = false;
                MeetingMessage meetingMessage = (MeetingMessage)item;
                if (meetingMessage.IsRepairUpdateMessage)
                {
                    flag2 = (!flag || (!(meetingMessage is MeetingRequest) && !(meetingMessage is MeetingCancellation)));
                    if (flag2)
                    {
                        meetingMessage.MarkAsOutOfDate();
                        meetingMessage.IsRead = true;
                        try
                        {
                            int num = 3;
                            ConflictResolutionResult saveResults;
                            do
                            {
                                saveResults = meetingMessage.Save(SaveMode.ResolveConflicts);
                                meetingMessage.Load();
                                num--;
                            }while (num > 0 && !CalendarProcessing.CheckSaveResults(meetingMessage, saveResults, meetingMessage.InternetMessageId));
                        }
                        catch (ObjectNotFoundException arg)
                        {
                            flag2 = false;
                            OldMessageDeletion.Tracer.TraceWarning <object, ObjectNotFoundException>((long)this.GetHashCode(), "{0}: Tried to mark a RUM as Outdated, which does not exist anymore. Exception: {1}", TraceContext.Get(), arg);
                        }
                    }
                }
                if (!flag2 && item is MeetingForwardNotification)
                {
                    bool   flag3 = itemStore.IsGroupMailbox();
                    string text  = null;
                    flag2 = (mailboxConfig.RemoveForwardedMeetingNotifications || !meetingMessage.IsResponseRequested || flag3);
                    if (!flag2)
                    {
                        Participant participant = null;
                        flag2 = OldMessageDeletion.IsSenderSame(meetingMessage.From, itemStore, out participant);
                        if (participant != null)
                        {
                            text = participant.EmailAddress;
                        }
                    }
                    string text2;
                    if (flag2)
                    {
                        text2 = string.Format("Deleting MFN message as it was forwarded by the organizer. ParticipantFromEmail: {0}, Message From: {1},  From RoutingType: {2},  Mailbox owner : {3}, Mailboxconfig.RemoveMFN setting {4}, IsResponseRequested {5}, Subject: {6}, IsGroupMailbox: {7} ", new object[]
                        {
                            text ?? "unspecified",
                            meetingMessage.From,
                            (meetingMessage.From != null) ? meetingMessage.From.RoutingType : "unspecified",
                            itemStore.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString(),
                            mailboxConfig.RemoveForwardedMeetingNotifications,
                            meetingMessage.IsResponseRequested,
                            meetingMessage.Subject,
                            flag3
                        });
                    }
                    else
                    {
                        text2 = string.Format("Not deleting MFN message as it was forwarded by someone other than the organizer. ParticipantFromEmail {0}, Message From: {1}, From RoutingType: {2},  Mailbox owner : {3}, Mailboxconfig.RemoveMFN setting {4}, IsResponseRequested {5}, Subject: {6} ", new object[]
                        {
                            text ?? "unspecified",
                            meetingMessage.From,
                            (meetingMessage.From != null) ? meetingMessage.From.RoutingType : "unspecified",
                            itemStore.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString(),
                            mailboxConfig.RemoveForwardedMeetingNotifications,
                            meetingMessage.IsResponseRequested,
                            meetingMessage.Subject
                        });
                    }
                    OldMessageDeletion.Tracer.TraceDebug((long)this.GetHashCode(), text2);
                    MfnLog.LogEntry(itemStore, text2);
                }
                if (!flag2 && OldMessageDeletion.IsSelfForwardedEventAndAccepted(meetingMessage, itemStore, originalCalItem))
                {
                    flag2 = true;
                    OldMessageDeletion.Tracer.TraceDebug((long)this.GetHashCode(), "{0}: Marked the meeting request for deletion as sent to self", new object[]
                    {
                        TraceContext.Get()
                    });
                }
                if (flag2)
                {
                    this.DeleteMessage(itemStore, item);
                }
            }
            if (duplicates != null)
            {
                foreach (VersionedId versionedId in duplicates)
                {
                    itemStore.Delete(DeleteItemFlags.MoveToDeletedItems, new StoreId[]
                    {
                        versionedId
                    });
                    OldMessageDeletion.Tracer.TraceDebug <object, VersionedId>((long)this.GetHashCode(), "{0}: Deleted a duplicate item ID: {1}.", TraceContext.Get(), versionedId);
                }
            }
        }
        // Token: 0x060007AE RID: 1966 RVA: 0x00036C68 File Offset: 0x00034E68
        private void DeleteOldMessages(MailboxSession itemStore, MeetingMessage item, CalendarItemBase originalCalItem, out bool fullUpdateDeleted)
        {
            fullUpdateDeleted = false;
            string text = (string)Utils.SafeGetProperty(item, ItemSchema.InternetMessageId, "<null>");

            if (item is MeetingRequest || item is MeetingCancellation)
            {
                bool flag = (bool)Utils.SafeGetProperty(item, MeetingMessageSchema.HijackedMeeting, false);
                if (flag)
                {
                    CalendarAssistantLog.LogEntry(itemStore, "Message {0} has been hijacked, skipping deletion of old messages.", new object[]
                    {
                        text
                    });
                    return;
                }
            }
            int num = (int)Utils.SafeGetProperty(item, CalendarItemBaseSchema.AppointmentSequenceNumber, -1);

            if (num < 0)
            {
                OldMessageDeletion.Tracer.TraceError <object, string>((long)this.GetHashCode(), "{0}: Message does not have a sequence number, skipping {1}", TraceContext.Get(), text);
                CalendarAssistantLog.LogEntry(itemStore, "Message does not have a sequence number, skipping {0}", new object[]
                {
                    text
                });
                return;
            }
            if (OldMessageDeletion.ShouldIgnoreFolder(itemStore, item.ParentId))
            {
                return;
            }
            string text2 = (string)Utils.SafeGetProperty(item, MessageItemSchema.ReceivedRepresentingEmailAddress, string.Empty);
            string text3 = (string)Utils.SafeGetProperty(item, CalendarItemBaseSchema.OrganizerEmailAddress, string.Empty);

            byte[] array = (byte[])Utils.SafeGetProperty(item, CalendarItemBaseSchema.GlobalObjectId, null);
            if (array == null)
            {
                OldMessageDeletion.Tracer.TraceError <object, string>((long)this.GetHashCode(), "{0}: Message {1} does not have a globalObjectId, skipping the message.", TraceContext.Get(), text);
                CalendarAssistantLog.LogEntry(itemStore, "Message {0} does not have a globalObjectId, skipping the message.", new object[]
                {
                    text
                });
                return;
            }
            OldMessageDeletion.Tracer.TraceDebug <object, string, string>((long)item.GetHashCode(), "{0}: Received representing={1} sent representing={2}", TraceContext.Get(), text2, text3);
            CalendarAssistant.TracerPfd.TracePfd((long)item.GetHashCode(), "PFD IWC {0} {1}: Received representing={2} sent representing={3}", new object[]
            {
                22679,
                TraceContext.Get(),
                text2,
                text3
            });
            if (!itemStore.IsGroupMailbox() && string.Compare(text2, text3, true) == 0)
            {
                Participant participant = null;
                if (!OldMessageDeletion.IsSenderSame(item.Sender, itemStore, out participant))
                {
                    return;
                }
                AggregateOperationResult aggregateOperationResult = itemStore.Delete(DeleteItemFlags.MoveToDeletedItems, new StoreId[]
                {
                    item.Id
                });
                OldMessageDeletion.Tracer.TraceDebug <object, string, OperationResult>((long)this.GetHashCode(), "{0}: Moving the item {1} to the Deleted Items folder returned:{2}", TraceContext.Get(), text, aggregateOperationResult.OperationResult);
                return;
            }
            else
            {
                if (item.IsRepairUpdateMessage)
                {
                    RUMOldMessageDeletion.CleanUp(itemStore, item, originalCalItem, OldMessageDeletion.Tracer, out fullUpdateDeleted);
                    return;
                }
                OldMessageDeletion.LatestItemInfo latestItemInfo;
                latestItemInfo.FullUpdateDeleted      = fullUpdateDeleted;
                latestItemInfo.RollingHighlight       = (int)Utils.SafeGetProperty(item, CalendarItemBaseSchema.ChangeHighlight, 0);
                latestItemInfo.LatestOldStartTime     = ExDateTime.MinValue;
                latestItemInfo.LatestOldEndTime       = ExDateTime.MinValue;
                latestItemInfo.LatestOldLocationStr   = string.Empty;
                latestItemInfo.LatestSequenceNumber   = -1;
                latestItemInfo.LatestItemId           = item.Id;
                latestItemInfo.LatestClientSubmitTime = (ExDateTime)Utils.SafeGetProperty(item, ItemSchema.SentTime, ExDateTime.MinValue);
                this.QueryAndDeleteMatchingItems(itemStore, item, originalCalItem, array, text, text3, num, ref latestItemInfo);
                fullUpdateDeleted = latestItemInfo.FullUpdateDeleted;
                return;
            }
        }