internal static ReconciliationCookie GetReconciliationCookie(ProvisioningReconciliationConfig provisioningReconciliationConfig, Task.TaskErrorLoggingDelegate errorLogger)
        {
            ITopologyConfigurationSession topologyConfigurationSession = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(ConsistencyMode.IgnoreInvalid, ADSessionSettings.FromRootOrgScopeSet(), 42, "GetReconciliationCookie", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Common\\ProvisioningReconciliationHelper.cs");
            ReconciliationCookie          reconciliationCookie         = null;

            if (provisioningReconciliationConfig.ReconciliationCookies != null && provisioningReconciliationConfig.ReconciliationCookies.Count > 0)
            {
                string empty = string.Empty;
                bool   flag  = false;
                using (MultiValuedProperty <ReconciliationCookie> .Enumerator enumerator = provisioningReconciliationConfig.ReconciliationCookies.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        ReconciliationCookie reconciliationCookie2 = enumerator.Current;
                        if (reconciliationCookie2.Version == ProvisioningReconciliationHelper.CurrentCookieVersion && ProvisioningReconciliationHelper.IsServerSuitable(reconciliationCookie2.InvocationId, topologyConfigurationSession, out empty, out flag))
                        {
                            reconciliationCookie = new ReconciliationCookie(reconciliationCookie2.Version, empty, reconciliationCookie2.InvocationId, reconciliationCookie2.HighestCommittedUsn);
                            if (flag)
                            {
                                break;
                            }
                        }
                    }
                    goto IL_E8;
                }
            }
            Fqdn[] domainControllersInLocalSite = ProvisioningReconciliationHelper.GetDomainControllersInLocalSite(errorLogger);
            if (domainControllersInLocalSite != null)
            {
                foreach (Fqdn fqdn in domainControllersInLocalSite)
                {
                    reconciliationCookie = ProvisioningReconciliationHelper.GetReconciliationCookieForDomainController(fqdn, topologyConfigurationSession, errorLogger);
                    if (reconciliationCookie != null)
                    {
                        break;
                    }
                }
            }
IL_E8:
            if (reconciliationCookie != null)
            {
                return(reconciliationCookie);
            }
            errorLogger(new TaskException(Strings.ErrorNoActiveDCForProvisioningReconciliationCookie), (ErrorCategory)1001, null);
            return(null);
        }
        internal static MultiValuedProperty <ReconciliationCookie> GetReconciliationCookiesForNextCycle(string dc, Task.TaskErrorLoggingDelegate errorLogger)
        {
            MultiValuedProperty <ReconciliationCookie> multiValuedProperty = new MultiValuedProperty <ReconciliationCookie>();
            ITopologyConfigurationSession topologyConfigurationSession     = DirectorySessionFactory.Default.CreateTopologyConfigurationSession(dc, true, ConsistencyMode.IgnoreInvalid, null, ADSessionSettings.FromRootOrgScopeSet(), 126, "GetReconciliationCookiesForNextCycle", "f:\\15.00.1497\\sources\\dev\\Management\\src\\Management\\Common\\ProvisioningReconciliationHelper.cs");

            topologyConfigurationSession.UseConfigNC = false;
            MultiValuedProperty <ReplicationCursor> multiValuedProperty2 = topologyConfigurationSession.ReadReplicationCursors(ADSession.GetDomainNamingContextForLocalForest());

            topologyConfigurationSession.UseConfigNC = true;
            foreach (ReplicationCursor replicationCursor in multiValuedProperty2)
            {
                if (replicationCursor.SourceDsa != null)
                {
                    ADServer adserver = topologyConfigurationSession.FindDCByInvocationId(replicationCursor.SourceInvocationId);
                    if (adserver != null)
                    {
                        string dnsHostName        = adserver.DnsHostName;
                        ReconciliationCookie item = new ReconciliationCookie(ProvisioningReconciliationHelper.CurrentCookieVersion, dnsHostName, replicationCursor.SourceInvocationId, replicationCursor.UpToDatenessUsn);
                        multiValuedProperty.Add(item);
                    }
                }
            }
            return(multiValuedProperty);
        }