// Token: 0x06000012 RID: 18 RVA: 0x000029F4 File Offset: 0x00000BF4
        internal static T[] CreateAssistantTypes <T>(InfoworkerAssistants.AssistantConstructor <T>[] assistantTypes)
        {
            List <T> list = new List <T>();

            foreach (InfoworkerAssistants.AssistantConstructor <T> assistantConstructor in assistantTypes)
            {
                if (!InfoworkerAssistants.IsDisabled(assistantConstructor.Name) && (assistantConstructor.IsEnabledDelegate == null || assistantConstructor.IsEnabledDelegate()))
                {
                    bool flag = false;
                    Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_CreatingAssistant, null, new object[]
                    {
                        assistantConstructor.Name
                    });
                    try
                    {
                        list.Add(assistantConstructor.ConstructorDelegate());
                        flag = true;
                    }
                    finally
                    {
                        if (!flag)
                        {
                            Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_FailCreateAssistant, null, new object[]
                            {
                                assistantConstructor.Name
                            });
                        }
                    }
                    InfoworkerAssistants.TracerPfd.TracePfd <int, string>(3L, "PFD IWS {0} Assistant {1} is Enabled", 18839, assistantConstructor.Name);
                }
                else
                {
                    Globals.Logger.LogEvent(InfoWorkerEventLogConstants.Tuple_DisabledAssistant, null, new object[]
                    {
                        assistantConstructor.Name
                    });
                }
            }
            return(list.ToArray());
        }
        // Token: 0x06000011 RID: 17 RVA: 0x000028D4 File Offset: 0x00000AD4
        internal static void DeleteWatermarksForDisabledAndDeprecatedAssistants(object stateNotUsed)
        {
            List <Guid> disabledEventAssistants = new List <Guid>(InfoworkerAssistants.EventBasedAssistantTypes.Length);

            foreach (InfoworkerAssistants.EventAssistantConstructor eventAssistantConstructor in InfoworkerAssistants.EventBasedAssistantTypes)
            {
                if (InfoworkerAssistants.IsDisabled(eventAssistantConstructor.Name))
                {
                    ExTraceGlobals.AssistantBaseTracer.TraceDebug <string>(0L, "[InfoworkerAssistants]: Event assistant '{0}' is disabled.", eventAssistantConstructor.Name);
                    disabledEventAssistants.Add(eventAssistantConstructor.Identity);
                }
            }
            disabledEventAssistants.AddRange(InfoworkerAssistants.deprecatedAssistants);
            if (disabledEventAssistants.Count == 0)
            {
                ExTraceGlobals.AssistantBaseTracer.TraceDebug(0L, "[InfoworkerAssistants]: There are no disabled or deprecated assistants.");
                return;
            }
            ExTraceGlobals.AssistantBaseTracer.TraceDebug <int>(0L, "[InfoworkerAssistants]: There are {0} disabled and/or deprecated assistants.", disabledEventAssistants.Count);
            Exception exception = null;

            try
            {
                GrayException.MapAndReportGrayExceptions(delegate()
                {
                    try
                    {
                        using (ExRpcAdmin exRpcAdmin = ExRpcAdmin.Create("Client=EBA", null, null, null, null))
                        {
                            MdbStatus[] array = exRpcAdmin.ListMdbStatus(false);
                            foreach (MdbStatus mdbStatus in array)
                            {
                                if (DatabaseManager.IsOnlineDatabase(mdbStatus))
                                {
                                    foreach (Guid guid in disabledEventAssistants)
                                    {
                                        MapiEventManager mapiEventManager = MapiEventManager.Create(exRpcAdmin, guid, mdbStatus.MdbGuid);
                                        ExTraceGlobals.AssistantBaseTracer.TraceDebug <Guid, string>(0L, "[InfoworkerAssistants]: Deleting watermarks for consumer {0} on database {1}.", guid, mdbStatus.MdbName);
                                        mapiEventManager.DeleteWatermarks();
                                    }
                                }
                            }
                        }
                    }
                    catch (MapiExceptionVersion exception2)
                    {
                        exception = exception2;
                    }
                    catch (MapiExceptionMdbOffline exception3)
                    {
                        exception = exception3;
                    }
                    catch (MapiExceptionExiting exception4)
                    {
                        exception = exception4;
                    }
                    catch (MapiExceptionNetworkError exception5)
                    {
                        exception = exception5;
                    }
                    catch (MapiExceptionADUnavailable exception6)
                    {
                        exception = exception6;
                    }
                    catch (MapiExceptionNoAccess exception7)
                    {
                        exception = exception7;
                    }
                });
            }
            catch (GrayException exception)
            {
                GrayException exception8;
                exception = exception8;
            }
            if (exception != null)
            {
                ExTraceGlobals.AssistantBaseTracer.TraceError <Exception>(0L, "[InfoworkerAssistants]: Failed to cleanup the watermarks at this time. Exception: {0}", exception);
            }
        }